Metode de bază directe și iterative pentru rezolvarea sluchilor matematice

Principalele metode directe și iterative pentru rezolvarea SLAE în MathCAD

După cum se știe, soluția sistemelor de ecuații algebrice liniare (SLAE) este un tip foarte general de probleme în practică. Teoria poate fi citită prin referință, dar aici vom oferi calculele de bază pentru metode directe (analitice) și iterative (aproximative) pentru rezolvarea SLAU.







Să începem cu linii drepte. Metoda clasică a matricei inverse din MathCAD este ușor de implementat utilizând funcția standard lsolve sau prin operația de inversare a matricei, codul nu va fi dat din cauza trivialității sale. Deja doi au întrebat "și cum să găsească o soluție prin metoda matricei inverse?" :)
Introducerea datelor, ca în imaginea de mai jos, sub date, scrieți una dintre formulele x: = A -1 * b sau x: = lsolve (A, b)
Apoi face x =

Dar metoda lui Cramer este programată. Elementul vectorului de soluție xi din acesta este obținut ca o fracțiune, numitorul căruia este determinantul matricei sistemului, iar numeratorul este determinantul matricei Ai. obținut din înlocuirea originală a coloanei i cu coloana cu termeni liberi b. Pentru comoditate, vom numi rânduri și coloane de matrice în întregul document, adică vom seta valoarea variabilei de sistem ORIGIN: = 1. De asemenea, definim matricea și vectorul din partea dreaptă a sistemului care sunt comune tuturor metodelor:


Definiția test SLAU

Condiția existenței și unicitatea soluției SLAE în toate cazurile este condiția det A ≠ 0. și anume determinantul lui A nu este zero. De asemenea, este logic să se verifice soluția obținută prin calcularea valorii reziduului. egală cu norma diferenței vectorilor A * x (x este soluția găsită) și b. În mod ideal, reziduul ar trebui să fie zero, dar din cauza acumulării inevitabile a erorilor în operațiuni peste numere reale, va fi egal cu un număr mic ε. corespunzătoare erorii metodei. În MathCad scalar operatorul „modul“, cu bara de instrumente de calculator în aplicarea diferenței vectorului va valoare doar reziduală, verificați această afirmație este pe un mic test:

Cu toate acestea, am implementat metoda Cramer și am verificat soluția:


Metoda Cramer pentru rezolvarea SLAE

În corpul funcției det - nu un modul, ci un buton similar "Identifier" din panoul "Matrix"!

Metoda clasică Gauss cu reducerea matricei în forma triunghiulară superioară este studiată în detaliu în cursul de bază al matematicii superioare. Punem în aplicare cea mai simplă versiune a acestuia, alegând elementul de conducere pe diagonala principală a matricei, adică lucrăm cu presupunerea că valoarea A1,1, ≠ 0. Deoarece această subrutină este un nivel "zero", să o numim Gauss0. iar Gauss mai complicat va fi scris separat.


Programare simplă a metodei Gaussian în MathCAD







Pentru comoditate, vectorul din partea dreaptă b este scris ca o coloană (n + 1) a matricei A. O astfel de matrice a sistemului se numește extinsă.

Implementarea unei eliminări Gaussian „plin“ cu pivotarea (și permutarea rânduri ale matricei, dacă este necesar) formate în documentul atașat la articol MathCAD, cel puțin, un sistem cu zerouri pe diagonala principală a matricei subrutina Gauss a decis. Parametrul său suplimentar este eroarea ε. începând de la care valoarea | Ai, j |<ε считается равным нулю. В случае ошибки (нет решения) подпрограмма возвращает вектор из n значений "бесконечность".

În practică, este ușor pentru a vedea comune tuturor metodelor de dezavantaje directe ale abordării - complexitatea calculelor, care necesită preluare inversele sau factorii determinanți considerați, în urma din aceasta acumulare destul de repede de erori, în cele din urmă, incapacitatea de a găsi o soluție la o predeterminată. mai degrabă decât precizia inerentă algoritmului.

Într-o anumită măsură, aceste iterații pot fi evitate prin metode iterative care aproximează succesiv soluția prin formule ale formulei xi (k + 1) = f (xi (k)). unde k = 0,1. este numărul pasului, atâta timp cât măsura aleasă a diferenței dintre doi vectori de aproximare vecini | x (k + 1) -x (k) | nu devine mai mică decât valoarea mică specificată ε. În cel mai simplu caz, soluția SLAE cu o matrice 2 x 2 a metodei Jacobi (și o metodă simplă de iterație) va arăta astfel:

Toate valorile necunoscute ale lui xi sunt prezente atât în ​​partea stângă, cât și în cea dreaptă a noilor ecuații. Alegerea unui anumit vector al aproximării inițiale x (0). noi calculam noua aproximație x (1). apoi înlocuiți-o în partea dreaptă a ecuațiilor și calculați x (2), etc. înainte de îndeplinirea condiției de convergență. Și, apropo, este destul de simplă - metoda Jacobi converge dacă matricea sistemului are o predominanță diagonală. adică pe diagonala principală sunt cele mai mari elemente ale liniilor lor. Matricea noastră de testare are deja o predominanță diagonală, iar în cele mai multe cazuri acest lucru se poate realiza prin efectuarea de transformări asupra ecuațiilor sistemului, similar cu procedeul Gauss extins.

Alegerea vectorului de aproximație inițială x (0) în practică este de obicei simplu, luând x (0) = b. adică vectorul din partea dreaptă a sistemului. Se poate pur și simplu "anula" vectorul x (0).

Am ajuns la următoarea procedură de decizie:


Soluția SLAU prin metoda simplă de iterație (Jacobi)

Vă rugăm să rețineți că trebuie să „trișeze“ în calculul s1 sumele și s2 - MathCad pur și simplu să nu fie în măsură să calculeze suma limita inferioară a însumării este 1 și 0 = partea de sus (sau n partea de jos și de sus n-1). Din același motiv, se efectuează verificări suplimentare în procedura Gauss.

În ciclul principal "infinit" al subrutinei, este logic să adăugați o ieșire de urgență de la declarația de pauză. de exemplu, executând 10.000 de pași.

De asemenea, în această și în următoarea metodă, în linia cu pauză, criteriul de ieșire max (x1-x0) | ≤ε ar fi mai precis. unde | | | - pictograma modulului numeric din panoul calculatorului.

O metoda Gauss-Seidel iterativa diferă de metoda de iteratii simple, numai prin aceea că pentru a calcula componenta i -lea (k + 1) th aproximare a soluțiilor dorite au fost utilizate pentru vectorul calculat în ea. și anume (k + 1), noile valori ale primelor componente i-1. mai degrabă decât pur și simplu luând întreg vectorul x0 din pasul anterior. rutina noastra este suficient pentru a înlocui X0 X1 în calcularea valorii s1 declarație :) soluții de precizie I pentru a utiliza testul a crescut cu patru.

P.S. Și mai multe despre metodele directe "gauss-like" pentru rezolvarea SLAU. Dacă nu aveți nevoie de programare pas cu pas, ci mai degrabă de utilizarea funcțiilor standard, există o modalitate mai ușoară. Utilizarea funcției standard poate mări sistem pentru a primi matricea extinsă (punând „aproape“ matricea A și vectorul b), dar folosind Rref matrice duce la o formă pas cu unitatea de bază minoră. Apoi rămâne să se extragă soluția utilizând metoda submatrix (ultima coloană a matricei returnată prin metoda rref).


O altă modalitate de a rezolva SLAE prin metoda Gauss în MathCAD







Articole similare

Trimiteți-le prietenilor: