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 SystemOfIE(SmoothCore _H11, SmoothCore _H12,SmoothCore _H2,Func<double,double> _gReal,Func<double,double> _gIm) { H11 = _H11; H12 = _H12; H2 = _H2; gReal = _gReal; gIm = _gIm; }
public static double CalculateWithWeakSingularCore(SmoothCore f, int n) { int N = 2 * n; double temp = 0; double h = Math.PI / n; double sum = 0; for (int i = 0; i < N; i++) { sum += f.GetValue(temp) * CoefficientForWeakSingular(f.Param, n, temp); temp += h; } return sum * 2.0 * Math.PI; }
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); }