关于MATLAB中的inlineeval的错误

时间:2015-01-04 17:21:19

标签: matlab methods matrix inline

作为小组项目的一部分,我们有一个由2个非线性微分方程组成的系统,我们必须使用中点法绘制S = S(t),I = I(t)图形。

当我尝试使用相应的微分方程插入矩阵时,我得到以下错误:

“内联表达式错误==>矩阵([[ - (I S)/ 1000],[(I S)/ 1000 - (3 * I)/ 10]])  未定义的函数'matrix'用于'double'类型的输入参数。

inline / subsref错误(第23行)     INLINE_OUT_ = inlineeval(INLINE_INPUTS_,INLINE_OBJ_.inputExpr,INLINE_OBJ_.expr);“

我所做的代码如下:

syms I S
u=[S;I];
F=[-0.001*S*I;0.001*S*I-0.3*I];
F1=inline(char(F),'I','S');
h=100; %Valores aleatórios
T=100000;
ni=(T/h);
u0=[799;1];
f=zeros(1,2);
k=zeros(1,2);
i=1;

while i<=ni
f(1)=F1(u0(1));  
f(2)=F1(u0(2));
dx=h*f;
k(1)=F1((u0(1)+h*(1/2)),(u0(2)+h*(1/2)));  
k(2)=F1((u0(1)+h*(1/2)),(u0(2)+h*(1/2)));
u1=u0+h*k;
disp('i:'),disp(i)
disp('u= '),disp(u1)
u0=u1;
i=i+1;
end

我是新手,所以这个算法很可能是错误的,但是如果有人可以帮助我解决这个错误,我会对它进行预测。谢谢!

1 个答案:

答案 0 :(得分:0)

专门创建错误的问题是你将两个符号函数放入矩阵然后调用char(输出matrix([[-(IS)/1000], [(IS)/1000 - (3*I)/10]])而不是很好地转换为字符串)。

第二个问题是你试图将两个函数同时传递给inlineinline从字符串创建单个函数(无论如何都使用匿名函数而不是inline)。你不能在其中加入多个功能。

此处您不需要sym。事实上,如果你根本不需要操纵方程式,那就避免它(比它的价值更麻烦)。一种常见的方法是创建一个单元格数组:

F{1} = @(I,S) -0.001*S*I; 
F{2} = @(I,S) 0.001*S*I-0.3*I;

然后您可以传递IS

F{1}(500,500)

请注意,您的所有功能都包含IS,因此它们始终是必需的。重新考虑在传递这样一个变量时所期望的内容:f(1)=F1(u0(1));,因为这也会产生错误。