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