Guest User

Untitled

a guest
May 28th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.13 KB | None | 0 0
  1. /*Rozwiazanie ukladu rownan z macierza trojprzekatniowa i przekatniowo dominujaca*/
  2. #include<iostream>
  3.  
  4. int N=4;
  5.  
  6. float macierz[4][4];
  7. float nowa_macierz[4][4];
  8. float rozwiazania[4];
  9. float nowe_rozwiazania[4];
  10. float x[4];
  11.  
  12.  
  13. void sprawdzenie(int wiersz){
  14. float odp=0;
  15. for(int i=0;i<N;i++){
  16. odp+=macierz[wiersz][i]*x[i];
  17. }
  18. printf("Sprawdzenie dla wiersza %d b%d powinno byc rowne %f\n",wiersz+1,wiersz+1,odp);
  19. }
  20.  
  21. void wyliczanie_x(){
  22. x[N-1]=nowe_rozwiazania[N-1]/nowa_macierz[N-1][N-1];
  23.  
  24. x[N-2]=nowe_rozwiazania[N-2];
  25. x[N-2]-=nowa_macierz[N-2][N-1]*x[N-1];
  26. x[N-2]/=nowa_macierz[N-2][N-2];
  27.  
  28. x[N-3]=nowe_rozwiazania[N-3];
  29. x[N-3]-=nowa_macierz[N-3][N-2]*x[N-2];
  30. x[N-3]/=nowa_macierz[N-3][N-3];
  31.  
  32. x[N-4]=nowe_rozwiazania[N-4];
  33. x[N-4]-=nowa_macierz[N-4][N-3]*x[N-3];
  34. x[N-4]/=nowa_macierz[N-4][N-4];
  35.  
  36.  
  37. printf("x4=%f\n",x[N-1]);
  38. printf("x3=%f\n",x[N-2]);
  39. printf("x2=%f\n",x[N-3]);
  40. printf("x1=%f\n",x[N-4]);
  41.  
  42.  
  43. }
  44.  
  45.  
  46. void rozklad(int wiersz){
  47. // obliczenia
  48. float d=nowa_macierz[wiersz+1][wiersz+1];
  49. float zmienna=nowa_macierz[wiersz][wiersz+1]*(nowa_macierz[wiersz+1][wiersz]/nowa_macierz[wiersz][wiersz]);
  50. d-=zmienna;
  51.  
  52.  
  53.  
  54. float zmienna2=nowe_rozwiazania[wiersz]*(nowa_macierz[wiersz+1][wiersz]/nowa_macierz[wiersz][wiersz]);
  55. float b=nowe_rozwiazania[wiersz+1];
  56. b-=zmienna2;
  57.  
  58. float a=0;
  59.  
  60. // zamiana czesci macierzy
  61. nowa_macierz[wiersz+1][wiersz+1]=d;
  62. nowa_macierz[wiersz+1][wiersz]=0;
  63. nowe_rozwiazania[wiersz+1]=b;
  64.  
  65.  
  66. // wypisanie macierzy
  67. printf("macierz po %d kroku\n",wiersz+1);
  68. for(int i=0;i<N;i++){
  69.     for(int j=0;j<N;j++){
  70.     printf("%f\t",nowa_macierz[i][j]);
  71.     }
  72.     printf("\n");
  73. }
  74.  
  75. // wypisanie macierzy z b
  76. printf("\n macierz z b po %d kroku\n",wiersz+1);
  77. for(int i=0;i<N;i++){
  78.     printf("%f\t",nowe_rozwiazania[i]);
  79. }
  80.  
  81.  
  82. printf("\n\n");
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. }
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. int main(){
  100.     macierz[0][0]=-4;
  101.     nowa_macierz[0][0]=-4;
  102.  
  103.     macierz[0][1]=-1;
  104.     nowa_macierz[0][1]=-1;
  105.  
  106.     macierz[0][2]=0;
  107.     nowa_macierz[0][2]=0;
  108.  
  109.     macierz[0][3]=0;
  110.     nowa_macierz[0][3]=0;
  111.  
  112.     macierz[1][0]=-1;
  113.     nowa_macierz[1][0]=-1;
  114.  
  115.     macierz[1][1]=-4;
  116.     nowa_macierz[1][1]=-4;
  117.  
  118.     macierz[1][2]=-1;
  119.     nowa_macierz[1][2]=-1;
  120.  
  121.     macierz[1][3]=0;
  122.     nowa_macierz[1][3]=0;
  123.  
  124.     macierz[2][0]=0;
  125.     nowa_macierz[2][0]=0;
  126.  
  127.     macierz[2][1]=-1;
  128.     nowa_macierz[2][1]=-1;
  129.  
  130.     macierz[2][2]=-4;
  131.     nowa_macierz[2][2]=-4;
  132.  
  133.     macierz[2][3]=-1;
  134.     nowa_macierz[2][3]=-1;
  135.  
  136.     macierz[3][0]=0;
  137.     nowa_macierz[3][0]=0;
  138.  
  139.     macierz[3][1]=0;
  140.     nowa_macierz[3][1]=0;
  141.    
  142.     macierz[3][2]=-1;
  143.     nowa_macierz[3][2]=-1;
  144.    
  145.     macierz[3][3]=-4;
  146.     nowa_macierz[3][3]=-4;
  147.  
  148.     rozwiazania[0]=1;
  149.     nowe_rozwiazania[0]=1;
  150.  
  151.     rozwiazania[1]=2;
  152.     nowe_rozwiazania[1]=2;
  153.  
  154.     rozwiazania[2]=3;
  155.     nowe_rozwiazania[2]=3;
  156.  
  157.     rozwiazania[3]=4;
  158.     nowe_rozwiazania[3]=4;
  159.  
  160.     printf("Macierz poczatkowa:\n");
  161.     for(int i=0;i<N;i++){
  162.         for(int j=0;j<N;j++){
  163.         printf("%.2f\t",macierz[i][j]);
  164.         }
  165.         printf("\n");
  166.     }
  167.     printf("\n\n");
  168.  
  169.    
  170.     for(int i=0;i<N-1;i++){ // jak jest macierz 4x4 to robimy 3 kroki
  171.     rozklad(i); // ktory wiersz teraz zamieniamy?
  172.     }
  173.  
  174.     // rozwiazanie rownania
  175.     wyliczanie_x();
  176.  
  177.     // sprawdzenie
  178.     for(int i=0;i<N;i++)
  179.     sprawdzenie(i);
  180.  
  181.    
  182.  
  183.     system("pause");
  184.  
  185. }
Add Comment
Please, Sign In to add comment