コード例 #1
0
        private double FreshetByYCoreFunction(double t, double k)
        {
            double H       = IntegralEquationDiscretezer.CalculateDiscreteStep(PointsNumber);
            double coreSum = 0;
            double sj      = 0;

            for (int j = 0; j < PointsNumber; j++)
            {
                double x = InnerCurve.GetX(sj), y = InnerCurve.GetY(sj),
                       dx = InnerCurve.GetDerivetiveX(sj), dy = InnerCurve.GetDerivetiveY(sj);

                double denominator = x * x + y * y
                                     + Radius * Radius - 2.0 * x * Radius * Math.Cos(t)
                                     - 2.0 * y * Radius * Math.Sin(t);
                double firstTerm = -(x * x + y * y - Radius * Radius)
                                   * (2.0 * y - 2.0 * Radius * Math.Sin(t))
                                   / (2.0 * Math.PI * Radius * Math.Pow(denominator, 2));
                double secondTerm       = y / (Math.PI * Radius * denominator);
                double result           = (firstTerm + secondTerm) / 2.0;
                double derivetiveNorm   = dx * dx + dy * dy;
                double dataEquationCore = DataEquationOperatorCore(new Point(Radius * Math.Cos(t), Radius * Math.Sin(t)),
                                                                   new Point(x, y));
                coreSum += (2.0 * Math.PI / PointsNumber) * Density[j]
                           * (result * Math.Cos(k * sj) + dataEquationCore * dy * ChebishevPolDerivative(k, sj) / derivetiveNorm);// додано двійку без формули 2.0 * dataEquationCore

                //coreSum += (2.0 * Math.PI / PointsNumber) * Density[j]
                //    * (result * Math.Cos(k * sj));
                sj += H;
            }
            return(coreSum);
        }
コード例 #2
0
        private double H(double t, double tau)
        {
            if (Math.Abs(t - tau) > DeviationEps)
            {
                double curveDeviation = Math.Pow(InnerCurve.GetX(t) - InnerCurve.GetX(tau), 2)
                                        + Math.Pow(InnerCurve.GetY(t) - InnerCurve.GetY(tau), 2);

                double denominator = Math.E * Math.E * curveDeviation;

                double numerator = 4.0 * Math.Pow(Math.Cos(t) - Math.Cos(tau), 2);

                return(Math.Log(numerator / denominator) / (4.0 * Math.PI)
                       + GrinFunction(t, tau));
            }
            else
            {
                double curveAbs = Math.Pow(InnerCurve.GetDerivetiveX(t), 2)
                                  + Math.Pow(InnerCurve.GetDerivetiveY(t), 2);
                double logParam = 4.0 / (Math.E * Math.E * curveAbs);

                double result = Math.Log(logParam) / (4.0 * Math.PI)
                                + GrinFunction(t, t);

                return(result);
            }
        }