Бикубическая интерполяция вне значений сетки в Matlab

Можно ли добиться бикубической интерполяции за пределами значений сетки? Например:

L = [5,10,20,25,40];
W= 1:3;
S= [50 99 787
    779 795 850
    803 779 388
    886 753 486
    849 780 598];
size1 = griddata(W,L,S,2,40,'cubic')
sizeBeyond = griddata(W,L,S,2,41,'cubic')
sizeV4 = griddata(W,L,S,2,41,'v4')

возвращает:

size1 = 780

sizeBeyond = NaN

sizeV4 = 721.57

person Mary    schedule 08.06.2017    source источник
comment
Почему бы вам не ввести вместо этого экстраполированные значения.....?   -  person Siva Srinivas Kolukula    schedule 08.06.2017
comment
griddata(...,'cubic') использует кубические сплайны для интерполяции внутри треугольника заданных точек. Как, на ваш взгляд, это должно быть преобразовано в экстраполяцию?   -  person flawr    schedule 08.06.2017
comment
@flawr, я не уверен, что это вообще возможно, но хотел проверить. Смотрел что-то вроде этого (uk.mathworks.com/matlabcentral /fileexchange/), но по возможности используя кубический метод. Не обязательно использовать griddata, но мои точки разбросаны и расположены неравномерно.   -  person Mary    schedule 08.06.2017
comment
Проблема с полиномами в том, что они ведут себя очень плохо. Вне вашего облака точек вы просто получите кубический многочлен, который очень быстро взрывается, поэтому, за исключением случая, когда действительно нужно найти многочлен, они обычно не подходят для экстраполяции.   -  person flawr    schedule 08.06.2017
comment
Ах. хорошо знать. Спасибо.   -  person Mary    schedule 08.06.2017


Ответы (1)


Что я предлагал, так это то, что вы можете ввести значения, которые экстраполируются. Проверьте приведенный ниже код. Но учтите, что, как предположил Fruwr, экстраполяция ведет себя очень плохо.

l = [5,10,20,25,40];
w = 1:3;

li = [l 41] ;

S = [50 99 787
    779 795 850
    803 779 388
    886 753 486
    849 780 598];
[W,L] = meshgrid(w,l) ;
[Wi,Li] = meshgrid(w,li) ;
Si = interp2(W,L,S,Wi,Li,'spline') ;

size1 = griddata(W,L,S,2,40,'cubic')
sizeBeyond = griddata(Wi,Li,Si,2,41,'cubic')
sizeV4 = griddata(W,L,S,2,41,'v4')

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

Хотя это не ответ, я должен опубликовать его здесь для обсуждения.

person Siva Srinivas Kolukula    schedule 08.06.2017