Advertisement
desdemona

cóżeś uczynił

Jun 5th, 2013
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.46 KB | None | 0 0
  1. #include<iostream>
  2. #include<math.h>
  3. #include<vector>
  4. #include<fstream>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. vector<double> aki;
  10.  
  11. vector<vector<double>> swap(vector<vector<double>> wektor, int liczba, int row, int col)
  12. {
  13.     double tmp,tmp2,tmp3;
  14.     tmp2 = row;
  15.     tmp = wektor[row][col];
  16.  
  17.     for(int i = row+1; i < liczba; i++)
  18.     {
  19.         if(tmp < wektor[i][col])
  20.         {
  21.             tmp = wektor[i][col];
  22.             tmp2 = i;
  23.         }
  24.  
  25.     }
  26.  
  27.     if(tmp2 != row)
  28.     {
  29.         for(int i = 0; i < liczba+1; i++)
  30.         {
  31.             tmp3 = wektor[row][i];
  32.             wektor[row][i] = wektor[tmp2][i];
  33.             wektor[tmp2][i] = tmp3;
  34.         }
  35.  
  36.     }
  37.     return wektor;
  38. }
  39.  
  40.  
  41. vector<vector<double>> dotrojkatnej(vector<vector<double>> wektor, int liczba)
  42. {
  43.     for(int i = 0; i < liczba; i++)
  44.     {
  45.         wektor = swap(wektor,liczba,i,i);
  46.  
  47.         double tmp = wektor[i][i];
  48.         for(int k = i; k < liczba+1; k++)
  49.         {
  50.             wektor[i][k] = wektor[i][k] / tmp;
  51.         }
  52.         for(int j = i+1; j < liczba; j++)
  53.         {
  54.  
  55.             double tmp2 = wektor[j][i];
  56.  
  57.  
  58.  
  59.             for(int k = i; k < liczba+1; k++)
  60.             {
  61.                 wektor[j][k] = wektor[j][k] - tmp2 * wektor[i][k];
  62.             }
  63.  
  64.         }
  65.     }
  66.     return wektor;
  67. }
  68.  
  69. vector<vector<double>> dojedynek(vector<vector<double>> wektor, int liczba)
  70. {
  71.     for(int i = liczba - 1; i >= 0; i--)
  72.     {
  73.         for(int j = i - 1; j >= 0; j--)
  74.         {
  75.             double tmp = wektor[j][i];
  76.             for(int k = i;k < liczba+1; k++)
  77.             {
  78.                 wektor[j][k] = wektor[j][k] -  tmp * wektor[i][k];
  79.             }
  80.         }
  81.     }
  82.     return wektor;
  83. }
  84.  
  85.  
  86.  
  87. void liczgausa(vector<vector<double>> wektor, int liczba)
  88. {
  89.  
  90.  
  91.     wektor = dotrojkatnej(wektor, liczba);
  92.     wektor = dojedynek(wektor, liczba);
  93.     for(int i = 0; i < liczba; i++)
  94.     {
  95.         double z = wektor[i].back();
  96.         aki.push_back(z);
  97.         cout << z << "\n";
  98.     }
  99.  
  100. }
  101.  
  102.  
  103. int main()
  104. {
  105.     int t;
  106.     cin >> t;
  107.  
  108.     while(t--)
  109.     {
  110.         vector<vector<double>> glowny;
  111.         vector<double> xsy;
  112.         vector<double> x2sy;
  113.         vector<double> sy;
  114.         vector<double> tki;
  115.         vector<double> ygreki;
  116.  
  117.  
  118.         int s,n;
  119.         cin >> s;
  120.         cin >> n;
  121.         int a = n;
  122.         //xsy.push_back(0);
  123.         while(n--)
  124.         {
  125.             double xi, yi;
  126.             cin >> xi >> yi;
  127.             xsy.push_back(xi);
  128.             ygreki.push_back(yi);
  129.         }
  130.  
  131.         int m;
  132.         cin >> m;
  133.         m = m;
  134.         int b = m;
  135.         while(m--)
  136.         {
  137.             double x2i;
  138.             cin >> x2i;
  139.             x2sy.push_back(x2i);
  140.         }
  141.         //liczymy współczynniki macierzy
  142.         for(int i = 0; i <= (2*s); i++)
  143.         {
  144.             sy.push_back(0);
  145.  
  146.         }
  147.         //for(int i = 0; i < a; i++)
  148.         //{
  149.         //  aki.push_back(0);
  150.  
  151.         //}
  152.         for(int i = 0; i <= (2*s); i++)
  153.         {
  154.             //obliczamy s[i]
  155.             for(int j = 0; j < a; j++)
  156.             {
  157.                 sy[i] += pow(xsy[j],i);
  158.             }
  159.  
  160.         }
  161.         //wrzucamy s[i] na główną macierz
  162.         for(int i = 0; i <= s; i++)
  163.         {
  164.             vector<double> wiersz;
  165.             for(int j = 0; j <= s; j ++)
  166.             {
  167.                 wiersz.push_back(sy[i+j]);
  168.             }
  169.             double obecnyt = 0;
  170.             for(int j = 0; j < a; j++)
  171.             {
  172.                 obecnyt+= ygreki[j]*pow(xsy[j],i);
  173.             }
  174.             wiersz.push_back(obecnyt);
  175.             glowny.push_back(wiersz);
  176.         }
  177.     //teraz liczymy ai
  178.         liczgausa(glowny,s+1);
  179.         //jak juz mamy ai, obliczamy alles
  180.         cout << "wyniki" << endl;
  181.  
  182.  
  183.         ofstream output;
  184.         output.open("wyjscie.txt", std::ios_base::app);
  185.         if(!output.is_open())
  186.             return 69;
  187.  
  188.         output.setf(std::ios::fixed, std:: ios::floatfield);
  189.         output.precision(7);
  190.         output << "Fx =[ ";
  191.         //double placki=0.5;
  192.         for(double i=-4; i<=4; i+=0.01)
  193.         {
  194.         // 
  195.             double wynik = 0;
  196.             for(int j = 0; j <= s; j++)
  197.             {
  198.                 //wynik na głównej
  199.                 wynik+= aki[j]*pow(i,j);
  200.  
  201.             }
  202.         // 
  203.         //  cout << "X\t" << i << "\tY\t" << wynik << endl;
  204.  
  205.  
  206.             output << wynik << ", ";
  207.  
  208.         }
  209.         output << "];\n";
  210.         output << "xx =[ ";
  211.         for(int i=0; i<b; i++)
  212.         {
  213.             output << xsy[i] << "; ";
  214.         }
  215.         output << "];\n";
  216.         output << "yy =[ ";
  217.  
  218.         for(int i = 0; i < b; i++)
  219.         {
  220.            
  221.             double wynik = 0;
  222.             for(int j = 0; j <= s; j++)
  223.             {
  224.                 //wynik na głównej
  225.                 wynik+= aki[j]*pow(x2sy[i],j);
  226.  
  227.             }
  228.             output << wynik << "; ";
  229.         }
  230.         output << "];\n";
  231.         output.close();
  232.    
  233.  
  234.  
  235.         //for(int i = 0; i < b; i++)
  236.         //{
  237.         // 
  238.         //  double wynik = 0;
  239.         //  for(int j = 0; j <= s; j++)
  240.         //  {
  241.         //      //wynik na głównej
  242.         //      wynik+= aki[j]*pow(x2sy[i],j);
  243.  
  244.         //  }
  245.  
  246.             //cout << "X\t" << x2sy[i] << "\tY\t" << wynik << endl;
  247.  
  248.         //}
  249.         //cout << "pointsy na funkcje" << endl;
  250.         //for(double i = x2sy[0] - 0.5; i < 4; i+= 0.01)
  251.         //{
  252.         // 
  253.         //  double wynik = 0;
  254.         //  for(int j = 0; j <= s; j++)
  255.         //  {
  256.         //      //wynik na głównej
  257.         //      wynik+= aki[j]*pow(i,j);
  258.  
  259.         //  }
  260.         // 
  261.         //  cout << "X\t" << i << "\tY\t" << wynik << endl;
  262.         //}
  263.  
  264.     }
  265.     int f;
  266.     cin >> f;
  267.  
  268.  
  269.  
  270.  
  271.  
  272.     return 0;
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement