Solving nonlinear DE by reduction of order on matlab
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Nice of you all to answer my question.
I tried to graph the nonlinear ordinary DE in a textbook(Advanced Engineering Mathematics 6th Ed by Zill Wright).\
the DE is like this.
dy/dx = u
du/dx = x + y - y^2
Written the codes like below, but only gained 2 graphs each.
[sourcecode]
function dydt = odesys(t, y)
dydt(1) = y(1);
dydt(2) = t + y(2) - y(2)^2;
dydt = [dydt(1); dydt(2)];
end
[command]
[t, y] = ode45(@odesys, [-1 1], [-1 1])
plot(t, y);
grid
I want to get the graph as on the textbook, like the picture right below.(In case of copyright, I couldn't get original picture in the book)
What is wrong with my code?
0 Commenti
Risposta accettata
Fabio Freschi
il 11 Ago 2021
Modificato: Fabio Freschi
il 11 Ago 2021
There are some typos in your description of the problem. Here the correct version
% your ODE - note that (y(1) and y(2) are exchanged)
odesys = @(t,y)[y(2); t+y(1)-y(1)^2];
% soluiton - note that the time span is [0 10] and the initial conditions
% are set for t = 0;
[t, y] = ode45(odesys, [0 10], [-1 1]);
% plot
figure, plot(t,y(:,1));
grid on
3 Commenti
Fabio Freschi
il 12 Ago 2021
My pleasure. Regarding your questions
- the return outputs are the arrays t and y. The dimensions of t are Nx1, being N the number of time steps. This number is not known a priori, since ode45 uses adaptive step size. The dimensions of y is NxM, where M is the number of variables in your ODE. In this case M = 2. I understood you wanted only y(:,1), that is the variable y in your model.
- your way to call ode45 was correct, because you defined your ODE as an external function. I defined the model inline with an anonymous function. The data type of the anonymous function is a function_handle, so the @ symbol was not required in the call.
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!