2015-07-09 2 views
0

Я использую Matlab для чтения большого набора данных (NetCDF) с информацией о магнитном поле. Набор данных представляет собой трехмерный массив из 318x562x554, и я могу получить три одномерных массива (318x1, 562x1 и 554x1) с каждым значением оси координат. Я хотел бы знать значения магнитного поля в точках, которые не соответствуют сетке данных. Этими пунктами являются в этом случае координаты траектории космического корабля, помещенного в двумерный массив (3xn, n зависит от того, сколько у вас координат).Получение данных о координатах, которые или нет в сетке данных через интерполяцию

x = ncread(file,'X_axis'); 
y = ncread(file,'Y_axis'); 
z = ncread(file,'Z_axis'); 
Bx = ncread(file,'Bx'); 

[x2,y2,z2] = meshgrid(y,x,z);    

length = numel(interval_ET_5000); 
Bx_intp = zeros(1,length); 
for i = 1:length 
    [xi,yi,zi] = meshgrid(position_MEX_Mars_5000(1,i),... 
          position_MEX_Mars_5000(2,i),... 
          position_MEX_Mars_5000(3,i)); 
    F = interp3(x2,y2,z2,Bx,xi,yi,zi); 
    Bx_intp(i) = F; 
end 

Я пробовал много вещей, которые даже не работали. Это «работает», но не правильно, потому что значения в Bx_intp являются высокими. Также из-за того, что координаты, сделанные в то время в цикле for, делают его очень медленным, нормальный пробег составляет около 3500 координат.

Так что в основном то, что я ищу, является обратным разбросаннымInterpolant. Эта функция принимает случайные точки данных и вы интерполируете значения на meshgrid. Но теперь у меня есть регулярная сетка, и я хочу интерполяцию на случайных точках.

+0

http://www.mathworks.com/help/matlab/ref/griddedinterpolant-class.html? –

+0

@AshishUthama Спасибо – Terranees

+0

Рад, что помог, не успел выработать полный ответ. –

ответ

0

Спасибо за подсказку Ashish Uthama! Я получил его работу с кодом ниже. Для других людей с той же проблемой. Вам нужно ndgrid вместо meshgrid для griddedInterpolant, и координаты должны быть монотонными.

x = ncread(file,'X_axis'); 
y = ncread(file,'Y_axis'); 
z = ncread(file,'Z_axis'); 
Bx = ncread(file,'Bx'); 

[x2,y2,z2] = ndgrid(x,y,z); 

F = griddedInterpolant(x2,y2,z2,Bx,'linear','none'); 
Bx_intp = F(position_MEX_Mars_5000(1,i),... 
      position_MEX_Mars_5000(2,i),... 
      position_MEX_Mars_5000(3,i)); 

 Смежные вопросы

  • Нет связанных вопросов^_^