将已定义的函数传递给ODE求解器

时间:2012-01-08 18:07:22

标签: matlab

我已经定义了一个函数

function dy = toggle(t,y,p)
dy = zeros(2,1);
dy(1) = - y(1) + p(1)./(1+y(2).^p(2));
dy(2) = - y(2) + p(1)./(1+y(1).^p(3));

并将其保存在与该函数同名的.m文件中。在另一个文件caltoggle.m中,我写道:

[T,Y] = ode45(@toggle,[0 100],[0.2,0.1],[],[3,2,2]);

当我运行脚本caltoggle.m时,我收到错误:

??? [T,Y] = ode45(@
              |
Missing variable or function.

Error in ==> C:\MATLABR11\work\caltoggle.m
On line 1  ==> 

caltoggle

以上代码是教程中的一个例子,所以应该是正确的。我的问题一般是我无法调用已定义的函数。

2 个答案:

答案 0 :(得分:0)

如果其他文件不在同一目录中,则应将该目录添加到路径中 尝试用Matlab编写:

  

pathtool

此外,虽然可能不是您的情况,但如果您使用保留字命名文件,例如"尝试",则可能会造成严重破坏。

另外,尝试写

  

切换

它可能很有见地。

答案 1 :(得分:0)

在用于ODE求解器的Matlab documentation中,所有示例都将ode45的第一个参数传递给2个变量的函数,而不是像函数toggle那样的三个函数。您是否可以将toggle函数更改为仅接受两个输入参数,并查看是否可以解决问题(作为第一个测试,只需设置p(:)=1或类似的东西)