How do I use anonymous functions to pass information between derivate functions for ODE23 ODE45 ODE15s and outputFcn?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I've mastered simple anonymous functions, but I think I'm stretching it too far here. I am trying to record intermediate variables into a data structure SD and save them on every successful step of an ODE routine.
I could, and have in the past, used global variables, but this syntax should be more elegant. Should it work?
function testODE
SD=SteppingData;
SD.iy=0;
SD.Flow=0;
SD.FlowArray=zeros(11,1);
options=odeset('OutputFcn', @(t,y,flag) Stepoutput(t,y,flag,SD));
[t,y]=ode23(@(t,y) equns(t,y,SD),[0 10], 10, options);
SD.FlowArray
end
function dydt=equns(t,y,SD)
SD.Flow=y+2;
dydt=-0.01*y; % first order reaction giving exponential decay
end
function status=Stepoutput(t,y,flag,SD)
% record some intermediate results each step
if ~strcmp(flag,'done')
SD.iy=SD.iy+1;
SD.FlowArray(SD.iy)=SD.Flow;
status=0;
end
end
And SteppingData.m is:
classdef SteppingData
properties
% data to record on each step. Normally algebraic variables.
iy; % record number
FlowArray; % record of flow
Flow;
end
end
Réponses (0)
Voir également
Catégories
En savoir plus sur Ordinary Differential Equations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!