Cursul 1. Problematica. Ce înseamnă Software matematic? Pentru a răspunde unei astfel de întrebare ar fi interesant să facem o incursiune în trecut. Acum mai bine de 15 ani cu toţii ne întrebam cum ar fi dacă pentru rezolvarea unei probleme din matematică am putea face calculele mult mai repede la algebră, am putea face o figură mai reuşită la geometrie, am putea integra sau deriva, după caz, mai uşor o funcţie la analiză. Bineînţeles că dacă vom solicita mai mult memoria, acest şir de problematizări va continua. Calculatorul a intrat stingher în viaţa noastră creând mai întâi o plăcere şi după primele tatonări ne-am cam speriat crezând că nu poate face chiar orice. În mod evident, calculatorul nu poate face orice. Factorul de decizie în manipularea calculatorului este întotodeauna omul. Interpretarea rezultatelor oferite de calculator o face tot omul. Deci nu calculatorul este cel vinovat pentru toate rezultatele produse ci cel care îi introduce datele de intrare. Am ţinut să fac această precizare pentru a înţelege o idee care va urmări de aproape acest curs: folosirea calculatorului în rezolvarea oricărui tip de probleme, din orice domeniu al ştiinţei, nu substituie prezenţa umană ci o completează, o ajută. Acest curs urmăreşte introducerea programului Mathematica, un software creat de Wolfram Research (www.wolfram.com), în proiectarea şi utilizarea unor sisteme soft destinate rezolvării unor probleme specifice provenite din matematică. Cu toate acestea, prin similitudine, se pot crea şi sisteme soft destinate efectuării unor calcule laborioase sau interpretări simbolice din alte domenii ale ştiinţei şi tehnicii. Pentru rezolvarea unei probleme specifice, trebuie parcurşi următorii paşi: Pasul 1: enunţarea problemei. Pasul : formalizarea (modelarea) problemei. Pasul 3: rezolvarea problemelor matematice ce intervin în model. Pasul 4: interpretarea rezultatului. Enunţarea problemei trebuie realizată de către un expert uman al domeniului respectiv. Pentru modelare însă este necesară o colaborare a expertul uman, care a enunţat problema, cu un matematician care va interpreta rezulatele. Pasul 3 presupune folosirea unui sistem de software matematic. Rezultatele generate vor fi obiecte matematice (numere, expresii, mulţimi, funcţii, matrice etc). Afişarea lor va fi sub formă de numere, simboluri sau grafice. Interpretarea rezultatelor este realizată de către expertul uman care a propus problema atâta timp cât apar termeni specifici.
Aşa cum am sugerat din start, proiectarea sistemelor de software matematic a apărut din necesitatea de a efectua rapid calcule şi interpretări fără greşeli pentru probleme specifice de dimensiuni mari. Acest lucru nu înseamnă că problemele de dimensiuni mai mici nu-şi găsesc rezolvarea. Din contră, vor fi coloana vertebrală a acestui curs pentru a înţelege mai bine cum funcţionează un software matematic. Sistemele de software s-au dezvoltat fie pentru rezolvare unor probleme specifice dintr-un anumit domeniu, fie pentru a putea fi folosite în mai multe domenii ale ştiinţei. Din prima categorie, menţionăm GnuPlot (reprezentări grafice), TableCurve, Origin, DataFit, GnuFit (prelucrare a datelor experimentale), Statistica, SPSS, SPlus (prelucrare datelor statistice), MinOpt (probleme de optimizare), Singular (calcule cu polinoame) şi altele, iar din a doua categorie, având un caracter mai general, Maple V v10 (www.maplesoft.com), Mathematica v5. (www.wolfram.com), MatLab v14 (www.mathworks.com) sau MathCad v13 (www.mathsoft.com). Structura unui sistem de software matematic. De-a lungul timpului, calculatoarele şi-au făcut simţită prezenţa tot mai mult şi au devenit un instrument în rezolvarea tot mai multor probleme provenite din ştiinţă. Sisteme de software matematic aveau, la început, ca ţintă doar un anumit tip de probleme. Mai mult decât atât, necesitând folosirea unor biblioteci de funcţii şi cunoaşterea detaliilor de implementare a lor (datorită setului de parametri necesari), aceste programe erau greu de utilizat şi, deseori, respingătoare. O dată cu dezvoltarea puterii de calcul şi evoluţia conceptelor de programare, au fost create interfeţe uşor de utilizat şi astfel utilizatorii au devenit mai concentraţi asupra problemei în sine şi mai puţin asupra metodelor folosite de sistemul software. Orice sistem software este compus în esenţă din următoarele componente: 1. Nucleu care conţine funcţiile de bază, apelabile prin intermediul unui limbaj de comandă sau prin interfaţă.. Subsistem de interfaţă ce permite transmiterea de comenzi sistemului şi furnizarea rezultatelor. Interfaţa poate fi de tip text (sistemul funcţionează ca interpretor, comenzile fiind preluate şi executate secvenţial) sau grafică (bazată pe documente de lucru, prin intermediul unei sau mai multor ferestre). Fiecare corespunde unui document care conţine comenzi, răspunsuri sau texte descriptive introduse de utilizator. Comenzile pot fi evaluate în ordinea aleasă de către utilizator. 3. Ansamblu opţional de pachete conţine funcţii suplimentare celor de bază destinate rezolvării problemelor specifice unui anumit domeniu. Pentru a utiliza
funcţiile din cadrul lor, pachetele trebuie încărcate explicit. Posibilitatea de a adăuga pachete de noi funcţii oferă flexibilitate acestor sisteme software. Tipuri de prelucrări şi modelări matematice. Sistemele de software matematic pot efectua următoarele tipuri de prelucrări matematice: 1. Numerice rezultatele calculelor numerice fiind numere. Exemple: determinarea rădăcinilor unui polinom cu coeficienţi numerici (cunoscuţi), calculul unui determinant, determinarea limitei unui şir numeric, calculul unei integrale definite, etc.. Simbolice rezultatele calculelor simbolice sunt de regulă expresii algebrice sau chiar propoziţii matematice. Exemple: calculul primitive unei funcţii, calculul determinantului unei matrice pătratice cu elemente necunoscute, determinarea rădăcinilor unui polinom cu coeficienţi necunoscuţi, efectuarea unui raţionament logic (cu rezultat adevărat/fals), etc. 3. Grafice rezultatele acestor prelucrări sunt grafice ale unor funcţii, curbe, suprafeţe sau altor obiecte grafice descrise prin ecuaţii sau punctele pe care le conţin. Se pot crea şi reuniuni (alipiri) de grafice în acelaşi sistem de axe pentru a face comparaţii. Spre deosebire de limbajele de programare de uz general, sistemele de software matematic conţin un limbaj de comandă mult mai bogat în sensul că anumite prelucrări se pot face printr-o singură comandă, având la bază algoritmi relativ complicaţi pe care nu suntem obligaţi să-i cunoaştem, ca, de exemplu, inversarea unei matrice pătratice sau rezolvarea unui sistem de ecuaţii diferenţiale. Caracteristici specifice. Un sistem software matematic se evidenţiază de alte sisteme (limbaje) de programare prin următoarele caracteristici: 1. implementează obiecte matematice. De exemplu, mulţimile, vectorii, matricele, funcţiile sunt implementate prin tipuri sau obiecte proprii.. implementează prelucrări matematice. De exemplu, calculul derivatelor sau integralelor funcţiilor, limitelor şirurilor, rezolvarea ecuaţiilor, reprezentările grafice sunt implementate pentru a fi apelate printr-o singură comandă.
3. au limbaj avansat de descriere a problemelor. Oferă un limbaj propriu de descriere a problemelor şi modelelor matematice complexe. 4. au interfaţă grafică. Această interfaţă permite introducerea formulelor matematice şi obţinerea rezultatelor în forma clasică (folosind simboluri cunoscute). În acest mod nu sunt necesare cuonştinţe privind comenzile sistemului. 5. au un caracter deschis şi flexibil. Maple, spre exemplu, permite vizualizarea codului asociat unei anumite funcţii. De asemenea, este permisă completarea funcţionalităţii sistemului prin adăugarea de funcţii noi scrise în limbajul de programare de nivel înalt asociat sistemului. 6. au interfaţă cu alte sisteme. Este posibilă preluarea sau trasmiterea datelor către alte aplicaţii. De exemplu, Mathematica permite ca funcţiile sale să fie accesate prin intermediul unui protocol de interfaţă (MathLink, J/Link,.NET/Link - http://www.wolfram.com/solutions/mathlink/netlink) din programe scrise în limbaje de programare de uz general (C++, Java,.NET). 7. permit elaborarea de documente. Sistemele recente conţin facilităţi de editare de texte ştiinţifice generând documente (sub format html, tex etc) care conţin atât texte cât şi rezultate ale unor prelucrări efectuate în cadrul sistemului. 8. oferă completitudine. Poate asista utilizatorul în analiza şi rezolvarea problemelor, precum şi în prezentarea rezultatelor. Sistemele de software matematic se pot aplica în diferite domenii, cum ar fi matematică, fizică, chimie, statistică, inginerie, biologie sau economie, pentru a verifica teorii existente, elaborarea unor demonstraţii, efectuarea unor calcule de dimensiuni mari sau de rutină, vizualizarea unor rezultate geometrice (în plan sau spaţiu) sau simularea unor fenomene sub formă grafică, etc. Sistemele care permit efectuarea de prelucrări simbolice având la bază reguli de calcul algebric se numesc Computer Algebra Systems (CAS), iar Maple V şi Mathematica fac parte din această categorie. Subiectul acestui curs este mediul de programare Mathematica, un produs al companiei Wolfram Research Inc. Mathematica. Prezentare generală. Mathematica este un sistem de software interactiv (din categoria CAS-urilor) care permite descrierea şi rezolvarea aplicaţiilor ştiinţifice, fiind orientat mai mult către matematică şi fizică. De aceea este şi cel mai adesea recomandat ca un program ce oferă posibilitatea de a face matematică cu ajutorul calculatorului.
Acest program poate fi folosit ca un calculator numeric şi simbolic, sistem de vizualizare grafică, limbaj de programare de nivel înalt, platformă soft destinată rulării unor pachete cu aplicaţii specifice unui domeniu sau ca sistem de reprezentare a cunoştinţelor din domenii ştiinţifice şi tehnice. Prima versiune a programului a apărut în anul 1988, fiind conceput de Stephen Wolfram. Următoarele versiuni până la versiunea curentă (5.) au fost elaborate în cadrul firmei Wolfram Research Inc (www.wolfram.com). Dacă la început interfaţa cu utilizatorul se rezuma la o simplă comunicare în mod text prin introducerea secvenţială de comenzi, iar numărul algoritmilor implementaţi era destul de mic şi nu putea rezolva prea multe probleme, în prezent sunt implementaţi noi algoritmi, mai eficienţi, care extind sfera problemelor ce pot fi rezolvate, introducerea datelor de intrare şi vitualizarea rezultatelor realizându-se printr-o interfaţă grafică ce foloseşte simboluri matematice. În plus, sunt disponibile şi produse derivate ce folosesc tehnologii moderne, cum ar fi CalculationCenter şi WebMathematica. CalculationCenter este un sistem de software matematic conceput pe nucleul din Mathematica având o interfaţă grafică bazată pe simboluri, operatori, comenzi etc. Datorită acestui fapt, utilizatorul programului nu trebuie să fie în mod obligatoriu un specialist în matematică pentru a beneficia de rezultatele unor probleme ce necesită utilizarea unor metode matematice. WebMathematica este un produs relativ recent care oferă posibilitatea de a efectua calcule interactive şi de a vizualiza rezultatele (inclusiv în manieră grafică) prin intermediul unui browser web. La baza realizării acestei aplicaţii web este de asemenea nucleul Mathematica pus în mişcare prin tehnologia Java Servlet. Un exemplu de astfel de aplicaţie web este Integrator (http://integrals.wolfram.com), site pus la dispoziţie de Wolfram Research care permite calculul integralelor. De asemenea, există şi un serviciu web (WebService) ce stă la dispoziţia programatorilor Java sau.net, destinat calculului integralelor: http://webservices.wolfram.com/integrator/. Prelucrări matematice. Ce tipuri de prelucrări matematice puntem elabora cu ajutorul programului Mathematica? Avem următoarele tipuri de categorii: b = a ab b. 1. Calcule simbolice. Exemplu: ( ) a +. Calcule numerice. Exemplu: 3 + 3 = 11. 3. Reprezentări grafice. Exemplu: grafice de funcţii, generarea suprafeţelor. Fiecare dintre aceste categorii conţine facilităţi pe care Mathematica le pune la dispoziţia utilizatorilor.
Executarea unei comenzi se realizează prin combinaţia de taste <Shift> + <Enter>. Astfel, sistemul prefixează comenda cu In[x]:=, iar rezultatul Out[x]=. Valoarea numerică x reprezintă numărul execuţiei de la deschiderea sesiunii de lucru. Această contorizare a execuţiilor de la lansarea sesiunii de lucru a mediului Mathematica ajută utilizatorul să gestioneze mai uşor rezultatele obţinute. O sesiune de lucru începe la lansarea programului şi se termină la închiderea acestuia. A nu se confunda sesiunea timpul scurs de la deschiderea unui document de lucru şi până la închiderea lui! Câteva dintre particularităţile prelucrărilor matematice ce pot fi realizate cu ajutorul programului Matematica sunt: 1. Posibilitatea de a lucra cu numere de precizie arbitrară sau cu precizie dată (oricât de mare). Exemplu: calculul lui ln π cu o precizie de 5 zecimale. In[1]:= N[Log[Pi], 5] Out[1]=.5310446969907997789. Efectuarea unor prelucrări numerice asupra structurilor matematice, ca de exemplu prelucrări asupra matricelor (înmulţiri, determinant, inversă, valori proprii, vectori proprii, etc), funcţiilor (derivare, integrare, etc.) şi ecuaţiilor (rezolvarea ecuaţiilor algebrice şi diferenţiale). 1 Exemplu: Calculul determinantului matricei.5 0 0.5 1. 3 0.5 1 In[]:= a={{1,-,0.5},{-.5,1/3,},{0,-0.5,1}} Out[]= {{1,-,0.5},{-.5,1/3,},{0,-0.5,1}} In[3]:= Det[a] Out[3]= -54.375 3. Efectuarea unor prelucrări simbolice asupra expresiilor algebrice, ca de exemplu expandare, factorizare, simplificare. Exemplu: Factorizarea lui a b. In[4]:= Factor[a^4-b^4] Out[4]= (a-b)(a+b)(a +b ) 4 4 4. Determinarea soluţiilor analitice pentru ecuaţii algebrice, sisteme de ecuaţii liniare şi sisteme de ecuaţii diferenţiale. Exemplu: Rezolvarea ecuaţiei de gradul al doilea ax + bx + c = 0. In[5]:= Solve[a x^ + b x + c==0,x]
Out[5]= x b b a ac, x b + b a ac 5. Calculul simbolic al derivatelor şi integralelor. Exemplu: Calculul derivatei funcţiei In[6]:= D[ x, x] Out[6]= x x ( 1 + Log[ x] ) x x x. 6. Determinarea limitelor de funcţii, limitelor de şiruri şi serii. Exemplu: Calculul limitei şirului n n + 1 5 n > 1. n + 1 In[7]:= Limit [, n ] n 5 1 Out[7]= 7. Reprezentare grafică a funcţiilor reale, curbelor şi suprafeţelor în plan şi spaţiu cu posibilitatea de a efectua transformări geometrice (prin controlul unghiul de vizionare) sau de a controla culoarea, umbrirea, iluminarea pentru graficele cu trei dimensiuni. In[8]:= Plot [ Sin[ x], { x,0, π}] 1 0.5 1 3 4 5 6-0.5-1 Out[8]= - Graphics - 8. Reprezentare grafică 3D prin contururi, densităţi sau alte proprietăţi specifice (curbură, torsiune, după caz).
In[9]:= ContourPlo t[ Sin[ x y], { x, 5,5 }, { y, 5,5 }] 4 0 - -4-4 - 0 4 Out[9]= - Graphics - 9. Animaţii ale prelucrărilor grafice. 10. Posibilitatea descrierii în limbaj grafic a unor obiecte geometrice pe baza unor primitive (puncte, linii, cercuri, etc). Exemplu: Reprezentarea suprafeţei definită de Sin [xy], pentru ( x, y) [ 5,5 ] [ 5,5 ]. In[10]:= Plot 3D[ Sin[ x y], { x, 5,5 }, { y, 5,5 }] 1 0.5 0-0.5-1 -4-0 4-4 - 0 4 Out[10]= - Graphics -
De asemenea, Mathematica este, aşa cum am mai menţionat, şi mediu de programare şi oferă următoarele stiluri de abordare: 1. programare procedurală. Se pot defini module care conţin prelucrări alternative, iterative şi/sau recursive. Exemplu: Determinarea primului număr prim mai mare decât un număr dat. In[11]:= UrmatorulPrim[n_Integer]:=Module[{k=n},While[!PrimeQ[k],k++]; Return[k]] In[1]:= UrmatorulPrim[14] Out[1]= 17. programare funcţională. Oferă posibilitatea de a lucra cu funcţii pure şi operatori funcţionali precum şi de a determina rezultatul unei prelucrări iterative prin determinarea punctului fix al unei funcţii. 3. programare bazată pe şabloane şi reguli de transformare. Oferă metode de căutare ( patern matching ) şi substituţie pentru obiectele care descriu structurile matematice (expresiile). O noţiune fundamentală în acest sens o reprezintă regula de transformare care specifică modul în care poate fi transformată o expresie prin înlocuirea unor componente ale sale (variabile sau expresii). Cu ajutorul regulilor de transformare pot fi definite funcţii la fel ca în matematică: prin proprietăţile lor. Exemplu: Definirea şirului lui Fibonacci f () 0 = f( 1) = 1, f ( n + ) = f( n + 1) + f( n), unde n > 0. In[13]:= Fibo[n_Integer]:=Fibo[n-]+ Fibo[n-1]; Fibo[0]=1; Fibo[1]=1; In[14]:= Fibo[10] Out[14]= 89 4. programare orientată pe obiecte. 5. programare vizuală. De asemenea, se pot crea sau adăuga pachete de funcţii necesare prelucrărilor specifice unui anume domeniu. Pachetele sunt orientate pe tematici şi conţin definiri de funcţii grupate pe subtematici. De exemplu, există pachetul DiscreteMath care conţine subpachetul Permutations, pentru generarea şi analiza permutărilor. Pachetele conţin descrieri ale funcţiilor în limbajul specific Mathematica, sunt extensibile, dar pentru a putea fi utilizate într-o sesiune de lucru trebuie încărcate explicit. Încărcarea unui pachet se face cu ajutorul unei comenzi de forma: <<DenumirePachet`DenumireSubpachet`
De exemplu, pentru încărcarea subpachetului Permutations trebuie dată comanda: In[15]:= <<DiscreteMath`Permutations` Ca o observaţie destul de importantă, trebuie remarcat apostroful invers ( ` ) folosit în scriere comenzii, caracter situat pe tastatură deasupra tastei Tab şi în stânga tastei 1. Utilizarea sistemului. Mathematica este un sistem modular alcătuit din două module principale: nucleul şi subsistemul care asigură interfaţa cu utilizatorul. Nucleul are ca scop executarea comenzilor date de către utilizator. Prelucrarea de bază a nucleului este evaluarea funcţiilor predefinite şi a celor definite de utilizator. Principiul de evaluare este de a aplica definiţiile cunoscute până când se obţine un rezultat care nu mai poate fi prelucrat. Atunci acesta din urmă este transmis subsistemului de interfaţă care îl afişează. În implementarea sub Windows, sistemul de interfaţă este bazat pe ferestre şi asigură gestionarea documentelor, denumite şi notebook. Aceste notebook-uri pot conţine texte organizate ierarhic mixate cu descrieri de calcule matematice şi grafice. Astfel, se pot crea materiale didactice sau de prezentare suficient de elaborate, fără a mai fi nevoie de alt editor sau program de editare a textelor ştiinţifice. Conţinutul notebook-urilor este organizat în celulecare pot conţine una sau mai multe linii de ecran sau una sau mai multe comenzi. Celulele sunt de două tipuri: de intrare şi de ieşire. Celulele de intrare sunt cele în care se editează comenzile ce urmează a fi executate, iar cele de ieşire sunt cele în care se afişează rezultatele. În momentul editării unei celule de ieşire se creează prin copiere automată o nouă celulă de intrare (pentru a nu-i altera conţinutul celei de ieşire). Acest procedeu permite continuarea unor calcule sau evaluări pornind de la ultimul rezultat obţinut. Totuşi pierzându-se consistenţa şi poate chiar coerenţa nu este recomandabil să se procedeze în acest mod. Dimensiunea unei celule este determinată de lungimea parantezei drepte care o delimitează în extremitatea dreaptă a ferestrei. De asemenea, ele pot fi grupate ierarhic permiţând o executare comună a lor. Scrierea comenzilor se face întocmai definiţiilor sau declarărilor folosite. Astfel, funcţia Simplify nu poate fi folosită scrisă sub forma simplify sau variabila aa nu este una şi aceeaşi cu variabila aa. Acest mod de scriere a comenzilor este cunoscut şi sub denumirea de case sensitive.