MATLAB Answers

Ode45 extra parameters

74 views (last 30 days)
I would like to solve some equations with ode45.
The function is this:
function [ y_punto ] = bicicletta(t,y,a,b,u,delta,Ca,Cp,Iz,Fd)
v = y(1);
r = y(2);
alfaa = atan((v+a*r)/u)-delta;
alfap = atan((v-b*r)/u);
Fya = -Ca*alfaa;
Fyp = -Cp*alfap;
if (t>=tdon && t<=tdoff)
v_punto = 1/m*(Fya*cos(delta)+Fyp+Fyad)-ru;
r_punto = 1/Iz*(Fya*cos(delta)*a+Fyad*a-Fyp*b);
y_punto = [v_punto;r_punto];
Here is the script for starting simulation
a = 0.78;
b = 0.83;
Ca = 27537.5;
Cp = 27537.5;
Iz = 408.9;
u = 15*1000/3600;
delta = 5 * pi/180;
Fd = 100;
tspan = [0 tf];
y0 = [0;0];
[t,y] = ode45(bicicletta,tspan,y0);
The fact is that I need to pass extra parameters to the function. I don't know if I can define the function in this way
function [ y_punto ] = bicicletta(y)
and pass other parameters in another way for example declaring as global.
I did some search and I found this way of using ode45 but it gives me error
[t,y] = ode45(@(t,y)bicicletta(t,y,a,b,u,delta,Ca,Cp,Iz),tspan,y0);


Stephen Cobeldick
Stephen Cobeldick on 19 Mar 2016
Your last line of code, where you create an anonymous function:
is the correct approach to passing extra arguments. Please show us the complete error message (this means all of the red text).
Do not use globals: this is a slow and buggy way to write code.
Stephen Cobeldick
Stephen Cobeldick on 21 Mar 2016
SilverSurfer's "Answer" moved here:
Here his the error
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in simulazione (line 18)
[t,y] = ode45(@(t,y)bicicletta(t,y,a,b,u,delta,Ca,Cp,Iz),tspan,y0);
I attached also the scripts

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 19 Mar 2016
You have to define ‘tdon’ and ‘tdoff’ in your ‘bicicletta’ ODE function. I have no idea what you want to do, so I cannot correct that for you.


Show 3 older comments
Torsten on 22 Mar 2016
m and ru (maybe you mean r*u ?) in the definition of v_punto are undefined.
Best wishes
SilverSurfer on 22 Mar 2016
Thanks. I seems my code is full of little errors.
I missed also m in the script.
Now it runs.
Star Strider
Star Strider on 22 Mar 2016
‘Now it runs.’

Sign in to comment.

More Answers (0)

Sign in to answer this question.