Function handles and passing parameters to ode solver

20 visualizaciones (últimos 30 días)
Leon Stangenberg
Leon Stangenberg el 18 de Feb. de 2021
Editada: Stephen23 el 18 de Feb. de 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?

Respuesta aceptada

Stephen23
Stephen23 el 18 de Feb. de 2021
Editada: Stephen23 el 18 de Feb. de 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 comentario
Leon Stangenberg
Leon Stangenberg el 18 de Feb. de 2021
Editada: Leon Stangenberg el 18 de Feb. de 2021
Yes, thank you for that detailed answer, that was exactly what I couldn't figure out how to do.

Iniciar sesión para comentar.

Más respuestas (1)

Steven Lord
Steven Lord el 18 de Feb. de 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.
  1 comentario
Leon Stangenberg
Leon Stangenberg el 18 de Feb. de 2021
Thank you, that was what i was looking for, I don't know why I didn't come across that myself.

Iniciar sesión para comentar.

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by