Интерполяционные формулы Ньютона

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Интерполяционные формулы Ньютона — формулы вычислительной математики, применяющиеся для полиномиального интерполирования.

Если узлы интерполяции равноотстоящие и упорядочены по величине, так что x_{i+1}-x_i=h=\mathrm{const}, то есть x_i=x_0+ih, то интерполяционный многочлен можно записать в форме Ньютона.

Интерполяционные полиномы в форме Ньютона удобно использовать, если точка интерполирования находится вблизи начала (прямая формула Ньютона) или конца таблицы (обратная формула Ньютона).

Короткая форма интерполяционной формулы Ньютона[править | править вики-текст]

В случае равноудалённых центров интерполяции, находящихся на единичном расстоянии друг от друга, справедлива формула:

P_n(x)=\sum_{m=0}^{n} \left(C_x^m\cdot \sum_{k=0}^m \left((-1)^{m-k}\cdot C_m^k\cdot f(k)\right)\right),

где C_x^m — обобщённые на область действительных чисел биномиальные коэффициенты.

Прямая интерполяционная формула Ньютона[править | править вики-текст]

или первая интерполяционная формула Ньютона, применяется для интерполирования вперёд: P_n(x) = y_0 + q \Delta y_0 + \frac{q(q-1)}{2!} \Delta^2 y_0 + \ldots + 
\frac{q(q-1)\ldots(q-n+1)}{n!} \Delta^n y_0, где q=\frac{x-x_0}h, \; y_i=f_i, а выражения вида \Delta^ky_0 — конечные разности.

  • Реализация на языке C# Платформа .NET
public double Newton(double x, int n, double[] MasX, double[] MasY, double step)// x - координата, в которой необходимо вычислить значение полинома Ньютона; n - количество узлов; MasX - массив x; MasY - массив значений x; step - шаг
 
        {
            double [,] mas = new double [n+2,n+1];
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < n + 1; j++)
                {
                    if (i == 0)
                        mas[i, j] = MasX[j];
                    else if (i == 1)
                        mas[i, j] = MasY[j];
                }
            }
            int m = n;
            for (int i = 2; i < n + 2; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    mas[i, j] = mas[i - 1, j + 1] - mas[i - 1, j];
                }
                m--;
            }
 
            double[] dy0 = new double[n + 1];
 
            for (int i = 0; i < n + 1; i++)
            {
                dy0[i] = mas[i + 1, 0];
            }
 
            double res = dy0[0];
            double[] xn = new double[n];
            xn[0] = x - mas[0,0];
 
            for(int i = 1;i<n;i++)
            {
                double ans = xn[i-1] * (x - mas[0,i]);
                xn[i] = ans;
                ans = 0;
            }
 
            int m1 =n + 1;
            int fact = 1;
            for (int i = 1; i < m1; i++)
            {
                fact = fact*i;
                res = res + (dy0[i] * xn[i - 1]) / (fact * Math.Pow(step, i));
            }
            return res;
        }

Обратная интерполяционная формула Ньютона[править | править вики-текст]

или вторая интерполяционная формула Ньютона, применяется для интерполирования назад: P_n(x) = y_n + q \Delta y_{n-1} + \frac{q(q+1)}{2!} \Delta^2 y_{n-2} + \ldots + 
\frac{q(q+1)\ldots(q+n-1)}{n!} \Delta^n y_0, где q=\frac{x-x_n}h

См. также[править | править вики-текст]