# 2nd Order Non-Linear Equation Numerical Solution and Plot

3 visualizzazioni (ultimi 30 giorni)
Conlen O'Brien il 17 Ott 2023
Commentato: William Rose il 17 Ott 2023
Hi All,
I am looking to numberically solve and graph the following equation:
With initial conditions:
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 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
William Rose il 17 Ott 2023
@Conlen O'Brien, Good job!
William Rose il 17 Ott 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".

Accedi per commentare.

### Risposta accettata

William Rose il 17 Ott 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 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Sam Chak il 17 Ott 2023
Spostato: Sam Chak il 17 Ott 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

Accedi per commentare.

### Categorie

Scopri di più su Solver Outputs and Iterative Display in Help Center e File Exchange

R2023b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by