Пример #1
0
        /// <summary>
        /// Показать информацию о интерполяции указанной функции методами класса полиномов
        /// </summary>
        /// <param name="f"></param>
        /// <param name="c">Массив абцисс узлов интерполяции</param>
        /// <param name="a">Начало отрезка с узлами</param>
        /// <param name="b">Конец отрезка с узлами</param>
        /// <param name="p">Степень числителя у рациональной функции</param>
        /// <param name="q">Степень знаменателя у рациональной функции</param>
        /// <param name="bq">Старший коэффициент знаменателя рациональной функции</param>
        public static void PolynomTestShow(Func <double, double> f, double[] c, double a = 0, double b = 0, int p = 1, int q = -1, double bq = 1)
        {
            if (a == 0 && b == 0)
            {
                a = c[0]; b = c[c.Length - 1];
            }
            if (q == -1)
            {
                q = c.Length - 1 - p;
            }
            Point[] P = Point.Points(f, c);
            Console.WriteLine("Набор узлов интерполяции:"); Point.Show(P);
            Polynom l = Polynom.Lag(P);//l.Show();
            Polynom n = Polynom.Neu(P);
            Func <double, double> cu = Polynom.CubeSpline(P);
            Func <double, double> r  = Polynom.R(P, p, q, bq);

            Console.WriteLine("Погрешности в равномерной норме:");
            Console.WriteLine("У полинома Лагранжа {0}", FuncMethods.RealFuncMethods.NormDistanceС(f, l.Value, a, b));
            Console.WriteLine("У полинома Ньютона {0}", FuncMethods.RealFuncMethods.NormDistanceС(f, n.Value, a, b));
            Console.WriteLine("У рациональной функции {0}", FuncMethods.RealFuncMethods.NormDistanceС(f, r, a, b));
            Console.WriteLine("У кубического сплайна {0}", FuncMethods.RealFuncMethods.NormDistanceС(f, cu, a, b));
            Console.WriteLine();
            Console.WriteLine("Погрешности в интегральной норме:");
            Console.WriteLine("У полинома Лагранжа {0}", FuncMethods.RealFuncMethods.NormDistance(f, l.Value, a, b));
            Console.WriteLine("У полинома Ньютона {0}", FuncMethods.RealFuncMethods.NormDistance(f, n.Value, a, b));
            Console.WriteLine("У рациональной функции {0}", FuncMethods.RealFuncMethods.NormDistance(f, r, a, b));
            Console.WriteLine("У кубического сплайна {0}", FuncMethods.RealFuncMethods.NormDistance(f, cu, a, b));
        }
Пример #2
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)}");
        }
Пример #3
0
 /// <summary>
 /// Вывести массив узлов на консоль
 /// </summary>
 public void Show()
 {
     Point[] P = new Point[this.CountKnots];
     for (int i = 0; i < this.CountKnots; i++)
     {
         P[i] = new Point(Knots[i]);
     }
     Point.Show(P);
 }