Dacă există un rând zero în matrice, toate rândurile de sub ea ca zero; informatică,

Găsirea unor soluții la un sistem de ecuații liniare prin Gauss

1. în cazul în care există un rând zero în matrice, toate rândurile de sub ea ca zero;

2. Să aij nu sunt egale cu 0 - primul element nenul într-un rând cu indicele i, adică Elementele ail = 0 pentru l și l = i

Viteza de matrice arată astfel:

Aici primele pătrate întunecate marcate elemente nenule ale matricei rânduri. Alb portretizat de zero elemente, gri - elemente arbitrare.

Gauss algoritm utilizează matricea elementară a două tipuri.

· Conversia primului tip: două rânduri ale matricei sunt interschimbate, în timp ce semnele tuturor elementelor de una din liniile sunt inversate.

· Transformarea doilea tip: alt rând se adaugă la același rând al matricei înmulțit cu un număr arbitrar.

Transformările elementare păstra determinant și rangul matricei, și o multitudine de soluții ale unui sistem liniar. Algoritmul de rezultate Gauss într-o matrice arbitrară de transformări elementare la forma esalon. Pentru determinant matrice pătratică în trepte este egal cu produsul elementelor diagonale, iar rangul - numărul de linii nenule (rang prin definiție este dimensiunea deschiderii liniare a rândurilor matricei).

Gauss în versiunea matematică este după cum urmează:

1. cauta primul element de nenulă în prima coloană. În cazul în care toate elementele din prima coloană sunt zero, atunci vom merge la coloana a doua, și așa mai departe. Dacă găsiți un element non-zero în rândul k, apoi cu ajutorul unor transformări elementare ale primului tip ne schimbăm primul și rândul k, asigurându-se că primul element al primului rând nu este zero;

2. folosind transformarea elementară al doilea tip, zero afară toate elementele din prima coloană din al doilea element. În acest scop, numărul rândului k, pentru a scădea primul rând înmulțit cu coeficientul ak1 / A11.

3 trece la coloana a doua (j-lea sau în cazul în care toate elementele primei coloane sunt zero), și ia în considerare în continuare doar o parte a matricei, începând cu a doua linie sau mai mică. Din nou, repetați pașii 1) și 2), până când, până când vom reduce matricea la eșalonul de formă.

Varianta de programare a lui Gauss are trei diferențe de matematică:

1. indexuri de rânduri și coloane ale matricei pornind de la zero, mai degrabă decât una;

2. suficient pentru a găsi un non-zero, element din coloana. În programarea, toate operațiunile cu numere reale sunt realizate aproximativ, astfel încât putem presupune că egalitatea exactă a numerelor reale nu se întâmplă. Unele compilatoare emite chiar avertismente pentru fiecare test de funcționare pentru egalitatea de numere reale. Prin urmare, în loc de a verifica cu privire la numărul de dispariție AIJ ar trebui să compare ij valoare absolută # 8204; cu un număr foarte mic # 949; (De exemplu, # 949; = 0.00000001). Dacă ij # 8204 =<ε, то следует считать элемент aij нулевым;

3. după resetarea elementelor coloanei j-a, de la linia i + 1, avem de la k-lea rând, unde k> i, se adaugă rândul i-lea înmulțit cu un factor r = -akj / aij:

Acest circuit funcționează în mod normal, numai în cazul în care r raportul dintre valoarea absolută nu depășește unitate. În caz contrar, erorile de rotunjire sunt multiplicate cu raportul de mare și, astfel, crește exponențial. Matematicienii numesc acest fenomen instabilitatea schemei de calcul. În cazul în care sistemul de calcul este instabil, atunci rezultatele obținute cu acesta nu au legătură cu problema inițială. În acest caz, circuitul este stabil atunci când raportul r = -akj / aij nu depășească o unitate. Pentru a face acest lucru, inegalitatea Prin urmare, atunci când caută pentru rezolvarea element din coloana j-lea nu este necesară pentru a găsi primul element de zero disponibil, iar valorile maxime absolute. Dacă el nu depășesc # 949;, atunci vom presupune că toate elementele sunt coloana zero; în caz contrar schimba linia, uneori, pune-l pe partea de sus a coloanei, și apoi la zero dintr-o coloană de transformări elementare din a doua categorie.

Ideea de bază a metodei matricei sistemului Gauss- duce la forma diagonală, adică toate elementele diagonalei principale a zerourilor. Pentru a aduce matricea acestui formular, vom alege linia de sus a matricei, și scade din toate celelalte linii, inmultirea, pentru fiecare rând de un anumit coeficient, astfel încât cea mai din stânga coloanei sub diagonala principala este umplut cu zerouri. Linia scade cu un factor numit rândul curent. Alegerea prima linie de curent de sus și apoi tot mai jos, vom realiza că toate elementele de sub diagonala principală este egal cu zero. Această parte a liniilor de metoda de prelucrare a liniei curente și va paraleliza.

Metoda constă în eliminarea secvențială a necunoscutelor. Să considerăm sistemul de ecuații liniare:

Se împarte ambele părți ale ecuației 1 pe a11 # 61625; 0, atunci: 1) se înmulțește cu a21 și scade a doua ecuație 2) se multiplică prin A31 și scade din a treia ecuație, etc. Obținem. unde d1j = a1j / a11. j = 2, 3, ..., n + 1. dij = aij - AI1 d1j i = 2, 3, .... n; j = 2, 3, .... n + 1. Apoi repetați procesul pentru a doua ecuație, apoi - pentru al treilea, etc.

Exemplu. Rezolva sistemul de ecuații liniare de Gauss.

Noi forma matricea augmentată a sistemului.

Astfel, sistemul original poate fi reprezentat ca:

,

Exemplu. Rezolva sistemul metodei Gauss.

Noi forma matricea augmentată a sistemului.

Astfel, sistemul original poate fi reprezentat ca:

.

care randamentele: z = 3; y = 2; x = 1.

Lucrul cu fișiere.

C ++ standard de bibliotecă conține un set de funcții pentru lucrul cu fișiere. Aceste funcții sunt descrise în standardul ANSI. Rețineți că fișierul de intrare-ieșire nu face parte din C +, și ANSI-funcție - nu numai mijloacele de intrare-ieșire. De exemplu, în Unix sistem mai popular un set diferit de funcții de intrare-ieșire, care pot fi utilizate nu numai pentru lucrul cu fișiere, dar, de asemenea, pentru partajarea rețelei de operare. bibliotecile de clasă sunt adesea folosite în C ++ pentru IO. Cu toate acestea, funcțiile ANSI-biblioteci sunt susținute de toate C ++ - compilator, și pentru că programele pe care le utilizează, sunt transferate cu ușurință de la o platformă la alta. Prototipuri de funcții de intrare-ieșire și sunt utilizate pentru tipurile de date sunt descrise în fișierul antet standard de „stdio.h.

Deschiderea fișierului: funcția fopen.

Pentru a avea acces la dosar este utilizat tipul de fișier de date. Acest tip structural al cărui nume este specificat folosind „stdio.h“ declarația typedef în antet standard de. Programatorul nu are nevoie să știe cum să construiască structura de tipul de fișier dispozitivului său poate fi dependent de sistem, astfel încât în ​​mod evident, se referă la câmpurile Structura de fișiere este interzisă pentru a portabilitate. Tip de date „de pe indicatorul structura de fișiere este folosit în programele ca o cutie neagră: o funcție pentru a deschide un fișier returnează acest indicator dacă are succes, în viitor, toate funcțiile de fișier folosit pentru a accesa fișierul.

Aici cale - calea către fișierul (de exemplu, nume de fișier sau calea de fișier absolută), modul - modul de fișiere. Șirul modul poate conține mai multe litere. „R“ scrisoare (de la cuvântul citit) înseamnă că fișierul este deschis pentru citire (fișier trebuie să existe). litera „W“ (de la un cuvânt de scriere) înseamnă scrierea într-un fișier, fișierul vechi este pierdut, iar în dosarul cauzei nu exista, el este creat. Litera „A“ (atașați de la cuvântul) înseamnă o intrare într-un fișier existent sau de a crea un nou fișier, dacă fișierul nu există.

În unele sisteme de operare, există diferențe în lucrul cu fișiere text și binare (astfel de sisteme includ MS DOS și MS Windows, Unix pe distincția între fișierele text și binare nu sunt prezente). În astfel de sisteme, atunci când deschideți un fișier binar la linia de modul ar trebui să fie adăugată litera „b“ (de la cuvântul binar), și atunci când deschideți un fișier text - litera „T“ (din textul cuvânt). În plus, atunci când deschiderea poate fi permisă pentru a efectua operația de citire și scriere; folosește + (plus). Ordinea literelor în linia de mod este după cum urmează: în primul rând există una din literele „r“, „w“, „o“, apoi, în ordine aleatorie poate merge simboluri „b“, „t“, „+“. Literele „b“ și „t“ poate fi folosit, chiar dacă sistemul de operare este nici o diferență între fișiere binare și text, în cazul în care acestea sunt pur și simplu ignorate.

3.Opisanie algoritm de rezolvare a sistemelor liniare de Gauss

Crearea unui program de sisteme de ecuații liniare rezolvare cu matricea de ordinul n metoda Gauss folosind limbajul C ++.

Algoritmul pentru rezolvarea unui sistem de ecuații liniare folosind metoda Gauss. Algoritmul este implementat în C ++.

Să presupunem că avem un sistem de N ecuații liniare

unde xi - necunoscut, aij - coeficienții necunoscutele, bi - termeni constante în ecuațiile, i, j ia valori de la 1 la N.

Esența metodei Gauss constă în faptul că, cu ajutorul unor operații a sistemului inițial de ecuații poate fi redusă la un sistem mai simplu. Acest sistem simplu are o formă triunghiulară:

Particularitatea acestui sistem - în linii cu numărul i, toți coeficienții ij cu j

Dacă am fost capabili de a aduce sistemul nostru de ecuații la o astfel de formă triunghiulară, apoi rezolva ecuația este pur și simplu. Din ultima ecuație ne găsim xN = bN / ANN. Apoi l-am înlocui în ecuație penultima și de a afla că xN-1. Substitut atât soluțiile găsite în următoarele la sfârșitul ecuației și găsi xN-2. Și așa mai departe, până când vom găsi x1. la ce decizie se încheie. Această procedură se numește o matura inversă.

Ne întoarcem acum la întrebarea cum să se asigure că sistemul a devenit triunghiular.

Știm din algebra liniară că, dacă o anumită linie a sistemului pentru a adăuga orice combinație liniară de oricare dintre celelalte linii ale sistemului, sistemul nu se schimba decizia. Prin combinarea liniară de rânduri se înțelege suma liniilor, fiecare dintre care este înmulțită cu un număr (în principiu, orice).

Este necesar ca a doua linie pentru a obține o ecuație în care nu există nici un termen la x1. Să adăugăm la această linie din primul rând multiplicată cu un numar M.

Pentru un membru al x1 este zero, este necesar ca M = - a21 / a11. Efectuarea acestei operații, ecuația rezultată, se scrie în schimb trece la ecuația a doua și a treia. La aceasta se adaugă prima ecuație înmulțită cu M = - A31 / A11 și a obține, de asemenea, un zero în loc de un membru de la x1. Această operațiune trebuie să fie făcut mai presus de toate celelalte ecuații. Ca rezultat, vom obține un sistem de acest tip:

După aceea, vom scăpa de membri pentru x2 în a treia ecuație, a patra, N-lea. Pentru a face acest lucru, cu numărul j-ecuație pentru a adăuga a doua ecuație înmulțită cu M = - compus AJ2 / A22. Efectuarea acestei operații pe toate celelalte ecuații, obținem un sistem în care nu există membri în numărul de ecuații x2 mai mare de 2.

Și așa mai departe. Făcând acest lucru pentru un al treilea membru al patrulea. atâta timp cât a alerga afară din ecuație, obținem ca rezultat al sistemului de tip triunghiular.

Algoritmul este descris în codul pseudo (comenzi ca text în limba rusă).

PROCES 0 (proces principal)

1.Razoslat toate procesele numărul de linii de curent.

(Sau nu toate procesele în cazul în care procesele de mai mult de rânduri).

2.TSIKL pe linia (alegerea liniei curente)

1.Razoslat toate procesele din linia curentă.

(Dacă mai mult decât numărul de procese pentru tratamentul de rânduri din stânga (rândurile de mai jos rândul curent), apoi trimite linia curentă este nu toate procesele, ci numai celor care vor fi implicate în liniile de prelucrare.)

2.Razoslat toate procesele de linie de prelucrare (trimitere linie, apoi rând în matrice). Împărțită între liniile de mai jos procesele actuale. Deci, cota-parte din ciclul de un singur rând se distribuie fiecare proces până la sfârșit linia de proces 1..n merge ciclic.

3.Razoslat toate procesele numărul de linii trimise la ele pentru prelucrare.

4.Prinyat proceselor 1..n liniilor prelucrate pentru a le aduce în matrice. (Acceptați linia și numărul rândului în matrice)

5.Vybrat urmând linia curentă - o nouă etapă a ciclului.

3. Calculați o decizie privind matricea diagonală a sistemului.

Rezultatul 4.Vydat.

Numărul 1.Prinimaem de linii de curent.

2.TSIKL TRATAMENT OBȚINUTE LINIILE

Mesajul 1.Prinimaem cu numărul de linii de prelucrare

2. În cazul în care numărul de linii de prelucrare> 0, atunci:

Mesaj 1.Prinimaem cu linia curentă

Linii de prelucrare 2.TSIKL

Mesaj 1.Prinimaem cu o linie de procesare.

(Ia mai numărul liniei în matrice).

2.Obrabatyvaem string rezultat

3.Posylaem performanță principal proces. Pentru fiecare rând, trimiterea unui șir de caractere și un număr de linie.

4.Idom următoarele linii de procesare a ciclului pas.

Programul de text 4.Iskhodny

Crearea unui program de sisteme de ecuații liniare rezolvare cu matricea pătrată de ordinul n metoda Gauss nedegenerat folosind limbajul C ++.

// Soluția sistemului de ecuații liniare prin Gauss.

Ca rezultat al proiectului desigur, sunt două clase de funcții pentru rezolvarea problemelor simple de algebra liniară au fost dezvoltate. Numărul acestor funcții este relativ mică, dar puteți adăuga cu ușurință la aceste clase mai multe caracteristici avansate, construite pe baza deja disponibile. Clase vă permit să lucreze cu matrici si vectori, care elemente pot fi de orice tip, dar, în practică, cel mai des utilizate de tipul și tipul de numere în virgulă mobilă. Clasele sunt scrise în C ++, dar poate fi ușor rescrise în oricare dintre limbajele de programare moderne, așa cum se arată relativ algoritmi simpli de funcții de componente. Era posibil cu condiția ca toate tipurile de erori care pot apărea atunci când se utilizează clasele de baze de date. O atenție deosebită a fost acordată o alocare rezonabilă a memoriei sub-obiecte la momentul execuției, astfel încât toate funcțiile au fost atent otlazheny.Klassy Matrix și Vector pot fi aplicate în mod eficient în practică în sarcinile de operații cu matrice și vectori care necesită, precum și în legătură cu soluția sistemelor de ecuații algebrice liniare.

3. Introducere în C ++: Tutorial. / Bjarne Straustrap.

9. MODEL ȘI STRUCTURA DE DATE / Tutorial /

Găsirea unor soluții la un sistem de ecuații liniare prin Gauss

Informații despre activitatea „Găsirea de soluții la un sistem de ecuații liniare de Gauss'

Dacă există un rând zero în matrice, toate rândurile de sub ea ca zero; informatică,

matrice triunghiulară. Calculele valorii necunoscute sunt realizate pe scena flyback. Scopul acestui lucru desigur este o soluție numerică a unui sistem de ecuații liniare folosind eliminarea gaussiană cu pivotare pe o coloană. 1 Situația problemei Problema este formulată după cum urmează. Să presupunem că doriți să găsească o soluție la un sistem de ecuații algebrice liniare a1,1x1 + A1.

1.2 0.4 -0.8 -0.8 3.6 4.7 4 9.7 10.4 9.7 -8.4Rezultat calcule prin metoda Gauss x1 = 5.0000000000E + 00 x2 = -4.0000000000E + 00 x3 = 3.0000000000E + 00 x4 = -2.0000000000E + 00 2.2 software pentru rezolvarea sistemelor liniare Seidel Ecuații prin metoda 2.2.1. Declarația problemei. Necesare pentru a rezolva un sistem de ecuații algebrice liniare cu coeficienți reali de forma a11x1 + a12x2 + ... + a1nxn =.