Кубическая интерполяция для конкретных точек с использованием interp2 в Matlab
Учитывая следующий пример, есть ли способ добиться бикубической интерполяции без генерации всей мелко разнесенной сетки?:
years = [5,10,20,25,40];
service = 1:3;
wage = [50 99 787.685
779 795 850
803 779 388
886 753 486
849 780 598];
w = interp2(service,years,wage,1.5,37.5,'cubic')
Предупреждение: "кубический" метод требует, чтобы сетка имела равномерный интервал. Переключение метода с "кубического" на "сплайн", потому что это условие не выполняется.
Я понимаю причину предупреждения. Поэтому вы хотите найти решение, указав конкретные точки без необходимости генерировать всю равномерно распределенную поверхность (доступные данные не распределены одинаково). Не обязательно должен быть interp2. Мне придется выполнить это для сотен поверхностей и сотен точек запроса, поэтому нужно будет довольно быстро возвращать "w". Есть идеи?
1 ответ
Если вы настаиваете на использовании 'cubic'
метод интерполяции вы можете использовать griddata
который предназначен для интерполяции рассеянных данных, то есть данных, которые не определены в равномерно распределенной сетке:
years = [5,10,20,25,40];
service = 1:3;
wage = [50 99 787.685
779 795 850
803 779 388
886 753 486
849 780 598];
w = griddata(service,years,wage,1.5,37.5,'cubic')