沿2D矩阵的一维插值

时间:2017-08-29 08:43:05

标签: matlab matrix interpolation

我正在尝试插入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.150.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 个答案:

答案 0 :(得分:2)

您必须使用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

答案 1 :(得分:2)

您可以将interp1应用于矩阵,在这种情况下,它将按照每列操作。由于您希望沿每行插值,因此您必须transpose输入和输出。您还需要numberOfItemsInSectionB

各一行
New_B

如果您感到好奇,则必须指定其他行网格点才能使用interp2

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