Advertisement
desdemona

gauss, który wydaje się działać

Mar 23rd, 2013
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4.  
  5. using namespace std;
  6.  
  7. vector<double> mnozenie(vector<double> matylda, double liczba)
  8. {
  9.     for(int i=0; i<matylda.size(); i++)
  10.     {
  11.         matylda[i] = matylda[i]*liczba;
  12.     }
  13.     return matylda;
  14. }
  15.  
  16. //matylda - wladyslaw
  17. vector<double> odejmowanie(vector<double> matylda, vector<double> wladyslaw)
  18. {
  19.     for(int i=0; i<matylda.size(); i++)
  20.     {
  21.         matylda[i] = matylda[i]-wladyslaw[i];
  22.     }
  23.     return matylda;
  24. }
  25.  
  26. int main()
  27. {
  28.     int t;
  29.     cin >> t;
  30.  
  31.     for(int iterator=0; iterator<t; iterator++)
  32.     {
  33.         //tu wstaw operacje na macierzach
  34.         int liczba_rownan;
  35.         cin >> liczba_rownan;
  36.         vector<vector<double> > macierz;
  37.  
  38.         for(int i=0; i<liczba_rownan; i++)
  39.         {
  40.             vector<double> usagi;
  41.             for(int j=0; j<liczba_rownan+1; j++)
  42.             {
  43.                 double sailor_moon;
  44.                 cin >> sailor_moon;
  45.                 usagi.push_back(sailor_moon);
  46.             }
  47.             macierz.push_back(usagi);
  48.         }
  49.         //jebac wyznacznik glowny
  50.         //eliminacja gaussa bez cudow
  51.         vector<vector<double> > eg = macierz;
  52.         vector<double> x_eg;
  53.         for(int i=0; i<eg.size(); i++)
  54.         {
  55.             x_eg.push_back(0);
  56.         }
  57.  
  58.         for(int i=0; i<eg.size(); i++)
  59.         {
  60.             //szukamy najwiekszego w kolumnie i
  61.             //tylko ostatniej kolumny nie ruszamy
  62.             int najnaj=i;
  63.             for(int j=i; j<eg.size(); j++)
  64.             {
  65.                 if(eg[j][i] > eg[najnaj][i])
  66.                     najnaj=j;
  67.             }
  68.             eg[i].swap(eg[najnaj]);
  69.             //jej, swapniete
  70.  
  71.             //teraz jak juz wybralismy najwiekszy element
  72.             //i jest on w eg[i][i] to ten wiersz dzielimy przez ten element
  73.             //robiac w miejscu eg[i][i] jedynke
  74.             eg[i] = mnozenie(eg[i], 1/eg[i][i]);
  75.  
  76.             //for(int j=i; j<eg.size(); j++)
  77.             //{
  78.             //  //if(j==najnaj)
  79.             //  //  eg[j][i]=1;
  80.             //  //else
  81.             //  eg[j][i] = eg[j][i]/eg[i][i];
  82.             //  //eg[j][i] -= eg[j][i]/eg[najnaj][i];
  83.             //}
  84.             //pieknie, mam jedynki. co teraz z nimi?
  85.             // a no trzeba wiersze odejmowac. a to juz nie jest takie proste.
  86.  
  87.             for(int j=i+1; j<eg.size(); j++)
  88.             {
  89.                 //matylda-wladyslaw;
  90.                 eg[j]=odejmowanie(eg[j], mnozenie(eg[i], eg[j][i]));
  91.             }
  92.             //super, mamy macierz trojkatna
  93.         }
  94.  
  95.         cout << "\n";
  96.         for(int i=0; i<eg.size(); i++)
  97.         {
  98.             for(int j=0; j<eg.size() + 1; j++)
  99.             {
  100.                 cout << eg[i][j] << " ";
  101.             }
  102.             cout << "\n";
  103.         }
  104.  
  105.         x_eg.back() = eg.back().back();
  106.         //ostatniego x-a znamy juz bez kombinowania
  107.         for(int i=eg.size()-2; i>=0; i--)
  108.         {
  109.             //;
  110.             x_eg[i] = eg[i][eg.size()];
  111.             //dajemy mu wartosc b, bedziemy od niej odejmowac
  112.             for(int j=eg.size()-1; j>i; j--)
  113.             {
  114.                 x_eg[i] -= x_eg[j] * eg[i][j];
  115.             }
  116.         }
  117.  
  118.         cout << "\n";
  119.         for(int i=0; i<eg.size(); i++)
  120.         {
  121.             for(int j=0; j<eg.size() + 1; j++)
  122.             {
  123.                 cout << eg[i][j] << " ";
  124.             }
  125.             cout << "\n";
  126.         }
  127.         cout << "\n";
  128.         for(int i=0; i<x_eg.size(); i++)
  129.             cout << x_eg[i] << " ";
  130.        
  131.         cout << "\n";
  132.         //macierz.clear();
  133.     }
  134.  
  135.  
  136.     return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement