Function handles and passing parameters to ode solver
20 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Leon Stangenberg
il 18 Feb 2021
Modificato: Stephen23
il 18 Feb 2021
I'm trying to create a function that can be used in an ode solver but can't figure out how to properly pass parameters.
Currently the code is looking like this:
[t,L] = ode45(@f,[0 maxTime],ab);
The function uses the global variables defined in the file, but I'm trying to avoid using those global variables.
function dy = f(t,y)
global c_h c_v k_h k_v l_v l_h g m J_s h myTorque;
dy = zeros(4,1);
%zdotdot
dy(1) = y(2);
dy(2) = ...% Goes on using the variables from above
%thetadotdot
dy(3) = y(4);
dy(4) = ...% Goes on using the variables from above
end
I'd imagine the function looking more like:
function dy = f(t,y,c_h,c_v,k_h,k_v,l_v,l_h,g,m,J_s,h,myTorque)
dy = zeros(4,1);
%zdotdot
dy(1) = y(2);
dy(2) = ...% Goes on using the variables from above
%thetadotdot
dy(3) = y(4);
dy(4) = ...% Goes on using the variables from above
end
How would I call a function like this within the ode solver using the parameters as well?
0 Commenti
Risposta accettata
Stephen23
il 18 Feb 2021
Modificato: Stephen23
il 18 Feb 2021
Like this:
c_h = ... some value;
c_v = ... some value;
... all the others variables
myTorque = ... some value;
% Now define an anonymous function with exactly two input arguments:
fun = @(t,y) f(t,y,c_h,c_v,k_h,k_v,l_v,l_h,g,m,J_s,h,myTorque);
% and provide that function handle to the ODE solver:
[t,L] = ode45(fun,[0 maxTime],ab);
1 Commento
Più risposte (1)
Steven Lord
il 18 Feb 2021
The section of the documentation page for the ode45 function that talks about the odefun input argument links to a page that discusses a couple different techniques for passing additional parameters into the function you specify as the odefun input.
Vedere anche
Categorie
Scopri di più su Ordinary Differential Equations in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!