Интерполя́ция, интерполи́рование (от лат. inter–polis — «разглаженный, подновлённый, обновлённый; преобразованный») — в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений[1]. Термин «интерполяция» впервые употребил Джон Валлис в своём трактате «Арифметика бесконечных» (1656).
В функциональном анализе интерполяция линейных операторов представляет собой раздел, рассматривающий банаховы пространства как элементы некоторой категории[2].
Многим из тех, кто сталкивается с научными и инженерными расчётами, часто приходится оперировать наборами значений, полученных опытным путём или методом случайной выборки. Как правило, на основании этих наборов требуется построить функцию, на которую могли бы с высокой точностью попадать другие получаемые значения. Такая задача называется аппроксимацией. Интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.
Существует также близкая к интерполяции задача, которая заключается в аппроксимации какой-либо сложной функции другой, более простой функцией. Если некоторая функция слишком сложна для производительных вычислений, можно попытаться вычислить её значение в нескольких точках, а по ним построить, то есть интерполировать, более простую функцию. Разумеется, использование упрощенной функции не позволяет получить такие же точные результаты, какие давала бы первоначальная функция. Но в некоторых классах задач достигнутый выигрыш в простоте и скорости вычислений может перевесить получаемую погрешность в результатах.
Следует также упомянуть и совершенно другую разновидность математической интерполяции, известную под названием «интерполяция операторов». К классическим работам по интерполяции операторов относятся теорема Рисса — Торина и теорема Марцинкевича (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.
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, 9
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
int main()
{
system("COLOR 0A");
double ob, x1, x2, y1, y2, p1, p2, pi, skolko, status;
cout << "Интерполяция X1 - X2 " << endl;
cout << "Ввести число: " << endl;
cin >> ob;
cout << "Например 62, C1 = 60, L1 = 1.31, C2 = 80, L2 = 1.29" << endl;
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 << endl;
system("pause");
return 0;
}
Простейшим способом интерполяции является интерполяция методом ближайшего соседа.
На практике чаще всего применяют интерполяцию многочленами. Это связано прежде всего с тем, что многочлены легко вычислять, легко аналитически находить их производные и множество многочленов плотно в пространстве непрерывных функций (теорема Вейерштрасса).
![]() |
Интерполяция в Викисловаре |
---|---|
![]() |
Интерполяция на Викискладе |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .