Интерполяция по Лагранжу

Предыдущая  Содержание  Следующая  V*D*V

Для заданного набора точек с заданными значениями существует многочлен минимальной степени, принимающий в указанных точках такие же значения. Рассчитав такой многочлен, можно вычислить его значение в точке, находящейся между точками, для которых значения известны.

 

Математическая формула коэффициентов имеет вид:

В этой формуле:

N - порядок интерполяции

D = ( N - 1 ) / 2 + alpha

alpha - смещение между отсчётами, для которого надо произвести поиск значения

 

Вид функции при N=3 и alpha = 0.5

Вид функции при N=3 и alpha = 0.5

 

Удобнее всего использовать нечётный порядок функции 1, 3, 5... При N=1 интерполяция становится линейной.

 

Формула интерполяции имеет вид:

Смотри также

Интерполяционный многочлен Лагранжа

Код

 public static double[] getLagrangeCoefficient(int N, double alpha) {

         double D = ( N - 1 ) / 2 + alpha;

         double[] lagrange = new double[N + 1];

         for( int n = 0; n <= N; n++ ) {

                 lagrange[n] = 1.0;

                 for( int k = 0; k <= N; k++ ) {

                         if( n != k )

                                 lagrange[n] *= (D - k) / (n - k);

                 }

         }

         return lagrange;

 }

 public static double getLagrangeInterpolation(double[] fin, int index, double[] lagrange)

 {

         int N = lagrange.length - 1;

         int shift = index - (N - 1) / 2;

         double fout = 0.0;

         for( int k = 0; k <= N; k++ ) {

                 fout += lagrange[k] * fin[shift++];

         }

         return fout;

 }

Предыдущая  Содержание  Следующая