Calcularea și aproximarea datelor în MATLAB

Algoritmul prin care funcția fzero

După cum sa menționat deja în secțiunea Metode de bază pentru accesarea fzero. la accesarea fzero este posibil să specificați:

  • sau o abordare inițială a rădăcinii;
  • sau un segment pe care funcția studiată se bazează pe valori ale diferitelor semne.

Dacă se dă o aproximație inițială, atunci fzero începe să caute un segment care conține rădăcina, adică astfel, la limitele cărora se schimbă semnul funcției studiate Metoda de căutare pentru acest segment implementată în fzero este descrisă mai jos în secțiunea Căutare a funcției fzero a intervalului care conține rădăcina. Atunci când segmentul este găsit, algoritmul de rafinament rădăcină bazat pe mai multe metode de rezolvare numerică a ecuațiilor începe să funcționeze (vezi secțiunea algoritmului de rafinare rădăcină din funcția fzero). Dacă, de la început, un segment a fost specificat în fzero, la limitele cărora funcția schimbă semnul, atunci acest algoritm pentru rafinarea rădăcinilor începe imediat să funcționeze.







Căutați în funcția fzero a intervalului care conține rădăcina

Dacă se numește fzero cu o abordare inițială a rădăcinii

și nu cu un segment la limitele căruia semnul funcției investigate se schimbă, atunci un astfel de segment este căutat pentru a separa rădăcina. Algoritmul de separare a rădăcinilor în funcția fzero este destul de simplu.

Mai întâi, selectați pasul egal (pentru nu egal cu 0) sau (pentru egal 0). Apoi, valoarea funcției este calculată la un punct și este comparată cu valoarea funcției studiate la un punct. Dacă există semne diferite, atunci rădăcina este separată, iar dacă semnele coincid, atunci spațiul se extinde spre dreapta de la punctul la, iar semnele funcției la punctele a și b sunt comparate. În cazul în care acestea sunt diferite, atunci rădăcina este separată, iar dacă nu, bucla este o creștere secvențială pas în timp și de extindere a lacunei la stânga și apoi dreapta din punctul de funcții de verificare la limitele de caractere. De îndată ce semnele devin diferite, separarea rădăcinii încetează, iar algoritmul de rafinament, descris în Algoritmul pentru rafinarea rădăcinii în fzero, începe să funcționeze.

În algoritmul de separare a rădăcinilor descris mai sus, se face o verificare: sunt valorile funcției studiate la punctele rezultate finite și reale. Dacă valorile funcției s-au dovedit a fi complexe sau dacă depășirea a avut loc în timpul calculului cu calcule în virgulă mobilă, operația Fzero se oprește și în fereastra de comandă apare un mesaj corespunzător.

Un astfel de algoritm nu poate să separe rădăcina cu o aproximație inițială fără succes. De exemplu, luăm ecuația

și setați aproximația inițială la o valoare de 500. Să urmăm fiecare pas al algoritmului Fzero. Pentru a face acest lucru, am setat structura opts cu câmpul Display, a cărui valoare este setată la "iter", ca al treilea argument de intrare. Structura opt este formată folosind funcția optimset (a se vedea secțiunea Argumentele de intrare din fzero).

Obținem că după prima lărgire a spațiului spre stânga, există o ieșire pentru ambele rădăcini, iar o creștere suplimentară a decalajului duce la depășire.

Setarea valorii = 498,5 duce la o separare reușită a uneia dintre rădăcinile deja în a doua etapă (egală cu 498, deoarece mai întâi spațiul se lărgește spre stânga) și rafinarea ulterioară. În secțiunea Metode de bază de accesare a fzero, un exemplu de ecuație







indicație pentru care 3.2 ca o aproximare inițială a condus pentru a opri fzero funcționării datorită ne îndepărta de domeniul functiei (radicand a devenit negativ) și apariția unor valori complexe la filiala rădăcină.

Aceste exemple arată importanța unui studiu preliminar al ecuației pentru a separa rădăcinile ei.

Algoritm pentru perfecționarea rădăcinii în funcția fzero

Dacă rădăcina este deja separată sau atunci când a fost chemat un apel la fzero încă de la început, a fost definit un segment la limitele cărora funcția examinată modifică semnul, atunci rădăcina este rafinată. Pentru aceasta, se folosește un algoritm care este o combinație a trei metode pentru soluția numerică a ecuațiilor neliniare:

  • metoda de divizare pe jumătate (bisecție);
  • metoda secantarilor (intercalare secundara sau liniara);
  • metodă inversă de interpolare patratică.

Oferim informații succinte despre aceste metode.

Metoda divizării se bazează pe teorema Bolzano-Cauchy, conform căreia o funcție continuă care ia valori ale diferitelor semne pe limitele unui interval are cel puțin o rădăcină în acest interval. Metoda este după cum urmează.

  1. Se specifică intervalul [a, b]. la limitele cărora funcția ia valori de semne diferite (se presupune că funcția este continuă).
  2. Segmentul este împărțit în jumătate cu un punct, iar jumătățile rezultate [a, c] și [c, b] sunt alese celui la limitele căruia semnele sunt diferite. Jumătatea selectată a segmentului este notată cu [a, b].
  3. Aceasta continuă până când lungimea segmentului rezultat este mai mică decât precizia specificată. Deoarece rădăcina unei funcții continue este întotdeauna între punctele a și b. atunci pentru o aproximare cu o precizie dată rădăcinei putem lua fie a. sau un punct b (a se vedea figura).

Pentru funcțiile continue, metoda de divizare divizată duce întotdeauna la găsirea rădăcinii cu o precizie dată. Neajunsul său este convergența prea lentă, la fiecare etapă eroarea scade doar de 2 ori. De aceea fzero arsenal conține două metode: o metodă de secants și interpolarea pătratică inversă converg mai repede la partea superioară decât metoda de împărțire în două, în cazul în care funcția îndeplinește anumite condiții suplimentare. Astfel, în practică, de regulă, se dovedește că fzero găsește rădăcina mult mai rapid decât metoda de divizare divizată.

Notă.
Dacă metodele iterative sunt utilizate pentru a rafina rădăcina ecuației, folosind aproximația curentă xk, se construiește o nouă aproximație xk + 1. atunci ele pot fi comparate în ordinea convergenței. Prin ordinea de convergență a metodei iterative înțelegem următoarele. Dacă ek = xk -x * este eroarea la fiecare iterație (aici x * este soluția exactă a ecuației), atunci ordinea convergenței este numărul p astfel:

Notă.
Atunci când se compară eficiența metodelor numerice pentru a rafina rădăcina unei funcții, trebuie să se țină seama nu numai de ordinea convergenței metodelor. Faptul este că unele metode necesită calcularea la fiecare iterație nu numai a funcției inițiale, ci și găsirea valorilor unor alte funcții (de exemplu, derivatul). Cea mai bună este metoda care vă permite să găsiți rădăcina cu o precizie dată pentru cel mai mic număr de calcule ale funcției. deoarece aceasta este operația cea mai scumpă atunci când se specifică rădăcina, și nu metoda care necesită mai puține iterații.

Să ne îndreptăm acum spre a doua metodă de rafinare a rădăcinii, folosită în algoritmul funcției fzero.

Metoda Secant este aceea că sunt alese două puncte de pornire, prin care secțiunea este desenată. Ca o nouă aproximare a rădăcinii, este luată abscisa intersecției secantului și a axei Ox (a se vedea figura).

-7 aici este cauzată de eroarea în găsirea valorilor proprii ale funcției de matrice însoțitoare eig, utilizată în algoritmul rădăcinilor funcției. Coeficienții polinomali înșiși s-au găsit exact.

Acum schimbați coeficientul x 11 în polinomul original cu 10 -5 și găsiți rădăcinile polinomului cu astfel de coeficienți.

Obținem că cele șase rădăcini ale polinomului devin complexe cu o parte imaginară suficient de mare în comparație cu perturbarea coeficientului.

Faptul că rădăcinile complexe au apărut poate fi verificat prin construirea unui grafic al unui polinom cu coeficienți perturbați







Trimiteți-le prietenilor: