Интерполяция по одному измерению двумерной матрицы

Я пытаюсь интерполировать M*N матрица. Например, матрица T представляет температуру и матрицу B представляет местоположение:

T = [1 3 5; ...
     2 4 6; ...
     1 2 3];
B = [0.1 0.2 0.3; ...
     0.1 0.2 0.3; ...
     0.1 0.2 0.3];

Я пытаюсь получить информацию о температуре в местах 0.15 а также 0.25, Итак, матрица B будет как:

New_B = [0.1 0.15 0.2 0.25 0.3; ...
         0.1 0.15 0.2 0.25 0.3; ...
         0.1 0.15 0.2 0.25 0.3];

и ожидаемые результаты для матрицы T будет:

T = [1 2 3 4 5; ...
     2 3 4 5 6; ...
     1 1.5 2 2.5 3];

Я старался:

New_T = interp2(T, B, New_B);

Но это не работает. Как я могу сделать эту интерполяцию?

2 ответа

Решение

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

New_T = interp1(B(1, :).', T.', New_B(1, :).').';

New_T =

    1.0000    2.0000    3.0000    4.0000    5.0000
    2.0000    3.0000    4.0000    5.0000    6.0000
    1.0000    1.5000    2.0000    2.5000    3.0000

Если вам интересно, вам нужно будет указать дополнительные точки сетки для использования. interp2:

New_T = interp2(B(1, :), (1:size(B, 1)).', T, New_B(1, :), (1:size(New_B, 1)).');

Вам придется использовать цикл for, потому что interp1 работает только для одной строки.

T=[ 1 3 5; 2 4 6; 1 2 3];
B=[0.1 0.2 0.3; 0.1 0.2 0.3; 0.1 0.2 0.3];


B_new = [0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3];

T_new = cell(2,1);

for k=1:size(B,1)

    T_new{k} =  interp1(B(1,:),T(k,:),B_new(k,:)); 

end

T_new = cell2mat(T_new)

Выход:

T_new =

    1.0000    2.0000    3.0000    4.0000    5.0000
    2.0000    3.0000    4.0000    5.0000    6.0000
    1.0000    1.5000    2.0000    2.5000    3.0000
Другие вопросы по тегам