Кубическая интерполяция для конкретных точек с использованием 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')
Другие вопросы по тегам