Simulink中的逐行插值

时间:2014-11-19 22:05:14

标签: matlab block interpolation simulink

我有一个41x8矩阵,我想在Simulink中用它作为源码。源的输出应该是大小为8的行。数据需要在行之间进行插值。例如:

有一个41x1单调递增的列向量,它与第一个矩阵的41行按行对应,例如:

X=[0;        Z=[5   20;
   2.5;         10  26;
   5;           18  33;
   7.5;         27  41;
   10]          38  50]

需要在列之间进行插值(如果可行,则为三次样条插值)。 我有一个与X列向量中的值相关的输入。 对于此示例矩阵,在X的不同值处输出simulink模型:

X=[5]        Z=[18 33]

X=[6]        Z=[25.096 39.32]

最后的Z值是从三次样条插值中获得的。

到目前为止,我已经尝试使用Simulink中的“MATLAB函数”块和下一个代码,并使用“From workspace”块调用矩阵和向量。当我尝试运行模拟时,出现错误ocurr并且它表示X和Z(i)向量在函数interp1()中没有相同的维度

function [I] = fcn(A,X, Z)

%A: traget value for column vector
%X: 41X1 column vector
%Z: 41x8 matrix

I=zeros(1,8); %Just creating the row filled with zeros

for i=1:8
     I(i)=interp1(X,Z(:,i),A,'spline'); % Building the row interpolating at 
                                          % the A value that corresponds 
                                          % with the X1 column vector
end        

%the I column vector is an interpolated row from Z

end

关于如何让它运作的任何想法?

PD:X是必须从Matlab的基础工作区读取Z值。

0 个答案:

没有答案