Ode45 extra parameters
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
SilverSurfer
am 19 Mär. 2016
Kommentiert: Star Strider
am 22 Mär. 2016
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)
Fyad=Fd;
else
Fyad=0;
end
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];
end
Here is the script for starting simulation
clc
clear
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;
tf=5;
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);
2 Kommentare
Stephen23
am 19 Mär. 2016
Bearbeitet: Stephen23
am 19 Mär. 2016
Your last line of code, where you create an anonymous function:
ode45(@(t,y)bicicletta(t,y,a,b,u,delta,Ca,Cp,Iz),tspan,y0);
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.
Stephen23
am 21 Mär. 2016
Bearbeitet: Stephen23
am 21 Mär. 2016
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
Akzeptierte Antwort
Star Strider
am 19 Mär. 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.
6 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!