Finite difference method to solve a nonlinear eqn?
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
Torsten
2022-3-25
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)
采纳的回答
Torsten
2022-3-25
编辑:Torsten
2022-3-25
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 个评论
Torsten
2022-3-25
编辑:Torsten
2022-3-25
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Numerical Integration and Differential Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!