Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <iostream>
- using namespace std;
- void dyskretyzacja(int n, int min, int max, double *x, double *y) {
- double skok = (max - min) / (1.0 * n );
- for (int i = 0; i <= n; i++) {
- x[i] = min + skok * i;
- y[i] = (sin(2 * x[i]) * sin(sqrt(2) * x[i]));
- }
- }
- void znajdzGiR(double **g, double *r, double *x,double *y, int n, int m) {
- //for (int i = 0; i < n; i++) {
- // std::cout << "x[" << i << "]: " << x[i] << std::endl;
- //}
- //for (int i = 0; i < n; i++) {
- // std::cout << "y[" << i << "]: " << y[i] << std::endl;
- //}
- //wypelnianie G
- for (int k = 0; k <= m; k++) {
- for (int j = 0; j <= m; j++) {
- double sum = 0;
- for (int i = 0; i <= n; i++) {
- sum += pow(x[i], j + k);
- }
- g[k][j] = sum;
- }
- }
- // std::cout << "G:" << std::endl;
- for (int k = 0; k <= m; k++) {
- for (int j = 0; j <= m; j++) {
- // std::cout << g[k][j] << " ";
- }
- // std::cout << std::endl;
- }
- //wypelnianie R
- for (int k = 0; k <= m; k++) {
- double sum = 0;
- for (int i = 0; i <= n; i++) {
- sum += y[i] * pow(x[i], k);
- }
- r[k] = sum;
- }
- }
- void zrobTrojkatna(int m, double **g, double *r) {
- for (int x = 0; x <= m; x++) {
- for (int y = x + 1; y <= m; y++) {
- double wspolczynnik = 1 * (g[y][x] / g[x][x]);
- // std::cout << wspolczynnik << std::endl;
- for (int z = x; z <= m; z++) {
- g[y][z] = g[y][z] - wspolczynnik * g[x][z];
- }
- r[y] = r[y] - wspolczynnik * r[x];
- }
- }
- //std::cout << "Trojk:" << std::endl;
- for (int k = 0; k <= m; k++) {
- for (int j = 0; j <= m; j++) {
- // std::cout << g[k][j] << " ";
- }
- // std::cout << std::endl;
- }
- }
- void rozwiazTrojkatna(double *aj, double **g, double *r, int m) {
- aj[m] = r[m] / g[m][m];
- for (int i = m - 1; i >= 0; i--){
- double suma = 0;
- for (int j = i + 1; j <= m; j++){
- suma += g[i][j] * aj[j];
- }
- aj[i] = (r[i] - suma) / g[i][i];
- }
- }
- void rozwiaz(int m,double **g, double *r, double &fx0, double *aj, double x0) {
- zrobTrojkatna(m,g,r);
- rozwiazTrojkatna(aj,g,r,m);
- double sum = 0;
- for (int i = 0; i <= m; i++) {
- sum += aj[i] * pow(x0, i); \
- }
- fx0 = sum;
- }
- void obliczBlad(double &S, int n,int m, double *aj,double *x, double *y) {
- double summm = 0;
- for (int i = 0; i <= n; i++){
- double sum = 0;
- for (int j = 0; j <= m; j++){
- sum += aj[j] * pow(x[i], j);
- }
- summm += pow(sum - y[i], 2);
- }
- S = sqrt(summm / (n + 1));
- }
- double Q(double x, double *a, int m)
- {
- double res = 0.0;
- for (int i = 0; i <= m; i++)
- {
- res += a[i] * pow(x, i);
- }
- return res;
- }
- int main()
- {
- using namespace std;
- int n = 49;
- int m = 5;
- int min = -2;
- int max = 2;
- double x0 = 1.5;
- double fx0 = 0;
- double S = 0;
- double* x = new double[n + 1];
- double* y = new double[n + 1];
- double** g = new double*[m + 1];
- double* r = new double[m + 1];
- for (int i = 0; i <= m; i++) {
- g[i] = new double[m + 1];
- }
- double *aj = new double[m + 1];
- dyskretyzacja(n, min, max, x, y);
- znajdzGiR(g, r, x, y, n, m);
- rozwiaz(m, g, r, fx0, aj, x0);
- obliczBlad(S, n, m, aj, x, y);
- for (int i = 0; i <= m; i++) {
- std::cout << "wsp[" << i << "]: " << aj[i] << std::endl;
- }
- cout << "BLAD: " << S << endl;
- //
- //
- //for (int i = 0; i < 50; i++)
- // cout << x[i] << endl;
- // cout << endl << endl;
- // for (int i = 0; i < 50; i++)
- // cout <<Q(x[i], aj, m) << endl;
- for (;;);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement