Function handles and passing parameters to ode solver

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?

 채택된 답변

Stephen23
Stephen23 2021년 2월 18일
편집: Stephen23 2021년 2월 18일
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

Leon Stangenberg
Leon Stangenberg 2021년 2월 18일
편집: Leon Stangenberg 2021년 2월 18일
Yes, thank you for that detailed answer, that was exactly what I couldn't figure out how to do.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Steven Lord
Steven Lord 2021년 2월 18일

0 개 추천

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

Thank you, that was what i was looking for, I don't know why I didn't come across that myself.

댓글을 달려면 로그인하십시오.

카테고리

제품

릴리스

R2020b

질문:

2021년 2월 18일

편집:

2021년 2월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by