// Functions to calculate solution derivative on outer curve
        protected double Omega1(double tx)
        {
            DoubleCore <double> core = new DoubleCore <double>(Omega1CoreNotSingular);

            core.Prepare(tx);
            return(-Integral.CalculateWithHyperSingularCore(core, PointsNumber)); // перевірити обчисленн гіперсинугялрного інтегралу
        }
        /// <summary>
        /// Is used to build solution
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        private double PartialSolution(Point x)
        {
            DoubleCore <Point> core = new DoubleCore <Point>(RightPartCore);

            core.Prepare(x);
            return(-Integral.CalculateWithTrapeziumMethod(core, PointsNumber));
        }
 public InverseCrackProblemState(double radius, int pointsNumber, int correctionPolinomPower, IInversProblemTestData inverseProblemTestData)
     : base(radius, pointsNumber, inverseProblemTestData.GetDirectProblemData())
 {
     CorrectionPolinomPower   = correctionPolinomPower;
     InversProblemTestData    = inverseProblemTestData;
     FreshetCoreByX           = new DoubleCore <double>(FreshetByXCoreFunction);
     FreshetCoreByY           = new DoubleCore <double>(FreshetByYCoreFunction);
     LinDataEquationRightPart = new Func <double, double>(LinDataEquationRightPartFucntion);
 }
        private double DirectProblemRightPartFunction(double tParam)
        {
            DoubleCore <double> core = new DoubleCore <double>((t, tau) => {
                Point pointX = new Point(InnerCurve.GetX(t), InnerCurve.GetY(t));
                return(RightPartCore(pointX, tau));
            });

            core.Prepare(tParam);
            return(2.0 * Integral.CalculateWithTrapeziumMethod(core, PointsNumber) + 2.0 * OnCrackValueFunction(tParam));
        }
 public DirectProblemState(double radius, int pointsNumber, IDirectProblemTestData directProblemTestData)
 {
     Radius     = radius;
     OuterCurve = new StarCurve(OuterRadialFunction);
     InnerCurve = new ParametrizedCurve(InnerXFuntion, InnerYFunction,
                                        InnerXFuntionDerivetive, InnerYFunctionDerivetive);
     PointsNumber          = pointsNumber;
     DirectProblemCore     = new DoubleCore <double>(CoreFunction);
     RightPartFunction     = DirectProblemRightPartFunction;
     DirectProblemTestData = directProblemTestData;
 }
        private double LinDataEquationRightPartFucntion(double t)
        {
            var core = new DoubleCore <Point>(DataEquationOperatorCore);

            core.Prepare(new Point(
                             OuterCurve.GetX(t),
                             OuterCurve.GetY(t)));

            var result = -Integral.CalculateWithTrapeziumMethod(Density, core)
                         - Omega1(t);

            return(result);
        }
        public double[] BuildSolutionDerivativeOnOuterCurve(double[] density)
        {
            var descretePoints     = IntegralEquationDiscretezer.GetDiscretePoints(PointsNumber);
            var solutionDerivative = new double[descretePoints.Length];

            for (int i = 0; i < descretePoints.Length; i++)
            {
                var core = new DoubleCore <Point>(DataEquationOperatorCore);
                core.Prepare(new Point(
                                 OuterCurve.GetX(descretePoints[i]),
                                 OuterCurve.GetY(descretePoints[i])));

                solutionDerivative[i] = Integral.CalculateWithTrapeziumMethod(density, core)
                                        + Omega1(descretePoints[i]);
            }

            return(solutionDerivative);
        }