Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Rozwiazanie ukladu rownan z macierza trojprzekatniowa i przekatniowo dominujaca*/
- #include<iostream>
- int N=4;
- float macierz[4][4];
- float nowa_macierz[4][4];
- float rozwiazania[4];
- float nowe_rozwiazania[4];
- float x[4];
- void sprawdzenie(int wiersz){
- float odp=0;
- for(int i=0;i<N;i++){
- odp+=macierz[wiersz][i]*x[i];
- }
- printf("Sprawdzenie dla wiersza %d b%d powinno byc rowne %f\n",wiersz+1,wiersz+1,odp);
- }
- void wyliczanie_x(){
- x[N-1]=nowe_rozwiazania[N-1]/nowa_macierz[N-1][N-1];
- x[N-2]=nowe_rozwiazania[N-2];
- x[N-2]-=nowa_macierz[N-2][N-1]*x[N-1];
- x[N-2]/=nowa_macierz[N-2][N-2];
- x[N-3]=nowe_rozwiazania[N-3];
- x[N-3]-=nowa_macierz[N-3][N-2]*x[N-2];
- x[N-3]/=nowa_macierz[N-3][N-3];
- x[N-4]=nowe_rozwiazania[N-4];
- x[N-4]-=nowa_macierz[N-4][N-3]*x[N-3];
- x[N-4]/=nowa_macierz[N-4][N-4];
- printf("x4=%f\n",x[N-1]);
- printf("x3=%f\n",x[N-2]);
- printf("x2=%f\n",x[N-3]);
- printf("x1=%f\n",x[N-4]);
- }
- void rozklad(int wiersz){
- // obliczenia
- float d=nowa_macierz[wiersz+1][wiersz+1];
- float zmienna=nowa_macierz[wiersz][wiersz+1]*(nowa_macierz[wiersz+1][wiersz]/nowa_macierz[wiersz][wiersz]);
- d-=zmienna;
- float zmienna2=nowe_rozwiazania[wiersz]*(nowa_macierz[wiersz+1][wiersz]/nowa_macierz[wiersz][wiersz]);
- float b=nowe_rozwiazania[wiersz+1];
- b-=zmienna2;
- float a=0;
- // zamiana czesci macierzy
- nowa_macierz[wiersz+1][wiersz+1]=d;
- nowa_macierz[wiersz+1][wiersz]=0;
- nowe_rozwiazania[wiersz+1]=b;
- // wypisanie macierzy
- printf("macierz po %d kroku\n",wiersz+1);
- for(int i=0;i<N;i++){
- for(int j=0;j<N;j++){
- printf("%f\t",nowa_macierz[i][j]);
- }
- printf("\n");
- }
- // wypisanie macierzy z b
- printf("\n macierz z b po %d kroku\n",wiersz+1);
- for(int i=0;i<N;i++){
- printf("%f\t",nowe_rozwiazania[i]);
- }
- printf("\n\n");
- }
- int main(){
- macierz[0][0]=-4;
- nowa_macierz[0][0]=-4;
- macierz[0][1]=-1;
- nowa_macierz[0][1]=-1;
- macierz[0][2]=0;
- nowa_macierz[0][2]=0;
- macierz[0][3]=0;
- nowa_macierz[0][3]=0;
- macierz[1][0]=-1;
- nowa_macierz[1][0]=-1;
- macierz[1][1]=-4;
- nowa_macierz[1][1]=-4;
- macierz[1][2]=-1;
- nowa_macierz[1][2]=-1;
- macierz[1][3]=0;
- nowa_macierz[1][3]=0;
- macierz[2][0]=0;
- nowa_macierz[2][0]=0;
- macierz[2][1]=-1;
- nowa_macierz[2][1]=-1;
- macierz[2][2]=-4;
- nowa_macierz[2][2]=-4;
- macierz[2][3]=-1;
- nowa_macierz[2][3]=-1;
- macierz[3][0]=0;
- nowa_macierz[3][0]=0;
- macierz[3][1]=0;
- nowa_macierz[3][1]=0;
- macierz[3][2]=-1;
- nowa_macierz[3][2]=-1;
- macierz[3][3]=-4;
- nowa_macierz[3][3]=-4;
- rozwiazania[0]=1;
- nowe_rozwiazania[0]=1;
- rozwiazania[1]=2;
- nowe_rozwiazania[1]=2;
- rozwiazania[2]=3;
- nowe_rozwiazania[2]=3;
- rozwiazania[3]=4;
- nowe_rozwiazania[3]=4;
- printf("Macierz poczatkowa:\n");
- for(int i=0;i<N;i++){
- for(int j=0;j<N;j++){
- printf("%.2f\t",macierz[i][j]);
- }
- printf("\n");
- }
- printf("\n\n");
- for(int i=0;i<N-1;i++){ // jak jest macierz 4x4 to robimy 3 kroki
- rozklad(i); // ktory wiersz teraz zamieniamy?
- }
- // rozwiazanie rownania
- wyliczanie_x();
- // sprawdzenie
- for(int i=0;i<N;i++)
- sprawdzenie(i);
- system("pause");
- }
Add Comment
Please, Sign In to add comment