Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中一维矩阵样条插值_Matlab_Matrix_Interpolation - Fatal编程技术网

Matlab中一维矩阵样条插值

Matlab中一维矩阵样条插值,matlab,matrix,interpolation,Matlab,Matrix,Interpolation,我有一个三维矩阵,我想沿着这个矩阵的第三维插值数据。当然,以下是可能的: I = zeros(3,3,10); M = rand(3,3,5); for x = 1:3 for y = 1:3 I(x,y,:) = spline(1:5, M(x,y,:), linspace(1,5,10)); end end 然而,这些for循环不是非常优雅和高效,尤其是当矩阵大小变大时。 有没有一种方法可以更有效地沿特定尺寸进行样条插值?看起来直接在M上调用spline完全

我有一个三维矩阵,我想沿着这个矩阵的第三维插值数据。当然,以下是可能的:

I = zeros(3,3,10);
M = rand(3,3,5);
for x = 1:3
    for y = 1:3
        I(x,y,:) = spline(1:5, M(x,y,:), linspace(1,5,10));
    end
end
然而,这些for循环不是非常优雅和高效,尤其是当矩阵大小变大时。
有没有一种方法可以更有效地沿特定尺寸进行样条插值?

看起来直接在
M
上调用
spline
完全符合您的要求:

M = rand(3,3,5);
x = 1:5;
xx = linspace(1,5,10);

%// loop approach
I1 = zeros(3,3,10);
for row = 1:3
    for col = 1:3
        I1(row,col,:) = spline(x, M(row,col,:), xx);
    end
end

%// just calling spline
I2 = spline(x, M, xx);
正确性测试

>> isequal(I1,I2)

ans =

     1

谢谢你的快速回复。不幸的是,当我复制代码并按原样执行时,
isequal(I1,I2)
返回0。其他人也得到0作为返回值吗?@Ethunxxx这很奇怪,它肯定会为我返回1。由于不同的环境,它可能(尽管我怀疑)是一个截断/精度错误,在这种情况下,请检查
all(abs((I1(:)-I2(:)<0.000001)
。否则,请尝试打开一个干净的MATLAB实例并逐字运行代码。我只是以八度运行代码(通过Octave online)是的,这显然是一个与精度相关的错误:
isequal(abs(I1-I2)<1e-15,one(3,3,10))
返回1!!@Ethunxxx我对此感到非常惊讶。我无法想象为什么会这样。我也不知道。我正在Ubuntu 14.04上运行Matlab2014a。非常奇怪。不管怎样,你的答案简单而正确!非常感谢。显然,默认情况下样条曲线似乎作用于最后一个维度,对吗?