2nd Order Non-Linear Equation Numerical Solution and Plot
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Conlen O'Brien
el 17 de Oct. de 2023
Comentada: William Rose
el 17 de Oct. de 2023
Hi All,
I am looking to numberically solve and graph the following equation:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1513594/image.png)
With initial conditions:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1513599/image.png)
x=x(t); A and B are constant coefficients. I've been trying to use ODE45 but can't seem to get it to work properly.
Any help is appreciated!
4 comentarios
William Rose
el 17 de Oct. de 2023
Here are a couple of commands to plot results:
A=9.81; B=3;
tspan=[0 10];
x0=[-25 0];
[t,x] = ode45(@(t,x) [x(2);-A+B*x(2).^2], tspan, x0);
Plot results
subplot(211); plot(t,x(:,1),'-r.'); ylabel('x(t)'); grid on
subplot(212); plot(t,x(:,2),'-r.'); ylabel('dx/dt'); grid on; xlabel('Time')
You can see, by analyzing the original differential equation, that a "steady state" solution is
dx/dt=sqrt(A/B). Since dx/dt=constant, d2x/dt2=0, so this satisfies the original differential equation. Does the numerical solution above agree with this? Yes. sqrt(A/B)=sqrt(9.81/3)=+1.81 or -1.81. The plotted solution agrees with this: dx/dt=-1.81 in the "steady state".
Respuesta aceptada
William Rose
el 17 de Oct. de 2023
tspan=[0 10]; x0=[-25 0];
A=1; B=1;
[t,x] = ode45(@(t,x) [x(2);-A+B*x(2).^2], tspan, x0);
Do you think the results make sense?
1 comentario
Sam Chak
el 17 de Oct. de 2023
Movida: Sam Chak
el 17 de Oct. de 2023
You can assign a display name to each state and toggle the legends. Also, if A and B are fixed constants, then place them inside the odefcn() function so that you don't need to assign the values to A and B every time you call the ode45 solver.
tspan = [0 10];
x0 = [-25 0];
[t,x] = ode45(@odefcn, tspan, x0);
plot(t, x(:,1), 'blue', 'DisplayName', 'x(t)'), hold on
plot(t, x(:,2), 'red', 'DisplayName', 'x''(t)'), grid on
xlabel('t'), ylabel('\bf{x}')
legend show
function dxdt= odefcn(t, x)
A = 9.81;
B = 3;
dxdt = zeros(2,1);
dxdt(1) = x(2);
dxdt(2) = - A + B*x(2)^2;
end
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!