Sunteți pe pagina 1din 36

Capitolul 2 Elemente de programare n Maple

2.1 Scurt istoric

Odat cu evoluia calculatoarelor, i limbajele de programare au evoluat i s-au diversicat astfel c n prezent exist mai multe abordri accesibile programrii tiinice. n primul rnd limbajele clasice de programare au evoluat, noile versiuni ind capabile s exploateze toate avantajelor noilor procesoare: FORTRAN (FORmula TRANslator system) a fost practic primul limbaj tiinic. Creat iniial de John Backus i grupul su de la IBM n 1954 (FORTRAN0) acest limbaj a evaluat pn la standardul ANSI FORTRAN n 1977 urmat apoi de FORTRAN90 n 1992. Odat cu apariia i a altor aplicaii ale calculatoarelor - n afara celor pur tiinice - alte limbaje de programare s-au impus printre programatori. Cu toate acestea, programarea tiinic se bazeaz nc pe limbajul FORTRAN: marea majoritate a subrutinelor de calcul tiinic folosite n proiecte importante ale NASA - precum Programul Apollo - au fost scrise n FORTRAN i multe dintre ele sunt nc folosite n aceast form. Printre variantele mai noi de FOTRAN recomandm HP/Compaq/Digital Visual Fortran i INTEL Visual Fortran C este un limbaj cu o evoluie diferit fa de FORTRAN - a fost creat n paralel cu un alt limbaj (numit B) ncepnd spre sfritul anilor

32

Elemente de programare n Maple 1960 de un grup de la Bell Telephone Laboratories. Succesul limbajului C nregistrat mai ales dup anul 1990 a depit orice previziune i se datoreaz att performaelor propriu-zise ale limbajului ct i, cel mai probabil, rspndirii sistemelor de operare de tip UNIX care au incorporat acest limbaj. Acest succes deosebit a determinat intrarea limbajului C i n domeniul programrii tiinice astfel c astzi mai muli productori de biblioteci comerciale de subrutine numerice - precum NAG www.nag.com sau VNI/IMSL www.vni.com - ofer att variante implementate n Fortran ct i n limbajul C. Implementri foarte rspndite ale limbajului C sunt Microsoft Visual C i GCC http://gcc.gnu.org/ Limbajele BASIC i Pascal cu toate c sunt nc folosite n diverse variante (i aici amintim implementrile Microsoft Visual Basic i Borland Delphi) nu sunt limbaje semnicative n programarea tiinic. Ele sunt recunoscute pentru valenele lor educaionale, pentru simplitatea felului n care se pot depana erorile dar nu i prin performane necesare programrii tiinice.

Aceste limbaje, pe care le-am numit clasice, sunt limbaje compilate - modul general de lucru n astfel de limbaje presupune scrierea unei secvene de comenzi pe care o vom numi program i trimiterea ei spre compilator a crui sarcin este traducerea programului n limbajul specic procesorului. Ca o consecin, un program nu va executat dac se nregistraz erori de compilare. Relativ recent au fost perfecionate i alte tipuri de limbaje adaptate programrii tiinice. Acestea sunt medii integrate de programare precum Maple www.maplesoft.com sau Mathematica www.wolfram.com, medii de programare complexe care permit realizarea unei game largi de operaii, de la calcule numerice pn la calcule simbolice i reprezentri grace. n cele ce urmeaz vom descrie cteva din facilitile mediului Maple pentru a uura abordarea ulterioar a implementrii unor modele folosind acest limbaj.

2.2

Calculul numeric n Maple

Interfaa mediului de programare Maple este relativ simpl, uurnd primii pai n obinerea unor rezultate concrete. n Fig. 2.1 se prezint o fereastr

2.2 Calculul numeric n Maple

33

Maple tipic i cteva comenzi simple. nainte de a ncepe programarea n Maple trebuie reinute cteva reguli simple: ecare linie de comand trebuie s se termine cu ";" sau cu ":" i este executat la apsarea tastei Enter : 1. dac linia se termin cu ";" atunci rezultatul execuiei este aat de Maple precum cazul liniei de comand a:=3; 2. dac linia se termin cu ":" atunci rezultatul execuiei nu este aat de Maple precum cazul liniei de comand b:=5: pentru a atribui unei variabile (identicat cu un nume) o valoare se folosete operatorul ":=". De exemplu, a:=3; nseamn "atribuie variabilei a valoarea 3 ". pentru a compara egalitatea a dou valori se folosete operatorul "=" (direct ca n 2=7; sau prin prin numele de variabil precum n linia c=d;

Figura 2.1: Interfaa mediului Maple i cteva operaii simple.

Avnd n vedere precizrile de mai sus putem identica uor paii din Fig. 2.1:

34

Elemente de programare n Maple 1. se atribuie lui a valoarea 3 i se aeaz rezultatul; 2. se atribuie lui b valoarea 5 i nu se aeaz rezultatul; 3. se atribuie lui c valoarea a+b. aeaz rezultatul; Maple evalueaz valoarea sumei i

4. se atribuie lui d valoarea b la puterea a mprit la a la puterea b. Maple evalueaz parial expresia numeric i aeaz rezultatul; 5. se compar valorile numerice care se gsesc stocate n c i d. Maple nu aeaz un rezultat al comparaiei ci efectueaz doar nlocuirea numelor variabilelor cu valorile numerice asociate. Se poate observa c variabilei 125 d nu i este nc atribuit o valoare numeric ci ; 243 6. cu ajutorul funciei evalb() - evaluate as a Boolean expression se testeaz valoarea de adevr a expresiei anterioare.

Figura 2.2: Valorile variabilelor nu se terg la prsirea programului.

Spre deosebire de alte limbaje n Maple memoria "aparine" mediului de programare i nu unui anumit program. Pentru a testa acest lucru este sucient s se execute programul din Fig. 2.1 i apoi, fr a nchidere fereastra Maple s se deschid o nou foaie de lucru (meniul File New). n aceast

2.2 Calculul numeric n Maple

35

nou foaie valorile denite deja n primul program sunt cunoscute (Fig. 2.2) de aceea, pentru a ncepe ecare program nou de la o stare cunoscut a memoriei recomandm ca prima comand a programelor Maple s e restart.
> >

restart: a:=3; a := 3 b:=-8; b := 8 solutii:=solve(a*x^3+b/x=0, x); 2(3/4) 3(3/4) 1 (3/4) (3/4) 2(3/4) 3(3/4) 1 (3/4) (3/4) , I2 3 , , I2 3 3 3 3 3 evalf(solutii); 1.277886209, 1.277886209 I, 1.277886209, 1.277886209 I Int(a*x^3+b/x, x=-1..1); solutii := 8 dx x 1 integrala:=int(a*x^3+b/x, x=1..2); 45 integrala := 8 ln(2) 4 evalf(integrala); 5.704822555 Diff(a*x^3+b/x, x); 8 d (3 x3 ) dx x derivata:=diff(a*x^3+b/x, x); 8 derivata := 9 x2 + 2 x 3 x3
1

>

>

>

>

>

>

>

>

Figura 2.3: Program Maple ce ilustreaz cteva faciliti de calcul numeric.

Sunt rare cazurile n care nu se dorete tergerea tuturor variabilelor ci numai a unora. n acest caz se poate folosi funcia unassign(nume_variabil ) face ca variabila menionat s e eliminat din memorie.

36

Elemente de programare n Maple

O consecin mai subtil a acestor particulariti n gestionarea memoriei este felul n care un program Maple se poate inuena pe sine nsui atrgd erori la a doua execuie dup ce a funcionat ireproabil o dat. Vom evidenia acest tip de comportament n cadrul discuiei despre erorile frecvente n Maple (sec. 2.6).

2.3

Calculul simbolic n Maple

Un mare avantaj al mediului Maple este c pe lng calculele tipice, calcule n urma crora programul livreaz soluii numerice ale unor sisteme de ecuaii liniare, integrale sau difereniale, se pot obine i rezultate simbolice. Putem ilustra aceast facilitate deosebit de util n tiinele exacte folosind acelai program ca mai sus din care lipsete atribuirea unor valori numerice variabilelor a i b.
> >

restart: solutii:=solve(a*x^3+b/x=0, x); (b a3 )(1/4) (b a3 )(1/4) I (b a3 )(1/4) I (b a3 )(1/4) , , , a a a a integrala:=int(a*x^3+b/x, x=1..2); 15 a integrala := + b ln(2) 4 evalf(integrala); 3.750000000 a + 0.6931471806 b Diff(a*x^3+b/x, x); b (a x3 + ) x x derivata:=diff(a*x^3+b/x, x); b derivata := 3 a x2 2 x solutii :=
Figura 2.4: Program Maple ce ilustreaz cteva faciliti de calcul simbolic.

>

>

>

>

O alt particularitate a sintaxei Maple este legat de modul n care se denesc funciile i expresiile:

2.3 Calculul simbolic n Maple

37

> >

restart: f1 := 3*x+5; f1 := 3 x + 5 f2 := (x) -> 3*x+5; f2 := x 3 x + 5 eval( f1(10) ); 3 x(10) + 5 eval( f2(10) ); 35

>

>

>

Figura 2.5: Program Maple ce ilustreaz modul de denire i de utilizare a expresiilor i funciilor.

Orice atribuire de tipul nume := expresie nu denete o funcie. Cu toate c expresia f1 := 3*x+5 este similar cu ceea ce numim n mod obinuit o funcie, pentru Maple ea reprezint o simpl expresie. Convenia de sintax a Maple este ca deniia unei functii s aib forma nume_functie := (nume_de_variabile -> expresie . Deosebirea dintre cele dou tipuri de deniii se poate observa la evaluarea numeric a acestora: n primul caz Maple nu recunoate x ca variabil a funciei f1 i nu o poate nlocui cu valoarea dorit. Maple poate foarte util n realizarea unor calcule numerice sau simbolice complicate i poate simplica expresii. n cazul unor expresii prea complicate returneaz expresii RootOf a cror valori pot gsite folosind allvalues():
> > > > >

restart: solutii := solve(x^3=7*x+1,x); simplify(solutii[3]); solutii_complexe := solve({x^2+y^3=1,x-y=2},{x,y}); allvalues(solutii_complexe);

Figura 2.6: Program Maple ce ilustreaz unele calcule numerice mai complexe.

38

Elemente de programare n Maple

Din considerente de spaiu n programul anterior am eliminat rspunsurile date de Maple.

2.4

Elemente de grac n Maple

Alturi de uurina cu care se pot implementa programele i de facilitile deosebite de calcul exemplicate pn acum, graca n Maple este unul dintre principalele atuuri ale acestui mediu. Pentru comenzile grace care se regsesc n pachetul plots vom exemplica modul de utilizate numai a ctorva, mai des folosite: Grace 2D: plot reprezint grace bidimensionale ale unor expresii date n form explicit sin(x), x=0..2*Pi sau parametric [sin(x)^3, cos(x)^3, x=0..2*Pi] 1 ; implicitplot reprezint grac soluiile unor expresii date n form implicit x^2+y^2=1, x=-1..1, y=-1..1; pointplot reprezint n plan puncte date prin perechi de coordonate [[1.0, 2.5], [2.0, 4.0], [5.0, -3.3]]. Dac se selecteaz cu ajutorul mouse-ului orice grac 2D, interfaa se modic punnd la dispoziie butoane specice cu ajutorul crora se poate modica felul n care sunt aate gracele.
> > >

restart: with(plots); plot(sin(x), x=0..2*Pi);

>

plot([sin(x)^3, cos(x)^3, x=0..2*Pi]);

2.4 Elemente de grac n Maple

39

0.5

3 x

0.5

0.5

0.5

0.5

0.5

Figura 2.7: Program Maple ce ilustreaz unele elemente de grac 2D.

Grace 3D: plot3d, implicitplot3d, pointplot3d sunt variantele 3D ale


trebuie remarcat diferena dintre plot([sin(x)3 , cos(x)3 ],x=0..2*Pi)
1

plot([sin(x)3 , cos(x)3 ,x=0..2*Pi])

40

Elemente de programare n Maple comenzilor descrise mai sus. Ele reprezint suprafee 3D de tipul z = f(x,y); spacecurve reprezint n spaiu o curb de tipul [fx(t), fy(t), fz(t)], t=...;
> > >

restart: with(plots): plot3d(sin(x)*cos(y), x=0..Pi, y=0..2*Pi);

1 0.5 0 0.5 1 0 1 2 y 3 4 5 6 3 2.5 2 1.5 x 1 0.5

>

spacecurve([cos(t),sin(t),t],t=0..4*Pi);

Animaii 2D i 3D: animate i animate3d sunt derivate din plot i plot3d la care se adaug nc un parametru ce are semnicaia timpului de exemplu: > animate(sin(x*t), x=0..2*Pi, t=1..10); > animate3d(sin(x*t)*cos(y/t),x=0..Pi,y=0..2*Pi,t=1..10); Cmpuri vectoriale 2D i 3D:

2.5 Elemente de programare n Maple

41

12 10 8 6 4 2 0 1 0.5 0 0.5 1 1 0.5 0 0.5 1

Figura 2.8: Program Maple ce ilustreaz unele elemente de grac 3D.

gradplot, fieldplot, gradplot3d, fieldplot3d precum i comenzile DEplot i DEplot3d din pachetul DEtools pot produce reprezentri de cmpuri vectoriale. Vom exemplica utilizarea lor n modelarea proceselor zice n capitolele ce urmeaz.

2.5

Elemente de programare n Maple

Ca orice limbaj de programare clasic, Maple pune la dispoziie modaliti de structurare a programului prin crearea de proceduri, de construire a structurilor repetitive (de tip for) i a celor decizionale (if).

2.5.1

Structuri decizionale n Maple

Structurile decizionale sunt simplu de implementat n Maple i nu prezint particulariti. Pentru testarea valorii de adevr a unei relaii ntre dou expresii se folosete: if expresie_condiional_1 then set_comenzi_1 elif expresie_condiional_2 then set_comenzi_2 ...

42 else set_comenzi_3 end if

Elemente de programare n Maple

unde liniile elif i else sunt opionale iar linia elif poate apare de mai multe ori cu diverse expresii condiionale. elif este varianta scurt a combinaiei else if i a fost introdus pentru a scrie mai uor structurile decizionale cu mai multe nivele i fr a scrie de ecare dat end if. Semnicaia logic a acestei semnatici este simpl: dac expresie_condiional_1 e adevrat, atunci execut set_comenzi_1, dac nu este adevrat expresie_condiional_1 dar este adevrat expresie_condiional_2 atunci execut set_comenzi_2 ... dac nici una dintre expresiile condiionale nu este adevrat atunci execut set_comenzi_3
> >

restart: a := 3; b := 5; a := 3 b := 5 if (a > b) then print("a este mai mare decat b") elif (a=b) then print("a este egal cu b") else print("b este mai mare decat a") end if; b este mai mare decat a

>

Figura 2.9: Program Maple pentru exemplicarea utilizrii structurii if.

ntreaga linie de comand if se poate scrie pe o singur a interfeei Maple dar pentru a mri lizibilitatea programului recomandm ca diversele pri ale structurii decizionale (if, elif, else, end if) s e scrise pe o linie nou precum n programul de mai sus. Crearea unei linii noi n editor fr ca Maple s ncerce s execute fragmentul de linie introdus pn n acel moment se face apsnd simultan Shift+Enter. Pentru structuri decizionale simple (de tip if-then-else, fr elif) a fost

2.5 Elemente de programare n Maple

43

creat i operatorul if 2 . Avantajul const n faptul c if ca operator poate utilizat n alte expresii:
> >

restart: a := 3; b := 5; a := 3 b := 5 if(a>b, print("a este mai mare decat b"), print("a este mai mic sau egal cu b")); a este mai mic sau egal cu b maximul := if(a>b, a, b); maximul := 5

>

>

Figura 2.10: Program Maple pentru exemplicarea utilizrii operatorului if .

2.5.2

Structuri iterative n Maple

Principala structur iterativ implementat n Maple combin dou structuri care se gsesc n mod curent n limbajele de programare: cele de tip for utile n general n cazurile cnd numrul de iteraii este cunoscut i cele de tip while pentru iteraii a cror sfrit este decis de calculator. for nume_variabil from expresie_1 by expresie_2 to expresie_3 while expresie_condiional do ... set_comenzi ... end do n principiu, oricare dintre componente poate lipsi n afar de do i end do. Semnicaia general este:
Atenie, acest operator se scrie ncadrat de semne apostrof inverse pe tastaturile standard cu 101 taste organizate conform standardului QWERTY de baz putei gsi acest semn pe tasta situat sub tasta Escape, lng tasta numeric 1.
2

44

Elemente de programare n Maple

se dau variabilei nume_variabil valori de la expresie_1 pn la expresie_3 cu pasul expresie_3 i dac expresie_condiional este adevrat atunci pentru ecare valoare execut set_comenzi dac se ntlnete un caz n care expresie_condiional nu este adevrat atunci iteraia se oprete De exemplu: ncepnd de la 1 cte numere impare succesive trebuiesc adunate pentru a obine o sum mai mare sau egal cu 100 i care e valoarea sumei. Rspuns: numerele impare de la 1 la 19 iar suma lor este chiar 100:
> >

restart: suma := 0: for i from 1 by 2 to 100 while suma < 100 do suma := suma + i: end do: i_final := i-2; suma; i_nal := 19 100

>

Figura 2.11: Program Maple pentru exemplicarea utilizrii structurii for.

Maple pune la dispoziie i un operator iterativ, seq, foarte util la crearea de secvene: seq (expr, var =min..max, pas ) returnez irul valorilor expresiei expr De exemplu irul valorilor funciei sin (x) pentru valorile x {0.00, 0.25, 0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 2.00} este:

2.5 Elemente de programare n Maple

45

> >

restart: seq(sin(x), x=0..2, 0.25);

0, 0.2474039593, 0.4794255386, 0.6816387600, 0.8414709848, 0.9489846194, 0.9974949866, 0.9839859469, 0.9092974268

Figura 2.12: Program Maple pentru exemplicarea utilizrii operatorului seq.

Not: n cazul sintaxei specic versiunilor vechi de Maple nu exista end if i end do; cuvntul cheie care marca nchiderea unei bucle if era fi iar cel care marca sfritul unui ciclu for-while-do era od. fi i od sunt n continuare recunoscute de Maple dar se recomand folosirea noilor convenii de sintax.

2.5.3

Proceduri n Maple

n Maple procedurile se denesc folosind o sintax de tipul: proc(secven_argumente) local nume_variabile ; global nume_variabile ; uses denumiri_pachete ; ... corpul_procedurii ... end proc; unde secven_argumente este reprezentat de setul de variabile care sunt folosite de subrutin drept parametri de intrare; local nume_variabile enumer variabilele locale variabile care vor recunoscute doar n corpul de comenzi al procedurii; global nume_variabile enumer variabilele globale variabile care sunt vizibile n tot programul; uses denumiri_pachete enumer lista pachetelor care sunt, eventual, utilizate n subrutin;

46

Elemente de programare n Maple

De exemplu, pentru a crea o subrutin care s calculeze numrul de combinri posibile a n elemente luate cte m:
> >

restart: combinatii := proc( n, m ) n!/(m!*(n-m)!); end proc; combinatii := proc(n, m) n!/(m! (n m)!) end proc combinatii(18,2); 153

>

Figura 2.13: Program Maple pentru exemplicarea crerii unei proceduri.

Not: Exemplul de mai sus este prezentat doar cu scopul de a exemplica utilizarea procedurilor; crearea unei subrutine combinaii este redundant pentru c Maple pune la dispoziie un pachet de calcul combinatoric: > with(combinat): numbcomb(18,2); returneaz acelai rezultat.

2.6

Erori frecvente n Maple

n ncheierea acestei succinte introduceri n mediul de programare Maple prezentm cteva dintre erorile cele mai comune i cele mai probabile cauze ale acestora: Calculatorul rspunde Warning, premature end of input. Cauze probabile: de regul aceast eroare provine de la omiterea semnului ; sau : de la sfritul liniei de comand (Fig. 2.14): Maple returneaz exact linia introdus, fr efectueze nici un calcul. Cauze probabile:

2.6 Erori frecvente n Maple

47

Figura 2.14: Eroarea "premature end of input".

Maple nu a recunoscut linia introdus ca o ind comand din cauza unei erori de sintax n Fig. 2.15(a) am scris cifra zero "0" n locul literei o din plot Maple nu a recunoscut linia introdus cu toate c nu este nici o eroare de sintax unele comenzi sunt incluse n pachete i, nainte de a le folosi, trebuie ncrcat pachetul corespunztor cu with(nume_pachet ) (Fig. 2.15(b)) Maple nu poate returna alt rspuns deoarece calculele solicitate sunt prea dicile sau imposibil de realizat de exemplu, nu poate calcula primitiva funciei xx (Fig. 2.15(c)). A fost realizat un program care a funcionat foarte bine (Fig. 2.16(a)) dar chiar dac nu a fost modicat n nici un fel, unele comenzi nu mai returneaz rspunsul dorit. Cauze probabile: Dac programul a fost salvat pe harddisk i a fost ncrcat ulterior atunci trebuie tiut c valorile variabilelor i a celorlalte expresii utilizate n program nu sunt automat ncrcate n memorie. Dac la a doua execuie a programului se ncearc numai lansarea unei linii de la sfritul programului se pot primi erori pentru c variabilele necesare acestei comenzi nu sunt cunoscute. n cazul exemplului din Fig. 2.16(b) eroarea provine de la faptul c valorile numerice pentru a i b nu sunt cunoscute dac nu este executat i prima linie din program. De aceea, o regul util ar ca ntotdeauna la ncrcarea unui program de pe harddisk acesta s e executat odat de la nceput. Interfaa Maple faciliteaz aceast operaie punnd la dispoziie butonul !!! "Execute the worksheet". Dac programul nu ncepe cu restart sau dac a doua oar acesta

48

Elemente de programare n Maple

(a) eroare de sintax

(b) lips pachet

(c) calcul ce nu poate realizat

Figura 2.15: Cazuri n care Maple returneaz exact linia introdus.

nu a fost lansat n execuie de la prima linie atunci eroarea provine tocmai de la prezena unor valori deja denite la prima execuie i care ar trebui eliminate din memorie acesta este nc un motiv pentru care programele ar trebui s nceap cu restart i s e lansate n execuie de la nceput.

2.6 Erori frecvente n Maple

49

(a) prima execuie

(b) a doua execuie

Figura 2.16: La prima execuie, (a), comanda plot d rspunsul dorit iar ulterior, (b), returneaz eroare.

50

Elemente de programare n Maple

Capitolul 3 Modelarea tiinic


Modelarea poate denit ca o metod fundamental de analiz cantitativ, complementar analizei teoretice i analizei experimentale, utilizat pentru nelegerea unor fenomene sau pentru studiul comportamentului unor fenomene. Modelele nu au aprut odat cu limbajele de programare, ele au fost folosite de la nceputurile cercetrii tiinice pentru studii analitice cantitative sau calitative, pentru predicie i control. Un model este o descriere simplicat a unui fenomen sau a unui sistem. Se poate considera c acesta este util dac n urma simplicrilor introduse sistemul descris este redus la esena sa structural i/sau funcional. Este extrem de important s se cunoasc n amnunt aspectele din comportarea sistemului ce se doresc modelate i felul n care simplicrile introduse limiteaz aplicabilitatea modelului. Modelele pot mprite n diverse categorii n funcie de mai multe criterii: 1. n funcie de bazele teoretice ale construciei modelului: modele zice modele care pornind de la bazele zice ale comportrii diverselor entiti dintr-un sistem reconstituie comportamentul ansamblului. modele fenomenologice modele a cror design pornete de la observarea comportamentului sistemului n ncercarea de a gsi legi matematice care s descrie ct mai bine acest comportament.

52

Modelarea tiinic modele mixte modele care combin att modul de abordare specic modelelor zice ct i cel al celor fenomenologice de exemplu folosind descrierea zic a comportrii entitilor din sistem i o abordare fenomenologic a interaciunilor dintre ele. 2. n funcie de ordinul de mrime a celor mai mici entiti constitutive considerate n model: de la 1=1010 m modele "ab initio" folosesc principii fundamentale ("rst-principles" sau DFT (density f unction theory)), teorii ale zicii cuantice, pentru a descrie comportarea electronilor i a nucleelor. Astfel de modele pot folosite pentru nelegerea comportamentului moleculelor sau a grupurilor de molecule formate din cel mult cteva sute de atomi. de la 1nm=109 m modele atomistice pot folosi, de exemplu, dinamica molecular (MD) i metode Monte Carlo (MC) i, pornind de la funcii care descriu potenialele de interaciune interatomice caracterizeaz sisteme cu pn la 109 entiti. peste 0.1m=107 m modele mezoscopice una dintre cele mai utilizate abordri este metoda elementului f init (FEM) n care sistemul este mprit cu ajutorul unei grile n mici elemente considerndu-se c proprietile studiate nu variaz n interiorul unui element ci numai de la un element la altul. peste 1mm=103 m modele macroscopice descriu sistemele n general ca medii continue cu ajutorul ecuaiilor de transport precum n modele de curgere CFD (computational f luid dynamics) sau de transfer termic. 3. Dup gradul de determinism al modelului: modele deterministe modele care nu conin factori aleatorii. La aceeai parametri de intrare modelul va returna ntotdeauna aceleai valori ale parametrilor de ieire. modele stochastice modele ce au cel puin un element aleatoriu astfel nct la execuii succesive pot da rspunsuri diferite chiar dac parametrii de intrare nu s-au modicat. 4. Dup felul n care este sau nu considerat evoluia n timp:

3.1 Adaptarea modelului la fenomenul studiat

53

modele statice modele care nu descriu evoluia n timp a sistemului studiat. modele dinamice modele care consider i variaia i interaciunea n timp a variabilelor studiate.

3.1

Adaptarea modelului la fenomenul studiat

Pentru a ilustra ct de important este stabilirea precis a aspectelor care se doresc modelate vom alege un model simplu cel al aruncrii pe oblic a unui corp n cmp gravitaional.

Figura 3.1: Cel mai simplu caz al aruncrii pe oblic a unui corp.

Pentru nceput ne propunem s am traiectoria unei mingi aruncat de un atlet presupunnd c mingea are o mas de 1kg i c este aruncat cu v0 = 7m/s sub un unghi 0 = 30 de la y0 = 1m nlime (Fig. 3.1). Pentru atingerea acestui scop este sucient a rezolva ecuaiile de micare date de cele mai simple legi ale mecanicii: 2 md x = 0 dt2 d2 y m = mg dt2 Programul Maple care rezolv aceast problem este urmtorul:

54

Modelarea tiinic

> >

restart:with(plots): ec_x:=diff(x(t),t,t) = 0; ec_x := ec_y:=diff(y(t),t,t)=-m*g;


2

d2 dt2

x(t) = 0

>

>

>

d ec_y := dt2 y(t) = m g sol_x:=dsolve({ec_x,x(0)=0,D(x)(0)=v0*cos(theta0)},x(t)); sol _x := x(t) = v0 cos(0) t sol_y:=dsolve({ec_y,y(0)=1,D(y)(0)=v0*sin(theta0)},y(t));

> >

>

m g t2 + v0 sin(0) t + 1 2 assign(sol_x);assign(sol_y); m:=1;g:=9.8;v0:=7;theta0:=30*Pi/180; m := 1 g := 9.8 v0 := 7 0 := 6 plot([x(t),y(t),t=0..5],view=[0..6,0..5]); sol _y := y(t) =


5 4 3 2 1

Figura 3.2: Program Maple ce rezolv ecuaia traiectoriei i reprezint soluiile pentru cazul fr frecare.

3.1 Adaptarea modelului la fenomenul studiat 1. se denesc expresiile ecuaiilor ce urmeaz a rezolvate;

55

2. se rezolv pe rnd aceste ecuaii folosind dsolve nu este necesar rezolvarea simultan ecuaiilor ca sistem deoarece ele nu sunt cuplate. Sintaxa comenzii dsolve conine numele expresiei de rezolvat, dx (t) = condiiile iniiale n cazul de fa x (t) |t=0 = 0, v0x = dt t=0 dx (t) v0 cos (0 ), y (t) |t=0 = 1, v0y = = v0 sin (0 ) dt t=0 3. Maple nu atribuie automat necunoscutelor valorile gsite n urma rezolvrii. Pentru a conrma c dorim s folosim mai departe soluiile gsite sub numele funciilor necunoscute se folosete assign. 4. se denesc valorile numerice 5. se reprezint grac traiectoria dat sub form parametric. Pentru simplitate nu am calculat timpul necesar obiectului s ating solul (y (t) = 0) ci am folosit n cadrul comenzii plot opiunea view[xmin ..xmax , ymin ..ymax ] pentru a reprezenta doar poriunea de interes din aceast traiectorie. Modelul considerat este cel mai simplu model posibil nu ine seama de prezena atmosferei, de curbura scoarei Pmntului sau de variaia acceleraiei gravitaionale cu nlimea. Vom introduce pe rnd i aceti parametri pentru a vedea ce modicri trebuie aduse modelului. Pentru nceput lum n considerare fora de frecare cu aerul ea acioneaz pe aceeai direcie i n sens nvers fa de vectorul vitez (momentan!) i are modulul proporional cu modului vectorului vitez (Fig. 3.3): 2 m d x + k dx = 0 dt dt2 dy d2 y m +k = mg dt dt2 Urmtoarea secven de program se scrie n continuarea programului anterior: valorile atribuite lui x i y trebuie eliminate din memorie pentru a putea calcula soluiile noilor ecuaii dar valorile celorlali parametri nu trebuiesc terse, de aceea am folosit unassign i nu restart.

56

Modelarea tiinic

Figura 3.3: Cazul aruncrii pe oblic a unui corp cnd se ia n considerare frecarea cu aerul.

> >

unassign(x); unassign(y); ec_x:=diff(x(t),t,t)+k*diff(x(t),t) = 0;


d d ec_x := ( dt2 x(t)) + k ( dt x(t)) = 0 ec_y:=diff(y(t),t,t)+k*diff(y(t),t)+m*g = 0; d d ec_y := ( dt2 y(t)) + k ( dt y(t)) + 9.8 = 0 sol_x:=dsolve({ec_x,x(0)=0,D(x)(0)=v0*cos(theta0)},x(t)); 7 3 7 3 e(k t) sol _x := x(t) = 2k 2 k sol_y:=dsolve({ec_y,y(0)=1,D(y)(0)=v0*sin(theta0)},y(t));
2 2

>

>

>

> >

>

7 e(k t) (5 k + 14) 49 t 10 k 2 + 35 k + 98 + 10 k2 5k 10 k 2 assign(sol_x);assign(sol_y); k:=0.3; k := 0.3 plot([x(t),y(t),t=0..5],view=[0..6,0..5]); sol _y := y(t) =

3.1 Adaptarea modelului la fenomenul studiat

57

5 4 3 2 1

Figura 3.4: Program Maple ce rezolv ecuaia traiectoriei i reprezint soluiile pentru cazul n care se consider i frecarea cu aerul.

Noua traiectorie este asemntoare cu prima o reprezentare a ambelor traiectorii ntr-un acelai sistem de coordonate ar , probabil, util. Pentru a combina mai multe grace (chiar i de tipuri diferite) ntr-un acelai sistem de coordonate se poate folosi instruciunea display din pachetul de grac plots. Fiecare grac trebuie s primesc un nume, programul modicnduse n felul urmtor: ... primul caz fr frecare ...
>

desen1:=plot([x(t),y(t),t=0..5],view=[0..6,0..5]):

... al doilea caz cu frecare cu aerul ...


> >

desen2:=plot([x(t),y(t),t=0..5],view=[0..6,0..5]): display(desen1, desen2);

58

Modelarea tiinic

5 4 3 2 1

Figura 3.5: Modicri ale programului Maple necesare pentru a reprezenta mai multe grace ntr-un acelai sistem de coordonate.

Odat ce am luat n considerare frecarea cu atmosfera trebuie s renunm la descrierea micrii ntr-un singur plan pentru a putea include n model i viteza de micare a atmosferei. Noile ecuaii ale micrii sunt: 2 dx dx m dt2 + k dt vv sin (v ) cos (v ) = 0 dy d2 y m 2 +k vv sin (v ) sin (v ) = 0 dt dt d2 z dz m vv cos (v ) = mg 2 +k dt dt unde vv este viteza vntului. Programul urmtor rezolv acest sistem de ecuaii folosind urmtorul set de condiii iniiale x (t) |t=0 = 0, y (t) |t=0 = dx (t) dy (t) 0, z (t) |t=0 = 1, v0x = = v0 sin () cos (), v0y = = dt t=0 dt t=0 dz (t) = v0 cos () i considernd c viteza vntuv0 sin () sin (), v0z = dt t=0 lui este constant i bate n lungul axei Ox (v = 90 , v = 0 ) cu vv = 3m/s. Dup cum se poate observa, cu ct se renun la mai multe dintre simplicrile considerate iniial n cadrul modelului, cu att relaiile matematice

3.1 Adaptarea modelului la fenomenul studiat

59

implicate devin mai complexe. n exemplele de pn acum Maple a fost capabil s furnizeze soluiile simbolice ale ecuaiilor de micare dar dac ncercm s rezolvm cazuri mai complexe va trebui s apelm la rezolvarea numeric a ecuaiilor difereniale ale micrii.
> >

restart:with(plots): ec_x:=diff(x(t),t,t)+k*(diff(x(t),t) vv*sin(thetav)*cos(phiv))=0; ec_y:=diff(y(t),t,t)+k*(diff(y(t),t) vv*sin(thetav)*sin(phiv))=0; ec_z:=diff(z(t),t,t)+k*(diff(z(t),t) vv*cos(thetav)) + m*g=0; sol_x:=dsolve({ec_x,x(0)=0,D(x)(0)=v0*sin(theta0)*cos(phi0)}, x(t)); sol_y:=dsolve({ec_y,y(0)=0,D(y)(0)=v0*sin(theta0)*sin(phi0)}, y(t)); sol_z:=dsolve({ec_z,z(0)=1,D(z)(0)=v0*cos(theta0)},z(t)); assign(sol_x); assign(sol_y); assign(sol_z); m:=1;g:=9.8;v0:=7;vv:=3;k:=0.3; theta0:=30*Pi/180;phi0:=90*Pi/180; thetav:=90*Pi/180;phiv:=0; spacecurve([x(t),y(t),z(t)],t=0..5, axes=boxed);

>

>

>

>

> >

>

>

60

Modelarea tiinic

0 20 40 60 0 2 4 6 8 7 6 5 4 3 2 0

Figura 3.6: Program Maple pentru reprezentarea n spaiu a traiectoriei unui corp aruncat pe oblic.

Un principiu fundamental care trebuie avut n vedere la formularea oricrui model este utilizarea setului de coordonate adecvat. De exemplu, dac dorim s gsim traiectoria pe care se mic un corp aruncat de pe Pmnt pe orbit va trebui s scriem ecuaiile micrii n coordonate polare (Fig. 3.7) sau n coordonate sferice pentru cazurile mai complexe. Ecuaia general a micrii este asemntoare cu cea din cazurile precedente: d2 r = mg (r) dt2

(3.1)

Pentru schimbul de coordonate dintre sistemul cartezian (x, y) i cel polar (r, ) vom folosi er = cos () ex + sin () ey e = sin () ex + cos () ey Astfel, prima derivat a vectorului de poziie r (t) poate scris:

3.1 Adaptarea modelului la fenomenul studiat

61

Figura 3.7: Cazul micrii unui corp n cmp gravitaional central.

dr d = (r cos () ex + r sin () ey ) , dt dt = r cos () ex r sin () ex + r sin () ey + r cos () ey , = rer + re i folosind acest pas intermediar obinem derivata de ordinul al doilea: d2 r d = rer + re = 2 dt dt d = r cos () ex + r sin () ey r sin () ex + r cos () ey , dt = r cos () ex r sin () ex + r sin () ey + r cos () ey r sin () ex r sin () ex r2 cos () ex + +r cos () ey + r cos () ey + r2 sin () ey = = r r2 er + 2r + r e Ecuaia vectorial a micrii 3.1, n care se introduce relaia gsit mai sus g0 r2 d2 r pentru 2 i legea atraciei gravitaionale g (r) = 2 0 er se transform n dt r sistemul de ecuaii:

62

Modelarea tiinic

2 d2 r d g0 r2 =r 20 dt2 dt r d2 2 dr d = dt2 r dt dt care poate rezolvat de Maple dup cum este demonstrat n programul urmtor:
> > >

restart: with(plots): Ec_r := diff(diff(r(t),t),t) = r(t) * (diff(theta(t),t))*(diff(theta(t),t)) - g0*r0*r0/r(t)/r(t); Ec_r :=


d2 dt2 d r(t) = r(t) ( dt (t))2

g0 r0 2 r(t)2

>

Ec_theta := diff(diff(theta(t),t),t) = - 2 * (diff(r(t),t))*(diff(theta(t),t))/r(t); Ec_theta :=


d2 dt2 d d 2 ( dt r(t)) ( dt (t)) r(t)

(t) =

>

>

g0:=9.81;r0:=10;v0:=1.5;alpha0:=45*Pi/180; g0 := 9.81 r0 := 10 v0 := 1.5 0 := 4 sol:=dsolve({Ec_r, Ec_theta, r(0)=r0, theta(0)=0, D(r)(0)=v0*sin(alpha0), D(theta)(0)=v0*cos(alpha0)}, {r(t), theta(t)}, numeric); sol := proc(x _rkf45 ) . . . end proc

>

n_pct_max := 1000; n_pct_max := 1000 sol(1); [t = 1., r(t) = 11.5170494016002838, (t) = 0.930509693009611727,
d dt d dt

>

r(t) = 1.72239413509526762,

(t) = 0.799638727893530408]

3.1 Adaptarea modelului la fenomenul studiat


>

63

for i from 1 to n_pct_max do p1[i] := op(2,sol(i/10)[4]); p2[i] := op(2,sol(i/10)[2]); if (p2[i]<r0) then break; end if; end do: i_fin:=i-1; i _n := 70 planeta := implicitplot(x^2+y^2=r0^2, x=-11..11, y=-11..11, color=RED, scaling=constrained, thickness=3): traiectorie_1 := pointplot([seq([p2[i]*cos(p1[i]), p2[i]*sin(p1[i])], i=1..i_fin)], connect=true, color=BLUE, thickness=3):

>

>

>

Traiectorie 2
> >

v0:=1.9; v0 := 1.9 sol:=dsolve({Ec_r, Ec_theta, r(0)=r0, theta(0)=0, D(r)(0)=v0*sin(alpha0), D(theta)(0)=v0*cos(alpha0)}, {r(t), theta(t)}, numeric); sol := proc(x _rkf45 ) . . . end proc for i from 1 to n_pct_max do p1[i] := op(2,sol(i/10)[4]); p2[i] := op(2,sol(i/10)[2]); if (p2[i]<r0) then break; end if; end do: i_fin:=i-1; i_n := 1000 traiectorie_2 := pointplot([seq([p2[i]*cos(p1[i]), p2[i]*sin(p1[i])], i=1..i_fin)], connect=true, color=BLUE, thickness=3):

>

>

>

Traiectorie 3
>

v0:=2.0;

64

Modelarea tiinic

>

v0 := 2.0 sol:=dsolve({Ec_r, Ec_theta, r(0)=r0, theta(0)=0, D(r)(0)=v0*sin(alpha0), D(theta)(0)=v0*cos(alpha0)}, {r(t), theta(t)}, numeric); sol := proc(x _rkf45 ) . . . end proc for i from 1 to n_pct_max do p1[i] := op(2,sol(i/10)[4]); p2[i] := op(2,sol(i/10)[2]); if (p2[i]<r0) then break; end if; end do: i_fin:=i-1; i_n := 1000 traiectorie_3 := pointplot([seq([p2[i]*cos(p1[i]), p2[i]*sin(p1[i])], i=1..i_fin)], connect=true, color=BLUE, thickness=3): display(planeta, traiectorie_1, traiectorie_2, traiectorie_3, view=[-150..50, -50..100]);
100 80 60 y 40 20 140 100 80 60 40 20 x 0 20 20 40 40

>

>

>

>

Figura 3.8: Program Maple pentru reprezentarea traiectoriei unui corp aruncat pe orbit.

3.1 Adaptarea modelului la fenomenul studiat

65

1. se denesc expresiile ecuaiilor micrii conform calculului realizat anterior; 2. se rezolv sistemul n acest caz ecuaiile sunt cuplate aa c trebuie rezolvate ca sistem, nu separat ca n cazurile mai simple de pn acum. 3. sub numele sol se regsete o procedur care livreaz valorile soluilor dr (t) d (t) dup cum se vede ntr-o form complex t, r (t) , , (t) , dt dt din rspunsul primit la apelul sol(1);. Pentru a selecta r (t) i (t) se aleg doar elementele 2 i 4 ale irului soluiilor: sol(i/10)[2] i sol(i/10)[2]. Fiecare dintre aceste elemente cuprind relaii de tipul sol(i/10)[2] = r(t) = 11.5170494016002838 i pentru a selecta numai valorile numerice se folosete op care selecteaz operatori individuali dintr-o expresie: op(1, sol(i/10)[2]) = r(t) i op(2, sol(i/10)[2]) = 11.5170494016002838. 4. n cadrul unui iteraii for se calculeaz valorile soluiilor pentru pai 1 de timp egali cu s i valorile se stocheaz n dou tablouri numite p1 10 (pentru valorile lui ) i p2 (pentru valorile lui r). Iteraia se oprete dac s-a atins numrul maxim de puncte n_pct_max := 1000 sau dac valoarea coordonatei r devine mai mic dect raza Pmntului (corpul a czut napoi pe sol). 5. se reprezint grac traiectoria dat punctele calculate. n cadrul comenzii pointplot se creaz cu ajutorul seq secvenele de valori numerice; planeta se construiete folosind ecuaia cercului. 6. ntregul calcul se reia pentru alte dou valori ale vitezei iniiale i se reprezint grac cu ajutorul comenzii display. Pentru a modela un caz real cum este cel al unei rachete care pleac de pe sol ar trebui incluse n ecuaiile de micare toi parametrii discutai pn acum: frecarea cu aerul innd cont i de variaia densitii atmosferei cu nlimea i de viteza aerului, curbura solului i

66

Modelarea tiinic variaia acceleraiei gravitaionale cu nlimea

dar i noi parametri precum: modul de variaie a masei rachetei datorit arderii combustibilului i modul de variaie a forei propulsoare n timp. Dac destinaia rachetei este spaiul cosmic (i nu un alt obiect din atmosfer sau de pe sol) atunci probabil trebuie luat n calcul i poziia i dinamica Lunii pentru c probabil va avea o inuen asupra modului de variaie a acceleraiei gravitaionale precum i traiectoriile tuturor obiectelor cunoscute care orbiteaz n jurul Pmntului pentru a evita eventualele coliziuni.

S-ar putea să vă placă și