2015-06-22 49 views
-2

我有一个矩阵的样子:矩阵内的插值。 Matlab的

0 0 0 0 0 
    1 0 0 0 0 
    0 2 0 0 0 
    0 0 2 0 0 
    0 0 0 1 0 
    1 0 0 0 1 
    0 4 0 0 0 
    0 0 3 0 0 
    6 0 0 4 0 
    0 3 0 0 2 
    0 0 5 0 0 

这是11x5矩阵。 我想为每列垂直插值。

任何帮助?

谢谢。

+0

'interp2'可能? –

+0

我知道matricies和插值是什么;我不确定你的意思是“为每列纵向插值”。列1和列2(0,0.5,1,0,0,0.5,2.0,...)之间的值是否等于?感觉像两个简单的选择器和平均会做的伎俩。 – duffymo

+0

是的,我读过它,但我不知道如何正确地做到这一点。它每次都会给出错误的值。 – user3049408

回答

1
M =[0 0 0 0 0 
    1 0 0 0 0 
    0 2 0 0 0 
    0 0 2 0 0 
    0 0 0 1 0 
    1 0 0 0 1 
    0 4 0 0 0 
    0 0 3 0 0 
    6 0 0 4 0 
    0 3 0 0 2 
    0 0 5 0 0]; 

xi = 1:size(M,1) 
for colIdx = 1:size(M,2) 
    col = M(:,colIdx); 
    x = xi(~~col); %// Note that ~~col is a logical vector of elements that are not equal to zero. i.e. it's the same as col ~= 0 
    y = col(~~col); 
    M(:,colIdx) = interp1(x,y,xi); 
end 

然后如果你想外点是0在循环后添加此行:

M(isnan(M)) = 0; 
+0

非常感谢。 – user3049408

+0

我试过了。它给出了这个错误:x = xi(idx); 索引超出矩阵尺寸。 – user3049408

+0

@ user3049408现在就试试。因为我正在寻找不是零的数字,所以我放弃了一个'〜'。 – Dan