Siemka mam wielki problem, bo na metody numeryczne muszę przynieść zmodyfikowany program do obliczania macierzy odwrotnej.
Obecny program wygląda tak:
// Program rozwiązuje układ równań liniowych
// metodą eliminacji Gaussa#include <iostream>
using namespace std;main()
{
int n;
float a[50][50],x[50], w,s;for (int i=0; i<50; i++) { for (int j=0; j<50; j++) a[i][j]=0.0; x[i]=0.0; }
// wczytywanie danych
cout<<"Podaj liczbe zmiennych w ukladzie n=";
cin>>n;
cout<<"Podaj wspolczynniki przy zmiennych:"<<endl;for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) { cout<<" a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } cout<<"Podaj wyrazy wolne:"<<endl; for (int i=1; i<=n; i++) { cout<<" b["<<i<<"]="; cin>>a[i][n+1]; }
// wyeliminowanie i-tej niewiadomej
w=0.0;
for (int i=1; i<=n; i++)
for (int k=i+1; k<=n; k++)
{
w=-a[k][i]/a[i][i];
for (int j=1; j<=n+1; j++)
a[k][j]+=w*a[i][j];
}
// rozwiązanie układu trójkątnego - wstecz
for (int i=n; i>=1; i--)
{
s=0.0;
for (int j=i+1; j<=n; j++)
s+=a[i][j]*x[j];
x[i]=(a[i][n+1]-s)/a[i][i];
}cout<<endl; cout<<"Zmienne ukladu wynosza:"<<endl; for (int i=1; i<=n; i++) cout<<" x["<<i<<"]="<<x[i]<<endl; cout<<endl<<endl; system("pause"); return(0);
}
Jak widzicie pyta się tylko o jedną "kolumnę" wyrazów wolnych
Więc jeśli mamy np macierz 2x2
to program musielibyśmy odpalić dwa razy, pierw podać wyrazy wolne 1,0 za drugim razem 0,1
By wyglądała ona tak: 10
01 w przypadku rozpisania tego na kartce.
Ja mam to zrobić tak by program (już zmodyfikowany na podstawie tego powyżej) sam obliczał "n"razy (w zależności jaka macierz) i obliczał kolejne wyrazy macierzy odwrotnej.
Najgorsze jest to, że muszę mieć taki program na piątek !
Więc została mi dzisiejsza szczątka czasu i jutrzejszy dzień :/
Sam sobie nie mogę dać rady, dlatego zwracam się z prośbą, czy ktoś mógłby ten program zmodyfikować (im mniej/prościej tym lepiej)