Интерполяция

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

Интерполя́ция, интерполи́рование (от лат. inter–polis — «разглаженный, подновлённый, обновлённый; преобразованный»)— в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.

В функциональном анализе интерполяция линейных операторов представляет собой раздел, рассматривающий банаховы пространства как элементы некоторой категории.

Многим из тех, кто сталкивается с научными и инженерными расчётами, часто приходится оперировать наборами значений, полученных опытным путём или методом случайной выборки. Как правило, на основании этих наборов требуется построить функцию, на которую могли бы с высокой точностью попадать другие получаемые значения. Такая задача называется аппроксимацией. Интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.

Существует также близкая к интерполяции задача, которая заключается в аппроксимации какой-либо сложной функции другой, более простой функцией. Если некоторая функция слишком сложна для производительных вычислений, можно попытаться вычислить её значение в нескольких точках, а по ним построить, то есть интерполировать, более простую функцию. Разумеется, использование упрощенной функции не позволяет получить такие же точные результаты, какие давала бы первоначальная функция. Но в некоторых классах задач достигнутый выигрыш в простоте и скорости вычислений может перевесить получаемую погрешность в результатах.

Следует также упомянуть и совершенно другую разновидность математической интерполяции, известную под названием «интерполяция операторов». К классическим работам по интерполяции операторов относятся теорема Рисса — Торина (Riesz-Thorin theorem) и теорема Марцинкевича (Marcinkiewicz theorem), являющиеся основой для множества других работ.

Определения[править | править вики-текст]

Рассмотрим систему несовпадающих точек () из некоторой области . Пусть значения функции известны только в этих точках:

Задача интерполяции состоит в поиске такой функции из заданного класса функций, что

  • Точки называют узлами интерполяции, а их совокупность — интерполяционной сеткой.
  • Пары называют точками данных или базовыми точками.
  • Разность между «соседними» значениями  — шагом интерполяционной сетки. Он может быть как переменным, так и постоянным.
  • Функцию  — интерполирующей функцией или интерполянтом.

Пример[править | править вики-текст]

1. Пусть мы имеем табличную функцию, наподобие описанной ниже, которая для нескольких значений определяет соответствующие значения :

0 0
1 0,8415
2 0,9093
3 0,1411
4 −0,7568
5 −0,9589
6 −0,2794

Интерполяция помогает нам узнать, какое значение может иметь такая функция в точке, отличной от указанных точек (например, при x = 2,5).

К настоящему времени существует множество различных способов интерполяции. Выбор наиболее подходящего алгоритма зависит от ответов на вопросы: как точен выбираемый метод, каковы затраты на его использование, насколько гладкой является интерполяционная функция, какого количества точек данных она требует и т. п.

2. Найти промежуточное значение (способом линейной интерполяции).

6000 15.5
6378  ?
8000 19.2

В языках программирования[править | править вики-текст]

Пример линейной интерполяции для функции . Пользователь может ввести число от 1 до 10.

Fortran[править | править вики-текст]

	
program interpol
    integer i
    real x, y, xv, yv, yv2
    dimension x(10)
    dimension y(10)
    call prisv(x, i)
    call func(x, y, i)
    write(*,*) 'enter number : '
    read(*,*) xv
    if ((xv >= 1).and.(xv <= 10)) then
        call funcv(xv, yv)
        call sver(x, y, yv2, xv)
        write(*, *) yv2
    else
        write(*, *) 'false'
    end if
    read(*, *)
end

subroutine prisv(x, i)
    real x
    dimension x(10)
    integer i
    
    do i=1,10
        x(i) = 1 * i
    end do
end subroutine

subroutine func(x, y, i)
    real x, y
    dimension x(10)
    dimension y(10)
    integer i
    
    do i = 1, 10 
        y(i) = 3 * x(i)+x(i) ** 2
    end do 
end subroutine

subroutine funcv(xv, yv)
    real xv, yv
    yv = 3 * xv + xv ** 2
    write(*, *) yv 
end subroutine

subroutine sver(x, y, yv2, xv)
    real x, y, xv, yv2
    dimension x(10)
    dimension y(10)
    integer i
    
    do i = 1, 10
        if ((x(i) <= xv).and.(x(i+1) > xv)) then
            yv2 = ((xv - x(i)) * (y(i+1) - y(i)) / (x(i+1) - x(i))) + y(i)
        end if
    end do 
end subroutine

C++[править | править вики-текст]

	
int main()
{
    system("COLOR 0A");
    double ob, x1, x2, y1, y2, p1, p2, pi, skolko, status;

    system("echo Интерполяция X1 - X2 ");
    system("echo Ввести число:");
    cin >> ob;

    system("echo Например 62, C1 = 60, L1 = 1.31 ,C2 = 80 , L2 = 1.29");
    cout << "C1 = ";
    cin >> x1;
    
    cout << "L1 = " ;
    cin >> x2;
    
    cout << "C2 = " ;
    cin >> y1;
    
    cout << "L2 = " ;  
    cin >> y2;

    p1 = y1 - x1;
    p2 = y2 - x2;

    pi = p2 / p1;
    skolko = ob - x1;
    status = x2 + (pi * skolko);

    cout << "_______________________________________________________________";
    cout << endl <<  ob << " = " << status;
    _getch ();
    system("CLS");

    return 0;
}

Способы интерполяции[править | править вики-текст]

Интерполяция методом ближайшего соседа[править | править вики-текст]

Простейшим способом интерполяции является интерполяция методом ближайшего соседа.

Интерполяция многочленами[править | править вики-текст]

На практике чаще всего применяют интерполяцию многочленами. Это связано прежде всего с тем, что многочлены легко вычислять, легко аналитически находить их производные и множество многочленов плотно в пространстве непрерывных функций (теорема Вейерштрасса).

Обратное интерполирование (вычисление x при заданной y)[править | править вики-текст]

Интерполяция функции нескольких переменных[править | править вики-текст]

Другие способы интерполяции[править | править вики-текст]

Смежные концепции[править | править вики-текст]

  • Экстраполяция — методы нахождения точек за пределами заданного интервала (продление кривой)
  • Аппроксимация — методы построения приближённых кривых

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