279
11.6. Rozwiązywanie układów równań liniowych metodą Gaussa
I
if (a[i) [i ]==0)
return 0; // Ukłdd sprzeczny!
for(j=i+l;j<N;j++) for(k-N;k>-i;k--)
//mnożenie wiersza j przez współczynnik "zerujący": a[j][k]-a[j][k] a[i) [k]*a[j] [i]/a[i] [i];
1
// redukcja wsteczna forfint j=N-l;j>=0;j--)
1
tmp=0;
forfint k=j+1;k<=N;k++) trnp=tmp-a f j 1 fkl*xfkl; x[j]-(a[j] fN] tmp!/a[j]:j];
)
return 1; // wszystko w porządku!
) void main()
(
if(!gauss(a,)
cout << "Układ jest sprzeczny !\n”; else
1
cout « "Rozwiązanie: \n"; for(int i=C;i<N;i++)
cout « "x [ "«i<<"] ="<<x [i] << endl; )
W tym krótkim rozdziale nie mogłem poruszyć wielu zagadnień z dziedziny obliczeń numerycznych, jednak przedstawione zestawienie zawiera z pewnością wybór najczęściej używanych w praktyce programów. Uwagi zawarte na jego wstępie pozostają aktualne, warto jednak wspomnieć, żc implementowanie algorytmów numerycznych z użyciem C++jest czasami robione nieco „na siłę”, gdyż język ten nie wspomaga w bezpośredni sposób modelowania zagadnień natury czysto obliczeniowej. Matematykom i fizykom potrzebującym sprawnych narzędzi obliczeniowych, można polecić w jego miejsce którąś z nowoczesnych implementacji Fortranu. Język ten, co prawda nie nadaje się do „zwykłego” programowania (tak jak C++ i Pascal), ale wraz z nim są dostarczane zazwyczaj, bardzo bogate biblioteki procedur obliczeniowych (odwracanie macierzy, całkowanie, interpolacja...) - te wszystkie procedury, które programista C++ musi typowo pisać od zera...