#include #include #include #include using namespace std; // y = cos^2(x) * sin(sqrt(5)*x) // metoda potęgowa double y(double x) { return (cos(x)*cos(x))*sin((sqrt(5)*x)); } void dyskretyzuj(double a, double b, double n, double *X, double *Y) { for (int i = 0; i <= n; i++){ X[i] = a + i * (b - a) / n; Y[i] = y(X[i]); } } void macierzGR(double **G, double *R, double *X, double *Y, double m, double n){ double pom = 0; for (int k = 0; k <= m; k++){ for (int j = 0; j <= m; j++){ pom = 0; for (int i = 0; i <= n; i++){ pom += pow(X[i], j + k); } G[k][j] = pom; } } for (int k = 0; k <= m; k++){ pom = 0; for (int i = 0; i <= n; i++){ pom += Y[i] * pow(X[i], k); } R[k] = pom; } } void rozwiaz(double **G, double *R, double *A, int m){ for (int k = 1; k < m; k++){ for (int i = k + 1; i < m; i++){ for (int j = k + 1; j < m; j++){ if (G[k][k] == 0){ for (int l = 0; l < m; l++){ G[k][l] += G[k + 1][l]; } R[k] += R[k + 1]; } else{ G[i][j] -= ((G[i][k] * G[k][j]) / G[k][k]); } } R[i] -= ((G[i][k] * R[k]) / G[k][k]); } } for (int i = 1; i <= m; i++){ for (int j = 0; j < i; j++){ G[i][j] = 0; } } double suma = 0; A[m] = R[m] / G[m][m]; for (int i = m - 1; i >= 0; i--){ for (int j = i + 1; j < m; j++){ suma += G[i][j] * A[j]; } A[i] = ((R[i] - suma) / G[i][i]); suma = 0; } } double delta(double *X, double *Y, double *A, int m, int n){ double suma = 0; for (int i = 0; i <= n; i++){ double suma2 = 0; for (int j = 0; j <= m; j++){ suma2 += A[j] * pow(X[i], j); } suma2 -= Y[i]; suma += pow(suma2, 2); } suma /= (double)(n + 1); return sqrt(suma); } double Q(double *A, double x, int m){ double suma = 0; for (int j = 0; j < m; j++){ suma += A[j] * pow(x, j); } return suma; } void zapisz(double a, double b, int n, int m, double *X, double *Y, double **G, double *R, double *A, double blad, string s){ ofstream plik(s); plik << "n = " << n << "\tm = " << m << "\t = " << a << " " << b << endl; plik << "\nX\tY\tQ\n"; for (int i = 0; i <= n; i++){ plik << X[i] << "\t" << Y[i] << "\t" << Q(A, X[i], m) << endl; } plik << "\nA\n"; for (int i = 0; i <= m; i++){ plik << A[i] << endl; } plik << "\nBlad = " << blad << endl; plik.close(); } int main() { double a = -2; double b = 2; int n = 49; int m = 1; for (m; m < 20; m++){ double *X = new double[n + 1]; double *Y = new double[n + 1]; double **G = new double*[m + 1]; double *R = new double[m + 1]; double *A = new double[m + 1]; for (int i = 0; i <= m; i++){ G[i] = new double[m + 1]; } dyskretyzuj(a, b, n, X, Y); macierzGR(G, R, X, Y, m, n); rozwiaz(G, R, A, m); string str = "wynik" + to_string(m) + ".txt"; zapisz(a, b, n, m, X, Y, G, R, A, delta(X, Y, A, m, n), str); } system("pause"); return 0; }