È possibile utilizzare una funzione anonima come funzione evento in Matlab. Quello che voglio fare è fondamentalmenteÈ possibile utilizzare una funzione anonima come funzione evento quando si risolve un ODE in Matlab
opt = odeset('Events', @(t,y) (deal(y(end)-t^2,1,0)));
[T,Y] = ode45(@odefun,[tstart tend],y0,opt);
Tuttavia, questo restituisce un errore lamentando che il numero di uscite a trattare deve corrispondere esattamente. C'è un altro modo per rendere la funzione anonima restituire più argomenti?
Il punto è che vorrei evitare una funzione wrapper. Usando deal, puoi effettivamente ottenere la funzione anonima per restituire tre valori (poiché deal restituisce solo i suoi argomenti). Tuttavia, il solutore ODE sembra aspettarsi un numero variabile di valori di ritorno mentre l'accordo deve essere esattamente uguale. –
Hai perfettamente ragione. Avrò un'altra occhiata a questo quando avrò un cambiamento. Sospetto che possa essere correlato al fatto che 'ode45' passa un numero variabile di argomenti al gestore di eventi. –
Sospetto che sia dovuto alla funzione valutata con un singolo output in 'odeevents' e con una tripletta di output in' odezero'. Il numero di argomenti di output di una funzione anonima, tuttavia, è uno * o * tre, ma non può gestire entrambi. – embert