Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<math.h>
- #include<vector>
- #include<fstream>
- using namespace std;
- vector<double> aki;
- vector<vector<double>> swap(vector<vector<double>> wektor, int liczba, int row, int col)
- {
- double tmp,tmp2,tmp3;
- tmp2 = row;
- tmp = wektor[row][col];
- for(int i = row+1; i < liczba; i++)
- {
- if(tmp < wektor[i][col])
- {
- tmp = wektor[i][col];
- tmp2 = i;
- }
- }
- if(tmp2 != row)
- {
- for(int i = 0; i < liczba+1; i++)
- {
- tmp3 = wektor[row][i];
- wektor[row][i] = wektor[tmp2][i];
- wektor[tmp2][i] = tmp3;
- }
- }
- return wektor;
- }
- vector<vector<double>> dotrojkatnej(vector<vector<double>> wektor, int liczba)
- {
- for(int i = 0; i < liczba; i++)
- {
- wektor = swap(wektor,liczba,i,i);
- double tmp = wektor[i][i];
- for(int k = i; k < liczba+1; k++)
- {
- wektor[i][k] = wektor[i][k] / tmp;
- }
- for(int j = i+1; j < liczba; j++)
- {
- double tmp2 = wektor[j][i];
- for(int k = i; k < liczba+1; k++)
- {
- wektor[j][k] = wektor[j][k] - tmp2 * wektor[i][k];
- }
- }
- }
- return wektor;
- }
- vector<vector<double>> dojedynek(vector<vector<double>> wektor, int liczba)
- {
- for(int i = liczba - 1; i >= 0; i--)
- {
- for(int j = i - 1; j >= 0; j--)
- {
- double tmp = wektor[j][i];
- for(int k = i;k < liczba+1; k++)
- {
- wektor[j][k] = wektor[j][k] - tmp * wektor[i][k];
- }
- }
- }
- return wektor;
- }
- void liczgausa(vector<vector<double>> wektor, int liczba)
- {
- wektor = dotrojkatnej(wektor, liczba);
- wektor = dojedynek(wektor, liczba);
- for(int i = 0; i < liczba; i++)
- {
- double z = wektor[i].back();
- aki.push_back(z);
- cout << z << "\n";
- }
- }
- int main()
- {
- int t;
- cin >> t;
- while(t--)
- {
- vector<vector<double>> glowny;
- vector<double> xsy;
- vector<double> x2sy;
- vector<double> sy;
- vector<double> tki;
- vector<double> ygreki;
- int s,n;
- cin >> s;
- cin >> n;
- int a = n;
- //xsy.push_back(0);
- while(n--)
- {
- double xi, yi;
- cin >> xi >> yi;
- xsy.push_back(xi);
- ygreki.push_back(yi);
- }
- int m;
- cin >> m;
- m = m;
- int b = m;
- while(m--)
- {
- double x2i;
- cin >> x2i;
- x2sy.push_back(x2i);
- }
- //liczymy współczynniki macierzy
- for(int i = 0; i <= (2*s); i++)
- {
- sy.push_back(0);
- }
- //for(int i = 0; i < a; i++)
- //{
- // aki.push_back(0);
- //}
- for(int i = 0; i <= (2*s); i++)
- {
- //obliczamy s[i]
- for(int j = 0; j < a; j++)
- {
- sy[i] += pow(xsy[j],i);
- }
- }
- //wrzucamy s[i] na główną macierz
- for(int i = 0; i <= s; i++)
- {
- vector<double> wiersz;
- for(int j = 0; j <= s; j ++)
- {
- wiersz.push_back(sy[i+j]);
- }
- double obecnyt = 0;
- for(int j = 0; j < a; j++)
- {
- obecnyt+= ygreki[j]*pow(xsy[j],i);
- }
- wiersz.push_back(obecnyt);
- glowny.push_back(wiersz);
- }
- //teraz liczymy ai
- liczgausa(glowny,s+1);
- //jak juz mamy ai, obliczamy alles
- cout << "wyniki" << endl;
- ofstream output;
- output.open("wyjscie.txt", std::ios_base::app);
- if(!output.is_open())
- return 69;
- output.setf(std::ios::fixed, std:: ios::floatfield);
- output.precision(7);
- output << "Fx =[ ";
- //double placki=0.5;
- for(double i=-4; i<=4; i+=0.01)
- {
- //
- double wynik = 0;
- for(int j = 0; j <= s; j++)
- {
- //wynik na głównej
- wynik+= aki[j]*pow(i,j);
- }
- //
- // cout << "X\t" << i << "\tY\t" << wynik << endl;
- output << wynik << ", ";
- }
- output << "];\n";
- output << "xx =[ ";
- for(int i=0; i<b; i++)
- {
- output << xsy[i] << "; ";
- }
- output << "];\n";
- output << "yy =[ ";
- for(int i = 0; i < b; i++)
- {
- double wynik = 0;
- for(int j = 0; j <= s; j++)
- {
- //wynik na głównej
- wynik+= aki[j]*pow(x2sy[i],j);
- }
- output << wynik << "; ";
- }
- output << "];\n";
- output.close();
- //for(int i = 0; i < b; i++)
- //{
- //
- // double wynik = 0;
- // for(int j = 0; j <= s; j++)
- // {
- // //wynik na głównej
- // wynik+= aki[j]*pow(x2sy[i],j);
- // }
- //cout << "X\t" << x2sy[i] << "\tY\t" << wynik << endl;
- //}
- //cout << "pointsy na funkcje" << endl;
- //for(double i = x2sy[0] - 0.5; i < 4; i+= 0.01)
- //{
- //
- // double wynik = 0;
- // for(int j = 0; j <= s; j++)
- // {
- // //wynik na głównej
- // wynik+= aki[j]*pow(i,j);
- // }
- //
- // cout << "X\t" << i << "\tY\t" << wynik << endl;
- //}
- }
- int f;
- cin >> f;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement