Optimizare numerică în matlab

Bună ziua, dragi cititori. Continuăm să înțelegem Matlab. Și astăzi, tema noastră este legată de optimizarea numerică - găsirea extrema locală și globală a funcțiilor uneia sau mai multor variabile în mediul Matlab.







Informații generale

Deci, în acest bloc nimic despre Matlab nu va fi doar informații despre conceptul de optimizare. Acest concept este redus la termenii minimului și maximului funcției, sau, pe scurt, la extreme.

Cel puțin, înțelegem o valoare a unei funcții care, în anumite circumstanțe ale acestei funcții, presupune cea mai mică valoare dintre toate valorile posibile din acest cartier. În consecință, valoarea maximă este cea mai mare valoare a funcției într-un cartier.

Dacă nu este clar - aici este un exemplu simplu cu toată parabola cunoscută:

Optimizare numerică în matlab

Această funcție are un minim și este la punctul x = 0. Acest punct este numit punctul minim, iar valoarea însăși a acestei funcții este minimă (este de asemenea 0). Nu există nici un maxim pentru această funcție, dar dacă funcția s-ar întoarce cu susul în jos, ar apărea.

Deseori există funcții complexe care au mai multe minime și maxime. Și în acest caz, aceștia împărtășesc conceptele de extreme locale și globale. Local - acesta este extremul care este definit într-o anumită zonă și global - pe întregul domeniu al definiției funcției. Figura de mai sus arată minimul global al parabolei.

Căutați extreme în Matlab

Și acum, când ați cunoscut cumva ideile de optimizare și găsirea extremumurilor unei funcții, putem trece la găsirea maximelor și a minimelor în Matlab. În plus, ca de obicei, vom discuta exemple de complexitate variată. Unele dintre exemple vor conține comenzile Matlab standard pentru a găsi funcția minimă și maximă, iar cealaltă parte este implementarea metodei de la zero.

Metode standard Matlab

Să analizăm 2 probleme de a găsi minimul în Matlab:

1 exemplu. Calculați minimul funcției f (x) = -x 1 / x. care au definit grafic intervalul de localizare. Calculele ar trebui efectuate cu un pas minim în argumentul 1 * 10 -5

Mai întâi, creați un script care afișează această funcție. Aici este codul pentru aceasta:

Rulați scriptul și obțineți:

Optimizare numerică în matlab







Conform graficului funcției, concluzionăm că există un minim, iar coordonatele sale sunt în intervalul 2.5 - 3, adică scurtăm intervalul minim de căutare.

Acum creați un alt script, dați-i numele first.m și atribuiți funcția acestuia:

Deci, în acest m-fișier am definit funcția. Acum, în fereastra de comandă vom scrie următorul cod:

Și obținem următoarele valori:
x = 2,7183 - coordonatele punctului minim
y = -1.4447 - valoarea minimă

În această parte a codului, am folosit metoda Matlab standard pentru a găsi minimul funcției - fminbnd. trecem 3 parametri - funcția însăși și intervalele pentru găsirea minimului. Trebuie remarcat faptul că această metodă este potrivită numai pentru funcțiile care depind de o variabilă.

Deci, pentru această sarcină am creat 2 fișiere script, pe care le puteți descărca la sfârșitul articolului.

2 exemplu. Calculați minimul unei funcții a două variabile x 4 + y 4 -2x 2 + 4xy-2y 2 +1 cu o precizie de 1 * 10-5.
Coordonatele punctului inițial de căutare [1.0, -1.0].

În primul rând, vom construi un grafic al unei funcții a două variabile - pentru aceasta vom crea un script nou și vom scrie acest cod acolo:

Funcția de navigare vă permite să construiți grafică tridimensională și să afișați profunzimea valorilor funcțiilor pentru o mai bună înțelegere. Rulați scriptul - în cele din urmă, acesta este graficul:

Optimizare numerică în matlab

După cum se poate observa din grafic, există două secțiuni în care există un minim local (zone cu albastru închis), iar sarcina noastră este să găsim coordonatele și valorile acestor două puncte. Vom folosi instrumentele standard ale Matlab și vom crea un nou script numit second.m, în care vom scrie codul:

Apoi, pe linia de comandă, ca și pentru prima sarcină, scriem funcția standard Matlab:

Avem următoarea concluzie:

Pentru a găsi minimele din Matlab de această dată, am folosit funcția fminsearch. Această funcție implementează metoda simplex - metoda Nelder-Mead. În derivare am obținut mai multe variabile: în z au fost înregistrate valorile coordonatelor punctelor minime, în chiar valoarea minimă a acestui minim. Iar în variabilele exitflag și output, sunt plasate condițiile de întrerupere a procesului de căutare și de optimizare.

Ca urmare, am primit din nou 2 m-fișier.

Metoda lui Newton Matlab

Acum, să încercăm să punem în aplicare metoda Newton pentru optimizarea funcției.

3 exemplu. Newton pentru a găsi minim punctul x * și valoarea minimă a funcției f * f (x) = (x-2) 4 -lnx xє intervalul [2, 3] precizia c 10 -7

În primul rând, să creăm un script nou și să îl numim Newton.m. Apoi vom scrie codul în el:

O funcție complet inteligibilă care funcționează cu primul și al doilea derivat al unei funcții de simbol, pe care o primește ca parametru. De asemenea, parametrii acceptă o gamă. Această funcție returnează coordonatele punctului și valoarea extremă.
Acum trebuie să apelăm această funcție în fereastra de comandă:

În cele din urmă, sa dovedit:
Xk = 2,4663
Yk = -0,8554

Nu dați un grafic, dar puteți verifica dacă valorile sunt găsite corect. Este important să spunem că această metodă vă permite să găsiți numai un extremum local și dacă există mai multe extreme în intervalul selectat, atunci metoda poate să nu fie cea care vă este necesară.

De asemenea, este foarte important să specificați cât mai restrâns un interval de căutare posibil, altfel metoda ar putea să nu funcționeze corect, mai ales cu funcții periodice cum ar fi cos (x), etc.

concluzie

Ei bine, în acest articol am analizat câteva metode pentru a găsi extreme în Matlab. Am folosit ambele metode standard și am implementat metoda Newton în mediul Matlab. Codul sursă este ușor mai mic.
Descărcați sursa

Distribuiți acest link:







Trimiteți-le prietenilor: