Функция interpft осуществляет одномерную интерполяцию с использованием быстрого пре-образование Фурье (FFT). Этот метод вычисляет преобразование Фурье от вектора, который содержит значения периодической функции. Затем вычисляется обратное преобразование Фурье с использованием большего числа точек. Функция записывается в форме
y = interpft(x, n)
где x есть вектор, содержащий дискретные значения периодической функции, заданной на равномерной сетке, а n - число равномерно распределенных точек, в которых нужно оценить значения интерполируемой функции.
Двумерная интерполяция
Функция interp2осуществляет двумерную интерполяцию - важную операцию при обработке изображений и графического представления данных. В наиболее общей форме эта команда имеет вид
ZI = interp2(X, Y, Z, XI, YI, method)
где Z есть прямоугольный массив, содержащий значения двумерной функции;XиYявляют-ся массивами одинаковых размеров, содержащие точки в которых заданы значения двумер-ной функции; XIиYIесть матрицы, содержащие точки интерполяции (то есть промежуточ-ные точки, в которых нужно вычислить значения функции); method – строка, определяющая метод интерполяции. В случае двумерной интерполяции возможны три различных метода:
• Ступенчатая интерполяция (method = 'nearest'). Этот метод дает кусочно-постоянную поверхность на области значений. Значение функции в интерполируемой точке равно значе-нию функции в ближайшей заданной точке.
•Билинейная интерполяция (method = 'linear'). Метод обеспечивает аппроксимацию данных при помощи билинейной поверхности (плоскости) на множестве заданных значений двумер-ной функции. Значение в точке интерполяции является комбинацией значений четырех бли-жайших точек. Данный метод можно считать «кусочно-билинейным»; он быстрее и требует меньше памяти, чем бикубическая интерполяция.
• Бикубическая интерполяция (method = 'cubic'). Данный метод аппроксимирует поверх-ность при помощи бикубических поверхностей. Значение в точке интерполяции является комбинацией значений в шестнадцати ближайших точках. Метод обеспечивает значительно более гладкую поверхность по сравнению с билинейной интерполяцией. Это может быть ключевым преимуществом в приложениях типа обработки изображений. Особенно эффек-тивным данный метод является в ситуациях, когда требуется непрерывность как интерполи-руемых данных, так и их производных.
Все эти методы требуют, чтобы XиYбыли монотонными,то есть или всегда возрастающи-миили всегда убывающими от точки к точке. Эти матрицы следует сформировать с исполь-зованием функции meshgrid, или же, в противном случае, нужно убедиться, что «схема» то-чек имитирует сетку, полученную функцией meshgrid. Перед интерполяцией, каждый из указанных методов автоматически отображает входные данные в равномерно распреде-ленную сетку. Если XиYуже распределены равномерно, вы можете ускорить вычисления добавляя звездочку к строке метода, например,'*cubic'.
Сравнение методов интерполяции
Приведенный ниже пример сравнивает методы двумерной интерполяции в случае матрицы данных размера 7х7.
Сформируем функцию peaksна «грубой» сетке (с единичным шагом).
[x, y] = meshgrid(-3 : 1 : 3);
z = peaks(x,y);
Surf(x,y,z)
где функция meshgrid(-3:1:3)задает сетку на плоскости xиyввиде двумерных массивов размера 7х7; функция peaks(x,y)является двумерной функцией, используемой в MATLAB-ев качестве стандартных примеров, а surf(x,y,z)строит окрашенную параметрическую повер-хность. Соответствующий график показан ниже.
Создадим теперь более мелкую сетку для интерполяции (с шагом 0.25).
[xi,yi] = meshgrid(-3:0.25:3);
Осуществим интерполяция перечисленными выше методами.
zi1 = interp2(x,y,z,xi,yi,'nearest');
zi2 = interp2(x,y,z,xi,yi,'bilinear');
zi3 = interp2(x,y,z,xi,yi,'bicubic');
Сравним графики поверхностей для различных методов интерполяции.