Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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);
        }