public bool Add(double[] c) { if (c.Length != 2 * n) { return(false); } double[] r = new double[2 * n]; double h = Math.PI / n; double temp = 0; for (int i = 0; i < 2 * n; i++) { r[i] = this.Value(temp) + c[i]; temp += h; } TrigonPolynomial newpol = new TrigonPolynomial(r, n); for (int k = 0; k <= n; k++) { a_index[k] = newpol.A[k]; } for (int k = 0; k < n - 1; k++) { b_index[k] = newpol.B[k]; } return(true); }
public double[] Solve(int _n, Func<double,double> radiusToFindSolutionOn) { int n = _n; // кількість точок рівна 2*n double[] solution;// розвязки на замкнутій зірковій кривій з кроком 2*PI/(2*n) // Шукаємо розвязок створивши еземпляр класу SystemOfIE (system of integral equations) передавши в нього відповідіні ядра(SmoothCore) double h = Math.PI / n; double[] radius = new double[2 * n]; double temp = 0; for (int i = 0; i < 2 * n; i++) { temp = i * h; // щоб похибка не накопичувалась radius[i] = edgeRadius(temp); } edgeR = new TrigonPolynomial(radius, n); r = edgeR; // означає що x знаходиться на межі SmoothCore coreH11 = new SmoothCore(H1_1); SmoothCore coreH12 = new SmoothCore(H1_2); SmoothCore coreH2 = new SmoothCore(H2); SystemOfIE equation = new SystemOfIE(coreH11,coreH12,coreH2, realBoundaryCondition,imBoundaryCondition); // перша половина fi - реальна частина, друга уявна double[] fi = equation.SolveWithSimpleMetodForPFwithWeakAndSmoothCore(n); // розв`язки інтегрального рівняння в точках t[j] = j*PI/N , j = 0, 2*N -1 // міняємо розташування точок x. Тобто шукатимемо розвязок на кривій з радіальною функцією radiusToFindSolutionOn for (int i = 0; i < 2 * n; i++) { temp = i * h; radius[i] = radiusToFindSolutionOn(temp); } r = new TrigonPolynomial(radius, n); // означає що x знаходиться на кривій з рад. ф-єю radiusToFindSolutionOn // шукаємо розвязок на заданій кривій solution = FindSolution(fi,n); // перша половина solution це реальна частина розвязку, а друга уявна return solution; }
public bool Add(TrigonPolynomial tp) { if (tp.N != n) { return false; } double[] r = new double[2 * n]; double h = Math.PI / n; double temp = 0; for (int i = 0; i < 2 * n; i++) { r[i] = this.Value(temp) + tp.Value(temp); temp += h; } TrigonPolynomial newpol = new TrigonPolynomial(r, n); for (int k = 0; k <= n; k++) { a_index[k] = newpol.A[k]; } for (int k = 0; k < n - 1; k++) { b_index[k] = newpol.B[k]; } return true; }