【问题标题】:Error regarding inlineeval in MATLABMATLAB 中有关 inlineeval 的错误
【发布时间】:2015-01-05 18:39:03
【问题描述】:

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

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

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

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

我是新手,所以算法很可能是错误的,但如果有人可以帮助我解决这个错误,我会很感激。谢谢!

【问题讨论】:

  • F1 是一个内联函数,它将调用函数matrix。函数matrix对Matlab可见吗,即是在你代码的本地文件夹中还是在路径中?
  • 使用“哪个矩阵”表示未找到,但我没有创建任何矩阵函数
  • 嗯,经过更多研究,我认为我之前的评论有点误导。我对sym 不太了解,但您遇到的错误应该与this 有关。我认为你应该尝试从那里开始。祝你好运!

标签: matlab methods matrix inline


【解决方案1】:

具体导致错误的问题是您将两个符号函数放入矩阵中,然后调用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));,因为这也会产生错误。

【讨论】:

  • 是的,我注意到它不会同时将两个函数传递给内联,所以我决定逐个传递 1,并且我也修复了 f(1)=F1(u0(1))。它已经工作了,只需要修复中点方法本身的算法。非常感谢您的回答!
猜你喜欢
  • 2014-03-12
  • 2017-03-09
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多