使用“标志”将参数传递给 ode45

计算科学 matlab
2021-12-21 19:51:39

我想将其他参数传递给 MATLAB 中的 ode45 函数。这方面已经有很多问题了,但我的函数中也有一个“标志”参数。

function [xdot,isterminal,dircn]=spp(t,x,flag,f)

通常,在调用 ode45 时,如果 spp 没有标志参数,则类似这样的操作会起作用。

options=odeset('RelTol',1e-13,'AbsTol',1e-14,'events','on');
[t,x,te,xe,ie]=ode45(@(t,x)spp(t,x,f),[0 2*pi/OMEG],[xin;xdin],options);

我四处寻找,但找不到解决方案。请帮帮我。

2个回答

你为什么不简单地传递标志,就像传递 f 一样?

[t,x,te,xe,ie]=ode45(@(t,x)spp(t,x,flag,f),[0 2*pi/OMEG],[xin;xdin],options);

(MATLAB 中的全局变量经常会导致问题,如果可能,最好避免它们。)

也许我在这里遗漏了一些东西?

我不完全知道如何处理“标志”,但通常当我需要将额外变量传递给 ode 时,我在主 .m 文件以及我定义赋予函数的文件中将它们定义为“全局”颂。

或者您可以使用 varargin 函数。