Diferente pentru eliminare-gaussiana intre reviziile #5 si #6

Nu exista diferente intre titluri.

Diferente intre continut:

(toc){width: 25em}*{text-align:center} *Conţinut:*
* 'Descriere':eliminare-gaussiana#descriere
* 'Implementare':eliminare-gaussiana#implementare
* 'Aplicaţii':eliminare-gaussiana#aplicatii
* 'Bibliografie':eliminare-gaussiana#bibliografie
0 & 0 & -1 & 1
\end{pmatrix}
</tex>
Pentru a obţine a doua matrice am înmulţit prima linie cu <tex>\frac{3}{2}</tex> şi am adunat-o la a doua linie, iar apoi am adunat-o la ultima linie(<tex>\frac{2}{2}=1</tex>). Pentru a obţine ultima matrice am înmulţit a doua linie cu <tex>-\frac{2}{\frac{1}{2}}=-4</tex>.
 
Cum se poate observa şi din exemplu la fiecare pas construim o coloană şi o linie din matricea finală, coloana fiind umplută cu $0$ sub linia fixată. Să presupunem că vrem să transformăm toate elementele de sub linia $i$ aflate pe coloana $j$ în $0$. Pentru fiecare linie $k$ ( $k>i$ ) vom înmulţi linia $i$ cu <tex>-\frac{a_{kj}}{a_ij}</tex> şi o vom aduna la linia $k$ astfel elementul de pe coloana $j$ transformându-se în $0$. În cazul în care <tex>a_{ij}=0</tex> trebuie să căutăm o linie $k$(k > i) astfel încât <tex>a_{kj}\neq 0</tex>. În cazul în care această linie nu există, sistemul nu are soluţie. Aplicând aceşti pasi vom ajunge în final la o matrice triunghiulară din care vom afla necunoscutele.
 
h2(#implementare). Implementare
 
Codul de mai jos rezolva si cazul când avem mai multe ecuaţii decât necunoscute.
 
==code(cpp) |
void elim(int n,int m,double s[][]) {//sistem cu n ecuatii m necunoscute
  for(int i=1,j=1,k;i<=n && j<=m;) {
    for(k=i;k<=n; ++k) if(s[k][j]!=0) break;//cautam o linie pe care sa o folosim pentru a forma zerouri pe coloana j
    if(k>n) {//trecem la urmatoarea coloana linia i nefiind finala
      ++j;
      continue;
    }
    if(k!=i)for(int l=1; l<=m+1; ++l) swap(s[i][l],s[k][l]);//interschimbam liniile pentru a avea pe linia i si coloana j un element nenul
    for(k=i+1; k<=n; ++k) for(int l=m+1; l>=j; --l)
      s[k][l]-=((s[k][j]*s[i][l])/s[i][j]);//aplicam transformarea pentru fiecare linie mai mare ca i pentru a avea 0 pe coloana j sub linia i
    ++i; ++j;
  }
//aflam necunoscutele
  for(int i=n; i;--i) for(int j=1; j<=m+1; ++j) if(fabs(s[i][j])>EPS) {//pentru ca e posibil sa avem mai multe ecuatii decat necunoscute
//cautam pe fiecare linie primul coeficient nenul, acestia aparand de la dreapta la stanga
    if(j==m+1) {//linia nu are coeficienti nenuli deci nu avem solutie
      g<<"Imposibil";
      exit(0);
    }
    x[j]=s[i][m+1];
    for(int k=j+1; k<=m; ++k) x[j]-=s[i][k]*x[k];
    x[j]/=s[i][j];
    break;//trecem la linia precedenta
  }
}
==
h2(#aplicatii). Aplicaţii
h2(#bibliografie). Bibliografie
* http://en.wikipedia.org/wiki/Gaussian_elimination
* http://mathworld.wolfram.com/GaussianElimination.html
* 'Wikipedia':http://en.wikipedia.org/wiki/Gaussian_elimination
* 'Wolfram Mathworld':http://mathworld.wolfram.com/GaussianElimination.html

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.