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);
        }
Exemplo n.º 2
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 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;
 }