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); }
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); } }