You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
148 Ecuat¸ii diferent¸iale în MATLAB<br />
Ecuat¸ia a fost scrisă ca un sistem de două ecuat¸ii de ordinul I, deci g(t,y) = y1.<br />
Codul pentru g(t,y) este<br />
function [gstop,isterminal,direction] = g(t,y)<br />
gstop = y(1);<br />
isterminal = 1;<br />
direction = 0;<br />
Primul argument de ies¸ire, gstop, este valoarea pe care dorim s-o anulăm. Dacă<br />
al doilea argument de ies¸ire, isterminal, are valoarea 1, rezolvitorul va termina<br />
execut¸ia dacă gstop este zero. Dacă isterminal = 0, evenimentul este<br />
înregistrat s¸i rezolvarea continuă. direction poate fi -1, 1 sau 0, după cum zeroul<br />
se atinge dacă funct¸ia este descrescătoare, crescătoare sau nemonotonă. Calculul s¸i<br />
reprezentarea traiectoriei se poate face cu<br />
function falling_body(y0)<br />
opts = odeset(’events’,@g);<br />
[t,y,tfinal] = ode45(@f,[0,Inf],y0,opts);<br />
tfinal<br />
plot(t,y(:,1),’-’,[0,tfinal],[1,0],’o’)<br />
axis([-0.1, tfinal+0.1, -0.1, max(y(:,1)+0.1)]);<br />
xlabel t<br />
ylabel y<br />
title(’Corp in cadere’)<br />
text(tfinal-0.8, 0, [’tfinal = ’ num2str(tfinal)])<br />
Pentru valoarea init¸ială y0=[1; 0] se obt¸ine<br />
>> falling_body([1;0])<br />
tfinal =<br />
1.65745691995813<br />
s¸i graficul din figura 6.10.<br />
Detect¸ia evenimentelor este utilă în probleme ce presupun fenomene periodice.<br />
Problema celor două corpuri este un exemplu bun. Ea descrie orbita unui corp asupra<br />
căruia act¸ionează fort¸a gravitat¸ională a unui corp mult mai greu. Utilizând coordonate<br />
carteziene, u(t) s¸i v(t) cu originea în corpul mai greu, ecuat¸iile sunt:<br />
u ′′ (t) = − u(t)<br />
r(t) 3<br />
v ′′ (t) = − v(t)<br />
r(t) 3,<br />
unde r(t) = u(t) 2 +v(t) 2 . Întreaga rezolvare este cont¸inută într-un singur fis¸ier<br />
de tip funct¸ie, orbit.m (sursa MATLAB 6.3). Parametrul de intrare, reltol, este