Kann eine anonyme Funktion als Ereignisfunktion in Matlab verwendet werden? Was ich tun möchte, ist im GrundeIst es möglich, eine anonyme Funktion als Event-Funktion beim Lösen einer ODE in Matlab zu verwenden?
opt = odeset('Events', @(t,y) (deal(y(end)-t^2,1,0)));
[T,Y] = ode45(@odefun,[tstart tend],y0,opt);
Dies ist jedoch ein Fehler zurückgegeben beschweren, dass die Anzahl der Ausgänge müssen befassen genau angepasst werden. Gibt es eine andere Möglichkeit, die anonyme Funktion mehrere Argumente zurückzugeben?
Der Punkt ist, dass ich eine Wrapper-Funktion vermeiden möchte. Mit Deal können Sie tatsächlich die anonyme Funktion erhalten, um drei Werte zurückzugeben (da deal nur seine Argumente zurückgibt). Der ODE-Solver scheint jedoch eine unterschiedliche Anzahl von Rückgabewerten zu erwarten, während der Deal genau abgeglichen werden muss. –
Du hast vollkommen recht. Ich werde mir das nochmal ansehen, wenn ich eine Veränderung bekomme. Ich vermute, dass dies mit der Tatsache zusammenhängen könnte, dass "ode45" eine variable Anzahl von Argumenten an den Event-Handler übergibt. –
Ich vermute, dass es daran liegt, dass die Funktion mit einer einzigen Ausgabe in 'odeevents' und mit einem Ausgabetriplet in' odezero' ausgewertet wird. Die Anzahl der Ausgabeargumente einer anonymen Funktion ist jedoch entweder eins * oder * drei, aber beides kann nicht behandelt werden. – embert