The*_*guy 5 events matlab anonymous-function ode
是否可以在Matlab中使用匿名函数作为事件函数.我想做的基本上是
opt = odeset('Events', @(t,y) (deal(y(end)-t^2,1,0)));
[T,Y] = ode45(@odefun,[tstart tend],y0,opt);
Run Code Online (Sandbox Code Playgroud)
但是,这会返回一个错误,抱怨要处理的输出数量必须完全匹配.有没有其他方法使匿名函数返回多个参数?
小智 0
另外(这在游戏中已经很晚了,但这让我很沮丧)。这是一个带有嵌套函数的解决方案:
function [ dealfunchandle ] = dealwithit( arrayfunc )
% Takes as input an event function of (t,z) that returns a 3 array (in same order as event syntax).
function [a, b, c] = dealfunc(t,z)
output = arrayfunc(t,z);
a = output(:,1);
b = output(:,2);
c = output(:,3);
end
dealfunchandle = @dealfunc;
end
Run Code Online (Sandbox Code Playgroud)
该函数只需编写一次(如果您必须使用许多不同的事件函数,这会很方便)。这可用于在代码中生成匿名事件函数,如下所示:
arrayfunc = @(t,y) [y(1), 0, 1];
events = dealwithit(arrayfunc);
opts = odeset('Events', events);
Run Code Online (Sandbox Code Playgroud)
然后按照正常方式使用 ode45。