public Polynomial Smoothing(int n) { Polynomial res = new Polynomial(n); Matrix matrix = new Matrix(n + 1, n + 1); Vector vect = new Vector(n + 1); double[] C = new double[2 * n + 1]; for (int m = 0; m < 2 * n + 1; ++m) { double sum = 0; for (int i = 0; i < N; ++i) { sum += Math.Pow(tabl[0, i], m); } C[m] = sum; } for (int k = 0; k < n + 1; ++k) { double sum = 0; for (int i = 0; i < N; ++i) { sum += tabl[1, i] * Math.Pow(tabl[0, i], k); } vect[k] = sum; } for (int i = 0; i < n + 1; ++i) { matrix[i, i] = C[i + i]; for (int j = i + 1; j < n + 1; ++j) { matrix[i, j] = C[i + j]; matrix[j, i] = C[i + j]; } } SLAE lsolve = new SLAE(matrix, vect); Vector aprmn = lsolve.GaussMethod(); for (int i = 0; i < aprmn.N; i++) { res[i] = aprmn[i]; } return(res); }
public Polynomial[] Spline() { Polynomial[] polinoms = new Polynomial[N - 1]; double h = tabl[0, 1] - tabl[0, 0]; double[] C = new double[N]; C[0] = 0; C[N - 1] = 0; Matrix mat = new Matrix(N - 2, N - 2); Vector vet = new Vector(N - 2); Vector result; for (int i = 0; i < mat.M; ++i) { mat[i, i] = 4 * h; if (i < mat.M - 1) { mat[i, i + 1] = h; mat[i + 1, i] = h; } vet[i] = (3 / h) * (tabl[1, i + 2] - 2 * tabl[1, i + 1] + tabl[1, i]); } if (mat.M != 0) { SLAE re = new SLAE(mat, vet); result = re.Sweeps(); for (int i = 0; i < result.N; ++i) { C[i + 1] = result[i]; } } Matrix odds = new Matrix(N - 1, 4); for (int i = 0; i < N - 1; ++i) { odds[i, 0] = tabl[1, i]; odds[i, 1] = ((tabl[1, i + 1] - tabl[1, i]) / h) - ((C[i + 1] + 2 * C[i]) * h) / 3; odds[i, 2] = C[i]; odds[i, 3] = (C[i + 1] - C[i]) / (3 * h); } for (int k = 0; k < N - 1; ++k) { Polynomial res = new Polynomial(0); res[0] = 0; for (int i = 0; i < 4; ++i) { Polynomial pol = new Polynomial(0); pol[0] = odds[k, i]; for (int j = 0; j < i; j++) { Polynomial pol2 = new Polynomial(1); pol2[0] = -tabl[0, k]; pol2[1] = 1; pol = pol * pol2; } res = res + pol; } polinoms[k] = res; } return(polinoms); }