Finite difference method to solve a nonlinear eqn?
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Onur Metin Mertaslan
le 25 Mar 2022
Commenté : Onur Metin Mertaslan
le 25 Mar 2022
Hello,
I have a second order nonlinear question and I need to solve it for different times by using finite difference method but I don't know how to start it. I am quite new in Matlab. Is there anyone who can help me or at least show me a way to do this?
thank you
6 commentaires
Torsten
le 25 Mar 2022
g = 9.81;
L = 1.0;
T = 1.0;
dT = 0.01;
y_0 = pi/2;
v_0 = 0;
f = @(t,y)[y(2);-g/L*sin(y(1))];
tspan = 0:dT:T;
y0 = [y_0;v_0];
[t,y] = ode45(f,tspan,y0);
plot(t,y)
Réponse acceptée
Torsten
le 25 Mar 2022
Modifié(e) : Torsten
le 25 Mar 2022
g = 9.81;
L = 1.0;
T = 1.0;
dT = 0.01;
y_0 = pi/2;
v_0 = 0;
f = @(t,y)[y(2);-g/L*sin(y(1))];
tspan = 0:dT:T;
y0 = [y_0;v_0];
[t,y] = ode45(f,tspan,y0);
y_linear = v_0/sqrt(g/L)*sin(sqrt(g/L)*t) + y_0*cos(sqrt(g/L)*t);
plot(t,[y(:,1),y_linear])
3 commentaires
Torsten
le 25 Mar 2022
Modifié(e) : Torsten
le 25 Mar 2022
The graph won't change because the dt is not the actual stepsize of the solver, but prescribes the output times for ode45. The stepsize is chosen by the solver and computed internally - you can't influence it because it's adaptively chosen and different for each time step to meet a prescribed error tolerance.
If you want a fixed-step solver to solve your equations for which you can prescribe the stepsize, you will have to program it on your own. E.g. explicit Euler is a simple one.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Nonlinear Control dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!