コード例 #1
0
        /// <summary>
        /// Оценить погрешность интерполяционного полинома (Лагранжа) в точке при константе
        /// </summary>
        /// <param name="f">Интерполируемая функция</param>
        /// <param name="n">Стень полинома</param>
        /// <param name="a">Начало отрезка интерполирования</param>
        /// <param name="b">Конец отрезка интерполяции</param>
        /// <param name="x">Точка, в которой оценивается погрешность</param>
        /// <param name="Mn">Константа в погрешности</param>
        public static void LagEstimateErr(Func <double, double> f, int n, double a, double b, double x, double Mn = 0)
        {
            if (Mn <= 0)
            {
                double[] y  = Point.PointsX(f, n, a, b);
                double   q  = Expendator.Min(y);
                double   y1 = Math.Min(q, x);
                q = Expendator.Max(y);
                double y2 = Math.Max(q, x);
                //double e = y1 + (y2 - y1) / 2;//середина отрезка
                //Mn = Math.Abs(f(e));
                Mn = FuncMethods.RealFuncMethods.NormC(f, y1, y2);
            }
            Polynom p = new Polynom(f, n, a, b);

            Console.WriteLine("Узлы интерполяции: "); Point.Show(Point.Points(f, n, a, b));

            Console.WriteLine("Полученный полином: "); p.Show();
            Console.WriteLine($"Значение полинома в точке {x} = {p.Value(x)}");
            Console.WriteLine($"Значение функции в точке {x} = {f(x)}");
            double t = Math.Abs(p.Value(x) - f(x));

            Console.WriteLine($"Абсолютная величина погрешности в точке {x} = {t}");
            Console.WriteLine($"Оценка погрешности при Mn = {Mn}: {t} <= {wn(f, n, a, b, x, Mn)}");
        }
コード例 #2
0
        private void GiveDivisionByNOD()
        {
            int a = A.DimOfFractionalPath(), b = B.DimOfFractionalPath(), c = C.DimOfFractionalPath();
            int max = Expendator.Max(a, b, c);

            for (int i = 0; i < max; i++)
            {
                A *= 10; B *= 10; C *= 10;
            }
            max = (int)Number.Rational.Nod((long)A, (long)B);
            A  /= max;
            B  /= max;
            C  /= max;
        }