20.07.2013 Views

Software matematic

Software matematic

Software matematic

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

150 Ecuat¸ii diferent¸iale în MATLAB<br />

eroarea (precizia) relativă dorită. Codificarea problemei twobody s¸i funct¸ia de tratare<br />

a evenimentelor gstop sunt date prin subfunct¸ii (ele pot fi păstrate la fel de bine<br />

în fis¸iere separate). Calculul orbitei se realizează cu ode45. Argumentul de intrare<br />

y0 este un vector cu 4 elemente, care dă pozit¸ia init¸ială s¸i viteza. Corpul us¸or pornes¸te<br />

din pozit¸ia (1,0) s¸i are viteza init¸ială (0,0.3), care este perpendiculară pe vectorul<br />

pozit¸iei init¸iale. Argumentul opts este o structură creată cu odeset, care specifică<br />

eroarea relativă (egală cu reltol) s¸i funct¸ia de tratare a evenimentelor gstop. Ultimul<br />

argument al lui ode45 este o copie y0, transmisă atât lui twobody cât s¸i lui<br />

gstop. Vectorul bidimensional d din gstop este diferent¸a dintre pozit¸ia curentă s¸i<br />

punctul de pornire. Viteza în pozit¸ia curentă este dată de vectorul bidimensional v,<br />

iar cantitatea val este produsul scalar al lui d s¸i v. Expresia funct¸iei de oprire este<br />

unde<br />

g(t,y) = d ′ (t) T d(t),<br />

d = (y1(t)−y1(0),y2(t)−y2(0)) T .<br />

Punctele în care g(t,y(t)) = 0 sunt extreme locale ale lui d(t). Punând dir = 1,<br />

vom indica că zerourile lui g(t,y) sunt atinse de sus, ceea ce corespunde minimelor.<br />

Setând isterm = 1, vom indica faptul că procesul de calcul trebuie oprit la<br />

întâlnirea primului minim. Dacă orbita este periodică, atunci orice minim al lui d<br />

apare când corpul se întoarce în punctul init¸ial.<br />

Apelând orbit cu o precizie mică<br />

orbit(2e-3)<br />

se obt¸ine<br />

tfinal =<br />

2.35087197761946<br />

yfinal =<br />

0.98107659901112 -0.00012519138558<br />

s¸i graficul din figura 6.11(a). Se poate observa din valoarea lui yfinal s¸i din grafic<br />

o abatere de la periodicitate. Avem nevoie de o precizie mai bună. Cu comanda<br />

orbit(1e-6)<br />

se obt¸ine<br />

tfinal =<br />

2.38025846171798<br />

yfinal =<br />

0.99998593905520 0.00000000032239<br />

Valoarea yfinal este acum suficient de apropiată de y0, iar graficul arată mult mai<br />

bine (figura 6.11(b)).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!