Проблема Matlab "interp2" относительно NaN на ребрах - PullRequest
3 голосов
/ 20 сентября 2011

Я немного застрял в простом упражнении и был бы признателен за помощь.

Я пытаюсь выполнить простую двумерную интерполяцию с использованием функции «interp2» в Matlab для переменной «tmin» размерности [15x12]:

lat = 15:1.5:32;
lon = 70:1.5:92;

lat_interp = 15:1:32;
lon_interp = 70:1:92;

[X,Y]   = meshgrid(lat,lon);
[Xi,Yi] = meshgrid(lat_interp,lon_interp);

tmin_interp = zeros(length(lon_interp),length(lat_interp),Num_Days);
tmin_interp(:,:) = interp2(X,Y,tmin(:,:),Xi,Yi,'linear');

Этот код приводит к тому, что последняя строка и последний столбец tmin_interp будут иметь значение NaN, то есть ::1006*

tmin_interp(23,1:18) ==> NaN
tmin_interp(1:23,18) ==> NaN

Кто-нибудь знает, что я могу делать неправильно? Я делаю простую ошибку в отношении настройки интерполяции? Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Причина, по которой они равны nan s, заключается в том, что до и после вашей сетки нет данных для интерполяции. Линейная интерполяция использует градиент поля в Xi,Yi, чтобы оценить значение в этой точке. Если с обеих сторон ничего нет, это невозможно.

Вы можете использовать параметр extrapval для экстраполяции вне указанного вами X,Y. Просто добавьте параметр 0 после 'linear':

interp2(X,Y,tmin(:,:),Xi,Yi,'linear', 0);

Это установит ноль для точек "на краю". Однако вполне вероятно, что для точек снаружи они могут упасть до некоторого значения по умолчанию, например, до нуля. Для этого вы можете добавить нули до и после tmin:

tmin_padded = [  zeros(1,size(tmin,2)+2)
                zeros(size(tmin,1),1) tmin  zeros(size(tmin,1),1)
                zeros(1,size(tmin,2)+2)  ];

(не проверял это, но вы поняли идею.) Вам также нужно будет добавить некоторые пре- и пост-значения к X и Y.

Используйте другое значение, если это значение «снаружи» или «по умолчанию» tmin.

PS почему вы создаете tmin_interp как трехмерное?

0 голосов
/ 06 мая 2016

Или просто попробуйте:

interp2(X,Y,tmin(:,:),Xi,Yi,'spline');

, чтобы избежать наложения значения 0.

НТН!

...