Интерполяция по одному измерению двумерной матрицы
Я пытаюсь интерполировать 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