コード例 #1
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);
        }// for periodiс cores with smooth part f on [0, 2*PI]x[0, 2*PI]
コード例 #2
0
        public double[] SolveWithSimpleMetodForPFwithWeakAndSmoothCore(int _n)
        {
            N = _n;
            //формуємо вектор що задає праву чатину рівняння праву чатину рівняння
            g = new double[4 * N]; // 2*N значення з функцією gReal і  2*N значення з функцією gIm
            double temp = 0;

            h = (b - a) / (2.0 * N);
            for (int i = 0; i < 2 * N; i++)
            {
                temp         = i * h;
                g[i]         = gReal(temp);
                g[i + 2 * N] = gIm(temp);
            }
            // формуємо матрицю A, тобто дискретний вигляд системи інтегральних рівнянь
            A = new double[4 * N, 4 * N];
            double ti = 0, tauj = 0;

            // визначаємо кокфіцієнти що відповідатиметь на miu1(tauj)
            for (int i = 0; i < 2 * N; i++)
            {
                ti = i * h;
                H11.Prepare(ti);
                H12.Prepare(ti);
                H2.Prepare(ti);
                // коефіцієнти будуються за тригонометричними квадратурними формулами
                for (int j = 0; j < 2 * N; j++)
                {
                    tauj = j * h;
                    // перше рівняння
                    A[i, j] = A[i + 2 * N, j + 2 * N] =
                        Math.PI * H12.GetValue(tauj) / N +
                        H11.GetValue(tauj) * 2.0 * Math.PI * Integral.CoefficientForWeakSingular(H11.Param, N, tauj);
                    A[i, j + 2 * N] = -Math.PI * H2.GetValue(tauj) / N;
                    // друге рівняння
                    A[i + 2 * N, j] = Math.PI * H2.GetValue(tauj) / N;
                }
            }
            return(SLAE.LU_methodSolving(A, g, 4 * N));
        }