Sunteți pe pagina 1din 309

1.

Introducere
1.1 Software matematic
Software-ul se refera la totalitatea partile ne zice (non-hardware) a echipamentelor de procesare a datelor. In mod opus hardware-ului, software-ul este intangibil. Desi este tinut pe medii zice, de exemplu pe o unitate de disk, este compus din programe si date aranjate ^ntr-o structura logica.

Figura 1.1: Clasi care software

Software-ul de sistem include sistemul de operare, procesoarele de limbaj (compilatoarele) si utilitarele (managere de siere de exemplu), adica toate programele si documentatia necesara pentru a controla hardware-ul sistemului si resursele software si pentru a asista ^n dezvoltarea si executia programelor aplicative. Software-ul de aplicatii cuprinde programe scrise de utilizatori pentru un scop particular si programe produse de rme pentru o arie de scopuri bine de nite. Software-ul de aplicatii se ^ntinde de la procesoarele de texte si rezolvitoare de probleme comerciale la aplicatii tehnice, precum simularea numerica a testelor ^n ciocnirea automobilelor sau analiza comportarii dinamice a dispozitivelor semiconductoare. Software-ul de aplicatii face posibila rezolvarea problemelor dintr-un domeniu speci c de aplicatii. Interfata unor asemenea produse software este construita ^n asa fel ^nc^t este posibila de nirea unei probleme ^ntr-un anumit a context stiinti c si tehnic (de exemplu, designul circuitelor integrate pe scara foarte larga, VLSI, este posibil numai prin utilizarea unui software efectiv de simulare). Software-ul de aplicatii este compus din module operative, module de control si interfete. Software-ul matematic permite rezolvarea unor probleme ce pot descrise matematic. Face parte din categoria software-ului de aplicatii, scopul ind solutionarea unor probleme matematice. Un asemenea mediu poate rezolva

probleme a caror solutionare matematica exacta sau numerica este posibila ( gura 1.2).

Figura 1.2: Clasi carea problemelor matematice

Software-ul matematic se poate clasi ca functie de doua criterii: 1. domeniul de probleme acoperit: rezolvitoare de probleme generale sau rezolvitoare de probleme speciale; 2. metoda de rezolvare: calcule simbolice sau calcule numerice. O categorie aparte o constituie Cas (Computer Algebra Systems), totalitatea rezolvitoarelor de probleme generale ce permit at^t calcule simbolice c^t si a a calcule numerice. Software-ul numeric este utilizat pentru rezolvarea numerica a problemelor matematice precum: probleme de aproximare, sisteme de ecuatii liniare si neliniare, algebrice si diferentiale. Software-ul numeric este o unealta importanta ^n dezvoltarea software-ului de aplicatii tehnic si stiinti c.

1948-1960

1.2 Scurta istorie a software-ului matematic

Este perioada aparitiei primelor calculatoare si a primelor calcule numerice efectuate cu ajutorul lor. Principalele evenimente au fost urmatoarele: 1943 Prima aparitie a revistei ,,Tabele matematice si ajutor ^n calcule" (devenita Mathematics of Computation, ^n 1960). 1946 ENIAC devine operational la Universitatea din Pennsylvania { este primul computer electronic digital. 1948 Primele calcule efectuate pe baza unui program pe calculator memorat pe Mark la Universitatea din Manchester (urmat ulterior de EDSAC de la 2

Universitatea Cambridge). 1951 Se publica ,,Pregatirea programelor pe un calculator electronic digital", ce descrie o biblioteca de programe pentru calculatorul EDSAC. 1954 Se publica primul program complet^n revista MTAC (,,O metoda de calcul a functiilor trigonometrice inverse"). Apare Journal of the Association for Computing Machinery (ACM). 1955 Primul IBM 704 aparut pe piata (aproximativ 150 v^ndute, ultima masina a ind scoasa din functiune ^n 1975) { a introdus prima unitate hardware de aritmetica ^n virgula otanta. 1956 Primul compilator Fortran a fost construit pentru a rula pe IBM 704. 1957 Se formeaza British Computer Society. 1958 Apar revistele Communications of the Association for Computing Machinery si Computer Journal. 1959 Apare revista Numerische Mathematik. 1960 Limbajul Algol 60 este construit de un comitet international. In anii '60 o serie de aplicatii din categoria software-ului matematic sunt dezvoltate independent ^n mai multe centre, incluz^nd Toronto, Stanford si a National Physical Laboratory.

1961-1965
Fortran-ul a aparut ^n 1958, iar Algol-ul ^n 1960. Aceste doua limbaje au fost construite pentru calcule matematice numerice. Lisp-ul ^nsa, aparut ^n 1961, este un limbaj de procesare a listelor. Lisp a constituit un pas major ^n dezvoltarea calculului simbolic. O operatie precum diferentierea simbolica este necunoscuta pentru Fortran si Algol, pe c^nd ^n Lisp este relativ usor de realia zat. Numeroase Cas-uri au fost ulterior scrise ^n Lisp. Principalele evenimente ale acestei perioade sunt: 1961 La MIT este scris Saint (Symbolic Automatic Integration), o prima aplicatie a Lisp-ului ^n calculele simbolice si o prima ^ncercare de a programa un calculator astfel ^nc^t sa se comporte ca un student la matemaa tica. Programul se baza pe o serie de euristici pentru integrare inde nita. IBM a produs Pm, un sistem pentru manipularea polinoamelor. Apare primul calculator cu memorie virtuala si pagini de memorie. Apare jurnalul scandinav BIT; primul numar are un program Algol. 1962 Unul dintre primele sisteme de calcul simbolic a fost Formac elaborat de IBM ^ntre 1962-1964. Este un preprocesor Fortran destinat manipularii functiilor elementare, incluz^nd polinoame si functii rationale. Un alt a sistem a fost Alpack elaborat de Bell Laboratories, o colectie de rutine Fortran scrise ^n limbaj de asamblare pentru manipularea polinoamelor si functiilor rationale. 1964 Este construit primul supercalculator, CDC 6600. Apare primul numar al Journal of the Society for Industrial and Applied Mathematics, Series B: Numerical Analysis, redenumit^n 1966 SIAM Journal on Numerical Analysis.

1965 Este marcat de aparitia primei versiuni a MathLab, un sistem bazat pe Lisp pentru manipularea polinoamelor si functiilor rationale. Este primul sistem interactiv destinat utilizarii precum un calculator simbolic ce includea si proceduri de reprezentare gra ca bidimensionala a rezultatelor. Perioada este dominata de dezvoltarea unor sisteme cu scop general pentru calcule simbolice. Principalele evenimente ale acestei decade sunt urmatoarele: 1966 Se de neste ANSI standard Fortran 66 (primul standard pentru un limbaj de programare). 1967 Se publica articolul ,,Solutia pe calculator a ecuatiilor algebrice", care contine programe ^n mai multe limbaje pentru rezolvarea sistemului de ecuatii liniare Ax = b. La MIT se elaboreaza Sin (Symbolic Integrator), un program Lisp mult mai e cient dec^t Saint. a 1968 Apare Reduce, elaborat la Universitatea din Standford, un program Lisp interactiv pentru calcule zice. Unul dintre scopurile principale a fost portabilitatea pe un numar mare de platforme si utilizarea unui subset limitat a Lisp-ului. Apare si MathLab versiunea noua cu gra ca ^mbunatatita. 1969 John Rice introduce termenul de software matematic. A aparut Atran, dezvoltat din Alpack, ca limbaj si sistem pentru manipularea e cienta a polinoamelor si functiilor rationale. S-a dezvoltat Sac-1 (Symbolic and Agebraic Calculations) ca succesor a Pm-ului pentru manipularea functiilor polinomiale si rationale. Camal (Cambridge Albegra System) a fost dezvoltat pentru calcule ^n mecanica celestra si relativitate generala. 1970 Simposion asupra software-ului matematic tinut la Universitatea Purdue, organizat de John Rice. Se fondeaza Imsl (International Mathematical and Statistical Libraries). Incepe proiectul Nag (Nottingham Algorithms Group) prin eforturile unite ale universitatilor din Birmingham, Leeds, Manchester, Nottingham si Oxford, si Atlas Computing Laboratory, toti utilizatori de ICL 1906A. Apare versiunea a doua a lui Reduce, sistem special cu facilitati pentru calcule ^n zica energiilor ^nalte. A fost scris ^n RLisp ce evita notatiile pe baza de paranteze din Lisp. ScratchPad a fost dezvoltat la IBM ca un sistem bazat pe Lisp care incorpora portiuni importante a numeroase versiuni anterioare si programe ^n bibliotecile sale, precum MathLab-68, Reduce 2, Sin. Sistemele si limbajele din anii '60 si '70 au ^nceput ca experimente si doar unele dintre experimente au fost puse ^n productie de catre oameni de stiinta, ingineri si matematicieni din afara grupului original de creatori. Reduce, datorita portabilitatii sale, a devenit unul dintre cele mai rasp^ndite sisteme a ale acestei perioade. Prin intermediul sau multi utilizatori devin interesati de 4

1966-1970

1971-1980

Computer Algebra.

Aldes/Sac a urmat lui Sac-1, ca sistem non-interactiv const^nd din moa dule scrise ^n Aldes (Algebraic Description Language) si un translator de convertire a rezultatelor ^n Fortran. A fost primul sistem documentat complet. Sistemul cu scop general muMath, dezvoltat la Universitatea din Hawaii, scris ^n Lisp si ^nsotit de un limbaj de programare, muSIMP, este primul Cas care a rulat pe PC-uri din familia IBM. Alte sisteme cu scop general ce se remarca^n aceasta perioada sunt: Sheep, un sistem pentru manipularea componentelor tensiorale, Trigman pentru calculul seriilor Poisson si scris ^n Fortran; Schoonschip pentru calcule ^n zica energiei ^nalte. Alte evenimente ale acestei decade sunt urmatoarele: 1971 Este facut public Mark 1, biblioteca NAG cu 98 rutine. Se publica un volum de algebra liniara ^n seria cartilor de calculatoare. Proiectul Nats (National Activity to Test Software) este fondat de National Science Foundation pentru studierea problemelor^n scrierea, testarea si compararea software-lui matematic. Macsyma apare la MIT, ind un sistem ambitios pentru perioada sa; pe l^nga facilitatile standard de manipulare a algebrica a inclus si calcul de limite, integrare simbolica, si solutionarea ecuatiilor. 1972 Apare prima versiune a lui EisPack (34 de rutine Fortran) ca parte a proiectului Nats. Programul Detest ^n Fortran este publicat pentru compararea codurilor de rezolvare a ecuatiilor diferentiale. Articolul ,,Calcule matriceale cu Fortran" (Comm. ACM) demonsteaza importanta modalitatilor de accesare a datelor. 1973 Propunerea initiala pentru Blas (Basic Linear Algebra Subprograms) apare ca raport tehnic la Jet Propulsion Laboratory (versiunea nala este publicata ^n ACM TOMS, 1979). NAG este redenumit Numerical Algorithms Group, mut^ndu-se la Oxford. a 1974 Al doilea simpozion asupra software-ului matematic tinut la Purdue. Se fondeaza IFIP Working Group 2.5 ^n software numeric. Se publica ghidul utilizatorului EisPack. 1975 Apare primul numar al ACM Transactions on Mathematical Software, cu John Rice ca editor sef. Apare cartea ,,Metode pe calculator pentru calcule matematice", care contine programe ^n Fortran. 1976 Este oferit un EisPack extins (70 de rutine Fortran; rezolva problema valorilor proprii generalizata). Primul supercalculator Cray 1 este delivrat la Los Alamos Scienti c Laboratory, New Mexico. 1977 Apare prima versiune a lui LinPack. Se publica Minos, program Fortran pentru rezolvarea problemelor liniare si neliniare de dimensiuni mari. Se difuzeaza MA28 (Harwell Subroutine Library), program Fortran pentru rezolvarea sistemelor liniare rare si nesimetrice. 1978 Fortran 77 este de nit de un comitet ANSI. Apar primele versiuni ale lui EllPack, MinPack si SparsPak. NAG se stabileste ^n SUA. 1979 Se fac publice programele si documentatia LinPack. Hewlett Packard

34C, calculator de buzunar are taste de rezolvare a ecuatiei f(x) = 0 si

de efectuarea de integrari numerice.

In perioada anterioara, datorita cerintelor semni cative de resurse de calculator ale aplicatiilor de tip software matematic, rasp^ndirea unor asemenea a aplicatii (cu exceptia muMath) s-a limitat la cercetatorii care aveau acces la resurse de calcul costisitoare. Odata cu introducerea statiilor de lucru bazate pe micro-procesoare, calculatorul de birou relativ puternic a devenit o realitate. Introducerea unei mari varietati de medii de calcul a condus la re^nvierea ideii de portabilitate a sistemelor de calcul simbolic, Cas. Exista astfel o tendinta de mutare spre dezvoltarea unor Cas-uri bazate pe limbaje de implementare pe sisteme precum C-ul, care permit creatorilor mai multa exibilitate pentru a controla utilizarea resurselor calculatorului. Decada este marcata si de o crestere ^n comercializarea Cas-urilor. Aceasta a avut efecte pozitive si negative. Pe de o parte utilizatorii sunt nevoiti sa plateasca pentru aceste sisteme desi se confrunta cu o instabilitate a lor, iar pe de alta parte, comercializarea a condus la impulsionarea dezvoltarii Cas-urilor, at^t ^n ceea ce priveste functionalitatea c^t si ^n interfetele utilizator. a a Inceputul decadei a fost marcata de aparitia Maple (1984). Motivatia sa initiala a fost oferirea accesibilitatii utilizatorilor la Ca. Maple a fost construit cu o structura modulara. Dimensiunea mica a nucleului (scris ^n C) a permis implementarea sa pe un numar de platforme mici si accesul utilizatorilor ^n sisteme time-sharing. Biblioteca sa matematica este destul de vasta pentru a satisface cerintele cercetatorilor. Un alt sistem scris ^n C a fost Smp (Symbolic Manipulation Program) de la Caltech. Acesta este portabil pe o larga varietate de sisteme si difera de sisteme existente prin utilizarea unui limbaj de interfata bazat pe reguli. C^nd Mathematica a aparut ^n 1988, capabilitatile sale gra ce (^n spatiul a bi- si tridimensional, precum si animatie) depaseau cele ale oricarui alt sistem gra c existent atunci. Mathematica a fost unul dintre primele sisteme care ilustrau cu succes avantajul combinarii unui Cas cu facilitatile de editare usoara pe masinile construite pentru a folosi interfete utilizator gra ce (medii Windows). Bazat pe C, Mathematica a venit cu un limbaj propriu de programare care este apropiat de regulile predecesorului sau Smp. Derive a urmat succesul lui muMath pentru calculatoare personale. A fost construit ca sistem interactiv si nu ca mediu de programare. Are o interfata prietenoasa chiar si pe primele PC-uri, o serie de facilitati de introducere a expresiilor matematice si de trasare ^n spatiul tridimensional. Macsyma s-a bifurcat ^n doua versiuni dezvoltate ^n directii diferite si distribuite de doua rme distincte. Axiom (original ScratchPad II) a fost dezvoltat de IBM ca un Cas puternic tipizat. Pe c^nd alte Cas-uri dezvolta algoritmi pentru o colectie speci ca a de domenii algebrice (de exemplu, c^mpul numerelor rationale, domenii de polia 6

1981-1990

noame cu coe cienti ^ntregi), Axiom permite utilizatorilor sa scrie algoritmi pe c^mpuri sau domenii generale. a Au aparut si o serie de sisteme specializate. Cayley a fost construit pentru teoria grupurilor si este asemanator cu Macsyma. Tot pentru acelasi domeniu a fost construit si Gap (Group Algorithms and Programming), asemanator cu Maple. S-au remarcat de asemenea si Form { pentru calcule zice, Lie { pentru calcule cu algebre Lie, Macaulay { un sistem pentru calcule ^n geometria algebrica si algebra comutativa, Pari { orientat spre calcule ^n teoria numerelor. Alte evenimente ale acestei decade sunt urmatoarele: 1981 Se publica standardul pentru aritmetica binara ^n virgula otanta, de un subcomitet a IEEE Computer Society. Apare primul microprocesor bazat pe acest standard, aproape ^n acelasi timp (Intel 8087). Standardul este acceptat ^n 1985. Apare versiunea originala, ^n Fortran, a Matlab-ului. 1983 Se publica documentatia QuadPack. Apare versiunea 3 a EisPack. Reduce 3 a aparut cu noi pachete. 1984 Apare prima versiune a codului Fortran NpSol pentru rezolvarea problemelor de optimizare neliniara cu constr^ngeri. Apare prima versiune a a lui Maple. 1985 NetLib este pus ^n-linie la Argonne National Laboratory si AT&T Bell Laboratories. Se propune Blas nivel 2 la NAG/Argonne ca raport tehnic (publicat ^n ACM TOMS, 1988). 1987 Proiectul LaPack este nantat pentru 3 ani de NSF. Se face propunerea pentru Fortran8x. 1988 Mark 13 ca biblioteca NAG library este oferit ^ntr-o varianta ce contine 746 rutine, din care 91 sunt noi pentru aceasta versiune. Propunerea nala pentru Blas nivel 3 apare ca raport tehnica la NAG/Argonne (publicat ^n ACM TOMS ^n 1990). Apare prima versiune a Mathematica. Apare prima versiune a lui Derive. 1989 Prima versiune a LaPack este oferita pe site-uri de test (cu rutine de rezolvare a ecuatiilor liniare). A doua versiune de Fortran8x este oferita pentru comentariu public. Se aproba standardul ANSI C. 1990 Versiune beta LaPack. cu rutine de determinare a valorilor proprii. NetLib se muta la Oak Ridge National Laboratory. Este oferit Mark 1 ca biblioteca ^n C a NAG.

1991-1999

Numarul de aplicatii de tip software matematic se diversi ca, at^t cele disponia bile oricarui utilizator c^t si cele comerciale. Datorita accesibilitatii PC-urilor a numarul utilizatorilor de Cas-uri creste considerabil. Software-ul matematic patrunde ^n sistemul educational. 1991 Fortran 90 este publicat ca ISO standard. NAG ofera primul compilator de Fortran 90. In timpul razboiului din golf o racheta loveste o tabara militara datorita unei probleme de software la racheta de interceptare, 7

rezultata din reprezentarea binara ^n virgula xa a lui 0,1. 1992 Apare LaPack 1.0. Matlab 4.0 oferit pentru statii Sun workstations are facilitati pentru matrici rare si gra ca ^mbunatat^ta. 1993 Maple Symbolic Toolbox oferita pentru utilizare ^n calcule simbolice de catre Matlab . Apare versiunea 1 a Axiom. SIAM publica carti si materiale de prezentare de software pentru solutia iterativa a sistemelor liniare (10 autori). Codurile MA42 si MA48 pentru rezolvarea sistemelor liniare rare si nesimetrice sunt oferite ca biblioteci de subrutine Harwell. Hewlett Packard prezinta calculatoarele de buzunar HP48G si HP48GX, ce contin algoritmi de algebra liniara variati, unii dintre ei ind interpretari a algoritmilor LaPack. 1994 Este oferita biblioteca NAG Fortran 90 si versiunea 2.0 a LaPack. 1995 Racheta Ariane 5 explodeaza imediat dupa lansare datorita unei depasiri (calculatorul de bord a convertit un numar^n virgula otanta la un numar ^ntreg). 1996 Apare ScaLaPack. 1996 Apare versiunea Mathematica 3.0. 1997 Apare versiunea Matlab 5.0. 1998 Apare versiunea Maple 5.0. 1999 Apare versiunea MathCad 8.0 ce utilizeaza biblioteca Maple pentru calcule simbolice.

2. Constructia de software
2.1 Modelarea stiinti ca
Termenul de model ^n stiinta si matematica este de nit astfel: un model este un obiect arti cial care re ecta sau reproduce trasaturile, relatiile (structura), si functiile unui obiect sau fenomen concret (real) ^ntr-un mod simpli cat si care poate de aceea utilizat ca unealta pentru examinarea si analiza realitatii. De obicei un model este obtinut prin simpli care. Aceasta este ratiunea pentru care este mai usor sa se lucreze cu modelul dec^t cu obiectul sau fenomenul. a Modelul este o reducere sau o abstractie a realitatii. El pot avea anumite trasaturi care nu corespund cu nimic din obiectul original. De exemplu, retelele neuronale, o clasa de functii de aproximare neliniara, sunt modele ale transmisiei si procesarii de stimuli ^n ansambluri mici de neuroni (celule nervoase) din creierul uman; ^n aceste modele multe proprietati ale celulelor umane sunt ignorate, precum regenerarea neuronilor; pe de alta parte anumite trasaturi din aceste modele nu corespund la nici o proprietate a originalului, de exemplu, transmiterea in nit de rapida. Exista ^n mod uzual mai multe modele pentru speci carea unui fenomen. De fapt exista un numar in nit de modele partiale care sunt mai mult sau mai putin adecvate analizei si descrierii trasaturilor particulare ale obiectului sau fenomenului original. Cu ajutorul modelelor structurale (exemplu: retelele neuronale similare cu originalul din punct de vedere structural) se poate realiza o analogie ^ntre obiectul original si model relativ la relatiile dintre elementele sistemului. Modelele functionale reprezinta comportarea sistemului pe baza de relatii intrari-iesiri. Ca rezultat, modelul ignora structura interioara a obiectului sau fenomenului original, dar reproduce relatiile functionale. Sistemul original?este privit ca o cutie neagra. De exemplu relatia yk+1 = ayk + b(tk+1 + c) 2 + d(vk+1 + e)?1 ; a; b; c; d; e constante este un model simplu pentru prezicerea evolutiei ^n timp a concentratiei atmostferice yk+1 a dioxidului sulfuric la momentul k + 1 deasupra unui oras, tin^nd seama de temperatura medie prezisa a tk+1 si viteza v^ntului prognozata vk+1 . Aceasta ecuatie modeleaza relatia a functionala ^ntre cresterea concentratiei SO2 si descresterea temperaturii, precum si descresterea concentratiei cu cresterea vitezei v^ntului. a Functie de scopul unui model, acesta poate : pentru achizitie de informatii, pentru ^mpartasirea unor informatii, sau pentru a utilizat^n aplicatii tehnice. Achizitie de informatii. C^nd anumite informatii nu pot obtinute de la a obiectul original, poate utilizat ca ^nlocuitor modelul (de exemplu, o retea Petri poate modela un proces, structura sa statica ind descrisa printr-un graf direct cu doua tipuri de noduri, locuri { o stare a unui proces { si tranzitii { o actiune a procesului { si cu muchiile descriind tranzitii de la o stare la alta; aplicatii utile ale retelelor Petri sunt, de exemplu, detectarea blocarilor si teste 9

pentru conditiile de terminare a unui proces). Impartasirea unor informatii. Un model poate constituit pentru a ^nvata si informa utilizatorii asupra anumite relatii. De exemplu, ^n vizualizarea stiinti ca, modelele gra ce sunt utilizate pentru vizualizarea datelor numerice { o harta geogra ca este un model gra c al unor date numerice geodezice, pe c^nd vizualizarea gra ca a rezultatelor numerice a unei tomogra i computa erizate este o unealta indispensabila de diagnostic; Un alt exemplu este cel al simulatoarelor de zbor ce imita zborul avioanelor ^n scopuri de ^nvatare si testare a pilotilor. Utilizare ^n aplicatii tehnice. Modelele pot adesea^nlocui sistemele originale. De exemplu, autopilotul unui avion este un sistem pe calculator ^n timp real bazat pe modele ale proprietatilor aerodinamice, ale comportarii motorului si alte proprietati ale avionului, un sistem cu programe special concepute ce preia controlul avionului corespunzator unor parametrii speci cat i precum ^naltimea si altitudinea. Exista doua abordari diferite ^n descrierea, analiza si controlarea obiectelor sau proceselor tehnice, stiinti ce, economice: experiment sau simulare. Prin experiment, informatia este obtinuta prin examinarea obiectelor si fenomenelor^n sine. In simulare, experimentele si examinarea sunt efectuate cu ajutorul unor programe pe calculator bazate pe modele matematice; modelele sunt derivate din cunostiinte stiinti ce (teorii) care sunt utilizate pentru a explica anumite fenomene si legile lor. C^nd se alege strategia de urmat trebuie tinut cont de cost si de realizabia litatea proiectului. De exemplu experimentele pe obiecte reale nu pot luate ^n considerare ^n cazul determinarii designului optim al unui avion. In mod normal utilizatorii aplica cunostiintele si informatia castigata de la model la original. Analiza modelului, experimentele sau simularile nu pot ^nlocui experimentele empirice. Fiecare asetiune despre obiectul original obtinut de la model trebuie veri cat ^n contextul obiectului original (vezi modelele de prezicere a vremii, sau procesarea datelor medicale).

2.2 Algoritmi
Un algoritm este o directiva precisa^n forma unui text nit ce speci ca executia unei secvent e nite de operatii elementare (intructiuni). Este construit pentru a rezolva probleme din clase sau tipuri particulare. Algoritmul este o metoda practica pentru a gasi solutii la o problema. Setul de instructiuni a unui algoritm poate procesat de o inta umana sau de un calculator. Un algoritm numeric este o serie de instructiuni construite pentru a executa operatii numerice pe date numerice. O a rmatie matematica precum ,,o functie reala continua f 2 C a; b] ale carei valori f(a) si f(b) au semne opuse are cel putin un zero ^n (a; b)" nu este executabila, deci nu este un algoritm. Execut ia unui algoritm se realizeaza pas cu pas. Secvent a de rulare a pasilor 10

c^nd un algoritm este executat se numeste proces. Algoritmul este executat de a un procesor care poate o inta umana sau un calculator. Fiecare pas al algoritmului consta ^n executia unuia sau mai multor sub-algoritmi care sunt simbolizati prin numele lor (exemplu: ,,determina valoarea functiei"). Proprietatile fundamentale ale algoritmilor sunt: abstractizarea (un algoritm descrie modul de rezolvare a unei probleme la un anumit nivel de abstractizare), generalitate (un algoritm este o directiva generala pentru rezolvarea nu numai unei singure instante a problemei, ci pentru mai multe probleme dintr-o clasa particulara), nitate (descrierea unui algoritm este necesar a de lungime nita { nitate statica {, iar o cantitate nita de stocare i se permite pentru rezultatele intermediare { nitate dinamica), terminare (un algoritm se termina daca se opreste dupa un numar nit de pasi si returneaza un rezultat de ecare data c^nd este executat). a Algoritmul este deterministic daca ^n ecare punct al execut iei exista o unica cale de a continua (pasul consecutiv este unic determinat). Algoritmul este determinat daca el returneaza acelasi rezultat pentru parametrii dati si stari initiale de ecare data c^nd este executat. a Complexitatea unui algoritm este o masura a lucrului care trebuie facut ^n timpul executiei. Nu este numai o caracteristica a metodei utilizate, ci si a gradului de di cultate a problemei ce este adesea caracterizat printr-un simplu index scalar (de exemplu, dimensiunea n a unui sistem de ecuatii liniare indica gradul de di cultate a problemei rezolvarii sale). Toate a rmatiile privind efortul ^n execut ie sunt realizate relativ la anumit index de complexitate a problemei. De obicei se contorizeaza numarul de pasi computationali necesari pentru executarea algoritmului (presupun^nd ca toate operatiile elementare au a loc ^n timp egal). Depinz^nd de un parametru al problemei p, complexitatea C(p) a algorita mului este de ordin f(p) daca exista constantele a si b astfel ca C(p) bf(p) pentru toate p a (se noteaza C(p) = O(f(p))). Algoritmii sunt divizati ^n clase de complexitate:

O(1) O(log p) O(p) O(p2 ) O(p3 )

Clasa de complexitate constanta logaritmica lineara patratica cubica .. . O(pm ); m 2 I polinomiala N O(cp ) exponentiala O(p!) factoriala

Ordin

Exemplu de C(p) c 2 IR+ c logp c 1 p + c0 c2 p2 + c1p + c0 c3 p3 + c2p2 + c1p + c0 cm pm + cm?1 pm?1 cdp +polinom(p) cp! + c0

De exemplu, sortarea crescatoare a k numere reale se poate realiza cel mai rapid cu algoritmi de complexitate O(k log2 k). 11

2.3 Programe
Un program este un algoritm formulat ^ntr-un limbaj de programare si care poate executat pe un calculator. Programele numerice sunt programe construite pentru rezolvarea problemelor numerice. Atributele calitatii programelor sunt reabilitatea, portabilitatea si e cienta. Reabilitatea este capacitatea software-ului de a mentine nivelul de performanta pentru conditii stabilite si pentru o perioada data de timp. Este data de gradul de certitudine cu care satisface cerintele speci cate ^n documentatia sa. Trasaturile reabilitatii sunt: (a) corectitudinea: un program este corect daca returneaza rezultate corecte pentru toate datele de intrare; (b) robustetea: caraterizeaza gradul ^n care programul poate recunoaste date de intrare invalide sau incorecte si reactioneaza ^n asemenea mod ^nc^t a utilizatorul poate ^ntelege si mentine functionalitatea sa; (c) acuratetea: este proprietatea programului de a returna rezultate care sunt egale cu valori explicite de referinta (rezultate exacte); (d) consistenta: ofera informatii ^n ce masura un program sau sistem de programare a fost dezvoltat corespunzator regulilor de design si implementare, sau daca documentatia este elaborata ^ntr-un stil omogen. Portabilitatea este o masura a efortului necesar pentru a transfera software de la un mediu de calcul la altul. E cienta unui program caracterizeaza relatia ^ntre performantele programului si cantitatea de resurse utilizate^n conditii date. E cienta este masurata prin: e cienta executiei se bazeaza pe analiza timpului cerut pentru rezolvare; e cienta stocarii se bazeaza pe analiza exploatarii ierarhiei memoriei (registrii, cache, memorie principala, stocare disc).

2.4 Design software


Design-ul de software este procesul de inventare, ^mbunatatire, select ie ^ntre solutii alternative si apoi descrierea programelor calculator care satisfac cerintele utilizatorilor ^n constr^ngerile mediului si bazat pe criterii relevante. a Este o descriere utilizabila si de ^nteles a alternativei alese. Un design bun este unul care descrie un sistem care satisface toate cerintele. Cel mai bun design este alternativa cea mai adecvata si care balanseza cel mai bine cerintele, constr^ngerile si criteriile. De exemplu cel mai bun design al a unei masini este unul care include facilitatile cele mai probabil a v^ndute a ^ntr-un domeniu de preturi stabilite, se potriveste cu marimea motorului, utilizeaza parti cel mai putin lungi si cel mai tari posibile. In mod similar cel 12

Cerinte ^n design-ul de software

mai bun design de software trebuie sa e unul care are majoritatea functiilor, are calitatea cea mai ^nalta, are cea mai mare usurinta ^n utilizare, are cea mai buna adaptabilitate, are cea mai mica utilizare de resurse calculator, are dezvoltarea cea mai rapida, are ^ntretinerea cea mai usoara, si poate livrat la data dorita. Obiectivele principale^n design-ul de software sunt urmatoarele: sa satisfaca cerintele utilizatorului, sa nu contina erori, sa e usor de ^nteles, implementat si schimbat, sa ofere performante bune, sa balanseze cel mai bine obiectivele cu constr^ngerile sistemului. a Printr-o cutie (box) se ^ntelege ^n mod brutal un proces care reactioneaza la intrari date prin iesirea unor anumite rezultate sau printr-o comportare de anumit tip. Cutia este neagra (black box) c^nd este opaca si nu putem vedea ce se a ^nt^mpla ^n interior. Speram ca se va petrece totul corect, dar nu stim cu a siguranta. Programatorii se confrunta cu cutiile negre tot timpul prin utilizarea de subrutine, biblioteci si programe scrise de alte persoane. At^t timp c^t aceste a a unelte lucreaza corespunzator si se cunoaste modul de utilizare, rareori se pune problema construct iei interne. Un software matematic este adesea privit ca o cutie neagra care rezolva probleme matematice. Acest fapt poate conduce la pierderea capacitatii de ^ntelegere a fenomenelor matematice. De aceea ^n design-ul de software matematic trebuie sa se prevada posibilitatea de explorare a ecarei cutii negre de catre utilizatori. Testarea sofware-ului matematic este un subiect netrivial. La nivelul cel mai simplu consista ^n veri carea, de exemplu, ca o anumita subrutina detecteaza corect si trateaza valorile ilegale ale parametrilor sai (de exemplu, o valoare negativa pentru o dimensiune). Desigur exista un numar de probleme mai subtile care trebuie discutate. Inaintea testarii unui algoritm avem nevoie de o speci care precisa a ceea ce se presupune ca face. Acest lucru poate di cil si chiar imposibil de obtinut. De exemplu, se considera un rezolvitor a ecuatiei ax2 +bx+c = 0. Pentru aceasta b2 ? 4ac trebuie calculat cu o precizie foarte mare. Posibilitatea de depasiri complica de asemenea speci carea unei asemenea probleme (de exemplu, b2 poate produce o depasire daca b este mare). Calculele de test pot subiectul unor erori de rotunjire. De exemplu, pentru un rezolvitor de sisteme liniare, se poate veri ca daca solutia x a Ax = b ^ satisface krk ukAkkxk, unde r = b ? A^ este reziduul, iar u este eroarea la ^ x rotunjiri. O tehnica comuna^n testare este construirea unui sistem de test prin alegerea unui x si formarea b := Ax. Apoi Ax = b este rezolvat cu metoda data 13

Conceptul de cutie neagra

Testare

si solutia gasita este comparata cu x. Datorita erorilor de rotunjire ^n formarea lui b, x original poate sa nu e solutia exacta a sistemului. Mai multe criterii trebuie considerate ^n alegerea datelor de test. Acestea trebuie sa reprezinte adecvat domeniul de probleme pentru care software-ul este construit. Ideal, datele de test trebuie sa veri ce ecare linie de cod. Trebuie incluse probleme di cile. De exemplu, formarea unui sistem liniar Ax = b cu aij distribuite uniform ^n ?1; 1] aproape ^ntotdeauna ofera un A nesingular. Este mai indicata formarea unui A arbitrar cu valori proprii date. O abordare din punct de vedere a optimizarii este adesea utilila ^n testare. Ideea este aceea de a de ni o masura scalara a succesului sau insuccesului unui algoritm si de a ^ncerca sa e optimizat pe date. De exemplu, pentru o sistem Ax = b se cauta datele A si b care sa maximizeze reziduul relativ kb ? A^k=(kAkkxk), care trebuie sa e de ordinul nu, unde n este dimensiunea x ^ sistemului. Un exemplu semn cativ este faptul ca aproximativ 40% din liniile produsului LaPack constau ^n codul de testare. Un pro ler (pro lator) este stetoscopul programatorului. Un pro ler este un program care ofera informatii asupra execut iei altui program, respectiv numarul de ori de care este executat o anumita instructiune a unui program (line count pro le), sau cantitatea de timp petrecuta ^n ecare subprogram, functie sau procedura (procedure{time pro le). Exista mai multe utilizari a pro lurilor: 1. Identi carea spoturilor erbinti, adica acele parti ale codului care sunt executate cel mai frecvent (line count pro le) sau timpul de executie dominant (procedure{time pro le). Astfel va pro tabila concentrarea asupra optimizarii respectivelor parti. 2. Relevarea partilor de cod care nu sunt executate niciodata (relevare cod nefolositor, testare inadecvata sau erori). 3. Evidentierea ine cientelor, precum codul care poate scos dintr-un ciclu. Compilatorul Stanford Algol W din 1970 continea deja un pro ler. Este relativ usoara construct ia unui pro ler simplu de tip line count. Ideea aceea este de a adauga instructiuni la codul sursa care incrementeaza contoare. Matlab 5 are o functie pro le care poate utilizata pentru a produce pro le de timp a functiilor a sierelor speci ce (M- les). De exemplu:
%PROF1 Profile this file to check relative costs of +,-,*,/. n a b x = = = = 100; randn(n); randn(n); zeros(n);

Pro ler

14

for i=1:100 x x x x x x x x end Total time in C:``MATLAB``local``soft``prof1.m: 12.54 seconds 100% of the total time was spent on lines: 15 14 17 16 13 11 12 10 5 19] 4: a = randn(n); 0.02s, 0% 5: b = randn(n); 6: x = zeros(n); 9: 0.25s, 2% 10: x = a+b; 0.36s, 3% 11: x = a-b; 0.31s, 2% 12: x = a.*b; 0.64s, 5% 13: x = a./b; 3.49s, 28% 14: x = sqrt(a); 4.62s, 37% 15: x = exp(a); 1.00s, 8% 16: x = sin(a); 1.84s, 15% 17: x = tan(a); 18: 0.01s, 0% 19: end = = = = = = = = a+b; a-b; a.*b; a./b; sqrt(a); exp(a); sin(a); tan(a);

pro l si a seaza sumarul, respectiv: procentajului de timp petrecut ^n executie ^ntre un simbol extern si urmatorul si numarul de ori de apelare a ecarei rutine si numarul de milisecunde per apel. Termenul de simbol extern sau rutina se refera la functii sau subprograme.

Pentru a obtine un pro l sub Unix se poate da optiunea -p la compilatoarele cc, f77 sau pascal; aceasta optiune spune compilatoarelor sa includa coduri de pro l. Dupa rularea programului se da comanda prof. Aceasta citeste sierul

Software-ul este portabil daca este conceput sa e rulabil pe diferite sisteme prin doar c^teva schimbari minore (ideal, se doreste ca sa nu e realizata nici a o schimbare, dar acest nivel de portabilitate este adesea imposibil de atins). Cuv^ntul transportabil este utilizat pentru a descrie software care necesita ana umite schimbari bine-de nite pentru a rula pe diferite masini. De exemplu, 15

Portabilitate

pachetul LaPack este ,,o modalitate transportabila de a atinge o e cient a ^nalta pe diverse masini moderne", pe c^nd Blas trebuie sa e optimizat pena tru ecare masina. Un exemplu bun de colectie portabila de coduri Fortran este LinPack. Acesta nu contine constante dependente de masina si utilizeaza o submultime PFort a Fortran 66. Portabilitatea poate atinsa cu ajutorul limbajelor de nivel ^nalt precum Fortran, C, Pascal. Pe de alta parte, chiar si ^n aceste limbaje de programare exista probleme de portabilitate, rezultate din diferentele dintre compilatoare. De exemplu: 1. anumite compilatoare nu suporta ^ntreg standardul (precum compilatoarele de Fortran pe PC-uri, in anii '80); 2. elaboratorii compilatoarelor pot interpreta parti ale standardului diferit sau standardul lasa posibilitati de alegere (asemenea probleme au aparut ^n Fortran 66, dar au disparut odata cu noile standarde); 3. multe compilatoare suporta extensii ale standardului; c^teva dintre ele a permit indicarea utilizarii extensiilor, altele nu, fac^nd di cila informatia a daca extensiile au fost utilizate (^n Fortran 90, extensiile pot detectate si raportate); 4. ^n anumite limbaje de programare, precum Fortran 77, argumentele scalare pot transmise prin referinta (prin adresa) sau prin valoare { efectul apelarii unei proceduri cu argumente scalare poate varia depinz^nd a care mecanism este utilizat; 5. numarul maxim de paranteze imbricate sau de ciclari, numarul maxim de linii^ntr-un subprogram dimensiunea maxima a unei matrice poate varia ^ntre compilatoare; 6. un studiu asupra compilatoarelor de Fortran a demonstrat ca nu exista o ordine ^n speci carea instructiunilor (de exemplu primele instructiuni ale programelor Fortran) care sa e satisfacuta de toate compilatoarele curente. Au fost construite astfel o serie de programe pentru veri carea conformantei unui program la standard (pentru Fortran, PFort si ToolPack). In principiu un compilator perfect ar trebui sa faca aceasta veri care. cauza probleme de portabilitate. Deoarece informatia este calculata ^n timpul executiei, o serie de algoritmi so sticati trebuie elaborati pentru veri cari. Un exemplu este codul paranoia Kahan (cu versiuni ^n Basic, C, Modula, Pascal si Fortran, disponibile pe Web la netlib - cody). Un alt exemplu este rutina xLamch din LaPack. Generatoarele de numere aleatoare in uenteaza portabilitatea. Este de dorit sa e generate aceeasi secvent a de numere pe masini diferite. Majoritatea metodelor sunt bazate pe o mapare xk+1 = f(xk ) a ^ntregilor tot ^n ^ntregi. Constantele numerice pot speci cate ^n mod diferit. De exemplu aproxi16

Aritmetica^n virgula otanta Aritmetica diferita^n virgula otanta poate

marea unei integrale poate realizata cu regula de cuadratura Gauss sau cu o metoda Runge-Kutta. De exemplu, constanta poate calculata cel mai bine prin = 4:0 atan(1:0). depasire. Depasirea poate evitata prin aplicarea urmatorului algoritm: t = kxk1 s=0 for i = 1 : n s = s + (xi =t)2 end kxk2 = tps Problema algoritmului este aceea ca necesita doua treceri asupra datelor, astfel ^nc^t este ^ncet. Un algoritm mai rapid ce necesita o singura trecere a evita depasirile prin ^nsumare ^n trei acumulatori, pentru numere mici, medii si mari. Dupa ^nsumare se efectueaza o serie de teste logice pentru a decide modalitatea de combinare a acumulatorilor. De exemplu Blas utilizeaza o modi care a acestui algoritm. Un alt exemplu de posibila depasire este ^mpartirea numerelor complexe. Daca se utilizeaza formula a + ib = ac + bd + i bc ? ad c + id c2 + d2 c2 + d2 poate aparea o depasire la calculul patratelor. O modalitate simpla de depasire a acestei probleme este urmatoarea: daca jcj jdj, atunci se poate utiliza formula a + ib = a + b(dc?1) + i b ? a(dc?1) c + id c + d(dc?1) c + d(dc?1) iar daca jdj jcj se utilizeaza o formula similare ce invoca d?1. O depasire se poate manifesta diferit pe diferite masini: prin schimbare de semn, prin exponent negativ pentru numere foarte mari, numerele foarte mici sunt ^nlocuite cu cel mai mic numar pozitiv nenul reprezentabil ^n sistem, sau numerele mici pot sa dispara la multiplicarea cu 1,0.

Evitarea depasirilor Un exemplu clasic este evaluarea normei unui vecP tor kxk2 = ( i jxij2)1=2 . Pentru numeroase valori la x2 se poate produce o i

Prototipizarea

Prototipizarea este procesul de dezvoltare si testare a unui algoritm ^ntr-un sistem interactiv, ^n mod uzual gra c, si de nivel ^nalt ^nainte de translatarea sa ^ntr-un limbaj precum C sau Fortran. Matlab este un exemplu excelent de sistem pentru prototipizare. Numerosi cercetatori ^l utilizeaza ^n acest scop. Alte sisteme utilizate^n prototipizare sunt Mathematica, Maple. Avantajele sistemelor de prototipizare includ urmatoarele: 17

1. 2. 3. 4.

codare rapida si usoara ^ntr-un limbaj de nivel ^nalt; atentie minimala pentru detalii precum structurile de date; experimentarea rapida si testarea exemplelor numerice; depanare usoara: calculul poate oprit pentru ca utilizatorul sa poata urmari rezultate intermediare si apoi restarta din punctul de oprire; 5. iesirea gra ca ajuta la ^ntelegerea rezultatelor (vizualizare); 6. portabilitate usoara a codurilor de cercetare; 7. prototipul poate sa se dovedeasca a su cient de bun pentru ca translatarea ^n alt limbaj sa nu e necesara.

Sabloane
Una dintre realizarile majore ^n software-ul matematic de p^na acum este deza voltarea bibliotecilor de programe precum EisPack, LinPack, LaPack si NAG library. Un sablon (template) poate de nit ca o descriere a unui algoritm general mai mult dec^t un cod obiect executabil sau un cod sursa cel mai des ^nt^lnite a a ^n bibliotecile software conventionale. Un sablon nu este speci c pentru un limbaj si este descris ^n mod tipic ^ntr-un pseudo-cod de nivel ^nalt care poate usor translatat ^n C, Pascal sau Fortran. Un expert construieste algoritmul, scrie sablonul si ofera implementari de model ^n limbaje adecvate, pe c^nd utilizatorul adapteaza implementarile la a problema sa particulara si la masina sa. De exemplu, rezolvitorii iterativi pentru sisteme liniare sunt sabloane. Pseudocoduri pentru aceste probleme au fost descrise pe larg^n numeroase carti, iar implementari C, Fortran si Matlab sunt disponibile pe Web la netlib.org. Ideea sabloanelor este^nca la^nceput si ram^ne de vazut daca utilizatorii vor a gasi ca sabloanele sunt de preferat rutinelor de biblioteca. Valoarea sabloanelor pot sa depinda de aria de subiect si de masinile utilizate. Aparitia calculatoarelor paralele a condus la o cerere de calcul de ^nalta performanta pe baza de sabloane ca alternativa la rutinele de biblioteca complet functionale. Argumentul este acela ca rutinele de biblioteca tind sa e ori prea generale sau prea speci ce si sunt di cil sau imposibil de a croite pentru arhitecturi calculator speciale.

Depanare
Uneltele si tehnicile utilizate ^n depanarea programelor sunt urmatoarele: mesaje de eroare la compilare; veri cari ^n timpul compilarii: rang indici, variabile nede nite; urmarire (tracing): ecare data c^nd valoarea unei variabile se schimba, a valoarea si locatia la care s-a facut asignarea sunt a sate; pro ler descris ^ntr-un paragraf anterior; 18

Aceste unelte sunt implementate^nmediile de dezvoltare ale aplicatiilor precum produsele Microsoft Development Studio sau Borland pentru limbajele de nivel ^nalt. Studiile de pro t ^n domeniul dezvoltarii de software sunt bazate pe cost, alti factori precum gradul de utilizare a calculatoarelor ind astazi neglijati. Costurile software trebuie sa e divizate ^n costuri de dezvoltare si cele de ^ntretinere. In proiecte mari, costul de ^ntretinere poate ajunge la 2/3 din costul total. In medie, costul de intretinere a unui produs software numeric este aproximativ acelasi cu cel de dezvoltare. Numarul de linii de cod (LOC - lines of code) realizate de o persoana per unitatea de timp este o estimare a productivitatii programatorului. Valoarea LOC este determinata dupa completarea unui proiect software. Ea include toate activtatile implicate ^n proiect (de la speci care, la acceptarea produsului nit). Aceasta productivitate variaza ^ntre 5 si 5000 de linii per persoana per luna. Valoarea medie este de aproximativ 250 de linii de cod per persoana per luna (de exemplu, la NAG standardul este de 260 LOC per luna); dezvoltarea bibliotecii Fortran de la NAG este estimata la aproximativ 1000 de ani de putere umana individuala). Estimarile subiective ale programatorilor ne-experimentati nu sunt baze adecvate pentru studii realistice de cost. Un programator novice poate scrie 100 de linii de cod corect ^n numai c^teva ore, dar trebuie luat ^n calcul si tima pul necesar pentru analiza cerintelor, teste serioase si documentare su cienta. Cresterea cerintelor privind interfata utilizator duc la descresterea productivitatii. Comparativ cu anii '60, productivitatea ^n devoltarea programelor s-a triplat datorita cresterii puterii limbajelor de programare si a performantelor hardware. Cresterea productivitatii poate atinsa si prin utilizarea unor elemente software standard, respectiv software reutilizabil (de exemplu, rutinele de rezolvare a sistemelor de ecuatii liniare din Linpack).

debugger: permite setarea punctelor de ^ntrerupere la conditii sau locatii speci ce, execut ie pas-cu-pas (de exemplu, Matlab are un debugger).

Cost

19

20

3. Software numeric
3.1 Numerica pe calculator
Solutionarea cu succes a unei probleme numerice are multe fatete si ^n consecinta invoca diferite domenii ale stiintei calculatoarelor. Numerica pe calculator (Cn, computer numerics) include matematica numerica si procesarea datelor numerice ( gura 3.1). In opozitie cu algebra pe calculator (Ca, computer algebra), se bazeaza pe matematica aplicata, analiza numerica, calcule numerice, precum si anumite domenii a stiintei calculatoarelor precum arhitectura calculatoarelor si sisteme de operare.

Figura 3.1: Relatia Cn cu alte domenii stiinti ce

3.2 Matematica numerica si procesarea datelor numerice


liza si implementarea metodelor pentru solutia pe calculator a problemelor numerice. Matematica numerica include dezvoltarea si analiza uneltelor si metodelor matematice. Procesarea datelor numerice se concentreaza asupra designului si implementarii software-ului numeric. Nu exista o separare rigida ^ntre cele doua discipline. Pentru solutii numerice ne-simbolice a problemelor matematice, trebuie utilizate numerele disponibile ^ntr-un calculator particular. Aceste numere constituie un set nit de numere rationale, numite numere reprezentabile pe masina sau numere ^n virgula otanta. Orice numar real care nu este numar 20
Matematica numerica si procesarea datelor numerice trateaza designul, ana-

reprezentabil masina trebuie sa e aproximat printr-un numar reprezentabil masina (exemplu: ). Pe un calculator rezultatele aplicarii operatiilor aritmetice (+; ?; ; =) pot numai aproximate deoarece setul de numere masina nu este ^nchis la aceste operatii (^n general rezultatul exact o unei asemenea operatii nu este un numar masina si trebuie sa e aproximat printr-unul, precum ^n exemplu lui 1=3). Aceeasi situatie este ^nt^lnita ^n evaluarea functiilor a elementare (sin, cos, exp, log si altele). Majoritatea limbajelor de programare dezvoltate pentru aplicatiile numerice ofera proceduri interne pentru evaluarea acestor functii, ce calculeaza valori reprezentabile pe masina ale rezultatelor exacte pentru valori date ale argumentelor functiilor. Pe de alta parte, calculele pe calculator pot sa includa numai pasi ^n numar nit. Este imposibila calcularea de exemplu a sumei unei serii in nite prin adunarea ecarui termen. Aceasta lege fundamentala nu poate depasita prin utilizarea unor procesoare mai rapide: pe un calculator metodele si tehnicile dezvoltate ^n analiza trebuie sa e ^nlocuite cu metode nite. Trunchierea seriilor in nite si ^nlocuirea operatiilor analitice (diferentiere, integrare, etc) cu un numar nit de evaluari a expresiilor aritmetice sunt referite drept discretizare. Ca rezultat a acestei discretizari, rangului restrictiv de numere, aritmetica inexacta si alte ratiuni, nu exista ^n mod uzual o cale de calcul a rezultatului exact a unei probleme matematice pe un calculator; pot determinate doar aproximatii ale rezultatelor dorite. Calitatea (acuratetea) aproximatiilor numerice poate adesea ^mbunatatita prin cresterea efortului computational (de exemplu prin executarea mai multor iteratii ^n calculul unor serii). Mai devreme sau mai t^rziu, o bariera de netrecut este atinsa datorita a acuratetei limitate a calculatorului si datorita timpului limitat care poate afectat pentru rezolvarea problemei.

3.3 Probleme numerice


O problema numerica este o combinatie^ntre o problema matematica de natura constructiva si cerinte de acuratete a rezultatelor. Metodele numerice trebuie de aceea sa contina un mecanism pentru estimarea acuratetii solutiilor aproximative. Se disting urmatoarele categorii de probleme numerice: 1. evaluarea unei functionale l : F ! IR, adica calcularea valorilor R functiei f(x), a derivatelor f 0 (x); f"(x); : : :, integralei de nite ab f(x)dx, a normelor kf kp etc.; 2. solutionarea unor ecuatii algebrice: determinarea valorilor necunoscute din relatii algebrice prin rezolvarea unor sisteme liniare sau neliniare de ecuatii; 3. solutionarea unor ecuatii analitice: determinarea de functii (sau valori de functii) ce veri ca anumite ecuatii operatoriale precum ecuatii diferentiale ordinare, cu derivate partiale, ecuatii integrale, ecuatii functionale etc.; 4. solutionarea problemelor de optimizare: determinarea valorilor numerice 21

sau functiilor particulare, subiect al unor constr^ngeri speci ce, care opa timizeaza (mazimizeaza sau minimizeaza) o anumita functie obiectiv. Problemele matematice constructive, ^n care problemele numerice ^si au originea, pot privite ca functii abstracte F : X ! Y ^ntre doua spatii liniare normate. Depinz^nd de care cantitate y; x; sau F este necunoscuta^n ecuatia Fx = y, a problemele se clasi ca astfel: F x y Tip problema problema directa dat dat dorit problema inversa dat dorit dat problema de identi care dorit dat dat De exemplu integrarea este o problema directa, determinarea solutiei unui sistem liniar este o problema inversa, iar interpolarea este o problema de identicare.

3.4 Erori

Eroarea este deviatia solutiei calculate Y de la solutia exacta X a unei probleme matematice P . Eroarea (absoluta) este desemnata de cantitatea: eroare absoluta:=aproximatie?valoare exacta. Pentru valori extreme este de preferat utilizarea erorii relative. Eroarea relativa este: eroare relativa:=eroare absoluta/valoarea de referinta. De nitia erorii relative presupune o valoare non-zero a referintei. Daca este cunoscut faptul ca rezultatul exact este zero, atunci trebuie considerate alte cantitati ca referinta pentru indicarea devierii de la solutia exacta. Daca se da o toleranta ca parametru al unui program numeric pe calculator, speci cata ^n termeni de eroare relativa, atunci solutia calculata poate utilizata ca valoare de referinta pentru determinarea erorii relative pentru ca valoarea exacta nu este disponibila. Numarul de cifre zecimale corecte este adesea utilizat pentru a indica acuratetea. Se masoara astfel numarul maxim de cifre zecimale semni cative pentru care maxfm 2 N : round(Y ; m) =round(X; m)g, adica Y si X sunt identice dupa rotunjirea lor la m cifre zecimale: 22

Clasi carea erorilor

round(x; m) :=sgn(x)bjxj=10e(x)?m + 1=2c10e(x)?m, unde e(x) = blog10 jxjc + 1. Numarul cifrelor zecimale corecte nu indica egalitatea acestor cifre din aproximatie si solutia exacta. De exemplu, aproximarea Y = 0:09996 a lui X = 0:1 are patru cifre zecimale corecte, pe c^nd Y = 0:09994 a are doar trei si nu exista o corespondent a a cifrelor zecimale ^n ambele cazuri. Daca rezultatul unui calcul este un vector sau o functie ^n loc de un singur numar, atunci eroarea absoluta sau relativa este un vector sau o functie. In acest caz se utilizeaza o norma adecvata pentru estimarea erorii absolute sau relative. In matematica numerica si procesarea numerica de date, exista patru tipuri de erori: 1. erori de model: ca parte integranta a unui proces de construire a unui model, anumite cantitati sunt neglijate, rezultatul ind o ^nfatisare simpli cata a realitatii, iar deviatia inevitabila a modelului de la original este numita eroare de model (de exemplu, construind o model pentru pendul, fortele de frictiune sunt neglijate ^n modelul matematic, conduc^nd la o a eroare de model); 2. erori de date: modelele de obicei acopera o ^ntreaga clasa de aplicatii similare, iar ecare caz special este identi cat prin parametrii de model (de exemplu, lungimea unui pendul sau constanta gravitationala g); datorita masuratorilor inexacte sau altor factori, valorile utilizate pentru parametrii de model pot devia de la valorile adevarate, acesta deviere ind referita ca eroare de date; 3. erori de algoritm: anumite probleme matematice nu pot rezolvate prin manipulari simbolice, dar pot rezolvate prin algoritmi numerici ce ofera solutii aproximative; c^nd un asemenea algoritm numeric este dezvoltat, a sunt necesare o serie de simpli cari^nainte de a deriva o formulare nita a problemei sau ca cerintele de efort de calcul sa e reduse la un nivel rezonabil; deviatia rezultata a solutiei obtinute algoritmic de la solutia problemei matematice este numita eroare de algoritm; 4. erori de rotunjire: cum calculatorul lucreaza cu un set nit de numere, adesea operatiile invocate nu pot executate exact ( ecare pas computational mapeaza rezultatul sau ^n multimea numerelor disponibile); diferenta dintre rezultatul exact si rezultatul rotunjit al unei operatii este referita drept eroare de rotunjire.

recte de rezolvare a sistemului Ax = b necesita un efort de calcul proportional cu n3 , unde n este numarul de necunoscute. Daca o solutie aproximativa x ce satisface kAx ? bk < " este su cienta, atunci1efortul computational poate redus semni cativ. De exemplu, k kAk2kA? k2ln(2=")=2 operatii de multiplicare matrice-vector sunt necesare pentru o obtine solutia iterativa aproximativa cu o eroare ". 23

Erori de algoritm Exemplu: solutia iterativa a sistemelor de ecuatii liniare Metodele di-

Erori de trunchiere Algoritmii numerici implementati pe calculator cuprind o secvent a nita de operatii aritmetice (+; ?; ; = si logice). Numarul si ordinea calculelor este ^n general ne xata ^n avans dar este determinata de calculator^n momentul rularii; ele depind de date si rezultate intermediare. Pentru functii prede nite ce evalueaza functii elementare, precum sin se efectueaza un numar nit de operatii. Eroarea datorata^nlocuirii unui proces in nit cu o secvent a nita de operatii aritmetice este referita ca eroare de trunchiere. De exemplu prin ^nlocuirea seriei de calcul a functie cosinus
cos x = cu
1 X (?1)k

x k=0 (2k)!

2k

2 4 6 8 P8(x) = 1 ? x + x ? x + x 2! 4! 6! 8! se ajunge la o eroare de trunchiere e(x) := P8 (x) ? cos(x) care creste cu distanta dintre x si zero.

tinue cu informatii discrete este referita drept eroare de discretizare. R De exemplu, ^n evaluarea unei integrale ab f(t)dt, informatia completa este ^n mod uzual incomplet folosita. Desi f este dat adesea ^n termenii unei expresii algebrice, un program pe calculator poate lucra numai cu un set nit de valori ff(t1 ); : : :; f(tN )g. Informatia continua, teoretic disponibila, nu poate exploatata cu except ia unui set nit P puncte discrete utilizate pentru calculul de unei aproximatii a integralei de tip N cif(ti ). i=1

Erori de discretizare Eroarea care rezulta prin^nlocuirea informatiilor con-

Erori algoritmice Se refera la toate simpli carile facute ^n cursul formularii algoritmului numeric (inclusiv erorile de trunchiere si discretizare). In acest context, se vorbeste despre deviatia aproximatiei numerice (considerata fara erori de rotunjire) de la solutia exacta a problemei matematice. Reducerea erorii de algoritm Daca eroarea de algoritm poate redusa la o marime arbitrar de mica prin cresterea efortului de calcul, atunci algoritmul este referit ca ind o metoda de aproximare convergenta. Deoarece calculele algoritmice ^ntotdeauna trebuie sa se termine ^ntr-un numar nit de pasi, eroarea de algoritm este inevitabila; exceptie fac doar metodele care prin natura lor necesita un numar nit de operatii algebrice (exemplu: eliminarea gaussiana pentru rezolvarea sistemelor de ecuatii liniare). Limitari ale erorii algoritmice Pentru majoritatea metodelor numerice
de aproximare, pot derivate limitari ale erorii. Aceasta garanteaza un nivel 24

speci c al acuratet ii algoritmului. De exemplu, la calculul seriei cosinus p p x2k+2 jP2k(x) ? cos xj < (2k + 2)! ; x 2 (? 2; 2): Un alt exemplu este ^nt^lnit la calculul recursiv a valorii 2 pe baza a observatiei ca suma laturilor unui poligon regular circumscris unui cerc unitar si a unuia ^nscris pot utilizate pentru a deriva margini superioare si inferioare pentru circumferinta cercului unitate. Dublarea numarului k de v^rfuri a conduce la recursii, pentru lungimea sk a unui poligon regulat ^nscris, de tipul s4 = 2; s2k = 2 ? 4 ? s2 ; k iar pentru lungimea ck a poligonului circumscris, de tipul ck = 2sk = 4 ? s2 : k Ambele secvent e fksk g si fkck g sunt monoton convergente la limita 2 , lungimea cercului: ksk " 2 si kck # 2 . Astfel kck ? ksk este o limita pentru eroarile de algoritmi jksk ? 2 j, respectiv jkck ? 2 j. Pentru a asigura o eroare ^n cadrul unei tolerante speci ce, sunt necesare estimari ale erorii curente a algoritmului. Majoritatea programelor numerice calculeaza asemenea estimari odata cu ecare rezultat intermediar. Eroarea de algoritm este estimata pe baza informatiilor obtinute ^n timpul calculului. Desi eroarea de algoritm calculata astfel nu garanteaza limitarea erorii, se ofera informatii utile asupra erorii curente. Se considera de exemplu aproximarea recursiva a lui 2 propusa ^n paragraful anterior. Calculul practic a recursiilor sk indica o descrestere monotona a limitei erorii de algoritm kck ? ksk p^na la valoarea 2:38 10?7 dupa 11 dublari a ale numarului de v^rfuri, respectiv la k = 8192. Incep^nd cu iteratia urmatoare, a a limita erorii calculata ram^ne zero. Se poate conclude ca aproximatiile ksk si a kck sunt exacte ^n limita aritmeticii ^n virgula otanta. De fapt pentru k egal cu 11, 12 si 13 aproximatiile lui 2 6:28318513, 8192s8192 = 6:324556, 16384s16384 = 5:656854, 32768s32768 = 0 devin din ce ^n ce mai proaste si complet inutile la sf^rsit. Ratiunea acestei comportari este eliminarea cifrelor a semni cative la operatiile de scadere din formula lui sk .

r q

Erori de rotunjire

Erori de date

Impactul erorilor ^n date poate estimat prin analiza. O asemenea analiza investigheaza ^n ce masura se schimba solutia x daca data D pe care se bazeaza 25

este alterata. Tranzitia datei D ^n data perturbata D conduce la o tranzitie de la solutia exacta x la solutia perturbata x. De exemplu un sistem de ecuatii liniare ^n forma matematica originala este un sistem neperturbat, ^nsa sistemul liniar stocat ^n calculator (coe cientii pot afectati de inacuratetea conversiilor) poate reprezenta un sistem perturbat. Limitari ale erorii de forma kx ? xk lkD ? Dk sunt dezirabile pentru a caracteriza sensibilitatea solutiei la schimbarea datelor. Cel mai mic factor k = inf fl : kx ? xk lkD ? Dk; D ; D 2 set de dateg este numit numarul de conditie al problemei matematice relativ la un set particular de date. De exemplu se considera sistemul liniar Ax = b cu 04 6 4 11 0 602 1 0 22 1 A = B 20 45 36 10 C ; b = B 2012 C cu solutia x = B 57 C : @ 10 20 15 4 A @ 4581 A @ 36 A 35 84 70 20 8638 28 O perturbare a lui b cu b = (?0:31; 0:72; ?0:59; 0:17)T conduce la solutia x = (13:91; 84:03; ?25:54; 144:03)T , astfel ^nc^t o mica schimbare relativa a a datelor k bk2=kbk2 0:01% conduce la o schimbare ^nsemnata ^n solutie k xk2=kxk2 176%. Acest fapt se datoreaza unui numar de conditie mare: l =cond2 (A) = kAk2kA?1k2 = 18200: Numarul de conditie poate adesea calculat prin diferentiere. De exemplu se considera problema directa y = f(a), unde f este o functie diferentiabila. Printr-o schimbare a lui a ^n a = a + a, se obtine y = f(a) = f(a + a) = f(a) + f 0 (^) a = y + y; a 0 (^)=f(a)j. deci j y=yj = K j a=aj cu K = jaf a Daca numarul de conditie este prea mare, mici schimbari ^n date conduc la deviatii mari ale solutiei. Asemenea probleme sunt referite drept probleme prost-conditionate, ^n opozitie cu problemele bine-conditionate care au numere de conditie mici. Nu se poate trage ^nsa o linie de separatie ^ntre problemele bine si prost conditionate. Daca rezultatul unei probleme matematice depinde discontinuu de date variabile continuu, atunci solutia numerica a problemei este ^n general imposibil de obtinut daca datele sunt ^n vecinatatea discontinuitatii. In asemenea cazuri rezultatul poate perturbat substantial chiar si pentru date foarte precise si cu toata aritmetica multiprecizie. Situatii de acest tip conduc la notiunea de probleme prost-puse sau impropriu-puse. Asemenea probleme pot sa apara, de exemplu, daca un rezultat ^ntreg trebuie sa e calculat din date reale (adica continuu variabile). De exemplu, polinomul cubic P3 (x; c0) = x3 ? 2x2 +x+c0 are o radacina daca c0 > 0, doua daca c0 = 0 si trei daca c0 < 0; pentru valori apropiate de 0, determinarea numarului de radacini reale a lui P3 este o problema prost-pusa. 26

3.5 Selectia de software si incertitudinea calculelor numerice


In rezolvarea problemelor matematice se pot ^nt^lni trei situatii: (a) se poate a obtine o solutie analitica, (b) nu se poate obtine o solutie analitica, dar se poate apela la procedee numerice de aproximare a solutiei (c) nici o metoda cunoscuta nu poate aplicata pentru solutionarea problemei. Rezultatul unui calcul numeric este afectat de anumit grad de incertitudine. Aceasta incertitudine se datoreaza modelului, datelor, algoritmului, erorilor de calcul, dar poate cauzat si de alegerea proasta sau de utilizarea incorecta a software-ului numeric. Astfel: 1. alegerea unor software-uri gata-pregatite implica riscul selectarii unui program neindicat pentru problema care poate duce la rezultate inacurate sau neutile; 2. utilizarea inadecvata a unor sofware-uri gata-pregatite poate conduce la rezultate incorecte sau poate baza unor interpretari incorecte a rezultatelor; 3. ^n practica este imposibila eliminarea erorilor ^n totalitate lor (bug-uri de design, codare, scurtari ^n documentatii etc.); 4. software-ul de sistem si compilatoarele utilizate la execut ia unui program pot contine ele ^nsele bug-uri sau pot utilizate incorect. Este uneori complet imposibil sa e spus daca exista un bug ^n software matematic. Aceasta dilema este cauzata de utilizarea euristicilor^n rutine individuale, adica componente ale algoritmilor care nu sunt derivate din cunostiinte matematice sau stiinti ce, ci din intuitia programatorului. Numarul de metode numerice pentru aproximarea unei solutii a unei probleme matematice este foarte mare. Una dintre problemele cele mai di cile este alegerea metodei adecvate problemei ce urmeaza a rezolvata. Raspunsul la aceasta noua problema depinde de ce calitate este ceruta aproximatiei, timpul ^n care este ceruta aproximatia si cunostiintele utilizatorului asupra clasei metodelor de rezolvare. Volumul si diversitatea tuturor software-urilor numerice este complesitoare. C^nd se confrunta cu aceasta cantitate, este important ca utilizatorul sa aiba a o cunostiinta despre software-ul numeric ^n general si sa cunoasca unde acest software poate optimal aplicat pentru ca sa e capabil sa aleaga cel mai adecvat software pentru o problema speci ca. O selectie corecta poate realizata numai cunosc^nd proprietatile problemei ce urmeaza a rezolvata. a

3.6 Date numerice si operatii numerice


ale datelor matematice. Calculele clasice se bazeaza pe numere reale, un set 27

Date matematice Datele matematice fundamentale Numerele sunt unitatile fundamentale

nenumarabil care24se extinde de lap la 1. De exemplu numere reale valide ?1 sunt 0; 1997; 1010 ; ?273:15; 1=3; 2; ; e; : : :. Numerele reale sunt elemente de baza ^n stiinta si tehnica.

Date algebrice Numerele reale pot utilizate pentru crearea obiectelor-date

compuse, de complexitatea ^nalta { structuri de date {, utiliz^nd agregarea a (creare de tupluri), recursii (crearea de liste liniare, arbori etc.) si alte tehnici. Exemplele clasice sunt numerele complexe, vectorii, matricele, matricele rare, sistemele de coordonate. O data algebrica este o structura de date a caror componente elementare sunt numere reale.

Date analitice Sunt e functii e aplicatii de tip mapare (domeniul functiilor


consista ^n mod tipic ^ntr-un numar in nit de numere).

Datele numerice pe calculator

ce implica faptul ca nici unul din nivelele de abstractizare^nalte nu trebuie sa se ocupe cu detalii a nivelelor de abstractizare mai scazuta. Trebuie sa e posibila manipularea unui obiect-data fara a avea o cunostiinta asupra structurii sale interne. Trebuie ^nsa sa existe o descriere detaliata abstracta a proprietatilor care permit utilizarea sa corecta; o asemenea descriere se numeste speci care de interfata. pe calculator. Manipularea la nivel de bit este efectuata prin operatii binare. Sistemul binar este utilizat pentru reprezentarea numerelor (ce devin astfel ^nsiruiri de biti). La nivel de procesor, un alt tip elementar de date pentru reprezentarea informatiilor este caracterul, un element al unui set nit numit alfabet (exemple: codul ASCII, American Standard Code for Information Interchange, cu 128 caractere sau EBCDIC, Extended Binary Coded Decimal Interchange Code, cu 256 caractere).

Ascunderea informatiei este un principiu fundamental ^n stiinta calculatoarelor

Date numerice fundamentale Bitul este unitatea fundamentala a datelor

Date algebrice O data ne-elementara poate derivata din tipuri de date

elementare (de exemplu date de tip boolean sau seturi de caractere). Aceasta derivare este realizata prin agregatie (exemplu, prin crearea tuplurilor), prin generalizare (de exemplu prin formarea unor uniuni de ranguri disjuncte), prin crearea seturilor de puteri etc. Elementele unei structuri de date algebrice sunt de obicei indexate: ecarui element al unui set nit de indexi (de exemplu, k-upluri de ^ntregi; pentru o matrice A 2 IRm n se constituie un set de perechi f(i; j) : i = 1; 2; : : :; m; j = 1; 2; : : :; ng) ^i este alocat un numar real. 28

Date analitice Datele analitice precum functiile ^nt^lnesc probleme ^n ima plementare. Limbajele imperative precum Fortran sau C permit numai functii neschimbabile, care sunt de nite sub forma de proceduri. Sunt rare limbajele care permit speci carea unor subrutine care returneaza alta subrutina ca rezultat. Functiile pot reprezentate numai^n termeni niti. Exista doua moduri de a realiza implementarea unei functii: prin speci carea regulii de baza a functiei sau prin speci carea parametrilor functiei. In numeroare cazuri functiile pot reprezentate prin expresii aritmetice, adica combinatii de operatori rationali, functii standard si paranteze care determina ordinea evaluarii. O expresie aritmetica poate speci cata ^n multe limbaje de programare printr-un numar nit de simboluri. Mai mult, aceasta expresie poate ^nlocuita cu un algoritm astfel ^nc^t pentru ecare element a din domeniul de de nitie al functiei evaluarea expresiei aritmetice sa se termine dupa un numar nit de pasi. Exista si cazuri ^n care o clasa particulara de functii poate privita ca o regula care este data de o formula cu un numar nit de parametrii (de exemplu, multimea polinoamelor de grad d cu coe cienti reali este descrisa prin regula f(x) = c0 + c1 x + + cd xd , parametrii ind fc0 ; c1; : : :; cd g).
mentala ^n toate ramurile de procesarea a datelor. Denota o grupare a datelor (structuri de date) si operatiile asupra lor. Pentru a speci ca acordarea atentiei asupra proprietatilor si operatiilor si mai putin asupra implementarilor ^n calculatoare, sunt adesea referite ca tipuri abstracte de date. Tipurile abstracte de date numerice de baza sunt implementate astazi de exemplu prin tipuri de date real si integer ^n Pascal, sau oat si int ^n C. Vectorii si matricele pot implementate pornind de la acestea prin agregare.
Operatiile care se pot efectua asupra datelor numerice se pot clasi ca ^n: operatii aritmetice, operatii algebrice, si operatii analitice. Operatiile aritmetice sunt de exemplu operatiile rationale (+; ?; ; =), functiile standard (exemplu: sin) sau operatiile de comparare. Deoarece implementarea tipurilor de date algebrice este bazata pe seturi nite de numere reale, este posibila reducerea tuturor operatiilor (algebrice) aplicate la asemenea date la operatii aritmetice ce actioneaza asupra componentelor reale, elemente care constituie tipul de date algebric (de exemplu, operatiile rationale asupra operanzilor complexi pot reprezentate prin compunerea operatiilor rationale pe parti reale si imaginare); Din punct de vedere matematic, evaluarea unei functii ^ntr-un punct dat este o operatie cu functia ca element-data. De asemenea, ^n contextul problemelor de diferentiere sau de integrare, functia poate privita ca un operand. Limbajele de programare contemporane construite pentru procesarea numerica

Tipuri numerice de date Conceptul de tip de data are o importanta funda-

Operatii numerice

29

a datelor permit ^nsa operatii cu functii numai daca ele se bazeaza pe evaluari punctuale ale functiilor; Cas-urile pe de alta parte permit manipularea directa a functiilor ca termeni.

3.7.1 Publicatii stiinti ce

3.7 Software numeric disponibil si reutilizabil


Inca din din anii '60, cele doua periodice de specialitate, Numerische Mathematik si Communications of the ACM, au initiat publicarea programelor numerice (Numerische Mathematik a oprit aceasta practica de c^tva timp). Incep^nd cu 1975, a a ACM (Association for Computing Machinery) publica colectia de algoritmi a ACM prin Transactions on Mathematical Software (TOMS), toate programele put^nd a a obtinute fara taxe ^n forma citibila de masina via Internet de la NetLib (programele sunt scrise ^n Fortran si C). Programe interesante si algoritmi sunt publicate adesea si ^n Computer Journal sau Journal of Computational and Applied Mathematics. Numerical Recipes, ce contin algoritmi si tehnici din cele mai importante domenii ale calculului stiinti c, explicate ^n maniera simpla si ilustrate ^n programe clar structurate, au fost publicate ^n variante Fortran, C, Pascal si Basic; programele pot obtinute via Internet sau pe CD-Rom.

3.7.2 Biblioteci de programe

O biblioteca este o organizatie ^n care cartile sunt sistematic ^nregistrate, mentinute si facute accesibile. O biblioteca software este o organizatie similara ^n domeniul software-ului calculator. Lucrul continuu pentru ^ntretinerea unei biblioteci software poate realizata numai cu un numar mare de persoane. Imsl (International Mathematical and Statistical Libraries), fondata ^n 1971, este o biblioteca software dezvoltata si operata de Visual Numerics Inc. din Houston, SUA, organizatie comerciala cu scop de dezvoltare si distribuire de software numeric. Include Imsl Fortran library, Imsl C-Math Library si Imsl C-Stat Library. Bibliotecile software NAG (Numerical Algorithms Group) sunt ^ntretinute de NAG Ltd., Wilkinson House, Oxford, Anglia. NAG a fost fondat ^n 1970 ca Nottingham Algorithms Group cu scopul de a dezvolta software numeric pentru calculatoarele englezesti ICL din acea vreme. Mai t^rziu a devenit o companie a non-pro t, independenta de universitati si companii de software. Cea mai importanta biblioteca software a NAG-ului este biblioteca de programe scrise Fortran. Versiunea curenta, Mark 17, are 1152 programe ^n Fortran 77 care pot apelate de utilizatori. Exista si o biblioteca C, una ^n Fortran 90 si o biblioteca pentru sisteme paralele cu memorie distribuita. Alte biblioteci software des utilizate ^n cadrul comunitatii stiinti ce sunt: Harwell Subroutine Library { Atomic Energy Research Establishment, Oxfordshire, Anglia 30

Slatec Common Mathematical Library { Los Alamos Scienti c LaboraCmlib { Center for Computing and Applied Mathematics, Maryland, USA Port { AT&T, Bell Laboratories, New Jersey, USA Boeing Math. Software Library { Boeing Computer Service Company,

tory, New Mexico, USA

Washington, USA Majoritatea companiilor producatoare de hardware construiesc biblioteci software pentru procesarea datelor numerice care optimizeaza utilizarea masinilor lor. Programele din aceste biblioteci adesea (dar nu ^ntotdeauna) dovedesc o performanta mai buna dec^t programele din bibliotecile software a independente de hardware, dar ^n mod uzual nu sunt portabile. Exemple: Essl (Engineering and Scienti c Subroutine Library) este un produs IBM care include rutine matematice e ciente si o biblioteca pentru calcule pe sisteme vectoriale, sisteme secventiale si sisteme paralele (pentru sisteme produse de IBM); SciLib Mathematical Library creat de Cray Research Inc. ofera colectii de programe Fortran si C, special optimizate pentru masinile Cray; Mlib si VecLib Library produse de Convex Inc. sunt biblioteci de programe numerice ce pot apelate din programe Fortran si ce includ versiuni optimizate a Blas, LaPack, Minpack etc pentru sistemele Convex; Cmssl (Connection Machine Scienti c Software Library) este o biblioteca de programe numerice ce utilizeaza potentialul calculatorului paralel Connection Machine; programele sunt scrise Fortran, Lisp, C.

Un pachet software este o colectie sistematic dezvoltata si asamblata de programe software construite pentru utilizare ^n domenii particulare. In contrast cu biblotecile software, majoritatea pachetelor software le lipseste ^ntretinerea permanenta si sistematica. In 1971, a fost pornit proiectul NATS (National Activity to Test Software) ^n SUA cu obiectivul de a produce si distribui software numeric de cea mai^nalta calitate. Au fost dezvoltate ca prototipuri doua pachete software: EisPack pentru rezolvarea problemelor de valori si vectori proprii si FunPack care calculeaza valori ale unor functii speciale. Ulterior au fost dezvoltate urmatoarele pachete de programe (majoritatea pachetelor mai jos mentionate pot obtinute via NetLib): LinPack pentru a completa EisPack pentru utilizarea ^n domeniul ecuatiilor liniare si problema celor mai mici patrate; LaPack (Linear Algebra Package) este un pachet de subprograme Fotran 77 construite pentru solutia directa a sistemelor de ecuatii liniare si problema celor mai mici patrate si pentru calculul valorilor si vectorilor proprii a matricelor. Este succesorul lui LinPack si EisPack. Prima versiune a fost publicata^n 1992; a doua versiune include peste 1000 de rutine si este cea mai buna colectie de software pentru algebra liniara la acest moment; 31

3.7.3 Pachete de programe

mari de ecuatii liniare cu matrice rare (^n mod special pentru matrice derivate din discretizarea ecuatiilor cu derivate partiale); SparPack este creat pentru solutia numerica a sistemelor mari de ecuatii liniare cu matrice rare si pozitiv de nite; MadPack a fost construit pentru rezolvarea sistemelor de ecuatii liniare utiliz^nd metoda multigrid; a MinPack rezolva sisteme de ecuatii neliniare si sarcini de optimizare; TnPack rezolva probleme mari de minimizare separabile si fara constr^ngeri; a HomPack rezolva sisteme de ecuatii neliniare utiliz^nd omotopii; a OrdPack rezolva probleme neliniare de potrivire a datelor utiliz^nd aproxia mari ortogonale; PpPack este construit pentru a calcula si manipula functii continue si derivabile, ^n special de tip B-spline; QuadPack calculeaza integrale uni-dimensionale si transformari integrale a functiilor de o variabila; FftPack calculeaza transformarea Fourier a secvent elor de date periodice; VfftPk este versiunea vectorizata a lui FftPack; OdePack rezolva probleme cu valori initiale ^n ecuatii diferentiale ordinare; FishPack rezolva ecuatii Poisson ^n doua si trei dimensiuni; Toeplitz rezolva sisteme de ecuatii liniare cu matrice Toeplitz; Conformal determina parametrii unor mapari Schwartz-Christo el; VanHuffel rezolva probleme de potrivire a datelor pentru ^n care distantele ortgonale ^ntre date si model sunt minimizate; Llsq rezolva problema celor mai mici patrate; Pitcon rezolva sisteme de ecuatii neliniare; Eda este utilizat pentru analiza datelor; EleFunt testeaza implementarea functiilor elementare; Blas (Basic Linear Algebra Subroutines) este utilizat pentru operatii elementare ^n algebra liniara; versiunea actuala Blas-3, complet portabila a aparut ^n 1990 si poate obtinuta ^mpreuna cu LaPack sau separat. Distributia conventionala a software-ului numeric este realizata prin expedierea prin retea (WWW -World Wide Web), pe benzi magnetice, diskette sau CD-Rom. Avantajul comunicarii electronice fata de posta conventionala este reducerea timpului necesar pentru obtinerea ultimelor versiuni a programelor, documentatiilor si datelor.
LaPack

ItPack este un pachet software construit pentru solutia iterativa a sistemelor

A aparut ^n februarie 1992, ca biblioteca transportabila de subrutine Fortran 77 pentru rezolvarea majoritatii problemelor din algebra liniara numerica: sisteme de ecuatii liniare, probleme de cea mai buna aproximare, valori si vectori proprii, probleme de valori singulare. Dezvoltarea sa a ^nceput ^n 1987 de catre o echipa de 11 analisti numerici 32

din UK si USA. LaPack este o varianta de success a lui LinPack si EisPack, av^nd toate capabilitatile lor. LaPack le ^mbunatateste ^n cel putin a urmatoarele aspecte: viteza, acuratete, robustete si functionalitate. A fost construit pentru a exploata Blas nivel 3. Versiunea 2.0, datata septembrie 1994, contine peste 1000 de rutine si peste 735000 linii de cod, incluz^nd codul de a testare si timp. Mark 16 din biblioteca NAG Fortran 77 contine LaPack. Rutinele LaPack pot divizate ^n trei clase: drivere, rutine comutationale si rutine auxiliare. Driverele rezolva o problema completa. Driverele simple au o speci care minimala, pe c^nd driverele expert au capabilitati aditionale pentru un utilizaa tor pretent ios. Rutinele computationale efectueaza sarcini individuale precum calculul unei factorizari sau reducerea matricei la o anumita forma; ele sunt apelate de drivere. Rutinele auxiliare efectueaza operatii de nivel scazut precum estimarea sau calculul normelor matriceale, rezolvarea sistemelor triunghiulare cu scalare pentru a preveni depasirile. LaPack contine o rutina xLAMCH pentru determinarea parametrilor masina. Datorita di cultatii tratarii varietatii existente de aritmetici masina, rutina are peste 850 de linii. xLAMCH ^ncearca sa determine depasirile (un asemenea program este di cil a scris). Pachetul contine si o cantitate mare de cod pentru testarea LaPack si analiza din punct de vedere al timpului la instalarea pe un sistem de calcul (numarul de linii de cod de testare depaseste numarul de linii de codul corespunzator calculelor). Aceste rutine asigura faptul ca LaPack ruleaza corect si e cient pe masina data. Pentru^mbunatatirea performantelor c^tiva parametrii a sunt disponibili utilizatorului. Dezvoltarea LaPack continua sub auspiciile a doua proiecte, LaPack 2 si ScaLaPack. CLaPack este o versiune C a LaPack, convertita din versiunea Fortran originala utiliz^nd convertorul f2c (1990). O extensie orientata a obiect, ^n C++, a LaPack, a fost produsa si numita LaPack++ (1995). O interfata Fortran 90 pentru LaPack a fost de asemenea dezvoltata. ScaLaPack cuprinde un subset a rutinelor LaPack reconstruite pentru masini paralele cu memorie distribuita. LaPack si raporturile tehnice sunt disponibile la http://www.netlib.org/lapack/index.html.
Blas

Basic Linear Algebra Subprograms are un set de primitive Fortran pentru operatii

matriceale si vectoriale, ce acopera toate operatiile comune ^n algebra liniara. Scopul Blas este de a crea subrutine robuste care sa poata apelate ^n cicluri interne ale codurilor ce se ocupa cu algebra liniara. Este disponibil precum LaPack prin serviciul NetLib. Exista trei nivele corespunzatoare tipurilor de obiecte operate. Nivelul 1 (1979) se ocupa de operatiile vectoriale precum produse vectoriale, norme, 33

scalari. Nivelul 2 (1988) se ocupa de operatiile matrice{vector precum matrice vector, rang, rezolvari triunghiulare. Nivelul 3 (1992) se ocupa de operatiile matrice{matrice. Fiecare nivel Blas cuprinde un set de speci catii de subprograme. Speci catile de nesc parametrii ecarei rutine si ce ceea ce trebuie sa faca rutina.

3.7.4 Servicii de distributie de software

Categoriile de utilizatori ce apeleaza la software numeric reutilizabil sunt urmatoarele: a) ingineri si oameni de stiinta care fac aprox. 12,000 cereri/zi la NetLib si tin Nag and Imsl ^n afacere, deoarece ofera interfata usoara, detalii ascunse, ^ncredere, viteza; b) comunitatea HPCC - High Performance Computing Community interesata ^n rezolvarea unor probleme mari si grele ce au nevoie de viteza, acces la detalii pentru adaptare, de ^ncredere marita ^n aplicatiile lor; c) profesori si studenti pentru ca sistemul este usor de ^nteles si permite accesul la anumite detalii pentru ^nvatare.
NetLib

Network Access to Mathematical Software and Data, a debutat ^n 1985, la AT&T Bell Labs. Este motivat de necesitatea de distributie rapida si cost-efectiva

a software-ului matematic de calitate pentru comunitatea stiinti ca ^n general. Sistemul a fost construit pentru transmiterea, prin returnare pe baza de e-mail, de rutine cerute de utilizatori ^mpreuna cu subrutinele necesare si a documentelor corespunzatoare sau a programelor de test oferite de autori. Este un mecanism automat de difuzare de software din domeniul public. Urmatoarele tipuri de software sunt disponibile: { Software de sisteme si unelte software precum compilatoare, subsisteme de comunicare prin transmitere de mesaje, monitoare si debugere pentru paralelism; { Blocuri de construct ie de baza pentru realizarea unor sarcini comune de calcul si comunicare. { Coduri de cercetare care au fost dezvoltate pentru a rezolva probleme di cile de calcul, dezvoltate pentru rezolvarea unor probleme speci ce, ce servesc ca demonstratii pentru diferite concepte, sau modele pentru dezvoltarea unor software-uri reutilizabile cu scop general. Serviciul Internet NetLib a devenit extrem de important deoarece ofera o cale rapida, simpla si e cienta pentru procurarea software-ului din domeniu public. NetLib ofera fara taxe programe, biblioteci de programe, bibliogra e, unelte software precum: biblioteci: LaPack, LinPack, EisPack, ItPack, SparPack, MinPack,
TnPack, HomPack, OrdPack, PpPack, QuadPack, FftPack,

34

a access aicm alliant amos ampl anl-reports apollo benchmark bib bibnet bihar blacs blas bmp c c++ cephes chammp cheney-kincaid clapack commercial confdb conformal contin crc ddsv dierckx di pack domino eispack elefunt env f2c fdlibm tpack shpack

tpack oppy fmm fn Fortran Fortran-m fp gcv gmat gnu go graphics harwell hence hompack hpf hypercube ieeecss ijsa image intercom itpack jakef kincaid-cheney la-net lanczos lanz lapack laso lawson-hanson linalg linpack list lp machines magic maspar

mds microscope minpack misc mpfun mpi na-digest napack netlib news numeralgo ode odepack odrpack opt p4 paragraph paranoia parkbench parmacs pascal pbwg pdes performance photo picl pltmg poly2 polyhedra popi port posix pppack presto problem-set pvm3 quadpack

random research scalapack sched scilib seispack sequent sfmm shpcc94 slap slatec sminpack sodepack sparse sparse-blas sparspak specfun spin srwn stoeplitz stringsearch svdpack templates tennessee textbook toeplitz toms typesetting uncon vanhu el v tpack vfnlib voronoi xmagic xnetlib y12m

Figura 3.2: Colectia NetLib

35

software TOMS: programe publicate ^n Transactions on Mathematical Software

VfftPk, OdePack, FishPack, MadPack, Toeplitz, Conformal, VanHuffel, PitCon etc.

accesibile prin indicarea numarului de ordine din revista. Acestea pot obtinute prin e-mail (send index la netlib@ornl.gov sau netlib @ nac.no) sau prin acces ftp:// netlib.att.com si http:// www.netlib.org. Colectia software depaseste 1 Gbytes. Pagini cu copii se gasesc la netlib2.cs.utk.edu,
netlib1.epm.ornl.gov, research.att.com, netlib.no, unix.hensa.ac.uk, ftp.zipberlin.de.

Alte site-uri care functioneaza pe acelasi principiu ca NetLib, dar cu alte baze de date sunt urmatoarele: statlib@temper.stat.cmu.edu pentru software de statistica, tuglib@science.utah.edu pentru editorul de texte matematice TEX, reduce-netlib@rand.org pentru calcul simbolic cu Reduce, maple-netlib@can.nl pentru calcul simbolic cu Maple, nistlib@cmr.ncsl.nist.gov pentru evaluari de software si hardware. Utilizarea NetLib are urmatoarele avantaje. Nu exista canale administrative prin care trebuie trecut. Deoarece procesarea cererilor este realizata automat, este posibila obtinerea informatiilor la orice timp al zilei sau noptii. Versiunile cele mai noi sunt ^ntotdeauna disponibile. Se pot obtine rutine sau parti ale unor pachete ^n loc de colectii ^ntregi. NetLib nu ofera: asistenta tehnica ^n determinarea si corectarea problemelor cu bibliotecile software, un stil uniform pentru programare si documentare, sau tratarea erorilor uniforma ^n interiorul bibliotecii.
Nhse

de procesare paralela, biblioteci de componente reutilizabile, prototipuri de coduri pentru probleme mari. Modalitatea de functionare a acestui prototip este descrisa ^n gura 3.3.
Gams

CITlib, Asset (Asset Source for SW Engineering Tech.), Cards (Comprehensive Approach to Reusable Defense SW), Elsa (Electronic Library Services and Appl.) , Gams (Virtual Software Repository), Stars (SW Technology for Adaptable, Reliable Systems). Nhse are legaturi spre 200 module si pachete, unelte

Prototipul ^n curs de elaborare a National High-Performance Software Exchange, disponibil la http://www.netlib.org/nhse/, este bazat pe tehnologiile existente, de cautare pe web, de distribuire a informatiilor, de scalabilitate si pe experient a NetLib. Este constituit din repertoriile curent existente: NetLib, Softlib,

Guide to Available Mathematical Software este o baza de date de software numeric operata de NIST (National Institute of Standards and Technology) ^n care toate subprogramele din majoritatea bibliotecilor matematice importante sunt documentate. Este un index de cautare si un catalog virtual de componente

36

Figura 3.3: Cautarea pe baza de Nhse

software matematice si statistice pentru utilizare ^n stiinta computationala si inginerie. O scurta descriere a ecarei functii este stocata, iar subprogramele sunt clasi cate corespunzator index-ului ierarhic Gams. Accesarea programelor se face la adresa gams.nist.gov. Gams a ^nceput cu o schema de clasi care simpla pentru software dezvoltata de un grup de utilizatori IBM (SHARE) ^n anii '60. In 1975 sistemul a fost extins si ra nat pentru a crea o schema de clasi care ierarhica de software matematic. Aceasta schema a fost utilizata ca punct de plecare pentru dezvoltarea unui sistem ierarhic revizuit si actualizat de NIST, ce are un succes mare ind utilizat si de rme comerciale de software (exemplu: Visual Numerics Inc., NAG Ltd., C. Abaci) si de repertoare de calcul stiinti c (de exemplu, SLATEC Common Math Library, NetLib, Elib, Lawrence Livermore National Laboratory, Amoco Research, University of Texas System High Performance Computing Center). Se bazeaza pe un arbore de decizie. Subclase sale sunt: A C E G I K M O Q S Aritmetica, analiza erorilor Functii elementare si speciale Interpolare Optimizare Ecuatii diferentiale si integrale Aproximatii Simulare, modelare stohastica Calcule simbolice Gra ca Unelte de dezvoltare software 37 B D F H J L N P R Z Teoria numerelor Algebra liniara Ecuatii neliniare Diferentiere, integrare Transformari integrale Statistica, probabilitati Tratarea datelor Geometrie computationala Rutine de serviciu Alte

Cain

Computer Algebra Information Network (http://www.riaca.win.tue.nl/CAN/) este

o biblioteca virtuala construita pentru a ajuta utilizatorul sa gaseasca informatia despre topicuri din Ca, Computer Algebra. Pentru ecare topic, se pot gasi legaturi spre tutoriale, algoritmi, implementari^n Cas-uri, aplicatii si literatura. Cain contine informatii despre Cas-uri speciale si pachete de programe, legaturile la acestea ind organizate pe topic: algebra (ne)comutativa si geometrie algebrica, rezolvitoare de ecuatii diferentiale, analiza elementului nit, teoria grupurilor, zica energiilor ^nalte, teoria numerelor, calcul tensorial. Exista si informatii speciale legate de factorizari, baze Grobner, eliminare cuaticata, solutii reale ale sistemelor polinomiale si roboti. Urmatoarele Cas-uri sunt tratate de Cain: Aljabr, Axiom, Derive, Fermat, Form, Gnu-calc, Macsyma, Magma, Maple, MathCad, Mathematica, MathView (cunoscut ca MathPlus sau Theorist), Maxima, MuPad, ParaMax.
eLib eLib (Electronic Library) este o biblioteca software care poate accesata la adresa elib.zib-berlin.de. Este operativa ^n 1992 si ofera mai mult de 10000 de algoritmi numerici si documentatii pentru toate domeniile de calcul stiinti c. Informatia nu este tinuta central, ci este distribuita pe diferite servere.

Sistemele automate de select ie a componentelor software matematice reutilizabile trebuie sa utilizeze o varietate de indicatori pentru a determina cerintele utilizatorului. Exemple de asemenea indicatori sunt: 1. problema de rezolvat, 2. algoritmul de aplicat, 3. limbajul utilizat pentru interactiunea cu programul, 4. mediul hardware/software ^n care software-ul trebuie sa ruleze. Pentru ecare indicator trebuie dezvoltat un vocabular controlat precum si relatiile reprezentative ^ntre termeni. Schema de clasi care Gams este probabil cea mai rasp^ndita (^n utilizare) a schema pentru probleme matematice si statistice. Sistemul Gams re ecta situatia software matematic din anii '80. Datorita dezvolarii ulterioare a software-ului, extinderii domeniilor de probleme rezolvabile cu ajutorul calculatorului, aplicarii schemelor existente ^n numeroase arii, schema originala a fost dezvoltata ad-hoc, rezult^nd un numar de probleme de design. a Schemele pot enumerative sau sintetice. Schemele enumerative ^ncearca sa ofere informatii explicite pentru toate conjunctiile si modi cari ale termenilor. (de exemplu, o clasi care ierarhica ^n care traversarea de la nodurile parinte la 38

Taxonometrii a problemelor solutionabile prin software matematic

Nivel 0 1 Matematica 2 Statistica 3 Utilitare si Suport (software) Nivel 1 1 Matematica 1-1 Aritmetica 1-2 Algebra, Teoria numerelor 1-3 Algebra liniara 1-4 Matematica discreta 1-5 Evaluare de functii 1-6 Geometrie 1-7 Analiza datelor 1-8 Ecuatii neliniare 1-9 Calcul (analiza) 1-10 Ecuatii functionale 1-11 Optimizare si Control 1-0 Altele 2 Statistica 2-1 Tratarea datelor elementare 2-2 Evaluare de functii 2-3 Numere aleatoare 2-4 Analiza variant ei 2-5 Regresii 2-6 Analiza datelor 2-7 Analiza seriilor temporale 2-8 Analiza corelat iilor 2-9 Analiza discrimant ilor 2-10 Modele structurale 2-11 Analiza grupurilor 2-12 Testare si Analiza realitat ii 2-13 Scalare multidimensionala 2-0 Altele 3 Utilitare si Suport (software) 3-1 Portabilitate 3-2 Tratare date 3-3 Multiprocesare 3-4 Dezvoltare de software 3-5 Gra ca si Vizualizare 3-6 Comparare si Testare 3-7 Altele

Nivel 2 1 Matematica 1-1 Aritmetica 1-1-1 Aritmetica speciala 1-1-2 Schimbare reprezentare 1-1-3 Restrictii ^n aritmetica 1-2 Algebra, Teoria Numerelor 1-2-1 Algebra elementara 1-2-2 Algebra abstracta 1-2-3 Teoria numerelor 1-3 Algebra liniara 1-3-1 Operatii vectoriale 1-3-2 Operatii matrice-vector 1-3-3 Operatii matriceale 1-3-4 Operatii tensoriale 1-3-5 Solut ia sistemelor liniare 1-3-6 Probleme de valori proprii 1-3-7 Alte ecuatii matriceale 1-4 Matematica discreta 1-4-1 Ecuatii cu diferent e 1-4-2 Combinatorica 1-4-3 Teoria grafurilor 1-4-4 Optimizare combinatoriala 1-4-5 Potrivire siruri caractere 1-5 Evaluare de functii 1-5-1 Constante matematice 1-5-2 Functii elementare 1-5-3 Polinoame 1-5-4 Functii trigonometrice 1-5-5 Functii speciale 1-5-6 Transformari integrale 1-5-7 Aproximari de functii Nivel 3 1 Matematica 1-1 Aritmetica 1-1-1 Aritmetica speciala 1-1-1-1 complexa 1-1-1-2 rationala 1-1-1-3 multiprecizie

:::

:::

Figura 3.4: Exemplu de schema ierarhica

39

nodurile copii progreseaza de la termeni largi la termeni concreti; vezi gura 3.4). Schemele sintetice ofera un set de termeni fundamentali ^mpreuna cu un set de reguli pentru combinarea lor ^n concepte complexe cerute de sistem. Un exemplu este constituirea unui tezaur, compus din liste de termeni, ecare legat cu alti termeni dintr-un set prede nit, precum termeni apropiati sau ^nruditi. Daca nu se cere solutionarea cu acuratete a unor probleme de dimensiuni mari, atunci sistemele multifunctionale de programe ofera o metoda foarte buna pentru rezolvarea interactiva a problemelor (de marime moderata). Aceste programe combina functionalitatea sistemelor numerice, simbolice si gra ce^n produse software de sine statatoare cu o interfata utilizator uniforma.

3.7.5 Sisteme interactive multifunctionale

Sisteme de explorare Cele mai importante domenii de aplicare a sis-

matematice, analiza datelor, dezvoltarea si analiza algoritmilor. Aceste sisteme sunt utilizate ^n mod uzual pentru rezolvarea problemelor de tipuri des ^nt^lnite (pe baza de sabloane). Aceste sisteme sunt de aceea neadecvate pena tru solutii e ciente a problemelor cu scara mare sau pentru calcule recursive cu date variabile.

temelor de programe interactive multifunctionale precum Maple, Mathematica, Matlab, Axiom, Macsyma sau MathCad sunt rezolvarea problemelor

merica a problemelor de marime moderata, trebuie luate ^n considerare sistemele orientate pe calcule matriceale, precum Matlab, Octave, Mlab, Gauss si XMath. Pentru solutia e cienta a problemelor mari este recomandata utilizarea produselor software numerice discutate la sectiunea biblioteci si pachete de programe.
Matlab (Matrix Laboratory) este cel mai faimos sistem multifunctional orientat spre numerica. A fost conceput initial ca interfata pentru LaPack, ^nsa

Sisteme numerice C^nd scopul unei aplicatii consta ^n solutionarea nua

s-a dezvoltat ulterior ca un mediu cu functionalitati multiple, usor de utilizat si portabil. Domeniul primar a aplicatiilor Matlab este algebra numerica liniara. Matlab acopera ^nsa si alte domenii ale numericii precum determinarea zerourilor unui polinom, analiza datelor utiliz^nd FFT (Fast Fourier Transforms), a solutia numerica a problemelor cu valori initiale ^n ecuatii diferentiale ordinare, etc. Functionalitatea sa gra ca face posibila trasarea gra celor ^n spatiul bisi tri-dimensional. Matlab are un interpretor si poate programat pentru a-si extinde functionalitatea. Programe Fortran si C pot apelate din Matlab. Ca rezultat, solutia numerica a problemelor ce presupun calcule intense poate accelerata prin reutilizarea unor programe software numerice din afara Matlab. O varietate de module suplimentare (tool boxes) au fost concepute 40

pentru diferite domenii de aplicatii si diferite sarcini: procesare de semnale, optimizare, retele neuronale, sisteme de control, statistica, procesare de imagini etc. Pentru a extinde functionalitatea Matlab ^n domeniul calculelor simbolice se poate activa Symbolic Math Toolbox furnizat de Maple. util pentru ^nvatarea utilizarii sistemelor orientate pe matrice si pentru rezolvarea unor probleme numerice practice. Are acelasi design si constructori de limbaj precum Matlab. Codul sursa si versiunile precompilate pentru diferite sisteme de calcul pot obtinute via ftp. Versiunea Gnu Octave este un limbaj de nivel ^nalt, cu scop initial de calcul numeric. Ofera o interfata pentru comenzi pe linie pentru rezolvarea numerica a problemelor precum sisteme liniare si neliniare, dar si pentru efectuarea altor experimente numerice utiliz^nd un limbaj compatibil cu Matlab. a Este o unealta pentru rezolvarea problemelor numerice comune din algebra liniara, precum gasirea radacinilor unor ecuatii neliniare, integrarea functiilor ordinare, manipularea polinoamelor, integrarea ecuatiilor diferentiale ordinare si algebric-diferentiale. Este usor extensibil si de^ntretinut via functiile de nite de utilizator scrise ^n limbajul propriu Octave, sau prin utilizarea modulelor ^ncarcate dinamic scrise ^n C++, C, Fortran, sau alte limbaje.
Octave, produs din domeniul public (ftp.che.utexas.edu:pub/octave), este

Sisteme simbolice

etc.) cu ajutorul calculatorului. Cele mai importante reprezentate ale acestei categorii, Maple si Mathematica, sunt ^n mod primar Cas-uri, dar au si functionalitati numerice si gra ce.

Cas-urile precum Maple, Mathematica, Macsyma, Axiom, Derive etc., fac posibila matematica analitica (diferentieri, integrari

Sisteme de simulare Reamintimca simularea utilizeaza modele matematice pentru experimentare ^n loc de obiecte si fenomene reale. Un model matematic este stabilit utiliz^nd datele care descriu stari ale unui proces. Experimentele a pot efectuate utiliz^nd modelele cu date de intrare adecvate (comportarea a modelului este investigata sub conditii relevante pentru o aplicatie speci ca). Rezultatele experimentelor sunt transferate la procese reale prin analogie si astfel ajuta la rezolvarea problemei originale. Pentru efectuarea simularilor exista: 1. limbaje de simulare ce sunt limbaje de programare special dezvoltate pentru a simpli ca formularea conceptelor de simulare (exemple: Acsl este utilizat pentru modele continue, de exemplu ecuatii diferentiale ordinare; Simula si Gpss sunt limbaje pentru modele discrete, de exemplu retele cu cozi de asteptare); 2. sistemele de simulare ce sunt sisteme software interactive si multifunctionale (exemple: VisSim si Acsl Graphic Modeler).
41

3.8 Medii de rezolvare a problemelor


Termenul de mediu de rezolvare a problemelor sau Pse (Problem Solving Environments) indica un sistem software care suporta rezolvarea problemelor dintr-o anumita clasa utiliz^nd o interfata utilizator de nivel ^nalt. Pse sunt unelte a pentru rezolvarea de probleme care nu sunt de rutina. Aceasta proprietate distinge Pse-urile de alte aplicatii software. De exemplu pentru problemele mecanice care se rezolva utiliz^nd ecuatii a cu derivate partiale de tip eliptic exista un numar de aplicatii software precum Nastran, Aska, Sap. Pse-ul EllPack pe de alta parte nu este restrict ionat pentru rezolvarea problemelor mecanice; el este construit pentru a rezolva ecuatii diferentiale eliptice generale. Are un sistem expert ce este responsabil pentru adaptarea optimala a algoritmului de rezolvare la proprietatile particulare ale unei probleme. Se presupune ca utilizatorul unui Pse este o inta umana, nu un alt calculator sau program. De aceea, ^n designul unui Pse, confortul utilizatorului si utilitatea iesirii (de preferat ^n forma gra ca) sunt criterii importante de calitate a software-ului (precum ^n cazul sistemelor de programe interactive multifunctionale). O utilizare e cienta a resurselor hardware este de obicei importanta dar nu ^n asemenea masura precum minimizarea efortului cerut unui utilizator de Pse. In mod ideal, un Pse se ocupa de partile de rutina a procesului de obtinere a solutiilor fara interfatare cu utilizatorul. Un Pse trebuie sa ajute utilizatorul ^n speci carea problemei, selectarea alternativelor algoritmice si determinarea parametrilor orientati spre problema ai algoritmilor de rezolvare. O problema di cila ^n devoltarea Pse este decodarea dialogului dintre utilizator si Pse. Deoarece terminologia utilizatorilor nu este aceeasi, trebuie implementat un tezaur (o colectie sistematic ordonata de cuvinte dintr-un anumit domeniu de aplicatii). Tezaurul ajuta Pse la reducerea sinonimelor la cuvinte cheie. Utilizatorul poate astfel comunica cu Pse ^n forma dorita. Dupa ce problema este speci cata cu anumita acuratete, Pse decide care subsistem sau care subprogram va utilizat pentru rezolvarea ei. Mecanismul de select ie variaza ^ntre arbori de decizie simpli la sisteme expert a caror baze de cunosttinte sunt consituite de specialisti ^n domenii particulare. C^nd baza a de cunostiinte este stabilita, experienta obtinuta anterior printr-un proces de solutionare terminat cu succes poate utilizat de Pse (^nvatare). C^nd mecanismul intern de solutionare a produs rezultatele, Pse-ul trebuie a sa le puna ^ntr-o forma care permite utilizatorului sa le interpreteze si sa le utilizeze. Vizualizarea solutiilor numerice este de aceea o componenta importanta ^n Pse. Sistemele Windows si gra ca sunt rechizite ale unei interfete utilizator a unui Pse. Daca utilizatorul cere asistenta, Pse-ul trebuie sa ofere suport sub forma unor functii de help (local sau dependent de context). Anumiti utilizatori pot interesati sa cunoasca care metoda de solutionare a fost aleasa de Pse si de ce. In mod ideal, aceste explicatii nu trebuie sa e numai liste de fapte si reguli, ci 42

informatii ^n forme inteligibile. Dintre Pse-urile disponibile la acest moment se remarca: 1. Pse-uri statistice: Rex, Student, Statxps, Bump, MultiStat, GlimPse sunt dedicate analizei statistice, incluz^nd si examinarea statisa tica a datelor, simpli carea analizelor statistice complicate si explicarea deciziilor luate de program utilizatorului; exista o varietate de sisteme software de acest tip bazate pe metode din inteligenta arti ciala; 2. Pse-uri simbolice: sisteme interactive multifunctionale precum Mathematica, Macsyma, Maple, Axiom, Derive etc. sunt sisteme software cu suport utilizator intensiv; 3. Pse-uri numerice: primele au fost dezvoltate pentru metoda elementului nit (FEM), de exemplu Feasa (Finite Element Analysis Speci cation Aid); din pacate sisteme expert cu interfata la pachete de programe (precum Nastran) nu sunt ^nca disponibile, desi o varietate de ^ncercari au fost facute pentru a realiza arbori de decizie care permit selectia algoritmilor sau subprogramelor adecvate problemelor numerice date (documentatia sistemelor Imsl si Ag includ asemenea arbori de decizie, iar NitPack ofera un arbore de decizie pentru selectia ^n timp real a software-ului adecvat).

43

44

4. Software algebric
4.1 Avantajele calculului simbolic
Dorinta de a utiliza calculatorul pentru a efectua simbolic calcule matematice apare ^n mod natural c^nd este ceruta o secventa de manipulari grele si lungi. a Erorile asociate cu algoritmii numerici pot astfel eliminate. Un asemenea calcul poate aparea, de exemplu, ^n rezolvarea exacta a sistemelor liniare de dimensiuni mari c^nd manipularea numerica nu este acceptata; sau la calculul a unei integrale nede nite pe baza de transformari care s-o reduca la una dintre formele cunoscute prin tabele. Ideea de a utiliza calculatoare pentru calcule non-numerice este relativ veche, dar metodele de utilizare a calculatoarelor pentru calcule matematice simbolice au fost recent dezvoltate. Calculele ne-numerice care nu sunt incluse aici sunt procese precum compilarea, procesarea cuvintelor, programare logica, sau inteligenta ar ciala. Aria de interes se refera la manipularea algebrica, calcule simbolice, algoritmi algebrici. Limbajele traditionale pentru calcul stiinti c precum C, Fortran sau Pascal sunt bazate pe aritmetica ^ntregilor de lungime xa si a numerelor reale cu precizie xa. De aceea, cu toate ca variatele tipuri de date si structuri de programare au crescut utilitatea acestor limbaje, ele permit numai un mod limitat de calcul. Di cultatea inherenta de a obtine ^ntelegerea rezultatelor aproximative obtinute este adesea ^ntarita de di cultatea de a produce aproximari rezonabile. Mai mult, cantitati nedeterminate, precum variabilele, nu pot manipulate algebric, ci trebuie sa detina valori concrete.
Cas

Calcul exact

In contrast cu limbajele traditionale, sistemele moderne pentru calcule simbolice suporta aritmetica rationala exacta, aritmetica^n virgula otanta cu precizie arbitrara, manipularea algebrica a expresiilor contin^nd nedeterminate. Scopul a unui sistem de calcul simbolic este acela de a suporta manipularea matematica ^n toate metodele sale. Denumirea unui asemenea sistem este Computer Algebra Systems, prescurtat Cas. Un Cas trateaza expresii matematice simbolic^n loc de a le trata numeric. Rezultatele calculelor sunt expresii ^n loc de coloane fara sf^rsit de numere. a Un Cas de succes implica mai mult dec^t motorul sau matematic: stocarea a e cienta a datelor, nucleu mic, o biblioteca mare si documentata, interfata utilizator, ^ncredere, marketing inteligent etc. Constructorii unui Cas nu pot anticipa toate necesitat ile tuturor utiliza44

torilor. Se permite ^nsa ^n mod curent utilizarea unor constante si functii matematice comune. Este important ^nsa ca aceste sisteme sa permita programarea unor noi facilitati, astfel ^nc^t utilizatori individuali sa poata extinde a utilitatea sistemului ^n directii pe care ei le gasesc necesare si interesante. Este utila considerarea unui exemplu ce ilustreaza contrastul ^ntre calculele numerice si simbolice. Polinoamele Chebyshev care apar ^n analiza numerica sunt de nite recursiv: T0 (x) = 1; Ti (x) = x; Tk (x) = 2xTk?1(x) ? Tk?2(x); pentru k 2 Astfel T2 (x) = 2x2 ? 1; T3 (x) = 4x3 ? 3x; T4 (x) = 8x4 ? 8x2 + 1; : : :. Un calcul numeric tipic al polinoamelor Chebyshev presupune calculul valorilor polinoamelor ^n unul sau mai multe puncte, rezultatul ind un sir de numere precum valorile polinoamelor^n x = 0: 1, 0, ?1; 0; etc, valori polinoamelor^n x = 1: 1, 1, 1, etc. Interpretarea simbolica a formulelor recursive presupune calcularea coe cientilor polinomiali si a sarea polinoamelor ca sume ponderate de puteri ale lui x, precum ^n formulele matematice de mai sus.

Calcule simbolice versus calcule numerice

4.2 Scurta istorie


In secolul IX, la academia de stiinte din Bagdad, Abu Jaar Mohammed Musa al-Khorezmi editeaza o carte asupra algabr ^n care rezolva simbolic ecuatii algebrice pe baze algoritmice. Aceasta abordare algoritmica a ramas p^na a la sf^rsitul secolului 19 tema centrala a algebrei. a La ^nceputul secolului XIX, aceste metode au fost completate prin algebra structurilor, astfel ^nc^t interesul s-a mutat asupra cautarii structurilor din a punct de vedere axiomatic. Metodele algebrice structurale au in uentat o mare parte a matematicii. In ultimul secol aspectele algoritmice ale algebrei au revenit ^n acualitate. Acest fapt a fost posibil si datorita dezvoltarii rapide a calculatoarelor si prelucrarii electronice a datelor care a permis manipularea rapida a formulelor si calculelor simbolice. Metodele algebrice si matematicii discrete au primit astfel o noua atractivitate, fac^nd posibila aplicarea lor ^n noi domenii,^n special a ^n stiintele naturii si ingineresti care erau rezolvate prin metode ale analizei numerice. In acest cadru s-a dezvoltat algebra pe calculator (Ca, computer algebra). Inca din anii '40 au fost construite mici sisteme ad-hoc pentru rezolvarea unor probleme speci ce. Doar ^n '60 a fost ^nsa posibila dezvoltarea unor sisteme mai mari cu posibilitati largite. 45

Contextul de dezvoltare a Cas

Ca leaga algebra algoritmica si structurala ^n anumit sens de metodele informaticii, transform^nd-o^ntr-o unealta noua metodica, a ata la intersect ia a dintre matematica aplicata si informatica. Exista trei forte ^n dezvoltarea Ca: sisteme, algoritmi si aplicatii. Prin dezvoltarea sistemelor se^ntelege dezvoltarea limbajelor de programare si softwareul asociat cu manipularea simbolica. Prin dezvoltarea algoritmii se ^ntelege dezvoltarea unor algoritmi e cienti pentru manipularea polinoamelor, functiilor rationale si a claselor de functii. Domeniul aplicatiilor pentru calcule simbolice este foarte vast si a condus la dezvoltarea sistemelor si algoritmilor.

Etapa premergatoare ^n dezvoltarea Cas-urilor este marcata de aparitia ^n 1961, a sistemului Pm ce putea calcula divizori comuni a polinoamelor cu coe cient i ^n virgula mobila. Dezvoltarea sistemelor pentru calcule simbolice a devenit un domeniu activ de cercetare si implementare ^nca din perioada 1961-1971, astazi ind un domeniu recunoscut de cercetare si ^nvatam^nt ^n informatica si matematica. a Prima generatie a ^nceput la sf^rsitul anilor '60 cu Macsyma, MathLab, a Scratchpad, Reduce, Sac-I, muMath. Au fost dezvoltate sisteme capabile sa execute calcule exacte (formale sau simbolice) precum diferentieri, integrari, factorizari. A doua generatie este marcata prin aparitia Maple ^n 1985 si Mathematica ^n 1988. Noutatea consta ^n interfetele moderne si capabilitatile gra ce. A treia generatie a ata pe piata acum include Axiom (un predecesor a lui Scratchpad realizat de NAG), Magma si MuPad. Aceste sisteme incorporeaza abordari bazate pe categorii si calcule operationale. MuPad este construit pentru a lucra ^n medii multiprocesor. Dezvoltarea actuala a Cas-urilor este directionata spre: functionalitate largita (capabilitatea de a rezolva un rang mare de probleme diferite), usurinta ^n utilizare (interfata utilizator, a sare gra ca) si viteza (c^t de mare poate a problema care se poate rezolva cu un calcul de rutina). Daca ^n 1991, problema cea mai mare pentru calcule de rutina putea avea ^n jur de 2KB ^n marime,^n 1995 se puteau trata probleme de aproximativ 500 KB. O problema centrala este factorizarea polinoamelor. Un progres enorm a fost realizat ^n aceasta problema ^n ultimii ani (teoria bazelor Grobner). Pentru operatii polinomiale se cauta implementarea celor mai rapizi algoritmi ^n sistemele precum Pari, Lidia, Bipolar.

Cele trei generatii

4.3 Utilizare Cas


realizate cu m^na. Puterea de vizualizare si rezolvare a unor exemple netriviale a face posibila utilizarea Cas ^n educatie din ce ^n ce mai mult. 46
Cas au o varietate de aplicatii^n domenii care necesita calcule lungi si di cil a

^nvatam^nt. Astfel, subdomeniile cele mai importante ^n care se utilizeaza a Cas-urile sunt urmatoarele.

Cas-urile ^ncep sa e folosite sunt informatica, ingineria, stiintele naturii si economia. Cas-urile se ^nt^lnesc astazi ^n cercetare, dezvoltare, practica si a

Domeniile clasice de aplicare sunt matematica si zica. Domeniile ^n care

Fizica: calculul formulelor analitice ^n zica teoretica si practica ( zica ion-

ilor grei, calcul tensorial ^n teoria gravitationala, probleme de calcul cu pramaterii multipli), rezolvarea problemei neliniare a undelor (puls laser, optimizarea c^mpului de magneti pentru directionare), ^n teoria cuantica (feromagneti ania zotropi), cautarea simetriilor si invariantelor, de la magneto-hidrodinamica p^na la metereologie, ^n zica corpurilor solide, solitoni etc. a

Matematica: clasi carea grupurilor nite si proiectii, cautarea sistematica


a corpurilor de numere algebrice si functii si a area invariantilor, studiul sistemelor de ecuatii algebrice neliniare, cercetarea teoretica si experimentala a claselor speciale de ecuatii diofantice, cercetarea fenomenologica si structurala a sistemelor dinamice, cuplarea metodelor simbolice si numerice pentru rezolvarea efectiva si fara erori de rotunjire a problemelor numerice etc.

siguranta, protocoale, dezvoltare VLSI, dezvoltare de algoritmi e cienti, manipularea automata a formulelor, demonstrare automata, teoria automatelor, teste pentru sisteme paralele, numeroase probleme legate de arbori, simpli cari, uniuni, sortari, cautari se pot reduce la probleme de combinatorica si prin aceasta tratate ^n mod clasic, retele de management a telecomunicatiilor (calcul parametrilor ^n designul retelei) etc.

Informatica: teoria codurilor si criptogra e, modelare, mecanisme de

Inginerie: ^n robotica, zica electricitatii, aerodinamica, elastomecanica, tehnici de reglare, dinamica neliniara si prelucrarea datelor de proces, analiza si sinteza retelelor electrice etc. Chimie: rezolvarea sistemelor ce modeleaza reactii chimice. Economie si econometrie, de exemplu la modele de regresie neliniara.

4.4 Clasi care


Cas-urile sunt de patru feluri:

1. sisteme cu scop general (de exemplu Axiom, Derive, Macsyma, Maple, Mathematica, Reduce); 2. sisteme pentru arhitecturi speciale (de exemplu pentru arhitecturi paralele: MuPad si Parsac); 47

3. sisteme pentru domenii speciale (Aldes, Sac-2, Cayley, CoCoA, Felix, Form, Gap, Kant, Lie, Mas, MathCad, Macaulay, Pari, Simath, Symmetrica); 4. sisteme experimentale si pachete de programe (Algeb, Amore, Chevie, Crep, Masyca, Meat-Axe, Orme, Quotipic, Redux, Reptiles, Semac, Singular, SymbMath, SummPad, Theorist).

4.5 Computer Algebra


Caracterizare generala
de rezolvare a unor probleme formulate matematic prin algoritmi simbolici si transpunerea lor ^n soft si hardware. Se ocupa de asemenea cu speci carea exacta a obiectelor si structurilor matematice nite si in nite si permite tratarea formala si simbolica prin calculator. Cunostiintele matematice structurate sunt schimbate prin veri carea si analiza algoritmilor implicati. Ca poate astfel introdusa cu e cienta ^n rezolvarea unor ^ntrebari modelate matematic ^n domenii variate ale informaticii si matematicii, precum si ^n stiintele naturii si ingineresti. Algoritmii Ca se refera la calcule cu numere si obiecte algebrice precum necunoscutele, functii elementare, permutari, variabile logice, parametrii functionali etc. Astfel este posibila abordarea diferitelor cazuri ^n structuri algebrice precum grupuri, corpuri de numere, inele de operatori diferentiali. Prin tratarea parametrilor simbolici este posibila tratarea uniforma a unor date de probleme. Aceasta abordare serveste rezolvarii problemelor reale, de exemplu prin recunoasterea, controlarea si eliminarea instabilitatii ^n solutii datorate unor schimbari minore^n datele de intrare (foarte posibile ^n tratarea numerica). Astfel Ca in uenteaza puternic calculul algoritmic traditional precum si teoria structurilor dezvoltata ulterior. Cu ajutorul informaticii dezvolta o unealta puternica ^n cercetarea moderna si ^n tehnologie. Ca nu este un ^nlocuitor al creativitatii matematice si a cunoasterii matematice; cu at^t mai putin sunt sistemele sale rezolvitoare universale de probleme. a Ele usureaza posesia bazelor matematice si sunt mijloc de ajutor^n matematica experimentala. Ca este o parte a calculului stiinti c, diferita prin natura sa de Cn (Numerica; vezi gura 2.1), pe care^nsa o poate^mbunatati prin precizie si e cienta.
Computer Algebra (Ca) este un domeniu stiinti c care se ocupa cu metodele

In uenta Ca
Metodele si rezultatele Ca au fost introduse^n Cas (medii Ca), desi acestea nu sunt folosite ^n mod explicit la construct ia unor asemenea sisteme. Dezvoltarea software-ului nu se poate face pe baze simbolice. 48

Cas-urile pot privite ca ajutoare ^n calcul care permit rezolvarea unor sarcini standard doar prin apasarea unei taste. Dezvoltarea a fost accelerata prin aceea ca elevii si student ii pot obtine licente pentru utilizarea acestor sisteme (de exemplu Derive de catre austrieci, Maple de catre germani). Aceast fapt ofera o sansa: bazele predarii pentru toate domeniile teoretice mai putin interesate ^n aprofundarea matematicii (ingineri, informaticieni, economisti, medicinisti, biologi etc) se pot elibera de ^ncarcarea tehnica. Aceasta lasa timp liber pentru ^ntelegerea regulilor si tratarea exemplelor interesante si pentru expunerea concept ionala si tangibila a unor parti ale matematicii. Se permite astfel deschiderea granitelor matematicii si ne-matematicienilor. Pe de alta parte exista ^nsa riscul ca obisnuitele calculele de m^na si prin aceasta a dispozitia de calcul ^n probleme nerezolvate sa nu mai e exersate, astfel ^nc^t a viitorii matematicieni sa e neajutorati fara un mediu electronic de rezolvare a problemelor. Predarea Ca este p^na acum si probabil si^n viitor^mpartita^n doua tipuri. a Prima serveste^nvatarii utilizarii Cas-urilor. Aceasta directie gaseste interes^n mod regulat ^n sectoare ale stiintei si industriei si este folosita de scoli, grupuri de utilizatori si alte organizatii. Exista o multime de carti ^n sprijinul acestei directii. Mai putine sunt ^nsa cursurile de matematica ^n care cunostiintele de baza sa e cuplate cu predarea unui Cas. A doua directie se adreseaza acelora care detin o ^ntelegere de profunzime a structurii Cas-rilor si celor care implementeaza algoritmi, de exemplu pentru o tratare critica a acestor sisteme. Se manifesta o lipsa acuta de carti ^n sprijinul acestei directii, desi ^n anumite universitati se abordeaza aceasta problematica. Ca ^n cercetare Cas au fost acceptate rapid ca mijloc de ajutor stiinti c care permite uti-

lizatorilor realizarea de calcule complexe precum si modi carea algoritmilor intrinseci Cas ^n timp relativ scurt. De exemplu, cautari matematice experimentale pot realizate rapid, conduc^nd la demonstrarea unor presupuneri si a stabilirea unor noi relatii. Prin formulare formala este posibil ca prin Cas sa se realizeze demonstrarea sau deducerea logica (exemplu: problema celor 4 culori), precum si tratarea unor probleme cu cazuri multiple. Exista posibilitatea de a rezolva exact probleme care ^nainte puteau tratate numai de pachete numerice. Prin utilizarea parametrilor este posibila rezolvarea simultana a mai multor probleme, ceea ce conduce la o reducere drastica a timpului (sisteme de ecuatii algebrice, ^ntegrari). Pentru a mari granitele sistemelor Cas trebuie ca ^n viitor sa e dezvoltati noi algoritmi si sa e crescuta e cient a ^n implementare. Pentru aceasta este necesara compararea algoritmilor si optimizarea acestora. Posibilitatile de optimizare depind de Cas-ul ^n cauza, presupun^nd de obicei conceperea unui nou a Cas sau ^nlocuirea unei componente hardware. In calcule trebuie luat si timpul de calcul al procesorului si capacitatea de memorie; cercetarea complexitatii unei probleme este necesara de asemenea ^ntr-un model de complexitate. De asemenea trebuie cercetata natura recursiva a unor obiecte matematice prin 49

algoritmi. Numai av^nd aceste cunostiinte este posibila o folosire optimala a a resurselor existente. Realizarile ^n Ca sunt periodic prezentate ^n Journal of Symbolic Computation, Algebra in Engineering, Communication and Computing, etc. Se poate observa astazi o dezvoltare a Ca ca acum 30 de ani ^n Cn. Extrapol^nd, se pot prevedea o serie de efecte si dezvoltari ^n anumite directii a a Ca, dupa cum urmeaza. Precum astazi metodele numerice si pachetele standard sunt utilizate ^n stiintele naturale si ingineresti, astfel vor metodele Ca si Cas-urile ^n viitor rasp^ndite si ^nlocuite. Totalitatea Cas-urilor va o reuniune de sine a statatoare a algoritmilor cunoscuti si posesoarea unor intrari pentru ^nvatarea cunostiintelor anterioare ^n forma unor banci de date. Prin aceasta Cas vor ^mbunatatite si noi algoritmi se vor extinde usor fac^nd posibila dezvoltarea lor a ulterioara. Partile algoritmice ale matematicii constructive vor disponibile ca unelte inteligente, ceea ce va permite rezolvarea unor probleme complexe. Cas vor deveni din ce^n ce mai puternice fata de pachetele numerice si le vor integra treptat. Pentru aceasta ecare Cas trebuie sa poata integra rutine din alte limbaje si sa permita non-expertilor, prin descrierea matematica a faptelor, sa rezolve unele probleme matematice standard. Astfel matematicienii se vor putea concentra asupra modelelor matematice a unor probleme complexe ce astazi nu sunt ^nca rezolvate. In cercetarea de v^rf ^n domeniile calculului stiinti c a fost ^ntotdeauna a necesar dezvoltarea unor algoritmi speciali pentru numeroase probleme. Realizarea implementarii acestora pune adesea probleme (pentru care sistemele actuale nu sunt de ajuns). Aceast fapt conduce la dorinta ca domeniul Cas sa e extins pentru a putea pune asemenea ^ntrebari complexe si de a face atractive problemele complexe. Este necesara^n perspectiva orientarea activitatii de cercetare ^n Ca spre algoritmi mai rapizi, sisteme speciale, realizari hardware, calcul paralel. In concluzie, perspective Cas sunt urmatoarele: 1. dezvoltarea sistemelor generale, a e cientei si interfetelor prietenoase; 2. cu toata dezvoltarea hardware exista o serie de probleme complexe care nu pot ^nca rezolvate; pentru acestea sunt necesare pachete specializate, Cas-uri adecvate; 3. necesitatea de standardizare si de deschidere a Cas-urilor pentru ca parti din alte programe sa e integrate rapid si schimbate ^ntre Cas-uri; cel putin algoritmii de baza sa e pusi ^n forma standard; 4. ^mbunatatirea performantelor procesoarelor si dispozitivelor pentru dezvoltarea unor sisteme speciale si programe ^n pachete. In viitorul apropiat va aparea ca problema principala autorizarea si referirea la un Cas. Chiar si non-expertii trebuie sa-si faca timp pentru a veri ca daca posibilele erori ^n Cas nu au condus la date false ^n sistem. Creatorii 50

Perspective

Cas trebuie sa faca publice posibilitatile si limitarile ecarei versiuni create. Corectarea unei erori ^ntr-un Cas autorizat trebuie realizata cu cunostiinta posibilei in uente asupra utilizatorilor Cas. Versiunile autorizate Cas trebuie tinute timp lung^n teste. Dezvoltarea ulterioara a Cas trebuie luata^n calculul de pret si oferite utilizatorilor sub forma de servicii si taxe de licenta.

4.6 Ce pot si ce nu pot face Cas-urile


Pentru o familie de probleme, cantitatea de timp si memorie necesara pentru a completa un calcul creste ^n general cu marimea exemplului. Masurile tipice sunt ^n grade sau numar de cifre, variabile, factori, termeni sau linii, coloane de matrice ale intrarilor si iesirilor. Pentru o clasa data de probleme, calculele manuale sunt practice pentru dimensiuni mici, iar Cas sunt practice pentru dimensiuni mai mari. Adesea aceste sisteme necesita o cantitate de memorie si timp considerabile de la o anumita dimensiune a problemei, astfel ^nc^t a problemele dintr-o clasa pot ^mpartite functie de dimensiunea lor ^n: 1. rezolvabile manual sau cu un Cas; 2. rezolvabile numai cu un Cas; 3. nerezolvabile. Daca timpul de calcul si spatiul calculat ca medii sunt functii polinoamiale de grad ^nalt de dimensiunea problemei, atunci va exista doar un mic rang de dimensiuni a problemei pentru care doar Cas-ul este disponibil. Acest rang este cu at^t mai mic cu c^t cresterea este exponentiala ^n dimensiune. a a Marginea inferioara a acestui rang depinde de utilizatorul ce urmeaza a efectua calculele manuale, iar marginea superioara este posibil sa indice o limitare a calculatorului sau a posibilelor ^mbunatatiri algoritmice.
Cas pot efectua aritmetica rationala exacta pe numere ce au cel putin c^teva mii de cifre zecimale. Desi a exista algoritmi mult mai rapizi, majoritatea Cas-urilor utilizeaza algoritmi de multiplicare a^ntregilor asimptotic proportionali cu produsul dintre numarul de cifre a celor doi operanzi. Complexitatea de timp a rutinelor pentru ^mpartirea ^ntregilor si cel mai mare divizor comun este ^n mod tipic cuadratica. Algoritmii cu crestere patratica sunt inacceptabili de ^nceti ^n afara unor dimensiuni a intrarilor de c^teva mii. Algoritmii aritmetici din Cas cu scop general sunt a adecvati unei vaste majoritati a problemelor din algebra, dar nu si pentru proiecte numerice extreme precum determinarea aproximatiilor lui .

Precizie aritmetica in nita Majoritatea

Expansiunea polinomiala Majoritatea Cas pot reprezenta polinoamele av^nd mai mult dec^t 1000 de termeni ^n numeroase variabile, daca numarul a a de cifre a coe cientilor nu este excesiv. Sistemele cu spatiu de adresare mare pot usor reprezenta polinoame ce depasesc 10000 de termeni si recent chiar 100000 termeni.
51

Fie m si n numarul de termeni a doi operanzi polinomiali ai unei ^nmultiri. Desi exista algoritmi mai rapizi, sistemele tind sa utilizeze un numar de multiplicari a coe cient ilor proportional cu mn si un numar de comparatii exponentiale proportionale cu m2 n. Daca n este proportional cu m, atunci algoritmii au o crestere cubica care devine innaceptabila la dimensiuni a intrarilor de depasesc c^teva sute. a

Functii rationale Simpli carea include calculul divizorilor comuni urmata

de divizare ^n scopul reducerii numaratorului si numitorului la cei mai mici termeni. Divizarea polinomiala este asemanatoare ^n e cient a cu expansiunea polinomiala. Calculul celui mai mare divizor comun a polinoamelor este semni cativ mai costisitoare dec^t expansiunea polinomiala, cu timpul si spatiul a cresc^nd rapid cu numarul de variable si gradele lor la fel ca ^n numarul de tera meni. Din acest motiv este recomandata exprimarea unei probleme cu functii rationale ^n problema polinomiala.

terminarea c.m.m.d.c., astfel ^nc^t Cas-urile nu calculeaza c.m.m.d.c. prin a factorizare. Un factor este ireductibil relativ la o clasa particulara de expresii daca factorul nu poate mai departe factorizat relativ la acea clasa. Pentru factorizarea polinoamelor, clasa de expresii de intrare este cea a polinoamelor multivariate av^nd coe cienti rationali. Clasele care permit faca tori ireductibili ca rezultat sunt cele ale polinoamelor multivariate care au coe cient ii: 1. numere exacte rationale; 2. expresii care au radicali ce implica numai numere rationale si orice variabile parametrice care nu se doresc a incluse ^n factorizare; 3. numere rationale aproximative sau ^n vigula otanta care servesc ca aproximatii a unor numere reale; 4. numere rationale aproximative sau ^n vigula otanta care servesc ca aproximatii a unor numere complexe. Cas-urile curente contin algoritmi pentru factorizarea ^n ireductibile din clasa 1, un pas important pentru factorizarea^n ireductibile din celelalte clase. Acest pas este di cil chiar si pentru polinoame care au 100 de termeni. Factorizarea ^n factori liniari ce invoca radicali poate realizata cu formule patratice, cubice si cuartice pentru polinoame de grad 2, 3 sau 4. Desi o asemenea factorizare nu este ^n general posibila pentru polinoamele a caror grad depaseste 4, exista algoritmi (bazati pe algoritmi din teoria grupurilor) pentru realizarea unei asemenea factorizari, atunci c^nd este posibil. a

Factorizare si descompunere Factorizarea este tipic mai di cila dec^t dea

Determinanti si inverse Determinantul unei matrici dense si patratice de


52

ordin n, poate avea n! termeni distincti, ecare contin^nd un produs de n a termeni. Calculul sau presupune un timp exponential. Un algoritm cu crestere exponentiala devine impracticabil pentru n undeva ^ntre 4 si 10. De exemplu,

a sarea determinantului pentru o matrice patratica cu n = 8 linii va necesita,^n cazul unor litere unice si distincte ^n matrice, circa 362000 caractere de a sat pe ecran, adica aproximativ 90 de pagini. Situatia se complica si mai mult daca intrarile matricei sunt complicate (de exemplu, polinoame ^n mai multe variabile). Adesea ^nsa intrarile sunt simple (multe valori nule sau elemente care se repeta, simetrii) astfel ^nc^t timpul de calcul poate semni cativ redus a pe baza unor algoritmi ce exploateaza structurile speciale. Astfel, cel mult 3 sau 4 intrari nenule pe linie fac posibil calculul determinantilor de ordin n = 30. Inversarea unei matrice este de cel putin n2 mai complicata dec^t un dea terminant, deoarece ecare intrare este o fractie redusa a unui determinant a unui minor a determinantului matricei. Eliminarea gaussiana este metoda comuna pentru calculul determinantilor sau a3 matricelor inverse, dar aceasta necesita un timp asimptotic proportional cu n pentru o matrice densa n n, astfel ^nc^t algoritmul poate aplicat a pentru matrici de ordin p^na la c^teva sute. a a plicita si nita de functii si operatori dintr-o clasa data. Inventarea unei noi functii presupune exprimarea ei ca o compunere nita de functii. Asemenea inventii nu sunt utile p^na c^nd nu se descopera identitati utile, proprietati a a calitative. Daca exista o solutie, se poate cere o forma ^nchisa a acesteia ^ntro clasa noua. Majoritatea Cas-urilor contin o functie care ^ncearca sa ofere multimea tuturor formele ^nchise la o ecuatie algebrica. Expresiile permise ^n ecuatii si solutii contin uzual doar functii elementare. Tehnicile primare utilizate sunt factorizarea si descompunerea. Spre deosebire de rutinele corespunzatoare din bibliotecile de metode numerice aproximative, rutinele Cas de rezolvare a ecuatiilor^ncearca sa gaseasca toate solutiile exacte sau cu anumita eroare, chiar si daca ecuatiile contin parametrii extra non-numerici. Succese impresionante au fost raportate pentru sisteme de p^na la 30 de ecuatii, ^nsa a imposibilitatea de rezolvare poate apare si la mai putin de 4 necunoscute.

Solutii ale ecuatiilor algebrice O forma ^nchisa este o compunere ex-

Serii de puteri Cas-urile suporta o varietate mare de serii de puteri: serii Taylor, serii Laurent (Taylor plus puteri ^ntregi negative), serii Puiseaux (Laurant plus puteri fractionare). Valori si vectori proprii In cazul unei matrice n n, A, ce contine intrari nenumerice, formarea polinomului caracteristic det(A ? I) este partea cea mai
usoara. In mod regretabil, polinomul de grad n ce rezulta este greu si uneori imposibil de factorizat sau descompus pe rationale, fac^nd astfel imposibila a determinarea unei forme ^nchise exacte la det(A ? I) = 0 pentru chiar si pentru valori mici ale lui n. Prezent a parametrilor nenumerici este cea care face factorizarea aproximativa inpracticabila. Astfel, valori proprii ^n forma^nchisa exacta sunt imposibile pentru n > 4. Pentru o matrice 4 4 cu 16 intrari sub forma de litere distincte, polinomul caracteristic se va scrie pe cel putin 5 linii, iar valorile proprii corespunzatoare pe cel putin 700 de pagini (o disketa de 1.44 53

Mb nu poate contine mai multe de 2 asemenea valori proprii). Generarea unor subexpresii comune face posibila stocarea unor asemenea formule astronomice. Substituirea ecarei valori ^n A ? I si rezolvarea sistemului singular pentru vectorul propriu corespunzator ampli ca si mai mult proportiile astronomice a rezultatelor. Algoritmi speciali sunt implementati de aceea ^n Cas pentru tratarea matricelor cu proprietati speciale.

Integrare inde nita Majoritatea Cas-urilor includ parti ale algoritmului


(Risch) ce trateaza integrantii ca mixturi arbitrare de extensii agebrice, logaritmice si exponentiale ale functiilor rationale si determina antiderivativele (integrale inde nite) din aceeasi clasa daca ele exista. Nici un Cas actual ^nsa nu permite mixturi arbitrare de toate trei tipurile. Decidabilitatea ^n algoritmul Risch se traduce ^n determinarea diverselor portiuni ale unui integrand sunt sau nu algebric independente, deziderat ce poate realizat prin su ciente simpli cari. In mod surprinzator simpli carea expresiilor de contin constante transcedentale este mult mai complicata dec^t simpli carea expresiilor ^n anua mite variabile. De exemplu, ee sau e + nu pot clasi cate ca ind rationale sau nerationale.

Integrare de nita Metodele numerice din literatura si bibliotecile de pro-

grame se concentreaza putin sau aproape deloc asupra metodelor e ciente si robuste pentru construirea tabelelor sau formulelor de aproximare R antiderivaa ?2 este ?1=x, dar 2 x?2dx 6= tivelor. De exemplu, o antiderivativa a lui x ?3 (?1=2) ? (?1=3) = ?5=6 deoarece integrantul este pozitiv pe interval. Ceea ce utilizatorii au nevoie este un pachet de integrare de nita care determina automat singularitatile, alege drumurile de contur, calculeaza resturi etc.

Ecuatii diferentiale ordinare Numeroase Cas includ functii care ^ncearca determinarea solutiilor ^n forme ^nchise a ecuatiilor diferentiale. Pentru ecuatiile de ordin^nt^i, tehnica uzuala este de a ^ncerca asemanarea ecuatiei cu a una dintre formele clasice precum ecuatiile liniare, separabile, omogene, exacte, Bernoulli etc. si de a aplica formulele corespunzatoare. Virtual se pot rezolva astfel toate problemele care apar ^n colectiile enciclopedice clasice. Dezamagirea creste rapid cu ordinul ecuatiei. In teorie, ecuatiile liniare cu coe cient i liniari sunt triviale. O solutie exacta presupune rezolvarea exacta unei ecuatii polinomiale caracteristice, ceea ce este ^n general imposibil pentru n > 4. Solutia poate complicata chiar si pentru n = 3 si n = 4 mai ales daca ecuatia implica parametrii nenumerici si termeni neomogeni netriviali. In practica solutiile sub forma ^nchisa sunt rare daca se depaseste ordinul doi. Exista un numar mic de tehnici aplicabile la ecuatii neliniare de ordin ^nalt, precum recunoasterea exactitatii sau reducerii succesive la ecuatii de ordin mai mic daca anumiti termeni lipsesc. Exista de asemenea putine tehnici aplicabile la sisteme de ecuatii diferentiale. Transformarea Laplace este aplicabila sistemelor liniare, ^n particular ^n cazul coe cient ilor constanti. O solutie exacta
54

presupune determinarea unei structurii proprii (valori si vectori proprii), ceea ce este di cil de realizat pentru sisteme av^nd un grad total mai mare dec^t 3 a a sau 4. Pachetele cele mai bune tind sa-si realizeze sarcinile mai bine dec^t oamenii, a dar speranta ca o solutie ^n forma ^nchisa sa existe descreste rapid cu ordinul, numarul de ecuatii si neliniaritatea. Din fericire se pot obtine solutii sub forma de serii in nite sau trunchiate. Tehnicile ce se pot aplica includ serii Taylor, iteratii Picard sau serii de perturbatii. sa determine solutii ^n forma ^nchisa a ecuatiilor lor cu derivate partiale. Din pacate, solutii ^n forma ^nchisa nu exista ^n mod uzual chiar si pentru aplicatii simple. De exemplu, consideram ecuatia Laplace bidimensionala pe un patrat, cu valori de margine 0 de-a lungul a trei laturi si 1 de-a lungul celei de a patra. Solutia acceptata este o serie Fourier doubla, dar nu este cunoscuta o forma ^nchisa de reprezentare elementara. Cas-urile nu ofera facilitati pentru deteminarea unei asemenea reprezentari a solutiei. Cas-ul poate ^nsa contribui la determinarea unei forme ^nchise a solutiei. De exemplu, un Cas este adesea folosit pentru a veri ca solutiile ^n forma-^nchisa a ecuatiilor cu derivate partiale, pentru a categorisi solutiile veri cate si pentru a compara solutiile veri cate din punct de vedere al echivalentei. Cas are succes ^nsa ^n determinarea solutiilor ecuatiilor cu derivate partiale sub forma de serii trunchiate si ca pas de preprocesare^n aproximarea numerica a solutiilor.
Ca are o serie de limitari fundamentale precum: nonexistenta frecventa a solutiilor ^n forma ^nchisa, cresterea rapida inerenta a timpului de calcul si a spatiului pentru numeroase familii de probleme, cantitatea limitata a iesirii pe care utilizatorii sunt capabili sa le digere. Exista ^nca algoritmi importanti de baza care lipsesc din Cas-uri, de exemplu algoritmi optimi pentru simpli carea inegalitatilor polinomiale. Exista de asemenea numeroase arii ale matematicii aplicate avansate care sunt slab reprezentate ^n Cas-uri. De exemplu, ^n prima parte a acestui secol, matematicienii si zicienii au construit o teorie algebrica pentru analiza: teoria spatiilor Hilbert si Banach. Faptul ca aceasta teorie este algebrica (si geometrica) implica faptul ca poate usor implementata ^ntr-un Cas, dar exista o problema de convergenta.

Ecuatii cu derivate partiale Noi venitii ^n Ca adesea spera ca un Cas

Limitari

mentarii aritmeticii tuturor numerelor. Aici trebuie deosebita realizarea cu 55

Aritmetica exacta Aritmetica numerelor mari Puterea unui Cas consta ^n e cienta imple-

4.7 Teme si puncte critice ale Ca

exactitate marginita care poate posibila prin alocarea c^torva mii de octeti a per numar (^n limbajul PL/1, de exemplu) si realizarea unei exactitati anumite care depinde de dimensiunea memoriei. Se utilizeaza astfel structurile de date dinamice pentru implementarea numerelor mari sunt schimbate. Se poate utiliza forma polinomiala de scriere a numerelor ^ntr-o baza. Problema ocuparii dinamice a memoriei este astfel centrala ^n Cas spre deosebire de sistemele numerice ^n care aceasta problema este trecuta ^n fundal. Pentru recunoasterea numerelor reale se utilizeaza intervale cu capete rationale. Deoarece intervalele pot tratate prin aritmetica binara rationala. O problema principala este multiplicarea; algoritmii curent i sunt departe de a optimi. abila pe un inel comutativ se realizeaza ^n analogie cu aritmetica numerelor mari. Pentru multiplicare rapida exista de exemplu algoritmul FFT (Fast Fourier Transform). Operatiile ce ridica probleme sunt^mpartirea si factorizarea ^n polinoame prime. In practica exista o serie de polinoame care au coe cient i nuli, astfel ^nc^t reprezentarea acestora se face prin setul (i; ai ); ai 6= 0; algoa ritmi speciali sunt construiti pentru tratarea acestor cazuri. Pentru polinoamele multivariabile apar doua probleme suplimentare: recursivitatea (luat ca polinom ^ntr-o anumita variabila, coe cient ii sunt polinoame de mai multe variabile) si distributivitatea (sume de monoame, perechi de coe cienti pentru o baza). Recursivitatea implica de exemplu factorizare, distributivitatea implica de exemplu alegerea exibila a ordonarii termenilor (baze Grobner). P Datorita naturii in nite a seriilor de tip 1 ai xi, ele nu pot reprezentate i=0 cu exceptia acelor cazuri ^n care coe cient ii pot dati formal sau ^ntr-o forma recursiva. Intr-un Cas aceste informatii sunt reprezentate printr-o lista nita de coe cienti de start si o functie de generare a coe cientilor urmatori (tehnica numita lazy-evaluation, evaluare lenesa). Probleme speciale provoaca inversarea seriilor. zorului comun a doua numere. Numerosi algoritmi din Ca sunt in uentati ^n e cienta de algoritmul lui Euclid ce rezolva aceasta problema. De aceea este de interes major marirea vitezei algoritmului. Astfel numerele sunt tratate distinct functie de marimea lor. De exemplu se poate utiliza o varianta binara a algoritmului care foloseste doar comparari, adunari, scaderi si deplasari, adica multiplicari si divizari cu puteri ale lui 2, ^n cazul numerelor mici. O alta posibilitate este utilizarea unor registrii de dimensiuni mari (de domeniul miilor de biti) si utilizarea unor operatii de baza.

Polinoame, functii rationale si serii Calculul cu polinoame ^ntr-o vari-

Algoritmi euclidieni si ^mpartiri cu rest Se pune problema a arii divi-

Alte puncte critice din aritmetica exacta sunt urmatoarele: calculul modulo, clase de resturi, descompunerea ^n factori primi a numerelor mari, numere p-adice, corpuri marginite, algoritmi pentru teoria codurilor si criptogra e.
56

Pe l^nga aritmetica exacta si alte probleme de interes major intern Cas prea cum urmatoarele: algoritmi pentru polinoame si serii (divizare, factorizare, baze Grobner), teoria numerelor (numere prime, factorizarea numerelor naturale, corpuri de functii, grupuri Galois, puncte rationale ale curbelor eliptice si diverse varietati), algebra comutativa si geometrie algebrica (ideale de polinoame, singularitatile unei varietati, geometrie algebrica reala), teoria grupurilor (grupuri de permutari si matrice, grupuri nite), sumare si integrare (^nsumare de nita, integrare simbolica), rezolvarea simbolica a ecuatiilor diferentiale (sisteme liniare, ecuatii cu derivate partiale), teoria complexitatii, logica, prezentari stiinti ce si tipuri de date, memorie, standardizare,

Alte probleme di cile

4.8 Tipuri de date ^n Ca


Exista un punct de vedere conform caruia matematicianul crede ^n existenta unui numar in nit de ^ntregi, iar designerul de calculator implementeaza doar un numar nit al lor (?2n la 2n ? 1). De aceea nu putem utiliza direct ^ntregii de pe calculator pentru a reprezenta ^ntregii matematici, dar trebuie sa scriem programe pentru a reprezenta ^ntregi arbitrari de mari prin mai multi ^ntregi pe calculator. Exista doua moduri de a efectua aceasta reprezentare: putem alege o reprezentare prin puteri (o generalizare a notatiei zecimale P conventionale)^n care n este reprezentat ca k=0 ni B i unde ?B=2 < ni B=2 i si B este reprezentabil ^ntr-un singur cuv^nt pe calculator, sau putem alege a o reprezentare modulara, ^n care n este reprezentat prin valoarea sa modulo un numar su cient de mare (dar reprezentabil pe un cuv^nt pe calculator) a de numere prime. Forma modulara este mult mai rapida la operatii aritmetice (adunare, scadere, multiplicare), dar mult mai lenta la comparatie sau la decizia daca un numar divide pe altul. De aceea alegerea reprezentarii in uenteaza algoritmul ce va ales. In mod similar, numerele rationale prezinta c^teva di cultati conceptuale, a desi o mare ingenuozitate se asteapta pentru a minimiza actualul timp calculator pentru manipularea lor. Numerele rationale introduc o idee importanta { reprezentarea canonica. Spunem ca un domeniu are reprezentare canonica daca doua elemente sunt egale daca si numai daca au aceeasi reprezentare. Reprezentarile canonice sunt una dintre cele mai importante tehnici ^n Ca si un mare efort s-a depus si se depune pentru a descoperi formele canonice a unor anumite clase de expresii. Pentru a atinge reprezentarea canonica pentru numere rationale trebuie sa ne asiguram ca au termenii cei mai mici si numitorul este pozitiv. Numerele modulo p sunt importante ^n Ca nu numai ca obiecte matematice ci si ca modele nite a ^ntregilor si multi algoritmi cheie din Ca se bazeaza pe aceste numere. 57

Numere

Polinoame
Polinoamele univariate nu aduc probleme teoretice mari c^nd este vorba de a adunare si ^nmultire. Exista totusi un interes ^n ^ntrebarea cum se pot multiplica e cient. O problema este raritatea (sparsitatea). Un polinom de grad n este rar daca majoritatea coe cient ilor ^ntre 0 si n sunt nuli (de nitia nu este riguroasa pentru ca nu se speci ca c^te elemente nule trebuie sa avem pentru ca polinomul a sa e rar). Se observa ca raritatea este conservata prin adunare si scadere, si ^n anumita masura si prin ^nmultire, pe c^nd ^mpartirea polinoamelor distruge a total raritatea lor (de exemplu (xn ? 1)=(x ? 1)). O ^ntrebare interesanta, chiar greu de formulat precis, este aceea daca procesul de determinare a celui mai mare divizor comun prezerva raritatea. O schema de reprezentare se zice ca este rara daca pro ta de raritatea polinoamelor ^n stocare, astfel ^nc^t un polinoam rar sa ocupe mai putin spatiu a dec^t unul dens de acelasi grad. O reprezentare densa presupune de exemplu a pentru un polinom de grad n, o lista de n+1 coe cienti, pe c^nd o reprezentare a rara presupune o lista de1000 perechi ordonate (coe cient nenul, exponent corespunzator) astfel ^nc^t x + 1 va reprezentat dens prin (1; 0; : : :; 0; 1) a cu 1001 termeni, dar ((1; 1000); (1; 0)) ^n reprezentare rara. Presupun^nd a existenta unui algoritm naiv de multiplicare a polinoamelor aplicat la doua polinoame de grad n cu m coe cienti nenuli, ^n reprezentarea densa vor necesare O((n + 1)2 ) operatii, pe c^nd cel rar va necesita O(m2 logm) operatii, a termenul logaritmic provenind de la cerinta de sortare a iesirii ^n ordinea descrescatoare a gradului. Majoritatea Cas actuale utilizeaza reprezentari rare a polinoamelor nu numai pentru ca permit calcule de tip (x100000 ? 1)(x10000 +1), care desi este trivial, ^n reprezentarea densa timpul de calcul va foarte mare si nejusti cat, dar si din ratiunea ca practic toate polinoamele multivariate care apar ^n probleme Ca sunt rare (un polinom de grad 5 ^n 5 variabile poate avea p^na la 7776 termeni). a In calcularea c^tului a doua polinoame trebuie speci cat c^mpul de a a coe cient i. Daca2 nu este speci cat, de nitia divizarii este vaga. De exemplu ^n Z X] ce este (X ? 1)=(2X ? 2)? Un polinom multivariat poate considerat un polinom univariat a carui coe cient i sunt polinoame multivariate^ntr-un numar mai mic cu unu de variabile. De aceea se pot reduce problemele ^n polinoame multivariate la probleme ^n polinoame univariate. C^nd este vorba de ^mpartire, ordinea ^n care a se aleg extensiile univariate este foarte importanta. De exemplu, se considera (X + 2Y )=(X + Y ) care este 1 rest Y in Z Y ] X], dar 2 rest ?X ^n Z X] Y ]. Cheia ^n rezolvarea acestei probleme pare a calculul bazelor Grobner (Buchberger 1979, 1983) pentru care o reprezentare multivariata este esent iala. Functii rationale conduc la putine probleme ^n comparatie cu polinoamele, deoarece sunt formate din polinoame^n acelasi mod ^n care numerele rationale sunt formate din ^ntregi. Pentru a mentine o functie rationala ^n forma canonica, este necesar sa e determinat cel mai mare divizor comun a polinoamelor sale, plus coe cientul dominant al numitorului sa e pozitiv. 58

In aceasta categorie se includ si numerele algebrice. Pot cauza tot felul de probleme, de la cele pur matematice la cele legate de programare. p dintre ele p p Una 2 este di cultatea asigurarii reprezentarilor canonice. Si 6 si p 3 reprezinta p aceeasi valoare; acelasi lucru putem spune despre 2 ? 1 si 1=( 2 + 1). Exista o varietate de solutii la problema reprezentarii. De exemplu, se poate cere ca numitorul sa e liber de orice expresie matematica (prin multiplicarea cu conjugatul numitorului) si sa nu e o expresie nealgebrica care poate anulata. Apar adesea ^n formularea problemelor Ca, mai ales pentru ca ecuatiile liniare sunt formulate ^n termenii lor. Reprezentarea cea mai simpla a unei matrice este o matrice bidimensionala de coe cient i (adesea reprezentat ca vector de vectori). Aceste reprezentari obisnuite nu sunt indicate pentru matrice simetrice sau tridiagonale. Multe matrice sunt rare (adica majoritatea elementelor sunt nule) din motive precum faptul ca matricele pot derivate din grafuri. O reprezentare comuna pentru matricele rare este vectorul de linii,^n care ecare linie este o lista de perechi (pozitia pe coloana, elementul apartinator liniei si coloanei). Algoritmii pentru rezolvarea ecuatiilor liniare se ^mpart ^n doua categorii, depinz^nd daca sistemul este rar sau nu. In cazul dens, majoritatea algorita milor sunt bazati pe eliminarea gaussiana. Principala problema ^n Cn este stabilitatea numerica a procesului (acuratet ea rezultatelor intermediare). In Ca rezultatele sunt ^ntotdeauna exacte si problema principala este marimea rezultatelor intermediare. In cazul rar, eliminarea gaussiana este dezastruos ine cienta si metodele alese se bazeaza pe regula Cramer de expansiune a minorilor.

Functii algebrice

Matrice

Serii de puteri

In stiinte si mai ales^n matematica aplicata se trateaza solutii care nu pot calculate precis (de exemplu solutia unei ecuatii diferentiale). Unealta traditionala de estimare a acestuia este solutia sub forma de serii. Asemenea serii pot extrem de di cil de dezvoltat manual, astfel^nc^t chiar primele Cas au^ncercat a sa mecanicizeze acest proces. Abordarea traditionala pentru reprezentarea seriilor de puteri este aceea de a le trunchia la un anumit punct si de a le privi ca polinoame. Di cultatea principala este aceea ca sistemele traditionale, cer utilizatorului sa speci ce gradul cu care ei doresc sa lucreze,^n avans, si este putin probabil ca utilizatorul sa priveasca rezultatul calculului si sa ceara un alt termen, fapt ce P presupune ar refacerea tuturor calculelor. Fie de exemplu functia f(x) = 1 + 1p ar xr si r=2 p se considera f(x) ? 1. Aceasta se poate exprima prin pa2 x+a3 =(2 a2)x2 + p (4a2a4 ? a2)=(8 a3)x3 + . Daca trunchiem f(x) la termenul anxn se poate 3 2 59

deduce expresia lui f(x) ? 1 p^na la termenul xn?1 pentru urmatorul ind a necesar an+1. Aceasta presupune o reducere ^n acuratetea rezultatului. Tehnica Norman presupune reprezentarea seriilor de puteri prin functiile lor generatoare, d^ndu-se astfel impresia unui calcul cu ^ntreaga arie si nu cu una a trunchiata. In cazul adunarii g(x) + h(x) se genereaza fi ca gi + hi . Scaderea si ^nmultirea sunt similare. La diviziune ^nsa, este su cient a rezolva problema gasirii reciprocei seriei de la numitor si multiplicarea acesteia cu seria de la P sa numarator. Presupunem ca f(x) = 1 fi xi si vremPn calculam g = 1=f. i=0 Presupunem ca f0 6= 0 si cum fg = 1 avem f0g0 = 1 si i=0 gi fn?i = 0; (n P? 0). Atunci g0 = 1=f0 si gn = ? in=01 gi fn?i =f0, o de nitie buna pentru gn ^n termenii lui f. Relatii similare pot gasite pentru toate functiile de nite prin ecuatii diferentiale.
Ca este diferita de algebra pura ^n special pentru ca doreste obtinerea unui rezultat mai mult dec^t cunostiinta ca un rezultat exista. In matematica cona structiva ^ntr-o demonstratie ecare pas consta ^n operatii pur constructive. Ca este limitata la demonstratii neconstructive a algoritmilor constructivi.

Algebra constructiva

4.9 Tehnologii software


Cele trei tehnologii software fundamentale ^n software-ul matematic sunt: potrivirea sabloanelor bazata pe reguli (rule-based pattern matching), programarea procedurala, tehnologii ale bazelor de date. Prima tehnologie este ^n mod special importanta pentru a permite utilizatorilor sa faca extensii la sistem pentru probleme particulare rapid si usor.

4.10 Evaluatorul { componenta fundamentala


Evaluarea expresiilor si programelor ^ntr-un Cas este centrala pentru orice sistem, dar ^n mod inevitabil nu ofera satisfactie completa. In termeni grosieri, evaluarea este o functie de la un obiect (intrare) si un context sau mediu speci c la un alt obiect care este mai simplu, mai speci c (iesire). De exemplu, 2 + 3 evaluat este 5. Intr-un Cas, evaluarea implica maparea variabilelor sau numerelor la valorile lor si maparea operatorilor la actiunile lor. De exemplu, ^ntr-un context ^n care x este 3, y este utilizat ca variabila libera, si z este a + 2, un Cas tipic va evalua x + y + z + 1 prin y + a + 5. In cazuri simple acest model este intuitiv pentru utilizator, ^nsa un designer de sistem trebuie sa trateze cazuri care nu sunt asa de simple si intuitive. C^teodata valorile nu sunt singurele a atribute relevante ale numelor: pot declaratii de tip sau informatii auxiliare. 60

De exemplu rezultatul evaluarii sin2 x 1 poate adevarat daca x este de tip real si poate falsa daca x este complex. Constructorii Cas, prin traditie sau ca intentie speci ca impun doua criterii sistemelor construite pentru utilizare de catre o audienta generala: (a) notatia si semantica unui Cas trebuie sa corespunda unei utilizarii intuitive comune ^n matematica; (b) notatia si semantica ^n Cas trebuie sa e corespunzatoare pentru programare algoritmica si pentru descrierea de noi obiecte matematice. Semantica si notatiile sunt temele centrale ^n problema evaluarii. Ele sunt adesea ambigue si dependente de context. Un cititor ,,automat" de literatura matematica trebuie sa acumuleze un context substantial altfel va suferi abuzuri de notatie. Notiunea de cea mai simpla forma a unei expresii este de asemenea ambigua. Limbajul de programare trebuie sa ofere o punte pentru utilizatorul Cas pentru a trata notatiile si semantica programarii la fel ca un matematician. Aceasta^nseamna includerea unor constructori care arata ca cei matematici dar au ^nteles diferit. De exemplu x = x + 1 poate o operatie de asignare sau o egalitate absurda. Limbajul de programare trebuie sa faca distinctie ^ntre forme ale expresiilor. De exemplu, limbajul de programare trebuie sa faca distinctia ^ntre expresii aparent egale, dar nu identice precum 2x si x + x. Intr-un Cas tipic, programul intern de evaluare ( e eval) joaca un rol cheie ^n controlarea comportarii sistemului. Desi acest program poate sa nu e disponibil utilizatorului pentru apel, este implicit ^n tot ce se ^nt^mpla. a Eval preia intrarea ce reprezinta comanda utilizatorului, directivele program si alte instructiuni si le combina cu starea sistemului pentru a oferi un rezultat, c^teodata schimb^nd si starea sistemului. Cu alte cuvinte, eval sta ^ntre a a parserul de intrari si rutinele operationale pentru manipulare matematica. Tehnicile procedurale traditionale arata ca mecanismele de evaluare Lisp, asemanarea ne ind accidentala. Exista o similaritate mare ^ntre reprezentarea expresiilor aritmetice sub forma de arbori si un program Lisp pentru evaluarea acelei expresii (daca expresia este un nod atomic indivizibil, se aplica regulile de evaluare a atomilor, precum: numerele ram^n aceleasi, eventual se fac cona versii de tip, constantele se ^nlocuiesc cu valori, simbolurile sunt ^nlocuite cu valori, daca ele exista; daca expresia este un obiect compus de tip F(a; b; c) se evalueaza argumentele, apoi se aplica operatorul). O asemenea tehnica de evaluare are unele de cient e. De exemplu subst(x = a; x ? x) se evalueaza x ? x ^naintea substitutiei, rezultatul ind 0; acest lucru nu este corect daca a = 1. O varianta alternativa este evaluarea ^ntr-o operatie ^n doua faze: prima opereaza de sus ^n jos, oferind un context si un tip asteptat pentru un rezultat, pentru ecare operatie, si a doua faza, opereaza de jos ^n sus, calcul^nd valori. a Evaluarea pe baza de reguli este o alta tehnica plauzibila, mai putin utilizata ^n Cas-uri. O alta tehnica este bazata pe o abordare orientata obiect, ^n care ecare obiect este asociat cu un program care evalueaza obiectele de acel tip. O problema sensibila ^n evaluare este determinarea punctelor xe sau asa numite in nite. Expresia sau sistemul a ajuns la o stare stabila sau la un punct x, daca ^ncercari ulterioare de simpli care a expresiei nu vor mai avea efect (o re-evaluare nu schimba nimic). 61

4.11 Studiu de caz: calculul limitelor


Problema calculului de limite apartine anumitor clase care sunt cunoscute a nu rezolvabile. Desi majoritatea Cas actuale sunt foarte puternice si pot rezolva probleme complicate precum factorizarea polinoamelor pe c^mpuri algebrice, a ele sunt surprinzator de slabe c^nd trebuie sa rezolve probleme aparent simple a precum calcularea unei limite. Astfel multe sisteme nu au chiar expertiza unui student ^n ale analizei. Exemple de probleme la calculul limitelor: Reduce 3.6 nu poate evalua limita (care este zero):
Axiom 2.0 returneaza failed la urmatoarea limita, desi aceasta exista si este 1. Maple Release 3 returneaza la urmatoarea limita
>limit(exp(x+exp(x))-exp(x), x=%plusInfinity) 1: limit(x"7/exp(x), x, infinity);

rezultatul signum (1/2 -arcsin(x)-arccos(x))1. Cum valoarea din paranteza este 0, fapt pe care Maple nu-l sesizeaza, limita 0 1 este nede nita. Primul program de calcul a limitelor a fost prezentat ^n 1966. Algoritmul se baza pe un numar de euristici pentru a aplica ,,bagajul de trucuri" ale matematicianului clasic, pentru a calcula limite, precum faimoasa regula l'Hospital. Ideea e aceea de a face calculatorul sa se comporte ca un student ^n analiza. Programe similare au fost prezentate si ^n anii care au urmat, iar anumite Cas-uri au algoritmi bazati pe ideile lor. Urmatoarea generatie de algoritmi de calcul a limitelor nu s-a mai bazat pe euristica, ci pe expansiuni ^n serii. Problema comportarii la limita a functiilor exp-log nu este ^nca rezolvabila cu ajutorul Cas-urilor, algoritmii corespunzatori ind ^nca ^n faza de concepere. Se poate g^ndi ca problema determinarii comportarii la limita a unei functii a este o problema simpla, deoarece se poate urmari gra cul functiei pentru a recunoaste aproximativ limita. Trasarea gra cului unei functii presupune evaluarea functiei ^n puncte selectate ^n vecinatatea punctului limita. Consideram de exemplu limita lim ln ln ln1ln 1=x?1 x!0+ x Valori calculate numeric, de exemplu cu ajutorul Maple arata o descrestere puternica a valorilor spre zero. In Mathematica punctul de start poate speci cat cu ajutorul optiunii scale: Rezultatul este 1:40806 10?12. Si totusi limita este 1. Cresterea spre in nit e 0:4 10?1656520, o valoare prea mica pentru a ^ncepe c^nd x < e?ee a sesizabila pe gra cul functiei. Astfel calculul numeric al limitelor nu este sigur. O alta problema ^n abordarea numerica a limitelor este posibilitatea ca evaluarea numerica a functiei sa e imposibila datorita depasirilor, sau, pentru 62
In 1]:=<<NumericalMath/NLimit.m In 2]:=Nlimit 1/x^(Log Log Log Log 1/x]]]]-1),x->0, Scale ->1/100, Terms ->20]

> limit((arccos(x + h) - arccos(x))/h, h=0, right);

domeniul ^n care este evaluata, functia poate prost conditionata, iar aproximarea numerica ^n virgula otanta sa sufere de rotunjiri. De exemplu, e
x!1

lim (erf(x ? e?ex ) ? erf(x))eex ex2

a carei limita este ?2= ; functia nu poate evaluata pentru x > 22 utiliz^nd a Maple datorita limitelor impuse marimii exponentului unui numar ^n virgula otanta (pe masini cu cuv^nt de 32-biti), iar pentru x = 22 o precizie de a 109 cifre este necesara pentru a depasi erorile de rotunjire, ceea ce depaseste capacitatile de acuratete a Maple. In plus (erf(x ? e?ex ) ? erf(x)) este zero pentru x > x0 unde x0 este radacina lui ex +lnx ? dln10 unde d este acuratetea aritmeticii ^n virgula otanta, adica d =Digits ^n Maple.

4.12 Relatia cu sistemele expert


Din punct de vedere cognitiv, scopul Ca este exprimarea cunostiintelor algebrice^ntr-o anumita maniera^nc^t aceste cunostiinte sa poata sa e manipulate a si prelucrate. Cunostiintele pot : teoretice, tabelare, de speci care, algoritmice, deductive sau strategice. Cunostiintele teoretice pot exprimate prin formule matematice si prin propozitii. Cas trebuie sa permita structuri de date si algoritmi corespunzatori pentru speci care si veri care. Cunostiintele tabelare sunt un alt punct cheie ^n Cas-uri. Tabelele se ^nt^lnesc de exemplu la operatiile cu functii speciale sau a polinoame ortogonale. Prin cunostiintele de speci care se ^ntelege descrierea formala a unor structuri abstracte de date. Ca exemplu se considera semnul operatorilor si relatiile dintre structurile de date. Din pacate Cas-urile actuale nu permit dec^t tipuri de date prede nite. Cunostiintele algoritmice a constituie nucleul unui Cas. Un algoritm este realizat prin proceduri si programe. Prin aceasta sunt prelucrate cunostiinte teoretice si de speci care. Cunostiintele deductive sunt de nite pentru a realiza o serie de sarcini (formalizarea cunostiintelor teoretice) precum si pentru a c^stiga regulile cheie a a unor noi teme (exemplu: calcul logic). Cunostiintele strategice ne ^nsotesc ^n multe programe. De exemplu, pentru factorizarea unui numar ^ntreg este necesara ^n prealabil o procedura de divizare. Cunostiintele deductive ^mpreuna cu cele teoretice si cele de speci care conduc la ideea de sistem expert. Rezolvarea unei probleme poate realizata ^ntr-un asemenea sistem pe baza unui arbore de decizie. Un Cas nu este un sistem expert. Cele doua parti ale unui sistem expert sunt baza de cunostiinte dintr-un domeniu de cunostiinte si o masina de inferenta, care detine cunostiinte deductive si strategice cu in uente euristice pentru rezolvarea problemelor. Cele doua parti sunt tratate rudimentar ^n Cas-urile actuale. Un tip abstract de date consta ^ntr-o speci care a operatorilor sai c^t si a a axiomelor (ecuatii) care sunt descrise cu ajutorul operatorilor (exemplu: 63

notiunea de inel). Utilizatorului unui Cas trebuie sa i se ofere posibilitatea de a exprima ^n mod ,,natural" o formula. Pentru aceasta Cas are un mecanism de inferenta de tip pentru a stabili functiile apelate. De exemplu 3=7 + x este interpretat ca Polynomial(Fraction (Integer)).

4.13 Relatia cu rezolvitoarele de probleme


Mediile de rezolvare a problemelor (Pse, Problem Solving Environments) ofera o abordare noua promitatoare ^n rezolvarea problemelor de modelare ^n inginerie si stiinta. Asemenea medii ofera un acces simplu ^n integrarea calculului simbolic si numeric si sporesc uneltele disponibile modelatorilor. Pe de alta parte, se plaseaza astfel noi cerinte Cas-urilor. Este important sa existe totusi un sistem adevarat al h^rtiei si creionului. a Asemenea sisteme nu presupun ca utilizatorul doreste sa calculeze ceva, ci ca utilizatorul doreste sa rationeze asupra unei probleme, si posibil mai t^rziu, sa a calculeze ceva numeric sau simbolic. Atitudinea ,,Cunosc regula lantului si o voi utiliza daca pot" trebuie ^nlocuita cu un sistem ^n care poate aplica regula ^n modul standard, sau^n mod invers, si care are unelte pentru ajutor^n decizia cea mai adecvata. Desigur, sistemele de rationare euristice sunt critice. Cas-urile trebuie sa e capabile sa scrie ambele tipuri de programe, numerice si simbolice, ^n propriul lor limbaj. In acest caz este relativ simplu de translatat asemenea programe ^n alte limbaje. In anumit sens, acest lucru poate realizat^n toate Cas-urile, dar utilitarele disponibile nu sunt de ajutor. Partile geometrice a problemelor de modelare sunt ^n mod tipic cele mai di cile si mai costisitoare, astfel ^nc^t Pse trebuie sa contina, sau sa aibe acces a la un modelator geometric. Astfel, cel putin pentru probleme simple, trebuie sa e posibil sa se raspunda la ^ntrebari simple precum ,,este o regiune convexa?" Documentatia^n-linie ar trebui sa permita utilizatorului sa urmareasca orice termen comun utilizat ^n textele matematice si sa a e toate informatiile relevante din sistem referitor la acel termen. Aceasta nu ^nseamna o lista a comenzilor disponibile. Anumite lucruri sunt realizate cu atentie ^n orice Cas: algoritmii simbolici de baza, ^n particular pentru polinoame multivariabile, integrale, ecuatii diferentiale ordinare, interfete, a sare ecuatii, gra ca si intercomunicare ^ntre programe.

4.14 Intercomunicare
OpenMath este un stardard pentru reprezentarea obiectelor matematice cu semantica lor, ce permite schimbul ^ntre programele calculator, stocarea ^n baze de date, sau publicarea pe Web. Daca designerii initiali ai acestui standard sunt dezvoltatori de Cas, interesul a fost st^rnit si ^n alte arii de calcul a stiinti c si numerosilor editori de documente electronice cu un continut matem-

64

atic semni cativ. Obiectele matematice codate ^n OpenMath pot a sate cu un browser, schimbate ^ntre sisteme software, selectate si copiate ^n contexte diferite, utilizate pentru a crea documente interactive. Implementarea Esprit permite lansarea de cereri simultane unor sisteme Cas variate pentru a mari sansele de obtinere a unei solutii. Un manager de ferestre poate monotoriza care dintre programe returneaza raspunsul primul. Corectitudinea solutiei se veri ca prin cercetarea raspunsurilor de la multiple medii. Versiunea construita de PolyMath OpenMath Dev team, Java OpenMath Library contine un set de pachete care implementeaza operatiile standard de baza OpenMath, si abordeaza tematicile majore ^n construct ia de aplicatii OpenMath robuste si exibile. Aceasta implementare a OpenMath necesita un singur set de interfete si implementari de baza pentru a asigura un set standard de obiecte care pot transmise ^ntre aplicatii. Aplicatiile care utilizeaza OpenMath sunt legate numai la un numar mic de biblioteci. Aceasta abordare a presupus descompunerea ^n doua parti: construirea unui nucleu a pachetului de limbaj OpenMath, ca.sfu.cecm.openmath.lang care este necesar tuturor aplicatiilor pentru compatibilitate cu alte aplicatii Java OpenMath, si pe de alta parte construirea altor pachete care extind functionalitatea nucleului, pentru a usura utilizarea acestuia.

4.15 Sisteme cu scop general


Axiom

Este un sistem din generatia a treia ce permite tipuri de date abstracte, parametrizate, orientate obiect, programare polimorfa si algoritmi algebrici. Se bazeaza pe CommonLisp si ruleaza pe statii IBM Risc System/6000 si IBM cu sistem de operare AIX. Axiom are un interpretor, dar si un compilator. Interpretorul permite urmarirea tipurilor de date, alegerea unor functii adecvate si realizarea automata a transformarilor, iar compilatorul este puternic tipizat. Un program odata compilat sta la dispozitia utilizatorului precum o componenta de sistem. Detine o biblioteca matematica cu aproximativ 600 tipuri de date si 1700 nume de functii care pot ^ncarcate de mai multe ori. Codul sursa al algoritmilor matematici si tipurilor de date stau la dispozitia utilizatorului. Un hiperdocument multitext pe sistem de ferestre constituie tutorialul cu numeroase exemple, descrierea comenzilor si sistem de cautare. Iesiri posibile sunt ^n: Fortran, Script, LaTex. Gra ca este realizata peste X-Windows compatibil PostScript. Copyright-ul este atribuit SoftwareHaus NAG. In Axiom exista tipuri abstracte de date (categories, ^n anumit sens asemanatoare categoriilor matematice), tipuri concrete de date sau structuri de calcul (domains) si pachete de functii (packages). Interpretorul ^ncearca prin urmarirea automata de tip sa permita eliberarea datelor de tip. Organizarea memoriei de lucru depinde de datele utilizatorilor, de protocoalele de sesiune, de necesitatile calculelor invocate. Biblioteca matematica contine de 65

{ un Cas cu tipuri abstracte de date

exemplu numere ^ntregi de marime nelimitata, aritmetica rationala, numere rationale ^n baze diferite, numere modulo, corpuri nite realizate ca inele de clase de resturi polinomiale, numere cardinale, rezolvarea ecuatiilor polinomiale de grad mai mic dec^t 5 prin radicali, factorizare de polinoame pe corpuri a nite, determinanti, permutari, rezolvari de sisteme liniare, baze ortogonale, integrale inde nite a functiilor elementare, ^nsumare inde nita, grupuri de permutari, diferentiere etc. Facilitatile gra ce permit trasarea de functii, curbe parametrizate, curbe de nite implicit, din spatiul bi- si tri-dimensional. Prima versiune a aparut ^n toamna anului 1992. Versiunea 2.0 din 1993 are o gra ca ^mbunatatita, trateaza ecuatii diferentiale si are un hiperdocument largit. Detalii suplimentare sunt oferite ^n capitolul urmator.
Derive

numai 64K memorie. Derive versiunea 1 a aparut ^n noiembrie 1988, versiunea 2 ^n noiembrie 1990, iar ^n vara lui 1992, versiunea 2.5. Circa 10000 de licente au fost v^ndute a p^na ^n 1993 ^n Europa. In Austria ministerul ^nvatam^ntului a cumparat a a licenta Derive ^n toamna anului 1991 pentru a-l introduce ^n ^nvatam^ntul a gimnazial. Produsul a fost conceput ca o ,,reteta de amestecare electronica": utilizatorul poate scrie o serie de termeni, sa-i schimbe, stearga, diferentieze, integra, plota etc. In Derive se poate si programa. Se pot de ni functii, iteratii, recursii, are instructiuni conditionale si operatori logici. Functiile de biblioteca includ functiile matematice elementare, functii statistice si de matematica ^n nante. Este usor de utilizat ^n calculele vectoriale si matriceale (operatii elementare: adunare, scadere, produs scalar, determinanti, transpusa, inversa) si ^n gra ca bi- si tri-dimensionala pentru curbe parametrice ^n coordonate carteziene sau polare. In versiunea 2 se pot rezolva sisteme de ecuatii neliniare, diferentiere si integrare numerica, calcul diferential si integrale, ecuatii recursive, integrale eliptice, poligoane ortogonale. Fereastra principala poate ^mpartita ^n mai multe ferestre de tip algebra, gra ca 2D si 3D. In versiunea initiala Derive necesita doar un sistem compatibil PC cu 512 K, MS-Dos 2.1 si o unitate de disketa. Derive este singurul Cas care ruleaza pe cele mai simple PC-uri. Este utilizat la Palmtop-PC-uri (de exemplu la Poqet-PC de 550 grame si la HP 95LX de 303 grame cu Derive-95LX disponibil pe cartela ROM). Detalii suplimentare sunt oferite ^n capitolul urmator.
Maple

Ca pentru hardware foarte simplu. Este o dezvoltare ulterioara a Cas numit muMath folosit ^n anii '80 pe sistemul de operare CP/M si calculatoare cu

A fost dezvoltat de Soft Warehaus Inc., Honolulu, Hawaii, ^n scopul de a oferi un

{ asitentul ^n matematica

Este utilizat^n cercetare,^nvatam^nt,^n stiintele naturii, inginerie si matematia ca. Cu Maple pot realizate calcule simbolice si numerice. Indicii, exponentii 66

si literele grecesti pot evidentiati usor. Rezultatele si materialele didactice pot prezentate sub forma unor worksheet-uri. Maple este si un limbaj de programare (procedural si functional). Scopul principal ^n dezvoltarea Maple ^n anii 1980 a fost realizarea unui limbaj puternic si e cient ^n care algoritmii matematici sa poata scrisi mai usor dec^t ^n limbajele de programare C sau Lisp. Un alt scop a fost realizarea a unui mediu cu cerinte de memorie adecvate datelor, astfel ^nc^t sa poata a rezolvate probleme mari si pe de alta parte ca Maple sa poata rula si pe calculatoare mici, si pentru ca mai multi utilizatori ai unui sistem time-sharing sa poata lucra simultan. Rezultatul a fost un sistem compus din trei parti: interfata utilizator, nucleul si biblioteca. Intefata si nucleul sunt programate ^n C si necesita ^mpreuna doar 500 Kb memorie. Biblioteca Maple este programata ^n Maple si contine aproximativ 2500 functii. Maple poate rula pe calculatoare mici precum Amiga PC, Macintosh cu numai 2Mb memorie. Acest fapt face ca Maple sa e util ^n ^nvatam^nt. a Datorita delimitarii clare ^ntre interfata, nucleu si biblioteca, Maple este utilizat de alte sisteme ca masina simbolica. De exemplu programul MathCad pentru calcule numerice utilizat de ingineri ofera o serie de functii simbolice din Maple. Maple-share library care este oferita sub forma de functii si pachete poate usor extinsa. Aceasta biblioteca poate obtinuta pe baza de e-mail sau prin ftp anonim. In Maple, calculele numerice includ matematica numerelor mari si aritmetica numerelor complexe, algebra numerica liniara, aproximare numerica, analiza numerica incluz^nd integrale, sume, produse, reziduuri. Calculele sima bolice includ integrarea functiilor rationale, transformari Laplace sau Fourier si inversele lor, sumari, produse, rezolvarea ecuatiilor recursive, serii Taylor, algebra liniara simbolica precum determinanti sau inverse de matrice, rezolvarea ecuatiilor liniare, polinomiale si a ecuatiilor diferentiale. Pachetele pentru domenii speciale includ: grupuri nite, teoria numerelor, tensori, geometrie etc. Pot trasate curbe, suprafete, poligoane, texte, animatie, ^n coordonate carteziene, polare, cilindrice, sferice, contururi, scale logaritmice etc. Detalii suplimentare sunt prezentate in capitolul urmator.
Mathematica

Este utilizat ^n predare, cercetare si dezvoltare ^n numeroase domenii. Unul din scopurile ^n constructia acestui mediu a fost dezvoltarea unui sistem pentru majoritatea tipurilor de calculatoare. Prima versiune a aparut pe piata ^n iunie 1988. Partea cea mai importanta este limbajul de programare exibil care permite dezvoltarea sistemului prin construirea unor limbaje speci ce unui domeniu de interes al utilizatorului. Limbajul trebuie sa e orientat matematic si sa permita de nirea simpla a unor reguli matematice. Detalii suplimentare sunt prezentate ^n capitolul urmator. 67

Reduce

Prima versiune a lui Reduce a aparut la sf^rsitul anilor '60. Punctul de plecare a de atunci a fost calculul formal^n zica energiei^nalte, care manual este greu de efectuat si susceptibil de a se strecura erori. Posibilitatile actuale ale Reduce sunt mult mai mari, ^ndepart^ndu-se de scopul initial si orient^ndu-se spre a a calcule matematice formale ^n domeniul matematicii aplicate (stiintele naturii si ingineresti). Se poate vorbi de o dezvoltare constanta a acestui mediu (la mijlocul anului 1992 versiunea 3.4.1 a fost facuta publica). Deoarece Reduce a fost construit initial pentru a rezolva probleme matematice ^n domeniul tehnico-stiinti ce, notiunea de operator este centrala ^n acest mediu. Obiectele ^n Reduce pot : numere (^ntregi, rationale, reale, complexe), simboluri (nume, eventual indexate), functii, operatori aritmetici, reguli de precedent a. Structurile de date admise sunt liste, matrice (matrix) si tablouri (array - structuri indexate multidimensionale), iar operatorii sunt cei de diferentiere, integrare, factorizare etc. In mod special ^n acest mediu programarea este orientata pe reguli. Interdependent a algebrica globala poate declarata ^n Reduce cu ajutorul regulilor. Se considera ca exemplu de nitia polinoamelor Hermite bazata pe o formula recursiva:
operator Hermite; Hermite rules:= fHermite(0,~) => 1, x Hermite(1,~) => 2*x, x Hermite(~,~) => 2*x*Hermite(n-1,x)-2*(n-1)*Hermite(n-2,x) when nx n> 1g; let Hermite rules; Hermite(4,z);

Construirea unui polinom Hermite se face astfel:

10 Z 4 ? 48 Z 2 + 12 Reduce se deosebeste de celelalte sisteme prin urmatoarele. Reduce este scris ^n RLisp ale carui functionalitati le ofera ^ntr-o interfata mai prietenoasa. Este un sistem deschis care poate adaptat cerintelor utilizatorului prin dezvoltarea nivelelor algebrice sau simbolice (Lisp). Deoarece Reduce promoveaza facilitatile Lisp de ^ncarcare dinamica a programelor, de compilare incrementala si rede nire a programelor,^nsusi nucleul sau este deschis pentru modi cari locale.

4.16 Sisteme pentru arhitecturi paralele


MuPad

Multi Processing Algebra DataTool este un sistem pentru masini paralele cu memorie comuna. A fost dezvoltat de grupul MathPAD de la Universitatea

68

Padeborn, ^ncep^nd cu 1989, cu un scop dublu: sa e o unealta pentru acces a rapid si e cient la colectii mari de date (de ordinul Gb) si sa e un sistem deschis constituit dintr-un nucleu compact (un parser, aritmetica, evaluator, limbaj de programare si 70 functii sistem, debugger interactiv), interfata utilizator, biblioteca si gestionar de memorie (Mammut- memory allocation management unit). Vesiunea 1.0 a fost construita pentru Unix (XMuPad) si familiile de masini Macintosh (MacMuPad). Versiunea Unix este disponibila pentru cercetare si ^nvatam^nt. Prototipul pentru versiunea paralela ruleaza pe Sequent Symmetry. a MuPad este un Cas cu scop general. Tipurile de date admise sunt numere ^ntregi, rationale, complexe, multimi, liste, c^mpuri si tabele (ultimele a deosebindu-se prin modalitatea de indexare). Operatorii sunt matematici, relationari, logici, operatii pe multimi, operatori de concatenare. Functii standard sunt cele trigonometrice, hiperbolice, functii de conversie, diferentiere, factorizare, functii pe siruri de caractere etc. Programarea este functionala. In ceea ce priveste gra ca, utilizatorul poate str^nge obiecte speciale ^ntr-o scena. a Detalii suplimentare sunt oferite ^n capitolul urmator.
Parsac

thread-urilor ^n C. Parsac este realizat ^n limbajul C.

Este o biblioteca de algoritmi Ca secventiali si paraleli ce utilizeaza tehnica

4.17 Sisteme pentru domenii speciale


Aceste sisteme sunt construite pentru rezolvarea unor probleme complexe ^n domenii mai restr^nse care nu pot solutionate sau sunt ine cient solutionate a cu ajutorul sistemelor cu scop general. Aceste sisteme acopera o cantitate mare de algoritmi, structuri de date adecvate problemelor si sunt mai apropiate de hardware.
Aldes/Sac-2 este o unealta pentru cercetarea algoritmilor. Sac-2 (Symbolic

and Algebraic Computation, versiunea 2) este o colectie de algoritmi, care a fost

realizata de-a lungul a multor ani de cercetare ^n domeniul algoritmilor pentru polinoame. Limbajul de implementare Aldes a fost dezvoltat ca unealta de descriere a algoritmilor. Este folosit ^n scopuri stiinti ce ^n mai multe locuri din Europa.
Cayley a fost construit ^n Australia pentru rezolvarea problemelor din algebra si teoria numerelor. Scris ^n C, ruleaza pe Sun-uri, Vax, sisteme IBM precum RS/6000, PS2 cu AIX. Cerintele sunt usor de formulat si sunt prelucrate interactiv. Cayley a fost proiectat pentru a suporta calcule rapide ^n domenii importante ale algebrei moderne (exemple: grupuri, inele), teoria numerelor, teorie combinatorica, teoria grafurilor, topologie si geometrie nita.

69

Departe de a o alternatica la Cas-uri, Cayley ofera o acoperire a unor noi arii matematice si suporta diferite stiluri de calcule. Sistemul presupune ca utilizatorul sa-si de neasca structura algebrica care urmeaza a calculata. De exemplu se pot calcula grupurile de permutari de ordin p^na la un milion pe a baza de generatori. Se pot obtine informatii globale asupra structurii, de exemplu ordinul unui grup nit, nucleul, subgrupuri etc. Ca date se pot de ni structuri algebrice, multimi, secvent e, functii. special pentru calcule^n algebra comutativa, care ruleaza pe orice calculator din familia Macintosh si IBM/PC compatibile, cu cel putin 512K RAM. Proiectul pornit ^n 1987 se referea la un prototip de sistem mic capabil sa trateze inele polinomiale multivariabile si algoritmii corespunzatori. CoCoA este capabil sa efectueze calcule asupra polinoamelor cu coe cienti rationali sau din clase de resturi, cu functii rationale, ideale, inele, matrice. Sistemul este capabil sa efectueze sume, produse, puteri ale polinoamelor, functiilor si idealelor, derivate ale polinoamelor si functiilor, cel mai mare divizor comun, cel mai mic multiplu comun al polinoamelor, determinanti matriceali, determinari de baze Grobner, forme normale polinoame, eliminari si substitutii a variabilelor, intersect ii si diviziuni de ideale, minimizare sisteme de generatori etc. Inima sistemului este o implementare a algoritmului Buchberg pentru calculul bazelor Grobner. Sistemul poate obtinut prin e-mail de la adresa cocoa@igecuniv.bitnet.
Felix este o unealta pentru programare si testare pentru dezvoltarea de programe pentru calcul simbolic. Este un sistem asemanator Lisp-ului. Este compus din trei parti. Prima este nucleul de asamblare. Acesta recunoaste structuri de date precum numere ^ntregi mari, nume, vectori, matrice, functii. Interfata cu utilizatorul este a doua parte. A treia parte consta ^ntr-un ansamblu de algoritmi pentru calcul simbolic ^n teoria idealelor. Ruleaza pe sisteme IBMcompatibile cu sistem de operare Dos. Versiunea minimala poate rula si pe calculatoare din clasa XT. Este utilizat ^n special pentru calcule cu inele si ideale, mor sme ^ntre structuri. Form este special pentru tratarea problemelor cu termeni mari ^n zica energiei ^nalte. Lucreaza cu vectori, tensori si matrice. A fost dezvoltat ^n 1984 la Amsterdam. Este scris ^n C si ruleaza pe numeroase sisteme: IBM PC/AT cu MS-Dos, Atari, Apple Machintosh, Vax, Dec, Apollo, NeXT, IBM Rs/6000, Sun Sparc. Versiunea 1 din 1989 poate obtinuta prin ftp anonim de la canb.can.nl, pe c^nd versiunea a 2-a este o versiune comerciala. Preia sintaxa de la Fortran, a C, Reduce. Poate trata formule foarte lungi si sisteme de dimensiuni mari. Gap (Groups, Algorithms, Programming) este un sistem pentru tratarea strucCoCoA (Computations in Commutative Algebra) este un sistem mic cu scop

turilor discrete, dezvoltat la Aachen, cu accent pe metodele algoritmice^nteoria grupurilor. Partile componente sunt nucleul, functiile de biblioteca, biblioteca 70

de grupuri si documentatia. Structurile de control sunt asemanatoare Pascalului. Tipuri speciale de date sunt vectorii, permutarile si matricele cu numere rationale si corpurile nite. Pentru numerele ^ntregi mari exista un pachet special de functii. Biblioteca contine si un pachet pentru combinatorica si grupuri de permutari cu grad mai mic dec^t 50. Ruleaza pe sisteme Unix si a IBM-PC compatibile. Vesiunea 3 poate obtinuta prin ftp anonim de la adresa samson.math.rwth-aachen.de. universitatea din Dusseldorf. Este un pachet de programe pentru calcule ^n corpuri de numere algebrice. Scopul initial declarat este implementarea algoritmilor specializati pentru calculul invariantilor^n corpuri de numere algebrice. Prima versiune a fost dezvoltata^ntre 1987 si 1991 si nalizata printr-un pachet de programe Fortran. Versiunea ulterioara a fost rescrisa ^n C. Poate obtinut prin ftp anonim de la clio.rz.uni-dusseldorf.de.
Lie este un pachet Ca specializat pentru calcule privind gupurile si algebrele Lie si reprezentarile lor. A fost dezvoltat de grupul de Ca de la Amsterdam. Kant este un sistem pentru calcul algebric ^n teoria numerelor, elaborat la

Pachetul ofera un numar de algoritmi pentru efectuarea calculelor speci ce domeniului. Pachetul este scris ^n C ^ntr-o maniera portabila pe sisteme Unix.

bila programarea imperativa legata de algebra polinomiala. Include algoritmii dezvoltati^n Aldes/Sac-2. Scopul Mas este de a un Cas interactiv, sa ofere facilitatile algoritmilor bibliotecii sistemului Aldes/Sac-2, sa e un sistem de dezvoltare a programelor cu un compilator e cient, o componenta pentru speci care algebrica a structurilor de date si programelor. Atributele sale sunt portabilitate, sistem deschis pentru dezvoltare, functii de baza precum gestionarea memoriei, stabilitate la aparitia erorilor, e cient a. Este implementat ^n Modula-2. Pentru a crea un sistem de calcul interactiv, s-a implementat un interpretor Lisp ^n Modula-2 pentru a avea acces complet si la programele compilate. Mas a fost dezvolat la universitatea Passau. Ruleaza pe IBM Rs/6000, IBM-PC/AT, Atari ST si Commodore Amiga. Poate obtinut prin ftp anonim de la alice.fmi.uni-passau.de.
MathCad este un sistem comercial care permite rezolvarea unor ecuatii si

Mas (Modula-2 Algebra System) este un Cas experimental care face posi-

inecuatii, diferentiere, integrale, serii etc. Matricele sunt usor de manipulat. Detalii sunt prezentate ^n capitolul urmator.
Macaulay este un Cas pentru geometrie algebrica si algebra comutativa.

Este o unealta g^ndita pentru matematicieni, ce permite manipularea algebrica a a polinoamelor, matricelor, idealelor, inelelor de polinoame, functiilor ^ntre inele. Este scris ^n C si poate compilat pe Sun-uri si statii Dec, HP sau IBM RS/6000. Codul sursa poate obtinut prin ftp anonim de la zariski.harvard.edu. 71

Pari este o colectie mare de programe pentru calcule din teoria numerelor. O calitate a acestui sistem este rapiditatea ^n calcule ^n comparatie cu sistemele cu scop general. Sistemul are trei nivele ierarhice. Primul, numit nucelul de baza, consista ^n 4 operatii de baza (+; ?; ; =) ^ntre ^ntregi multiprecizie, reale multiprecizie, ^ntregi ^n simpla precizie si conversii ^ntre aceste obiecte. Al doilea nivel, numit nuclelul generic, este o colectie de programe pentru tratarea operatiilor standard si de conversie ^ntre obiecte Pari, de exemplu cel mai mare divizor comun. Al treilea nivel este o colectie de rutine pentru manipularea obiectelor, incluz^nd algebra liniara (calcul determinanti, polinoame a caracteristice, intersect ii de subspatii etc.), analiza numerica (integrare, gasirea radacinii, valori si vectori proprii) etc. Ruleaza pe sisteme Unix de tip Sun, IBM Rs/6000. Poate obtinut prin ftp anonim de la mizar.greco-prog.fr. Simath (Sinix - Siemens Unix - Mathematik) este un Cas pentru teoria numerelor algebrice. Se bazeaza pe limbajul C si consta ^n pachete de algoritmi pentru aritmetica ^n numere ^ntregi, rationale, reale, clase de resturi, corpuri nite, calcule cu polinoame si matrice, curbe eliptice. A fost dezvoltat la universitatea Saarlandes si la Siemens AG pentru Siemens PC, statii Sun, Apollo. Este scris ^n C si este conceput ca un sistem deschis pentru modi carea algoritmilor conform cerintelor utilizatorului. Poate obtinut prin ftp anonim de la ftp.math.uni-sb.de.

combinatorica. Unul dintre teluri a fost construirea unui sistem care poate rula pe orice calculator cu compilator C, independent de masina si sistem de operare. Programele sunt scrise ^n maniera programarii orientate obiect. Pachetul de programe poate obtinut prin ftp anonim de la calculatorul 132.180.8.29.

Symmetrica este un Cas pentru grupuri simetrice, teoria invariantilor si

4.18 Sisteme experimentale si pachete de programe


In aceasta categorie sunt incluse sistemele si pachetele de programe care au fost dezvoltate pentru domenii restr^se de interes si concepute pentru specialisti ^n a respectivele domenii sau care se a a ^n faza de constructie. In continuare sunt enumerate c^teva asemenea sisteme: a Algae este un limbaj-interpretor pentru analiza numerica. Algeb este un limbaj de programare (astfel opus Cas) desemnat special pentru lucru^n algebra si teoria numerelor. Este disponibil pe Dec si IBM-PC. Comparat cu sistemele simbolice, este un program mai usor de ^nvatat si mai rapid. Detine o biblioteca mare de functii pentru calcule simbolice. Exemple de calcule posibile sunt grupurile Galois sau forma Frobenius a unei matrice. 72

Amore (Automaten, Monoide und Regulare Ausdrucke) este un program pentru

sinteza, analiza automatelor si monoizilor niti. Ruleaza pe sisteme Unix cu si fara gra ca pe sisteme Dos. A fost scris ^n C. AutoLev este un program de manipulare simbolica pentru analiza dinamicii sistemelor mecanice. Cam C++ Class Library este o colectie de clase de functii pentru gra ca si operatii simbolice matriceale sau vectoriale. Casa este un pachet Ca pentru geometrie algebrica constructiva scris ^n Maple. Chevie (Chevalley si Lie) este un Cas pentru sprijinul cercetarii ^n teoria caracterelor^n grupuri nite de tip Lie. Consta^ntr-o biblioteca si o colectie de programe scrise ^n Gap, Maple si C. CliCal (Cli ord Algebra Calculations), este un program pe calculator pentru vectori, numere complexe, cuaternioni, si multivectori^n algebre Cli ord. Crep (Combinatorial Representation Theory of Finite-Dimensional Algebras) este un pachet de programe Pascal disponibile pentru algebre nite prin ftp anomim de la ftpmathematik.uni-bielefeld.de. Foam este un program Ca pentru zica energiilor ^nalte. Gb este un pachet pentru calcule cu baze Grobner. GrTensorII este un pachet pentru geometrie diferentiala. Integrator efectueaza integrari pentru utilizatori ce dispun de un program de navigare pe Web, prezent^nd rezultatele ^n format de pagina Web. a Jacal efectueaza simpli cari simbolice si manipuleaza ecuatii. Magma este un sistem pentru algebra computationala, teoria numerelor, geometrie. Masyca (Mathematic Symbolic Computations) are un nucleu destinat manipularii simbolica a polinoamelor, matricelor si vectorilor. Mathomatic este un program de manipulare algebrica combinat cu inteligenta arti ciala. Meat-Axe este un Cas pentru manipularea matricelor de dimensiuni foarte mari si permutarilor. Moc (Modular Characters) este un pachet de programe pentru calcularea tabelelor de caractere ^n corpuri nite. Trateaza numere lungi, numere p-adice, rezolva sisteme de ecuatii. Orme este un mediu pentru scrierea de reguli, completare si rationare ecuationala. Otter (ANL) este un sistem de deducere automata elaborat la Argonne National Laboratory. Punimax este un Cas pentru calcule numerice si simbolice. Quotpic este un program gra c interactiv care ofera prezentari nite ale grupurilor. Este disponibil prin ftp anonim de la tuda.ncl.ac.uk. Redten este un pachet pentru algebra simbolica pentru obiecte tensoriale. ReDuX este construit pentru demonstrare automata ^n structuri algebrice. Algoritmii sunt scrisi ^n Aldes. 73

RepTiles este un program gra c pentru operatii geometrice, pentru grupuri Ricci efectueaza calcule tensoriale simbolice pentru geometria diferentiala. Rissa este un Cas experimental cu biblioteci de programare. Saml este o biblioteca matematica algebrica simpla. SacLib construit la Universitatea din Linz este o biblioteca de programe C pentru Ca, derivate din sistemul Sac-2. Senac (Software Environment for Numeric and Algebraic Computation) este un

de simetrii si topologie. Este utilizat ^n chimie si cristalogra e.

sistem modular pentru oameni de stiinta, matematicieni si ingineri. Integreaza numeric, simbolic, este portabil, are facilitati gra ce si poate interactiona cu bibliotecile de programe, de exemplu cu bibliotecile Fortran ale NAG. Sheep este un Cas desemnat pentru calcule de relativitate generala. SiMath construit la Universitatea Saarbruecken este un Cas, special construit pentru teoria numerelor. SimLab este un cod CLisp pentru triangularizarea ariilor bidimensionale. Singular este un Cas pentru geometrie algebrica si algebra comutativa, cu accent pe teoria singularitatilor. Este disponibil prin ftp anonim de la calculatorul 131.246.9.32. Este asemanator cu Macaulay. Sisyphos este conceput pentru calcule asupra grupurilor si idealelor. Este scris ^n C si ruleaza pe Sun-uri, IBM RS/6000, HP9000, Atari ST. SymbMath (Symbolic Mathematics) este un sistem expert care poate rezolva probleme matematice. Este un Cas, un calculator simbolic care rezolva probleme matematice, efecteaza calcule numerice exacte, simbolice si gra ce. Manipuleaza formule complicate si returneaza raspunsuri ^n forma de simboluri, formule, numere exacte, tabele si gra ce. SymbMath este un sistem expert care este capabil sa ^nvete din intrarile utilizatorului. Poate efectua calcule numerice cu precizie. Poate manipula formule complicate si returna raspunsuri ^n termeni de simboluri, formule si numere exacte. Capabilitatile sale includ diferentiere, integrare, solutii de ecuatii polinomiale, algebrice sau diferentiale, simpli cari, factorizari, substitutii, evaluari, calcule exacte si numerice cu^ntregi, rationale, reale, complexe nemarginite, limite, sume, produse, serii, operatii cu liste, matrice, vectori, tablouri si calcule chimice (greutati moleculare si atomice, concentratii, reactii chimice), interfata cu alte programe (de exemplu: PlotData pentru gra ce). Versiunea publica poate obtinuta prin ftp anonim de la adresa wsmr-simtel20.army.mil sau rana.cc.deakin.oz.au. SymmPAD este utilizat pentru rezolvarea sistemelor de ecuatii cu derivate partiale pe baza analizei grupurilor de simetrii. Algoritmii sunt implementati ^n Maple. Theorist este de nit ca o interfata utilizator pentru algebra simbolica. Cunostiintele matematice sunt descrise prin ecuatii si inegalitati (propozitii) si noi propozitii sunt derivate pe baza propozitiilor presupuse. O teorie este privita ca un set de propozitii care sunt segregate din propozitii initiale. O teorie reprezinta un set limitat de posibilitati, iar 74

propozitiile sunt considerate adevarate doar ^n interiorul teoriei. Integritatea teorilor poate testata prin Theorist. TMath este o interfata Tcl pentru Matlab si Mathematica. Visual Math For Java este un calculator gra c si rezolvitor de ecuatii. Yacas este un limbaj exibil pentru Ca. EpOde (Expert System for Ordinary Di erential Equations), elaborat de catre autoarea acestei carti, este un mediu de rezolvare a sistemelor mari de ecuatii diferentiale ordinare. Are un interpretor propriu pentru introducerea ^ntr-o forma matematica a problemei de rezolvat. Acelasi interpretor este utilizabil si pentru extinderea bazei de metode numerice a ate la dispozitia utilizatorului. Sistemul automat detecteaza caracteristicile problemei (utiliz^nd nu nua mai metode numerice ci si simbolice precum derivarea simbolica) si alege o metoda de rezolvare ^n concordanta cu aceste proprietati. Include de asemenea un vizualizator de curbe ^n spatiul bi-dimensional sau tri-dimensional. Detalii suplimentare si produsul ^n versiunea 1.0 pot obtinute de la adresa http://www.info.uvt.ro/~ petcu/epode.

4.19 Compararea Cas-urilor


Numeroase Cas-uri sunt astazi disponibile. Apar astfel adesea ^ntrebari de tipul: care sistem este mai bun pentru a calcula integrale? dar pentru a realiza calcule de algebra liniara? Pentru a raspunde la aceste ^ntrebari utilizatorul trebuie sa cunoasca capabilitatile exacte ale ecarui sistem existent. Aceasta nu este practic posibil, din motive simple precum: este foarte costisitoare achizitionarea tuturor aceste sisteme, si este nevoie de timp pentru a ^nvata cum se utilizeaza toate. De aceea revizuirea capabilitatilor Cas-urilor si publicarea sub forma de documente publice sunt foarte utile. Numeroase pachete de test au fost construite relativ recent pentru testarea capabilitatilor Cas curente. Primul set public de probleme de testare a fost elaborat ^n 1995 de la Universitatea New Mexico si pe Internet la adresa http:// math.unm.edu/ ~ wester/ cas review.html. Este vorba de un set de 131 probleme matematice, majoritatea simbolice, fara gra ce, design de limbaj, interfata utilizator si viteza de calcul sau judecarea documentarii. Mediile ^n dezbatere au fost: Axiom 1.2, Derive XM Version 3, Macsyma 419.0, Maple V Release 3, Mathematica 2.2, MuPad 1.2.1a, Reduce 3.5. Setul complet de demonstratii este disponibil la ftp://math.unm.edu//pub/cas. Alegerea problemele de test a avut ca scopuri oferirea unui indicator asupra ^ntinderii acoperirii realizate de ecare sistem cu scop general si oferirea unei imagini asupra ad^ncimii acoperirii anumitor clase a de probleme. Situatia statistica a rezolvarii problemelor este cea din tabelul 4.1. 75

4.19.1 Studiu general

Corecta Partiala sau complicata Axiom 57 20 Derive 67 21 Macsyma 102 14 Maple 87 22 Mathematica 80 22 MuPad 24 11 Reduce 49 16

Mediu

Nerezolvata Eronata 47 39 14 13 26 91 59 7 4 1 9 3 5 7

Tabelul 4.1: Testul Wester { statistica generala

Exemplele urmatoare indica unele dintre di cultatile ^nt^lnite de Cas-urile a mentionate: 1. problema rezolvata numai de Axiom: 1=7 este periodica (0:142857); 2. problema rezolvata cu Derive, partial cu Maple si Mathematica: termenul principal al log e10i este (10 ? 4 )i; 3. problema rezolvata cu Macsyma, raspuns eronat cu Maple, nerezolvata de celelalte: assume(x y; y z; z x) implica z = x; 4. problema rezolvata cu Maple, ?x raspuns partial cu Macsyma, nerezolvata de celelalte: serie de puteri a e sin x ^n x = 0; 5. problema rezolvata corect cu MuPad, Reduce si Mathematica, partial cu Derive, Macsyma si Maple, eronat rezolvata de Axiom: tan?1(tan z) este z pe intervalul ? =2 < z =2. Statistica pe problematici, respectiv numarul de probleme rezolvate corect, este prezentata ^n tabelul 4.2. Analiz^nd un asemenea tabel se pot observa a domeniile^n care exceleaza anumite Cas-uri precum si domeniile care le creaza probleme. De exemplu Mathematica exceleaza ^n rezolvarea problemelor statistice, Maple ^n inecuatii si rezolvarea de ecuatii, Macsyma ^n calcul tensorial, Derive ^n reduceri. Daca se noteaza cu scorul 1 un rezultat corect, 0.5 unul partial, -1 unul incorect, atunci rezultatele sunt cele prezentate ^n tabelul 4.3. Aceste rezultate pot intepretate precum coe cienti de ^ncredere a mediilor testate. Aceste valori nu sunt absolute, ele depinz^nd de setul de probleme de testare, ^nsa pot a oferi o imagine asupra capabilitatilor Cas-urilor ^n discutie. Este posibil ca un mediu cu un coe cient de ^ncredere redus sa e mai performant dec^t unul cu a un coe cient de ^ncredere ridicat atunci c^nd este discutata anumita clasa de a probleme (vezi statistica { tabelul 4.2). Tabelul 4.3 indica Macsyma ca ind cel mai indicat sistem pentru rezolvarea de probleme matematice. In concluzie, alegerea software-ului corespunzator unei probleme trebuie sa tina seama de problema. 76

Mediu Numere Statistica Simpli cari Inecuatii Trigonometrie Reduceri Ecuatii Operatii matriceale Tensori Sume,produse Limite,derivate Primitive Integrale de nite Serii Transformari Recursii, ec.diferentiale Operatori Polinoame speciale Eval.pol., conversii Logica

Prob. 10 3 7 4 3 18 16 3 2 4 2 9 9 11 2 11 8 3 3 3

8 0 6 0 1 4 7 3 0 1 2 6 1 5 2 2 5 2 1 1

Ax De Ms Ma Mm Mu Re

8 0 5 2 2 12 11 3 0 4 1 6 4 3 0 0 0 2 1 3

7 1 7 2 3 11 12 3 2 4 2 8 7 9 2 7 8 3 3 1

7 1 6 3 2 10 13 3 0 4 2 6 2 5 2 7 8 1 3 3

7 3 6 0 3 8 9 3 0 4 2 6 6 6 2 5 5 2 1 2

4 0 4 0 0 2 1 1 0 0 0 0 0 1 0 0 7 1 1 2

5 0 5 0 1 3 10 3 0 1 1 5 0 4 1 3 1 2 1 2

Tabelul 4.2: Testul Wester { statistica pe probleme rezolvate


Axiom Derive Macsyma Maple Mathe. MuPad Reduce

59.5

73.5

108

90.5

88

24.5

50

Tabelul 4.3: Testul Wester { coe cient de ^ncredere

4.19.2 Studii de caz

Rezolvarea ecuatiilor algebrice si transcedentare


Rezolvarea ecuatilor si sistemelor de ecuatii este o facilitate cheie a Cas-urilor. Un pachet de test a fost elaborat ^n 1996 la universitatea din Zurich pentru testarea capabilitatilor de rezolvare ^n domeniul ecuatiilor algebrice si transcedentale. Sistemele puse ^n discutie au fost: Axiom 2.0, Derive 3.06, Macsyma 420, Maple V R4, Mathematica 2.2, MuPad 1.2.9 si Reduce 3.6. Setul de test include 80 de probleme a caror solutie este cunoscuta. Setul 77

este disponibil la http://www.inf.ethz.ch/personal/bernardi/solve/problems.html. Analiz^nd rezultatele testelor, s-a ^ntocmit statistica din tabelul 4.4. a Corect Corect, prezentat defectuos Axiom 2 0 Derive 18 0 Macsyma 22 0 Maple 54 5 Mathematica 7 0 MuPad 9 0 Reduce 16 2 Mediu Partial Nerezolvata Eronat rezolvata 21 15 5 16 13 4 15 54 47 52 5 60 67 46 3 0 1 0 0 0 1

Tabelul 4.4: Testul Bernardi { statistica

Rezultatele ^ntaresc presupunerea ca Maple este cel mai indicat sistem a se utiliza la rezolvarea unor ecuatii algebrice sau transcedentare. Mediile analizate ^nt^mpina o serie de di cultati, dupa cum se exemplica a prin problemele care urmeaza: 1. nerezolvata de nici un mediu: x ? =2 = cos(x + ) cu solutia x = =2; 2. rezolvata numai de Maple: ex + x 1 pentru x real cu solutia x 0; 3. rezolvata numai de Derive si Macsyma: x! = 120 cu solutia x = 5; 4. rezolvata numai de Reduce si Maple: sistemul x+y 2; x?2y 1; x? y 0; y ? x=2 ?1=2 pentru x; y 2 IR cu solutia x = 2y + 1; y 1=3; 5. rezolvata corect de Macsyma, partial de Derive si Mathematica, si nerezolvata de celelalte: 1=tan(x) = 0 cu solutia x = (u+1=2); u ^ntreg; 6. rezolvata corect de Mathematica, rezolvata cu prezentare defectuoasa ^n Maple si nerezolvata de celelalte: sistemul x6 + 8 = 0; x2 + 2 6= 0, cu p p solutiile x = 1 i 3; 7. rezolvata corect de MuPad, Maple si Derive, partial de Reduce si p Macsyma, nerezolvata de Mathematica si Axiom: j xj = 3 pentru x cu solutiile x = 9; 8. rezolvatax de Axiom, MuPad, Reduce si Macsyma si partial de celelalte: e2 ? 2ex + 2 = 0 pentru x, cu solutiile x =ln(1 i) + 2ui ; u ^ntreg. Testele au fost realizate ^n 1996 la universitatea din Padeborn. Sistemele puse ^n discutie sunt: Axiom 2.0, Derive 3.11, Macsyma 420, Maple V R4, Mathematica 2.2.3, MuPad 1.2.9 si Reduce 3.6. Un set de 54 probleme 78

Rezolvarea ecuatiilor diferentiale ordinare

fost activata procedura de rezolvare a ecuatiilor diferentiale. Astfel rezolvarea ecuatiilor cu ajutorul acestor medii a evoluat conform tabelului 4.5. Mediu completa si corecta Axiom 16 Derive 19 Macsyma 24 Maple 28 Mathem. 26 MuPad 30 Reduce 8 sol.implic. sau param. 2 13 3 5 0 7 2 sol.partial corecta 4 4 4 7 3 5 3 nerezolvat 6 14 19 10 21 7 40 eroare calcul 24 0 3 3 3 3 1 eronat 2 4 1 1 1 2 0

http://www.loria.fr/~ zimmerman/ComputerAlgebra/). Pentru ecare mediu a

cu solutie explicita cunoscuta a fost luat ^n considerare (setul se gaseste la

Tabelul 4.5: Testul Zimmerman { statistica

Aceste teste evidentiaza capabilitatile MuPad-ului de rezolvare a ecuatiilor diferentiale. Dintre problemele di cile se remarca: 1. problema rezolvata de toate mediile corect: y"(ax + b)2 + 4y0 (ax + b)a + 2ya2 = 0, prin schimbare de variabile, solutie y(x) = (C1x+C2 )=(ax+b)2 ; 2. problema rezolvata numai de Axiom si Maple: sistemul neomogen ( x0 = ? 1 x + 1 y + 1 t(t2+1) t2 (t2 +1) t 2 0 = ? 2t2 x + 2 t2+1 y t +1 t(t +1)y+1 3. 4. cu solutia x = log t + C1 ? C2 =t; y = t logt + C1t + C2t2 ; problema rezolvata de Derive si MuPad, eroare ^n timpul calculului0 la Axiom si Mathematica, nerezolvata de celelalte: 2yy" ? y0 2 = (y ? xy")2 =3 cu solutiile C1 =x; C1 x3 si ax2 + bx + b2=(3a); problema rezolvata de Macsyma, eroare ^n timpul calculului0 la Axiom, Maple si Mathematica, nerezolvata de celelalte: sistemul x ? x+2y = 0; x" ? 2y0 = 2t ? cos(2t) care are solutia x = 2C1 + 4C2et=2 ? t2 ? 4t + (sin(2t) + 4 cos(2t))=4; y = C1 + C2et=2 ? t2=2 ? t + 2 + (9 sin(2t) + 2 cos(2t))=68; problema rezolvata cu Maple, partial corecta cu Derive si Mathematica, eroare ^n timpul calculului cu Axiom, solutie eronata cu Macsyma: y" + y(y0 )3 = 0; y(0) = 0; y0 (0) = 2; problema rezolvata0 cu Mathematica, solutii implicite cu 3celelalte: ecuatia separabila y = (9x8 +1)=(y2 +1) are solutia implicita y =3+y = x9 + x + C care are trei solutii ^n forma explicita; 79

5. 6.

7. problema rezolvata cu MuPad, eroare ^n timpul calculului cu Axiom, nerezolvata de celelalte: x0 = ?3yz; y0 = 3xz; z 0 = ?xy solutiile pot obtinute prin combinarea relatiilor x2 + 2y2 + 3z 2 = C si x2 + y2 = D; 8. problema rezolvata cu Reduce, Maple, MuPad, solutie complicata produsa de Axiom, nerezolvata de 2 celelalte: y"" ? 4=x2 y"+8=x3 y0 ? 8=x4 y = 0 cu solutia C1x + C2 =x + C3x + C4 x4. Analiz^nd rezultatele testelor Zimmerman se pot trage unele concluzii. a Maple este putermic pentru ecuatii liniare si metode generale, dar anumite tipuri de ODE-uri nu sunt recunoscute. Mathematica este slab pentru ecuatii liniare cu coe cient i polinomiali, ^nsa recunoaste anumite tipuri speciale de ecuatii pe care Maple nu le recunoaste. Macsyma lucreaza bine pentru ecuatii liniare ^nsa este mai slab dec^t Maple la ecuatii speciale. MuPad este slab a pentru ecuatii neliniare. Axiom lucreaza bine pentru ecuatii liniare si de forma y0 = f(x; y), dar nu poate rezolva alte ecuatii. Derive recunoaste si rezolva o clasa mare de ecuatii dar face greseli stupide. Reduce este slab pentru toate tipurile de ecuatii. De cientele Cas-urilor studiate sunt urmatoarele. In ceea ce priveste tipul solutiilor, nu se ofera informatii despre tipul acestora (explicite, implicite, serii etc.). In ceea ce priveste solutiile de baza, except^nd Axiom, nu este usoara a gasirea unei baze pentru spatiul solutiilor ecuatiilor liniare. In ceea ce priveste proceduri de decizie, daca nu se returneaza solutii, nu este posibila depistarea daca o ecuatie nu are solutii^ntr-o clasa data (exemplu functii rationale sau elementare). In ceea ce priveste solutii partiale, nu se ofera avertizare daca iesirea nu acopera toate solutiile. In ceea ce priveste domenii de calcul, cu exceptia Macsyma, nu este posibila alegerea ^ntre solutii cu valori reale sau complexe. In ceea ce priveste strategii de rezolvare: cu exceptia Maple, Macsyma si MuPad nu este posibila cunoasterea metodelor utilizate pentru a rezolva un sistem dat. Timpul de obtinere a solutiei unei probleme poate un factor decisiv^n alegerea unei mediu de rezolvare, deca problema ce se doreste a rezolvata are o complexitate ridicata. O comparatie ^ntre mediile Maple V.3 si Mathematica 2.2.2 din punct de vedere a timpilor de executie pe un sistem IBM RISC System/6000 cu 64 Mb memorie au fost efectuate ^n 1994 ^n Franta, pe un lot de 61 de probleme. Rezultatele testelor sunt prezentate ^n tabelul 4.6. Testele indica faptul ca Maple este ^n majoritatea cazurilor mult mai rapid ^n rezolvarea problemelor dec^t Mathematica. a

Timpi de executie

80

Baza de comparatie/Rapiditate ^n calcule* timp de ^ncarcare dimensiunea initiala a programului (Kb) partea rezidenta ^n memorie (Kb) Rationale Reale pe 16 biti Reale pe 32 biti Reale 600-1000 biti Algebra liniara rationala Algebra liniara simbolica Radacini numerice complexe Control procedural Calcule simbolice Serii Taylor Diferentiere Factorizare modulo p cu p < 104 Factorizare modulo p cu p > 104 Factorizare produse de polinoame Factorizare polinoame ireductibile Trasari ^n spatiul bidimensional Trasari ^n spatiul tridimensional

0.3 s 392 828 1 >4 2 2 >4 >4 4 >4 >4 >4 >4 2 1 2 >4 1 >4

Maple Mathematica

5s 892 2788 2 1 1 1 1 1 1 1 1 1 1 1 4 1 1 2 1

*pe baza timpilor medii per totalitatea problemelor propuse corespunzator unei problematici
Tabelul 4.6: Compararea timpilor de executie

81

82

5. Software matematic ^n educatie


5.1 Clasi care
Software-ul educational poate clasi cat ^n doua categorii, pasiv sau activ, functie de gradul de paerticipare al utilizatorului. Tipul I poate de nit ca un software care necesita putina participare activa si manipulare din partea utilizatorului, cer^nd ca utilizatorul sa raspunda ^n a modalitati predeterminate. Exemplele cele mai simple sunt pachetele tutoriale si de practica. Studentii ^nvata cu usurinta un asemenea program, designul nu este intensiv gra c, si studentii sunt rugati sa aleaga un raspuns sau sa urmeze o secvent a de evenimente (raspunsuri prede nite). Acest tip de software acopera o mare varietate. Aplicatii precum Excel, PowerPoint, Word Perfect sunt de tip I. Se poate spune ,,Am manipulat activ informatia^n PowerPoint pentru a construi o prezentare unica!"; acest lucru este adevarat, dar softwareul ram^ne sa ,,controleze" utilizatorul, mai mult dec^t utilizatorul^l controleaza a a pe el. Tipul II de software permite utilizatorului sa controleze software-ul, permit^nd acestuia sa ia decizii, sa manipuleze activitati, sa shimbe directia a si sa creeze ceva nou. Exemple sunt produsele SimCity, Hyper Studio, Oregon Trail, si Risk. Aceste exemple sunt puternic interactive si vizuale. Software-ul educational include reuniunea urmatoarelor categorii: Tutoriale: software care se comporta ca un tutore pentru utilizator, oferind de nitii, rezumate, idei, concepte, explicatii, feedback, etc. Practica: permit utilizatorilor sa-si revizuiasca concepte, probleme si sa primeasca feedback ^n caz de progres. Simulare: sisteme de modelare pentru practica, participare si/sau duplicare a functiilor care pot ^nt^lnite ^n situatii reale sau imaginare. a Jocuri instructionale: permit utilizatorului sa se angajeze ^n activati de ^nvatare care vor ^ntari concepte ^ntr-o maniera distractiva prin implementarea regulilor de joc, factorului de competitie, si a potentialului de a ^nvinge. Rezolvare de probleme: ofera studentilor oportunitatea de a ^ntelege si/sau implementa strategii de rezolvare a problemelor. Primele doua sunt utilizate ^ntr-un model de instructie directionata. Sunt cel mai probabil ^ntalnite ^n clasele de matematica. Ultimele trei pot utilizate ^ntr-un model directionat sau constructiv. 82

5.2 Relatia Ca-Educatie


matematice de-a lungul secolului. Ca este disponibila astazi chiar si ^n calculatoare de productie ^n masa precum cele de buzunar, astfel ^nc^t profesorii a trebuie sa se confrunte cu existenta unui ,,alt expert" ^n afara lor ^n clasa. 80% din ceea ce profesorii ^nvata astazi, acest nou expert poate face prin apasarea pe un buton. Consecinta este bucuria unor profesori, frustrarea si frica altora, neputinta la majoritatea, si o serie de discutii internationale asupra efectului Ca asupra cum si ce predau matematicienii. Pe de alta parte, educatia este o ^ncercare mare ^n Ca, iar aceasta aplicatie este (singura) care o face un tehnologie de productie ^n masa reala. Milioane de elevi din lumea ^ntreaga peste 10 ani pot ^nvata algebra si teme matematice mai avansate si de aceea sunt utilizatori potentiali a Ca. Profesorii care utilizeaza uneltele Ca deja cer noi facilitati precum explicatii ale rezultatelor si interfete mai prietenoase cu studentii. Aceste milioane de posibili utilizatori sunt o ratiune su cienta pentru cercetatorii Ca si educationali pentru a-si uni eforturile ^n dezvoltatea Cas-urilor actuale ^n unelte puternice de predare si ^nvatare a matematicii.
Computer Algebra (Ca) este una dintre cele mai mari ^ncercari ale educatiei

5.3 Calculatorul la clasa de matematica?


Calculatorul poate o unealta naturala pentru matematicieni. Invatarea limbajelor de programare Pascal, C si Fortran a aratat ca, cu except ia unor putini entuziasti, prea mult efort este cerut de partea elevilor pentru a astepta ca acestea sa e considerate unelte naturale. Sa consideram urmatoarea situatie: o camera^n care se trage o linie^n mijlocul ei, se umple camera cu instructuri de matematica, iar la ^ntrebarea ,,trebuie sa e utilizate Cas-urile pentru a ^nvata matematica ^n clasa?", rezultatul ar o divizare ^n doua categorii de o parte si de alta a liniei. Acest scenariu a ^nceput sa se reproduca ^n scoli din ^ntreaga lume. Unii vad ^n dezvoltarea Cas o mare oportunitate, pretinz^nd ca ^nlatura ,,drogheria" din manipularea a matematica cu continut educational, si astfel permite exploatarea unor teme matematice care erau imposibil de abordat^nainte la clasa. Altii vad un pericol ca elevii si student ii care vor deveni analfabeti matematic, ca vor trata aceste unelte software precum cutii negre perfect implementate si vor sf^rsi prin a nu a ^ntelege matematica pe care aceste cutii negre o implementeaza. Care fata a acestei dezbateri este corecta? Precum toate ^ntrebarile sociale di cile, raspunsul este ambele si niciunul. Punctul de vedere optimist ne lasa sa vedem ca se pot obtine multe c^stiguri, iar punctul de vedere pesimist ne a arata defectele care trebuie evitate sau trecute. Trebuie gasita o pozitie ^ntre extreme unde se poate obtine c^t mai mult bine si c^t mai putin rau. a a Una din ^ntrebarile frecvente care vin adesea ^n discutie este relativ la ,,cutiile negre", daca sunt bune, daca nu putem avea cutii negre, sau studentii nu 83

vor sa ^nvete orice. In matematica daca avem o cutie neagra, atunci anumite concepte matematice sunt ^nchise ^n ea (vezi notiunea de multime predata la clasa I-a). Daca studentii nu sesizeaza lucrul intern cutiei, atunci ei nu pot ^nvata acele concepte intrinseci implementarii cutiei negre. Elevii si student ii pot lucra e cient la diferite teme cu ajutorul acestora, dar daca ^nvatarea matematici este obiectivul real, atunci performanta si e cienta sunt scopuri minore. Pe de alta parte, daca se da elevilor sau studentilor un volum mare de probleme relativ simple adecvate pentru manipulare algebrica manuala, ei vor deprinde o ^ndem^nare a prin repetitie, dar nu ^ntotdeauna au timpul necesar pentru teme matematice mai interesante si de valoare mai mare. De c^te ori n-au strigat studentii ,,nua mi da demonstratii, arata-mi cum se fac temele". O cantitatea mare de lucru este realizata, anumite deprinderi se pot forma, dar nivelul atins de ^ntelegere matematica poate minimal. Sa consideram o materie ^n care studentii ^nvata despre diferentiere, limite, integrari si serii. Prin aceasta studentii iau contact cu analiza reala s^ complexa, topologie, logica formala etc. Aceste topici mai generale nu sunt explicit abordate, dar sunt ^n spatele conceptelor matematice care sunt prezentate. In alte cuvinte, se trateaza matematica mai formala si riguroasa precum cutii negre, daca nu explicit, atunci prin nementionarea presupunerilor. Cutiile negre sunt astfel folosite pentru a ascunde complexitatea de student i c^nd acestia a nu sunt pregatiti. Aceasta permite instructorilor sa predea concepte ^nalte, precum subrutinele cutii-negre permit programatorilor sa scrie cod software de nivel^nalt. De aceea cutiilor negre nu pot privite ca un lucru rau, ele sunt un fapt necesar ^n viata educationala. Procesul de construct ie a unui curs poate vazut ca o decizie care cutii negre sa e prezentate si la care li se va ignora existenta. C^nd devin ^nsa cutiile negre lucruri rele? Iata c^teva situatii: a a 1. c^nd studentilor li se interzice accesul ^n interiorul cutiilor negre (cona traexemplu: ^n Maple se poate vizualiza,^n pachetul student, pas-cu-pas integrarea unei functii, iar studentii pot interveni ^n aceasta prezentare); 2. c^nd student ii nu ^nteleg cum o cutie neagra lucreaza chiar daca este a deschisa (acesta este cel mai important fapt care trebuie sa-l ia educatorii ^n consideratie la utilizarea unui Cas ^n ^nvatare; ei trebuie sa cunoasca care cutii negre trebuie deschise, contextul utilizarii, relevanta si sa de explicatii detaliate); 3. c^nd student ii nu au motive pentru a le pasa de interiorul unei cua tii ce contine concepte critice pentru subiect (probleme simple precum ,,integrati functia" care se rezolva rapid cu Cas-urile curente trebuie transformate ^n probleme mai complexe precum ,,integrati functia prin parti si prin fractii partiale, arat^nd pasii utilizati si rezultatele intermea diare; discutati care metoda este mai efectiva si de ce; daca rezultatele nu sunt egale explicati diferenta" { aceasta are ca efect o activitate mai putin mecanica si mai mult de g^ndire). a Cum arata o clasa de matematica ideala? Astazi adesea este un loc ^n care 84

studentii ^nvata matematica ^ntr-o maniera pas cu pas, memoreaza proceduri si lucreaza ^n izolare fata de ceilalti student i. Trebuie sa e ^nsa o comunitate matematica unde studentii si profesorul discuta ^n limbaj matematic, lucreaza ^n grupuri pentru a rezolva probleme din lumea reala, chiar probleme deschise, utilizeaza calculatoarele ^n mod inteligent, veri ca raspunsurile ^mpreuna utiliz^nd rationarea matematica mai mult dec^t raspunsurile cheie. Testele de a a aptitudini practice sunt ^nsa o fr^na ^n modalitatea de transformare ^n acest a ideal a clasei, in uent^nd modalitatea de predare (,,azi e joi, deci trebuie sa a e capitolul 2"). Copii angajati ^n probleme reale sunt mult mai motivati ^n a ^nvata si a utiliza deprinderi matematice. Perfomantele profesorilor trebuie sa se ^ndrepte de la modelul autoritar transmitere de cunostiinte la metode centrate pe elev cu stimularea ^nvatarii si explorarea activa. Calculatorul este perfect capabil sa creeze imagini vizuale ceea ce conduce la ^mbunatatirea g^ndirii spatiale necesare ^n matematica. Majoritatea softwarea urilor educationale de pe piata sunt concepute sa suplimenteze curicullum matematic standard. Mediile de rezolvare a problemelor tind sa se concentreze asupra problemelor. Din pacate dezvoltatorii de software nu ^nteleg ^n totalitatea termenul de rezolvitor de probleme. Invatarea urmatoarei generatii matematice fara tehnologie va arata precum un laborator de stiinte fara microscop. Inlocuirea treptata a hartiei si creionului cu calculatorul este o consecint a a progresului. Calculatoarele elimina calculele lungi si permit o implicare mai mare ^n procesul de ^nvatare. Educatia matematica trebuie sa formeze student i care sa dea o valoare matematicii, sa devina ^ncrezatori ^n abilitatile de a face matematica, sa devina rezolvitori de probleme matematice, sa comunice matematic, sa ^nvete sa rationeze matematic. Calculatorul poate avea un rol important ^n realizarea acestor deziderate.

5.4 Exemple de produse educationale, de vizualizare a datelor stiinti ce si de editare a textelor matematice
Algebrator este un tutorial pentru algebra pre-universitara care poate rezolva probleme ^n maniera pas-cu-pas oferind explicatii context-senzitive. Profesorii pot utiliza Algebrator pentru a crea documente pentru examene, teme de casa, ^ndrumatoare bazate pe un tipic de probleme. Acopera simpli cari de expresii, solutii ale ecuatiilor si gra ce. Acces, baza de date a profesorilor, poate utilizat pentru pregatirea de teste pentru^nvatare, crearea de lectii pentru studenti cu cerinte speciale, suplimenteaza cartile de baza cu^ntrebari interesante, creaza o varietate de materiale pentru clasa. Este usor de utilizat, produce documente cu aspect profesional ^n c^teva minute, contine sute de probleme interesante, face ca testele sa e a simple si sigure ( gura 5.1.a).

85

Figura 5.1: (a) Principiu Acces (b) Suprafeta creata cu Acrospin


Acrospin este un utilitar pentru rotirea suprafetelor create cu Derive pentru Windows ( gura 5.1.b). Axum este un vizualizator de date tehnice si un analizor de date ( gura 5.2). Ofera facilitati de marire si micsorare a gra celor trasate, explorarea gra celor prin rotire, alegerea unei varietati impresionante de tipuri de trasare, exibillitate ^n trasarea axelor si ^n tipurile datelor de intrare, tehnici de luminare si umbrire a gra celor, tehnici de editare a textelor matematice. Poate legat de documente MathCad.

Figura 5.2: Gra ce create cu Axum


Cyclone este un vizualizator de gra ce ^n spatiul tridimensional, produc^nd imagini fotorealistice. Ruleaza sub Windows 95 sau NT 4. Poate crea a imagini a suprafetelor de nite implicit, taie suprafete cu plane paralele cu axele, creaza gra ce dependente de parametrii ce pot schimbati ^n timp-real, trateaza inegalitati prin gra ce tridimensionale, creaza intersect ii de regiuni tridimensionale, exporta imagini^n mediile clasice de procesare a textelor, detalii realistice prin efecte de luminare, umbrire, transparent a ( gura 5.3). Geo1 este ideal pentru student ii^n geometrie. Experimenteaza obiecte din geometria euclideana: triunghiurile si caracteristicile lor (mediane de exemplu), cuadrilatere (de exemplu romb) si caracteristici (de exemplu arii), cercuri si caracteristici (secante, corzi), curbe ( gura 5.4.a). Ruleaza sub Windows 3.1, 95, 98 sau NT. GnuPlot este un program directionat prin comenzi pentru trasarea interactiva a functiilor si datelor ( gura 5.4.b).

86

Figura 5.3: Imagini create cu Cyclone

Figura 5.4: (a) Imagini create cu Geo1 (b) Trasare de suprafete cu GnuPlot
Interactive Math Dictionary este o baza de topicuri matematice ce combina functionalitatea unui dictionar cu interactivitatea (peste 5000 de intrari). Anumiti termeni sunt activi astfel ^nc^t pot investigati prin plotare, a schimbare de parametrii. De exemplu, caut^nd ,,First derivative" se obtin o fea reastra construita si hiperlegata cu motorul computational Maple, o fereastra Maple care permite a sarea, investigarea si explorararea proprietatilor sale. Permite analize de tipul ,,dar daca", gra ca ^n spatiul bi- si tri-dimensional. Opereaza pe Windows 3.X si 95 ( gura 5.5).

87

Figura 5.5: Imagini create cu si pentru Interactive Math Dictionary


MathAssist (Mathematical Assistant) este destinat student ilor ^n algebra, geometrie, analiza, stohastica, algebra liniara. MathPert (Algebra, Pre-Calculus and Calculus Assistant) se concentreaza asupra ^nvatarii matematicii ajut^nd studentul sa lucreze cu succes asupra a problemelor. Studentii adesea ^nt^lnesc di cultati ^n rezolvarea problemelor a deoarece fac greseli triviale care se propaga ^n stadii ulterioare sau uita pasi importanti ai unei strategii. Aceste fapte pot conduce la blocarea procesului de ^nvatam^nt. MathPert este construit pentru a elimina asemenea blocari prin a ajutorul dat student ilor ^n rezolvarea corecta a problemelor. Intefata usor de manipulat plaseaza atentia studentului asupra strategiei corecte de rezolvare a problemelor ( gura 5.6.a). Nu este un generator pasiv de raspunsuri. Se poate alege o problema dintr-un set tipic de probleme, edita o problema si crea una noua. Motorul gra c permite generarea unor gra ce colorate a oricarei expresii algebrice. Se poate compara gra ce a diferitelor expresii, trasa inegalitati si sectiuni conice. MathPert este disponibil^n trei forme: modulul 1 de algebra, modulul 2 ce include algebra si elemente de analiza matematica si modulul 3 care este pachetul complet de algebra si analiza matematica. Topicul de algebra include: functii liniare, sisteme de ecuatii liniare, polinoame, functii polinomiale, factorizare, expresii si ecuatii rationale, exponenti si radicali, ecuatii si functii cuadrice, inegalitati si sect iuni conice. Topicul de elemente de analiza matematica include: algebra avansata, functii loagaritmice si exponentiale, numere complexe, trigonometrie de baza, functii hiperbolice si matrice. Topicul de analiza matematica include: limite, diferentiere, integrare. MathProbe este o unealta de ^nvatare interactica a matematicii, un set de aproximativ 1000 termeni si de nitii ce se constituie ^ntr-o baza de date interactiva. Flexibilitarea si independenta permite utilizatorului sa investigheze, exploreze si experimenteze matematica ^ntr-o atmosfera dinamica. De nitiile sunt organizate alfabetic, si astfel poate folosit drept dictionar, dar si precum calculator simbolic (calcule matematice si statistice rapide), trasare de functii ( gura 5.6.b). MathType lucreaza cu procesoarele de texte pentru Macintosh si Windows pentru a crea ecuatii de calitatea publicatiilor ^n documentele utilizatorului ( gura 5.7.a). Contine peste 280 simboluri matematice. Poate crea siere GIF a

88

Figura 5.6: Interfata (a) MathPert (b) MathProbe

Figura 5.7: Interfata (a) MathType (b) MGCSoft Equation Editor


A ecuatiilor care pot legate la pagini HTML. Are translator pentru TEX, L TEXsi MathML. Suporta colorarea partilor ecuatiilor. Salveaza ecuatii^n siere de tip EPS (Encapsulated PostScript). MathType este o versiune mai puternica si completa a Equation Editor inclus ^n Microsoft Word, Works sau alte produse pentru sisteme de operare Windows sau Macintosh. MathWrite ofera o modalitate simpla de a taia si pasa ecuatii matematice ^ntr-un procesor de texte. Ofera de asemenea o serie de simboluri matematice. MathView este un mediu de calcul algebric simbolic si trasarea solutiilor, destinat scolilor. Este compatibil cu Theorist. Versiunea comerciala MathPlus include MathView si Theorist. Este construit ^n ideea investigarii interactive a relatiilor matematice. Nu trebuie ^nvatat nici un limbaj de programare, astfel ^nc^t corectarea erorile de sintaxa nu mai este o poblema a a utilizatorului. Este capabil sa efectueze simpli cari, expansiuni, colectari de termeni, factorizari, izolari de termeni, transformari, algebra vectoriala si matriceala, diferentieri, integrari, sume, produse, permite de nirea unor reguli matematice, rezolva numeric ecuatii diferentiale ordinare, traseaza gra ce ^n cordonate carteziene, polare, logaritmice, cilindrice, sferice ( gura 5.8), ani-

89

Figura 5.8: Calcule si gra ce cu MathView

meaza gra ce bi- si tri-dimensionale, traseaza gra ce pe baza de tabele, roteste gra cele tridimensionale, are butoane pentru comenzile des utilizate, nu necesita capabilitati hardware deosebite. Merlyn este construit pentru oricine care lucreaza cu ecuatii.Se pot crea documente care combina text si ecuatii. Manipuleaza si rezolva ecuatii. Se pot face simpli cari, combinari, evaluari, substitutii, muta termeni, integra, diferentia, lucra cu matricele, face conversii de unitati etc. Produce documente profesionale de calitatea publicatiilor. Se pot crea si manipula ecuatii ce contin: functii, limite, serii de puteri, inegalitati, derivate, integrale, functii trigonometrice, functii exponentiale si logaritmice, factoriale, matrice, numere complexe. MGCSoft Equation Editor ( gura 5.7.b) Este un utilitar pentru editarea ecuatiilor matematice si caracterelor speciale. Scris pentru Windows 95 si NT, programul necesita un spatiu mic pe disk si este usor de utilizat. MPM Funktions-Plotter este o unealta matematica pentru trasarea si analiza functiilor matematice date prin expresii matematice. Este scris ^n Java si de aceea poate utilizat pe care exista JDK 1.2 sau JRE 1.2 ce contine Swing 1.1 (de exemplu Microsoft Windows 95/98/NT, MacOS, Linux, Sun Solaris etc). Dupa introducerea functiei matematice, o traseaza ^n sisteme de coordonate de nite de utilizator, deriveaza termenii numeric sau simbolic, calculeaza zerouri, extreme, integrale, intersect ii sau interpoleaza curbe pe baza unor puncte. Scientific Word/Workplace sau Scientific Notebook Software ( gura 5.9) de la TCI Software este un procesor de texte si simboluri matematice pentru Windows 95 si NT ce poate crea documente atractive ce contin text, matematica si gra ce. Calculeaza solutiile unor ecuatii aritmetice simple sau ecuatii diferentiale complexe. Calculele simbolice si numerice se fac pe baza legaturii cu sistemul de calcul algebric Maple. O versiune speciala si biblioteca Maple sunt incluse ^n mediu astfel ^nc^t se pot trata probleme aritmetice, a algebrice, de calcul elementar, algebra liniara, etc. De aceea este considerat un procesor de texte stiinti ce. Calculele se pot efectua cu unitati zice ca metrii, kilograme, secunde etc. Importa expresii si date de la calculatoare de buzunar A precum Casio, Hewlett Packard. Ofera iesiri de texte ^n format L TEX. 90

Figura 5.9: Editare de texte si calcule cu Scientific Word

Figura 5.10: Analiza datelor cu ajutorul S-Plus


S-Plus combina tehnici de analiza so sticata a datelor cu o interfata intuitiva, oferind astfel acces unei mase mari de utilizatori la tehnicile de vizualizare si analiza a datelor ( gura 5.10). Fiecare set de date, functie sau model de analiza este tratat ca un obiect, ceea ce face usoara sarcina de comparare a modelor. Se pot construi modele variate care se potrivesc cu datele experimentale. Incorporeaza limbajul S, orientat obiect si creat special pentru explorarea si analiza datelor. Include peste 1650 de functii dar permite si crearea unor noi functii si metode care satisfac cerintele utilizatorului. A TEX(cu cea mai cunoscuta versiune a sa L TEX), este un program so sticat, din domeniul public, pentru producerea unor texte matematice^n conditii matematice. Exista versiuni pentru sistemele de operare Unix, Dos, Windows. A Aceasta carte de exemplu a fost editata ^n L TEX. Cunoscutul Microsoft Word, de tip WYSIWYG (What You See Is What You Get), din pachetul Microsoft O ce contine un editor de texte matematice usor de manipulat. XploRe este un mediu interactiv de calcul statistic ce combina procedurile statistice clasice cu gra ca interactiva si so sticata. Scopul sau este explorarea si analiza datelor precum si dezvoltarea de noi tehnici. De aceea poate constitui o baza pentru analiza statistica, cercetare si ^nvatam^nt. Permite incorporarea a de noi metode pe baza unui limbaj de nivel ^nalt, propriu si orientat spre

91

obiecte. Dintre pachetele disponibile ^n domeniul public, cu scopuri educationale, se remarca: Euclid, Geolog, aMath, Lesson Player, Formula Wizard, BlackBox Mathematic Expert, Skill-Oriented Algebra, Math Problem generator, Math Table Generator, Algebra - One On One, Elementare Grundlangen der Mathematik, Science Fair, Professor Weissman's Algebra Tutorials, Polynomial Calculator, Rurc, Prof. Timo Salmi Educational Games, Logical Games, SolvEq, Factoring, Math Programs, Mat-X, Basic Trigonometry, Sat Mathematics, Practicing Math, Math Assault, Binomial, Brain Builder - Math Edition, Mather, Math Tower, Mathematic Practice, Sir AddaLot's Mathematic Adventure, MathWorkout, MathCastle, Geography/Math Shop, Big Math Attack, Math Tutor and Helper, PairIt, Mathematico, 3D Ten Thousand, WinArc, Dimensia 3D, Big X vs O, Mandelbrodt Set Explorer, Zplot, A Fractal Experience, WinGeom, Anyangle, Vector, Geometry, Two D Maps, Shapes, Equation Grapher, 3D Graph, Graphmatica, CurveExpert, WinPlot, MGrapher, The Xcredible Math Machine, XYSee, MathPlot, PowerGraph, Colourful Mathematics, Stefi, Expression Calculator, Virtual Calc, Solutions, Ten Thumbs Typing Tutor, Advanced Speed Typing, The String Game, Weights & Measures, Imperial Metric Converter, Roman Numbers, PiW, Primes, Mini-Computer, Prime-Number Generator etc.

92

6. Exemple de produse
6.1 Axiom
Axiom este un sistem de calcul stiinti c construit pentru necesitati de programare stiinti ca, de la simbolica, la numerica si gra ca. Are o biblioteca numerica ce include operatii pentru algebra liniara, solutii de ecuatii si functii speciale. Iesirea unui calcul poate convertita ^n Fortran pentru a utilizata ^n calcule numerice. Pot vizualizate formule simbolice sau trasate gra cele unor seturi de valori numerice. Gra cele pot translatate, rotite, marite, colorate, luminate, A umbrite etc. Poate generata o copie PostScript a gra celor si iesiri L TEX. HiperDocumentul ofera ajutor ^n-linie, exemple, tutorial. Limbajul de programare permite de nirea propriilor functii. Se va crea o versiune optimizata, compilata a functiei de nite de utilizator (compilata: functia este translatata ^n cod masina la primul apel al acesteia; optimizata: anumite transformari sunt efectuate asupra codului pentru a rula mai rapid). O recursie este transformata de Axiom ^n iteratie. O varietate de structuri de date sunt disponibile pentru utilizare: siruri, liste, vectori, multimi, tabele, siruri in nite (la iesire se a seaza numai c^teva a elemente initiale, dar termeni oarecare pot calculati la cerere). Axiom ofera diferite structuri de date agregate precum structuri mutabile (liste ciclice, matrice exibile, dictionare, siere de intrare) pentru stocarea e cienta a structurilor (precum vectori pe biti). Seriile si sirurile nu presupun calcularea tuturor termenilor. Structurile matematice variaza de la cele simple (polinoame, matrice, integrale) la cele mai exotice (ideale, algebre Cli ord). Majoritatea structurilor permit constructia unor tipuri arbitrare complicate. Axiom are at^t un limbaj interactiv pentru interactiunea cu utilizatorul a si un limbaj de programare pentru construirea modulelor de biblioteca. O facilitate convenabila pentru calcul simbolic este recunoasterea sabloanelor. Se poate utiliza comanda rule pentru a descrie o transformare ^ntr-o forma echivalenta. Utiliz^nd siere de intrare se pot crea biblioteci proprii de reguli a de transformare relevante aplicatiei utilizatorului, care aplica selectiv regulile necesare. Toate componentele din biblioteca algebrica a Axiom sunt scrise ^n limbajul de biblioteca Axiom. Acest limbaj este similar cu limbajul interactiv cu exceptia protocoalelor pe care autorii sunt obligati sa le urmeze. Biblioteca Axiom poate extinsa de catre utilizatori folosind un limbaj comun. Codul de biblioteca, precum codul interpretor, este compilat^n cod binar masina pentru a rula e cient. Codul biblioteca este descris ^n termeni de baze de date de proprietati algebrice. Integratorul Axiom ofera un raspuns daca acesta exista; daca nu exista, ofera o demonstratie ca nu exista raspuns. Rezultatele produse de un rezolvitor

93

utilizeaza acelasi algoritm intern, desi rezultatele pot a sate diferit (^n numere rationale, serii de puteri, expresii cu radicali); algoritmul intern lucreaza cu ecuatii peste orice domeniu. Precum Modula 2, Pascal, Fortran sau Ada, limbajul de programare necesita o veri care de tip stricta. Spre deosebire de aceste limbaje, tipurile ^n Axiom sunt obiecte dinamice: sunt create ^n timpul rularii ca raspuns la comenzile utilizatorului. Declaratiile pot ^n general omise pentru tipuri comune ^n limbajul interactiv, interpretorul utiliz^nd o intefatare de tip pentru deducerea a tipului unui obiect dat de utilizator. Tipurile de baza sunt numite domenii de calculul (domains). Acestea sunt de nite sub forma: Name(...):Exports==Implementation numele ind de exemplu Integer, Float, String. Pot zero sau mai multi parametrii; de exemplu Matrix(Integer) desemneaza clasa matricelor cu elemente numere ^ntregi. Partea Export speci ca operatii pentru crearea si manipularea obiectelor domeniului. De exemplu, tipul Integer exporta constantele 0, 1, operatii ca +, -, *, odd. Partea Implementation de neste functiile care implementeaza operatiile exportate ale domeniului. Fiecare obiect Axiom apartine unui unic domeniu (adica tip), dar tipului unui obiect nu este unic. De exemplu, ^ntregul 7 este de tip Integer, dar este si NonNegativeInteger, PositiveInteger si posibil orice subdomeniu al domeniului Integer. Un subdomeniu este un domeniu cu un predicat de membru. De exemplu, PositiveInteger este un subdomeniu a lui Integer cu predicatul ,,>0". Partea Export a unui subdomeniu listeaza un subset a exportului domeniului. Partea Implementation ofera optional de nitii speciale pentru obiectele subdomeniului. Domeniile si subdomeniile ^n Axiom sunt ele ^nsele obiecte care au tip. Tipul unui domeniu este numit categorie. Categoriile de nesc proprietati algebrice pentru a asigura corectitudinea matematica. Acestea asigura de exemplu ca matricele de polinoame sunt corecte, dar matricele de siere de intrare nu. Prin aceste categorii, programele pot descoperi ca polinoamele de fractii continue au multiplicarea comutativa, pe c^nd polinoamele de matrice nu. Caa te-goriile permit ca algoritmii sa e de niti ^ntr-un mod natural. De exemplu, un algoritm poate de nit sa rezolve ecuatii polinomiale peste orice domeniu. Categoriile sunt descrise sub forma Name(...): Category == Exports. Exemple sunt Ring, Module(R), MatrixCategory(R,row,col). Partea Exports de neste un set de operatii. Ring exporta operatiile 0, 1, +, -, *. De nitia Matrix(R:Ring) cere ca parametrul R sa e un inel. Astfel matricele de polinoame sunt permise, iar matricele de siruri si liste nu (sirurile si listele nu apartin unui inel). Categoriile formeaza ierarhii (tehnic, grafuri aciclice). O categorie desemneaza o clasa de domenii. Fiecare domeniu trebuie asertat categoriei careia ^i apartine. Categoriile protejeaza numele prin context, fac^nd posibila utilizarea aceluiasi a nume ^n diferite contexte. Categoriile au un rol important ^n obtinerea unui cod obiect e cient prin tehnici de optimizare pentru tipuri speci cate partial (de exemplu, operatii cu vectori de elemente din R, pot codate chiar daca R este necunoscut). Matricele unidimensionale, spre deosebire de liste sunt in exibile ind im94

plementate utiliz^nd un bloc x de stocare. Avantajul lor este acela ca ofera a timp de acces egal la orice element. Exemple sunt Vector, String, Bits. O matrice exibila este o ^ncrucisare ^ntre liste si matrice uni-dimensionale: precum matricele ocupa un bloc x la stocare, dar acest bloc se extinde c^nd a se umple (un nou bloc, mai mare, este alocat), sau se micsoreaza daca este prea mare. Matricele exibile sunt utilizate pentru a implementa heap-uri, structuri organizate astfel ^nc^t optimizeaza insertia si extract ia elementelor a maxime. Operatia de extract ie returneaza elementul maxim din heap, distruge informatia si se reorganizeaza astfel ^nc^t urmatorul element este pregatit pena tru extragere. O multime este o colectie nita de elemente ^n care duplicarea si ordinea nu sunt relevante; o multimultime este un set care tine evidenta numarului de duplicari a valorilor. O tabela este un set de perechi cheie-valoare si este o generalizare a multimultimilor. O ^nregistrare este o colectie neomogena de obiecte si consta ^ntr-o multime de selectori numiti care pot utilizati pentru a accesa compontele sale. O uniune este o structura de date utilizata c^nd a obiectele au tipuri multiple. O functie poate pasata ca argument al altei functii.

Exemple de comenzi ^n Axiom:


integrate(1/(x**3*(a+b*x)**(1/3)),x) solve(x**49-49*x**4+9=0.1.e-49) radix(10**100,32) roman(1998) draw(5*besselJ(0,sqrt(x**2+y*82)),x=-20..20,y=-20..20)

Rezutatul acestor comenzi este prezentat ^n gura 6.1. Alte exemple sunt:
p(0)==1; p(1)==x; p(n)==((2*n-1)*x*p(n-1)-(n-1)*p(n-2))/n; p(10) coefficient(p(90),x,90) D(p(i),x) for i in 1..] -- corect, sir infinit series(log(cot(x)),x=%pi/2) coefficient(%,50) matrix x+%i,0], 1,-2]]; inverse(%) sinCosExpandRules:=rule sin(x+y) == sin(x)*cos(y)+sin(y)*cos(x) cos(x+y) == cos(x)*cos(y)-sin(x)*sin(y) sin(2*x) == 2*sin(x)*cos(x) cos(2*x) == cos(x)**2-sin(x)**2 sinCosExpandRules(sin(a+2*b+c)) S:= 3*x**3+y+1=0,y**2=4]; solve(S,1/10**30) radicalSolve(S) R: Ring power: (R, NonNegativeInteger): R -> R; power(x,n) == x**n power(3.0,2); power("oxford",2)

95

Figura 6.1: Rezultate ^n Axiom


y: Integer; y:=2/3 -- produce eroare p:=r**2+2/3; p::Fraction Polynomial Integer factorial 10; factor(120); divide(125,7); quatern(3.4,5.6,2.9,0.1) draw(cos(5*t/8),t=0..16*%pi, cordinates==polar) draw((x,y) +-> real atan complex(x,y), -%pi..%pi,-%pi..%pi, colorFunction == (x,y) +-> argument atan complex(x,y)) digits(40); exp(%pi *sqrt 163.0); conjugate (2/3 + %i)**3 decimal(1/3) -- reprezentare cu perioada continuedFraction(6543/210) y: IntegerMod 6 := 5; y**3 a:=rootOf(a**5+a**3+a**2+3,a); (a+1)**10 u:= 1,-7,11]; first rest rest u - rezultat 11 (rest-leg.urm.nod) concat!(u, 9,1,3,-4]); lastnode:=rest(u,3) setrest!(lastnode,rest(u,2)): u - lista cu 2 nod repetate infinit f:=flexibleArray 2,7,-5]; insert!(flexibleArray 11,-3],f,2) h:=heap(-4,7,11,3,4,-7) - rezultat 11,4,7,-4,3,-7] extract!(h) while not empty?(h)] - rezultat 11,7,4,3,-4,-7] binarySearchTree 5,3,2,9,4,7,11] -rezultat 2,3,4],5, 7,9,11]] multiset x rem 5 for x in prime(2,1000)]-{0,40:1,47:2,42:3,38:4} t: Table(Integer,Integer): = empty() howMany(k) == (n:= search(k,t); n case "failed" => 1; n+1) for p in primes(2,1000) repeat (m:=p rem 5; t.m:=howMany(m); t daniel: Record(age:Integer,salariu:Float); daniel:= 28,620000.5]; daniel.salary:= 840000.0

96

dog: Union(licenceNumber: Integer, name:String); dog:="Azorel" vm:=matrix( 1/(i+j-x) for i in 1..4] for j in 1..4]) factor determinant vm fact(0) == 1; fact(n) == n*fact(n-1); fact(50) fac(n) == if n <3 then n else n * fac(n-1) fa(n) == (a:=1; for i in 2..n repeat a := a*i; a) permMat(n,i,j) == m := diagonalMatrix (if i = k or j = k then 0 else 1) for k in 1..n] m(i,j) := 1; m(j,i) := 1 p := permMat(4,2,3) t : (Float -> Float, Float) -> Float t(fun,x) == fun(x)**2 + sin(x)**2; t(cos, 5.2058) groupSqrt := rule(sqrt(a) * sqrt(b) == sqrt(a*b)) a := (sqrt(x)+sqrt(y)+sqrt(z))**4; groupSqrt a limit((1+k/x)**x,x=%plusinfinity); limit(sqrt(y**2)/y,y=0) complexLimit(exp(-1/x**2),x=0) - rezultat "failed" series(sin(a*x),x=0) series(n +-> (-1)**((3*n-4)/6)/factorial(n-1/3),x=0,4/3..,2) f := exp exp x; D(f,x); D(f,x,4) g := sin(x**2+y); D(g,y); D(g, y,y,x,x]) F := operator ; x:= operator ; y:= operator a := F(x z, y z, z**2) + x y (z+1); dadz:= D(a,z) eval(eval(dadz, , z +-> exp z), , z +-> log(z+1)) integrate(1/(x**2+a),x); complexIntegrate(1/(x**2+a),x) integrate(log(1+sqrt(a*x+b))/x,x) -rezultat:copie(sol.necun.) y:= operator 'y; deq:= (x**2+1)*D(y x,x,2)+3*x*D(y x, x)+ y x =0 solve(deq, y, x) x:= operator 'x eq1 := D(x(t),t) = 1 + x(t)**2; eq2 := D(y(t),t) = x(t)*y(t) seriesSolve( eq2,eq1], x,y], t=0, y(0)=1, x(0)=0]) S(t) == x**2-2*y**2-t,x*y-y-3*x+5]; solve(S(19), 1/10**20) complexSolve(S(19), 10.e-20); radicalSolve(Sa), x,y]) eqns:= x*82-y+z,x**2*z+x**4-b*y,y**2*z-s-b*x]; solve(eqns, x,y])

6.2 Derive
Derive este un program de calcul simbolic ideal pentru algebra, trigonometrie si calcul elementar. Derive aplica reguli din anumite domenii precum algebra, trigonometrie, si calcul matriceal pentru rezolvarea unei varietati mari de probleme matematice. Abordarea nenumerica depaseste capacitatile multor pachete de statistica si rezolvare de ecuatii care utilizeaza doar tehnici de aproximare numerica. Are capabilitati de trasare ^n spatiul 2D (^n coordonate carteziene, polare, sau parametric) si 3D. Cerintele de sistem sunt Windows 95, 3.1 sau NT si cel putin 8 MB memorie.

97

Aritmetica: aritmetica rationala exacta, aritmetica aproximativa cu precizie ajustabila, notatii stiinti ce, rationale, decimale, baze diferite pentru numere, factorizare ^ntregi, factoriale, module, cel mai mare divizor comun, trateaza numere complexe si in nite, recunost e numerele prime,numere Fibonacci, Bernoulli, Euler, si Catalan, conversie de unitati, de exemplu metrice, constante zice fundamentale cu precizie ^nalta; Algebra: simpli care simbolica a expresiilor, expansiune si factorizare polinomiala, expansiune ^n fractii si numitor comun, reducerea valorilor complexe la forme rectangulare, declaratii ^ntregi, reale, complexe, si nescalare, nume de variabile grecesti si latine, substitutii de variabile si subexpresii, rezolvare de ecuatii algebrice si numerice, rezolvare de sisteme de ecuatii liniare, algebra booleana si tabele de adevar; Gra ca 2D: plotari explicite, implicite, si parametrice, trasari utiliz^nd coora donate rectangulare sau polare, speci carea rangului de trasare utiliz^nd a o cutie de marire, trasare de curbe spatiale si functii cu valori complexe, urmeaza trasarea liniilor cu o cruce ^n modul urma, trasare cu marire trasari de secvent e ^n mod auto-scala, speci carea culorilor de trasare si rata aspectuala, optiuni pentru numararea si etichetarea axelor, titluri de gra ce; Gra ca 3D: trasari de cadru de s^rma pentru functii de doua variabile, asa cunderea optionala a liniilor, setarea pozitiei ochiului si a centrului de proiectie, mariri, micsorari, scalare verticala automata, speci carea numarului si culorilor liniilor de grila, rotatii ale gra celor ^n timp real ; Analiza: limite simbolice nite si in nite, derivata prima si de ordin n, partiale, antiderivative si integrale de nite, integrare numerica aproximativa, produse si sume nite si in nite, curbaturi, tangente, si cercuri osculatorii, diferentiere implicita si parametrica, aproximari de serii Taylor si Fourier, lungime de arce, arii, si volume, transformari Laplace, rezolvarea exacta a ecuatiilor diferentiale ordinare si de ordin secund, aproximari RungeKutta pentru sisteme de ecuatii diferentiale ordinare; Vectori si matrice: elemente simbolice sau numerice, utilizeaza notatia de indice standard, produse scalare si vectoriale, transpuse, determinanti, inverse, urme, reducerea matricelor la forme speciale, vectori si valori proprii, algebra matriceala si vectoriala necomutativa, calcul vectorial diferential si integral, functii e ciente pentru operatii cu vectori si matrice, algebra tensoriala si pachet pentru analiza, cea mai buna aproximare prin cele mai mici patrate, uniuni, intersect ii, puteri de multimi; Functii: exponentiale, trigonometrice, si hiperbolice, unghiuri speci cate ^n grade sau radiani, variabile complexe sau continue, probabilitati, statistica, si nante, functii speciale (Zeta, Bessel, hipergeometrice, etc.), generator de numere aleatoare; Programare: functii matematice de nite de utilizator, structuri de control conditionale, operatori booleani si relationali, functii recursive si iterative, extragere de termeni, factori, variabile libere de expresii, operatori 98

Facilitatile oferite de Derive sunt urmatoarele:

pentru declaratii de domenii si variabile de stare, aplicatii de functii pe vectori; Intrari/Iesiri: salvari si ^ncarcari de sesiuni, facilitati pentru tratarea documentelor de iesire, imagine preview a expresiilor si gra celor, include adnotari si calcule de timp ^n documente de iesire, tiparire de gra ce pe imprimante alb/negru sau color, copiere imagine ecran ^n clipboard ^n format bitmap, copiere expresii ^n Windows Clipboard ^n format text, ^ncarcare si analiza sierelor de date numerice, genereaza siere program C, Fortran, Pascal, si Basic; Interfata: tastatura sau mouse pentru selectarea butoanelor si comenzilor de meniu, deschide mai multe ferestre pentru algebra si trasari de gra ce, usor de introdus si editat expresii, nume de variabile ^n greceste si simboluri matematice prin select ia din cele disponibile, editarea intrarilor matricelor, expresii a sate de baza notatiilor matematice standard 2D, punerea ^n evidenta a subexpresiilor, extragere si substitutie, punerea ^n evidenta a expresiilor multiple, mutarea si renumerotarea expresiilor^ntro fereastra sau ^ntre ferestre, format expresii condensat, card de referinta rapida si on-line help extensiv, exemple pas-cu-pas cu imagini ecran.

Figura 6.2: Trasare de gra ce cu Derive

Zona de lucru este rezervata expresiiloe editate de utilizator sau ^ncarcate din siere, a rezultatelor a sate si a reprezentarilor gra ce. Zona meniurilor este alcatuita din subzona comenzilor, subzona mesajelor si subzona cu informatiile despre activitatea programului. Prima contine comenzile disponibile, respectiv: Author, Build, Calculus, Declare, Expand, Factor, Help, Jump, Solve, Manage, Options, Plot, Quit, Remove, Simplify, Transfer, Move, Window, Approx. A doua subzona a seaza rezultatul operatiilor sau ce se asteapta ca utilizatorul sa 99

Structura unui document

faca. In subzona a treia sunt a sate numele programului, procentul de memorie disponibil, tipul zonei de lucru, etc. Comanda Author permite editarea unei expresii de catre utilizator. Expresia este a sata^n zona de lucru si primeste un numar la care se poate face ulterior referire. prin #numar. Implicit o comanda actioneaza asupra formulei selectate din zona de lucru.

Functii de calcul simbolic


Sunt urmatoarele:
Functii P Comenzi sum(f,i,i0,i1), prod(f,i,i0,i1) limx"a f(x) lim(f,x,a), lim(f,x,a,1), lim(f,x,a-1) dif(f,x), dif(f,x,n) int(f,x), int(f,x,a,b) taylor(f,x,a,n) solutia ecuatiei f(x) = 0 solve(f,x)
i1 f(i), Qi1 f(i) i=i0 i=i0 limx!a f(x); limx#a f(x); f 0 (x); f (n) (x) R f(x)dx; R b f(x)dx a Pn f (k)(a)(x ? a)k=k! k=0

Exemple de comanzi si rezultate


Author Simplify Author Expand Factor Author Simplify Author Simplify Author Author Simplify Author Simplify Author Simplify Author Author Author Author Simplify 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
4^(1/2)+3

7x6y + 21x5y2 + 35x4y3 + 35x3y4 + 21x2y5 + 7xy6 7xy(x + y)(x2 + xy + y2 )2


ln(a) -e/2
lim((a^x-1)/x,x,0) lim(((1+x)^(1/x)-e)/x,x,0)

(x+y)^7-x^7-y^7

(1+x)^(1/x)

dif(#10,x)

int(cos(x),x) sin(x)

1 1 ? ln(x + 1) (x + 1) x 2 x(x + 1) x

int(1/(x^4+1),x,-inf,inf)

separate(f,g,x,y,k):=solve(int(1/g,y)-int(f,x)-k,y) f:=tan(x) g:=2-y separate(f,g,x,y,k)

2 2

y = e?k cos x + 2]

100

Author 22: y * (3*x^2-y^2) Plot 23: #22 " gura 6.2"

6.3 Macsyma
Macsyma este utilizat pentru matematica simbolica, numerica si gra ca

( gura 6.3).

Figura 6.3: Suprafete realizate cu Macsyma

Comparatie cu Maple Spre deosebire de Maple, exemplele si demonstratiile pot lansate din help. Help-ul ^n-linie contine peste 1200 probleme comune cu descriere, exemple si solutii ce acopera aproximativ 100 de topice. Ofera sabloane pentru comenzi care pot usor completate pe baza explicatiilor ecarei intrari. Macsyma ^ncarca automat orice biblioteca necesara executiei oricarei comenzi. Ordoneaza termenii ^n ordinea exponentilor. Structura unei expresii poate usor vizualizata. Asigneaza un nume de linie la ecare rezultat, astfel ^nc^t acesta poate recuperat, chiar daca nu i s-a dat un nume de catre a utilizator. Macsyma poate exporta gra ca ca siere meta le Windows (Maple poate exporta doar bitmap-uri). Macsyma este mai performant dec^t Maple ^n ceea a ce priveste substitutiile si testul de divizare cu zero. Notatiile matriceale si
101

se poate face cu respectarea unor reguli. Nici un alt produs nu poate rezolva mai multe ODE-uri dec^t Macsyma a care ofera metode pentru sisteme liniare ce includ serii Taylor si metode de perturbare a seriilor. Rezolvitorul numeric al Macsyma include si cazul ecuatiilor diferentiale de tip rigide. Rezolva ecuatii integrale de ordin unu si doi cu limite xe sau variabile de integrare (Maple nu are facilitati similare). Cu Macsyma se pot gasi solutii simbolice a ecuatiilor cu derivate partiale bazate pe simetrii. Produsul companion al Macsyma, PDEase2D citeste ecuatiile cu derivate partiale (PDE-uri) descrise cu Macyma si le rezolva numeric cu metoda elementului nit. Se pot rezolva probleme statice si dinamice de tip eliptic, parabolic, hiperbolic, incluz^nd probleme de tip mixt. Are un generator aua tomat de grila si un analizor de erori. Maple nu are metode pentru rezolvarea PDE-urilor numeric. Macsyma recunoaste 20 de sisteme de coordonate ortogonale prin nume. Poate calcula si simpli ca expresii vectoriale ^n doua si trei coordonate si sa le transforme ^n coordonate particulare. Ofera calcul indicial tensorial si calcul componentelor tensoriale. Include derivate de ccordonate, derivate covariante, derivate exterioare, derivate Lie, tipuri variate de curbaturi, geometrie Riemann-Cartan. Macsyma are capabilitati de recunoastere a sabloanelor bazata pe reguli, incluz^nd reguli care se aplica automat si care se pot seta ^nainte sau dupa a simpli care si reguli aplicate de utilizator (utilizatorul poate desemna reguli ^n orice ordine ^n cadrul unor scheme variate de iterare a regulilor). Pachetul Gentran al Macsyma este cel mai avansat translator numeric de limbaje din majoritatea pachetelor matematice. Acesta, spre deosebire de cel al Maple, poate translata de nitii de functii si subrutine, cicluri de iteratii, conditionale de tip if-then-else, etichete de instructiuni si instructiuni de tip go, precum si matrice. Se pot insera puncte de oprire ^ntr-un program, la care utilizatorul poate introduce comenzi interactiv si sa continue apoi executia. Se pot obtine valori ale variabilelor.

Macsyma ^ntreaba utilizatorul asupra conditiilor de integrare. Diferentierea

comenzile corespunzatoare sunt usor de utilizat. La integrarea monoamelor,

Comparatie cu

Mathematica La introducerea unor propozitii precum ,,How can I nd the roots of my polynomial?" Macsyma raspunde prin indicatii executabile asupra modalitatilor de gasire a diferitelor radacini. Utilizatorul poate selecta indicatia care se potriveste problemei sale si aplica comanda sugerata. Limbajul Macsyma este mult mai usor de ^nteles dec^t cel al Mathemaa tica. Se pot edita peste 200 de atribute ^ntr-un gra c tridimensional tipic utiliz^nd dialogurile cu utilizatorul. Coordonatele unui punct dintr-un gra c a 3D pot a ate prin pointare cu mouse-ul. Componenta DataViewer permite a sarea, editarea, ^mbunatatirea si exportarea seturilor mari de date numerice. Macsyma ofera mai multe comenzi pentru simpli cari dec^t Mathematica. a

102

Variabilele implicit sunt reale pentru ca software-ul este destinat inginerilor care utilizeaza mai mult variabilele reale dec^t cele complexe; se pot trata a ^nsa si variabile complexe. Se pot evalua integrale cu functii discontinue, ceea ce Mathematica nu poate face. Baza de proprietati este mai completa ^n Macsyma (de exemplu: odd, proprietati matrice). Mathematica poate rezolva doar sisteme de ecuatii liniare cu derivate partiale de prim ordin si nu poate rezolva numeric ecuatii cu derivate partiale si nu are pachet pentru calcul tensorial. Cu pachetul de calcul vectorial se pot de ni sisteme de coordonate ortogonale, dar nu se pot simpli ca operatori vectoriali (precum ^n Macsyma). Macsyma ofera mai multa algebra liniara numerica si simbolica dec^t orice a produs. Contine toate functiile matriceale din Matlab, si ofera un translator Matlab la Macsyma pentru sierele cu functii. In plus fata de facilitatile speci cate la paragraful anterior, ^n translatarea surselor, Macsyma efectueaza o optimizare a operatiilor ^n codul translatat, ceea ce Mathematica nu face. Macsyma poate compila toate instructiunile ^n binare. Mathematica poate compila doar expresii numerice, nu programe. Mathematica are un pattern matcher mai puternic dec^t Macsyma, dar a este mai greu de utilizat. Macsyma balanseaza cele trei tehnologii: pattern matching, programarea procedurala si baze de date. Mathematica se bazeaza mai mult dec^t alte produse de software matematice pe pattern matching, utia lizarea acestei tehnici ind adesea neadecvata.

Exemple de comenzi si rezultate:


(c1) (c2) (d2) (c3) cos (x+y) $ trigexpand (%) cos(x) cos(y) - sin(x) sin(y) ratexpand(x^2 + x + 1) ^5

(c4) subst ( 5=2, 5*a-5*b) (d4) 2 a - 2 b (c5) subst(x=0,sin(x) /(x+sin(x) ) Division by 0 (c6) limit(sin(x)/(x+sin(x), x,0) (d6) 1/2

(d3) x10 + 5x9 + 15x8 + 30x7 + 45x6 + 51x5 + 45x4 + 30x3 + 15x2 + 5x + 1

Alte exemple de comenzi:


(c10) (c11) (c12) (c13) (c14) (c15) (a+%i*b) ^ (%i*d); polarform(%) m: a, b ; c, d] $ m (a : 1, b : 2, c : 3, d : 4 ) $ ev (m) eigenvalues_by_schur ( ev (m) ) a : 1000 $ eigenvalues_by_schur (ev (m) ) a: a1; a2; a3 ] $ b: b1, b2, b3] $ ident (3) - a. b

103

(c16) (c17) (c18) (c19) (c20) (c21) (c22) (c23) (c24) (c25) (c26) (c27) (c28) (c29) (c30) (c31) (c32) (c33) (c34) (c35) (c36) (c37) (c38) (c39) (c40) (c41) (c42) (c43) (c44) (c45) (c46) (c47) (c48) (c49) (c50) (c51) (c52) (c53) (c54)

integrate (x^n, x) assume (not equal (n,-1) ) $ integrate (x^n, x) depends(f, x,y,t] )$ gradef(x,t,alpha)$ gradef(y,t,beta)$ diff (f, t) integrate(1/(x^2+b*x+c) ,x); integrate(exp(-a*t ),t,0,inf) provisos; 0^0 tellsimp(0^0,s a),simp= false$ 0^0 0^0, a=1; matchdeclare( i,j],integerp)$ tellsimpafter(s i]^^2,1) $ tellsimpafter(s i].s j],-s j].s i],i>j)$ compile_rule(all)$ factor(expand(sum(s i],i,0,9) ^ ^ 5)) f():=block( y],y)$ expr1:f(); expr1-y f(x):=if x<0 then -1 else if x>0 then 1 else 0$ sum(f(i), i, -2, 8); sqrt(x^2) declare (z, complex) $ sqrt(z^2) assume (x<0) $ sqrt (x ^ 2) 1/cot (%pi/24) (x^2*y^2+2*x*y^2+y^2-x^2-2*x-1)/(x+y) factor(d34), dontfactor : x] ratsimp (d34), algebraic : true facsum (d34,y) (-1) ^ (1/3) domain : complex$ (-1) ^ (1/3) (-1) ^ (1/3), m1pbranch:true plot (x^ (1/3), x, -1, 1) diff(abs(x), x) integrate(signum(x),x); integrate(log(abs(x)),x) delint(f(x)*delta(x-a), x) declare(n,integer,en,even,od,odd)$ (-1)^en, (-1)^od] sin ( n * (n+1) / 2 * % pi ) declare( a, ],nonscalar,a,antisymmetric,s,symmetric) $ a ^`; s ^ ` declare(evf,evenfun,odf,oddfun)$ evf (-x) ,odf (-x)] declare (g,idempotent,h, involution)$ g(g(x)),h(h(x))] a:b$ b:2$ a ; eval(a); normperp(x,y,z):=( y-z,z-x,x-y],%%/sqrt(%%.%%))$ cross(v1,v2):=det(matrix(args(ident(3)),v1,v2))$ tubulate(vec,var,lo,hi,steps,rad,n):= block( stp:(hi-lo)/steps,faces: ],f0:subst(lo,var,vec),f1, prp1,t,prp2,df,dt:2.*%pi/n,v:lo,loop,oloop], thru steps+1 do if f0#(f1:subst(v:v+stp,var,vec)) then (prp1:apply('normperp,df:f1-f0), cross(prp1,df), prp2:%%/sqrt(%%.%%), t:0, loop:makelist(f0+rad*(cos(t:t+dt)*prp1+sin(t)*prp2),i,0,n), if listp(oloop) then for i:1 thru n do

104

push( oloop i],loop i],loop i+1],oloop i+1]],faces), f0:f1,oloop:loop),plotfaces(faces))$ (c55) trefoil(rad):=( cos(2*t),sin(2*t),0], tubulate(%%+rad*(%%*sin(3*t)+ 0,0,cos(3*t)]),t,0,2.*%pi, plotnum0:100,rad,plotnum1:40))$ (c56) trefoil(1/3)

Rezultatul ultimelor trei comenzi este inclus ^n gura 6.3.

6.4 Maple

Maple este unul dintre numeroasele medii care permit calcule matematice sim-

bolice si numerice. Alaturi de Mathematica, Matlab si MathCad este, ^n acest moment, unul dintre cele mai cunoscute CAS-uri (Computer Algebra System). Diferitele versiuni (^n 1999 varianta curenta ind Maple V Release 5.0) s-au dezvoltat simultan pe platforme Unix, Dos, Windows, iar sursele programelor utilizatorilor sunt portabile. Facilitatile oferite sunt similare cu cele ale mediilor Mathematica si Matlab, astfel ^nc^t odata cunoscut mediul Maple, a utilizatorii pot usor trece de la unul la altul. Interfata Maple sub Windows '95 este prezentata ^n gura 6.4.

Figura 6.4: Interfata Maple


Maple este indispensabil celor care vor sa determine solutiile unor probleme de dimensiuni mari. Principala forta a Maple-ului consta ^n aritmetica exacta. Lucr^nd cu fractii si radicali, evita erorile de rotunjire. Maple permite a manipularea unor numere ^n virgula otanta cu exponenti pozitivi foarte mari sau negativi foarte mici. De exemplu, poate calcula 123.456e789 987.654e3210.

105

Limita marimii exponentilor depinde de versiunea Maple si de tipul de calculator pe care este implementat. Av^nd peste 2500 de functii, Maple este un asistent perfect^n matematica. a Este un utilitar care permite educatorilor si cercetatorilor sa e mai exacti, mai creativi, mai productivi si mai e cienti. Este de asemenea un utilitar esent ial pentru ingineri si oameni de stiinta care lucreaza cu formule, ecuatii si date. Maple poate utilizat ^n diferite moduri. O asemenea modalitate este asistarea la efectuarea unor calcule lungi si ^ncurcate. Aceasta nu ^nseamna ca utilizatorul nu trebuie sa stie sa rezolve problemele singur; ^nseamna doar ca exista un utilitar care poate utilizat atunci c^nd calculele devin prea a complicate. Maple nu ne permite sa rezolvam orice problema care nu poate rezolvata cu creionul si h^rtia; este un utilitar care simpli ca lucrul implicat a ^n rezolvarea unei probleme, daca este utilizat adecvat. Maple este un sistem de calcul algebric care poate utilizat ^n asistarea unor calcule lungi care intervin ^n procesul de rezolvarea a ecuatiilor diferentiale. In acest sens, Maple este pentru ecuatiile diferentiale ceea ce este un calculator pentru aritmetica. Maple poate utilizat de asemenea ^n programarea metodelor numerice pentru aproximarea solutiilor ecuatiilor unui model matematic la fel de bine ca pentru generarea reprezentarilor gra ce ale acestor solutii.

Structura unui document Maple Un document (worksheet) Maple este

compus din maxim patru tipuri de c^mpuri: a 1. comenzi (instructiuni) Maple, pentru introducerea optiunilor utilizatorilor (c^mp marcat prin prompter-ul >); a 2. rezultate Maple, pentru a sarea calculelor efectuate pe baza comenzilor; 3. gra ce, pentru a sarea unor informatii gra ce^n ferestre separate. Aceste gra ce pot copiate si pasate documentului Maple; 4. text, pentru note explicatorii (c^mp marcat prin lipsa prompter-ului de a intrare sau prin caracterul #).

Reguli de scriere a informatiilor^ntr-un document Maple Enumeram

mai jos o serie de reguli de baza ^n scrierea unui document Maple. Orice comanda trebuie sa se termine cu caracterul ; sau : (^n caz contrar, Maple presupune ca linia de comanda se continua pe linia urmatoare). In cazul al doilea, rezultatul comenzii nu este a sat. Asignarea valorilor unei variabile se face cu :=. Prin aceasta se atribuie valoarea din dreapta simbolului (rhs) numelui din st^nga (lhs). Numele de variabile trebuie sa difere de numele a procedurilor si constantelor Maple. Variabilele carora li s-au asignat valori nu pot utilizate ca variabile la diferentiere, integrare, limite, cicluri, gra ce, etc. Pentru stergerea valorii unei variabile, de exemplu x, se executa x:='x'. Maple face diferenta ^ntre litere mici si litere mari. Numele x este diferit de X. Constantele comune sunt prede nite ^n Maple cu numele: Pi, E, si I. Pi indica constanta 3.14159.. ., pe c^nd pi reprezinta o variabila (desema nata printr-o litera greceasca ^n c^mpul rezultatelor). Pentru argumente de a 106

functii se utilizeaza parantezele rotunde, iar pentru indici de matrice, vectori, liste, tablouri, multimi, parantezele drepte (indicii vor separati prin virgula). Prezent a acoladelor indica o multime, parantezele drepte o lista, iar parantezele rotunde o secvent a. Operatorul de multiplicare trebuie introdus explicit, deci utilizatorul va scrie 2 x si nu 2x. Ghilimelele " au o semni catie speciala, permit^nd referirea a la comanda anterioara. Nu se permite spatiu ^ntr-un c^mp domeniu : : sau ^n a semnul de asignare ,,:=". ": :" ^ntre a si b indica toate elementele x de tipul lui a si b, pentru care a x b. Daca Maple raspunde prin ecou la o comanda, ^nseamna ca nu o poate interpreta. Fie numele comenzii a fost introdus gresit, e functia se gaseste ^ntr-o biblioteca care trebuie ^ncarcata cu readlib (pentru functii independente) sau cu with (pentru functii din pachete speciale). ,,?" sau help este utilizat pentru o cerinta de informare. Exista o serie de versiuni pe platforme diferite pentru Unix, Windows, Dos sau Macintosh. Principala diferenta este interfata.

Relatia

Maple-ului cu alte limbaje de programare Maple este un limbaj de programare procedural. In plus contine un numar de constructori de programare functionala. Un programator obisnuit cu C, Pascal, Basic, Algol, Fortran sau Lisp poate sa scrie usor proceduri numerice ^n Maple. Maple nu necesita declaratii de structuri (este mai mult asemanator din acest punct de vedere cu Basic-ul si Lisp-ul). Exista ^nsa o serie de structuri de date. Conversia de la un tip la altul este posibila prin programare explicita. Maple este interactiv, iar limbajul de programare este de tip interpretor. Nu este indicat pentru programe care efectueaza calcule numerice intensive datorita posibilitatii de depasire a capacitatii interpretorului. Este indicat ^n special pentru calcule numerice cu mare precizie si ca utilitar pentru generarea unor coduri numerice.

Evaluare Daca unui identi cator nu i s-a asignat o valoare, el are ^nteles ^n sine, adica este un simbol. Simbolurile sunt utilizate pentru a reprezenta necunoscute ^n ecuatii, variabile ^n polinoame, indici de ^nsumare, etc. Fie de exemplu instructiunea de asignare ^n Maple
p := x2 + 4 x + 4 Identi catorului p ^i este asignata formula x2 + 4x + 4. Identi catorului x nu i s-a asignat nici o valoare, este doar un simbol, o necunoscuta. Identi catorul p are deja o valoare; precum o variabila dintr-un limbaj de programare, valoarea sa poate utilizata ^n calculele urmatoare la fel ca o variabila obisnuita. Care este valoarea lui p?
> p; > p:=x^2+4*x+4;

Care este valoarea lui x?

x2 + 4 x + 4 107

x Este simbolul x. Daca p trebuie evaluat, consideram de exemplu: x := 3 25 Evaluarea de mai sus poate afecta e cienta si semantica programului. De exemplu, ce se ^nt^mpla daca ^ncercam sa calculam: a
> int(p,x); > x:=3; p;

> x;

Maple evalueaza argumentele din functia int si ^ncearca sa integreze 25 relativ la 3, ceea ce nu are sens. Dezasignarea unei variabile x ^n Maple se

Error, (in int) wrong number (or type) of arguments

face prin:

> x:='x';

x := x

simboluri, numere, operatori aritmetici si functii. Simboluri sunt, de exemplu, sin, x, y, Pi etc. Numere sunt 12; 2=3; 2:1 etc. Operatorii aritmetici sunt + (adunare), ? (scadere), (multiplicare), = (^mpartire) si ^ (ridicare la putere). Functii sunt sin(x); f(x; y); min(x1; x2; x3; x4). De exemplu, formula p = x2y + 3x3 + 2 (de fapt un polinom), este introdus astfel: p := x2 y + 3 x3 z + 2 iar formula sin(x + =2)e?x se scrie ^n Maple cos( x ) e( ?x ) Se observa ca se simpli ca sin(x + =2) la cos(x). Maple are trei rutine de baza pentru examinarea acestor arbori de expresii: type, op si nops. Functia type cu apelul type(f; t) returneaza valoarea true daca expresia f este de tip t. Tipurile de baza includ string, integer, oat, +, *, ^, function. Functia whattype este de asemenea utila pentru tiparirea tipului unei expresii. De exemplu, false + true Alte tipuri numerice sunt rational, oat sau numeric. Tipul rational indica numere rationale, adica^ntregi si fractii de ^ntregi. Tipul oat indica numere ^n virgula mobila, numere ce contin punctul zecimal. Tipul numeric indica orice tip mentionat mai sus, adica expresii de tip integer, rational sau oat. Maple face distinctie ^ntre numerele exacte si numerele aproximative. Prezent a punctului zecimal este semni cativa. De exemplu,
> 2/3; 2/3.0; > type(p, integer); whattype(p); type(p,`+`); > sin(x+Pi/2)*exp(-x); > p:=x^2*y+3*x^3*z+2;

Expresii 3In Maple, formulele matematice, de exemplu 1=2 + 1=3, sin(x + =2) sau x y3 ? 2=3 sunt numite expresii. Toate formulele sunt construite din

108

2 3 :6666666667 Functia nops returneaza numarul de operanzi ai unei expresii. Pentru o suma indica numarul de termeni din suma. De exemplu, 3 Functia op este utilizata pentru a extrage unul dintre operanzii unei expresii. Are sintaxa op(i; f) ^nsemn^nd ca extrage al i-lea operand al expresiei f. In a exemplul nostru, x2 y; 3 x3 z Functia op poate utilizata ^n forma op(i: :j; f). Aceasta returneaza secvent a de operanzi ai lui f de la i la j. De exemplu, x2 y; 3 x3 z; 2 O prescurtare este op(f), echivalenta cu op(1..nops(f); f), care are semni catia crearii unei secvent e cu toti operanzii lui f.
> op(1..3,p); > op(1,p), op(2,p); > nops(p);

Variabile si nume indexate Maple are doua tipuri de variabile sau nume (ultima este denumirea data de Maple unei variabile). Acestea sunt siruri de caractere precum x, sin, Pi, care sunt de tipul string si nume indexate sau variabile indexate precum A1; Ai;j ; Aij , care sunt de tip indexed si care pot introduse ^n Maple prin A i], A i,j], A i] j]. Majoritatea functiilor din Maple accepta ambele tipuri de variabile. Instructiuni: asignare, conditionare si ciclare Sintaxa Maple pentru
> p:=x^2+4*x+4:

asignare, if, for sau while este preluata de la Algol 60. O instructiune de asignare are forma nume := expresie unde expresie este o expresie oarecare. De nitiile recursive sunt permise numai ^n anumite conditii. Fie Ce se ^nt^mpla daca utilizam acelasi nume p ^n ambele parti ale unei a asignari?
> p:=p+x;

p := x2 + 5 x + 4 Numelui p ^i este asignat rezultatul evaluarii si simpli carii membrului drept p + x. In evaluare p este polinomul x2 + 4x + 4, iar x doar x. Deci rezultatul evaluarii este (x2 + 4x + 4) + x si cel al simpli carii, rezultatul tiparit. Ce se ^nt^mpla daca lui p nu i-am asignat o valoare? De exemplu, a
> q:=q+x;

q := q + x Ce se ^nt^mpla daca dorim sa evaluam q? Maple ^ncearca evaluarea lui q +x. a 109

Warning, recursive definition of name

Dar aceasta evaluare necesita evaluarea lui q. Rezulta un ciclu in nit. Astfel,
> q:=q+x^2;
Error, STACK OVERFLOW

Intr-un limbaj de programare conventional, aceasta problema a de nitiei recursive nu poate aparea deoarece toate variabilele trebuie sa aiba valori. Instruct iunea de executie conditionata ^n Maple are sintaxa: if expr then setinstr1 elif altexpr then altsetinstr]* else setinstr2]
;

unde setinstr1, altsetinstr, setinstr2 sunt secvent e de instructiuni separate prin caracterul ; , ] denota o parte optionala, iar * denota o parte care poate repetata de mai multe ori. Un exemplu tipic pentru instructiunea if este Pentru instructiunea for exista doua variante. Prima este for nume] from expr1] by expr2] to expr3] while expr4] do setinstruct od; Fiecare din clauzele for, from, by, to, while poate omisa. Daca sunt omise, valorile implicite sunt variabila dummy, 1, 1, in nity si, respectiv, true. Un exemplu tipic pentru ciclul for este:
> for i to 3 do print(i^2) od; > if x<0 then -1 elif x=0 then 0 else 1 fi;

Daca sunt omise clauzele for, from, by, to ciclul este de tip while. De exemplu, 10000000019 Combinatia dintre for si while este adesea utila:
> i:=10^10+1: while not isprime(i) do i:=i+2 od: print(i); > for i from 10^10+1 by 2 while not isprime(i) do od;

1 4 9

10000000019 A doua varianta de ciclul for este asa numitul ciclu for-in. Aceasta forma provine dintr-o prescurtare pentru un ciclu care apare adesea unde s poate o suma, sau, mai general, orice expresie Maple sau structura de date precum o lista sau o multime. Forma ciclului for-in pentru exemplul dat este for i in s do f(i) od; Sintaxa unui ciclu for-in este for nume] in expr] while expr] do setinstr od; 110
> for i to nops(s) do f(op(i,s)) od;

print(i);

Secvente O secventa (de tip exprseq) este o ^nsiruire de expresii separate


prin virgule. O secvent a poate descrisa direct:
> s:=1,4,9,16,25;

s := 1; 4; 9; 16; 25 Secvent ele de secvente se simpli ca^ntr-o secventa mai mare, adica secvent ele sunt asociative. De exemplu, s := 1; 4; 9; 16; 25 Simbolul special NULL indica o secventa vida. Cu ajutorul secvent elor se pot construi liste si multimi. Apelul unei functii se bazeaza pe o secvent a de argumente ale functiei. De exemplu functiile min sau max considera un numar arbitrar de valori ca argumente, adica o secvent a de argumente. 0 Functiile op si nops nu pot utilizate direct pentru secvent e.
>
nops(3,4,a); Error, wrong number (or type) of parameters in function nops

> s:=1,(4,9,16),25;

> min(s,0,s);

3 Functia seq este extrem de utila ^n crearea secvent elor. Are doua forme ce corespund celor doua variante pentru cicluri for. Prima este de tipul seq(f(i),i=m..n) In aceasta forma, rezultatul seq este echivalent cu rezultatul utilizarii ciclului De exemplu,
> s:=NULL; for i from m by 1 to n do s:=s, f(i) od; > seq(i^2,i=1..5);

> nops( 3,4,a]);

1; 4; 9; 16; 25

s := s := 1 s := 1; 4 s := 1; 4; 9 s := 1; 4; 9; 16 s := 1; 4; 9; 16; 25 Se observa ca utilizarea seq este mai e cienta deoarece nu creaza secvent e intermediare. A doua varianta pentru seq este seq(f(i),i=a) care este echivalenta cu Functia coe calculeaza coe cientul termenului de grad i al polinomului^n x, iar functia D ^n Maple este operatorul derivata:
> a:=3*x^3+y*x-11: seq(coeff(a,x,i),i=0..degree(a,x));

> s:=NULL; for i from 1 to 5 do s:=s,i^2 od;

seq(f(op(i,a)),i=1..nops(a))

?11; y; 0; 3
111

> seq(D(f),f= sin,cos,tan,exp,ln]);

1 cos; ?sin; 1 + tan2; exp; a ! a

Liste si multimi Listele, multimile si functiile sunt construite pe baza de secvent e. O lista este a structura de date care colecteaza mai multe expresii (obiecte). Pentru crearea listelor se utilizeaza parantezele drepte. Astfel o lista poate de nita ca o secventa de expresii ^ncadrate de paranteze drepte.
l := x; 1; 1 ? z; x ] list Lista vida este desemnata prin ]. Aplicatia 1: Putem construi un gra c dintr-o lista de puncte. De exemplu, pentru a trasa un patrat cu v^rfurile (1,1), (3,1), (3,3), (1,3) se creaza o lista: a Daca consideram o curba ^n plan descrisa parametric prin x = f(t); y = g(t), cu un parametru t 2 a; b], atunci aceasta curba se poate trasa plec^nd a de la o lista cu c^te 3 valori pentru un punct. De exemplu, pentru jumatatea a superioara a cercului de raza 4 si centru la (1,5): O multime poate de asemenea utilizata pentru a colectiona mai multe expresii. Diferenta este aceea ca duplicatele sunt eliminate. Se utilizeaza acoladele pentru marcare. s := f 1 ? z; 1; x g set Multimea vida este desemnata prin f g. Functia nops returneaza numarul elementelor unei liste sau a unui multimi, iar functia op extrage un element de rang dat. Se poate utiliza de asemenea notatia cu indici pentru a accesa un element de indice dat al unei secvent e, liste sau multimi. De exemplu, 1?z 1?z 1 ? z; 1; x 1 ? z; 1; x Pentru a analiza daca o lista sau o multime contine un element x putem utiliza ciclul de mai jos, rezult^nd true ^n caz a rmativ, false ^n caz contrar: a true Functia prede nita member efectueaza aceasta operatie. member(x; s) re112
> for i to nops(s) while s i]<>x do od: > if i>nops(s) then print(false) else print(true) fi; > op(1,s); s 1]; op(1..3,s); s 1..3]; > s:={x,1,1-z,x}; whattype(s); >
plot( 1+4*cos(t),5+4*sin(t),t=0..Pi],scaling=constrained);

> l:= x,1,1-z,x]; whattype(l);

> ab := 1,1], 3,1], 3,3], 1,3], 1,1]]: > plot(ab);

turneaza true daca elementul x este ^n lista sau multimea s. Adaugarea unui nou element la lista l se face prin l := x; 1; 1 ? z; x; x ] Se poate elimina al i-lea element al unei liste prin
> i:=2: l:= l 1..i-1],l i+1..nops(l)]]; > l:= op(l),x];

sau utiliz^nd functia subsop a

l := x; 1 ? z; x; x ]

l := x; 1 ? z; x ] Functia subsop opereaza asupra oricarui tip de expresie. Pentru multimi, exista operatorii reuniune: union, intersect ie: intersect, scadere: minus etc.
> t:={u,x,z}; s union t; s intersect t; s minus t;

> l:=subsop(3=NULL,l);

t := f x; z; u g f 1 ? z; 1; x; z; u g fxg f 1 ? z; 1 g

Siruri de caractere Sunt delimitate de caractere `. De exemplu,


> `Acesta este un sir`; `I love `.`you`;

Acesta este un sir I love you love yo

> substring(",3..9);

> readlib(search): search(`ov`,""");

false

> x:=5: y:=4: convert(x,string): convert(y,string): z:=cat(x,y);

z := 54
string

> whattype(z); length(z);

Tabele Tabelele sunt extrem de utile pentru scrierea unor programe e ciente.
> COLOUR red]:=rouge, rot, rosu; COLOURred rouge

Un tabel este o relatie unu-la-mai multi ^ntre doua seturi discrete de date. De exemplu, consideram un tabel de translatie a culorilor din engleza ^n franceza, germana si rom^na. a := ; rot ; rosu 113

Domeniul tabelului COLOUR este numele culorii ^n engleza. Rangul tabelului este secventa de nume de culori ^n franceza, germana si rom^na. Valorile a domeniului ^n tabel sunt numite chei sau indici. Functia Maple indices returneaza secvent a indicilor. Valorile rangului din tabel sunt numite valori sau intrari. Functia Maple entries returneaza secvent a intrarilor.
> indices(COLOUR);

> COLOUR blue]:=bleu,blau,albast:COLOUR yellow]:=jaune,gelb,galben:

yellow ]; red ]; blue ]

jaune ; gelb ; galben ]; rouge ; rot ; rosu ]; bleu ; blau ; albast ] Se observa ca ordinea ^n care functiile indices si entries returneaza indicii si intrarile nu este ^n mod necesar aceea ^n care au fost introdusi ^n tabel. Acest fapt se explica prin tehnica Maple-ului de a construi tabele pentru a permite o cautare extrem de rapida (tehnica ,,hashing"). Ce se poate face cu un tabel? Facilitatea de baza este aceea ca d^nd o cheie a sau un indice de tabel putem gasi rapid intrarea corespunzatoare. De exemplu, rouge ; rot ; rosu returneaza rapid numele culorii ^n alte limbi. C^t de rapid? In acelasi timp, a indiferent de lungimea intrarile tabelului. Putem de asemenea testa daca o intrare se a a ^n tabel:
> COLOUR red];

> entries(COLOUR);

false si putem sterge intrari din tabel prin dezasignare: table( :=

> assigned(COLOUR green]);

> COLOUR blue]:='COLOUR blue]'; print(COLOUR); COLOURblue COLOURblue

yellow = ( jaune ; gelb ; galben ) red = ( rouge ; rot ; rosu )

])

Vectori si matrice O matrice unidimensionala poate creata utiliz^nd coa


> restart; n:=3: v:=array(1..n);

manda array: array(m ..n). Aceasta creaza o matrice cu indicii m; m+1; : : :; n. Adesea m este 1. Pot inserate intrari ^n matrice prin asignari precum la tabele: v := array( 1::3; ] ) v1 := a 114
> for i from 2 to n do v i]:=a*v i-1] mod n od;

v2 := a2 v3 := a3 Matricele unidimensionale se aseamana cu tabelele cu un indice restrict ionat la un rang x. Sunt mult mai e ciente ^n accesare dec^t tabelele si ^n plus prevad a veri carea apartenentei indicelui ^n rang. Consideram exemplul de utilizare a unei matrice unidimensionale pentru sortarea prin metoda bulelor a unei secvent e de numere.
> > > > > > >
a:=0.5: for i to n-1 do for j from i+1 to n do if v i]>v j] then temp:= v i]; v i]:=v j]; v j]:=temp fi od od; evalm(v);

:125 :25 :5 ] Matrice bi- sau multi-dimensionale se pot construi ^n mod similar. O matrice bidimensionala poate creata cu array(c..d,m..n). Fie, de exemplu, 4 polinoame simetrice ^n variabilele x1 ; x2; x3: Construim matricea bidimensionala M a carui element Mij este derivata lui vi de xj : M 0 0 0 3 1 1 1 7 7 x2 + x3 x1 + x3 x1 + x2 5 x2 x3 x1 x3 x1 x2 Se observa ca valoarea lui M este numele matricei M. Regulile de evaluare pentru matrice si tabele sunt speciale. Explicatia consta ^n aceea ca pot exista matrice cu intrari neasignate.
> M:=array(1..4,1..3): > for i to 4 do for j to 3 do M i,j]:=diff(v i],x j]) od od: > M; eval(M); > v:=array(1..4): v 1]:=1: v 2]:=x 1]+x 2]+x 3]: > v 3]:=x 1]*x 2]+x 1]*x 3]+x 2]*x 3]:v 4]:=x 1]*x 2]*x 3]:

2 6 6 4

Articole Maple nu are o structura de tip record ca ^n Pascal sau struct ca ^n C. Printr-o structura de tip ^nregistrare se ^ntelege o structura de date care reuneste o colectie heterogena de obiecte, adica o multime de obiecte nu ^n mod necesar de acelasi tip. Exista mai multe posibilitati de reprezentare a structurii record ^n Maple. Cea mai simpla este utilizarea unui liste. Cuaternionul a+bi+cj +dk poate reprezentat prin lista a; b; c; d]. Utilizam indici pentru a ne referi la o componenta a structurii de date. Se poate utiliza macro pentru a de ni un identi cator
115

ca ind egal cu o constanta daca se prefera utilizarea unui simbol pentru a referi o componenta. De exemplu:
> a:= -1/2,
x+1,2], x-1,1]]];

a := ?1 ; x + 1; 2 ]; x ? 1; 1 ] ] 2

> macro(unit=1,factori=2,baza=1,exponent=2); > a unit]; a factori] 1] baza];

2 x+1 O a doua posibilitate pentru reprezentarea unui articol ^n Maple este utilizarea unui apel de functie. De exemplu putem reprezenta a + bi + cj + dk prin Cuaternion(i,j,k,1). Un avantaj al acestei reprezentari este acela ca putem spune Maple-ului cum sa efectueze operatii diverse asupra functiilor.
> `print/Cuaternion`:=proc(a,b,c,d) a+b*'i'+c*'j'+d*'k' end:

?1

2+ 3i+k Am de nit o procedura de tiparire. Apostroful a fost introdus ^n procedura pentru a obtine identi catorii i; j; k la rezultat, si nu valorile variabilelor i; j; k care pot asignate ^n program (de obicei le folosim ca variabile de ciclare). O a treia posibilitate de reprezentare a unui record este de a-l g^ndi ca un a polinom multivariabile^n c^mpul numelor, si de a-i stoca valorile coe cient ilor. a Acest mod este util c^nd c^mpurile sunt numerice si se doreste efectuarea unor a a operatii cu aceste c^mpuri. De exemplu, putem reprezenta un cuaternion ca a un polinom de variabilele i; j; k:
> restart; z1:=2+3*i+k; z2:=2-3*i+2*j+2*k; z1+z2;

> Cuaternion(2,3,0,1);

z1 := 2 + 3 i + k z2 := 2 ? 3 i + 2 j + 2 k

4+3k +2j

Proceduri, variabile locale, return, error O procedura are sintaxa


proc (secvnume1) local secvnume2;] options secvnume3;] secvinstruct end;

unde secvnume1, secvnume2, secvnume3 sunt secvent e de simboluri separate prin virgule. De exemplu o procedura simpla este
> proc(x,y) x^2+y^2 end;
proc(x,y) x^2+y^2 end

116

Aceasta procedura are doi parametrii x si y. Valoarea returnata este x2 +y2 . In general valoarea returnata de o procedura este ultima valoare calculata, daca nu exista o valoare returnata explicit. Astfel urmatoarea procedura returneaza true daca x este ^n lista L si false ^n caz contrar.
> MEMBER:= proc(x,L) local v; > for v in L do if v=x then RETURN(true) fi od; > false > end:

Procedura are o variabila locala v pentru a nu interfera cu variabila globala v a utilizatorului. Variabilele care apar ^ntr-o procedura, si nu sunt parametrii sau variabile locale, sunt variabile globale. Functia ERROR poate utilizata pentru a genera un mesaj de eroare ^ntr-o procedura.
> MEMBRU :=proc(x,L) local v; > if not type(L,list) then ERROR(`Argument 2: o lista`) fi; > for v in L do if v=x then RETURN(true) fi od; > false > end:

Operatori sageata Pentru proceduri simple care utilizeaza numai formule, exista o sintaxa alternativa, numita sintaxa sageata: simbol? > local secvnume;] expr In cazul unei functii de un parametru, sau pentru doi sau mai multi parametrii (sevcsimbol)? > local secvnume;] expr De exemplu, procedura pentru x2 + y2 poate rescrisa (x,y)? > x^2+y^2. Operatori
> f := x -> x^3-4;

Maple permite speci carea unui operator ^n doua modalitati:

f := x ! x3 ? 4 g := hx3 ? 4 j xi

> g:=<x^3-4|x>;

( a2 + b2 )3 ? 4 4 O expresie neevaluata poate transformata ^ntr-un operator utiliz^nd functia a unapply: f := z ! z 3 ? 4 De exemplu, Maple are operatorul prede nit de diferentiere: > D(sin); D(ln); cos 117
> f:=unapply(z^3-4,z);

> f(a^2+b^2); g(2);

1 a! a Operatorul D primeste ca parametru o functie si returneaza o functie. In primul caz, functia cos exista. In al doilea caz, nu exista functie speci ca ^n Maple, astfel ^nc^t D returneaza un operator sageata care transforma numere a ^n inversele lor. de forma:

Relatii O relatie ^ntre doua variabile x si y este speci cata printr-o ecuatie
> y = x^2 + 1:

Pentru ecare valoare a lui x, putem utiliza ecuatia pentru a calcula valorile corespunzatoare a lui y. Curba de dependent a poate trasata cu comanda Maple implicitplot. Pentru a testa daca un asemenea gra c reprezinta o functie, putem aplica urmatorul test: ,,Daca este posibil sa gasim o linie verticala care traverseaza gra cul ^n mai mult de un punct, atunci relatia nu este o functie." Aplic^nd a aceasta regula, gra cul anterior este gra cul unei functii, la fel ca urmatoarele: Urmatoarele relatii nu sunt ^nsa functii (vezi gra c):
> eq1 := y=x^2+1: eq2 := y=x^3-3*x^2-2: > implicitplot({eq1, eq2}, x=-3..3, y=-10..10); > eq1 := x=y^2+1: eq2 := x=y^3-3*y^2-2: > plots implicitplot]({eq1, eq2}, x=-10..10, y=-3..3); > plots implicitplot](y=x^2+1,x=-3..3,y=-10..10);

Functii O functie f este privita ca o regula pentru asignarea oricarui argument x dintr-un set de numere a unui unic numar f(x) numit valoarea lui x. Functiile pot de nite ^n mai multe moduri. 1. Functii de nite ca expresii: asignarea
> aria := Pi*r^2;

de neste aria cercului ca functie de raza sa. Functia arie de nita ca expresie poate evaluata cu subs. > subs(r=3,aria); 9 Functia poate trasata prin: rezult^nd o fereastra separata pentru gra cul functiei pe intervalul r = 0::4. a 2. Functii de nite prin operatorul sageata: asignarea de neste de asemenea functia arie. Pentru a gasi aria cercului de raza 3, putem scrie simplu: > aria(3); 9 118
> aria := r -> Pi*r^2: > plot(aria,r=0..4);

aria := r2

Pentru a trasa functia:

3. Utiliz^nd unapply se pot trasnforma expresii de una sau mai multe varia abile ^n functii de nite cu operatorul sageata. De exemplu:
> pol := x^2 + 4*x -1: pol := unapply(pol,x);

> plot(aria,0..4):

pol := x ! x2 + 4 x ? 1

4. Functii de nite ca proceduri: asignarea de neste de asemenea functia arie. Poate evaluata si trasata precum ^n de nitia ca operator sageata. Unul din avantajele de nirii ^n acest mod a functiei este faptul ca domeniul poate speci cat. De exemplu, domeniul functiei arie este cel al numerelor reale pozitive. Aceasta informatie poate inserata ^n procedura utiliz^nd cuv^ntul cheie ERROR. Mesajul de eroare este a a ^ncadrat ^ntre caractere `.
> aria := proc(r) > if r <= 0 then ERROR(`Raza trebuie sa fie pozitiva`) > else Pi*r^2 fi > end: > aria(3); > aria(-3); >
aria := proc(r) Pi*r^2 end:

Functii de doua variabile pot de asemenea de nite si trasate. Fie de exemplu, volumul V al unui cilindru de ^naltime h si raza r: Pentru a vizualiza gra cul lui V se poate utiliza plot3d: Toate functiile matematice standard se ^nt^lnesc ^n Maple. Pentru o lista a completa se pot cere informatii suplimentare cu Operatorul de compunere a functiilor este @.
> y := sin@cos@(x->x^2+3); y(3.); > ?inifcns. > plot3d(V,0..4,0..4); > V := (r,h) -> Pi*r^2*h:

Error, (in aria) Raza trebuie sa fie pozitiva

y := sin@cos@( x ! x2 + 3 ) :7472099577
Maple accepta procedura ^n procedura. De

Parametrii si domeniul lor


exemplu putem scrie

Procedura f1 are o variabila locala g care este o procedura. Aceasta calculeaza x(x + 1). Procedura de mai sus nu este ^nsa echivalenta cu 119

> restart; f1:=proc(x) local g; g:=x->x+1; x*g(x) end:

deoarece x din procedura g nu se refera la parametrul x din procedura f2 . Se refera la variabila globala x. Astfel
> f1(a); f2(a); x:=7: f2(a);

> f2:=proc(x) local g; g:=()->x+1; x*g() end:

a(a +1) a(x+ 1) 8a

Proceduri recursive si optiunea remember Numerele Fibonacci Fn sunt


de nite prin relatia recursiva F0 = F1 = 1; Fn = Fn?1 +Fn?2. Putem construi o procedura recursiva:
> F:=proc(n) if n=0 or n=1 then 1 else F(n-1)+F(n-2) fi end: > seq(F(i),i=0..10);

1; 1; 2; 3; 5;8; 13; 21; 34;55;89

> F(200);

Acesta nu este un mod e cient de a calcula termenii sirului. De fapt, nu este posibila calcularea lui F(200) nici pe cel mai rapid calculator. Daca se numara apelurile procedurii F se observa ca apeluri cu aceleasi argumente se repeta. O posibilitate de evitare este aceea de a retine valorile calculate. Se poate considera un ciclu:
> F:=proc(n) local fnm1, fnm2, f, i; > if n=0 or n= 1 then RETURN(1) fi; > > >
fnm2:=1; fnm1:=1; for i to (n-1) do f:=fnm1+fnm2; fnm2:=fnm1; fnm1:=f od; fnm1

Error, (in F) STACK OVERFLOW

453973694165307953197296969697410619233826 O alta posibilitate este aceea de a utiliza optiunea remember. Aceasta este utilizata pentru a stoca valorile care sunt calculate astfel ^nc^t pot folosite a ulterior.
> restart; F:=proc(n) option remember; > > F(200);
if n=0 or n=1 then 1 else F(n-1)+F(n-2) fi end:

> end: > F(200);

Error, (in F) STACK OVERFLOW

37889062373143906 16130531424904581415797907386349 453973694165307953197296969697410619233826 Fiecare procedura Maple are asociat un tabel remember. Indexul tabelului 120

> F(80); F(150); F(200);

este secventa de argumente, iar intrarea tabelului este valoare functiei. C^nd a F este calculat la n, Maple veri ca ^n tabelul remember al procedurii F sa vada daca F(n) a fost deja calculat. Daca da, returneaza rezultatul din tabelul remember al functie F. In caz contrar, executa codul procedurii F si automat stocheaza perechea n; F(n) ^n tabelul remember al lui F. Exista si posibilitatea de salvare explicita a valorilor ^n tabelul remember utiliz^nd asa numita asignare functionala. Aceasta este mult mai exibila dec^t a a optiunea remember deoarece permite salvarea numai a valorilor selectate ^n tabelul remember.
> F:=proc(n) F(n):=F(n-1)+F(n-2) end: > F(0):=1: F(1):=1: > F(200);
Error, (in F) STACK OVERFLOW

> F(80), F(150), F(200);

37889062373143906;16130531424904581415797907386349; 453973694165307953197296969697410619233826

Semni catia este aplicarea functiei f la operanzii expresiei a pas^nd argua mentele x1; : : :; xn lui f. De obicei, argumentelor optionale sunt neglijate. Formal, aceasta situatie este echivalenta cu cea ^nt^lnita^n calculul secventei a De exemplu,
> seq(f,op(i,a),x1,...,n),i=1..nops(a)); > p:=x^3+2*x+1: map(F,p);

Functia map Are urmatoarea sintaxa la apel: map(f; a; x1; : : :; xn).

F( x3 ) + F( 2 x ) + F( 1 ) x6 + 4 x2 + 1 4

> map(x->x^2,p); map(degree,p,x);

Numar variabil de argumente Este posibil ^n Maple ca o functie sa aiba un numar variabil de agumente. Un exemplu de asemenea functie a mediului este max. O procedura similara este urmatoarea:
> MAX:=proc(x1) local maximum, i; > maximum:=x1; > for i from 2 to nargs do > >
maximum if args i]>maximum then maximum:=args i] fi od;

Variabila speciala nargs indica numarul argumentelor, iar variabila args este o secventa de argumente, args i] ind al i-lea argument. 121

> end:

Returnarea apelului procedurii ca expresie neevaluata Procedura


Maple max permite calcul simbolic.
> MAX(1,2,x); > max(1,2,x);
Error, (in MAX) cannot evaluate boolean

MAX scrisa mai sus poate utilizata numai ^n cazuri numerice, pe c^nd functia a

max( 2; x ) Analog, functia signum(x) returneaza -1 daca x < 0, +1 daca x returneaza unevaluated, adica returneaza signum(x):
> signum(sqrt(2)-1); signum(sqrt(2)-Pi); signum(a-b);

0, altfel

signum( a ? b ) args i]<maximum daca nu se introduc valori numerice. Procedura ar trebui sa p lucreze cel putin pentru a determina maximul dintre si 2. Utilizam^n acest scop functia signum.
> MAX:=proc() local a,i,j,n,s; > n:=nargs; a:=array(1..n); for i to n do a i]:=args i] od; i:=1; > while i<n do
j:=i+1; while j<=n do s:=signum(a i]-a j]); if s=1 then a j]:=a n]; n:=n-1; elif s=-1 then a i]:=a j]; a j]:=a n]; j:=n; n:=n-1; i:=i-1; else j:=j+1 fi od; i:=i+1 od; if n=1 then RETURN(a 1]) fi; 'MAX'(seq(a i],i=1..n));

?1

Maple nu poate executa procedura MAX pentru ca nu poate evalua

> > > > > > > > > > >

Caracterele apostrof indica faptul ca functia MAX nu este re-executata (altfel s-ar produce un ciclu in nit).
> MAX(x,1,sqrt(2),x+1);

> end:

MAX x + 1; 2

ducerea unor simpli cari care sa pot descrise algebric sau prin reguli de transformare. Data o functie f putem a rma, de exemplu, ca f este comutativa si asociativa. max este o asemenea functie, adica max(a,b)=max(b,a) 122

Simpli cari si reguli de transformare De multe ori este necesara intro-

si max(a,max(b,c))=max(max(a,b),c). Astfel este necesara o forma canonica de a scrie expresiile ce implica functia map. Comutativitatea se poate implementa prin sortarea argumentelor. Pentru asociativitate vom transforma at^t max(max(a,b),c) c^t si max(a,max(b,c)) ^n max(a,b,c). In plus a a max(max(a))=max(a) (idempotenta).
> MAX:=proc() local a; > a:= args]; a:=map(flatten,a, MAX); 'MAX'(op(sort(a))); > end: > flatten:=proc(x,f) > if type(x,function) and op(0,x)=f then op(x) else x fi > end:

MAX( a; a; b; c ) Sa introducem si proprietatea max(a,a)=a.

> MAX(a,MAX(c,b),a);

> MAX:=proc() local a; > a:={args}; a:=map(flatten,a,MAX); 'MAX'(op(a)); > end: > MAX(a,MAX(c,b),a);

MAX( a; b; c )

Urmarirea executiei unei proceduri Consideram o procedura de calcul al celui mai mare divizor comun a doua numere naturale utiliz^nd algoritmului a lui Euclid. Functia irem calculeaza restul ^ntreg al ^mpartirii a doi ^ntregi.
Cea mai simpla facilitate de a urmari executia unei proceduri este printlevel. Variabila printlevel este o variabila globala care initial este setata pe 1. Daca se seteaza o valoare mai mare se tipareste urma tuturor asignarilor, intrarile si iesirile procedurii.
> printlevel:=100: > GCD(21,15);
{--> enter GCD, args = 21, 15

> GCD:=proc(a,b) local c,d,r; > c:=a; d:=b; while d<>0 do r:=irem(c,d); c:=d; d:=r od; > end:

c := 21 d := 15 r := 6 c := 15 d := 6 r := 3 c := 6 d := 3 r := 0 123

c := 3 d := 0 3 3 Procedura GCD opereaza ^n aritmetica ^ntregilor de precizie arbitrara, astfel ^nc^t se poate lucra cu numere foarte mari: a 158456325028528675187087900672 Procedura poate scrisa si recursiv:
{--> {--> {--> {--> {--> enter enter enter enter enter GCD, GCD, GCD, GCD, GCD, args args args args args = = = = = 15, 21 21, 15 15, 6 6, 3 3, 0 <-- exit GCD (now at top level) = 3}

> printlevel:=1: GCD(100!, 2^100);

> GCD:=proc(a,b) if b=0 then a else GCD(b,irem(a,b))fi end: > printlevel:=40: GCD(15,21);

3 3 3 3 3

<-- exit GCD (now in GCD) = 3} <-- exit GCD (now in GCD) = 3} <-- exit GCD (now in GCD) = 3} <-- exit GCD (now in GCD) = 3}

3 Sursa unei proceduri de biblioteca poate vizualizata modi c^nd variabila a verboseproc.
> interface(verboseproc=2): > eval(isprime);
proc(n) local btor,nr,p,r; options remember,system,`Copyright by Waterloo Maple Software`; if not type(n,integer) then if type(n,numeric) then ERROR(`argument must be an integer`) else RETURN(^sprime(n) fi fi; if n < 2 then false elif has(`isprime/w`,n) then true elif

<-- exit GCD (now at top level) = 3}

124

.. . Pentru a urmari modul de executie al procedurii MAX, se poate modi ca printlevel. In cazul dat putem astfel obtine iesirile nu numai de la MAX ci si de la atten. Functia trace poate utilizata pentru a selecta urmarirea numai a unor procedurilor speci cate.
> trace(MAX);

MAX

> MAX(a,MAX(b,a),c);

{--> enter MAX, args = b, a

a := f a; b g a := f a; b g MAX( a; b )

<-- exit MAX (now at top level) = MAX(a,b)} {--> enter MAX, args = a, MAX(a,b), c

a := f a; c; MAX( a; b ) g a := f a; b; c g MAX( a; b; c ) MAX( a; b; c )

<-- exit MAX (now at top level) = MAX(a,b,c)}

Argumente optionale si valori implicite Multe din functiile Maple accepta argumente optionale. Utilizatorul poate evita speci carea parametrilor prin existenta valorilor implicite. Exemple sunt functiile plot, factor, collect, series. Functia degree calculeaza gradul unui polinom univariat ^n variabila x, cu gradul total al polinomului multivariat. De exemplu,
> p:=x^3+2*x+1: degree(p);

1 0 Argumentul secund este optional. Cum putem formula o asemenea procedura? Presupunem ca intrarea este o formula si, daca este dat un al doilea argument, atunci acesta este un nume sau o multime de nume pentru variabile.
> DEGREE:=proc(a,x) local s,t; > if nargs=1 then s:=indets(a); > > >
if not type(s,set(name)) then ERROR(`Intrarea nu este un polinom`) fi; DEGREE(a,s)

> p:=3*x^2*y+2*y^2-x*z+7: degree(q); degree(q,x);

125

> > > > > > > > >

elif type(a,constant) then 0 elif type(a,name) then if type(x,name) then if a=x then 1 else 0 fi elif type(x,set(name)) then if member(a,x) then 1 else 0 fi else ERROR(`Argument 2: nume sau o multime de nume`) fi elif type(a,`+`) then max(seq(DEGREE(t,x),t=a)) elif type(a,`+`) then s:=0; for t in a do s:=s+DEGREE(t,x) od; s elif type(a, algebraic^integer) then DEGREE(op(1,a),x)*op(2,a) else ERROR(`Nu se poate calcula gradul`) fi

Functia indets utilizata mai sus returneaza multimea tuturor nedeterminatelor (sau variabilelor) care apar ca intrare.

> end:

Returnarea rezultatelor prin parametrii Numeroase functii ^n Maple returneaza mai mult dec^t o valoare. Este posibila returnarea unui numar oarea care utiliz^nd o secvent a sau o lista. Pe de alta parte este posibila returnarea a valorilor prin parametrii precum^n alte limbaje de programare. De exemplu, sa consideram functia divide din Maple care permite efectuarea ^mpartirii dintre doua polinoame. La apelul divide(a,b) se returneaza true daca si numai daca polinomul b divide polinomul a fara rest:
true De obicei, daca b divide a, utilizatorul are nevoie ^n continuarea calculelor de c^tul ^mpartirii, q. In Maple, acest lucru poate realizat d^nd ^n functia a a divide un al treilea parametru, care este un nume si caruia i se va asigna c^tul a daca b divide pe a: x2 + x + 1 Caracterul ` este utilizat pentru a pasa functiei divide numele q si nu valoarea lui q. Revenim la un exemplu anterior: am construit o functie MEMBER care testeaza daca x apartine listei L. Sa modi cam aceasta functie astfel ^nc^t a MEMBER(x,L,`p`) sa returneze ^n plus ^n p pozitia primei aparitii a lui x ^n L.
> MEMBER:=proc(x,L,p) local i; > for i to nops(L) do
false

> divide(x^3-1,x-1);

> if divide(x^3-1,x-1,`q`) then print(q) fi;

> >

if x=L i] then if nargs=3 then p:=i fi;

RETURN(true) fi od;

> end: > MEMBER(4, 1,3,5],`pozitie`); pozitie;

pozitie

false 126

> MEMBER(3, 1,3,5],`pozitie`); pozitie;

true 2

Interfata cu functiile Maple Multe rutine Maple au interfete care permit utilizatorului sa le ,,^nvate" cum sa efectueze calcule asupra unei functii date de utilizator. Acestea includ di , evalf, expand, combine, simplify, series, latex etc. Daca utilizatorul doreste sa speci ce cum se va face diferentierea unei functii W trebuie sa scrie o rutina `di /W`. Daca procedura di este apelata ^ntro expresie f(x) care contine W(g), atunci rutina di va invoca `di /W`(g,x) care va calcula derivata lui W(g) functie de x. Sa presupunem ca W 0(x) = W(x)=(1 + W(x)). Atunci:
> `diff/W`:=proc(g,x) diff(g,x)*W(g)/(1+W(g)) end: > diff(W(x),x), diff(W(x^2),x);

W( x ) ; 2 x W( x2 ) 1 + W( x ) 1 + W( x2 )

Proceduri de citire si salvare In cazul ^n care elaboram programe mai lungi dorim de multe ori salvarea acestora ^ntr-un sier. Un program poate citit ^n Maple utiliz^nd comanda read. De exemplu, a daca am scris procedura MAX ^n sierul MAX, putem citi acest sier prin
Procedurile si orice formula de calcul dintr-o sesiune Maple poate salvata din linia de comanda utiliz^nd comanda save, cu forma save, f1, a f2,. . . ,`nume sier`. Aceasta salveaza datele f1 ; f2 ; : : :^n format intern Maple, ^n asa numitul format ,,.m". Interfata mediului Maple V versiunea 3.0 pentru Windows 95 permite salvarea comenzilor, a datelor si a rezultatelor calculelor ^ntr-un sier tip Maple cu extensie ".ms",^ntr-un sier tip text cu extensie ".txt", sau ^ntr-un sier tip LaTeX cu extensie ".tex". Un sier cu extensie ".ms" poate ^ncarcat ulterior, a s^ndu-se situatia a nala a worksheet-ului salvat. Pentru referirea la o anumita procedura sau data din acest sier, comenzile corespunzatoare trebuie reevaluate. Un sier cu extensie ".txt" poate de asemenea ^ncarcat cu conditia ca: comenzile sa e precedate de caracterul ">", iar comentariile de caracterul "#". In cazul ^n care se doreste salvarea unei set restr^ns de informatii, este prea ferabila utilizarea salvarii din linia de comanda. In cazul ^n care salvarea se face ^ntr-un sier cu extensia ".m", informatia poate reutilizata.
> restart; > FACTORIAL:= proc(number) option remember; local i, tmp1; > if number <= 1 then RETURN(1) fi; > i := 1; tmp1 := 1; > while i < number do tmp1 :=(i+1)*tmp1; i:=i+1 od; > read `MAX`;

127

>

RETURN(tmp1)

Prin restart toate informatiile se pierd:


> restart; > print(FACTORIAL);

> end: > save FACTORIAL, `fact.m`;

FACTORIAL

> read `fact.m`; > print(FACTORIAL);

proc(number) local i,tmp1; options remember; if number <= 1 then RETURN(1) fi; i := 1; tmp1 := 1; while i < number do tmp1 := (i+1)*tmp1; i := i+1 od; RETURN(tmp1) end

> alias(F=FACTORIAL); > F(4); FACTORIAL(4); F(20);

I; F 24 24 2432902008176640000

> NEWTON:=proc(f,start,n) local x1,x0,j,Df; > if not(type(f,procedure)) then ERROR(`Ceruta o functie`); fi; > Df:=unapply(diff(f(x),x),x); x0:=start; > >
for j from 1 to n do x1:= x0-evalf(f(x0)/Df(x0)); x0:=x1; print(j,x0);

> od: > end:

Pentru crearea unui pachet propriu:

> save NEWTON, `/dana/newt.m`;

> restart; > read `fact.m`; read `/dana/newt.m`; > mypack:=table( fact=FACTORIAL,newt=NEWTON]): > save mypack,FACTORIAL,NEWTON, `mypack.m`; > restart; read `mypack.m`; fact(4);

fact( 4 )

> with(mypack); fact(4); newt(x->cos(x)-x,0,5);

fact ; newt ]

128

24 1; 1: 2; :7503638679 3; :7391128909 4; :7390851334 5; :7390851332

Apelul programelor externe Maple este e cient^n calcule simbolice si nu este, ^n general, e cient pentru calcule numerice. Se prefera utilizarea unui alt limbaj de programare pentru calcule numerice asupra vectorilor sau integrari numerice multiple. Comunicatiile de date ^n Maple se fac via siere. Programul Maple trebuie sa scrie datele cerute de programul extern ^ntr-un sier de intrare, utiliz^nd, writeto, appendto si lprint. Maple poate rula programul a extern prin comanda system. Programul extern trebuie sa citeasca datele din sierul scris de Maple si sa scrie rezultatele ^ntr-un sier de iesire. Dupa ce programul extern ^si termina executia, Maple citeste rezultatele din sierul de iesire utiliz^nd comanda read. O schita a codului Maple corespunzator este a urmatoarea:
> interface(quiet=true); > writeto(input); > ... #scrie datele in fisierul input > writeto(terminal); > interface(quiet=false); > system(...); #executa programul extern > read output;

Prima comanda interface(quiet=true) elimina toate diagnosticurile din Maple (octeti utilizati, avertizari, etc) care nu trebuie sa apara ^n sierul de intrare. Comanda writeto(input) deschide sierul input pentru scriere (cu suprascriere). Daca se doreste adaugarea unor date la un sier deja existent se recomanda appendto ^n loc de writeto. Toate iesirile Maple din acest punct se vor ^ndrepta spre sier. Iesirea este creata cu comanda lprint. Dupa ce toate datele au fost scrise ^n sier, acesta este implicit ^nchis prin resetarea iesirii catre terminal prin comanda writeto(terminal). Comanda system este utilizata pentru executarea unui program extern. Una din problemele care intervin este legata de faptul ca comunicatiile au loc pe baza de siere tip text. Programul extern va trebui sa tina seama de forma comenzilor Maple ^n momentul ^n care ^ncearca sa scrie date care urmeaza a citite de catre Maple.

> ... #continua procesarea ^n {\sc Maple}

Legatura cu C-ul si Fortran-ul Este posibila utilizarea comenzilor C si


129

fortran pentru a genera iesiri ale formulelor Maple ^n forme acceptate de com-

pilatoarele C si Fortran. Presupunem ca dorim ca ^n codul nostru sa utilizam determinantul derivatelor, Hessian-ul pentru expresia e1.
> restart; e1:=exp(-x^2) * (a*cos(y+t)+b*sin(y-t)): > readlib(fortran): fortran(e1);
t0 = exp(-x**2)*(a*cos(y+t)+b*sin(y-t))

> readlib(C): C(e1);

C.

Dorim sa efectuam calculele^n Maple si sa convertim rezultatul^n limbajul


>
with(linalg): h:=det(hessian(e1, x,y,t]));
( ) 3 2 2 ( ) ( ) 3 2 2 2 3 2 2

t0 = exp(-x*x)*(a*cos(y+t)+b*sin(y-t));

h := ?8 ( e ?x2 ) a cos( y + t ) b sin( y ? t ) ? 8 ( e ?x2 ) a cos( y + t ) b sin( y ? t ) 2 + 16 ( e ?x ) a cos( y + t ) b sin( y ? t ) x 2 + 16 ( e ?x ) a cos( y + t ) b sin( y ? t ) x 2 + 16 x ( e ?x ) a sin( y + t ) b sin( y ? t ) 2 + 16 x ( e ?x ) b cos( y ? t ) a cos( y + t )
( ) 3 2 2 2 2 ( ) 3 2 2 2 ( ) 3 2 2

> readlib(C): C( hessian=h]);

hessian = -8.0*pow(exp(-x*x),3.0)*a*a*pow(cos(y+t),2.0)*b*si\ n(y-t)-8.0*pow(exp(-x*x),3.0)*a*cos(y+t)*b*b*pow(sin(y-t),2.0)+16.\ 0*pow(exp(-x*x),3.0)*a*a*pow(cos(y+t),2.0)*b*sin(y-t)*x*x+16.0*pow\ (exp(-x*x),3.0)*a*cos(y+t)*b*b*pow(sin(y-t),2.0)*x*x+16.0*x*x*pow(\ exp(-x*x),3.0)*a*a*pow(sin(y+t),2.0)*b*sin(y-t)+16.0*x*x*pow(exp(-\ x*x),3.0)*b*b*pow(cos(y-t),2.0)*a*cos(y+t);

In sierul temp.c regasim expresia de mai sus, h ind ^nlocuit cu r. Costul evaluarii lui h poate estimat prin: 23 additions + 68 multiplications + 18 functions Subexpresiile care se repeta pot eliminate prin utilizarea optiunii de optimizare.
> C( hessian=h],optimized);
t1 = x*x; t2 = exp(-t1); t3 = t2*t2; t4 = t3*t2; t5 = a*a; t6 = t4*t5; t7 = y+t; t8 = cos(t7); t9 = t8*t8; t11 = y-t; t12 = sin(t11); t15 = t4*a; t16 = b*b; t18 = t12*t12; t29 = t1*t4;

> C( r=h],filename=`temp.c`);

> readlib(cost): cost(h);

130

t32 = pow(sin(t7),2.0); t38 = pow(cos(t11),2.0); hessian = -8.0*t6*t9*b*t12-8.0*t15*t8*t16*t18+16.0*t6*t9*b*t*12\ t1+16.0*t15*t8*t16*t18*t1+16.0*t29*t5*t32*b*t12+16.0*t29*t16*t38*a*t8;

pentru prezentari ulterioare ale rezultatelor din Maple ^ntr-o forma apropiata de stilul articolelor si cartilor. Acestea constituie baza unui interpretor matematic pentru elaborarea de documente matematice.
> e2:=Int(Int(exp(x^2+y^2),x=-infinity..infinity),y=-Pi/2..zeta);

Legatura cu editoarele de texte Subrutinele latex si eqn sunt destinate

e2 :=
> latex(e2);

Z1

? 1=2 ?1

e( x2 +y2 ) dx dy

\int _{-{\frac {\pi }{2}}}^{\zeta}\!\int _{-\infty }^{ \infty }\!{e^{{x}^{2}+{y}^{2}}}{dx}\,{dy} {int from {{-^ pi over 2 }} to {{size 13 zeta}} {int from {{-^ \ inf}} to { inf } {e sup {{ "x" sup 2 }^+^{ "y" sup 2 }}}\~\ d \ "x" }\~ d "y" }

> readlib(eqn): eqn(e2);

Rezultatele pot parametru secund:

salvate ^ntr-un sier, adaug^nd numele sierului ca a

> latex(e1,`foo.tex`);

Calcule aritmetice, exacte sau aproximative Prima diferenta dintre


posibil, schimb^ndu-le ^n numere zecimale numai la cerere: a
> 1/3 + 1/2;

Maple si un calculator de buzunar este aceea ca Maple a seaza rezultatele exacte, lucreaza cu fractii si variabile. Maple lucreaza cu fractii at^t c^t este a a

5 6

:8333333333 p Maple accepta si numere complexe. I este constanta pentru ?1. 8+I Numele pentru , aria cercului de raza 1, ^n Maple este Pi. 9 Maple nu are o limita a numarului de cifre a unui ^ntreg:
> big:=100!; > Pi*3^2; > (3+2*I)*(2-I);

> evalf(5/6);

big := 933262154439441526816992388562667004907159682643816214n

131

68592963895217599993229915608941463976156518286253697n 920827223758251185210916864000000000000000000000000 Maple are capacitatea de a manipula obiecte matematice. De exemplu, permite factorizarea ^ntr-un timp scurt a unor numere ^ntregi mari: Un alt exemplu privind capabilitatile de calcul aritmetic este determinarea celui mai mare divizor comun a doua numere ^ntregi: 9 16958234427147887654490570 Maple utilizeaza un test probabilitistic pentru a determina daca un numar este prim. Un rezultat false va ^ntotdeauna corect, pe c^nd un rezultat true a este foarte probabil de a exact. true 3195958679 Maple poate calcula numarul de^ntregi mai mici dec^t n, argumentul functiei, a numere relativ prime cu n: 75925851724800 Maple efectueaza calcule ^n virgula otanta cu o precizie arbitrara. De exemplu, putem aproxima cu 100 de zecimale: 3:1415926535897932384626433832795028841971693993751058209749n 44592307816406286208998628034825342117068 Numerele reale ^n Maple pot introduce ^n Maple e utiliz^nd numere ce a contin punctul zecimal, e direct utiliz^nd functia Float, unde Float(m; e)=m a 10e, iar mantisa m este un numar ^ntreg cu precizie oarecare, si exponentul e este restrict ionat functie de dimensiunea ^ntregilor ce se pot reprezenta pe un anumit calculator (tipic, 31 de biti). Functia op poate utilizata pentru a extrage mantisa sau exponentul unui numar ^n virgula mobila. Sa generam o secvent a de numere aleatoare din 0; 1), cu 6 cifre zecimale exacte. :669081; :693270;:073697; :143563;:718976; :830538 Functia rand returneaza un numar generat aleator dintr-un interval speci cat. Calculele ^n virgula mobila se efectueaza cu rotunjire. Precizia este controlata de variabila globala Digits cu valoarea implicita 10. Functia evalf este 132
> UniformInteger:=rand(0..10^6-1): > UniformFloat:=proc() Float(UniformInteger(),-6) end: > seq(UniformFloat(), i=1..6); > evalf(Pi,100); > numtheory phi](76458146187641); > isprime(3195958637); nextprime(3195958637); > igcd(3^500,5^300-1); ilcm(9615319,12345678909876543210);

( 2 )97 ( 3 )48 ( 5 )24 ( 7 )16 ( 11 )9 ( 13 )7 ( 17 )5 ( 19 )5 ( 23 )4 ( 29 )3 ( 31 )3 ( 37 )2 ( 41 )2 ( 43 )2 ( 47 )2 ( 53 ) ( 59 ) ( 61 ) ( 67 ) ( 71 ) ( 73 ) ( 79) ( 83 ) ( 89) ( 97 )

> ifactor(big);

utilizata pentru a evalua o constanta simbolica exacta printr-o aproximare ^n virgula mobila.
> sin(1.); sin(1);

:8414709848 sin( 1 )

> Digits:=25: sin(1.); sin(1);

:8414709848078965066525023 sin( 1 )

:8414709848078965066525023 Pe l^nga functiile matematice pe care le^nt^lnim^ntr-un limbaj de programare, a a Maple cunoaste si o serie de functii speciale precum functiile Bessel, functia Dirac, functia ? etc. Acestea sunt calculate cu precizie ^nalta prin ^nsumarea a unor serii. De exemplu, pa poate calculat aplic^nd metoda Newton la rezolvarea ecuatiei x2 ? a = 0, pornind cu valorea de start x0 = a=2. Sirul iterativ este a xk+1 = xk + x 2 k iar o procedura-utilizator este urmatoarea:
> SqrtNewton:=proc(a) local xk,xkm1; Digits:=55; xkm1:=0; > xk:=evalf(a/2); > while abs(xk-xkm1)> abs(xk)*10^(-50) do > xkm1:=xk; xk:=(xk+a/xk)/2; od; > Digits:=50; evalf(xk); > end: > SqrtNewton(2);

> evalf(");

1:4142135623730950488016887242096980785696718753769

Maple are posibilitatea de a simplica expresii si de a normaliza polinoame. Automat, Maple face urmatoarele simpli cari: (a) sume, produse, puteri ale numerelor ^ntregi si rationale; (b) cel mai mare divizor comun al numaratorului si numitorului ^ntr-un numar rational este eliminat; (c) factori sintactic identici ^n numaratorul si numitorul unei expresii rationale sunt eliminati; (d) produs de termeni rearanjati astfel ^nc^t termenul constant este primul termen ^n produs (e) termenii asemenea ^n a produse si sume sunt colectati (x*x!x^2, x+x!2*x); (f) daca o expresie este produs de un numar si o suma de monoame, numarul este distribuit ^n suma (1/2(x+y)!x/2+y/2); (g) simplipcarea functiilor matematice standard pentru anumite argumente (cos Pi/4! 2=2, ln 1! 0, binomial(n,1)! n, dar nu si ln x^2! 2 lnx); (h) ordonarea alfabetica (x+y+z, y+x+z, y+z+x identice; iesirea este x+y+z).

Simpli care si calcul polinomial

133

Maple are comanda normal destinata pentru a rezolva aceasta problema.


> eq1:=expand((41*x^2+x+1)^2*(2*x-1))/expand((3*x+5)*(2*x-1));

Normalizarea polinomiala este o forma simpla de simpli care a expresiilor.


5 4 84 3 2 eq1 := 3362 x ? 15172x++ x ?x5 ? 79 x ? 1 6x 7

1681 x4 + 82 x3 + 83 x2 + 2 x + 1 3x+5 Factorul comun 2x ? 1 a fost eliminat din numarator si numitor. O functie mai lenta este simplify. Aceasta pe l^nga simpli carea polia noamelor are posibilitatea de simpli care a expresiilor trigonometrice sau a expresiilor cu radicali. cos( x )5 + cos( x )4 Pentru anumite simpli cari este necesar sa facem o serie de presupuneri despre variabilele invocate.
> eq4:=sqrt(x^2); simplify(eq4); > assume(x<0); simplify(eq4); > eq3:=cos(x)^5 + sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x): > simplify(eq3);

> normal(eq1);

csgn( x ) x

Caracterul ~ dupa x indica faptul ca s-a facut o presupunere asupra sa. Putem indica simpli carea numai de un anumit tip. ( y + 59 ) ( y2 + 96 y + 67 )1=3 O alta functie este combine. Aceasta reduce numarul termenilor dintr-o expresie. ln( a ) + ln( b ) ln( a b ) Cel mai mare divizor comun poate calculat si pentru polinoame. Se poate aplica testul de ireductibilitate a polinoamelor: > irreduc(x^3+1); false
> p6 := x^8 + x^6 - 3*x^4 - 3*x^3 + 8*x^2 + 2*x - 5: > p7 := 3*x^6 + 5*x^4 - 4*x^2 - 9*x + 21: > gcd(p6,p7); > eq5 := (y^5+273*y^4+27502*y^3+1219766*y^2+20416065*y+ > 13760393)^(1/3): > simplify(eq5,radical,assume=positive);

?x

> assume(a>0,b>0); eq5:=log(a)+log(b): simplify(eq5); combine(eq5,ln);

134

Maple permite aceleasi operatii si asupra multinomialelor:

> p8 := x^4*y^4+2*x^3*y^3*z+4*x^3*y^3+2*x^2*y^2*z^2+4*x^2*y^2*z+ > 5*x^2*y^2+2*x*y*z^3+4*x*y*z^2+2*x*y*z+4*x*y+z^4+4*z^3+5*z^2+4*z+4: > p9 := x^4*y^2-x^2*y^4+x^2*y^2*z^2-x^2*y^2+x^2*z^2+x^2-y^2*z^2 > -y^2+z^4-1: > gcd(p8,p9);

1 + z 2 + x2 y 2 Maple poate factoriza polinoame peste multimea numerelor rationale sau ^n Zp .


> p1 := 72*x^3+60*x^2-192*x-180: factor(p1);

12 ( 3 x ? 5 ) ( 2 x + 3 ) ( x + 1 )

( 1?x+x2 ) ( x2 +x+1 ) ( x2 +I x?1 ) ( x2 ?I x?1 ) ( x+I ) ( x?I ) ( x?1 ) ( x+1 ) ( 1?x+x2 ) ( x2 +x+1 ) ( x2+1 ) x2 + 3x + 1
> factor(p2,sqrt(3));

> p2 := x^12-1: factor(p2,I);

x2 ? 3x + 1 ( x?1 ) ( x+1 )

( x4 + x + 1 ) ( x 2 + x + 1 ) x6 + x 5 + x 4 + x 3 + 1 Putem reprezenta serii ca fractii continue:


> p3 := taylor(tan(x),x,10);

> p4:=x^6+x^5+x^4+x^3+1: Factor(p4) mod 2; factor(p4);

p10 := x + 1 x3 + 2 x5 + 17 x7 + 62 x9 + O( x10 )

15

315 x2

2835

> convert(p3,confrac);

x2 2 5+ x 1 ?7 + 9 x2 Pn i PnConsideram exemplul de calcul a normei i=0 a2 a polinomului a(x) = i i=0 aix :

1+

?3 +

Prima operatie este aceea de expandare a polinomului. Functia coe s returneaza secvent a coe cient ilor, care ulterior este pusa ^ntr-o lista. Fiecare 135

> Euclidian:=proc(a) > sqrt(convert(map(x->x^2, coeffs(expand(a))]),`+`)) > end:

element al listei este ridicat la patrat, rezult^nd o noua lista; apoi lista de a patrate este convertita la o suma. Functiile coe si coe s necesita expandarea ^n prealabil a polinomului argument:
> p:=x^3-(x-3)*(x^2+x)+1: coeffs(p);
Error, invalid arguments to coeffs

> expand(p); coeffs(expand(p));

2 x2 + 3 x + 1 1; 3; 2

14 Daca se doreste determinarea coe cient ilor unui polinom ^n anumita variabila, este necesara ^n prealabil expandarea polinomului ^n acea variabila. Functia expand expandeaza polinomul ^n toate variabilele. Functia collect expandeaza ^nsa polinomul numai dupa o variabila speci cata. Procedura Euclidian lucreaza cu polinoame multivariabile ^n sensul ca calculeaza radacina patrata a sumei patratelor p cientilor numerici. Adica penco tru p = ux2 + y2 + v Euclidian returneaza 3. Daca dorim sa vedem acest polinom ca polinom de x si y cu coe cient i simbolici ^n u si v, trebuie sa-i speci cam procedurii variabilele polinomiale. Putem face acest lucru printr-un parametru aditional care poate o singura variabila, o multime de variabile sau o lista de variabile (de tip fname, set(name), list(name)g). Functia coe s accepta un asemenea argument secund optional. In plus dorim ca procedura sa veri ce ca intrarea este un polinom.
> Euclidian:=proc(a,v) > > > > > > > > >
fi if nargs=1 then if not type(a, polynom) then ERROR(`Arg.1: polinom?!`,a) fi; sqrt(convert(map(x->x^2, coeffs(expand(a))]),`+`)) elif type(v,{name,set(name),list(name)}) then if not type(a,polynom(anything,v)) then ERROR(`Arg.1: polinom ^n`,v,`?!`) fi; sqrt(convert(map(x->x^2, coeffs(expand(a),v)]),`+`)) else ERROR(`Al doilea argument este invalid (variabila)`)

> Euclidian(p);

Testam daca tipul unei expresii este polynom prin polynom(R; X). Obtinem true daca expresia este un polinom a carui coe cienti sunt de tip R^n variabilele X. Un rezultat true la testul de polynom(rational,x) indica un polinom univariat ^n x cu coe cienti rational, adica un polinom din Q x]. Daca R si X nu sunt speci cati, ^nseamna ca expresia trebuie sa e un polinom ^n toate variabilele sale. 136

> end:

Limite si diferentiale

Maple calculeaza limitele unei expresii examin^nd a expansiunile ^n serii de puteri ale expresiei. Se pot calcula limite ^n puncte singulare sau limite laterale ^n puncte de discontinuitate.
> eq1 := sin(x)/x: limit(eq1,x=0);

> eq2 := (2*x+3)/(7*x+5): limit(eq2,x=infinity);

2 7

> eq3 := (x^2-2*x+1)/(x^4+3*x^3-7*x^2+x+2): > subs(x=1,eq3);


Error, division by zero

1 8 In cazul urmator regula l'Hospital nu poate aplicata: limita ecarui termen al diferentei este in nit si daca termenii sunt combinati ^ntr-o singura fractie, numitorul are derivatele de orice ordin 0 la 0. 2 ( a2 ? 1 2 )3 r6 ? ( a2 ? 1 2 )2 r4 2 ( a2 ? 1 2 )3 r6 + ( a2 ? 1 2 )2 r4 b b b b ? lim r!0 e( b2 r2 ) e( a2 r2 )
> value("); > Limit((2/(a^2-b^2)^3/r^6-1/(a^2-b^2)^2/r^4)/exp(b^2*r^2)> (2/(a^2-b^2)^3/r^6+1/(a^2-b^2)^2/r^4)/exp(a^2*r^2),r=0);

> limit(eq3,x=1);

6 Limitele sunt de nite implicit pe spatiul real. Daca limita se doreste ^n spatiul complex, trebuie speci cata optiunea complex.
> limit(1/x,x=0);

?1

unde ned

> limit(1/x,x=0,complex);

1 1 ?1

> limit(1/x,x=0,right); limit(1/x,x=0,left);

Comanda Maple limit poate utilizata pentru calculul derivatelor utiliz^nd a de nitia:
fp := 2 x + 1 Pentru de nirea ca functie a derivatei unei expresii se poate utiliza unapply:
>
f := x -> x^2 + x -3: fp := limit((f(x+h)-f(x))/h,h=0);

137

> y := x^2 + x: yp := diff(y,x);

yp := 2 x + 1

> yp:=unapply(yp,x); yp(3);

7 Se poate de ni functia derivata cu ajutorul operatorului D:


> f:=x->tan(x*a): fp:=D(f); fp(4);

yp := x ! 2 x + 1

1 + tan( 4 a )2 a D primeste ca intrare o functie si prezinta ca iesire diferentiala functiei.

fp := ? ! 1 + tan( x a )2 a x

Serii Maple poate calcula serii Taylor, serii Laurent si serii Chebyshev. Daca functia este analitica, se calculeaza seria Taylor.
1 x2 ? 6 x4 + O( x6 ) Ordinul de acuratete poate speci cat. 1 1 1 x2 ? 6 x4 + 120 x6 ? 5040 x8 + O( x10 ) Daca functia are un pol ^n punctul de expansiune, se determina seria Laurent.
> eq6:=1/x^5*sin(x): series(eq6,x=0); > series(eq5,x=0,10); > eq5:=x*sin(x): series(eq5,x=0);

1 1 x?4 ? 6 x?2 + 120 + O( x2 )

Sume Puterea Maple-ului consta, de fapt, ^n abilitatea de calcul simbolic. Pn 20


De exemplu, sa calculam suma i=1 i .
> sum(i^20,i=1..n);

1 ( n + 1 )21 ? 1 ( n + 1 )20 + 5 ( n + 1 )19 ? 19 ( n + 1 )17 + 1292 ( n + 1 )15 21 2 3 2 21 13 + 41990 ( n + 1 )11 ? 223193 ( n + 1 )9 + 6460 ( n + 1 )7 ? 323 ( n + 1 ) 33 63 68723 ( n + 1 )5 + 219335 ( n + 1 )3 ? 174611 n ? 174611 ? 10 63 330 330 219335 n3 ? 68723 n5 + 6460 n7 ? 223193 n9 + 41990 n11 ? 323 n13 + 1292 n15 63 10 63 33 21 19 n17 + 5 n19 + 1 n20 + 1 n21 ? 174611 n ?2 3 2 21 330 138
> simplify(");

1 n ( 2 n + 1 ) ( n + 1 )(165 n18 + 1485 n17 + 3465 n16 ? 5940 n15 ? 25740 n14 6930 + 41580 n13 + 163680 n12 ? 266310 n11 ? 801570 n10 + 1335510 n9 + 2806470 n8 ? 4877460 n7 ? 6362660 n6 + 11982720 n5 + 7591150 n4 ? 17378085 n3 ? 1540967 n2 + 11000493 n ? 3666831) P Maple lucreaza si cu notiunea de in nit. De exemplu, putem calcula 1 i1 i=1 3
>
sum(1/i^3,i=1..infinity);

> factor(");

^ncapsuleaza o parte mare din cunostiintele matematice actuale. De asemenea, observam ca Maple permite scrierea cu caractere grecesti. Pentru a ne forma o idee despre valoarea raspunsului anterior (raspunsul exact, fara erori de rotunjire), cerem o aproximare ^n virgula otanta: 1:202056903 Maple accepta functia suma ^n forma nede nita:
> Sum((-15*n^4+40*n^3-74*n^2-51*n+(-10)) / (25*n^6-5*n^5+29*n^4>
81*n^3+35*n^2-133*n+55),n);

Maple reduce raspunsul ^n termenii functiei Riemann Zeta cunoscuta ^n analiza matematica. Biblioteca Maple contine peste 2000 de subrutine care

(3)

> evalf(");

X
n

?15 n4 + 40 n3 ? 74 n2 ? 51 n ? 10 6 ? 5 n5 + 29 n4 ? 81 n3 + 35 n2 ? 133 n + 55 25 n
3 n2 ? 7 n + 9 5 n3 ? 8 n2 + 9 n ? 11

> value(");

Integrare

Maple poate rezolva o serie de probleme de calcul integral si diferential. Poate determina primitivele unei functii:
> int(f(x),x);

f( x ) dx

> f := 1 / (exp(x) + 1): int(f,x);

?ln( ex + 1 ) + ln( ex )
1 8 4 8 x ? x + 3x 139

> f1:=x^7-4*x^3+3: int(f1,x);

> f2:= (x^3-x) / (x^5 + x^4 + x^3 - x^2 - x - 1): int(f2,x);

De asemenea poate trata integrale de nite:

p p 1 x 1 ? 1 x22+ ++ 1 + 2 3arctan 3 ( 2 x + 1 ) 3 3 x 9
r4 := 9 + ln( 2 )

> f4 := 1/(x+3)^3 + 1/x: r4:=int(f4,x=1..2); evalf(r4);

800 :7043971806 Exista ^nsa functii a caror integrale nu pot reprezentate ^n termenii unor functii elementare. De exemplu, functia Gauss de eroare: 1 p erf( x ) 2 Maple utilizeaza anumite functii prede nite ^n termeni de integrale. Se pot trata si integralele improprii:
> Int( exp(-t^2), t=-infinity..infinity ); value("); > f6 := exp(-x^2): int(f6,x);

Z1

?1 p

e( ?t2 ) dt

> Int(exp(-t)/t^(1/3), t=0..infinity); value(");

Z 1 e( ?t )
0

R unde ?(n) = 01 ex x(n?1)dx. X


R=%1

t1=3 dt ? 2 3

> Int(x/(x^3-x^2+1),x); value(");

%1 := RootOf( 23 Z 3 + 3 Z + 1 ) In anumite cazuri, integralele depind de parametrii. De exemplu: e( ?u x ) ln( x ) x dx 0 Putem informa Maple despre o anumita calitate a lui u:
> assume(u<0); int(f5,x=0..infinity); > f5:= exp(-u*x)*ln(x)*sqrt(x): int(f5,x=0..infinity);

x x3 ? x2 + 1 dx 1 R ln x + 23 R 2 + 3 3

Z1

140

> assume(u>0);int(f5,x=0..infinity);

Exista ^nsa integrale care nu pot rezolvate prin Maple. In asemenea cazuri exista o serie de alternative pentru a obtine o aproximare numerica: de exemplu, prin generarea unor serii.
> f8 := exp(t^3): int(f8,t=0..x);

?1 2

p ln( u ) p p p + u 3=2 ? 1 u 3=2 ? u ln(22 ) 3= 2 u 3=2

Zx
0

e( t3 ) dt

> r8:=series(int(f8,t=0..x),x,10);

4 14 Raspunsul este dat ^ntr-o forma speci ca structurii de date tip serie; aceasta poate convertita la o functie polinomiala:
> p8:=unapply(convert(r8,polynom),x);

r8 := x + 1 x4 + 1 x7 + O( x10 )

1 1 p8 := x ! x + 4 x4 + 14 x7 1:321428571

> evalf(p8(1));

O cale mai scurta este:

1:341904418 Un avantaj al utilizarii functiei evalf este acela ca raspunsul este corect p^na a la ultima zecimala. Daca utilizam solutia tip serie trebuie sa facem o analiza a ordinului de acuratete a raspunsului.
> r1 := int( exp(-t) / sqrt(1-t^2),t = -1..1 );

> evalf(int(f8,t=0..1));

r1 :=
> evalf(r1);

Z 1 e( ?t ) p 2 dt 1?t
?1

3:977463261

Utilizarea pachetelor speciale de functii Maple contine o varietate de rutine care pot asista utilizatorul^n procesele calculatorii. Multe dintre acestea sunt grupate ^n pachete speci ce (vezi linalg, plots, student, geom etc). De exemplu, ^n pachetul student exista o colectie de comenzi ajutatoare pentru studiul integrarii si a diferentierii.
D; Doubleint ; Int ; Limit ; Lineint ; Sum ; Tripleint ; changevar ; combine ; completesquare ; distance ; equate ; extrema ; integrand ; intercept ; intparts ; isolate ; leftbox ; leftsum ; makeproc ; maximize ; middlebox ; middlesum ; midpoint ; minimize ; powsubs ; rightbox ; rightsum ; showtangent ; simpson ; 141
> with(student);

slope ; trapezoid ; value ]

Sa consideram, de exemplu, functia f de nita prin: Panta liniei tangente ^ntr-un punct oarecare x = a poate calculata astfel:
> slope(
x,f(x)], a,f(a)] );

> f := (x) -> x^2 + 3:

x2 ? a 2 x?a

2 ? a2 lim xx ? a x!a lim a + x x!a 2a De exemplu, linia tangenta ^n x = 3 are panta:

> Limit(",x=a); normal("); value(");

6 Acesta linie tangenta poate vizualizata cu comanda Pentru o secvent a de valori x, se poate construi o secvent a de imagini ale tangentelor:
> for i to 8 do p.i := showtangent(f(x),x=2+i*.2,x=0..4) od: > showtangent( f(x),x=3,x=0..4 );

> subs(a=3,");

Se poate aproxima, de asemenea, aria sub^ntinsa de o curba. Fie aria de interes cuprinsa ^ntre curba y = f(x), din exemplul anterior, ^ntre x = 0 si x = 4. Aceasta arie poate aproximata prin dreptunghiuri si aproximarea se poate reprezenta gra c prin:
> leftbox( f(x),x =0..4,20 );

> plots display]( p.(1..8)], insequence=true );

19 1 X 1 i2 + 3 5 i=0 25 794 25 31:76000000 Suma poate calculata cu un numar nede nit n de dreptunghiuri:
> leftsum(f(x),x=0..4 ,n); expand("); value("); expand(");

> leftsum( f(x),x=0..4,20); value("); evalf(");

n?1 X

4 i=0

i 16 n2 + 3 n 142

n?1 X

2 6 + 12 64 3 n3 100 ? 32 1 + 32 1 3 n 3 n2 Pentru a obtine aria exacta, trecem la limita:


> Limit(",n=infinity);

64 i=03 + 12 i=0 n n 1 n3 ? 1 n2 + 1 n

i2

n?1 X

n!1
> value(");

1 1 lim 100 ? 32 n + 32 n2 3 3

100 3 Acest proces sta la baza de nitiei functiei de integrare^nt^lnita drept comanda: a
> Int(f(x),x=0..4); value(");

Z4

Alte exemple:
>

x2 + 3 dx 0 100 3

middlesum(x^2,x=0..1,10) = value(middlesum(x^2,x=0..1,10));

! 9 1 X 1 i + 1 2 = 133 10 i=0 10 20 400


:3325000000

> >

evalf(middlesum(x^2,x=0..1,10));

middlebox(x^2,x=0..1,10); # rezultat grafic

prin:

Gra ca bidimensionala Suplimentarea procedurilor de trasare se realizeaza


animate ; animate3d ; conformal ; contourplot ; cylinderplot ; densityplot ; display ; display3d ; eldplot ; eldplot3d ; gradplot ; gradplot3d ; implicitplot ; implicitplot3d ; loglogplot ; logplot ; matrixplot ; odeplot ; pointplot ; polarplot ; polygonplot ; polygonplot3d ; polyhedraplot ; replot ; setoptions ; setoptions3d ; spacecurve ; sparsematrixplot ; sphereplot ; surfdata ; textplot ; textplot3d ; tubeplot ]
> with(plots);

143

Figura 6.5:

Figura 6.6:

Procedura Maple de trasare pentru cazul unei informatii din spatiul bidimensional este plot. Gra c: vezi gura 6.5 Trasarea unor functii discontinue presupune anumite precautii. Fie exemplul functiei tangente y = tan(x) care are asimptote verticale la multiplii impari de =2. Gra c: vezi gura 6.6.a Acest rezultat se datoreaza faptului ca functia este discontinua. In plus, poate atinge valori in nite pe intervalul (? ; ). In asemenea situatii putem limita scara verticala, de exemplu de la -10 la 10: Gra c: vezi gura 6.6.b Doua functii pot trasate pe acelasi gra c:
> plot( f,
x = -Pi .. Pi , -10 .. 10 , discont=true );

> A:=plot(x^3+3*x^2-3*x-1,x=-3..3,style=POINT): > A;

> f :=

tan(x): plot( f , x = -Pi .. Pi );

Gra c: vezi gura 6.7.a O curba parametrica bidimensionala poate trasata tot cu procedura plot: 144

> s := taylor(sin(x), x=0): approx := convert(s, ratpoly): > plot({approx, sin(x)}, x = -Pi..Pi);

Figura 6.7:

Figura 6.8:

Gra c: vezi gura 6.7.b Trasarea unei curbe bidimensionale ^n coordonate polare se poate realiza cu polarplot:
> > > > >
pic1:=plot(x/2,x=-1..4): pic2:=plots polarplot](1+2*cos(t),t=0..2*Pi): #cardiod pic3:=plots polarplot](cos(t),t=0..Pi): #cerc pic4:=plots polarplot](sin(3*t),t=0..2*Pi): #trandafir plots display]({pic1,pic2,pic3,pic4});

> plot(

cos(3*t),sin(2*t),t=0..Pi], x=-1..1, y=-1..1 );

Alte exemple:

Gra c: vezi gura 6.8

> plot(x*sin(x),x=-3*Pi..3*Pi);

> plot( sin(t),cos(t),t=0..2*Pi]);

Gra c: vezi gura 6.9.a

Gra c: vezi gura 6.9.c Aplicatia 2: Se cere ilustrarea gra ca a efectului de transformare liniara^n plan.
> with(linalg): > transform := proc( A: matrix, V: list ) local i;

> plot( 3,3,6,0,3,-3,0,0,3,3],x=-2..10);

Gra c: vezi gura 6.9.b

145

Figura 6.9:

Figura 6.10:
> >
plot({V, seq(convert(multiply(A,op(i,V)),list),i=1.. nops(V))]},scaling = CONSTRAINED) ;

Descrierea transformarii se realizeaza cu ajutorul unei matrice. Obiectele care se vor transforma sunt:
> symm := matrix(
1,2], 2,1.5] ] ):

> end:

> sq := 0,0], 1,0], 1,1], 0,1], 0,0] ]: > segment:= 0, 0] , 3, -2] ]: > triang:= 0,0], 2,0], 1,3], 0,0] ] : > ngon:= proc( N: posint) local j; > seq( evalf(cos(2*Pi*j/N)),evalf(sin(2*Pi*j/N))],j=0..N)]: > end: > plot( {triang,sq,segment,ngon( 8 )} ) ;

Gra c: vezi gura 6.11 Rezultate gra ce similare se obtin aplic^nd urmatoarele transformari: a
> flipx:= matrix( 1, 0], 0, -1] ] ): > transform(flipx,triang); transform(flipx,ngon(8)); > shear:= matrix(
1, 2], 0, 1] ] ):

> transform( symm, sq ); transform(symm,ngon(8));

Gra c: vezi gura 6.10

146

Figura 6.11:
> transform(shear,sq); transform(shear,ngon(8)); > rotate:=matrix( 1/sqrt(2),1/sqrt(2)], -1/sqrt(2),1/sqrt(2)]]):

Aplicatia 3: Curba fulgului de zapada. A fost descrisa initial de Koch ca raspuns a rmativ la problema daca exista sau nu o curba continua care nu are linie tangenta ^n orice punct de pe curba. Este de nita ca limita secventei de curbe generate prin procedura snow ake data mai jos. Prima procedura, basic, efectueaza o operatie de baza asupra oricarui segment introdus ca data de intrare prin capetele sale: segmentul de lungime d este ^nlocuit cu o secventa de 4 segmente de lungime d=3 obtinute astfel: se porneste de la capatul st^ng al segmentului, se parcurge d=3 din segment, dupa a care are loc o ^ntoarcere cu 60 de grade la st^nga, directie pe care se parcurge a d=3, apoi din nou o rotatie cu 60 de grade, ^nsa^nspre dreapta, si distanta d=3, si din nou cu 60 de grade ^nspre st^nga si distanta d=3. Curba rezultata are a trei puncte ^n care nu are tangenta.
> basic := proc(p1,p2) local dx,dy, p3,p4,p5; > dx := (p2 1]-p1 1])/3.; dy := (p2 2]-p1 2])/3.; > p3 := p1 1]+dx,p1 2]+dy; p4 := p1 1]+2*dx,p1 2]+2*dy;

> transform(rotate,sq);transform(rotate,segment);

> p5 := p1 1]+1.5*dx-sqrt(3.)/2*dy,p1 2]+1.5*dy+sqrt(3.)/2.*dx; > p3,p5,p4,op(p2);

De exemplu, daca aplicam basic asupra segmentului de lungime 1 cu capetele 0,0], 1,0] obtinem o secvent a de numere: :3333333333; 0;:5000000000; :2886751347;:6666666666; 0;1;0 Punctul din st^nga a segmentului original a fost ^n mod intentionat omis, a pentru ca procedura basic sa poata utilizata de urmatoarea. Procedura ake preia o lista de puncte ce reprezinta o secventa de segmente de linii legate cap la cap si returneaza o lista reprezent^nd de 4 ori mai multe segmente de a linii, unde ecare segment din lista originala este ^nlocuit cu cele 4 segmente furnizate de procedura basic.
> flake := proc(fl) local i,curve; > curve := fl 1],fl 2]]; >
for i by 2 to nops(fl)-2 do

> end:

>

basic( 0,0], 1,0]);

147

Figura 6.12:
> curve:= op(curve),basic( fl i],fl i+1]], fl i+2],fl i+3]])] od > end: > snowflake := proc(n) > local i,curve,ti; > curve := 0,0,1/2,1/2*sqrt(3),1,0,0,0]; > for i from 2 to n do curve := flake(curve) od; > plot(curve,style = LINE,axes = NONE,scaling = CONSTRAINED) > end: > snowflake(5);

Fulgul de zapada se obtine pornind de la un triunghi echilateral:

Gra c: vezi gura 6.12 Aplicatia 4: Se considera ecuatia f(x) = 0 unde f este diferentiabila. Prin metoda gra ca sau ghicind, putem ajunge la o prima estimare a solutie. Fie x0 aceasta estimare. Probabil ca punctul (x0 ; f(x0 )) nu se a a pe axa x (altfel am obtinut solutia). Astfel parcurgem linia tangenta la gra cul lui f p^na ^n a punctul ^n care aceasta ^nt^lneste axa x. Fie (x1; 0) acest punct de intersect ie. a x1 poate exprimat astfel:
x1 = x0 ? @f( x0 ) @ x0 f( x0 ) Aceasta ecuatie este numita ecuatia Newton. Dupa calculul lui x1 , acesta poate redenumit x0 si se poate aplica metoda din nou. In anumite conditii secvent a de numere converge spre solutia exacta. Procedura urmatoare ofera o imagine pentru modul de aplicare a metodei, ind utila ^n studiul convergentei:
> vnewt := proc(f,start,a,b) local i, x0, fp, p; > x0 := evalf(start); fp := D(f); p := x0,0; > for i from 1 to 10 do > p := p, x0, f(x0); x0 := x0 - f(x0)/fp(x0); p := p,x0,0; od; > plot({f(x), p]},x=a..b,style=LINE); > end: >

f:= eq:=diff(f(x0),x0)=(f(x0)-0)/(x0-x1): expand(solve(eq,{x1}));

148

Figura 6.13:

Figura 6.14:

Testam aceasta procedura pentru rezolvarea ecuatiei x2 = 2 plec^nd de la a estimarea x0 = 3 si utiliz^nd intervalul de trasare de la 0 la 4. a
> vnewt(x -> x^2 - 2, 3, 0,
4); #rezultat grafic

Gra ca tridimensionala Se considera urmatoarea functie:


Gra cul sau arata astfel:
> f := x*exp(-x^2-y^2): > plot3d(f,x=-2..2,y=-2..2,axes=BOX,orientation= -116,75]);

Contourplot este utilizat pentru a trasa contururile lui f ^n planul xy:

Gra c: vezi gura 6.13.a

Gra c: vezi gura 6.13.b Un gra c de densitate este o alta cale de a transpune informatia tridimensionala ^ntr-un plan. Gra c: vezi gura 6.14.a Putem genera de asemenea un gra c al gradientului lui f utiliz^nd gradplot. a Sagetile sunt orientate ^n directia de crestere a lui f. Marimea sagetilor indica marimea pantei.
> gradplot(f,x=-2..2,y=-2..2,style=LINE,arrows=SLIM, axes=BOX); > densityplot(f, x=-2..2, y=-2..2, axes=BOX );

> contourplot(f,x=-2..2,y=-2..2,axes=BOX,shading=Z);

Gra c: vezi gura 6.14.b 149

Figura 6.15:

Figura 6.16:

Un c^mp vectorial poate vizualizat cu ajutorul functiei eldplot3d: a Gra c: vezi gura 6.15.a Suprafetele descrise explicit pot trasate cu plot3d:

> F := y/(x^2+y^2),-x/(x^2+y^2),0]: > fieldplot3d(F,x=-1..1,y=-1..1,z=-1/10..1/10,scaling=constrained);

Gra c: vezi gura 6.15.b O suprafata tridimensionala descrisa implicit poate trasata cu:

> plot3d((x^2-y^2)/(x^2+y^2),x=-2..2,y=-2..2,axes=BOXED);

Gra c: vezi gura 6.16.a O suprafata parametrica tridimensionala poate vizualizata cu plot3d:
> plot3d( cos(t)*(1+.2*sin(u)),sin(t)*(1+.2*sin(u)),.2*sin(t)* > cos(u)],t=0..2*Pi,u=-Pi..Pi);

> implicitplot3d( x^2+y^2+z^2-z*x*y=1, x=-2..2, y=-2..2, z=-2..2, > orientation= 9,63] );

Alte exemple:

Gra c: vezi gura 6.16.b Gra c: vezi gura 6.17.a

> plots sphereplot]((1.3)^z*sin(theta),z=-1..2*Pi,theta=0..Pi);

Gra c: vezi gura 6.17.b Aplicatia 5: Cum construim un tor? Un tor standard poate vazut ca o suprafata generata prin rotirea cercului centrat ^n x = a; z = 0 cu raza b, ^n 150

> plots spacecurve]( t*cos(t),t*sin(t),t],t=0..7*Pi);

Figura 6.17:

Figura 6.18:

jurul axei z. Fie r distanta de la axa z. Atunci acest cerc este r ? a = b cos t, z = b sint. Consider^nd o curba de pro l oarecare (r(t); 0; h(t)) ^n planul rOz a si daca aceasta curba este rotita ^n jurul axei z, atunci suprafata rezultata are ecuatiile parametrice x(t; s) = r(t) cos(s); y(t; s) = r(t) sin(s); z(s; t) = h(t), pentru 0 s 2 .
> a:=10: b:=1: > circ:=spacecurve({ a+ b*cos(t),0,b*sin(t),t=0..2*Pi,color=red], > 0,0,t, t=-4..4]}):

> torus:=plot3d( (a + b*cos(t))*cos(s), (a + b*cos(t))*sin(s),b* > sin(t)], s=0..2*Pi, t=0..2*Pi,style=CONTOUR, scaling=CONSTRAINED):

Gra c: vezi gura 6.18.a O alta posibilitate este aceea de a g^ndi torul ca un tub ^n jurul cercului a x2 + y2 = a2 din planul z = 0.
> Circ:=spacecurve({ a*cos(s), a*sin(s), 0, s=0..2*Pi], 0,0,t, > t=-4..4]},orientation= -60,80]): > Torus:=plot3d( (a + b*cos(t))*cos(s),(a + b*cos(t))*sin(s), > b*sin(t)],s=0..2*Pi,t=0..2*Pi,scaling=CONSTRAINED, >
style=POINT,grid= 50,20]):

> display3d({circ, torus}, orientation= -60,80]);

> display3d({Circ, Torus}, orientation= -60,80]);

Gra c: vezi gura 6.18.b 151

Figura 6.19:

Torul poate privit ca o suprafata tubulara. Sa construim un tub spiralat ^n jurul unui tor descris prin: x(t; s) = (a + c cos(t)) cos(s); y(t; s) = (a + c cos(t)) sin(s); z(t; s) = c sin(t) pentru 0 < s; t < 2 . Pentru a obtine o curba de pe tor, se considera t ca functie de s, de exemplu t = 10s.

> t:=10*s: a:=10: c:=4: > T1:=spacecurve( (a + c*cos(t))*cos(s),(a + c*cos(t))*sin(s),c*sin(t > )],s=0..2*Pi,numpoints=200,scaling=constrained,orientation= 45,70]): > T2:=tubeplot( a*cos(s),a*sin(s),0],radius=.98*c,s=0..2*Pi, > numpoints=75,tubepoints=25,style=CONTOUR,scaling=constrained,

Gra c: vezi gura 6.19.a Aceasta curba este inclusa ^ntr-un tub:

> orientation= 45,60]): > display({T1,T2}, orientation= 45,60]);

Gra c: vezi gura 6.19.b Introducem torul initial, dar cu o raza mai mica:
> display({T3,T4}, orientation= 45,65]);

> T3:=tubeplot( (a+c*cos(t))*cos(s),(a+c*cos(t))*sin(s),c*sin(t)], > s=0..2*Pi,radius=1,numpoints=200,tubepoints=15,scaling= > constrained): display({T3}, orientation= 45,65]);

> T4:=tubeplot( a*cos(s),a*sin(s),0],radius=2,s=0..2*Pi,numpoints= > 75, tubepoints=25, scaling=constrained, orientation= 45,60]):

Gra c: vezi gura 6.19.c

Animatie - gra ca ^n spatiul 4-dimensional

Maple permite realizarea animatiei cu ajutorul functiilor display cu optiunea insequence=true, animate sau animate3d. Exemple de comezi sunt urmatoarele:
> with(plots): > animate(sin(Pi*x)*cos(Pi*t),x=0..1,t=0..2,frames=16); > animate(sin(Pi*t*x),x=0..1,t=0.1..4,frames=64); > animate3d( u*cos(v),u*sin(v),BesselJ(0,2.398*u)*cos(t)],u=0..1,

152

>

v=0..2*Pi,t=0...2*Pi,scaling=constrained,style=patch,frames=16);

> Pipe1 := (u,v,t) -> (1-t)*u + t*cos(u): Pipe2 := (u,v,t) -> v: > Pipe3 := (u,v,t) -> t*sin(u): > animate3d( Pipe1(u,v,t),Pipe2(u,v,t),Pipe3(u,v,t)],u=0..2*Pi, >
v=0..2*Pi,t=0..1,frames=16,scaling=constrained);

Maple detine un pachet de biblioteca pentru algebra liniara. Cu ajutorul acestuia, putem calcula valori proprii si vectori proprii, determinanti de matrice, putem aplica o serie operatii asupra liniilor si coloanelor unei matrice, sau putem determina anumite forme canonice de matrice. Majoritatea acestor functii pot utilizate asupra matricelor simbolice. Pentru a putea utiliza facilitatile Maple-ului pentru algebra liniara, trebuie ^ncarcat pachetul linalg. Ca rezultat se obtine o lista a functiilor disponibile.

Operatii vectoriale si matriceale

BlockDiagonal ; GramSchmidt ; JordanBlock ; Wronskian ; add ; addcol ; addrow ; adj ; adjoint ; angle ; augment ; backsub ; band ; basis ; bezout ; blockmatrix ; charmat ; charpoly ; col ; coldim ; colspace ; colspan ; companion ; concat ; cond ; copyinto ; crossprod ; curl ; de nite ; delcols ; delrows ; det ; diag ; diverge ; dotprod ; eigenvals ; eigenvects ; entermatrix ; equal ; exponential ; extend ; gausselim ; bonacci ; frobenius ; gausselim ; gaussjord ; genmatrix ; grad ; hadamard ; hermite ; hessian ; hilbert ; htranspose ; ihermite ; indexfunc ; innerprod ; intbasis ; inverse ; ismith ; iszero; jacobian ; jordan ; kernel ; laplacian ; leastsqrs ; linsolve ; matrix ; minor ; minpoly ; mulcol ; mulrow ; multiply ; norm ; normalize ; nullspace ; orthog ; permanent ; pivot ; potential ; randmatrix ; randvector ; rank ; ratform ; row ; rowdim ; rowspace ; rowspan ; rref ; scalarmul ; singularvals ; smith ; stack ; submatrix ; subvector ; sumbasis ; swapcol ; swaprow ; sylvester ; toeplitz ; trace ; transpose ; vandermonde ; vecpotent ; vectdim ; vector ]

Warning: new definition for Warning: new definition for

> with(linalg);

norm trace

Un vector ^n Maple este reprezentat printr-o matrice unidimensionala indexata de la 1, iar o structura array este o matrice bidimensionla cu indicii de linie si coloana pornind de la 1. Consideram de exemplu matricea Hilbert simetrica H cu intrarile Hij = 1=(i + j ? 1):
> H:=array(1..3, 1..3): > for i to 3 do for j to 3 do H i,j]:=1/(i+j-1) od od; > H;

H 153

> evalm(H);

3 4 5 Valoarea lui H este numele matricei H. Regulile de evaluare a matricelor sunt speciale. Ideea care sta la baza acestui fapt este aceea ca o matrice poate sa aiba intrari nede nite. Pentru a a sa o matrice sau a returna o matrice dintr-o procedura trebuie utilizata functia eval. Pachetul linalg contine multe functii pentru calcul vectorial si matriceal. O matrice poate creata si cu comanda matrix din pachetul linalg:
> H1:=linalg matrix](5,5,(i,j)->1/(i+j-1)): > a:=vector( 2,sin(x),4,5.3,beta]);

2 1 13 61 2 37 61 1 17 6 7 6 62 3 47 7 6 41 1 17 5

a := 2 sin( x ) 4 5:3 ]

> A:=matrix(

1,x,y], 0,1,z], 0,0,1]]);

0 0 1 Utiliz^nd functiile prede nite ^n linalg se poate calcula inversa, determinana tul, sau solutia unui sistem liniar si multe altele. Maple utilizeaza operatorul &* pentru a desemna o multiplicare necomutativa. Pentru a evalua o expresie matriceala trebuie utilizata functia evalm.
> evalm(A&*A); # echivalent cu evalm(A^2);

21 x y3 A := 4 0 1 z 5

2 1 2x 2y +xz 3 4 0 1 2z 5
0 0 1 1

> det(A);

> B:=matrix(

5 a d ? a f c ? b a d + b c2 + g a f ? 5 g c

a,a,c], b,5,f], g,c,d]]): det(B);

> inverse(A);

0 0 1 Matricea exponentiala eA este adesea utilizata ^n rezolvarea sistemelor liniare 154

2 1 ?x x z ? y 3 4 0 1 ?z 5

de ecuatii diferentiale.

> exponential(A);

0 e ze 0 0 e Determinarea valorilor proprii si a vectorilor proprii se poate face manual sau automat:
> C:=matrix(
2,3], 4,5]]):

2 3 e xe 1 xze +ye 7 6 2 6 7 4 5

> F:=evalm(C-lambda*array(identity,1..2,1..2)): eq1:=det(F);

Acesta este polinomul caracteristic. Radacinile sale sunt:


> egv:=solve(det(F),lambda);

eq1 := ?2 ? 7 + 2

7 1 7 1 egv := 2 + 2 57; 2 ? 2 57 0 0 0 0

> evalm(subs(lambda=C,eq1));

Vectorii proprii se pot obtine astfel:

> nullspace(subs(lambda=egv 1],evalm(F)));

Maple are comenzi pentru determinarea valorilor proprii si a polinomului caracteristic:

3 1p ? 8 + 8 571

7 + 1 p57; 7 ? 1 p57 2 2 2 2 ?2 ? 7 + 2 7 + 1 p57; 1; ? 3 + 1 p571 ; 7 ? 1 p57; 1; ? 3 ? 1 p571 2 2 8 8 2 2 8 8 Fiecare lista din aceasta secventa contine o valoare proprie, ordinul sau de multiplicitate si vectorul propriu asociat. Fara speci carea optiunii radical: 2 RootOf( Z 2 ? 7 Z ? 2 ); 1; 1 1 RootOf( Z 2 ? 7 Z ? 2 ) ? 3 3 Maple poate reduce matricele la diferite forme canonice. De exemplu se poate calcula forma normala Jordan:
> J:=matrix(
34,25], -16,-6]]): jordan(J,'T1');

> eigenvals(C); charpoly(C,lambda); eigenvects(C,'radical');

> eigenvects(C);

14 1 0 14 155

14 1 0 14 Maple poate crea matrice Hilbert, matrice Vandermonde sau matrice Toeplitz:
> V := vandermonde( x.(1..4)] ); factor(det(V));

> evalm(T1&*J&*inverse(T1));

x1 x1 2 x1 3 3 x2 x2 2 x2 3 7 7 1 x3 x3 2 x3 3 5 1 x4 x4 2 x4 3 ( x2 ? x3 ) ( x4 ? x3 ) ( x4 ? x2 ) ( x1 ? x3 ) ( x1 ? x2 ) ( x1 ? x4 )

21 6 V := 6 1 4

In pachetul linalg exista implementari ale eliminarii gaussiene cu interschimbarea liniilor. Acestea pot ajuta utilizatorul la rezolvarea sistemelor liniare: 11 88 13 81 ?5 ?28 5 ?11 10 57 3 10 57 ?911 7 7 ?80 2 7 7 2377 ?41077 5 0 0 109 109 63082 ?26721 ?41077 2377 2377 2377 Notatia pentru matricea identitate ^n Maple este:
> > &*(): > alias(Id = &*());
A := randmatrix(3,4); gausselim(A); backsub(");

2 62 A := 4 30 4 2 4 ?11 6 0 327 6 6 2 6 4

Deoarece aceasta notatie este greoaie, ^i putem asocia un ,,alias", de exemp plu Id (I ^n Maple este rezervat numarului complex ?1). I; Id Pachetul de algebra liniara contine functia linsolve pentru rezolvarea sistemelor de ecuatii liniare.
> A := matrix( > > b := matrix(
-85, -55, -37, -35], 49, 63, 57, -59], 43], -62], 77], 97, 50, 79, 56], 45, -8, -93, 92]]): 66]]):

Putem utiliza eliminarea gaussiana:

> C := gausselim( concat(A,b), 4 ): > x:=linsolve(submatrix(C,1..4,1..4), col(C,5));

156

Figura 6.20:

7299476 184492 x := 13019547 ?728249 ?1873417 ?31663 1456498 1456498 Se pot considera cazuri ^n care rezultatele sunt exprimate ^n termenii unor parametrii liberi.
> > > > >
A := matrix( -68, -36, 0, 0, 90], 0, 0, 81, 0, 0], -58, 0, 0, 0, 0]]): -90, -79, 0, -92, 0], b := vector(5,0): C := gausselim( concat(A,b), 5 ): x := linsolve( submatrix(C,1..5,1..5), col(C,6) ); 0, 0, -24, 0, 0],

> evalm( A &* x - b ):

395 5 x := 0 2 t 1 0 ? 184 t 1 t 1

Rezolvarea ecuatiilor algebrice Rezolvarea sistemelor de ecuatii se poate realiza prin metoda gra ca, metoda substitutiei, sau utiliz^nd solve. a In metoda gra ca se traseaza gra cul iar pe baza acestuia se aproximeaza solutia. De exemplu, nu punem problema punctului de intersect ie a lui x+y = 4 cu x ? 2y = 10. Utilizam Maple pentru vizualizarea celor doua linii:
Gra c: vezi gura 6.20.a Gra cul este utilizat pentru estimarea punctului de intersectie; ^n cazul curent, punctul de intersect ie este (6,-2). Comanda subs este utilizata pentru a veri ca estimarea facuta:
> subs({x=6, y=-2}, {x+y=4, x-2*y=10}); > with(plots): > implicitplot({x+y=4, x-2*y=10}, x=-1..7, y=-6..3);

f 4 = 4; 10 = 10 g

In metoda substitutiei, exprimam y ^n termenii lui x:

f y = ?x + 1 g Substituim rezultatul ^n ecuatia a doua:


157

> solve(x+y=1,{y});

> subs(y=-x+1, 4*x-8*y=49);

si rezolvam ecuatia ^n x:
> solve( " , {x});

12 x ? 8 = 49

x = 19 4 Substituim valoarea lui x ^n ecuatia lui y: 15 y = ?4 Putem utiliza direct functia solve. Rezolvam, de exemplu: 8 6x ? 7y + 11z ? 4u = 74 > < x + 3y = u ? n 2y ? 3x ? 11 = 0 (a) > x ? y ?? 9z u = 6 22 (b) 4y ? 6x ? 11 = 0 : x + y = zz ? u ? 10 ?
> solve({6*x-7*y+11*z-4*u=74, x+3*y-9*z=u-22, x-y-z-u=6, > x+y=z-u-10}, {x,y,z,u}); > subs(x=19/4, y=1-x);

f z = 3; u = ?7; x = 1; y = ?1 g

In cazul al doilea Maple nu a oferit nici o solutie pentru ca nu exista solutie. Veri cam aceasta concluzie tras^nd curbele asociate ecuatiilor: a Gra c: vezi gura 6.20.b ^n cazul ^n care nu poate determina o solutie simbolica.
> implicitplot({2*y-3*x-11=0, 4*y-6*x-11=0}, x=-20..20, y=-20..20);

> solve({2*y-3*x-11=0, 4*y-6*x-11=0}, {x,y});

Maple poate rezolva ecuatii sau sisteme de ecuatii, e exact, e numeric


> eqs1:={x+2*y+3*z+4*t+5*u=6,5*x+5*y+4*z+3*t+2*u=1, > 3*y+4*z-8*t+2*u=1,x+y+z+t+u=9,8*x+4*z+3*t+2*u= 1}: > a1:=solve(eqs1, {x,y,z,t,u});

110 5 55 110 Raspunsul este returnat sub forma de multime de expresii.


> subs(a1,eqs1);

a1 := u = 8589 ; x = 56; y = 168 ; t = ?1736 ; z = ?13983

f 6 = 6; 1 = 1; 9 = 9 g Raspunsul poate sa nu e numeric. De exemplu, cautam solutia unui sistem de 3 ecuatii ^n 4 necunoscute:
> > > >
eqs2:={(3*a^2+9)*x+(1-3*a^2)*y+(a^2-2*a-2)*z = -7*a^2, (7+4*a)*x+(-8*a^2+3+5*a)*y+2*a*z = 9*a+4+2*a^2, -5*a^2*x+(-3*a-7*a^2)*y+(5-6*a)*z = 4-5*a-a^2}: a2:=solve(eqs2,{x,y,z});

6 5 4 3 2 a2 := x = 22 a + 524 a ? 603 a ? 181 a ? a ? 45 a ? 4 ;

%1

158

6 5 4 292 3 2 y = ? 10 a + 61 a ? 379 a ? %1 a + 79 a + 99 a + 124 ; 6 5 4 3 2 z = ?2 188 a + 228 a + 237 a + 518 a + 41 a + 86 a + 40 %1 6 ? 293 a5 + 224 a4 ? 580 a3 + 268 a2 ? 127 a ? 100 %1 := 40 a

f ?7 a2 = ?7 a2 ; 9 a + 4 + 2 a2 = 9 a + 4 + 2 a2 ; 4 ? 5 a ? a2 = 4 ? 5 a ? a2 g
Maple poate rezolva si ecuatii neliniare:
> eqn3:=cos(x) + y = 9: solve(eqn3,x);

> map(normal,subs(a2,eqs2));

? arccos( y ? 9 )

ln( ?G ) ln( 2 ) Pentru radacinile unui polinom de grad trei, Maple returneaza o secvent a a solutiilor exacte.

> eqn4 := 2^u + G = 0: solve(eqn4,u);

p p 71=3 + 18; ? 1 71=3 + 18 + 1 I 371=3; ? 1 71=3 + 18 ? 1 I 3 71=3 2 2 2 2 Pentru polinoame de grad patru sau mai mare, Maple utilizeaza reprezentarea RootOf pentru radacini.
a4 := RootOf( Z 5 + 3 Z 2 ? 2 Z ? 1 ) Putem determina valorile radacinilor utiliz^nd functia allvalues. Daca Maple a nu gaseste o solutie acceptabila ^n forma RootOf, atunci returneaza un raspuns
> s4:= allvalues(a4)]; > eqn4:=x^5+3*x^2-2*x-1: a4:=solve(eqn4,x);

> eqn3:=x^3-54*x^2+972*x-5839: solve(eqn3,x);

numeric.

:5194892704+ 1:390014884 I;:8651774091] Maple poate de asemenea rezolva sisteme de ecuatii neliniare.
> eqs5 := {2*x*y = 1, x + a*z = 0, 2*x - 3*z = a}: > solve(eqs5,{x,y,z});

s4 := ?1:569778412; ?:3343775377; :5194892704 ? 1:390014884 I;

1 a2 z = ? 3 +a2 a ; y = 2 3 +22 a ; x = 3 + 2 a a In cazul unor solutii multiple, Maple returneaza multimea solutiilor { vezi solutiile urmatoarelor ecuatii:
> eqs6:={x+y+z+w=6,x^2+y^2+z^2+w^2=14,

Sunt situatii ^n care Maple nu poate oferi o solutie simbolica. 159

>

x^3+y^3+z^3+w^3=36,x^4+y^4+z^4+w^4=98}:

a7 := Putem ^n asemenea caz sa obtinem o solutie numerica. a7 := 1:408842218 Solutia poate calculata cu un numar arbitrar de zecimale.
> Digits:=30: a7:= fsolve(eqn7,x); > a7:=fsolve(eqn7,x);

> eqn7:=exp(x*ln(18/10+x))+13/10*x-7=0: > a7:=solve(eqn7,x);

a7 := 1:40884221780205679557366608834

0=0 Functia fsolve, precum solve, poate utilizata pentru determinarea radacinilor unui polinom. In general, fsolve gaseste o singura radacina reala (except^nd a cazul determinarii radacinilor unui polinom). Daca se adauga optiunea complex, se cauta solutiile ^n domeniul complex.
> eqn8 := 3*x^4 - 16*x^3 - 3*x^2 + 13*x + 16: > a8:={fsolve(eqn8,x,complex)};

> Digits:=10: evalf(subs(x=a7,eqn7));

a8 := f1:324717957; 5:333333333; ?:6623589786+ :5622795121 I;

?:6623589786 ? :5622795121 I g

0 :1 10?7 :2 10?8 I ?:2 10?8 I Pentru a veri ca solutia unei ecuatii putem utiliza comanda Maple subs. Maple are o varietate de subrutine de rezolvare a ecuatiilor. De exemplu, pentru relatiile recursive se poate utiliza rsolve:
> eq1 := {f(n+2) = f(n+1) + f(n) , f(0) = 1 , f(1) = 1}: > a1:=rsolve(eq1,f);

> for y in a8 do evalf(subs(x=y,eqn8)) od;

n n p 5 ?2 p 1 5 ?2 1p 2 ? 1p 5 + p 5+1 + 5 a1 := ? 2 5 ? 5+1 1+ 5

> normal(subs(n=7,a1),expanded);

21

Optimizare

> with(simplex);

Maple are un pachet de rutine dedicat programarii liniare.

basis ; convexhull ; cterm ; de ne zero ; display ; dual ; feasible ; maximize ; minimize ; pivot ; pivoteqn ; pivotvar ; ratio; setup ; standardize ]

160

De exemplu, consideram un set de constr^ngeri: a


c1 := f x ?4; y 3 g Testam daca setul de constr^ngeri are solutie: a
> c1:={x<=-4,y<=3}; > feasible(c1);

true Putem de asemenea veri ca daca solutiile ^n ecare parametru sunt pozitive. false Maple utilizeaza metoda simplex pentru optimizare. Consideram functia obiectiv: si constr^ngerile a
> w := -x + y + 2*z: > eq1 := 3*x+4*y -3*z<= 23: eq2 := 5*x-4*y -3*z<= 10: > feasible(c1,NONNEGATIVE);

c2 := f 7 x + 4 y + 11 z 30; 5 x ? 4 y ? 3 z
> maximize(w,c2);

> eq3 := 7*x + 4*y + 11*z <= 30: c2 := { eq.(1..3)};

10; 3 x + 4 y ? 3 z 23 g

adaugam mai multe constr^ngeri, se poate obtine o solutie nita: a


> maximize(w,c2,NONNEGATIVE);

Maple nu returneaza nimic deoarece solutia este nemarginita. Daca

sau

1 x = 0; z = 2 ; y = 49 8

1 x = 0; z = 2 ; y = 49 8 In urmatorul exemplu, sistemul ce se rezolva este degenerat, iar metoda simplex clasica necesita o serie de tehnici de pivotare pentru a iesi din impas. Maple poate ^nsa rezolva aceasta problema:
> z :=
2*x1 - x2 + 8*x3; obj:=z:

> maximize(w,c2 union {x>=0,y>=0,z>=0});

z := 2 x1 ? x2 + 8 x3 3; ?x1 + 3 x2 + 4 x3 2 2]

> cnts1:= 2*x3<=1,2*x1-4*x2+6*x3<=3,-x1+3*x2+4*x3<=2];

cnts1 := 2 x3

1; 2 x1 ? 4 x2 + 6 x3

> sol1 := maximize(z,cnts1,NONNEGATIVE);

sol1 := x3 = 0; x2 = 7 ; x1 = 17

161

Rezolvarea ecuatiilor diferentiale Consideram pentru ^nceput o ecuatie diferentiala ordinara cu ordin ^nt^i: y0 (x)(3x2 + 1) ? 2x = 0. a
> de1:=diff(y(x),x)*(3*x^2+1)-2*x=0;

@ de1 := @x y( x ) ( 3 x2 + 1 ) ? 2 x = 0

1 y( x ) = 3 ln( 3 x2 + 1 ) + C1 Deoarece nu s-a dat nici o conditie initiala, Maple returneaza raspunsul cu un parametru necunoscut. Daca speci cam conditia initiala y(0) = 0. 1 y( x ) = 3 ln( 3 x2 + 1 ) Daca Maple nu poate rezolva o ecuatie, atunci putem cere o solutie sub forma de serie. De exemplu, consideram ecuatia Van der Pol:
Maple este incapabil de a gasi o solutie, astfel ^nc^t nu returneaza nimic. a
> de6:=diff(y(t),t$2)+mu*(y(t)^2-1)*diff(y(t),t)+y(t)=0: > dsolve(de6,y(t)); > dsolve({de6,y(0)=1,D(y)(0)=1},y(t),series); > dsolve({de1,y(0)=0},y(x));

> dsolve(de1,y(x));

1 1 1 1 y( t ) = 1 + t ? 2 t2 + ? 1 ? 3 t3 + 6 + 24 t4 + 6 2 + 2 2 + 1 t5 + O( t6 ) + 15 15 120 Maple poate rezolva sisteme de ecuatii diferentiale:

> de7:={ diff(y(t),t)=x(t)+1, diff(x(t),t)*a = y(t)-3 };

@ @ de7 := @t y( t ) = x( t ) + 1; @t x( t ) a = y( t ) ? 3 y( t ) = 3 + C1 e

> dsolve(de7,{x(t),y(t)});

x( t ) = ?1 + C1 e

? pt p a a? ? pt
a

? t p C2 e ? pa a; ?

t + C2 e ? pa

Maple dispune de asemenea de o optiune de determinare a unor solutii aproximative prin metode numerice. Rezultatul este o procedura care evaluata ^ntr-un punct conduce la valoarea solutiei (si valorile derivatelor daca ecuatia are ordin mai mare dec^t 1). Algoritmul implicit utilizat este bazat pe metoda a Runge-Kutta-Fehlberg 4-5.
> de9:={diff(y(t),t$3)-2*diff(y(t),t$2)+y(t)}: > ic9:={y(0)=1,D(y)(0)=1,(D@@2)(y)(0)=1}: > s9:=dsolve(de9 union ic9,y(t),numeric);

162

s9 := proc(rkf45_x) ... end

@ t = 1:; y( t ) = 2:718281811394141; @t y( t ) = 2:718281811394141; @ 2 y( t ) = 2:718281811394141 @t2 Valorile oferite de procedura numerica pot vizualizate cu odeplot:

> s9(1.);

> with(plots): odeplot(s9,{t,y,yp},0..2,0..10); # rezultat grafic

6.5 MathCad

tru rezolvarea problemelor de calcul numeric, de programare, de editare de documente matematice, si reprezentari gra ce. MathCad este un unealta de calcul puternica proiectata pentru PC-uri, care permite profesionistilor, student ilor si educatorilor sa rezolve probleme de la aritmetica simpla p^na la cele mai avansate teme din algebra simbolica si a ecuatii diferentiale. Ultima versiune (8.0) integreaza facilitati pentru colaborare bazata pe Web. Perfect pentru teme de casa, laboratoare, lucrari de cercetare si prezentari, combina textele cu gra cele. Se pot rezolva probleme numerice si simbolice. Textul poate plasat oriunde ^n jurul ecuatiilor. Gra cele pot importate din alte aplicatii Windows. Versiunea 8.0 pro ta de Microsoft OLE 2 object linking and embedding standard pentru a lucra cu alte aplicatii, drag-and-drop si activare in-place precum client si server. MathCad este distribuit ^mpreuna cu o carte electronica care face disponibila sute de formule standard si constante zice. Sistemul de referinta ^n-linie (Resource Center) ofera acces la numeroase formule utile, valori de date, help si diagrame. Resource Center contine o colectie extensiva de tutoriale, exemple si informatii de referinta cu legaturi la alte resurse de pe Web (exemple: facilitatile MathCad, introducere ^n MathCad, tabele de referinta, exemple speci ce diferitelor domenii, 300 de retete pentru probleme matematice). Este o colectie hiperlegata de documente MathCad (sistem hipertext). Documentele din centrul electronic pot editate pentru a vedea efectul schimbarii de parametrii. Interfata MathCad este interactiva, vizuala si vie ( gura 6.21); adica rezultatele se vad imediat la schimbarea unei valori. MathCad este un software de calcul standard industrial. Are un limbaj de programare. Este la fel de puternic ca limbajele simple de programare, precum Basic. Sintaxa nu este greu de ^nvatat. Ecuatiile ^n MathCad arata ca pe o tabla sau ^ntr-o carte de matematica. MathCad simpli ca documentarea proceselor ingineresti, critica pentru comunicari, ^ntalniri de lucru si asigurarea standardelor de calitate. Prin com163

MathCad (Mathematical Computer Assisted Design) este un mediu utilizat pen-

Figura 6.21: Interfata MathCad si animatie

binarea ecuatilor si gra celor ^ntr-un singur document (worksheet), faciliteaza urmarirea unor calcule complexe. Formatarea documentelor si facilitatile de preparare ^l face usor de operat. Documentele se tiparesc exact cum apar pe ecran. MathCad permite ^nregistrarea sesiunilor de lucru. Versiunile 6-8 permit scrierea rapida a relatiilor printr-o serie de toolbox-uri pentru: aritmetica, evaluare, gra ca, matrice, calcule de tip integrare, derivare, sume, produse, programare, simboluri grecesti, calcul simbolic. Se pot trasa gra ce ^n coordonate carteziene sau polare, gra ce de contur, suprafete si o varietate de alte gra ce tri-dimensionale. Caracteristicile implicite de trasare (axe liniare numerotabile, fara linii de grila, puncte conectate prin linii solide) pot schimbate prin formatarea gra cului printr-un meniu. Facilitatile oferite de MathCad sunt: 1. rezolva sisteme liniare si neliniare cu sute de variabile si constr^ngeri; a 2. creaza si manipuleaza vectori si matrice (inverse, transpuse, determinanti, valori proprii), matrice de matrice; 3. efectueaza calcule avansate din algebra liniara precum factorizari; 4. aplica transformari (de exemplu, Laplace sau Fourier) si inversele lor; 5. rezolva ecuatii diferentiale ordinare, ecuatii cu derivate partiale, probleme cu valori la frontiera, sisteme; 6. determina derivatele si integralele utiliz^nd metode simbolice si numerice; a 7. efectueaza expandari, factorizari, simpli cari de expresii; 8. recunoaste o serie de polinoame si functii speciale; 9. traseaza statistici pe baza unor seturi de date, aplica functii statistice; 10. trateaza valori reale, complexe, dimensionale, rezultate^n format zecimal, 164

binar, octal, hexadecimal; 11. utilizeaza LiveSymbolics pentru efectuarea de calcule simbolice; 12. determina solutia optimala a unei probleme, cu sau fara constr^ngeri; a 13. lucreaza cu expresiile vizual, scrie ecuatiile si expresiile utiliz^nd notatia a matematica reala; 14. aplica calculele imediat; 15. se pot crea functii proprii, utiliza recursii, cicluri, rami cari, de ni structuri complexe de date, construi functii de biblioteca, adauga functii scrise ^n C sau C++, de ni propriile notatii matematice; 16. facilitati pentru prepararea documentelor si vizualizare; 17. documentatie, tutorial, help si numeroase exemple; 18. salvarea documentelor ^n format html. Fiecare ecuatie, bucata de text sau alt element este o regiune. MathCad creaza un dreptunghi invizibil pentru a obtine ecare regiune. Un document este o colectie de astfel de regiuni. Odata de nita o variabila, se pot efectua calcule cu ea dupa si la dreapta regiunii unde a fost de nita. MathCad utilizeaza variabile speciale numite variabile rang pentru a efectua iteratii. C^nd a apare o variabila rang ^ntr-o ecuatie, se calculeaza solutiile ecuatiei nu numai o data, ci o data pentru ecare valoare a variabilei rang. Orice ecuatie din document poate dezafectata. Modi carea unei valori a unei variabile produce modi carea valorilor tuturor expresiilor din document care se refera direct sau indirect la aceasta variabila. Exemple de expresii aritmetice: Expresii si rezultat Tastat 25! = 1:551 1025 25! = 2 + 3i = 2 ? 3i (2 + 3 1i)" = 6 23:14 = 307:688 6:2^3:14 = R 2 x2dx = 2:333 x&x^2 = 1 d x := " # x3 = 0:75 x : 0:5x?x^3 = 0:5 dx 1 v := 5 j := 0: :2 v :<Ctrl> +m1 5 6 j : 0; 2 6 P v = 12 j$v j = j j Q v = 30 i#v i = j j

Identi catori si constante

MathCad foloseste caractere: litere, cifre, litere grecesti, caractere speciale. Un nume este o secventa de caractere introdusa ^ntr-o regiune matematica ce se refera la o variabila sau o functie. Exista doua tipuri: prede nite (interne), ce pot utilizate ^n expresii matematice si cele de nite de utilizator. Interne sunt de exemplu variabilele precum ; e, numele precum m pentru metrii, s pentru secunde, functiile precum mean, eingenvals. Numele de nite de utilizator (identi catori) sunt constituite din litere (mari sau mici), cifre, , `, litere grecesti, 1 cu anumite restrict ii: nu pot

165

^ncepe cu o cifra, simbolul 1 poate sa apara numai ca prim caracter, tot ce este tiparit dupa caracterul . apare ca indice, toate caracterele unui nume trebuie sa aiba acelasi font, marime, stil, nu se face distinctia ^ntre numele de functii si variabile. Astfel x:n este diferit de x n, n ind ^n primul caz un indice tip literal, iar ^n cazul al doilea n este o referinta la un element de matrice. Daca ^ntr-un document se de neste f(x) := si apoi f := 23 , atunci dupa a doua de nitie f(x) nu mai este recunoscut ca functie. Se face distinctia ^ntre literele mari si mici, dar si ^ntre nume scrise ^n fonturi diferite. Un numar singur este numit scalar. In regiunile matematice, orice ^ncepe cu o cifra este considerat numar. O cifra poate urmata si de alte cifre, punct zecimal, cifre dupa punctul zecimal, literele b, h, o pentru numere ^n sistemele binar, hexazecimal si octal, sau i sau j pentru numere complexe (numerele hexazecimale nu pot ^ncepe cu literele de la A la F; astfel se utilizeaza 0a3h ^n loc de a3h pentru a reprezenta numarul 163 ^n hexazecimal). Pentru numere mari sau foarte mici se poate utiliza reprezentarea exponentiala prin simpla multiplicare a numerelor cu o putere a lui 10 (exemplu: 3 108). Datele pot constante sau variabile. Constantele numerice pot ^n forma cu sau fara punct zecimal,^n baza 10, 8, 16. Constantele complexe pot scrise ^n forma algebrica a + ib (exemplu: z := 1 + 1:4i). Exemple constatele globale sunt:: pentru 3.14159, e pentru 2.71828, % pentru 0.01, TOL pentru 10?3 toleranta ^n implementarea metodelor numerice, ORIGIN pentru 0 ca indice al primului element ^ntr-o variabila tablou. Variabile sunt entitati care au nume si li se atribuie expresii de de nitie si care pot : variabile domeniu ce sunt secvent e de numere ^n progresie aritmetica de nite prin valoarea initiala, valoarea urmatoare si valoarea nala; de exemplu x := 1; 1:8: :5 obtinut prin tastare x : 1; 1:8; 5 produce o variabila sir, care la tastare x = se obtine un tabel cu valorile 1, 1.8, 2.6, 3.4, 4.2; ^n lipsa virgulei si valorii urmatoare, ratia progresiei aritmetice este 1 functie de diferenta dintre valoarea nala si cea initiala; variabile indice ce sunt variabile sir ale caror valori sunt numere naturale consecutive; variabile sir ce sunt variabile indexate dupa o variabila indice; de exemplu, variabila indice k := 2: :7 (obtinut prin tastare k : 2; 7) si variabila sir xk := k3 (obtinut prin tastare x k : k3 ); la tastare x = se obtine un tablou cu componentele 0, 0, 8, 27, 64, 125, 216, 243 pentru ca ^ntr-o variabila sir indicii pornesc de la 0; pentru x6 (tastare x 6 =) se obtine x6 = 216;

Operatori Operatorii sunt:

1. numerici sau simbolici, R 2. numai simbolici, de exemplu integrala nede nita ( ), limita (lim! ), limita la st^nga si limita la dreapta, a 3. de programare care sunt utilizati pentru a lega expresiile MathCad via ramuri conditionale, constructori de salt, variabile locale, alte atribute 166

ale limbajelor de programare traditionale. Operatorul de atribuire /de nire := este obtinut prin tastarea ":" (se evalueaza expresia din membrul drept iar valoarea obtinuta se atribuie partii st^ngi). a Operatorul de a sare = a seaza valoarea membrului st^ng dupa semnul =. Oa peratorul de de nire globala (obtinut prin tastarea ~ ) are ca efect xarea valorii variabilei din membrul st^ng cu valoarea expresiei cu valabilitate pentru a tot domeniul documentului. Operatorii aritmetici includ operatorii clasici (+, -, *, /, ^) dar si operatori precum cei de multiplicare a matricelor, produsul scalar a doi vectori, ^nsumare a unei matrice cu un scalar etc. Operatori pe numere complexe sunt conjugata complexa si modulul. Operatiile vectoriale si matriceale sunt operatiile aritmetice, j j pentru determinantul unei matrice, transpunere, produs vectorial, conjugata complexa, ^nsumarea elementelor unui vector, vectorizare, indexare (indici inferiori sau superiori). Operatorii relationali (booleeni) sunt: = sau (egalitate, un semn sau altul functie de versiune), > (mai mare dec^t), < (mai mic dec^t), (mai a a mic sau egal), (mai mare sau egal) 6= (diferit). La evaluarea unei expresii relationale se obtine valoarea 1 sau 0. De exemplu daca x := 2 6= 3, la x = se obtine x = 1, iar 3 + 5=7 = 0 si 192 360 = 1. Operatorii booleeni pot utilizati si la compararea de siruri de caractere (compararea caracter cu caracter, respectiv codurile ASCII). De exemplu, "Euler"<"Mach"=1. P Q Operatorul de ^nsumare , respectiv operatorul de multiplicare , ^nsumeaza, respectiv efectueaza produsul, unei expresiii peste toate valorile unui index sau peste o variabila rang. Exemple: i := 0: :10 f(x) :=

X2
i

g(n) :=

n j XX

i (i x)

f(0) = 0 f(?3) = 0 f( 3) = 55 g(20) = 1:54 103 Rezultatul unei diferentieri numerice nu este o functie ci un singur numar. De exemplu, d d3 x := 2 y := 10 dx x5 y = 800 dx3 x9 = 3:226 104 La evaluarea numerica a unei integrale de nite a unei functii pe un anumit interval, limitele integralei trebuie sa e reale, expresia de integrat poate reala sau complexa. Toate variabilele din integrand cu exceptia variabilei de integrare trebuie sa e de nite anterior ^n document. O variabila rang poate utilizata ca limita de integrare pentru a obtine mai multe rezultate deodata. Exemplu: 2 0 3 Zi i := 0: :3 f(x) := x2 + 3 x + 2 gi := f(x)dx gi = 6 12:667 7 4 3:833 5 0 28:5 167

g(7) = 84

j =1 m=1

Integralele de contur complexe pot evaluate prin parametrizarea contururilor si integrarea peste parametru. Exemplu: x(t) := 2 cos(t) y(t) := 2 sin(t) z(t) := x(t) sin(t) d f(z(t)) dt z(t)dt = 3:142 i 0 Integralele multiple si duble pot de asemenea evaluate. De exemplu, 1 f(z) := z (x; y) :=

x2 + y 2

Z 1Z x
0 0

(x; y)dy dx = 0:383

Pot de niti operatori proprii de catre utilizator. De exemplu, (x; y) := x 1 2 = 0:5 y Apelul se face prin citarea numelui urmat de lista de parametrii actuali ^ntr-o expresie sau ^n partea dreapta a semnului de a sare. Functiile prede nite (interne) sunt: { functii trigonometrice: angle(x,y) (unghiul pozitiv de la axa x la dreapta ce trece prin 0 si punctul de coordonate (x; y)), cos(z), cot(z), csc(z), csc(z), sec(z), sin(z), tan(z); { functii trigomonetrice inverse: acos(z), asin(z), atan(z), atan2(z); { functii hiperbolice: acosh(z), asinh(z), atanh(z), cosh(z), coth(z), csch(z), sech(z), sinh(z), tanh(z); { functii exponentiale si logaritmice: exp(z), ln(z), log(z, b]); { functii Bessel: Ai(x), bei(n,x), ber(n,x), Bi(x), I0(x), I1(x), In(m,x), Jo(x), J1(x), Jn(m,x), js(n,x), K0(x), K1(x), Kn(m,x), Y0(x), Y1(x), Yn(m,x), ys(n,x); { functii cu numere complexe: arg(z), csgn(z), Im(z), Re(z), signum(z); { functii continue netede: if(cond,tol, l), (m,n), (i,j,k), (x), sign(x); { functii combinatorice si din teoria numerelor: combin(n,k), gcd(A), lcm(A), mod(x,y), permut (n,k); { functii de truncheiere si rotunjire: ceil(x), oor(x), round(x,n), trunc(x); { functii speciale: erf(x), erfc(x), hypar(a,b,c,x), ?(x), ?(x,y), Her(n,x), ibeta(a,x,y), Jac(n,a,b,x), Lag(n,x), Leg(n,x), mhyper(a,b,x), Tcheb(n,x), Ucheb(n,x). Functiile de transformare discreta sunt destinate pentru transformarea Fourier {c t(A), ic t(A), t(v), CFFT(A), ICFFT(A), FFT(A), IFFT(v){ si transformarea wavelet {wave(v), iwave(v). 168

Functii Functiile sunt prede nite (intrinseci) sau de nite de utilizator.

Vectori, matrice si tablouri de date Pentru de nirea unui tablou se x-

eaza dimensiunile acestuia (maxim doua dimensiuni), obtin^ndu-se astfel o a macheta cu dimensiunile precizate. Elementele tabloului sunt indicate prin pozitii marcate care urmeaza a completate cu expresii numerice (trecerea de la o pozitie la alta fac^ndu-se cu Tab). O variabila tablou are un nume si o a expresie tip tablou; elementul i; j al unui tablou a este obtinut prin tastare a 0i; j =. Elementele sunt numerotate de la 0 (pentru numerotare de la 1 se poate rede ni constanta globala ORIGIN 1). Carcaterul ' conduce la crearea unor paranteze. Matricele pot utilizate in calcul precum se utilizeaza numerele. Pot de nite utiliz^nd formatele, prin de nirea pe baza de variabile rang, sau prin a importare din Excel, Matlab, Lotus, sau siere ASCII (*.dat, *.prn, *.txt). Un element de tablou nu trebuie sa e neaparat scalar. Un element de matrice poate el ^nsusi o matrice. Astfel se pot crea matrice imbricate. Exemple: m := 0: :3 n := 0: :3
utilizare variabile rang

Mm;n :=identity(m + 1) M0;0 = 1 M1;1 = 1 0 0 1 1 0 0! M2;2 = 0 1 0 0 0 1 Un sir de vectori sau matrice folosec indici superiori pentru identi care. De exemplu, daca se de neste vectorul y0 astfel y<0> := ?2 3 si se de nest e sirul de vectori k := 0: :3 y<k+1> := A y<k> se obtine la y<2> = vectorul 1; 12]T . Functiile ce opereaza pe argumente vectori sau matrice sunt: 1. dimensionale: cols(A), last(v), length(v), max(A), min(A), rows(A); 2. tipuri speciale: diag(v), geninv(A), identity(n), rref(A); 3. caracteristici: cond1(M), cond2(M), conde(M), condi(M), norm1(M), norm2(M), norme(M), normi(M), rank(A), Fr(M); 4. formare de noi matrice: augment(A,B), matrix(m,n,f), stack(A,B), submatrix(A,ir,jr,ic,jc); 5. vectori si valori proprii: eigenvals(M), eigenvec(M,z), eigenvecs(M), genvals(M,N), genvals(M,N); 169

u := 1 v := (24) B0 := 1 2 V := u B1 :=identity(2) v V0 = 1 B0 = 1 2 V1 = (24) B1 = 1 0 0 1

utilizare comenzi

def. pe elemente

6. rezolvarea ecuatiilor liniare: lsolve(M,v); 7. descompuneri: cholesky(M), lu(M), qr(M), svd(M), svds(A); 8. sortare: csort(A,n), reverse(A), rsort(A,n), sort(v). Functia sort realizeaza sortarea crescatoare a elementelor unui vector. De exemplu, "3# "2# v := 7 y := sort(v) y = 3 2 7 Functia reverse sorteaza descrescator elementele unui vector. Functia csort aranjeaza liniile unei matrice astfel ^nc^t elementele coloanei speci cate sa se a gaseasca ^n ordine crescatoare. De exemplu, " 8 1 16 # "2 2 3 # M := 4 3 25 N := csort(M; 2) N = 8 1 16 2 2 3 4 3 15 Functia rsort aranjeaza coloanele unui matrice astfel^nc^t elementele liniei spea ci cate sa se gaseasca ^n ordine crescatoare.

Vectorizarea este o alternativa mult mai comoda dec^t indexarea. De ea


xemplu, pentru calculul solutiilor ecuatiei de grad doi pentru mai multe date, 2 delta(a; b; c) := b" ? 4# a c " # "1# ?3 3 a := 1 b := 4 c := 4 1 1 1
Calcul vectorial

x1 := x2 :=

" "

# p ?b + delta(a; b; c) # p ?b ? delta(a; b; c)
2 a

Calcul indexat

x1k := ?bk + delta(ak ; bk; ck ) 2 a

k := 0: :2 "

2 a Ambele variante produc rezultatul: " # " # 1 2 x1 = ?2 x2 = ?2 ?0:5 ? 0:866i ?0:5 + 0:866i

k pdelta(a ; b ; c ) # x1k := ?bk ? 2 a k k k k

"

Rezolvarea sistemelor de ecuatii Functii de rezolvare si optimizare sunt destinate gasirii radacinilor {polyroots(v), root(f(z),z), Find(z0,z1,. . . ){ sau optimizarii {Maximize(f,z0,z1,.. . ), Minerr(z0,z1,. . . ), Minimize(f,z0,z1,.. . ). Rezolvarea sistemelor liniare se efectueaza pe baza operatiilor matriceale: 3:5 12:33 A := ?4:6 ?6:8 b := ?5:24 x := A?1 b x = 2:5 5:4 3:1
170

Rezolvarea ecuatiilor algebrice si transcedentare se efectueaza precum ^n exemplele ce urmeaza: f(x) := x3 ? 2 x + 0:672 x := 1 x1 := root(f(x); x) x1 = 1:2 g(x) := xf(x) x := 2 x2 := root(g(x); x) x2 = 0:359 ? x1 h(x) := xg(x) x := 1:5 x3 := root(h(x); x) x2 = ?1:559 ? x2 root(x + tan(x); 1) = 1:328 10?5 Se pot rezolva sisteme algebrice de n ecuatii neliniare de n necunoscute pornind de la o aproximatie initiala. De exemplu, x := 1 y := 1 z := 1 f(x; y; z) := y2 ? x z g(x; y; z) := x + z ? 2 (y + 4) h(x; y; z) := (x + 4)2 ? x (z + 32) f(x; y; z) 0 g(x; y; z) 0 h(x; y; z) "0 # 2 nd(x; y; z )= 6 18 Rezolvare de ecuatii diferentiale se face cu functiile: 1. pentru ecuatii diferentiale ordinare: rk xed(y,x1,x2, npoints,D),
Given

sti b(y,x1,x2, npoints,D,J), sti r(y,x1,x2, npoints,D,J), bulstoor(y,x1,x2,acc, D,kmax,save), readapt(y,x1,x2, npoints,D,J), bulstoor(y,x1,x2,acc, D, kmax, save), 2. pentru ecuatii cu valori la limita: sbval(vx1,x2,D,load,score), bvalt(v1,v2,x1,x2,xf,D,load1,load2,score), 3. pentru ecuatii cu derivate partiale: relax(a,b,c,d,e,f,u,rjac), multigrid(M,ncycle).

Functii statistice Functii statistice, probalistice si de analiza a datelor sunt:

1. statistica: corr(A,B), cvar(A,B), gmean(A), hist(int,A), himean(A), kurt(A), mean(A), median(A), node(A), skew(A), stdev(A), Stdev(A), var(A), VAR(A); 2. distributii probalistice: d-, p-, r- combinat cu -beta, -binom, -cauchy, -chisq, -exp, -F, - gamma, -geom, -hypergeom, - lenorm, -logis, -nbinom, -norm, -pois, -t, -unif, -weiball. Astfel mean calculeaza valoare medie a elementelor unui vector, var, valoarea dispersiei elementelor unui vector, stdev, abaterea medie patratica a unui vector, corr, coe cientul de corect ie, hist, histograma unui vector.
bpline(vx,vy,u,n), cspline(vx,vy), interp(v0,vx,vy,x), linterp(vx,vy,x), lspline(vx,vy),

Interpolare si netezire Functii de interpolare si predictie sunt


171

predict(v,m,n), pspline(vx,vy). Functia slope returneaza valoarea pantei polinomului de aproximare de gradul ^nt^i construit prin metoda celor mai mici a patrate, intercept returneaza ordonata la origine a polinomului de gradul ^nt^i a construit prin metoda celor mai mici patrate, linterp returneaza valoarea ^ntrun punct dat a functiei a ne de interpolare, cspline calculeaza coe cientii functiei spline cubice de interpolare, pspline calculeaza coe cientii functiei spline patratice, lspline calculeaza coe cient ii functiei spline liniare, interp returneaza valoarea ^ntr-un punct dat a functiei spline cubice cu coe cientii functiei dati ca vector argument. Functii de regresie si netezire: (a) regresie liniara: intercept(vx,vy), slope(vx,vy), sterr(vx,vy); (b) regresie polinomiala: regress(vx,vy,n), loess(vx,vy,span); (c) regresie generalizata: lin t(vx,vy,F), gen t(vx,vy,vg,F); (d) functie de netezire: medsmooth/suppsmooth(vx,vy), ksmooth(vx,vy,b).

sau alte functii; tipul expresiei returnate de functie poate numeric, vectorial, matriceal. De exemplu: f(x) := 7:56 x3 ? 8:72 x2 ? 6:32 x + 9:47 x := 3:14 f(x) = 137:701 La de nirea unei functii nu este necesara cunoasterea tipului argumentelor, ci numai ce face functia. Tipul argumentelor trebuie cunoscut numai la evaluarea functiei. Daca ^n de nirea functiei se utilizeaza o variabila care nu este ^n lista de argumente, trebuie de nita acea variabila ^naintea de nirii functiei. Valoarea variabilei respective la momentul^n care a fost de nita functia devine astfel parte permanenta a functiei. a := 2 f(x) := xa f(2) = 4 a := 3 f(2) = 4 MathCad suporta de nitia recursiva a functiilor, adica se poate de ni valoarea unei functii ^n termenii unei valori anterioare a functiei. O de nitie recursiva rebuie sa aiba doua parti: 1. o conditie initiala care previne in nitatea recursiei, 2. o de nitie a functiei ^n termenii unor valori anterioare ale functiei. Exemple: factorial(n) := if(n=0; 1; n factorial(n ? 1)) factorial(5) = 120 F(x) := 2 x period := 2 G(x) := if(x < period; F(x); G(x ? period))

Functii de nite de utilizator Argumentele pot variabile, vectori, matrice

Functii diverse:

pentru expresii: IsArray(x), IsScalar(x), IsString(x); pentru siruri de caractere: concat(S1,S2, S3,. . . ]), error(S), num2str(z), search(S,S1,m), str2num(S), str2vec(S), strlen(S), subtr(S,m,n), vec2str(v); 172

pentru acces la

siere: READPRN, WRITEPRN, APPENDPRN, READBMP, READRGB, WRITEBMP, WRITERGB, READ si WRITE combinat cu IMAGE, HLS, HSV, RED, GREEN, BLUE, HUE, LIGHT, SAT, LoadColormap, SaveColormap.

valori ale unor variabile, componentele unui vector sau matrice. Se salveaza pe disc cu extensia .dat sau .prn. Functiile pentru tratarea sierelor de date sunt: WRITE, READ, APPEND, WRITEPRN, READPRN, APPENDPRN. De exemplu, 203 n := 1: :10 WRITE( s) := n i := 2: :4 ai := READ( s) a = 6 0 7 415 2 Dupa j := 11: :15 APPEND( s) := j ^n sierul s apar datele: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Diferenta dintre cele doua tipuri de scriere se poate observa astfel: i := 0: :2 j := 0: :1 WRITEPRN( ) := 1 2 3 4 rezultatele ind sier 12 34 sier gg 1234
WRITE(gg) := 1 2 3 4

Fisiere de date Un sier de date este format din date numerice ce reprezinta

Unitati de masura Se accepta patru marimi zice: lungimea (L), masa


(M), timpul (T), sarcina (Q); alte marimi zice pot derivate din acestea. De exemplu,
kg:= 1 M g:=0.001 kg 5 g=0.005 mass
MathCad recunoaste majoritatea unitatilor prin abrevierea lor scurta. La de nirea unei constante care consissta dintr-un numar urmat imediat de un nume de unitate se poate omite semnul de multiplicare.

F := masa (acc + accg ) F := 8:235 103 kg m s?2 173

m m masa := 75 kg acc := 100 s2 acc g := 9:8 s2

Se veri ca consinstent a dimensionala. Astfel daca ^n de nitiile anterioare atunci acc := 100 m s

F := masa (acc + accg ) The unites in this expresion do not match Daca m este utilizata ca nume de variabila^n document, nu mai poate utilizat ca unitate pentru lungime.

Text Comentarii si texte pot incluse ^n documente. Regiunile speciale de texte se obtin prin tastatea caracterului " si introducerea textului ^ntre caracterele " " care apar; se poate de asemenea crea o banda text ce ocupa toata latimea documentului. Sirurile de caractere ce apar ^n regiuni matematice difera de numele de variabile sau numere, ele ind a sate ^ntre ghilimele. Pot asignate unor variabile, ca elemente de vectori sau de matrice, sau ca argumente a unei functii. De exemplu s :="Rezultatul 5 este bun". Regiunile text sunt utilizate ^n jurul ecuatiilor si gra celor, ca blocuri de texte explicative, informatii de fond, intructiuni pentru utilizarea documentelor etc. Se ignora textul cand se efectueaza calculele, dar se pot insera ecuatii matematice de lucru ^n regiunile text. Ecuatiile inserate ^ntr-o regiune text au aceleasi proprietatii ca a celor din restul documentului. Daca nu se doreste afectarea documentului prin calculul implicat, evaluarea se poate dezafecta. MathCad are si un utilitar de corectare a textelor ^n limba engleza care se aplica regiunilor text. Reprezentari gra ce Se pot trasa gra ce de functii si expresii (inclusiv mai multe pe acelasi gra c). Se pot descrie functii si expresii pe ambele axe. Se pot trasa gra ce de vectori si date. Gra cele se pot formata pe baza de meniu, se pot mari si citi coordonate. O zona gra ca plana se obtine tast^nd @; apare un dreptunghi si 6 mara caje (3 pe axa x si 3 pe axa y). Pozitiile extreme de pe ecare axa denesc domeniul reprezentarilor gra ce, iar pozitiile mediane trebuie completate cu variabilele, functiile sau secventele de expresii ce se reprezinta. Formatul editarii si marimea reprezentarii gra ce se pot modi ca. (exemple de parametrii: size indica marimea reprezentarii gra ce ^n numar de caractere trace types indica simbolul de reprezentare a gra cului: puncte legate prin segmente, gra c prin puncte, gra c ^n scara, gra c cu bare verticale etc., logcycles indica reprezentarea ^n scala logaritmica, subdivisions indica numarul de subdiviziuni pe axe). In gura 6.22 este prezentat gra cul obtinut prin urmatoarele comenzi: n := 60 j := 0: :n xj := 2 n j yj = sin(xj ) 174

Figura 6.22: Gra ce bidimensionale si tridimensionale

In ceea ce priveste gra ca tridimensionala, se pot trasa gra ce de suprafete date prin expresii, suprafete parametrice, gra ce de contur, de ni vectorii de coordonate x; y; z, gra ce pe baza de date matriceale, c^mpuri vectoriale, a gra ce multiple, curbe parametrice ^n spatiul tridimensional. Gra cele se pot formata pe baza de meniu. Se poate edita un titlu, face adnotari pe gra c, roti gra cul sau mari, modi ca culori, trasa linii, evidentia cadru de s^rma, linii de a contur, iluminare. O zona gra ca tridimensionala se obtine tast^nd <Ctrl>+@. Apare un a c^mp care are o singura pozitie marcata ce se completeaza cu numele matricei a care contine cotele suprafetei zij = f(xi ; yj ) calculate pe o retea de puncte (xi ; yj ); i = 0 : : :m; j = 0 : : :n (exemple de parametrii: size ce de neste dimensiunile reprezentarii, rotation ce permite rotatia reprezentarii^n grade, tilt ce de neste ^naltimea observatorului, hidden lines, optiune pentru ascunderea liniilor invizibile, vertical scale ce de neste imaginea verticala a suprafetei { ^nlaltimi diminuate sau accentuate). In gura 6.22 este prezentat gra cul obtinut prin urmatoarele comenzi: f(x; y) := ln(0:01 + x2 + y2 ) n := 20 i := 0: :n j := 0: :n xi := ?1:5 + 0:15 i yj := ?1:5 + 0:15 j Mij := f(xi ; yj ) Setarile la gra cele bi- si tri-dimensionale se fac pe baza de meniuri. Imagini statice pot create, formatate sau importate. O imagine poate creata dintr-o matrice. Astfel se creaza o reprezentare ^n scara de 256 griuri a datelor din matrice, cu ecare element de matrice corespunz^nd la un pixel din imagine a 175

(0-negru, 255-alb, iar numerele ^n afara 0-255 sunt reduse modulo 256 si orice valoare ne^ntreaga este tratata ca si cum partea sa zecimala ar eliminata). Pentru o imagine ^n culori trebuie de nit un operator cu numele a 3 matrice, de acelasi dimensiuni pentru valorile de rosu, verde si albastru ale imaginii. O imagine poate obtinuta prin referirea la un sier bitmap (se indica sierului care se ^ncarca) sau prin importare pe baza de Windows Clipboard. Imaginea poate redimensionata, ^ncadrata, schimbata paleta de culori. Obiectele create de alte aplicatii pot inserate ^n document (nu numai ca imagini statice, ci ele pot editate ^n ^ntregime ^n aplicatiile lor originale). Obiectele pot incluse sau legate (^n ultimul caz obiectul trebuie sa existe ^ntr-un sier extern salvat; editarea acestuia conduce la modi carea obiectului ^n sierul original). Tipul obiectului trebuie selectat dintr-o lista data.

Animatie MathCad creeaza si ruleaza clipuri animate prin utilizarea variabilei interne FRAME. Orice poate facut sa depinda de aceasta variabila poate animat. Aceasta indude nu numai gra ce dar si calcule numeroase (vezi gura 6.21). Animatia poate pornita sau salvata pentru utilizare ^n alte aplicatii. Pasii ^n crearea unei animatii sunt urmatorii: 1. crearea unui expresii sau gra c sau grup of expresii ale caror aparitie depinde de valoarea lui FRAME; 2. se editeaza limitele inferioara si superioara ale lui FRAME (implicit variabila ^nainteaza cu 1); 3. lansare animatie; 4. animatia poate salvata ca sier .AVI.
returna o expresie; se poate utiliza pentru evaluarea simbolica de expresii, variabile, functii sau programe. Exemplu: d (x3 ? 2 y x) ! 3 x2 ? 2 y y2 ! y2 dx p p p z := 8 y + 2 z ! y + 16 17 ! 17 17:0 ! 4:1231056256176605498 Cheile simbolice ajuta la transformarea expresiilor. De exemplu, (x + y)3 expand ! x3 + 3 x2 y + 3 x y2 + y3 Cuvintele cheie des utilizate sunt urmatoarele: complex pentru evaluare ^n domeniu complex, oat ,m] pentru a sarea valorii ^n virgula otanta, cu precizia m (implicit 20), simplify simpli ca o expresie, expand ,expr] expandeaza puterile si produsele ^n expresia data except^nd expr, a factor ,expr] factorizeaza expresia, eventual respect^nd expr (radical sau o lista a de radicali), solve ,var] rezolva o ecuatie pentru variabila var, 176

Calcule simbolice Semnul de egalitate simbolica ! ofera o cale pentru a

collect ,var1,. . . ,varn] colecteaza termenii cu respect la variabilele sau subexpresiile var1 la varn, coe s, var gaseste coe cientii unei expresii care este scrisa ca polinom ^n var sau subexpresie var, substitute, var1=var2 ^nlocuieste toate ocurentele var1 cu var2, series ,var=z,m] expandeaza o expresie^ntr-una sau mai multe variabile^n jurul punctului z, cu ordin m (implicit^n 0 si ordin 6), convert, parfrac , var] converteste o expresie la expansiunea fractionara partiala ^n var, variabila din numitor a expresiei care se converteste, assume, contraint impune constr^ngeri asupra uneia sau mai multe variabile a corespunzator expresiei constraint, fourier , var] si invfourier , var] evalueaza transformata Fourier, respectiv transformata Fourier inversa, a unei expresii cu respect la variabila var, laplace , var], invlaplace , var], ztrans , var], invztrans , var] ] evalueaza transfor-

matele Laplace, inversa Laplace, z, si inversa z, a unei expresii cu respect la variabila var. Exemple: 1 x acos(0) oat; 4 ! 1:571 x x acos(0) ! 2 x 2 d u atan(u) ! 2 ?2 u2 2 2) dz (1 + u (1 + u2 )2 Z1 2 Z1 2 ?x dx ! 1 p e?x dx oat; 10 ! :8862269255 e 2 0 0 ei nZ 1 complex ! cos(n ) + i sin(n ) x e? t dt assume; > 1; =real ! x 0 x 12 a ! ?b x ?3 ! x6 + x a b + b x3 ? a b2 ? a ? a x2 a 1 b x z sin 2 t ztrans, t ! 1 + z 2 Anumite cuvinte cheie accepta modi catori aditionali care specifca tipul de evaluare simbolica. Asemenea modi catori sunt: (a) pentru assume: var=real sau var=RealRange(a,b), (b) pentru simplify: assume=real sau assume=RealRange(a,b). De exemplu, sin(ln(a b))2 simplify ! 1?cos(ln(a)+ln(b))2 sin(ln(a b))2 simplify, trig ! 1?cos(ln(a b))2 (2b)c simplify ! (2b)c (2b)c simplify, assume=real ! 2b c p px2 simplify ! csgn(x) x x2 simplify, assume=RealRange(-10,-5) ! ?x 177

Se pot utiliza mai multe cuvinte cheie ^n secvent a. De exemplu: 1 ex series, x, 3 ! 1 + x + 2 x2 oat ! 1: + x + :5 x2
sau series;x;3

ex

Ignorarea unei de nitii anterioare (prin utilizarea de de nitii recursive sau de nirea ca variabila rang) se poate face astfel: x := 3 (x + 1) (z ? 1) expand ! 4 z ? 4 x := x (x + 1) (x ? 1) expand ! x2 ? 1 m := 1: :10 m ! m Exista trei operatori de limita !, la st^nga si la dreapta: a p2 3 x + b (3 a + b) lim sin(x) ! 1 x +2 1 xlim 3 x + 6 ! 3 xlim+ x2 ! !1 a2 !a x!0? x Rezolvarea simbolica de ecuatii se face astfel: 1 x2 + x = ?2 + a solve, x ! ?1 + p65 p ?1 ? 65 2 (x x3 ? 5 x2 ? 4 x + 20 > 0 solve, x ! (?2 <5x) x < 2) < et + 1 solve, t ! i 3 2 1 (2 b ? a) 7 x + 2 y=a solve, x ! 6 (?1 + 8 ) 7 6 5 4 ?(?4 a + b) 4 x + y=b y (?1 + 8 ) In general procesoarele simbolice si numerice nu comunica^ntre ele. Se poate cere procesorului numeric sa consulte procesorul simbolicw^nainte de a efectua R R R calcule complexe. De exemplu evaloarea expresiei 0u 0v 0 x2 +y2 +z 2 dxdydz cere o munca labrioasa pentru evaluarea unei aproximari numerice, desi se poate obtine o solutie exacta prin c^teva operatii elementare. Acest lucru se^nt^mpla a a pentru ca procesorul numeric nu stie destul pentru a simpli ca expresia ^nainte de a intra ^n calcule. Prin optiunea de optimizare se cere simpli carea de catre procesorul simbolic a expresiei ^nanite de ^nceperea calculului numeric. Astfel daca Z uZ vZ w u := 1 v := 1 w := 1 A := x2 + y2 + z 2dxdydz rezultatul optimizat este 1 A = 3 w 3 v u + 1 v 3 w u + 1 u3 w v 3 3 178
0 0 0

oat

! 1 + x + :5 x2

Programare Functia if permite calculul unei expresii sau a alteia dupa cum
este ^ndeplinita sau nu o anumita conditie. De exemplu: x := 0:5 y := if(x < 1; x2 + 1; 2 x ? 4) y = 1:25 p Pentru calculul a cu precizia " = 0:001 se poate utiliza sirul x0 = a=2; xn+1 = 1 a 2 xn + xn :

N := 100 n := 1: :N " := 0:001 a := 2 a 1 x0 := a x1 := 1 x + x0 xn+1 := if jxn ? xn+1 j ? "; 2 xa + xn 2 2 0 n radical:= xlast(a)?1 radical=1.414 Functia until permite calculul unei expresii at^ta timp c^t o variabila este a a pozitiva. Pentru exemplul de mai sus, 1 xn+1 := until jxn ? xn+1j ? "; 2 xa + xn : n Un program este un tip special de expresie, compusa dintr-o secventa de instructiuni create utiliz^nd operatori de programare. Un program returneaza a o valoare (scalar, vector, matrice, tablouri, sir de caractere). Exemple: discr b2 ? 4 a c p x z w r(a; b:c) := num ?b + discr f(x; w) := denom 2 a log(z) num denom Valoarea programului este valoarea ultimei instructiuni executate de program. Se poate scrie un program care returneaza expresii simbolice. De exemplu, a 0 i 0 n f(n) := while i a + (1 + x)i ] a i i+1 a f(3) expand ! 4 + 6 x + 4 x2 + x3 Instruct iunea conditionala if poate folosita la programare. De exemplu, p xj f(x) := 0 4if? jx2 > 2 otherwise Instruct iunea de salt for are o forma diferita de cea ^nt^lnita^n limbajele de a programare obisnuite: 179

sum(n) := for i 2 1: :n s s+i sum(44) = 990

join(r; s) := 100 !

for x 2 r; s

vm x m m+1

2 Instruct iunea de salt while se bazeaza pe testarea unei conditii. De exemplu, m := 0: :2500 vm := 1 + sin(m) j 0 while vj limita t(v; limita) := j j+1 j t(v; 1:98) = 8 Instruct iunea break este utilizata pentru a ^ntrerupe un for sau while. Instructiunea continue ^ntrerupe situatia curenta si forteaza programul sa continue cu urmatoarea iteratie. De exemplu, i ?1 j ?1 while i <last(v) Pel(v) := i i+1 continue if vi 0 wj vi w 16 16 Instruct iunea return este utilizata pentru a returna o valoare particulara. De exemplu return "int" if oor(x)=x.

r := 101 s := 1 2 102

0 100 1 B 101 C join(r; s) = B 102 C B C @1A

223 "2# 6 27 7 Pel(v) = 27 v := 4 ?3 5

Erori si tratarea lor Daca se ^nt^lneste o eroare la evaluarea unui expresii, a se marcheaza expresia cu un mesaj de eroare si se lumineaza numele sau operatorul ^n cauza ^n rosu. Mesajul de eroare este vizibil numai la click-on pe expresia asociata. Expresiile ce contin erori nu pot procesare. Daca expresia eronata face parte dintr-o de nitie de variabila sau functie, acesta va ram^ne a
180

nede nita. Astfel orice expresie, care se refera la acea expresie eronata, sa e de asemenea nede nita. Erorile aparute ^n execut ia programului cauzeaza oprirea calculelor programului (de exemplu pentru o intrare particulara se poate ajunge la o ^mpartire cu 0 si crea o eroare de singularitate). Si ^n acest caz MathCad marcheaza expresia ^n cauza cu un mesaj de eroare. Instruct iunea on error permite captarea erorilor numerice care astfel forteaza oprirea calculului. De exemplu, gr 0 RF(f; x) := root(f(x); x) RootFind(f) := gc 0 + 2 i RF(f; gc) on error RF(f; gr) f1(x) := x2 ? 2 x ? 3 RootFind(f1) = ?1:000 f2(x) := x2 ? x + 3 RootFind(f2) = 0:500 + 1:658 i RF(f2; 0) = Asa cum MathCad opreste automat evaluarile si produce un tip de eroare, se poate opri evaluarea^ntr-un program utilizator cu ajutorul instructiunii error. error("must be real") if (lm(n) 6= 0) + (lm(k) 6= 0)] error("must be positive") if (n 0) + (k 0)] error("must be integer") if (n 6= oor(n))+(k 6= oor(k)] C(n; k) := error(" srt arg. must be > second") if (n k) "Y k n?i+1 # (n)! on error i (k)!((n ? k))! i=1 C(200; 105) = 7:060 1058 C(2; 38i) = must be real C(?2; 6) = must be positive C(2:5; 3) = must be integer C(105; 200) = srt arg. must be > second

Versiunea 1 dateaza din iunie 1988, iar versiunea 2 din ianuarie 1991. Versiunea curenta 3.0 este implementata pe: Apple Macintosh, IBM PC 386 (MS-Dos si Microsoft Windows), Convex, Dec Vax, RISC, Hewlett-Packard/Apollo, IBM RISC, MIPS, NeXT, Silicon Graphics, Sun - SPARC. Mathematica este un Cas ce poate utilizat precum: 1. un calculator simbolic si numeric unde se pot introduce^ntrebari si obtine un raspuns; 2. un sistem vizualizare pentru functii si date; 181

6.6 Mathematica

Figura 6.23: Trasare de gra ce cu Mathematica

3. un limbaj de programare ^n care se pot creea programe; 4. un mediu de modelare si analiza a datelor; 5. un sistem pentru reprezentarea cunostiintelor ^n domeniile tehnic si stiinti c; 6. o platforma software ^n care se pot rula pachete construite pentru aplicatii speci ce; 7. o cale de creare de documente interactive care contin texte, gra ca animata si sunet corespunzator formulelor active; 8. un limbaj de control pentru programe externe si procese; 9. un sistem care poate apelat din interiorul altor programe. Este divizata ^n doua parti: nucleul care efectueaza calculele si este acelasi pentru toate calculatoarele care ruleaza Mathematica si interfata care este optimizata pentru calculatoare particulare si interfetele gra ce corespunzatoare. Poate comunica cu alte programe utiliz^nd MathLink. a Suporta mai multe stiluri de programare: 1. programare procedurala, cu structuri de bloc, conditionale, iteratii si recursii; 2. programare functionala, cu functii pure, operatori functionali si operatori de structura program; 3. programare bazata pe reguli, cu cautare pattern si orientare obiect. Calculele^n Mathematica pot divizate^n trei clase principale: numerice, simbolice, gra ce. Suporta peste 750 de operatii matematice. In continuare se considera c^teva exemple simple. Fiecare consista dintr-un dialog scurt cu Mathematica. Textul etichetat cu In n]:= este textul introdus 182

de utilizator, iar liniile etichetate cu Out n] sunt rezultatele Mathematica.

Exemple de calcule numerice:

In 1]:= 3^100 Out 1]= 515377520732011331036461129765621272702107522001 In 2]:= N %] Out 2]= 5.15378 1047 In 3]:= FindRoot BesselJ 0,x],fx,14.5g] Out 3]= fx!14.9309g In 4]:= NIntegrate Sin Sin x]],fx,0,Pig] Out 4]= 1.78649 In 5]:= FactorInteger 70612139395722186] Out 5]= ff2, 1g, f3, 2g, f43, 5g, f26684839, 1gg In 1]:= x^4/(x^2-1) 4 Out 1]= x 2 ?1 + x In 2]:= Integrate %,x] Out 2]= x + x3=3 + Log ?1 + x] ? Log 1 + x] 2 2 In 3]:= (x+y)^2; In 4]:= Expand %] Out 4]= x2 + 2xy + y2 In 5]:= D Integrate x^2 Sin x]^2, x], x] 2 2 Out 5]= x ? Cos 2x] + (1 ? 2x )Cos 2x] 2 4 4 In 6]:= Simplify %] Out 6]= x2 Sin x]2 In 7]:= Series %,fx,0,10g] 8 x10 6 Out 7]= x4 ? x + 2x ? 315 + O x]11 3 45 In 8]:= Solve fa x+b y= =0, x+y= =cg,fx,yg] Out 8]= ffx! ? ( bc ); y! ac gg a?b a?b In 9]:= m=Table 1/(i+j+1),fi,3g,fj,3g] Out 9]= ff 1 ; 1 ; 1 g; f 1 ; 1 ; 1 g; f 1 ; 1 ; 1 gg 3 4 5 4 5 6 5 6 7 In 10]:= Inverse m] Out 10]= ff300, -900, 630g, f-900, 2880, -2100g, f630, -2100, 1575gg In 11]:= Eigenvalues N m]] Out 11]= f0.657051, 0.0189263, 0.000212737g

Exemple de calcule simbolice:

183

In 12]:= Permutations fa, b, cg] Out 12]= ffa,b,cg,fa,c,bg,fb,a,cg,fb,c,ag,fc,a,bg,fc,b,agg

Exemple de comenzi pentru gra ca si sunete: In 1]:= Plot Sin Exp x]],fx,0,Pig] In 2]:= Plot3D Sin x y], fx,0,Pig, fy,0,Pig ] In 3]:= ContourPlot Sin x+Sin y]],fx,-2,2g,fy,-2,2g] In 4]:= ParametricPlot3D f u Sin t], u Cos t], t/3g, ft,0,15g,fu,-1,1g, Ticks!None] In 5]:= Show Graphics3D f Cuboid f0,0,0g], Cuboid f2,2,2g], Cuboid f2,1,3g], Cuboid f3,2,1g], Cuboid f2,1,1g] ] In 6]:= Play Sin 10000/t],ft,-4,4g] Exemple pentru caracteristici limbaj: In 1]:= f n ]:=Table Prime i],fi,ng] In 2]:= f 10] Out 2]= f2, 3, 5, 7, 11, 13, 17, 19, 23, 29g In 3]:= 1+x^2+3 x^/.x? >1+a

Out 3]= 1+(1+a)2 +3 (1+a)3 In 4]:= fac n ]:= n fac n-1] In 5]:= fac 1]:=1 In 6]:= ?fac Global`fac fac 1]:=1 fac n ]:=n fac n-1] In 7]:= fac 20] Out 7]= 2432902008176640000 In 8]:= f 0]=f 1]=1; f n ]:=f n-1]+f n-2] In 9]:= Trace f 4], f ]] Out 9]= ff 4], ff 3], ff 2], ff 1]g, ff 0]gg, ff 1]gg, ff 2], ff 1]g, ff 0]ggg In 10]:= g/: g i ]+g j ]:=g i+j] In 11]:= g x]+g y]+g z] Out 11]= g x+y+z] In 12]:= NextPrime n Integer]:=Module fk=ng, While !PrimeQ k], k++]; Return k]]

sunt siere scrise ^n limbajul Mathematicace consista ^n colectii de de nitii cu privire la domeniul particular de aplicatii. Citirea unui pachet se face prin << nume unde nume este numele sierului-pachet. De exemplu: In 1]:= <<DiscreteMath`Permutations`
In 2]:= RandomPermutation 10] Out 2]= f3, 1, 2, 6, 5, 7, 8, 10, 4, 9g

Exemple de utilizare a pachetelor Mathematica Pachetele matematice

184

In 3]:= <<Graphics`Polyedra` In 4]:= Show Polyedron GreatIcosahedron]]

Exemple de comenzi pentru interfata cu alte programe

In 1]:= (a^2+b^2)/(x+y)^3; In 2]:= TeXForm %] Out 2]= //TeXForm=fffa^2g+fb^2ggnover fffnleft(x+ynright)g^3]gg In 3]:= FortranForm %%] Out 3]= //FortranForm= (a**2+b**2)/(x+y)**3 In 4]:= ReadList "date.dat",Number] Out 4]= f15.6, 23.4, 1.77, 18.9, 20.7g

Aritmetica Operatiile aritmetice sunt: adunare (x + y + z), scadere (x ? y), minus (?x), ^nmultire (x y z sau x y z), ^mpartire (x=y), putere
N expresie,n]. Exemple: In 1]:= 1/3+2/7 Out 1]= 13 21 In 2]:= 1/3+2/7//N Out 2]= 0.619048 In 3]:= 452/62 Out 3]= 226 31

(x^y). Aproximatiile numerice se obtin prin expresie//N sau N expresie] sau

In 4]:= 452./62 Out 4]= 7.29032 In 5]:= Pi Out 5]= Pi In 6]:= N Pi,10] Out 6]= 3.1415926536 Cele mai des utilizate functii sunt urmatoarele: Sqrt x] pentru px, Exp x] pentru ex , Log x] pentru loge x, Log b,x] pentru logb x, Sin x], Cos x], Tan x], ArcSin x], ArcCos x], ArcTan x], n! pentru 1 2 : :: n, Abs x] pentru jxj, Round x] pentru x], Mod n, m] pentru n modulo m, Random ] pentru generarea unui real ^ntre 0 si 1, Max x,y,: : :], Min x,y,: : :], FactorInteger n] pentru descompunerea ^n

factori primi. Constantele cele mai comune sunt urmatoarele: Pip pentru 3:14159, E pentru e 2:71828, Degree pentru =180, I pentru i = ?1, In nity pentru 1. Operatorii speci ci numerelor complexe sunt urmatorii: x+I y pentru numarul complex x + iy, Re z] pentru partea reala, Im z] pentru partea imaginara, Conjugate z] pentru conjugatul complex al lui z, Abs z] pentru jz j, Arg z] pentru argumentul ^n z = jz jei . ^n Mathematica, caracterul % semni ca un rezultat precedent. Astfel, % I este ultimul rezultat generat, %% este penultimul rezultat generat, %%: : :% (k ori) este al k-lea rezultat anterior, %n este rezultatul liniei de iesire Out n] Re-evaluarea unei comenzi este permisa prin comenzile: %n sau Out n] ce ofera valoarea celei de a n-a iesiri, In n] ce ofera a n-a intrare, pentru re-evaluare, si InString n] ce indica textul din a n-a intrare. Dintre numeroasele functii enumeram urmatoarele: Round x], Floor x], Ceil185

ing x], Sign x], Random Real, fxmin, xmaxg], Random Integer, fimin,imaxg],

Mod k,n], Quotient m,n], GCD n1; n2; : : :], LCM n1 ; n2; : : :], IntegerDigits n,b], FactorInteger n], Divisors n], Prime k], PrimePi x], PrimeQ n], n!, n!!, Binomial n,m], Csc z], Sec z], Cot z], Sinh z], Cosh z], Tanh z], ArcCoth z], LegendreP n,x], ChebyshevT n,x], ChebyshevU n,x], HermiteH n,x] etc.

Exista patru reguli ^n utilizarea parantezelor: paranteze rotunde pentru grupare, paranteze drepte pentru functii, acolade pentru liste, paranteze drepte duble pentru indexare. Iesirea unui calcul poate inhibata prin introducerea caracterului ";". Astfel, expr1; expr2; expr3 executa o serie de operatii furniz^nd numai rezultatul a ultimei. Controlarea a sarii rezultatelor se realizeaza prin urmatoarele cai: 1. comanda; executa comanda fara a sare rezultat; 2. expr//Short a seaza o singura linie din forma de iesire a expr; 3. Short expr,n] a seaza n linii ale iesirii lui expr; 4. Length expr] furnizeaza numarul total de termeni ai expresiei expr.

1. x=valoare asigneaza valoare variabilei x; 2. x=y=valoare asigneaza valoare at^t lui x c^t si lui y; a a 3. x=. sau Clear x] ^nlatura orice valoare asignata lui x. Se utilizeaza urmatoarele conventii de nume: aaaa este un nume de variabila care contine numai litere mici, iar Aaaa este un obiect construit a carui nume ^ncepe cu o litera mare. xy (fara spatiu) este variabila cu numele xy, iar x y (cu spatiu) este x y. ^nlocuirea simbolurilor cu valori ^n expresii se efectueaza prin expr/. x? > I valoare ce ^nlocuieste x cu valoare ^n expresia expr sau expr/.fx? > xval, y!yvalg ce efectueaza doua ^nlocuiri. Exemple: In 1]:= x? >3+y Out 1]= x!3+y
In 2]:=]x^2-9/.% Out 2]=]-9+(3+y)2

Variabile Asignarea valorilor la variabile se efectueaza prin:

Obiectele pot colectate ^n liste pentru a putea entitate. Exemple:


In 1]:= f6, 7, 8g-f3.5, 4, 2.5g In 2]:= Exp %]//N In 3]:= v=f2, 4, 3.1g; v/(v-1)

tratate ulterior ca o

Elementele unei liste sunt numerotate ^n ordinea aparitiei, ^ncep^nd cu 1: a


In 1]:= f5, 8, 6, 9g 2]] In 2]:= f5, 8, 6, 9g f3, 1, 3, 2, 4g]] Out 1]= 8 Out 2]= f6, 5, 6, 8, 9g

Out 1]= f2.5, 3, 5.5g Out 2]= f12,1825, 20.0855, 244.692g 4 Out 3]= f2, 3 ,1.47619g

Notebooks Sunt documente interactive care consista dintr-o ierarhie de celule. Fiecare celula contine un material particular: text, gra ca, intrari sau iesiri Mathematica s.a.m.d. Secvent ele de celule pot aranjate ^n grupuri
186

reprezent^nd materiale a at ^ntr-o anumita relatie. Extinderea ecarei celule a ^ntr-un notebook este indicata prin paranteza dreapta din dreapta. Daca exista un grup de celule, o alta paranteza dreapta indica extinderea grupului. ^n I general, interfata cu utilizatorul permite ^nchiderea grupurilor de celule astfel ^nc^t numai primele celule sa e vizibile. a

Obtinerea de informatii Caile pentru obtinerea informatiilor asupra


obiectelor din Mathematica sunt urmatoarele: 1. ?Nume: informatii scurte despre obiectul Nume; 2. ??Nume: informatii suplimentare despre obiectul Nume; 3. ?Aaaa*: arata informatia asupra tuturor obiectelor a caror nume ^ncepe cu Aaaa.
In 1]:= x^2+x-4 x^2 In 2]:= (x+2y+1)(x-2)^2; In 3]:= Expand %] In 4]:= Factor %] Out 1]= x-3 x2 Out 3]= 4-3x2+x3 +8y-8x y+2x2 y Out 4]= (-2+x)2 (1+x+2y)

Expresii algebrice
numere. Exemple:

Mathematica poate trata at^t formule algebrice c^t si a a

Expand expr] ce efectueaza multiplicarile si ridicarile la putere, rezultatul ind o suma de termeni si Factor expr]: scrie expr ca produs minim de factori. Simpli carea expresiilor algebrice se realizeaza prin Simplify expr] care ^ncearca sa

Functiile cele mai comune pentru transformarea expresiilor algebrice sunt:

gaseasca o forma a expresie cu cel mai mic numar de parti, aplic^nd o varietate a de transformari algebrice. Exemple:
In 1]:= Simplify x^2+2x+1] Out 1]= (1+x)2

Pe l^nga functiile mai sus mentionate, pentru transformarea expresia ilor algebrice se mai utilizeaza: ExpandAll expr] ce aplica Expand peste tot, Together expr] ce pune toti termenii la un numitor comun, Apart expr] ce separa ^n termeni cu numitori simplii, Cancel expr] ce reduce factorii comuni dintre numarator si numitor, Collect expr,x] ce grupeaza puterile lui x, FactorTerms expr,x] ce extrage factorii care nu depind de x, Expand expr, Trig!True] ce expandeaza functiile trigonometrice (de exemplu, sin(x)^2 ^n termenii lui sin(2x)), Factor expr, Trig!True] ce factorizeaza functiile trigonometrice (de exemplu, sin(2x) se transforma^n termeni de sin(x) si cos(x)), ComplexExpand expr] ce efectueaza Expand presupun^nd ca toate variabilele sunt a reale, PowerExpand expr] ce transforma (xy)n ^n xnyn s.a.m.d. Exemple:
In 1]:= e=(x-1)^2 (2+x)/((1+x) (x-3)^2); Expand e] 3x x3 2 Out 1]= (?3 + x)2(1 + x) ? (?3 + x)2 (1 + x) + (?3 + x)2(1 + x) In 2]:= ExpandAll e]

187

Out 2]= 9 + 3x ? 5x2 + x3 ? 9 + 3x ? 5x2 + x3 + 9 + 3x ? 5x2 + x3 2 3 3 In 3]:= Together %] Out 3]= 9+3??x+2x+x3 x 5x 5 1 In 4]:= Apart %] Out 4]= 1 + (?3+x)2 + 4(?19 x) + 4(1+x) 3+ 2 (2+x) In 5]:= Factor %] Out 5]= (?1+x)2 (1+x) (?3+x)2 In 6]:= Simplify e] Out 6]= (?1+x)2 (2+x) (?3+x) (1+x) In 7]:= v=Expand (3+2x)^2(x+2y)^2] Out 7]= 9x2 +12x3 +4x4 +36xy+48x2y +16x3y +36y2 +48xy2 +16x2y2 In 8]:= Collect v,x] Out 8]= 4x4 + 36y2 + x3(12 + 16y) + x2(9 + 48y + 16y2 ) + x(36y + 48y2 ) In 9]:= FactorTerms v,y] Out 9]=(9 + 12x + 4x2)((x2 + 4xy + 4y2 ) In 10]:= Expand Cos x]^3 Sin x]^2, Trig? >True] Out 10]= Cos x] ? Cos 3x] ? Cos 5x] 8 16 16 In 11]:= Factor %, Trig!True] Out 11]= Cos x]3Sin x]2 In 12]:= PowerExpand Sqrt x y] ] Out 12]= Sqrt x] Sqrt y] Functiile care extrag parti ale polinoamelor sunt urmatoarele: Coe cient expr,form] ce determina coe cientul lui form din expr, Exponent expr,form] ce determina puterea maxima a lui form ^n expr, Part Expr,n] sau expr n]] ce a a al n-lea termen a expr. Functiile care extrag parti ale expresiilor rationale sunt: Numerator expr] pentru numaratorul lui expr si Denominator expr] pentru numitorul lui expr.

3x

x3

Exemple:

In 1]:= e=Expand (1+3x+4y^2)^2] Out 1]= 1 + 6x + 9x + 8y + 24xy + 16y In 2]:= Coe cient e,x] Out 2]= 6+24 y2 In 3]:= Exponent e,y] Out 3]= 4 In 4]:= Part e,4] Out 4]= 8y2 1+ In 5]:= r=(1+x)/(2(2-y)) Out 5]= 2(2?xy) In 6]:= Denominator %] Out 6]= 2(2-y) In 7]:= Denominator 1+x+2/y] Out 7]= 1
2 2 2

FactorTerms poly], PolynomialQ expr,x], Variables ply], Length poly], Exponent poly,x], Coe cient poly,expr], ExpandNumerator expr], ExpandAll expr], Cancel expr], PolynomialQuotient poly1,poly2,x], PolynomialGCD poly1,poly2], PolynomialLCM poly1,poly2], FactorList poly], Decompose poly,x], PolynomialMod poly, p], Expand expr,Trig!True], Factor expr,Trig!True], ComplexEpand expr] etc.

Alte functii des utilizate asupra polinoamelor sunt urmatoarele:

Operatii simbolice Principalele operatii simbolice sunt urmatoarele:


1. D f,x], derivata partiala @f=@x; 188

2. Integrate f,x], integrala nedePnita fdx; 3. Sum f,fi,imin,imaxg], suma imax f; i=imin 4. Solve lhs= =rhs,x], solutia unei ecuatii ^n x; 5. Series f,fx, x0 , ording], exprimarea lui f ^n serii de puteri ^n x = x0; 6. Limit f, x!x0 ], limita limx!x0 f. Operatorul de derivare poate aplicat sub mai multe forme: D f,x] pentru @f=@x, D f,x1,x2 ,: : :] pentru derivata multipla (@=@x1 @=@x2 : : :)f, D f,fx,ng] pentru derivata repetitiva @ n f=@xn , Dt f] pentru diferentiala totala df, Dt f,x] pentru derivata totala df=dx. Exemple:
In 1]:= D x^n,x] In 2]:= D x^n,fx,3g] In 3]:= D 2 x f x^2], x] In 4]:= Dt x^n,x] Out 1]= nx?1+n Out 2]= (?2 + n)(?1 + n)nx?3+n Out 3]= 2f x2 ] + 4x2f 0 x2] Out 4]= nx?1+n + xn Dt n; x]Log x]

Integrarea poate astfel: f,x] pentru integrala xmax nita R fdx, Integrate f,fx, realizataxmaxg] Integrate integrala de nita R nede fdx, xmin, pentru xmin Integrateymax xmin, xmaxg, fy, ymin, ymaxg] pentru integrala multipla R xmax R f,fx,f dy dx. Exemple:
xmin ymin

In 1]:= Integrate x^n,x] In 2]:= Integrate Sin Sin x]],x] In 3]:= Integrate Sin Sin x]],fx,0,1g] In 4]:= N %] imaxg], pentru suma

Out 1]= x n 1+ Out 2]= Integrate Sin Sin x]],x] Out 3]= Integrate Sin Sin x]],fx,0,1g] Out 4]= 0.430606

1+n

Functiile asociate pentru sume si produse sunt urmatoarele: Sum f,fi, imin, Pimax f, Sum f,fi,imin,imax,dig], pentru suma antei=imin rioara cu P and cu pasul di, Sum f,fi,imin,imaxg,fj,jmin,jmaxQ], pentru suma i cresc^ Pimax imax f, Product f,fi,imin,imaxg], pentru produsul g imax f. Exi=imin i=imin i=imin emple:
In 1]:= Sum x^i/i,fi,1,4g] In 2]:= Sum x^i/i,fi,1,5,2g] In 3]:= Sum 1/i^3,fi,1,20g]//N In 4]:= Sum 1/i^3,fi,1,In nityg] In 5]:= N %] In 6]:= Product x,f5g] Out 1]= x + x2 + x3 + x4 Out 2]= x + x33 + x55 Out 3]= 1.20087 Out 4]= Sum i?3 ,fi,1,In nityg] Out 5]= 1.20206 Out 6]= x5
2 3 4

Asignarile si testele se disting astfel: x=y ^nseamna asigneaza lui x valoarea y, iar x= =y ^nseamna testeaza daca x si y sunt egale. Exemple: 189

In 1]:= x=4; x In 2]:= x= =4 In 3]:= x=. In 4]:= x= =5 In 5]:= %/.x? >4 In 6]:= 2 x+x^2= =2 x+x^2 In 7]:= 2 x+x^2= =x(2+x); In 8]:= ecuatie=%

Out 1]= 4 Out 2]= True Out 4]= x= =5 Out 5]= False Out 6]= True Out 8]= 2x + x2 = = x(2 + x)

Operatorii relationali se scriu astfel ^n Mathematica: x = = y; x! = y; x > y; x >= y; x < y; x <= y; x = = y = = z; x! = y! = z; x > y > z etc. Operatorii logici disponibili sunt urmatorii: !p pentru negarea lui p, p && q && : : : pentru si logic, p j j q j j : : : pentru sau logic, Xor p, q, : : :] pentru sau exclusiv, If p, then, else] pentru then daca p este adevarat si else ^n caz contrar, LogicalExpand expr] pentru simpli carea expresiilor logice. Exemple:
Out 1]= False Out 2]= True Out 3]= (p j j q) && !(r j j s) Out 4]= p && !r && !s j j q && !r && !s Operatiile cu seriile de puteri sunt: Series expr, fx, x0, ngg determina expansiunea Taylor a expr ^n vecinatatea punctului x = x0 cu cel mult n termeni si Normal serie] trunchiaza seria de puteri la o expresie ordinara. Exemple: In 1]:= Series 1+f t],ft,1,2g] Out 1]= (1 + f 1])2+ f 0 31]t + 4f 21]t + O t]3 In 2]:= Series Exp x],fx,0,4g] Out 2]= 1 + x + x2 +2 x6 + x3 + O x]5 24 4 In 3]:= %^2(1+%) Out 3]= 2 + 5x + 132x + 356x + 97x + O x]5 244 3 2 In 4]:= Normal %] Out 4]= 2 + 5x + 132x + 356x + 97x 24 Limitele pot calculate cu ajutorul functiei Limit expr, x!x0]. Exemple: In 1]:= e=Sin x]/x; e/.x? >0 Out 1]= Indeterminate In 2]:= Limit e, x? > 0] Out 2]= 1 In 3]:= Limit Sin 1/x], x? > 0] Out 3]= RealInterval f-1,1g] In 4]:= Limit 1/x, x? > 0, Direction!1] Out 4]= -In nity In 5]:= Limit 1/x, x? > 0, Direction!-1] Out 5]= In nity
00
2

In 1]:= 3!=2!=3! In 2]:= 7>4 && 2!=3 In 3]:= (p j j q) && !(r j j s) In 4]:= LogicalExpand %]

evidentiaza:

Pachete speciale Dintre pachetele existente pentru calcul simbolic se


190

1. << Calculus`VectorAnalysis` ^ncarca pachetul de analiza vectoriala ce contine SetCoordinates system nume]] pentru speci carea unor sisteme de coordonate (Cartesian, Cylindrical, Spherical) si furnizeazarea numelor coordonatelor ^n acest sistem, Grad f] ce evalueaza rf, Div f] ce evalueaza r f, Curl f] ce evalueaza r f, Laplacian f] ce evalueaza Laplacian r2f, CrossProduct v1 , v2 ] ce evalueaza v1 v2. 2. << Calculus`SymbolicSum` ce contine, de exemplu, SymbolicSum f, fi, ng] care determina suma simbolica a lui f cu i p^na la n. a Pachetele standard distribuite cu Mathematica includ numeroase functii pentru analiza statistica a datelor. De exemplu << Statistics`DescriptiveStatistics` ^ncarca pachetul de statistica descriptiva, care include functii ca Mean data],
Median data], Variance data], StandardDeviation data], LocationReport data], DispersionReport data], ShapeReport data].

Rezolvarea ecuatiilor Pentru gasirea solutiilor ecuatiilor algebrice se uti-

lizeaza urmatoarele facilitati: 1. Solve membrst= =membrdr, x]: rezolva o ecuatie ^n x, a s^nd o lista de a reguli pentru x; 2. Solve fecuatie1,ecuatie2, : : : g, fx, y, : : : g] rezolva un sistem de ecuatii ^n necunoscutele x; y; : : :; 3. x/.solutie: utilizeaza lista de reguli pentru a obtine valori pentru x; 4. Eliminate fecuatie1,ecuatie2, : : : g, fx, y,: : : g] elimina x; y : : : din setul de ecuatii simultane; 5. Reduce fecuat ie1,ecuatie2, : : : g, fx, y, : : : g] furnizeaza o multime de ecuatii simpli cate care includ toate solutiile posibile ale sistemului initial. Exemple: In 1]:= Solve x^2+2x-7= =0,x] Out 1]=ffx! ?2+4Sqrt 2] g; fx! ?2?4Sqrt 2] gg 2 2
In 2]:= N %] Out 2]=ffx!1.82843g, fx!-3.82843gg In 3]:= x/.% Out 3]=f1.82843, -3.82843g In 4]:= x^2+3 x/.%% Out 4]=f8.82843, 3.17157g In 5]:= Solve 2-4x+x^5= =0,x] Out 5]=fToRules Roots -4 x+x5 = =-2,x]]g In 6]:= N %] Out 6]= ffx!-1.51851g, fx!-0.116792-1.43845 Ig, fx!-0.116792+1.43845 Ig, fx!0.508499g, fx!1.2436gg In 7]:= Solve fa x+y= =0, 2 x+(1-a) y= =1g, fx, yg] a 1 Out 7]= ffx! ? ( ?2 + a ? a2 ); y! ?2 + a ? a2 gg In 8]:= Eliminate f a x+y= =0, 2 x+(1-a)y= =1g, y] Out 8]= ?(ax) + a2 x = = 1 ? 2x In 9]:= Solve fx= =1, x= =ag, x] Out 9]= fg In 10]:= Reduce fx= =1, x= =ag, x] Out 10]= a= =1 && x= =1 b In 11]:= Reduce a x+b= =0,x] Out 11]= a!=0 && x=-( a ) j j a= =0 && b= =0

191

Rezolvarea simbolica a ecuatiilor diferentiale se efectueaza prin intermediul functiei DSolve cu formele: DSolve ecuatie, y x], x] rezolva o ecuatie diferentiala pentru y x], cu x variabila independenta si DSolve ecuatie, y, x] ofera solutia pentru y ^n forma pura a functiei. Exemple: In 1]:= DSolve y' x]= =a, y x], x] Out 1]= ffy x]!E a x C 1]gg In 2]:= DSolve fy' x]= =a, y 0]= =1g, y x], x] Out 2]= ffy x]!E a x gg

In 12]:= Solve a x= =0,x] Out 12]= ffx!0gg In 13]:= Roots a x= =0,x] Out 13]= x= =0 In 14]:= Reduce a x= =0,x] Out 14]= a!=0&& x= =0 j j a= =0 In 15]:= m=Table i+j,fi,3g,fj,3g]; Det m] Out 15]= 0 In 16]:= Solve m.fx,y,zg==fa,b,cg,fx,y,zg] Out 16]= fg In 17]:= Reduce m.fx,y,zg= =fa,b,cg,fx,y,zg] Out 17]= c= =-a+2b&& x= =-4a+3b+z&&y= =3a-2b-2z In 18]:= ec=fx= =1+2a, y= =9+2xg; In 19]:= Solve ec,fx,yg] Out 19]=ffx!1+2a, y!9-2(-1-2a)gg 1 1 In 20]:= Solve fx+y= =1&& x-y= =2g,fx,yg] Out 20]= ffx! 2 ,y!-( 2 )gg In 21]:= SolveAlways Implies x+y= =1, a x^2+b x y +c y^2= =1], fx,yg] Out 21]= ffa!1,b!2,c!1g In 22]:= m=ff1,5g,f2,1gg; Solve m.fx,yg==fa,bg,fx,yg] b Out 22]= ffx! ?a + 58b ,y! 2ba - 9 gg 9 b In 23]:= LinearSolve m,fa,bg] Out 23]= f-( a - 58b ),-( ?b2a - 9 )gg 9

In 3]:= DSolve fx' t]= =y tt],y' t]= =x 2t]g,fx t],y t]g,t] 2 t 2t 1]+ 2t Out 3]= ffx! C 1]+E C 1]?C 2]+E C 2] ; y t]! ?C 1]+E C 2E tC 2]+E C 2] gg 2E t In 4]:= DSolve y' x]= =x+y x], y, x] Out 4]= ffy!(?1 + E #1 C 1] ? #1&)gg In 5]:= y x]+y x]/.% Out 5]= f?1 ? x + 2E x C 1]g

simbolice. Metodele numerice ^nsa pot oferi solutii apropiate de cele exacte. Operatiile numerice de baza sunt urmatoarele: 1. N expr] ofera valoarea numerica a expr; R xmax 2. NIntegrate f, fx, xmin, xmaxg] aproximare a integralei xmin f dx; P 3. NSum f, fi, imin, In nityg] aproximare numerica a sumei 1 f; Q1imin 4. NProduct f, fi, imin, In nityg] aproximare a produsului imin f; 5. FindMinimum f, fx, x0g] determina minimul lui f, porind de la x = x0. Rezolvarea numerica a ecuatiilor se realizeaza prin urmatoarele functii: NSolve mebrst= =membrdr, x] rezolva numeric ecuatia polinomiala; NSolve fmebrst1 = =membrdr1, mebrst2= =membrdr2 , : : : g, fx, y, : : : g] rezolva numeric sistemul de ecuatii polinomiale; FindRoot membrst= =membrdr, fx, x0g] cauta o aproximare numerica a unei ecuatii, pornind de la x = x0 ; 192

Matematica numerica ^n multe calcule nu este posibil sa obtinem rezultate I

de la x = x0 , y = y0 ; : : :. Exemple:

FindRoot fmebrst1= =membrdr1, mebrst2 = =membrdr2 , : : : g, fx, x0 g, fy, y0 g, : : : g] cauta o aproximare numerica a sistemului de ecuatii, pornind

Pentru rezolvarea numerica a ecuatiilor diferentiale functiile de baza utilizate ^n rezolvarea ecuatiilor diferentiale sunt: (a) NDSolve ecuatie, y, fx, xmin, xmaxg] rezolva numeric ecuatia ^n functia y, cu variabila independenta ^n intervalul dintre xmin si xmax; (b) NDSolve ecuatii, fy1 , y2, : : :g, fx, xmin, xmaxg] rezolva numeric sistemul de ecuatii cu functiile necunoscutele yi si cu variabila independenta ^n intervalul dintre xmin si xmax.; (c) y x]/.solutie utilizeaza lista de reguli pentru functia y pentru a obtine valori pentru y x]; (d) InterpolatingFunction data] x] evalueaza o functie de interpolare ^n x. Exemple:
In 1]:= NDSolve fy' x]= =z x],z' x]= =-y x],y 0]= =0,z 0]= =1g,fy,zg,fx,0,Pig] Out 1]= ffy!InterpolatingFunction f0., 3.14159,<>], z!InterpolatingFunction f0., 3.14159g, <>]gg In 2]:=z 2]/.% Out 2]=f-0.416167g Functiile pentru minimizarea numerica sunt urmatoarele: ConstrainedMin f, inec, fx, y, : : :g] minimizeaza functia liniara f tin^nd seama de constr^ngerile a liniare inec, FindMinimum f, fx, x0 g] determina un minim local al unei functii arbitrare f, pornind de la x = x0 si FindMinimum f, fx, x0 g, fy, y0g, : : : ]

In 1]:= NSolve fx+y= =2, x-3y+z= =3, x-y+z= =0g, fx,y,zg] 7 3 Out 1]= ffx! 2 ; y! ? 2 ; x! ? 5gg In 2]:= FindRoot 3Cos x]= =Log x], fx,1g] Out 2]= fx!1.44726g In 3]:= FindRoot 3Cos x]= =Log x], fx,10g] Out 3]= fx!13.1064g

determina un minim local ^n mai multe variabile. Exemple: In 1]:= ConstrainedMin x-y-z, fy+z<3, x<7g, fx, y, zg]

Out 1]= f4, fx!7, y!3, z!0gg In 2]:= FindMinimum x Cos x], fx, 1g] Out 2]= f-3.28837, fx!3.42562gg In 3]:= FindMinimum x Cos x], fx, 10g] Out 2]= f-9.47729, fx!9.52933gg In 3]:= FindMinimum Sin x y],fx,2g,fy,2g]Out 3]= f-1., fx!2.1708, y!2.1708gg

Fit, InterpolatingPolynomial si Interpolation. Exemple: In 1]:= Table Exp x/5.], fx, 7g] Out 1]= f1.2214, 149182, 1.82212, 2,22554, 2.71828, 3.32012, 4.0552g In 2]:= Fit %, f1, x, x^2g, x] Out 2]= 1:09428 + 0:0986337 x + 0:0459482 x2

Pentru aproximarea datelor printr-o formula simpla se utilizeaza functiile

193

Functii Asupra funtiilor se pot efectua urmatoarele operatii: f var ]:=exprvar


In 1]:= f x ]:=x^2; In 2]:= f 4] In 3]:= f 3x+x^2] In 4]:= ?f In 5]:= 1+g x]+g y]/.g x]!p In 6]:= 1+g x]+g y]/.g t ]!t^2 In 7]:= h a b]+h c d]/.h x y ]!h x]+h y]

de neste o functie f de variabila x av^nd expresia exprvar, ?f arata de nitia lui f, Clear f] sterge toate de nitiile lui f. Exemple:

Exemple:

Out 2]= 16 Out 3]= (3x + x2)2 Out 4]= Global`f f x ]:=x^2 Out 5]= 1+p+g y] Out 6]= 1 + x2 + y2 Out 7]= h a]+h b]+h c]+h d] Construirea procedurilor este posibila si cu ajutorul functiei Module. Module fa; b; : : :g, proc] de neste o procedura cu variabilele locale a; b; : : :. In 1]:= g n ,i ]:=(t=f n]; Coe cient t, x^i]) In 2]:= g 5,3] Out 2]= 85 2 + 85 x3 + 15 x4 + x5 In 3]:= t Out 3]= 120 + 274 x + 225 x In 4]:= proc n ,i ]:=Module fug, u=f n]; Coe cient u, x^i]] In 5]:= proc 5,3] Out 5]= 85 In 6]:= u Out 6]= u

Do care este apelata prin Do expr, fj, jmaxg] ce evalueaza expr cu i de la 1 la imax sau Do expr, fi, imin, imax, dig] ce evalueaza expr cu i de la imin la imax cu pas di. Functia Print expr] a seaza expr, iar Table expr, fi, imaxg construieste o lista de valori ale expresiei expr cu i de la 1 la imax. Exemple: In 1]:=Do Print i!], fi,4g] 1 2 6 24 In 2]:= Table i!, fi, 5g] Out 2]= f1, 2, 6, 24, 120g In 3]:= r=1; Do r=1/(1+r), f100g]; r Out 3]= 573147844013817084101 927372692193078999176

Este posibila implementarea operatiilor repetitive prin intermediul functiei

Tabele de valori Functiile pentru generarea tabelelor si extragerea unor parti din acestea sunt urmatoarele: Table, TableForm, t fi1 ; i2 ; : : :g]] sau Part t,fi1; i2 ; : : :g]. Exemple:
In 1]:= Table x, f4g] Out 1]= fx, x, x, xg In 2]:= m=Table i-j, fi,2g, fj,2g] Out 2]= ff0,-1g,f1,0gg In 3]:= TableForm m] Out 3]= //TableForm= 0 -1 10 In 4]:= m 1]] Out 4]= f0,-1g In 5]:= % 2]] Out 5]= -1

194

In 6]:= m 1,2]] Out 6]= -1 In 7]:= m f1,2g]] Out 7]= ff0,-1g,f1,0gg

Liste Colectarea obiectelor de aceeasi natura se realizeaza prin includerea


In 1]:= f2, 3, 4g Out 1]= f2, 3, 4g In 2]:= x^%-1 Out 2]= f?1 + x2; ?1 + x3 ; ?1 + x4g

acestora ^ntre acolade. Noul obiect astfel de nit poate utilizat ulterior ca o entitate. Exemplu:

Operatiile posibile ^n Mathematica asupra elementelor unei liste sunt: 1. fa, b, cg: creare lista; 2. Part lista, i] sau lista i]]: al i-lea element al listei lista; 3. Part lista, fi,j,: : :g] sau lista fi, j, : : : g]]: o lista a elementelor i, j, : : : ale listei lista; 4. Part lista, i]=valoare sau lista i]]=valoare: seteaza valoarea celui de-al i-lea element al listei. Elementele si partile unei liste pot selectate prin comenzile First lista], Last lista], Part lista, n] sau lista n]], Part lista, -n] sau lista -n]], Part lista, fn1; n2 ; : : : g sau lista fn1; n2 ; : : : g]], Take lista, n], Take lista, -n], Take lista, fm, ng], Rest lista], Drop lista, n], Drop lista, -n], Drop lista, fm, ng]. Exemple:
In 1]:= t=fa, b, c, d, e, f, gg In 2]:= Last g] In 3]:= t 3]] In 4]:= t f1,4g]] In 5]:= Take t, f2,5g] In 6]:= u=ffa,b,cg,fd,e,fgg In 7]:= u 1]] In 8]:= u 1,2]] Out 1]= fa, b, c, d, e, f, gg Out 2]= g Out 3]= c Out 4]= fa,dg Out 5]= fb,c,d,eg Out 6]= ffa,b,cg,fd,e,fgg Out 7]= fa,b,cg Out 8]= b

Functiile disponibile pentru testarea si cautarea elementelor listei sunt: Position lista, form], Count lista, form], MemberQ lista, form], FreeQ lista, form]. Exemple:
In 1]:= lista=fa,b,c,a,bg; Count lista, a] Out 1]= 2 In 2]:= MemberQ lista, f] Out 2]= False In 3]:= Position IdentityMatrix 3],0] Out 3]= ff1,2g, f1,3g, f2,1g, f2,3g, f3,1g, f3,2gg

Functiile speci ce pentru adaugarea, stergerea si modi carea elementelor unei liste sunt urmatoarele: Prepend lista, element], Append lista, element], Insert lista, element, i], Insert lista, element, -i], Insert lista, element, fi, j, : : :g], Delete lista, i], Delete lista, fi, j, : : :g], ReplacePart lista, element, i], ReplacePart lista, element, -i], ReplacePart lista, element, fi, j, : : :g], ReplacePart lista, element, ffi1; j1, : : :g, fi2 ; j2 , : : :g, : : :g]. Exemple: 195

Functiile clasice pe multimi care opereaza asupra listelor pentru combinarea lor sunt urmatoarele: Join lista1, lista2; : : :], Union lista1, lista2; : : :], Intersection lista1 , lista2; : : :], Complement univers, lista1 ; : : :]. Exemple:
In 1]:= Join fa,b,cg,fx,yg,fc,fd,eg,ag] Out 1]= fa,b,c,x,y,c,fd,eg,ag In 2]:= Union fa,b,cg,fc,a,dg,fa,dg] Out 2]= fa,b,c,dg In 3]:= Complement fa,b,c,dg,fa,dg] Out 3]= fb,cg

In 1]:= Insert fa,b,cg,x,-2] Out 1]= fa,b,x,cg In 2]:= ReplacePart IdentityMatrix 3],x,f2,2,g] Out 2]= ff1,0,0g,f0,x,0g,f0,0,1gg

Sort lista] , Union lista], Reverse lista], RotateLeft lista,n], RotateRight lista,n], RotateLeft lista], RotateRight lista], Transpose lista], Transpose lista,n], Flatten lista], Flatten lista, n], FlattenAt lista, i]. Exemple: In 1]:= Union fb,a,c,a,bg] Out 1]= fa,b,cg In 2]:= Sort fb,a,c,a,bg] Out 2]= fa,b,cg In 3]:= RotateLeft fa,b,c,d,eg,-2] Out 3]= fd,e,a,b,cg In 4]:= Transpose ffa,bg,fc,dg,fe,fgg] Out 4]= ffa,c,eg,fb,d,fgg In 5]:= t=Table i^2+j^2+k^2, Out 5]= fff3,6g,f6,9gg, fi,2g,fj,2g,fk,2g] ff6,9g,f9,12ggg In 6]:= Flatten t] Out 6]= f3,6,6,9,6,9,9,12g In 7]:= Flatten t,1] Out 7]= ff3,6g,f6,9g,f6,9g,f9,12gg In 8]:= FlattenAt ffa,bg,fc,dgg,2] Out 8]= ffa,bg,c,dg Gruparea elementelor unei liste se realizeaza prin functia Partition lista, n]: In 1]:= Partition fa,b,c,d,e,f,gg,2] Out 1]= ffa,bg,fc,dg,fe,fgg In 2]:= Partition fa,b,c,d,e,f,gg,3] Out 2]= ffa,b,cg,fd,e,fgg In 3]:= Partition fa,b,c,d,e,f,gg,3,1] Out 3]= ffa,b,cg,fb,c,dg,fc,d,eg,fd,e,fg, fe,f,ggg Operatiile simple asupra elementelor listelor sunt: Apply Plus, lista] sau Plus @@ lista ce aduna elementele listei lista si Apply Times, lista] sau Times @@ lista ce multiplica elementele listei lista. Exemplu: In 1]:= Apply Plus,fa,b,c,dg] Out 1]= a+b+c+d

Functiile disponibile pentru rearanjarea listelor sunt urmatoarele:

Cele mai des utilizate operatii combinatoriale sunt ilustrate prin functiile: 1. Permutations lista]: ofera lista tuturor permutarilor listei lista; 2. Outer List, lista1, lista2; : : :]: lista elementelor din listai combinate^n toate modurile posibile; 3. OrderedQ lista]: testeaza daca elementele listei lista sunt ordonate; 4. Signatura lista]: signatura pemutarii listei lista ^n ordinea standard. 196

Exemple:

In 1]:= Permutations fa,b,cg] Out 1]= ffa,b,cg,fa,c,bg,fb,a,cg,fb,c,ag,fc,a,bg,fc,b,agg In 2]:= Outer List,fa,bg,fc,dg] Out 2]= fffa,cg,fa,dgg,ffb,cg,fb,dggg

Vectori si matrice Sunt reprezentat i prin liste si liste de liste. Functiile care opereaza asupra vectorilor sunt: Table f, fi, ng] ceconstruieste un vector de lungime n evalu^nd f cu i = 1; i = 2; : : :; i = n, Array a,n] ce construiete a un vector n dimensional de forma fa 1]; a 2]; : : :g, Range n] ce creaza lista f1,2,: : :; ng, Range n1 ; n2] ce creaza lista fn1 ; n1 + 1; : : :; n2g, Range n1 ; n2; dn] ce creaza lista fn1; n1 +dn; : : :; n2g, lista i]] sau Part lista,i] care returneaza al i-

lea element din vectorul lista; Length lista] care furnizeaza numarul de elemente ale lista, ColumnForm lista] care a seaza elementele listei pe coloana. Functiile pentru matrici sunt urmatoarele: Table f, fi, mg, fj, ng] care construieste o matrice m n evalu^nd f cu i de la 1 la m si j de la 1 la n, Array a, a fm, ng] care construieste o matrice m n cu elementele a i; j], IdentityMatrix n] care genereaza matricea identitate n n, DiagonalMatrix lista] care genereaza o matrice patratica cu elementele din lista pe diagonala, lista i]] sau Part lista,i] care returneaza a i-a linie a matricei lista, lista i,j]] sau Part lista,i,j] care returneaza elementul de pe linia i si coloana j a matricei lista, Dimensions lista] care furnizeaza matricei lista, MatrixForm lista] care a seaza lista ^ntr-o forma matriceala. Operatiile de baza asupra matricelor sunt urmatoarele: c m care multiplica matricea m cu scalarul c, a.b care realizeaza produsul matriceal a lui a cu b, Inverse m] care genereaza matricea inversa a lui m, MatrixPower m,n] care genereaza matricea ce reprezinta puterea a n-a a matricei m, MatrixExp m] ce genereaza matricea em , Det m] care calculeaza determinantul matricei m, Transpose m] care genereaza transpusa matricei m, Minors m,k] ce determina minorul k k a lui m, Eigenvalues m] care determina valorile proprii ale matricei m, Eigenvectorrs m] care determina vectorii proprii ai matricei m, Eigensystem m] care determina valorile proprii si vectorii proprii ai matricei m, Eigenvalues N m]], Eigenvectors N m]] care determina numeric valorile proprii si vectorii proprii, QRDecomposition m] care ofera descompunerea QR a unei matrice numerice etc. Exemple: In 1]:= Array p, f3,2g] Out 1]=ffp 1,1], p 1,2]g, fp 2,1], p 2,2]g, fp 3,1], p 3,2]gg
In 2]:= Dimensions %] Out 2]=f3, 2g In 3]:= r=Table i+j+1, fi,3g, fj,3g] Out 3]= ff3,4,5g, f4,5,6g, f5,6,7gg In 4]:= Eigenvalues r] Out 4]= f0; 15+Sqrt 249] ; 15?Sqrt 249] g 2 2

Gra ca bidimensionala Functia Plot poate ^t^lnita sub mai multe forme: a 1. Plot f, fx, xmin, xmaxg]: traseaza f ca functie de x de la xmin la xmax:
prima data se determina x, apoi se evalueaza f pentru ecare valoare x; 197

2. Plot ff1; f2 ; : : :g, fx, xmin, xmaxg]: traseaza functiile f1 ; f2 ; : : : ^n aceeasi imagine; 3. Plot ff1; f2 ; : : :g, fx, xmin, xmaxg]: traseaza functiile f1 ; f2 ; : : :; 4. Plot Evaluate f], fx, xmin, xmaxg]: se evalueaza f, apoi se considera valori numerice pentru x; 5. Plot Evaluate Table f,: : :], fx, xmin, xmaxg]: genereaza o lista de functii, apoi se traseaza acestea; 6. Plot Evaluate y x]/.solutie], fx, xmin, xmaxg]: traseaza solutia determinata numerica; 7. Plot f, fx, xmin, xmaxg,optiune!valoare]: traseaza gra cul, speci c^nd o a valoare pentru optiunea selectata. Principalele optiuni se refera la AspectRatio, Axes, AxesLabel, AxesOrigin, DefaultFont, Frame, FrameLabel, FrameTicks, GridLines, PlotLabel, PlotRange, Ticks, PlotStyle, PlotPoints. Functiile disponibile pentru manipularea setarilor implicite ale optiunilor sunt: Options ce ofera o lista a setarilor curente ale optiunilor si SetOptions ce reseteaza optiunile implicite. Exemple de comenzi:
In 1]:= In 2]:= In 3]:= In 4]:= In 5]:= In 6]:= In 7]:= In 8]:= Plot Sin x],fx,0,2Pig] Plot fSin x], Sin 2x], Sin 3x]g,fx,0,2Pig] Plot Evaluate Table BesselJ n,x],fn,4g]],fx,0,10g] g=Plot Sin x^2], fx, 0, 3g, PlotRange!f0, 1.2g] Options Plot, PlotRange] Out 5]= fPlotRange!Automaticg SetOptions Plot, PlotRange!Allg Options Plot, PlotRange] Out 7]= fPlotRange!Allg Options g, PlotRange] Out 8]= fPlotRange!f0., 1.2g

In 1]:= In 2]:= In 3]:= In 4]:= In 5]:= In 6]:=

Retrasarea si combinarea gra celor se realizeaza cu ajutorul functiei Show:


Plot x^2,fx,-1,1g, DisplayFunction!Identity] g1=Show %, DisplayFunction!$DisplayFunction] g2=Show %,PlotRange!f-1,2g, PlotLabel!"Parabola"] g3=Plot -x^2,f-1,1g] g4=Show g1,g3, PlotRange!ff-0.5,0.5g,f-0.5,0.5gg] Show GraphicsArray ffg1,g2g,fg3,g4gg,Frame!True]

Trasarea suprafetelor tridimensionale Functia principala de trasare este Plot3D: 1. Plot3D f, fx, xmin, xmaxg, fy, ymin, ymaxg] traseaza o suprafata 3D descrisa de f ca functie de x si y; 2. Plot3D ff, GrayLevel s]g, fx, xmin, xmaxg, fy, ymin, ymaxg] traseaza suprafata descrisa de f, umbrita ^n gri conform functiei s; 3. Plot3D ff, Hue s]g, fx, xmin, xmaxg, fy, ymin, ymaxg] traseaza suprafata
descrisa de f, umbrita ^n culori conform functiei s. 198

Setul de optiuni este similar cu cel din cazul bidimensional: Axes, AxesLabel, Boxes, ColorFunction, DefaultFont, DisplayFunction, FaceGrids, HiddenSurface, Lighting, Mesh, PlotRange, Shading, ViewPoint, PlotPoints.
In 1]:= Plot3D Sin x y], fx, 0, 3g, fy, 0, 3g] In 2]:= Show %, PlotRange!f-0.5,0.5g] In 3]:= Show %%,AxesLabel!f"Timp","Adincime","Valoare"g, FaceGrids!All] In 4]:= Show %%%, ViewPoint!f0,-2,0g] In 5]:= Show %1, Shading!False] In 6]:= Show %1, Lighting!False] In 7]:= Plot3D fSin x y], GrayLevel x/3]g, fx,0,3g, fy,0,3g]

Exemple de comenzi:

Contururile se traseaza implicit corespunzator unei secvente de valori z egal spatiate (din sistemul triortogonal xyz). Contururile sunt implicit umbrite, astfel ^nc^t regiunile cu valorile z mai mari sunt mai puternic luminate dec^t a a cele cu z mic. Functiile speci ce sunt urmatoarele: CountourPlot f, fx, xmin, xmaxg, fy, ymin, ymaxg] ce traseaza un contur pentru f ca functie de x si y, DensityPlot f fx, xmin, xmaxg, fy, ymin, ymaxg] ce traseaza un gra c de densitate a lui f (pe o matrice de puncte). Optiunile cele mai importante ale functiei ContourPlot sunt: ColorFunction, Contours, PlotRange, ContourShading, ContourSmoothing, PlotPoints. Optiunile cele mai importante ale functiei DensityPlot sunt: ColorFunction, Mesh, PlotPoints. Exemple de comenzi:
In 1]:= ContourPlot Sin x] Sin y], fx, -2, 2g, fy, -2, 2g] In 2]:= Show %,, ContourShading!False, Contours!30, ContourSmothing !Automatic] In 3]:= DensityPlot Sin x] Sin y], fx, -2, 2g, fy, -2, 2g] In 4]:= DensityPlot %, Mesh!False]

Show ContourGraphics g]], Show DensityGraphics g]], Show SurfaceGraphics g]], Show Graphics g]]. Exemple: In 1]:= Plot3D Sin x y], fx, 0, 3g, fy, 0, 3g] In 2]:= Show ContourGraphics %]]

Convertirea diferitelor tipuri de gra ce se realizeaza cu functiile

Functii speciale de trasare Functiile pentru generarea curbelor si suprafetelor parametrice sunt ParametricPlot si ParametricPlot3D. Exemple:
In 1]:= ParametricPlot fSin t], Cos t]g, ft,0,2Pig] In 2]:= ParametricPlot3D fCos t]Cos u], Sin t]Cos u], Sin u]g, ft,0,2Pig, fu,Pi/2,Pi/2g] Reprezentarea gra ca a listelor de date se efectueaza prin functii: ListPlot, ListPlot3D, ListContourPlot matrice], ListDensityPlot matrice]. Exemple:

199

Se remarca urmatoarele functii din pachetul ^ncarcat cu << Graphics `Graphics`: LogPlot f, fx, xmin, xmaxg], PolarPlot r, ft, tmin, tmaxg], ErrorListPlot ffx1, y1, dy1g, : : : g], TextListPlot ffx1, y1, "s1"g, : : :g], BarChart lista], PieChart lista], PlotVectorField ffx, fy, fzg, fx, xmin, xmaxg, fy, ymin, ymaxg, ListPlotVectorField lista], SphericalPlot r, ftheta, min, maxg, fphi, min, maxg]. Exemple:
In 1]:= In 2]:= In 3]:= In 4]:= In 5]:= In 6]:=

In 1]:= In 2]:= In 3]:= In 4]:= In 5]:= In 6]:= In 7]:=

t=Table i^2, fi, 10g]; ListPlot t] ListPlot t, PlotJoined!True] ListPlot Evaluate Table fi^2, 4 i^2+i^3g, fi, 10g] u=Table Mod y x], fx,20g, fy,20g]; ListPlot3D u] ListDensity t]

<<Graphics`Graphics`

LogPlot Exp -x]+4Exp -2x], fx, 0, 6g] p=Table Prime n], fn,10g]: TextListPlot p] BarChart p] PieChart p]

Animatie Ideea de baza este generarea unei secvente de imagini care sunt a sate ^ntr-o succesiune rapida. Functiile de baza sunt ^ntr-un pachet special ce trebuie ^ncarcat prin << Graphics`Animation`. Animate gra c, ft, tmin, tmaxg] executa comanda gra ca grafic pentru o secventa de valori t si animeaza secventa de imagini rezultata. ShowAnimation fg1; g2 ; : : : g] produce animatie pe baza unei secevt e de obiecte gra ce. Este necesar ca imaginile din secvent a sa e consistente (scalarea diferitelor imagini sa e aceeasi; de exemplu, PlotRange trebuie sa e acelasi la toate imaginile, nerecomand^ndu-se optiunea implicita Automatic) Exemple de comenzi: a
In 1]:= Table Plot3D BesselJ 0, Sqrt x^2+y^2]+t], fx,-10,10g, fy,-10,10g, axes!False, PlotRange!f-0.5,1.0g, DisplayFunction!Identity], ft,0,8g] In 2]:= Show GraphicsArray Partition %,3]] In 3]:= ShowAnimation %] In 1]:= Play Sin 2Pi 440 t], ft, 0, 1g]

Sunet Pe anumite calculatoare, se pot produce sunete, tratate analog cu


gra cele. Functiile speci ce sunt Play si ListPlay. Exemplu:

Citirea si scrierea sierelor Fisierele pot utilizate pentru a stoca de nitii


si rezultate din Mathematica. Functiile de baza sunt urmatoarele: 1. <<nume: citeste un sier text ^n format de intrare; 2. expr>>nume: scrie expr ^ntr-un sier text; 200

3. expr>>>nume: adauga expr la sierul text nume; 4. !!nume: a seaza continutul sierului text nume; 5. Save "nume",f,g, : : : ]: salveaza ^n sierul nume de nitii de variabile sau functii; 6. Dump "nume"]: completeaza starea mediului ^ntr-un sier; 7. math -x nume: comanda de operare pentru ^ncarcarea unui sier de stare creat cu Dump. Exemple: In 1]:= Expand (x+y)^3]>> tmp
In 2]:= !!tmp In 3]:= <<tmp In 4]:= f x ]:=x^2+c In 5]:= c=17; In 6]:= Save "ftmp",f] In 7]:= !ftmp In 8]:= Clear f,c] In 9]:= <<ftmp x^3+3*x^2*y+3*x*y^2+y^3 Out 3]= x3 + 3x2y + 3x y2 + y3 Out 5]= 17 f x ]:=x^2+c c=17 Out 9]= 17

Directory ], SetDirectory "dir"], FileNames ], FileNames "form"], <<nume , <<Context`, CopyFile " le1 "," le2"], DeleteFile " le], FindList " le","text"], FindList FileNames ],"text"]. Citirea sierelor de date se realizeaza prin functie ReadList cu formele ReadList "file",Number] ce citeste numere din esierul file, return^nd o lista a a acestora, si ReadList "file", Number, RecordLists!True] ce citecste numere

Functiile speci ce pentru gasirea si manipularea sierelor sunt urmatoarele:

dintr-un sier, cre^nd o lista separata pentru ecare linie din sier. Exemple: a
In 1]:= !!rand.dat

In 2]:= ReadList "rand.dat", Number] Out 2]= f3.4, -0.57, 840., 4.5, -0.078, 1900., 6.4, -0.1, 4700.g In 3]:= ReadList "rand.dat", Number, RecordLists!True] Out 3]= ff3.4, -0.57, 840.g, f4.5, -0.078, 1900.g, f6.4, -0.1, 4700.gg

3:4 ?57E ? 2 8:4E + 2 4:5 ?7:8E ? 2 1:9E + 3 6:4 ?0:1 4:7E + 4

Principalele cai de comunicare cu programele externe sunt urmatoarele: 1. << le: citeste un sier; 2. <<"!comanda" executa o comanda externa si citeste iesirea produsa; 3. exp>>"!comanda" transmite forma textuala a lui exp spre comanda; 4. ReadList "!comanda", Number]: executa o comanda externa si citeste lista de numere produsa de aceasta; 5. Install "comanda"]: executa un program extern si instaleaza de nitiile pentru functiile apelate pe care le contine; 201

6. Uninstall "comanda"]: termina un program extern si elimina de nitiile pentru functii din mediu.

Generarea expresiilor ^n C, Fortran si TeX Functiile speci ce sunt urmatoarele: CForm expr] scrie expr pentru a utilizata ^ntr-un program C, FortranForm expr] scrie expr pentru a utilizata ^ntr-un program Fortran, TeXForm expr] scrie expr ^ntr-un format TEX. Exemple:
In 1]:= FortranForm x^2+x alpha+alpha^2] Out 1]= //FortranForm=x**2+x*alpha+alpha**2 In 2]:= CForm x^2+x alpha+alpha^2] Out 2]= //CForm=Power(x,2)+x*alpha+Power(alpha,2) In 3]:= TeXForm x^2+x alpha+alpha^2] Out 3]= //TeXForm=x^2+xnalpha+nalpha^2 Out=

Exemple de alte comenzi


In ]:=

Head f x,y]] f Head fa,b,cg] List Head 23432] Integer 355 Rationalize N Pi], 10^-5] 113 x+y//post x post x x+y] pre x@x+y pre x x]+y x~ in x~ y in x x+y] (x+y+z) 2]] y (x+y+z) 0]] Plus (x/y) 2,1]] y 1 (x/y) 2]] y TreeForm ffa,bg,fc,dgg] //TreeForm=List jList a;b]; jList c;d]] Nest f, x,4] f f f f x]]]] NestList f, x,4] fx, f x], f f x]], f f f x]]], f f f f x]]]]g newton x ]=N 1/2(x+3/x)] NestList newton,1.0,5] f1.,2.,1.75.,1.73214,1.73205,1.73205g FixedPoint newton,1.0] f1.73205g Fold f,x,fa,b,cg] f f f x,a],b],c] FoldList Plus,0,fa,b,cg] f0,a,a+b,a+b+cg tonumber digits ]:=Fold nextdigit,0,digits] tonumber f1,3,7,2,9,1g] 137291 Apply f,fa,b,cg] f a,b,c] Map f,fa,b,cg] ff a],f b],f c]g InverseFunction Composition f,g,h]] x] h1? g?1 f ?1 x]]] Sort f c,a,b]] f a,b,c] 202

Thread f fa,bg] ff a],f b]g Cases f3,4,x,x^2,x^3g,x^ ] fx2; x3g Count f3,4,x,x^2,x^3g,x^ ] 2 DeleteCases f3,4,x,x^2,x^3g,x^ ] f3,4,xg OddQ 4561] True PrimeQ 4562] False PolinomialQ 1+x+y,fx,yg] True AtomQ 5] True p x ?NumberQ]:=x^2 p 4.5]+p 3/2]+p u] 22.5+p u] h ajb]:=p fh a],h b],h c]g fp,p,h c]g Attributes Plus] fFlat, Listable, OneIdentity, Orderless, Protectedg SetAttributes q, Orderless] q b,a,c] q a,b,c] j x ,y :1,z :2]:=jp x,y,z] j a,b] jp a,b,2] j a] jp a,1,2] t=8; t*=7; t 56 i=5; Print ++i]; Print i] 6 6 fa,b,cg=f1,2,3g; fb,a,cg=fa,b,cg; fa,b,cg f3, 1, 2g h x ]:=Which x<0, x^2, x>5, x^3, True, 0] h -5] 25 h 2] 0 n=17; While (n=Floor n/2])!=0, Print n]] 8 4 2 1 For i=1, i<4, i++, Print i]] 1 2 3 t=1; Do t*=k; Print t]; If t>19, Break ]], fk,10g] 1 2 6 24 Characters "A string."] fA, ,s, t, r, i, n, g, .g ToCharactersCode "a"] f97g FromCharactersCode %] a If a>b, (*then*) p, (*else*)q]

203

6.7 Matlab
Matlab este un Cas dedicat calculului numeric si reprezentarilor gra ce din

domeniul stiintei si ingineriei. Integreaza analiza numerica, calculul matriceal, procesarea semnalelor si reprezentarile gra ce ^ntr-un mediu usor de ^nvatat si folosit. Elementul de baza cu care opereaza Matlab este matricea. Matlab a devenit un standard pentru domeniile cercetarii si rezolvarii problemelor din procesarea semnalelor, control statistic, prelucrarea datelor experimentale. Facilitatile principale sunt: (a) operatii matematice fundamentale precum calculele cu matrice si tablouri, operatori logici si relationali, cu functii triogonometrice, exponentiale sau logaritmice, calcule cu polinoame, aritmetica ^n virgula mobila etc. (b) analiza matriceala si functii matriceale, ecuatii liniare, valori proprii, factorizari, algoritmi pentru matrice rare etc. (c) analiza datelor de exemplu covariante, transformari, medii statistice, deviatii, interpolare etc. (d) analiza numerica neliniara pentru ecuatii diferentiale, integrare, minimizari etc. (e) programare prin structuri de control, citire/scriere siere, depanare, creare interfete, gra ce etc. (f) reprezentarea gra celor bi- si tri-dimensionale ^n coordonate caretziene, polare, la scara logaritmica, cu control asupra culorilor, pozitiei de vizualizare, animatie, texte si etichete, copierea gra celor ^n format recunoscut de Windows etc. Cea mai importanta caracteristica este usurinta cu care poate extins. Orice programator poate adauga propriile programe scrise ^n Matlab la sierele originale. Nucleul are un interpretor propriu. Matlab include biblioteci speci ce numite ToolBox-uri. Acestea sunt colectii de functii Matlab ( siere cu extensie .m) care dezvolta mediul de programare ^n vederea rezolvarii unor probleme din domenii variate precum: 1. procesare de semnale: ltre, analiza si estimarea spectrului, transformate Fourier, modelare parametrica, modulare si demodulare etc.; 2. procesare de imagini: ltre bidimensionale, reconstituire si extragere de imagini, operatii de colorare, geometrice si morfologice, transformari bidimensionale, analiza si statistica imaginilor etc.; 3. matematica simbolica bazata pe biblioteca share a Maple, incluz^nd ala gebra liniara si rezolvare de sisteme de ecuatii liniare, simpli cari, evaluarea simbolica a unor functii speciale, acces la nucleul Maple si la pachetul de algebra liniara a acestuia; 4. retele neuronale, pentru proiectarea si simularea acestora, cu functii de transfer, transformare de caracteristici, analiza gra ca a rezultatelor, straturi, elemente si conexiuni, arhitectura cu estimari recurente etc.; 5. statistica printr-o colectie de functii folosite pentru analiza datelor, mo204

Figura 6.24: Interfata Matlab

delare si simulare ce contine analiza gra ca interactiva, distributii, numere aleatoare, calcule de regresie si varianta, descrieri statistice, teste de ipoteze etc.; 6. analiza polinomiala, interpolari, aproximarea curbelor si netezirea lor, derivate, integrale etc.; 7. analiza sistemelor, respectiv design sisteme de control pentru analiza si proiectarea sistemelor ^n timp continuu sau discret, starile si functiile de transfer ale modelelor, interconectarea sistemelor, transformari ^ntre modele, control robust pentru sinteza sistemelor care functioneaza ^n prezent a incertitudinii, identi care sisteme etc.; 8. optimizare printr-o colectie de functii utilizate pentru optimizare liniara si neliniara, programare liniara si patratica, determinare extreme, problema celor mai mici patrate, optimizarea contr^ngerilor, rezolvarea de ecuatii a neliniare, optimizari multiobiectiv etc. Incep^nd cu versiunea 4.0 aparuta^n 1992, interfata Matlab cu utilizatorul a este orientata spre un sistem de ferestre si meniuri ( gura 6.24). sirul Matlabrc.m. In acest sier poate speci cat un altul care sa e apelat implicit la lansare. De exemplu, daca sierul Matlabrc.m contine if exist('startup')==2 startup end atunci este apelat sierul startup.m, ce poate contine de exemplu citirea unor parametrii, constante prede nite pentru o aplicatie. Parasirea sesiunii de lucru se face cu comanda quit sau prin selectarea optiunii corespunzatoare din meniu. Functii de control general sunt urmatoarele: help furnizeaza informatii ^n-linie despre functiile Matlab; de exemplu help 205

Functii de interes general La lansarea ^n executie se apeleaza automat

plot a seaza informatii despre functia plot; what returneaza informatii referitoare la sierele *.m, *.mat, *.mex din directype a seaza sierul indicat pe linia de comanda (implicit cu extensia .m); lookfor returneaza numele sierelor care au ^n prima linie cuvintele precizate ca argument; de exemplu lookfor t are ca rezultat FFT Inverse discrete Fourier Transform; path controleaza caile de acces a Matlab-ului; de exemplu path a seaza setarea cailor de cautare, p=path returneaza^n p calea de cautare, path(p) schimba calea de cautare cu cea precizata de p, iar path(path,p) adauga calea p la cea existenta; which returneaza calea ^n care este localizat sierul cu numele dat pe linia de who listeaza variabilele cerute; whose furnizeaza informatii referitoare la dimensiunea variabilelor; exist veri ca existenta unei variabile; de exemplu exist('u') returneaza 0 daca u nu exista, 1 daca u este o variabila, 2 daca este un sier u.m ^n path, 3 daca este un sier u.mex ^n path, 4 daca u este o functie SimuLink, 5 daca u este o construct ie interna; cd returneaza numele directorului curent; ^n varianta cd cale se schimba dir listeaza continutul directorului curent; delete sterge sierul precizat ca argument; diary salveaza sesiunea de lucru ^ntr-un sier text, numele acestuia ind dat ca argument; de exemplu diary test ^nregistreaza comenzile si raspunsurile ^n sierul desemnat prin test, diary o suspenda ^nregistrarea, diary on reia ^nregistrarea ^n sierul anterior desemnat printr-un diary; clock citeste ceasul calculatorului ^n format an-luna-zi-ora-minut-secunda]; de exemplu start= x(clock) are ca rezultat^nregistrarea momentului de timp ^n start; date citeste data ^n format zi-luna-an]; etime cronometreaza intervalul de timp ^ntre doua evenimente; de exemplu etime(t0,t1); cputime determina timpul de calcul al procesorului; tic, toc porneste, respectiv opreste un cronometru; de exemplu tic; x=c/a; timp=toc; clc sterge fereastra de comenzi; echo permite a sarea liniilor de program ^n timpul executarii acestora; more controleaza a sarea unui numar de linii corespunzator unui ecran pe moformat stabileste formatul intern de a sare al numerelor pe ecran (implicit formatul scurt cu 5 cifre); se apeleaza prin format optiune unde optiune poate short (5 cifre, de exemplu 2.1234), long (15 cifre, precum 2.12345678901234), short e (5 cifre cu exponent, precum 2.1234 E+000),

torul curent sau cel indicat pe linia de comanda;

comanda;

directorul curent;

nitor;

206

long e (15 cifre cu exponent, precum 2.12345678901234 E+000), hex (hexazecimal, de exemplu 5FD12345678901234), bank (cu doua zecimale, precum 134.66), rat (exprimare rationala, precum 5/6), compact (suprima liniile libere ^ntr-o a sare de matrice), loose (a seaza rezultatele ^ntr-o modalitate degajata); disp a seaza un text sau o matrice fara sa tipareasca numele acesteia; de exemplu % rezultat Nr. Var1 Var2 Var3 1111 2 4 8 16 3 9 27 81 clear sterge variabilele din spatiul de lucru; de exemplu clear x y sterge variabilele x si y, iar clear sterge toate variabilele; pack compacteaza spatiul de memorie liber si discontinuu ^n caz de mesaj de tip out-of-memory; size determina dimensiuni; de exemplu % comanda % rezultat A= 3 4; 4 5; 5 6]; d=size(A) d= 3 2] l c]=size(A) l=3 c=2 length determina lungimea unui vector sau dimensiunea maxima a unei matrice; de exemplu t=length(A) are ca rezultat t=3. ans este variabila creata automat ^n care este returnat rezultatul unui calcul eps este variabila ce reprezinta eroarea relativa implicita pentru calculele ^n % coamanda disp('Nr. Var1 Var 2 Var 3') for i=1:3 y= i, i^2, i^3, i^4]; disp(y) end

Variabile speciale si constante Sunt urmatoarele:


c^nd expresia nu a avut asignat un nume; a

virgula mobila (implicit 2.2204 10?16; poate rede nita); pi are valoarea 3.14159265358; i este folosita pentru introducerea numerelor complexe; j este o alternativa pentru unitatea imaginara i; inf este variabila folosita pentru reprezentarea lui +1; NaN este variabila folosita^n reprezentarea Not-a-Number rezultat al^mpartirii nede nite 0.0/0.0; nargin este variabila permanenta pentru testarea numarului de argumente de intrare ce trebuie introduse pentru apelarea unei functii; nargout similar cu nargin pentru iesirea unei functii; ops indica numarul de operatii ^n virgula mobila (contorul este incrementat cu 1 pentru operatii de +; ?; ; = pe numere reale, cu 2 pentru +; ?, respectiv cu 6 pentru ; =, pe numere complexe); computer este variabila folosita pentru obtinerea informatiilor referitoare la tipul calculatorului si numarul maxim de elemente pe care le poate gestiona versiunea Matlab; de exemplu calc, elem]=computer returneaza 207

calc=PCWIN, elem=26843455; realmax reprezinta cea mai mare valoare pozitiva ^n virgula mobila care poate realmin similar cu realmax pentru valoarea minima; version determina versiunea Matlab si a ToolBox-urilor; load ^ncarca variabile dintr-un sier de date; de exemplu load temp ^ncarca date din sier ^n format binar cu extensie .mat sau format text, iar load ^ncarca date din sierul Matlab.mat; save salveaza variabilele ^ntr-un sier de date; de exemplu, save test a b c salveaza variabilele a, b, c ^n sierul test.mat, save test a b c -ascii le salveaza ^ntr-un sier text, ^n format cu 8 cifre, save test a b c -ascii double pentru format cu 16 cifre, save test -ascii -double -tabs salveaza toate variabilele cu separare prin tab-uri, save salveaza ^n format binar toate variabilele din spatiul de lucru ^n sierul Matlab.mat;

folosita ^n calcule;

Reguli Matlab lucreaza cu un singur tip de obiecte: matrice numerice rectangulare cu elemente reale sau complexe. Scalarii sunt asimilati matricelor cu o linie si o coloana, iar vectorii sunt asimilati cu matricele cu o linie sau o coloana. Elementele unei matrice A sunt referite prin notatia paranteza A(indice linie,indice coloana), numerotarea liniilor si coloanelor pornind de la 1. De nirea matricelor se poate face prin: (a) introducere explicita a listei de elemente (separare elemente pe linii prin spatiu sau virgula, separare linii prin ; sau enter); de exemplu A= 1 2 3 4; 5 6 7 8]; (b) generare prin functii si instructiuni, precum for i=1:3 y= i, i^2, i^3, i^4]; (c) ^ncarcarea din siere .m sau din siere importate; de exemplu daca ^n sierul text date.m a fost scrisa o matrice^n formatul matematic, A=date citeste aceasta matrice; Elementele matricelor pot numere reale sau complexe, precum si expresii. De exemplu, B= sqrt(2),10*3/4] are ca rezultat B= 1.4142 7.5000]. Daca se asigneaza o valoare unui element care ocupa o pozitie ^n afara dimensiunii maxime a unei matrice, dimensiunea este marita automat. De exemplu, B 4]=1.2 are ca rezultat B= 1.4142 7.5000 0 -1.2000]. Matricele mari se pot construi prin concatenare. De exemplu, x1= 1 2; 3 4]; x2= 5 6]; x= x1;x2] are ca rezultat matricea x cu primele 2 linii ale lui x1 si o a treia cu vectorul x2. Dintr-o matrice se poate extrage o submatrice. De exemplu, y=x(2:3,:) extrage liniile 2 si 3 si toate elementele de pe coloane, rezult^nd o matrice cu elementele 3 4; 5 6]. a Expresiile sunt formate din operatori sau caractere speciale, din functii si nume de variabile. Evaluarea expresiei produce o matrice care este a sata si atribuita unei variabile. Daca numele expresiei si semnul = sunt omise, variabila ans preia rezultatul. De exemplu, la comanda 3/4 rezultatul este ans=0.7500. Orice instructiune se termina cu enter. Daca ultimul caracter este ; instructiunea este executata, dar a sarea rezultatului este inhibata. Tastarea numelui unei variabile urmata de enter a seaza valoarea acesteia. Daca expre208

sia este prea mare pentru ca declaratia sa^ncapa pe o singura linie, se utilizeaza semnele ... urmat de enter pentru a preciza ca instructiunea continua pe linia urmatoare. De exemplu
S=1+2+3+. . . 4+5+6;

calculeaza suma si o atribuie variabilei S, rezultatul ne ind a sat. Spatiile dintre numere si semne sunt optionale. Numele de variabile si functii au ca prim caracter o litera urmata de litere, cifre sau liniuta de subliniere si pot formate din maxim 19 caractere. Se face deosebirea ^ntre literele mari si mici, dar se poate trece si ^n modul nesenzitiv prin casesen o , revenirea fac^ndu-se cu a casesn on. Numerele folosesc notatia zecimala conventionala, eventual cu su x reprezent^nd puteri (de exemplu -5, 0.0067, 2.34 E-20). Limitele numerelor a folosite sunt 10?308 si 10308 (^n versiunea curenta). Operatorii aritmetici sunt: +; ?; ; = (^mpartire la dreapta), n (^mpartire la st^nga), ^ (ridicare la puta ere) si `. In cazul tablourilor ultimii 5 operatori sunt precedat i de un punct (: ; :n; :=; :^, :`) daca se doresc operatii element cu element. Existenta a doua simboluri pentru ^mpartire provine din faptul ca variabilele de baza sunt matrice. De exemplu, expresiile scalare 1/4 si 4n1 produc acelasi rezultat 0.25. Matlab lucreaza e ^n modul linie comanda, situatie ^n care ecare linie este prelucrata imediat si rezultatele sunt a sate, e cu programe continute ^n siere. Fisierele care contin instructiuni, privite ^n totalitatea lor ca programe, au extensia .m si pot contine apeluri la alte siere .m precum si apeluri recursive. Un program poate scris ca sier cu unul dintre urmatoarele doua tipuri: (a) sier script, sier ^n format text ce contine instructiuni ce au fost executate, variabilele cu care s-a operat; ram^ne ^n zona de memorie a a aplicatiei, neput^nd integrate astfel ^n aplicatii construite pe baza de a modularizare; (b) siere function, sier ^n format text ce contine instructiuni ce au fost executate, prima linie contin^nd cuv^ntul function; poate lucra cu argua a mente; variabilele de nite si manipulate ^n interiorul sierului sunt localizate la nivelul acestuia, astfel ^nc^t dupa terminarea execut iei functiei, a ^n memorie ram^n numai variabilele de iesire ale functiei; de exemplu, a
function m=medie(x) % functie de calcul a mediei n=length(x) m=sum(x)/n; y= 'Media numerelor este:',num2str(m)]; disp(y)

Un comentariu se introduce prin caracterul procent plasat ^naintea textului ce va omis pe linia respectiva (poate inserat oriunde). Comentariul care apare imediat dupa declaratia function este citit si a sat de comanda help aplicata functiei respective. De exemplu la help medie rezultatul va : functie de calcul a mediei. 209

Matlab are operatorii relationali < ; <=; >; >=; ==;~ = care sunt utilizati pentru a compara doua matrice de dimensiuni egale. Matricele se compara element cu element, rezultatul ind o matrice de aceeasi dimensiune cu cea a matricelor care se compara, cu elemente 1 c^nd relatiile sunt adevarate si 0 c^nd sunt false. Daca unul dintre operanzi a a este un scalar si celalalt o matrice scalarul este extins la dimensiunea matricei. De exemplu instructiunile a=5>= 1 2 3; 4 5 6; 7 8 9] a=5*ones(3,3)>= 1 2 3; 4 5 6; 7 8 9] sunt echivalente si se obtine acelasi rezultat ca a= 1 1 1; 1 1 0; 0 0 0]. Primii patru operatori relationali compara numai partea reala a operanzilor (partea imaginara este ignorata), iar ultimii doi operatori (== si ~ =) trateaza at^t partea reala c^t si cea imaginara. De exemplu instructiunile a a

Instructiuni si functii de control

A= 1 -i 0; 2-i 0 1+i]; B= 1-i i; 2-i 2 1-5*i]; C=A>=B, D=A==B

produc acelasi rezultat precum C= 1 1 1; 1 0 1], respectiv D= 1 1 0; 1 0 0]. Operatorii logici, ~ pentru negare, & pentru si logic, j pentru sau logic, se aplica^n ordinea acestei enumerari, dar au prioritate mai mica dec^t operatorii a relationali si aritmetici. Operatorii & si j compara doi scalari sau doua matrice de dimensiuni egale, element cu element, return^nd o matrice cu elemente 1 a pentru o valoare diferita de zero si 0 altfel. Operatorul logic de complemetare ~ este unar; astfel ~ A returneaza 0 daca A 6= 0 si 1 altfel. De exemplu, (a) daca A= 1 2; 3 4]; B= 5 0; 2 1]; C= 2 3; 7 6]; D=(A<B) j (B<C) are rezultatul echivalent cu D= 1 1; 1 1]. (b) daca b=3; c=5; e=~ b==cjb==5, f=~ (b==cjb==5) atunci e=0 si f=1; (c) 1&0+3 returneza 1, iar 3>4&1 returneaza 0. Instruct iunea conditionala if poate implementata ca if simplu sau poate contine clauzele else sau elseif. Exemple:
if a<10 k=k+1 if c>a c=0 u=k end end if x<=2 f=3*x+70 elseif x<=3 f=2*x+5 else f=6*x+2 end

In primul exemplu, daca a este un vector sau o matrice se ajunge la o incrementare daca cel putin un element a lui a este mai mic dec^t 10. a Instruct iunea for permite repetarea unui grup de instructiuni din corpul ciclului de un numar de nit de ori. Indexul ciclului trebuie sa e o variabila. Daca expresia index este un scalar ciclul se executa o singura data, cu indexul corespunzator valoarii scalare, iar daca expresia este un vector linie sau matrice 210

ciclul se executa de at^tea ori c^te elemente are variabila index. La iesirea din a a ciclu indexul are ultima valoare utilizata. Exemple: (a) instructiunea for k=5:4:83 se executa de 20 de ori, valorile lui k ind succesiv 5, 9, 13,... , 81; (b) de nirea functiei 6x2 ? f(x) = x3; ; x 2 (0;20; 0] x 2 20] si evaluarea ei pentru toate valorile^ntregi din intervalul ?20; 20] se face prin urmatoarea secvent a de instructiuni:
x=-20:20 for k=1:length(x) if x(k)<=0 f(k)=6*x(k)^2 else f(k)=x(k)^3 end end

(c) exemplu de construct ie a unei matrice tridiagonale cu elementele egale cu 2 pe diagonala principala si 1 pe subdiagonalele alaturate:
for i:=1:n, for j=1:n, if i==j, A(i,j)=2; elseif abs(i-j)==1, A(i,j)=1; else A(i,j)=0; end end end

Instruct iunea while se utilizeaza pentru repetarea unui set de instructiuni at^ta timp c^t o conditie speci cata este adevarata. De exemplu aceasta a a instructiune poate folosita la calculul sumei elementelor unui vector p^na a c^nd se ^nt^lneste un numar mai mic dec^t zero: a a a
function s,l]=suma(x) s=0; k=1; while (k<=length(x)) & (x(k)>0) sum=sum+x(k); k=k+1; end l=k>1;

La apelul x= 5 2 -9 10 -1 9 -1]; sum,nenul]=feval(suma(x)) se obtin rezultatele sum=7, nenul=1. 211

Instruct iunea break se utilizeaza pentru a iesi dintr-un ciclu^nainte ca acesta sa se terminat (se recomanda la detect ia unei conditii de eroare ^n interiorul unui ciclu). Instructiunea return comanda o iesire din sierul .m catre functia care l-a apelat. Instructiunea error permite a sarea unor mesaje la ^nt^lnirea a unei erori. De exemplu,
function test(x,y) if nargin ~ =2 error('Nr. argumente de intrare gresit') ... end

Functia any testeaza daca o matrice are cel putin un element diferit de zero, return^nd 1 daca conditia este veri cata, 0 altfel. In cazul matricelor, a functia opereaza pe coloane. Functia all testeaza daca toate elementele unei matrice sunt diferite de zero. De exemplu, M= 1 0 2; 0 0 1; 0 0 4]; A=any(M), B=all(M), C=any(M>-1) returneaza rezultate echivalente cu cele ale asignarilor A= 1 0 1], B= 0 0 1], C= 1 1 1]. Functia nd returneaza indicii elementelor diferite de zero sau care veri ca o anumita conditie. De exemplu H= 1 3 0 5 6]; y= nd(H) returneaza y= 1 2 4 5], iar pentru matricea M de mai sus, z= nd(M), l,c]= nd(M), l,c,v]= nd(M) au ca rezultat z= 1 7 8 9], l= 1 1 2 3], c= 1 3 3 3], v= 1 2 1 4]. Determinarea pozitiei elementelor nite se face cu functia nite, a elementelor NaN cu isnan, a elementelor in nite cu isinf, iar testul de matrice goala cu isempty. De exemplu, daca X= 0/0 0/1 2 1/0]; Y= ]; ax=isnan(X), bx= nite(X), cx=isinf(X), dx=isempty(Y) se returneaza X= NaN 0 2 1], ax= 1 0 0 0], bx= 0 1 1 0], cx= 0 0 0 1], dx=1. Deoarece operatiile cu vectori si matrice sunt executate ^n Matlab mai repede cu un ordin de marime dec^t operatiile interpretate sau compilate se a obtine o viteza de lucru mai mare daca algoritmii ^nscrisi ^n isiere .m sunt vectorizati. Oriunde este posibil, ciclurile for si while trebuie convertite ^n operatii cu vectori sau matrice. De exemplu calculul sin ^n 1000 de puncte de la 1 la 10 se poate face ^n doua versiuni: nevectorizata si vectorizata.
%versiune nevectorizata %versiune vectorizata t=0:.01:10; t=0:.01:10; n=length(t) y=sin(t); for i=1:N y(i)=sin(t(i)); end %alta problema y=zeros(1,100); for i=1:100 y(i)=det(x^i); end

In prima versiune timpul de executie este apoximativ de 10 ori mai mare dec^t a ^n versiunea vectorizata. Pentru a face ciclurile sa e execuate mai repede, adesea este necesara prealocarea unor vectori ^n care vor retinute rezultatele (varianta a treia de mai sus). Fara instructiunea zeros de prealocare, interpretorul redimensioneaza vectorul y la o dimensiune mai mare de ecare data c^nd a se trece printr-o iteratie a ciclului. 212

Operarea cu siruri de caractere Constantele sir se reprezinta printr-un sir

de octeti ^n care se pastreaza codurile ASCII ale caracterelor sirului respectiv. Asignarea unui variabile tip sir se face precum ^n exemplul h='Matlab'. Functia abs converteste sirurile de caractere la valorile numerice ale codului ASCII. De exemplu y=abs('Matlab') are rezultatul y= 77 65 84 76 65 66]. Functia setstr converteste valorile numerice ale codului ASCII ^n caractere. De exemplu, prin t=setstr(y) se obtine t=Matlab. Functia isstr detecteaza daca argumentul este un sir de caractere. De exemplu a=isstr(t) returneaza a=1. Functia str2mat transforma un set de siruri de caractere ^ntr-o matrice de siruri de caractere av^nd ca linii sirurile individuale de caractere. a Functia blanks foloseste la a sarea sirurilor la anumite pozitii sau pentru crearea spatiilor ^ntre siruri. De exemplu, disp('Pachet',blanks(6),'Matlab') a seaza al doilea cuv^nt la sase spatii dupa primul. Functia deblank elimina a spatiile libere. De exemplu, deblank('Pachet Matlab') are rezultatul PachetMatlab. Functia eval interpreteaza siruri de caractere. De exemplu x=3; z='x^}2'; y=eval(z)} are rezultatul y=9. Functia feval permite evaluarea functiilor (vezi exemplu din paragraful anterior). Functia strcmp compara siruri de caractere. De exemplu a=strcmp('test','Test') are rezultatul a=0. Functia ndstr cauta un sir de caractere ^ntr-un alt sir de caractere. De exemplu s1='acest test este bun'; s2='test'; M= ndstr(s1,s2) are rezultatul M=7. Functia upper face conversia literelor mici^n litere mari, iar lower conversia inversa. Functia isletter determina literele dintr-un sir de caractere. De exemplu S='Azi este 01.10'; A=isletter(S) are rezultatul A= 1 1 1 0 1 1 1 1 0 0 0 0 0 0]. Functia num2str converteste un numar ^ntr-un sir de caractere, intstr un numar^ntreg^ntr-un sir de caractere, str2num un sir de caractere^ntr-un numar, iar sprintf un numar ^ntr-un sir de caractere cu controlul formatului (e pentru notatia exponentiala, f, virgula xa, g, formate scurte ale lui e si f, fara zerouri nesemni cative, nn pentru linie noua, nt tab orizontal, nb un caracter ^napoi, nr carrige return, nf form feed, nn linie noua, nn caracterul n, n' caracterul '). Exemple:
% comenzi %rezultate s=num2str(pi), u=str2num('123.45e-3'); s=3.142 u=0.1234 x=10; t= 'Viteza este',int2str(x),'m/s'] t=Viteza este 10 m/s z= 0.12345678 1.234]; y2=sprintf('%6.5gnt %6.4g',x) y2= 1.1235 1.234] y3=sprintf('%6.5fnt %6.4f',x) y1= 1.12346 1.2340] Functia dec2hex converteste un ^ntreg zecimal ^ntr-un sir de cifre hexazecimale, iar hex2dec face conversia inversa. De exemplu, y=dec2hex(256), a=hex2dec('F') au rezultatele y=100 si a=15.
Matlab Rezultatul unei expresii poate depasi limitele 10 si 10 . De exemplu x=2.5*10^200; y=10^200; z=x+y returneaza z=Inf. Rezultatul ^mpartirii cu zero este 1. In acest caz se a seaza un mesaj de atentionare (warning: division by zero), dar calculele continua cu 1.

Calcul?numeric cu 308 308

213

Pentru efectuarea operatiilor cu tablouri se folosesc aceiasi operatori ca ^n cazul operatiilor cu scalari sau matrice,^nsa precedate de punct daca operatiile se efectueaza element cu element. Exemple:
%operatii A= 2 5 6]; B= 4 3 2]; p=2; C=A-B, D=A-p, E=p-A F=A.*B, G=A.*p, H=p .*A K=A./B, L=A./p, M=p ./A %rezultate C= -2 2 4] D= 0 3 4] E= 0 -3 -4] F= 8 15 12] G= 4 10 12] H= 4 10 12] K= 0.5000 1.6667 3.0000] L= 1.0000 2.5000 3.0000] M= 1.0000 0.4000 0.3333] N= 2.0000 0.6000 0.3333] O= 1.0000 0.4000 0.3333] R= 1.0000 2.5000 3.0000] S= 16 125 36] T= 4 25 36] U= 4 32 64] a=35 norma=7.4162 ca v= 8 6 4; 20 15 10; 24 18 12] %operatie echivalenta C= 6 8; 10 12], D= 4 -4; 4 -4] E= 3 4; 5 6], F= 19 22; 43 50] G= 2 4; 6 8], M= 1 3; 2 4] H= 3.0000 -2.0000; 2.0000 -1.0000] K= -3 -4; 4 5], L= 7 10; 15 22]

N=A.nB, O=A.nB, R=p .nA S=A.^B, T=A.^p, U=p .^A ab=sum(A.*B) norma=norm(A) vect=A'*B

Exemple de operatii matriceale:


%operatie A= 1 2; 3 4]; B= 5 6; 7 8]; p=2; C=A+B, D=A-B E=A+p, F=A*B G=A*p, M=A' H=A/B K=AnB, L=A^p

linspace genereaza un vector cu pas liniar; de exemplu x=2.5:1.25:7, y=linspace(2.5,7,4) au rezultate diferite, x= 2.5000 3.7500 5.0000 6.2500] si y= 2.5000 4.0000 5.5000 7.0000]; logspace genereaza vectori cu pas logaritmic; de exemplu x=logspace(-2,2,5) genereaza x= 0.0100 0.1000 1.0000 10.0000 100.0000]; ] genereaza o matrice vida; de exemplu x= ]; r=isempty(x) are rezultatul r=1; ones genereaza matricea cu toate elementele 1; de exemplu A=ones(2), B=ones(2,3) sunt echivalente cu A= 1 1; 1 1] si B= 1 1 1; 1 1 1]; zeros genereaza o matrice cu toate elementele 0; de exemplu C= 1 3; 2 4; 5 6]; v=zeros(size(C)) genereaza o matrice v similar cu v= 0 0; 0 0; 0 0]; eye genereaza o matrice ce are pe diagonala elemente 1, 0 ^n rest; de exemplu A=eye(2), B=eye(2,3) sunt echivalente cu A= 1 0; 0 1], B= 1 0 0; 0 1 0]; rand genereaza o matrice aleatoare cu distributie normala de medie 0 si varianta 1; de exemplu C=randn(2,3) o genereaza o matrice cu elemente precum C= 0.4142 -1.0215 1.5161; -0.9778 0.3177 0.7494];

Printre generatoarele de vectori si matrice uzuale se remarca:

214

meshgrid genereaza doua tablouri cu perechi de coordonate ale tuturor

punctelor din domeniu de nit de cei doi vectori argument; de exemplu X,Y]=meshgrid(-2:2:2, -2:2) genereaza matricele X= -2 0 2; -2 0 2;-2 0 2;-2 0 2;-2 0 2], Y= -2 -2 -2; -1 -1 -1; 0 0 0; 1 1 1; 2 2 2].
% rezultat A= 0 2 2 5 -5 -8] B= 0 2 2 4 -5 -7] C= 0 2 3 5 -5 -7] D= 0 2 2 4 -6 -8] E= 0 1 1 1 -1 -1]

Functii matematice uzuale Functiile pentru aproximarea unui numar ^ntreg sunt x, oor, ceil, round. Exemple:
% comanda V= 0 2 2.3 4.7 -5.2 -7.8]; A=round(V) B= x(V) C=ceil(V) D= oor(V) E=sign(V) Z= 1.25+2.59*i 7.3-5.3*i;.. . -4.2+1.8*i -2.6-1.4*i]; U=round(Z)

ximeaza un numar cu fractii continue).

U= 1.0000+3.000i 7.0000-5.0000i;.. . -4.0000+2.0000i -3.0000-1.0000i] Aproximatiile la numere rationale se realizeaza cu rats si rat (ultima apro% comanda % comanda echivalenta X= 1.25 0.25 pi 1.2596]; Y=rats(X) Y= 5/4 1/4 355/113 820/651] rat( 0.25 1.25 -2.25 1.343]) 0+1/(4); 1+1/(4); -2+1/(-4); 1+1/(3+1/(-12+1/(6)))] A,B]=rat( 2.25 3.5 6.57 10]) A= 9 7 657 10], B= 4 2 100 1] Functia rem calculeaza restul ^mpartirii. % comanda % rezultat A= 1 3 -6]; B 2 3 4]; C=3; D=rem(A,B) D= 1 0 -2] E=rem(A,C) E= 2.5000,0,-1.0000] X= 1,i,-6+2i]; Y= 2+i 3+2i 3-i]; Z=rem(X,Y) Z= 1 0 0]

Cel mai mare divizor comun si cel mai mic multiplu comun sunt furnizate prin functiile gcd si lcm. De exemplu comanda gcd(30,21), lcm(9,30) au rezultatele ans=3, respectiv ans=90. Functiile de argumente complexe sunt: abs ce calculeaza valoarea absoluta, angle ce calculeaza unghiul argumentului complex, unwrap ce calculeaza partile reale si imaginare ale argumentului, coj ce calculeaza conjugata complexa a argumentului ^n forma polara, imag extrage partea imaginara, real extrage partea reala a argumentului. Exemple:
% comanda % rezultat z=1+i; r=abs(z), =angle(z) r=1.4142 =07854 M= exp(i*pi/4),exp(-i*pi/4)];

215

x=unwrap(real(M)) x= 0.7071 0.7071] u=conj(M) u= 0.7071-0.7071i 0.7071+0.7071i] Functii putere sunt sqrt pentru radical, ^ pentru ridicarea la putere, pow2 pentru a ridica 2 la o putere, nextpow2 pentru a returna cel mai mic numar % comanda % comanda echivalenta A= pow2(3) pow2(13.5)] A=1.0e+0.04 * 0.0008 1.1585] N= nextpow2(4),nextpow2(-8)] N= 2 3] P=2.^N P= 4 8 3 2] X=sqrt( 1 2; 4 -9]) X= 1.0000,1.4142;2.0000,0+3.0000i] Functia exp efectueaza calculul exponential, iar logaritmul se poate calcula ^n baza e, 2 sau 10. De exemplu A= exp(2) 100]; x1=log(A), x2=log10(A) are ca rezultat x1= 2.0000 4.6052], x2= 0.8686 2.0000]. Functiile trigonometrice directe sunt sin, cos, tan, cot, sec, csc, iar inversele sunt asin, acos, atan, atan2, acot, asec, acsc. De exemplu comanda X= pi/4 3*pi/4 2*pi-pi/4]; A=tan(X) are ca rezultat A= 1.0000 -1.0000 -1.0000]. Functiile hiperbolice directe sunt sinh, cosh, tanh, coth, sech, csch, iar cele inverse sunt asinh, acosh, atanh, acoth, asech, acsch.

natural ce reprezinta puterea la care este ridicat 2 pentru a obtine cea mai mica putere mai mare dec^t argumentul. a

Matrice speciale Functia compan calculeaza matricea companion a unui polinom cu coe cienti dati ca argumnet (valorile proprii ale matricei sunt radacinile polinomului si se determina cu functia eig. De exemplu, p= 1 -1 -1 1]; b=compan(p); eig(p) are rezultatul r= 1.0000 1.0000 -1.0000]. Functia diag genereaza matrice diagonale. De exemplu
% comanda A=diag( 2,3]), B=diag( 2,3],1), C=diag( 2,3],-2]) X= 1 2 3; 4 5 6; 7 8 9]; Y=diag(X,1), Z=diag(diag(A))

produc rezultate echivalente cu

asezate ^ntr-o asemenea succesiune astfel ^nc^t linia j este identica cu coloana a j. De exemplu hadamard(2) genereaza o matrice 1 1; 1 -1]. Functia hankel genereaza o matrice anti-simetrica si anti-diagonala.
% comanda % comanda echivalenta C= 1 2 3 4]; H=hankel(C) H= 1 2 3 4; 2 3 4 0; 3 4 0 0; 4 0 0 0] a= 10 5 6]; b= 1 2 3 4]; M=hankel(a,b) M= 10 5 6 2; 5 6 2 3; 6 2 3 4]

% comanda echivalenta A= 2 0; 0 3], B= 0 2 0; 0 0 3; 0 0 0], C= 0 0 0 0; 0 0 0 0; 2 0 0 0; 0 3 0 0] Y= 2; 6], Z= 1 0 0; 0 5 0; 0 0 9] Functia hadamard genereaza o matrice patratica cu toate elementele -1 sau 1

216

Functia hilbert genereaza o matrice cu elemente hij = 1=(i + j ? 1). De exemplu hilb(3) genereaza o matrice 1.0000 0.5000 0.3333; 0.5000 0.3333 0.2500; 0.3333 0.2500 0.2000]. Functia invhilb genereaza inversa unei matrice Hilbert. Functia kron genereaza produsul tensorial Kronecker dintre doua matrice. De exemplu X= 1 2; 3 4; 5 6]; Y= 1 2; 3 4]; K=kron(X,Y) genereaza matricea K= 1 2 2 4; 3 4 6 8; 3 6 4 8; 9 12 12 16; 5 10 6 12; 15 20 18 24]. Functia magic cu argument n genereaza o matrice patratica construita cu ^ntregii de la 1 la n2 care veri ca conditia de patrat magic (suma elementelor pe ecare linie, coloana sau diagonala este aceeasi). De exemplu magic(4) genereaza 16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]. Functia pascal genereaza o matrice patratica pentru calculul coe cient ilor binomiali ai (a + b)n (elementele de pe anti-diagonala). Exemple:
% comanda echivalenta 1 1 1 1 1; 1 2 3 4 5; 1 3 6 10 15; . . . 1 4 10 20 35; 1 5 15 35 70] p2=abs(pascal(5,2)) p1= 0 0 0 1; 0 0 1 4; 0 0 1 3 6;.. . 0 1 2 3 4; 1 1 1 1 1] Functia toeplitz genereaza o matrice Toeplitz de nita prin prima coloana si % comanda pascal(5)

prima linie. Exemple:

% comanda % comanda echivalenta c= 1,2,3,4,5]; T1=toeplitz(c) T1= 1 2 3 4 5; 2 1 2 3 4; 3 2 1. . . c= 10 5 6]; l= 1 2 3 4]; 2 3; 4 3 2 1 2; 5 4 3 2 1] T2=toeplitz(c,l) T2= 10 2 3 4; 5 10 2 3; 6 5 10 2] Functia vander genereaza o matrice Vandermonde. De exemplu, c= 2 3 4 5]; V=vander(c) este echivalenta cu V= 8 4 2 1; 27 9 3 1; 64 16 4 1; 125 25 5 1]. Functia wilkinson genereaza o matrice tridiagonala cu elementele de pe

subdiagonale 1, iar cele de pe diagonala wii = (n ? 2i ? 1)=2 unde n este dimensiunea matricei. De exemplu wilkinson(4) este echivalenta cu 1.5000 1.0000 0 0; 1.0000 0.5000 1.0000 0; 0 1.0000 0.5000 1.0000; 0 0 1.0000 1.5000].

Calcule cu matrice Extragerea unei submatrice se poate face prin speci -

carea unor indici tip vector. De exemplu B=M(1:5,3) extrage o submatrice de dimensiune 5 1, C=M(1:5,7:10), una de 5 4, D=M(1:5,:), liniile complete de la 1 la 5, A(:, 3,5,10])=B(:,1:3) ^nlocuieste coloanele 3, 5 si 10 ale lui A cu primele trei coloane ale matricei B, A(:,n:-1:1) inverseaza coloanele matricei A. Alte exemple:
% comanda % comanda echivalenta A= 2 4 7 3 5 1 0]; B=A(3:5), C=A(2:2:6) B= 7 3 5], C= 4 3 1] A= 1 3 5 7]; B= 2 4 6 8]; n=length(A)+length(B); F(1:2:n)=A; F(2:2:n)=B F= 1 2 3 4 5 6 7 8] X= 0 1 1; 7 0 -5; 0 5 8]; L=(X:,3)>=1, Y=X(L,:) L= 0 1 1], Y= 0 1 1; 0 5 8]

217

prima prin pivotarea ^n jurul ultimei coloane, a doua ^n jurul ultimei linii. De exemplu A=1 2 3; 4 5 6; 7 8 9]; B= iplr(A), C= ipud(A) este echivalenta cu B= 3 2 1; 6 5 4; 9 8 7] si C= 7 8 9; 4 5 6; 1 2 3]. Functia rot90 roteste o matrice ^n sens trigonometric. Astfel prin rotirea matricei A din exemplul anterior cu B=rot90(A), C=rot90(A,-2) se obtin B= 3 6 9; 2 5 8; 1 4 7] si C= 9 8 7; 6 5 4; 3 2 1]. Functiile tril si triu creaza matrice superior si inferior triunghiulare. Pentru cazul matricei A de mai sus, B=triu(A), C=tril(A), D=triu(A,1) se obtin B= 1 2 3; 0 5 6; 0 0 9], C= 1 0 0; 4 5 0; 7 8 9], D= 0 2 3; 0 0 6; 0 0 0]. Functia det calculeaza determinantul unei matrice. Functia inv determina inversa unei matrice. Functia rank determina rangul unei matrice sau determina numarul de valori singulare ale matricei mai mari dec^t al doilea argument, a daca acesta exista. Functia trace determina suma elementelor de pe diagonala principala (urma). De exemplu pentru matricea A de mai sus, B=trace(A) produce B=15. Functia norm calculeaza norma unei matrice sau vector; argumentul al doilea poate lipsi (implicit 1) sau poate 1, 2, inf, fro, p, -inf. Functia cond determina numarul de conditie, iar rcond este 1 daca matricea este bine conditionata, altfel este 0. De exemplu pentru A= 6 6.917; 1 1.152]; c=cond(A), d=rcond(A) se obtine c=1.7234e+00 si d=5.4453e-005. Functia eig determina vectorii si valorile proprii ale unei matrice. De exemplu, pentru A= -2 1 0; 1 -2 1; 0 1 -2]; V,D]=eig(A) rezulta D= -0.5858 0 0; 0 -2.0000 0; 0 0 -3.4142] si V= 0.5000 -0.7071 -0.5000; 0.7071 0.0000 0.7071; 0.5000 0.7071 -0.5000]. Functia svd returneaza valorile singulare ale unei matrice sau o descompunere de tip USV T . De exemplu pentru A= 1 5; 4 3]; d=svd(A), U,S,V]=svd(A) produce d= 954/143; 3535/1348], U= 3177/4435 464/665; pentru o matrice pozitiv de nita, argumentul al doilea veri c^nd daca maa tricea este pozitiv de nita (0 daca da). Functia lu ofera factorizarea LU sau P ?1LU a unei matrice. In mod similar qr ofera factorizarea QR a unei matrice. Functia pinv determina pseudoinversa X a unei matrice A care veri ca AXA = A; XAX = X, AX si XA hermitiene.

Functia reshape redimensioneaza matricele. De exemplu A= 1 4 7 10; 2 5 8 11; 3 6 9 12]; Z=reshape(A,2,6) este echivalenta cu Z= 1 3 5 7 9 11; 2 4 6 8 10 12]. Functiile iplr si ipud inverseaza ordinea liniilor sau coloanelor,

464/665 -3177/4435], S= 954/143 0; 0 3435/1348], V= 521/991 -3725/4379; 3725/4379 521/991]. Functia chol returneaza factorizarea Cholesky RT R

Prelucrarea datelor si calcule statistice Functiile max si min determina maximul, respectiv minumul valorilor unui vector sau matrice. Exemple:
% comanda % comanda echivalenta V= 1 3 -9 0]; A=max(V) A=3 M= 1 2 3; 4 0 9; 13 7 -10]; B=min(V) B= -4 0 -10], (C,D)=max(M) C= 13 7 9], D= 3 3 2] Functia mean calculeaza valoarea medie a valorilor unui vector sau vectorul cu valori medii pe coloane. Functia median ofera elementul de la mijlocul unui

218

set de date ordonat crescator ^n caz impar sau valoarea medie a elementelor de mijloc ^n caz de numar par. Functiile sum si prod sunt folosite la calculul sumei, respectiv produsului elementelor unui vector sau sumelor, respectiv produselor, pe coloanele unei matrici. Functiile sumcum si cumprod a unui vector returneaza un vector care contine sumele sau produsele cumulate ale elementelor vectorului. Exemple:
% comanda V= 1,2,3,4,5]; S=sum(V), SC=cumsum(V) M= 1,2,3;4,5,6;7,8,9;4,2,1]; P=prod(M) PC=cumprod(M) % comanda echivalenta S=15, SC= 1 3 6 10 15] P= 112 160 162] PC= 1,2,3;4,10,18;28 . . . 80,162; 112,160,162]

Functia sort sorteaza elementele unui vector ^n ordine crescatoare sau sorteaza ecare coloana a unei matrice; pentru elementele complexe sortarea se face dupa valoarea modulului. De exemplu V= 1 3 -5 0 0]; Y=sort(V), Z,L]=sort(V) este echivalent cu Y= -5 0 0 1 3], Z= -5 0 0 1 3], L= 3 4 5 1 2]. Functiile std si corrcoef calculeaza abaterea medie patratica a datelor respectiv coe cientul de corelatie. Functiile hist si bar realizeaza reprezentarea histogramei.

Minimizarea functiilor Functia fmin determina minimul unei functii de o singura variabila pe un interval.
%comanda x=fmin(fmin,'sin',0,2*pi) function y=test(x) %salvat intr-un sier test.m y=(x-3).^2-1; . . . xmin=fmin('test',0,5) ymin=test(xmin) % rezultat xmin=4.7124

xmin=3 ymin=-1

Poate determina si minimul unei functii de mai multe variabile, cel mai apropiat de o estimare initiala data ca argument.
%comanda % rezultat la apelare function F=test2(x,a) %salvat intr-un sier test2.m F=100*(x(2)-x(1)^2)^2+(a-x(1))^2+2; . . . x= -1.5,.5]; a=3; xmin,opt]=fmin('test2',x, 0,1.e-8], ],a); xmin xmin= 3.0000 9.0000]

219

Fmin=test2(xmin,a) Fmin=2.0000 Nr=opt(10) Nr=248

Functia fzero determina zeroul unei functii de variabila reala cel mai apropiat de estimarea initiala data ca argument. De exemplu, x=fzero('sin',3) are rezultatul x=3.1416.

Rezolvarea sistemelor de ecuatii liniare Se pot utiliza operatiile matriceale cu observatia ca timpul de calcul este crescator astfel: n; =; inv la st^nga, inv la dreapta, astfel ^nc^t este preferabila varianta n. De exemplu a a pentru sistemul Ax = b cu A= 3 2 -1; -1 3 2; 1 -1 -1] si b= 10 5 -1] varianta cea mai rapida de solutionare este x=Anb' (rezultat x= -2.0000 5.0000 6.0000]). Calcule numerice cu polinoame Functia polyeval determina valoarea unui
polinom ^ntr-un punct.
% rezultat f=2 g= 53.0000 -1.0000 2.0000] h= 53.0000 -1.0000 2.0000] Operatiile cu polinoame sunt + (adunarea), - (scaderea), conv (^nmultire), deconv (^mpartire). % comanda % rezultat g= 1 0 -3 -1 2]; h= 0 0 2 5 -16]; s=g-h s= 10 -5 -6 18] g1= 1 1 -2]; g2= 1 1]; u=conv(g1,g2) u= 1 2 -1 -2] f= 1,2,0,-2]; e= 1,0,1]; z,r]=deconv(f,e) z= 1,2],r= 0,0,-1,-4] Functia residue realizeaza descompunerea ^n fractii simple a raportului a doua polinoame. De exemplu B= 1 2 0 -2]; A= 1 0 1]; r,p,k]=residue(B,A) produce r= -0.5000+2.0000i -0.5000-2.0000i], p= 0+1.0000i 0-1.0000i], k= 1 2] % comanda x=1; f=3*x^4-x^3+x-1 y= -2 0 1]; g=3*y^4-y^3+y-1 p= 3 -1 0]; h=polyeval(p,y)

B(x) = x3 + 2x2 ? 2 = ?0:5 + 2i + ?0:5 ? 2i + x + 2 A(x) x2 + 1 x?i x+i Functia polder determina derivata unui polinom daca functia are un argument, a produsului a doua polinoame daca functia are doua argumente, sau a raportului a doua polinoame daca rezultatul este returnat ^ntr-un vector.
% comanda A= 1,2,-1]; B= 1,-1]; Ad=polyder(A) Cd=polyder(A,B) M,N]=polyder(A,B) % rezultat % comentariu Ad= 2 2] A0 (x) = 2x + 2 Cd= 3 2 -3] (A B)0 (x) = 3x2 + 2x + 3 2 M= 1,-2,-1],N= 1,-2,1] A 0(x) = x2 ? 2x ? 1

adica

x ? 2x + 1

220

Radacinile unui polinom se determina cu functia roots. De exemplu p= 1 -2 -3 10]; r=roots(p) produce rezultatul r= 2.0000+1.0000i 2.0000-1.0000i -2.0000]. Functia poly determina coe cient ii polinomului ale carui radacini se dau ca argumente. De exemplu C=poly( -1 1 3]') are rezultatul c= 1 -3 -1 3].

Interpolarea si aproximarea datelor Cautarea unei date ^n tabele unidimensionale se face cu functia table1. Tabloul trebuie sa e organizat ca o matrice cu prima coloana cu valori de abscise, iar coloanele urmatoare, cu valori ale ordonatelor. Se cauta valorile corespunzatoare unei abscise date; daca asemenea valori nu exista ^n tabel, se face o interpolare liniara ^ntre valorile cele mai apropiate. De exemplu,
Cautarea unei date ^n tabelele bidimensionale se face cun functia table2; se dau abscisa si ordonata, precum ^n exemplul urmator. Secventa de comenzi
% comanda % rezultat M= -2 -1 0 2 4; 6 2 3 -1 7]'; y1=table1(M,-1), y2=table1(M,3) y1=2 y2=3

N= 0 1 2 3 4; 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7]; C1=table2(N,2,3), C2=table2(N,2.5,3), C3=table2(N,2.5,3.5) produce C1=5, C2=5.5000, C3=6. Interpolarea liniara este realizata cu ajutorul functiei table1. Secventa de temp(:,1)= 0,1,2,3,4,5]'; temp1(:,2)= 0,20,60,68,80,110]'; y=table1(temp1, 2.5 4.9]) produce y= 64. 107.]. Interpolarea cubica se realizeaza cu functia spline: x= 0,1,2,3,4,5]; y= 0,20,60,68,77,110]; b=spline(x,y,2.6) ce produce b=67.3013. Interpolarea prin metoda transformatei Fouriei se realizeaza cu functia interpft. De exemplu, k=0:7; x=sin(2*pi*k/8); yi=interpft(x,16) returneaza un vector de 16 elemente. Interpolarea multipla prin functii de o variabila se realizeaza cu interp1. % comanda % rezultat x= -2 -1 0 1 2]; y= 6 2 3 1 7]; yil=interp1(x,y, -1,1.5],'linear') yil= 2 4] yis=interp1(x,y, -1,1.5],'spline') yil= 2.0000 2.0156] yic=interp1(x,y, -1,1.5],'cubic') yil= 2 3]

comenzi

Interpolarea datelor functie de doua variabile dupa o lege biarmonica se realizeaza cu functia interp3, dupa o lege biliniara cu interp4, dupa o lege bicubica cu interp5 si prin metoda distantei inverse cu griddata. Interpolarea multipla a datelor prin functii cu doua variabile se realizeaza cu interp2. Cea mai buna aproximare a unui set de date (x; y) cu un polinom de ordin date se face prin functia poly t. De exemplu, 221

% comanda % rezultat x= -2 -1 0 2 4]; y= -15 -3 2 -3 10]; c3=poly t(x,y,3); c3= 0.7719 -2.5526 0.0439 1.2105] c5=poly t(x,y,5); c5= -0.0958 0.4042 1.1333 -4.3667 0 2.0000]

Integrarea si derivarea numerica a functiilor Integrala prin metoda


Simpson adaptiv-recursiva este realizata prin functia quad, prin metoda Newton-C^tes de ordinul 8 cu quad8, prin metoda trapezelor cu trapz (exo emple: quad('sin',0,2*pi), trapz( 0,pi/2,pi,3*pi/2,2*pi], 0,1,0,-1,0])). Functia di evalueaza diferenta elementelor succesive ale unui vector sau a unei coloane a unei matrice.
% comanda % rezultat X= 1 4 5 9]; Y=di (X) Y= 3 1 4] Z=di (Y) Z= -2 3]

Astfel calculul derivatei prin diferente progresive se poate face astfel:


X=-3:0.1:4; f=x.^5-3*x.^4-11. *x.^3+27*x.^2+10*x-24 df=di (f)./di (x)

obtin^ndu-se valori aproximative ale derivatei pe intervalul -3,4]. Functia del2 a calculeaza o aproximatie a Laplacianului, iar functia gradient aproximeaza gradientul unei functii. Functia quiver reprezinta gra c orientarea unui c^mp de a vectori.

Integrarea numerica a ecuatiilor diferentiale Functia ode23 si ode45 rezolva numeric ecuatii diferentiale prin metoda Runge-Kutta de ordin 3, respectiv 5. De exemplu, sistemul
2 y001 = y1 (1 ? y2 ) ? y2 ; y1 (0) = 0:25 pe 0; 20] y 2 = y1 y2 (0) = 0 se poate rezolva astfel:

function yprim=sistem(x,y) yprim=zeros(2,1); yprim(1)=y(1). *(1-y(2).^2)-y(2); yprim(2)=y(1); care se salveaza ca sier sistem.m si se apeleaza ulterior astfel: t0=0; tf=20; y0= 0 0.25]; t,y]=ode23('sistem',t0,tf,y0);

222

doua, besselj, modi cata de speta ^nt^i, besseli, de spet a a doua besselk), a functiile (beta, incompleta, betainc, logaritmica, betaln), functia eroare (erf, eroare complementara, erfc), functia ? (gamma, incompleta, gammainc, logaritmica gammaln) etc.

Functii speciale: sunt functiile Bessel (de speta ^nt^i, besselj, de speta a a

Reprezentari gra ce bidimensionale Functia plot reprezinta datele ^n coordonate liniare. Astfel: plot(y) reprezinta gra c argumentul y functie de indici (daca y este un vector se traseaza gra cul y=y(i), iar daca y este o matrice se traseaza gra cele coloanelor yj = yj (i)); plot(x,y) reprezinta gra c vectorul y functie de vectorul x (daca x este vector si y este matrice, coloanele lui y sunt trasate funvctie de vectorul x, iar daca x si y sunt matrice de aceeasi dimensiune, se reprezinta coloanele lui y functie de coloanele lui x); plot(x1,y1,x2,y2,.. . ) reprezinta simultan mai multe gra ce; plot(x,y,'linie-tip') traseaza cu linii, markere si culori, unde linie-tip este un sir de 3 caractere reprezent^nd: a tip linie - (continua), - - (^ntrerupta), : (puncte), -. (linie-punct) tip marker +, *, o, x, . culoare y (galben), m (mov), c (albastru-deschis), r (rosu), g (verde), b (albastru), w (alb), k (negru) De exemplu, t=0:.001:.02; f=sin(2*pi*50*t); g=f+.2; plot(t,f,'-.g',t,g,'*r'). Pentru reprezentari ^n coordonate logaritmice sau semilogaritmice se utilizeaza functiile loglog, semilog, semilogy. Pentru reprezentari^n coordonate polare se utilizeaza polar; un exemplu de apel: t=0:.01:2*pi; f=sin(2*t). *cos(2*t); polar(t,f). Functia bar permite reprezentarea gra ca prin bare de marime; exemplu de apel: y= 1 3 7 6 5 2 3]; bar(y). Functia ll se utilizeaza pentru reprezentarea gra ca a poligoanelor pline. De exemplu, x1= 0 3.2 -1]; y1= -1 -1 2 2]; ll(x1,y1,'b'). Functia stem este utilizata pentru reprezentarea gra ca a semnalelor discrete (linii ^ntre valoarea nula si cea curenta, terminate cu un cerculet ). De exemplu, n=0:20; f=sin(2*pi*n/10); stem(n,f). Functia starrs permite reprezentarea gra celor ^n trepte. De exemplu, x:0:.2:6; y=sin(x); starrs(x,y). Functia errorbar permite reprezentarea gra ca a datelor cu bare de eroare. De exemplu x=0:.2:6; y=sin(x); e=rand(size(x))/5; errorbar(x,y,e). Functia hist permite reprezentarea gra ca a histogramelor. De exemplu x=-3:.3:3; y=randn(10000,1); hist(y,x). Reprezentarea ^n coordonate polare a unei histograme se face cu rose. De exemplu x=2*pi*rand(100,1); rose(x,10). Functia compass reprezinta vectori cu originea^n originea sistemului de coordonate. De exemplu, z=2-5*i; compass(z) sau x=5; y=7; compass(x,y). Functia fplot realizeaza o reprezentare gra ca cu anumite restrict ii cum sunt numarul de puncte de esantionare (implicit 25), intervalul pentru abscise, cea mai mare schimbare de unghi ^ntre segmente adiacente ale gra cului etc. De exemplu dupa salvarea functiei function y=test(x) y=sin(x). /x ^n sierul test.m, fplot('test', -20,20],50);
223

grid. Functia comet reprezinta gra c un punct care urmareste realizarea gra ca. De exemplu t=0:1/10000:.1; y=sin(2*pi*50*t); comet(t,y,.2).

Figura 6.25: Importarea de imagini

Pe l^nga facilitatile de creare a imaginilor exista si facilitati de importare a a imaginilor ( gura 6.25.

Reprezentari gra ce tridimensionale Functia mesh reprezinta suprafete de nite pe retea de tip (xi ; yj ; zij ). De exemplu,
X,Y]=meshgrid(-2:.2:2,-2:.2:2); Z=X. *exp(-X.^2-Y.^2); mesh(X,Y,Z) Variantele meshc si meshz permit reprezentari cu linii de contur proiectate pe

planul bazei, respectiv suprafata cu piedestal pornind de la planul de referinta de valoare minima. Functia surf reprezinta suprafete tridimensionale ^n mod similar cu mesh, iar surfc ^n mod similar cu meshc ( gura 6.26. Functia contour reprezinta gra c ^n plan liniile de contur ale unei suprafete. De exemplu
x,y]=meshdom(-2:.2:2,-2:.2:3); z=x. * exp(-x.^2-y.^2); C=contour(-2:.2:2, -2:.2:3,z,8)

Functia clabel eticheteaza liniile de contur preciz^nd cotele; pentru exema plul anterior, clabel(C). Functia contour3D reprezinta ^n spatiu liniile de nivel constant; pentru exemplul anterior contour3D(-2:.2:2, -2:.2:3,z,20). Functia quiver reprezinta un c^mp de vectori orientati, ^n plan. Exemplu: a

xg=-2:.5;2; yg=xg; dx=rand(length(xg),length(xy))-0.5; dy=rand(length(yg),length(yg))-0.5; quiver(xg,yg,dx,dy) Functia plot3 reprezinta linii ^n spatiu. O spirala de exemplu poate trasata cu t=0:pi/50:10*pi; plot3(sin(t),cos(t),t). Functia ll3 reprezinta ^n

224

Figura 6.26: Suprafata peaks

spatiu poliedre av^nd v^rfurile de nite de vectorii x; y; z dati ca argumente. a a Functia comet3 urmareste realizarea gra ca spatiala; de exemplu t=0:1/100:20; comet3(sin(t),cos(t),t). Functiile cylinder si sphere genereaza obiecte spatiale reprezentabile cu surf sau mesh. De exemplu,
Rc1=0.5; Rc2=0; N=30; xc,yc,zc]=cylinder( Rc1 Rc2],N); surf(xc,yc.,zc) uc,vc,tc]=sphere(20); mesh(uc,vc,tc) view ce speci ca pozitia de vizualizare a unui gra c tridimensional, hidden permite vizualizarea sau ascunderea suprafetelor suprapuse, title plaseaza textul argument deasupra gra cului, iar xlabel, ylabel, zlabel]plaseaza texte pe axe, text, gtext pentru plasarea unui text pe gra c la anumite coordonate precizate sau indicate cu mouse-ul, grid on/o traseaza/elimina o retea de linii verticale si orizontale pe gra ce subplot creaza si controleaza acoperirea ecranului cu ferestre gra ce (primele y=sin(2*pi*(0:49)/20); subplot(2,2,1); plot(y); grid axis realizeaza scalarea axelor, hold on/o memoreaza gra cul curent si adauga urmatoarele reprezentari gca cla axes gcf

Comenzile principale pentru controlul gra celor sunt:

doua argumente indica dimensiunile matricei ecran, al treilea indica pozitia gra cului); de exemplu

gra ce peste acesta, returneaza identi catorul de control al caracteristicilor axelor, sterge axele curente, creaza axele la pozitia speci cata returneaza identi catorul de control al caracteristicilor gurii curente, 225

gure deschide o noua fereastra gra ca destinata crearii unui obiect gura, clf sterge fereastra gra ca sau gura curenta, close ^nchide fereastra gra ca, line creaza un obiect linie, surface creaza un obiect gra c tip suprafata, image este utilizat pentru crearea sau a sarea unui obiect imagine, set stabileste proprietatile obiectelor gra ce, get citeste proprietatile obiectelor gra ce, reset initializeaza toate proprietatile axelor sau gurilor la valorile implicite, drawnow pentru actualizarea si completarea unei reprezentari gra ce, newplot pentru trecerea la o noua gura, delete permite stergerea ferestrelor gra ce sau a obiectelor din acestea, brighten controleaza luminozitatea matricii de culori, caxis stabileste limitele ^ntre care se scaleaza matricea de culoare, colormap stabileste sau returneaza matricea de culoare folosita, contrast controleaza contrastul matricei de culoare, hsv2rg, rgb2hsv convertesc nuante de culori dintr-un model ^ntr-altul, pcolor reprezinta matricea de pseudoculoare a resurselor hardware, rgbplot prezinta gra c ponderile culorilor fundamentale ^n matricea de culoare, shading stabileste modul de colorare al suprafetelor, spinmap roteste culorile reprezentarii gra ce. Functia print tipareste gra cele direct la imprimanta sau le salveaza ^ntr-un sier. Functia printopt returneaza con guratia locala a imprimantei. Functia orient returneaza orientarea paginii la imprimanta.

Miscarea si animatia imaginilor Functia movein initializeaza memoria


pentru salvarea cadrelor ^n miscare, getframe returneaza un cadru ^n miscare, movie lanseaza operatia de vizualizare a cadrelor unei imagini ^n miscare. De exemplu, vibratia functiei peaks (prezentata ^n gura statica 6.26):
z=peaks; M=moviein(20) for j=1:20 surf(sin(2*pi*j/20)*z,z); axis(axis); grid M(:,j)=getframe; end movie(M,20)

Crearea intefetelor gra ce interactive Interfetele gra ce precum cea din


uicontrol creaza elemente de contol pentru interfete gra ce, uimenu creaza meniuri pentru interfete gra ce, uiput le activeaza o caseta de dialog pentru stabilirea sierului ce se salveaza,

gura 6.26 sunt create si controlate cu functiile:

226

uiget le similar cu uiput le, pentru ^ncarcare, uisetcolor similar cu uiput le pentru matrice de culoare, uisetfont similar cu uiput le pentru fonturi. Elementele de control interactiv sunt: push button {butoane prin apasare, radio button { butoane radio, sliders { potentiometre liniare, popup menu { lista de optiuni, editable text { caseta de editare, check box { caseta de control.

Exemple: (a) crearea unui buton de apasare care sterge reprezentarile gra ce curente:
h=uicontrol('Style','Pushbutton','Units','normalized',.. . 'Position', .1 .8 .3 .1],'Callback','cla','String','Clear') val=get(hp,'Value'); if val==1 colormap(hsv) elseif val==2 colormap(hot) elseif val==3 colormap(cool) elseif val==4 colormap(gray) end

(b) schimbarea culorii unei reprezentari prin selectarea unei matrice de culoare dintr-o lista de meniuri de tip popup-menu: se scrie sierul setmap.m ce contine:

utilizat ^n secvent a de program

(c) exemplu cu celelalte tipuri de obiecte:

hp=uicontrol('Style','Popup','String','hsvjhotjcooljgray',.. . 'Units','normalized','Position', .1 .1 .3 .2],'Callback','setmap')

nite. De exemplu:

hrb=uicontrol('Style','Radiobutton','Units','normalized',.. . 'Position', .6 .8 .3 .1],'Callback','cla','String','Buton radio') hsl=uicontrol('Style','Slides','String','Potentiometru',.. . 'Units','normalized','Position', .1 .5 .3 .1],'Min',100,'Max',500) hcb=uicontrol('Style','Checkbox','String','Cutie-control',. . . 'Units','normalized','Position', .6 .5 .3 .1],'Callback',' gure') hed=uicontrol('Style','Edit','String','Cutie-editare',.. . 'Units','normalized','Position', .6 .2 .3 .1]) Functia uimenu se utilizeaza pentru crearea unor meniuri cu actiuni predef=uimenu('Label','Aplicatii"); n=uimenu(f,'Label','New'); uimenu(n,'Label','New Figure','CallBack',' gure'); uimenu(n,'Label','New M','CallBack','load'); uimenu(f,'Label','Save','CallBack','save'); uimenu(f,'Label','Quit','CallBack','exit','Separator','on','Accelerator','Q')

Pentru introducerea interactiva cu mouse-ul a datelor de pe gra cele reprezentate pe ecran se foloseste ginput. Astfel x,y]=ginput(N) returneaza N puncte de pe gura curenta ale caror coordonate sunt vectorii x si y. 227

Pentru selectarea interactiva a numelui si locului de unde se citesc datele sau programe se utilizeaza functia uiget le care a seaza o caseta de dialog. De exemplu nume,cale]=uiget le('*.m','Selecteaza'). Pentru stabilirea interactiva a numelui si locului unde se vor salva date sau programe se utilizeaza functia uiput le. De exemplu nume,cale]=uiput le('start.mat','*.mat','Salveaza'). Selectarea interactiva a fonturilor pentru axe sau guri se face pe baza unei casete de dialog activata cu functia uisetfont. De exemplu uisetfont(gca,'Fonturi'). Selectarea interactiva a culorilor utilizate pentru axe sau guri se face pe baza unei casete de dialog activate cu functia uisetcolor. Exemple: ca=uisetcolor(gca,'Fondul axelor') sau cf=uisetcolor(gcf,'Fondul gurii').

6.8 MuPad

Versiunile actuale disponibile sunt proiectate pentru urmatoarele platforme: Windows 95 si NT 4.0, Macintosh PowerPC, Linux si Sun Sparc. Versiunile singur-utilizator sunt disponibile pentru scopuri de cercetare ne-comerciala si uz privat. Informatii detaliate se pot obtine de la http://www.sciface.com/. Din 1997 dezvoltarea interfetelor si aplicatiilor speciale a MuPad este realizata ^n cooperare cu SciFace Software. MuPad este desemnat ca ind un Cas deschis. Este un Cas cu scop general pentru calcule simbolice si numerice. Utilizatorii pot vedea codul sursa al bibliotecii, pot sa implementeze propriile lor rutine si tipuri de date precum si lega dinamic, la editarea de legaturi, module compilate C/C++ pentru a mari viteza si exibilitatea. Mai multe protocoale sunt suportate pentru comunicarea cu alte unelte. MuPad este utilizat^n centre de cercetare, scoli si universitati din ^ntreaga lume. Dezvoltarea sa a fost motivata de dorinta de a construi o unealta de tratare e cienta a Gb-ilor de date. MuPad consta ^ntr-un nucleu care din motive de viteza si e cienta este implementat^n limbajul de programare C si partial ^n C++. Nucleul MuPad ( gura 6.27.a) este compus din urmatoarele parti: 1. aritmetica ce trateaza numere de lungime arbitrara; 2. parser ce citeste si veri ca intrarile utilizatorului; 3. evaluatorul ce evalueaza si simpli ca datele de intrare; 4. managerul de memorie Mammut. Memory Allocation Management Unit trateaza toate datele sistemului^n mod unic (reprezentare unica a datelor) si serveste ca interfata ^ntre hardware si nucleul MuPad. Aparte de interfata utilizator gra ca Mammut este doar partea dependenta de platforma a sistemului. Un set de functii completeaza functiile implementate ^n nucleu (cele din nucleu se refera la functii adesea utilizate pentru manipularea expresiilor si a polinoamelor). Nucleul MuPad ofera un limbaj de programare de nivel ^nalt, limbajul MuPad. Expertiza matematica a MuPad rezida ^n bibliotecile scrise ^n acest limbaj care sunt independente de platforma de calcul. Asa numitele module di228

MuPad (The Multi-Processing Algebra Data Tool) este un Cas dezvoltat la universitatea din Paderborn (Germania). Dezvoltarea MuPad a pornit ^n 1989.

Figura 6.27: MuPad: (a) Organizare (b) Debugger

namice permit extinderea nucleului MuPad sau integrarea pachetelor software ^n MuPad. Un modul dinamic contine functii, care, ^n contrast cu functiile de biblioteca, nu sunt scrise ^n limbajul de programare, ci sunt functii ^n cod compilat masina, scrise ^n C/C++. Acestea pot accesa direct metode interne nucleului. MuPad ofera tipuri de date (primitive gra ce precum punctele si poligoanele) si functii pentru trasarea^n spatiul bi- si tri-dimensional a curbelor si suprafetelor. O scena poate a sata cu unealta gra ca a MuPad numita VCam. O scena consista dintr-un obiect sau o secvent a de obiecte. Pentru ecare obiect pot de niti mai multi parametrii precum text, culoare si stil, punct de vedere, scala, culori de fond. O scena poate salvata ^n diferite formate gra ce. VCam ofera si posibilitatea de a genera si manipula o scena interactiv ^n mod confortabil. Orice asemenea scena poate translatata ^n intrare MuPad corespunzatoare. Help-ul MuPad-ului este organizat ca hipertext. Utilizatorul poate naviga confortabil prin liste de functii disponibile, prin index si pagini ale manualelor ^n-linie, poate crea propriile hiperlegaturi, seta notite etc ( gura 6.27.b). MuPad are o fereastra bazata pe Source-Code Debugger pentru depanarea procedurilor de nite de utilizator care au fost scrise ^n limbajul MuPad ( gura 6.28.b). MuPad difera de celelalte Cas-uri cunoscute ^n special prin urmatoarele trasaturi speciale: a) programare orietata obiect si tipuri de date ce pot de nite de utilizator. In plus fata de tipurile de date de baza precum numerele, polinoamele, sirurile de caractere, listele, multimile, si multe altele, domeniile (domain) sunt utilizate pentru a de ni noi date. Prin domattr si operatorul :: pot accesate metodele domeniului. Functiile sistem pot ^ncarcate prin

229

Figura 6.28: Facilitati MuPad

metode domain (de exemplu, de nind o metoda plus, operatorul uzual + poate utilizat pentru a aduna elementele domeniului ^ntr-o maniera de nita de utilizator). Domeniile prede nite includ Matrix, SquareMatrix, AlgebraicExtension etc, acestea ind oferite ^n biblioteca Dom. Domeniile sunt utilizate ^n MuPad pentru calcule matriceale, de serii, rezolvarea ecuatiilor diferentiale, etc. Exemplu:
>> A:= Dom::Matrix()( 1,2], 3,2]] ): norm( A ); 5 >> Dom::DiscreteSet( 2*PI*k, k=-infinity..infinity); 0, 2 PI, -2 PI, ... >> infinity / infinity; undefined

b) module dinamice ce permit extinderea nucelului. Din punctul de vedere al utilizatorului, un modul dinamic este similar unui pachet de biblioteca. Programarea modulelor dinamice este facilitata de MuPad Application Programming Interface (MAPI). Din punct de vedere tehnic, un modul dinamic este o biblioteca speciala ^n cod masina (^n majoritatea sistemelor implementataca o biblioteca shared) care poate legata^n timpul rularii. Functiile modulului sunt facute publice interpretorului si propagate utilizatorului ca functii uzuale. Modulele dinamice pot ^ncarcate si descarcate (dezlegarea codului masina de nucleu si eliminarea sa din memorie) la orice timp. Astfel este posibila integrarea unor pachete specializate variate ^n MuPad pentru a rezolva diferite tipuri de probleme matematice. c) MuPad Source Code Debugger: MuPad este singurul Cas ce ofera la momentul actual o asemenea unealta care este parte integranta a oricarui 230

MuPad nu fost initial construit pentru ^nvatam^ntul matematic. Are ^nsa a o interfata utilizator interactiva si confortabila. Documentatia este bine organizata, vasta si cu multe exemple. Limbajul de programare este similar cu Pascal si este usor de ^nvatat. Toti algoritmii implementati ^n MuPad pot vizualizati de utilizator, iar depanatorul poate utilizat pentru a simti cum lucreaza algoritmii. Astfel MuPad ofera un mediu puternic si confortabil de programare matematica pentru a construi aplicatii speciale cu scop de predare. Permite evitarea si rede nirea regulilor de simpli care si rescriere. Permite crearea de tipuri de date noi. Programul Euclid a fost elaborat pe baza MuPad.

este tiparit.

MuPad este orientat pe comenzi: se introduce o comanda, iar rezultatul

compilator modern pentru un limbaj de programare.

Exemple de comenzi (rezultatul plotarii si ?limit^n gura 6.27.b si 6.28.a):


Calcul de integrala (antiderivativa):
>> >> >> >> >> >> >> >> >> >> >> >> int((x^2+2)*(x-1)/(x^2*(x^2+1)), x); f:= int((x^2+2)*(x-1)/(x^2*(x^2+1)), x): diff(f, x); Factor(%); ?limit p:= x^8+24*x^7+256*x^6+1584*x^5+6102*x^4+14472*x^3+19216*x^2 +10320*x+1836: S:= solve(p=0, x); map(S, float); DIGITS:= 40: float(op(S, 1)); plotfunc(5*besselJ(0,sqrt(x^2 + y^2)),x=-20..20,y=-20..20); euclidean_alg:= proc(a, b) local t; begin if iszero(a) then return(b) end_if; if iszero(b) then return(a) end_if; a:= multcoeffs(a, 1/lcoeff(a)); b:= multcoeffs(b, 1/lcoeff(b)); while not iszero(b) do t:= divide(a, b, Rem); a:= b; b:= t end_while; multcoeffs(a, 1/lcoeff(a)); end_proc: export(Dom): MF:= Matrix(Fraction(Polynomial(Rational))): A:= MF( a, 1], 0, 1/b]]); Id:= MF( 1, 0], 0, 1]]): (A - l*Id)^(-1);

>> >> >>

231

>> B := MF( >> A + B; >> 3*A*B;

c, a],

a*d, b+c]]);

6.9 Scilab
la adresa http://www-rocq.inria.fr/scilab. A fost conceput initial ca interfata pentru PBlas si ScaLaPack. Poate utilizat ^n ^nvatam^nt si industrie. a Este un limbaj de nivel ^nalt, cu scop primar pentru calcule numerice. Include documentatie ^n-linie. Este un pachet software pentru calcule numerice cu o interfata utilizator prietenoasa. Facilitatile sale includ urmatoarele: structuri de date elaborate (polinomiale, rationale, matrice de siruri de caractere, liste, sisteme liniare multivariabile etc.); interpretor so sticat si limbaj de programare cu sintaxa similara Matlab-ului; sute de functii matematice intrinseci (primitive noi pot usor adaugate); gra ca ^n spatiul bi- si tri-dimensional, animatie; structura deschisa (interfatare cu Fortran si C prin via legaturi dinamice); biblioteci pentru: algebra liniara (incluz^nd matrice rare, forme Kroa necker, etc), control (LQG, H-in nity, etc), pachete pentru optimizare LMI (inegalitati cu matrice liniare), procesare de semnale, simulare, optimizare (diferentiabile si ne-diferentiabile, rezolvitor LQ); Scicos, un mediu interactiv de modelare si simulare a sistemelor hibride; Metanet (analiza retea si optimizare).; calcule simbolice prin interfata Maple; versiune paralela a Scilab. Scilab a fost dezvoltat pentru aplicatii de control a sistemelor si de procesare a semnalelor. Are trei parti distincte: (a) interpretor, (b) bibliotecile de functii (proceduri Scilab) (c) bibliotecile de rutine Fortran si C (diponibile pe retea, putin modi cate, doar pentru compatibilitate cu interpretorul). O trasatura cheie a sintaxei Scilab este abilitatea de a trata matrice: operatii de baza precum concatenarea, extractia sau transpunerea sunt imediat efectuate precum operatiile de baza de adunare si multiplicare. Poate trata obiecte mai complexe dec^t matricele numerice, precum grafurile sau sisa temele liniare. Ofera o serie de primitive pentru analiza sistemelor ne-liniare. Integrarea poate realizata numeric. Are un mediu de programare deschis ^n care crearea functiilor si bibliotecilor de functii este complet ^n m^inile utilizaa torului. Functiile sunt recunoscute ca obiecte date ^n Scilab si astfel pot manipulate si create ca orice alte date. De exemplu, functiile pot argumente la alte functii. Filozo a generala a Scilab este aceea de a oferi un mediu care: 232
Scilab este un Cas disponibil sub forma sursa si cod binar pentru sisteme UnixX Window si Windows 95/98/NT. Scilab este software din domeniul public a at

Figura 6.29: Emblema Scilab si documentatii ^nsotitoare

1. sa aiba tipuri de date variabile si exibile, cu o sintaxa naturala, usor de utilizat; 2. sa ofere un set larg de primitive care servesc ca baza pentru o varietate de calcule; 3. sa aiba un mediu de programare deschis ^n care primitivele noi sunt usor adaugate (o unealta utila distribuita cu Scilab este Intersci, pentru construirea programelor de interfata necesar pentru a adauga noi primitive, adica noi module de cod Fortran sau C); 4. sa suporte dezvoltarea bibliotecii prin toolbox-uri de functii pentru aplicatii speci ce (control, procesare de semnale, analiza retelelor etc.) Versiunea actuala este Scilab-2.4 (iulie 1998). Editarea liniilor de comanda este similara cu Emacs-ul prezent pe sisteme Unix.

Exemple de comenzi si rezultate:


-->a=1; -->A=2; a+A ans = 3. -->//A command on several lines -->u=1000000.000000*(a*sin(A))^2+... --> 2000000.000000*a*b*sin(A)*cos(A)+1000000.000000*(b*cos(A))^2 u = 81268.994 -->I=1:3 I = ! 1. 2. 3. ! -->W=rand(2,4);

233

-->W(1,I) ans = ! 0.2113249 0.0002211 0.6653811 ! -->W(:,I) ans = ! 0.2113249 0.0002211 0.6653811 ! ! 0.7560439 0.3303271 0.6283918 ! -->W($,$-1) ans = 0.6283918 -->sqrt( 4 -4]) ans = ! 2. 2.i !

Alte exemple de comezi:


-->p=poly( 1 2 3],'z','coeff') -->s=poly(0,'s');p=1+2*s+s^2 -->M= p, p-1; p+1 ,2]; det(M) -->F= 1/s ,(s+1)/(1-s) --> s/p , s^2 ] -->F('num') -->F('den') -->F('num')(1,2) -->F21=F(2,1);v=0:0.01:%pi;frequencies=exp(%i*v); -->response=freq(F21('num'),F21('den'),frequencies); -->plot2d(v',abs(response)', -1],'011',' ', 0,3.5,0.7], 4,5,7]); -->w=(1-s)/(1+s); f=1/p; horner(f,w) -->A= -1,0;1,2];B= 1,2;2,3];C= 1,0]; Sl=syslin('c',A,B,C); -->ss2tf(Sl) -->s=poly(0,'s'); R= 1/s,s/(1+s),s^2]; Sl=syslin('c',R); -->tf2ss(Sl) -->sl1= Sl;2*Sl+eye()] -->size(sl1) -->size(tf2ss(sl1)) -->deff(' Cl]=compen(Sl,Kr,Ko)', ' A,B,C,D]=abcd(Sl);'; --> 'A1= A-B*Kr ,B*Kr; 0*A ,A-Ko*C]; Id=eye(A);'; 'B1= B; 0*B];'; --> 'C1= C ,0*C];Cl=syslin(''c'',A1,B1,C1)' ]) -->A= 1,1 ;0,1];B= 0;1];C= 1,0];Sl=syslin('c',A,B,C); -->Cl=compen(Sl,ppol(A,B, -1,-1]),ppol(A',C', -1+%i,-1-%i])'); -->Aclosed=Cl(A,spec(Aclosed) -->save('myfile'); unix_s('rm myfile'); unix_w('date') -->foo= 'void foo(a,b,c)';'double *a,*b,*c;'; '{ *c = *a + *b;}'] -->write('foo.c',foo);unix_s('make foo.o');link('foo.o','foo','C'); -->deff(' c]=myplus(a,b)',... --> 'c=fort(''foo'',a,1,''d'',b,2,''d'',''out'', 1,1],3,''d'')') -->myplus(5,7) -->deff(' ydot]=f(t,y)','ydot= a-y(2)*y(2) -1;1 0]*y') -->a=1;y0= 1;0];t0=0;instants=0:0.02:20; -->y=ode(y0,t0,instants,f);

234

-->plot2d(y(1,:)',y(2,:)', -1],'011',' ', -3,-3,3,3], 10,2,10,2]) -->xtitle('Van der Pol') -->m= 'a' 'cos(b)';'sin(a)' 'c'] -->deff(' x]=%c_m_c(a,b)', ' l,m]=size(a); m,n]=size(b);x= ];'; --> 'for j=1:n,y= ];'; 'for i=1:l,t='' '';'; 'for k=1:m;'; --> 'if k>1 then t=t+''+(''+a(i,k)+'')*''+''(''+b(k,j)+'')'';'; --> 'else t=''('' + a(i,k) + '')*'' + ''('' + b(k,j) + '')'';'; --> 'end,end;'; 'y= y;t],end;'; 'x= x y],end,']) -->m*m' -->deff(' y]=calcul(x,method)','z=method(x),y=poly(z,''x'')') -->deff(' z]=meth1(x)','z=x'); deff(' z]=meth2(x)','z=2*x') -->calcul( 1,2,3],meth1) -->calcul( 1,2,3],meth2) -->quit

235

236

7. Aplicatii ^n geometria curbelor si suprafetelor


Se propune ^n continuare ca aplicatie a software-ului matematic, un dictionar de curbe si suprafete. Majoritatea gurilor sunt realizate cu Maple.

Curbe ^n IRn Fie : (a; b) ! IRn o functie pe intervalul deschis (a; b). Atunci scriem (t) =

7.1 Notiuni geometrice fundamentale

( 1(t); : : :; n(t)) unde ecare j este o functie cu valori reale de variabila reala. Spunem ca este diferentiabila daca si numai daca j este diferentiabila pentru j = 1; : : :; n. O curba (parametrica) ^n IRn este o functie continuu-diferentiabila : (a; b) ! IRn unde (a; b) este un interval deschis ^n IR. Multimea de puncte ((a; b)) din IRn se numeste urma lui . Spunem ca t ! (t) este parametrizarea sau forma parametrica a multimii de puncte (a; b). O linie dreapta din IRn este cel mai simplu exemplu de curba parametrica . Daca p si q sunt doua puncte de pe dreapta, atunci o parametrizare simpla este (t) = (1 ? t)p + tq; t 2 R: Utilizarea formei parametrice este mai usoara, dar exista dezavantajul reprezentarea nu este unica: mai multe parametrizari pot avea aceeasi urma. O curba de nitan implicit ^n IRn este o multime de zerouri a unei functii diferentiabile F : IR ! IR. Daca S este submultimea din IRn a zerourilor lui F, atunci spunem ca ecuatia F(x) = 0 este forma neparametrica a lui S. Intre cele doua forme exista o anumita relatie. Fie F : IRn ! IR o functie diferentiabila si e q un punct pentru care F(q) = 0. Presupunem ca cel putin una dintren derivatele partiale este nenula ^n q. Atunci exista o vecinatate V a lui q ^n IR si o curba parametrica : (a; b) ! IRn astfel ^nc^t urma lui este a multimea fp 2 Vj F(p) = 0g. O parametrizare polara a unei curbe din IR2 este o curba : (a; b) ! IR2 de forma ( ) = r ( )(cos ; sin ); unde r ( ) 0 pentru orice 2 (a; b). Functia r este numita functia raza n curbei . a O curba : (a; b) ! IR este regulata daca 0 (t) 6= 0 pentru oricare t 2 (a; b).
Anvelopa unui set de curbe este curba tangenta la orice membru din multime. Axele constituie anvelopa sistemului de cercuri (x ? a)2 + (y ? a)2 = a2 .

Curbe ^n plan

236

de puteri ale lui x si y ^mpreuna cu operatii de adunare, scadere, ^nmultire si ^mpartire. Astroida este de exemplu o curba algebrica. O forma neparametrica a ei este x2=3 + y2=3 = a2=3. Alte curbe algebrice sunt parabola cubica, cisoida Diocles, vrajitoarea lui Agnesi, foliu Descartes, strofoida, ovalele cassiene, lemniscata Bernoulli, concoida Nicomedes, melcul lui Pascal, cardioidul, trisectricea etc. (prezentate ^n sectiunea urmatoare). Date doua curbe C1 si C2 si un punct x O, se considera o linie din O care taie C1 ^n Q si C2 ^n R. Cisoida este locul geometric al punctelor P pentru care distanta de la O la P este egala cu distanta de la Q la R. Cisoida Diocles, de exemplu, este cisoida pentru care C1 este cerc si C2 este o tangenta la C1 . Fie C o curba si O un punct x. Se considera P si P1 puncte de pe o linie din O la C cu punctul de intersectie Q unde distanta de la P1 la Q este egala cu distanta de la Q la P si este egala cu o constanta k data. Concoida este locul geometric al punctelor P si P1. Daca C este un cerc si O se a a pe cerc, concoida are forma unei melc si ^n cazul special c^nd k este diametrul lui C, a concoida este cardioida. Pentru o curba din plan de nita parametric (x(t); y(t)) concoida relativa la un punct (a; b) si deplasamentul k este curba (x(t) k(?a + x(t))=M; y(t) p k(?b + y(t))=M); M = (?a + x(t))2 + (?b + y(t))2 : Fie C o curba si P un punct de pe C. Fie N normala ^n P si e O punctul de pe N care este limita unde normala la C ^n P1 intersecteaza N c^nd P1 a tinde la P. O se numeste centrul curbaturii la P si PO este raza curbaturii ^n acel punct. Evoluta unei curbe este locul geometric al centrelor de curbatura. 0Pentru o curba0 din plan de nita parametric (x(t); y(t))0 evoluta0 este: (x(t)+y (t)=M; y(t) ? x (t)=M), M = y0 (t)x"(t) ? x0(t)y"(t)]= x (t)2 + y (t)2 ]: Exemple de curbe si evolute: parabola { parabola semicubica, sextica Cayley { nefroida, tractricea { catenary, cicloida { cicloida etc. Dat un cerc C cu centru O si raza r, doua puncte P si Q sunt inverse relativ la C daca produsul distantei dintre O si P si distanta dintre O si Q este r2. Daca P descrie o curba C1 atunci Q descrie o curba C2 numita inversa lui C1 relativ la cercul C. Pentru o curba din plan de nita parametric (x(t); y(t)) si daca cercul este centrat ^n (a; b), inversa este (a + r2(?a + x(t))=M; b + r2(?b + y(t))=M); p M = (x(t) ? a)2 + (y(t) ? b)2 : Exemple de curba { centru cerc { inversa: parabola { focar { cardioid, parabola { v^rf { cisoida Diocles, hiperbola { centru a { lemniscata Bernoulli, trisectricea Maclaurin { focar { cubica Tschirnhausen, spirala echiunghiulara { pol { spirala echiunghiulara, spirala Arhimede { pol { spirala Arhimede, spirala lituus { pol { spirala Fermat, cohleoida { pol { cvadratricea Hippias. Daca C este o curba si C1 este evoluta sa, atunci C este numita involuta lui C1 . O curba are o unica evoluta dar o in nitate de involute. Orice curba paralela cu C este o involuta a lui C1 . Pentru o curba din plan de nita parametric (x(t); y(t)) involuta este locul geometric descris de un punct al tangentei la curba, a at la o anumita distanta de punctul de 237

Lungimea unei curbe este ab k 0 (t)kdt. O curba algebrica este o curba a carui ecuatii pot exprimate ^n termeni

tangentp c^nd tangenta R p pe curba: (x(t) ? x0(t)=M; y(t) ? y0 (t)=M), a, a aluneca M = x0(t)2 + y0 (t)2= at x0(s)2 + y0 (s)2 ds: Daca curba A este involuta curbei B, atunci curba B este evoluta curbei A. Reciproca este adevarata local, adica daca B este evoluta lui A, orice parte a curbei A este involuta unei parti a lui B. Doua curbe sunt paralele daca ecare normala la una din curbe este normala si la cealalta curba si distanta dintre punctele^n care normalele taie curbele este constanta. Pentru o curba din plan de nita parametric (x(t); y(t)), formula parametrica pentru curba paralela la un deplasament d: (x(t) dy0 (t)=M; p y(t) dx0(t)=M); M = x0(t)2 + y0 (t)2 : Data o curba C si O un punct x, din punctul P a curbei C se traseaza o linie perpendiculara pe OP. Anvelopa acestor linii c^nd P descrie curba C a este pedala negativa a lui C. De exemplu, elipsa este pedala negativa a cercului daca punctul x este interior cercului, pe c^nd hiperbola este pedala negativa a a cercului daca punctul x este exterior cercului. Data o curba C, curba pedala a lui C relativ la un punct x O (punctul pedal) este locul geometric al punctelor P de intersect ie a perpendicularei din O la o tangenta la C. Exemple de curba { punct x { curba pedala: parabola { v^rf { cisoid, cerc { centru { cerc, cerc { punct diferit de centru { melc, cerc a { punct pe cerc { cardioid, cardioid { punct de intersect ie { sextica Cayley Fie C o curba si e O un punct x. Fie P pe C si Q centrul curbaturii la P. Fie P1 punctul pentru care P1 O este un segment paralel si egal cu PQ. Curba trasata de P1 este curba radiala a lui C. Curba radiala al unei cicloide este un cerc. Fie C1 si C2 doua curbe. Daca P este un punct de pe C2 , ruleta este curba trasata de P c^nd C2 aluneca pe C1. Cicloida este o ruleta a unui punct al a unui cerc ce aluneca pe o linie dreapta. Epicicloida, hipoccloida, epitrocoida si hipotrocoida sunt rulete ale unui cerc de aluneca pe alt cerc. Nefroida, cardioida si deltoida se obtin ca si cazuri particulare. O spirala este locul geometric al unui punct P care se rasuceste ^n jurul unui punct x O (pol) de asemenea maniera ^nc^t lungimea segmentului OP a este monoton descrescatoare. Exemple sunt spirala Arhimede (spirala liniara), clotoida (spirala lui Cornu), spirala logaritmica (spirala Bernoulli) Fie C o curba si O un punct x numit pol si e O1 un al doilea punct x. Fie P si P1 punctele unei linii ce trece prin O si ^nt^lneste C ^n Q, astfel ^nc^t a a segmentele P1 Q, QP si QO1 au lungimi egale. Locul geometric al punctelor P si P1 este numit strofoida lui C relativ la polul O si punctul x O1. O curba transcendentala este o curba de forma f(x; y) = 0 unde f(x; y) nu este un polinom ^n x si y. Cicloida este o curba transcendentala.

Suprafete ^n IRn

O suprafata locala este o functie diferentiabila : U 2 IRn , unde U este o submultime deschisa a lui IR2 . Multimea (U ) este numita urma lui . O descriere printr-o functie a unei suprafete este numita reprezentare parametrica. O reprezentare neparametrica presupune speci carea unui functii 238

diferentiabile g : IRn ! IR pentru care suprafata este setul de puncte M mapate de G ^ntr-un acelasi numar real. Daca V este un spatiu vectorial bidimensional, o aplicatie liniara J : V ! V astfel ^nc^t J 2 = ?I se numeste structura complexa pe V . Fiecare spatiu a tangent MP la o suprafata M ^ntr-un punct P are o structura complexa JP : MP ! MP . Aplicatia P ! JP poate sau nu sa e o functie continua de P. O suprafata M IRn este orientabila daca ecare spatiu tangent MP are o structura complexa JP : MP ! MP astfel ^nc^t P ! JP este o functie a continua. Banda Mobius si sticla lui Klein sunt suprafete neorientabile.

^n P, VP , este negativul derivatei lui U ^n directia Vp . Operatorul de forma se noteaza cu S. Curbatura gaussiana este o functie K : M ! IR, K(P) =det(S(P)). Curbatura medie este o functie H : M ! IR, H(P) =urma(S(P)). Legatura dintre aceste tipuri de curbatura si curbatura normala este: K = k1 k2; H = (k1 +k2)=2 Suprafete cu curbatura gaussiana constanta sunt sfera, planul, cilindrul, conul, pseudosfera, suprafata Kuen. O suprafata minimala ^n IR3 este o suprafata pentru care curbatura medie este identic nula. O suprafata este plata daca curbatura gaussiana este identic nula. Suprafete minimale sunt suprafata Enneper, suprafetele Scherk, suprafata Hennerberg, suprafata Catalan. O curba asimptotica pe o suprafata M este o curba pentru care curbatura normala se anuleaza ^n directia 0 . O reprezentare asimptotica a unei suprafete M este o reprezentare parametrica pentru care curbele ^n parametrii u si v sunt curbe asimptotice (vezi reprezentarile parametrice ale paraboloidului hiperbolic, elicoidului eliptic, saua maimutei, suprafata Funnel). O suprafata de rulare este o suprafata M IR3 cu parametrizarea de forma (u; v) = (u) + v (u) unde si sunt curbe din IR3 cu 0(u) 6= 0. Curba este numita curba de baza, iar este curba directoare. De exemplu, conoidul Plucker are axa z drept curba de baza si cercul unitate drept curba directoare, banda Mobius are curba de baza u ! (cos u; sinu; 0) si curba directoare u ! a(cos(u=2) cos u; cos(u=2) sin u; sin(u=2))), iar pentru paraboloidul hiperbolic (u; v) = (u; 0; 0) + v(0; 1; u). Fie un plan din IR3, L o linie din si C o multime de puncte din . 239

Suprafete ^n IR3 Fie g : IR3 ! IR o functie diferentiabila si c un numar real. Atunci multimea M(c) = fP 2 IR3 j g(P) = cg se numeste multimea de nivel a lui g corespunzatoare lui c. Curbatura normala ^ntr-un punct P al unei suprafete M este curbatura cu semn al curbei plane formate prin intersectia lui M cu planul ce trece prin P si ^nt^lneste M perpendicular pe aceasta. Valorile minima si maxima ale a curbaturii k1 si k2 sunt numite curbaturi principale. Fie M IR3 si U o suprafata normala la M de nita^ntr-o vecinatate a unui punct P 2 M. Operatorul de forma aplicat unui vector tangent la suprafata

C^nd C este rotit ^n IR3 ^n jurul lui L, multimea de puncte M rezultata este a numita suprafata de revolutie generata de C, iar C este numita curba pro l a lui M si L este axa de revolutie a lui M. Un meridian este intersect ia suprafetei cu un plan ce contine axa suprafetei de revolutie, L. O paralela este intersect ia suprafetei cu un plan ortogonal pe axa suprafetei de revolutie. De convenienta, se considera planul xz si L axa z. Daca C are o parametrizare : (a; b) ! C, o parametrizare standard a suprafetei de revolutie M este (u; v) = ( 1(v) cos u; 1(v) sin u; 2(v)) Catenoida este suprafata de revolutie a curbei catenary. Hiperboloidul de revolutie este un caz particular de hiperboloid eliptic. Suprafata paralela cu o suprafata M afalta la diastanta d este multimea de puncte fQ 2 IR3 j distanta de la Q la M este dg. Suprafata pedala consta din picioarele perpendicularelor dintr-un punct x la planele tangente la suprafata. Fie o curba plana cu proprietatea (?t) = ? (t). Suprafata rasucita cu curba de pro l este de nita prin (u; v) = (a + cos(bu) 1 (v) ? sin(bu) 2(v)) (cos u; sinu; 0) + (sin(bu) 2(v) + cos(bu) 2(v))(0; 0; 1): Banda Mobius este o suprafata rasucita cu curba de pro l (t) = (t; 0), iar sticla Klein pentru curba (t) = (sin t; sin(2t)).

7.2 Curbe plane

Astroida (curba tetracuspidala, cubocicloid, paraciclu) Istoric: A fost

studiat prima data de Roemer (1674), apoi de Bernoulli (1691). Observatie: Este un caz particular de hipotrohoida. Loc geometric: Este de nita ca urma unui punct de pe un cerc ce se rostogoleste ^n interiorul altui cerc x de raza de 4 sau de 4/3 ori mai mare. Forma neparametrica: (x2 +y2 ? a2)3 +27a2x2 y2 = 0 sau x2=3 + y2=3 = a2=3: Forma parametrica: (t) = (a(cos t)3; b(sin t)3); t 2 0; 2 ): Cazuri particulare: Daca a 6= b se considera ca astroida este alungita. Astroida hiperbolica este descrisa prin ecuatiile Forma neparametrica: (x=a)2=3 ? (y=b)2=3 = 1: Forma parametrica: (t) = (a cosh3 t; b sinh3t): Figuri: (a) cu a = b = 1 (b) cu a = 1:5, b = 1 (c) hiperbolic cu a = b = 1.

Animatie: Crearea astroidei cu a = b = 5.

Bicorn (palaria cocosului) Istoric: Este numele unei familii de curbe stu240

diate de Sylvester (1864). Forma neparametrica: y2 (a2 ? x2) = (x2 +2ay ? a)2 : Figuri: (a) cu a = 1 (b) cu a = 2 (c) cu a = 1=2.

pendicularei din B pe o secanta variabila L prin O. N se proiecteaza ortogonal pe una din catete, de exemplu pe OA, ^n N1 . Locul punctelor P de intersect ie a lui L cu perpendiculara din N1 pe d este bifoliul. Forma neparametrica: Daca lungimea laturilor 2este a2 pentru OA si b pentru AB, atunci ecuatia implicita este (x2 + y2 ) = x (ax + by): Forma para? metrica: (t) = (a + bt)=(1 + t2 )2 ; (a + bt)t=(1 + t2 )2 t 2 IR: Functia raza: r( ) = (a cos + b sin ) cos2 : Cazuri particulare: Daca a = b bifoliul este drept. Figuri: (a) a = b = 1 (b) a = 0; b = 1 (c) a = 1; b = 0.

Bifoliu Loc geometric: Fie triunghiul dreptunghic OAB si N piciorul per-

lui Plato. Forma neparametrica: a x = b (x + y ): Functia raza: r( ) = b2=(a cos2 ): Figuri: (a) a = 3; b = 2 (b) a = b = 1 (c) a = 1=2; b = 10.

Campila lui Eudoxus Istoric: A2 fost descoperita2 de Eudoxus, discipol al 4 4 2

Cardioida Istoric: A fost studiata de Roemer ^n 1674. Sub denumirea

curenta este cunoscuta din 1741 (Castillon). Observatie: Este un caz particular de melc al lui Pascal si de epicicloida. Loc geometric: Este locul geometric al punctelor prin care trece un punct de pe un cerc de raza 2a ce se rostogoleste uniform pe un 2alt cerc2 de raza 2a, ^n 2afara acestuia. Forma neparametrica: (?2ax + x + y2 ) = 4a2(x2 + y ) Forma parametrica: (t) = (2a cos t(1 + cos t); 2a sint(1 + cos(t))); t 2 0; ) Functia raza: r( ) = 2a(1 + cos ) Figuri: (a) a = 1 (b) a = 3 (c) a = 0:3. 241

Animatie: Crearea cardioidei cu a = 8.

Cercul Loc geometric: Un cerc de centru (0; 0) si raza r este uzual descris prin locul geometric al punctelor a ate la distanta r de punctul (0; 0). Forma neparametrica: x2 +y2 = r2 : Forma parametrica: (t) = (r cos t; r sin t); t 2 0; 2 ):
Figuri: (a) r = 1 (b) r = 10 (c) r = 1=10.

Cicloida (tautocron, brahistocron) Observatie: Este un caz particular de trohoida. Loc geometric: Este locul geometric al punctelor din plan prin care trece un punct al unui cerc de raza a c^nd cercul aluneca uniform de-a lungul a unei linii drepte (y = 0). Forma parametrica: (t) = (at ? a sint; a ? a cos t); t 2 IR: Figuri: t 2 0; 4 ) (a) a = 2 (b) a = 4 (c) a = 1.
Animatie: Crearea unui cicloid cu a = 3.

cului. Segmentul de linie de la A la un punct oarecare R al dreptei intersecteaza cercul ^ntr-un punct Q. Se cauta punctul P de pe segmentul de dreapta pentru care distanta de la A la P este egala cu distanta de la Q la R. Multimea punctelor P pentru cazul^n care R parcurge^ntreaga dreapta formeaza cisoidul. (b) Se considera doua segmente de linie ortogonale si de lungime egala. Daca 242

Cisoida lui Diocles (cisoida dreapta) Istoric: A fost mentionata prima data p Diocles (c.a. 250-100 ^.e.n) Loc geometric: (a) Se considera un cerc de de raza a=2 tangent la o linie ^ntr-un punct diametral opus unui punct A al cer-

aceste segmente se misca astfel ^nc^t una din linii trece ^ntotdeauna printra un punct x si capatul celuilalt segment aluneca de-a lungul unei linii drepte, atunci mijlocul segmentului de linie ce aluneca conduce la cisoidul lui Diocles. Forma neparametrica: x3 + xy2 ? 2ay2 = 0: Forma parametrica: (t) = ?2at2=(1 + t2); 2at3=(1 + t2) : Functia raza: r( ) = 2a (1= cos ? cos ) : Figuri: (a) a = 2 (b) a = 1 (c) a = 0:1.

Cohleoida (curba sarpelui) Istoric: A fost prima data discutata de Peck^n

1700. Loc geometric: Pe un cerc mobil de raza variabila tangent ^n originea O la axa x se ia un arc OP de lungime constanta a. Locul geometric al punctelor P este cohleoida. Functia raza: r( ) = asin = : Figuri: (a) a = 1 (b) a = 10 (c) a = 0:1.

Concoida Nicomedes (curba scoica) Istoric: A fost studiata de Nicomedes (200 ^.e.n) Loc geometric: Se considera dreapta L de ecuatie x = b si un punct oarecare A de pe acesta dreapta. Se trazeaza linia ce trece prin A si O. Curba este locul geometric al punctelor pentru care distanta AP este egala cu a. Forma neparametrica: (x ? b)2(x2 + y2 ) ? a2 x2 = 0: Functia raza: r( ) = a + b= cos : Figuri: (a) a = 2 b = 4 (b) a = b = 1 (c) a = 2, b = 1.

k cos : Figuri: (a) a = k = 1 (b) a = 0:1, k = 1 (c) a = 2, k = 1. 243

Concoida Sluze Istoric:2A fost construita de Rene de Sluze (1662). Forma neparametrica: a(x ? a)(x + y2 ) = k2x2 : Functia raza: a(r( ) cos ? a) = 2 2

scoperita de Menaechmus (c. 375-325 ^.e.n), tutore a lui Alexandru cel Mare. Appolonius (c. 262-190 ^.e.n) a consolidat si extinse rezultatele anterioare. Loc geometric: (a) A fost prima data de nit ca intersect ie a unui con circular drept cu un plan. Depinz^nd de unghiul dintre plan si planul perpendicular a pe axa conului, respectiv un unghi mai mic, egal sau mai mare de 900, se obtine o elipsa, o parabola sau o hiperbola. (b) Data o linie D si un punct F ce nu apartine dreptei D, conica este locul geometric al punctelor P pentru care distanta de la P la F ^mpartita la distanta de la P la D este constanta. F este focarul conicei, D este directoarea, iar raportul distantelor mentionat mai sus este excentricitatea. Cazuri particulare: Daca excentricitatea este subunitara, conica este o elipsa; daca excentricitatea este 1, conica este o parabola, iar daca excentricitatea este supraunitara, este o parabola. Forma parametrica: (t) = ek=(1 + e cos t)(cos t; sin t); t 2 0; 2 ): Functia raza: r( ) = ke=(1 + e cos ): Forma neparametrica: O conica sau o conica degenerata (doua linii paralele, un punct sau multimea vida) are forma implicita ax2 + bxy + cy2 + dx + ey + f = 0: Figuri: (a) k = 1, e = 1=2 (b) k = 2, e = 1 (c) k = 1, e = 2.

Conica Istoric: Conica este una dintre cele mai vechi curbe. A fost de-

Curbele Delanges Loc geometric: Fie o familie de cercuri concentrice de centru O, o semidreapta xa Ox prin O si un numar pozitiv a. Pe un cerc concentric din punctul de intersect ie cu dreapta Ox se construiesc coardele AA2 , A2A4 , : : : toate de lungime 2a, mijloacele A1 , A3 , : : : ale arcelor AA2 , A2 A4 , : : : si mijloacele Ba , B3 , : : : ale coardelor respective. Functia raza: 1 Locul geometric al punctelor An este parametrizat prin (Cn) r( ) = sin(a=n) 2 iar locul geometric al punctelor Bn este parametrizat prin (Cn ) r( ) = tan(a =n) 1 2 1 Cazuri particulare: C1 este dreapta y = a, iar C1 este curba kappa, C2 este 1 1 trisectoarea Delanges, C3 este trisectoarea Maclaurin. Figuri: Cn (a) a = n = 1 (b) a = 1; n = 2 (c) a = 1; n = 3.
244

2 Figuri: Cn (a) a = n = 1 (b) a = 1; n = 2 (c) a = 1; n = 3.

Curba desagilor (parabola virtuala) Loc geometric: D^ndu-se un cerc, a

un punct x O ce nu apartine cercului si o dreapta xa L ce trece prin O, locul geometric al punctelor P si P1 comune dreptei L1 , paralela printr-un punct M al cercului la dreapta L, si cercului de raza OM si centru O1, punctul unde L1 taie 2perpendiculara ^n2 O pe L, este curba desagilor. Forma = ? y2 Forma parametrica: p 2 (x ? (aneparametrica:; (a +? by)2 + t2a)2(xFiguri:): 2 ?20; 20] si (a) a = 3; (t)== + bt)= 1 + t bt)t=(1 : t b 1 (b) a = 1; b = 0 (c) a = 0:5; b = 1.

Curba dracului Istoric: A fost studiata de Cramer (1750). Forma neparametrica: y2 (y2 ? b2 ) ? x2(x2 ? a2 ) = 0: Functia raza: r( ) = p (a ? b tan2 )=(1 ? tan2 ): Figuri: 2 (? + 0:01; + 0:01) si (a) a = 25; b = 24 (b) a = 24; b = 25 (c) a = 1; b = 2.

Curba uture Functia raza: r( ) = ecos ? a cos(b ) + sin5(c ): Cazuri particulare: In cazul clasic a = 2; b = 4; c = 1=12. Figuri: (a) cazul clasic (b) 245

a = 1; b = 2; c = 1=4 (c) a = 3; b = 1; c = 1=2.

Curba Gauss Forma neparametrica: y = ce?ax2 ; a; c > 0: Figuri: (a) a =


1; b = 1 (b) a = 4; b = 1 (c) a = 1; b = 3.

Curba kappa (curba Gutschoven) Istoric: A fost studiata de Gutschoven, ^n 1662. Loc geometric: Este locul geometric al punctelor de contact ale tangentelor duse dintr-un punct x al unei drepte L la 2cercurile2 de raza a, cu centrele pe dreapta L. Forma neparametrica: y2 (x2 +y ) = a2 x : Functia raza: r( ) = a cot : Figuri: (a) a = 1 (b) a = 2 (c) a = 1=2.

Curba Lissajous (curba Bodwitch) Istoric: Mentionate de Botwitch ^n

1815, au fost studiate de Lissajous ^n 1857. Loc geometric: Reprezinta traiectoria unei particule care participa (^n acelasi timp) la doua oscilatii armonice ce se produc pe doua directii perpendiculare. Forma parametrica: (t) = (a sin(nt + c); b sint); t 2 0; 2 ): Figuri: (a) a = 2; b = 3; c = 1; n = 2 (b) a = 5; b = 7; c = 9; n = 4 (c) a = b = c = 1; n = 10.

Curba Neper (curba logaritmica neperiana) Forma neparametrica: y =


a ln(x=a): Figuri: (a) a = 5 (b) a = 2 (c) a = 10. 246

Curba ^n forma de para Istoric: A fost studiata de Longchamps ^n 1886. Forma neparametrica: b2y2 = x3(a ? x): Figuri: (a) a = 1; b = 2 (b) a = b = 1
(c) a = 2, b = 1.

Curbele Plateau Istoric: Au fost studiate de Plateau. Loc geometric: Fiind

date doua puncte xe A si A1 cu distanta dintre ele de 2a pe dreapta suport L. Curba este locul geometric al punctelor M pentru care^ntre masura a unghiului dintre MA si L si masura a unghiului dintre MA1 si L exista relatia =m = =n, unde m si n sunt numere naturale fara divizori comuni. Forma parametrica: (t) = a (sin((m + n)t)= sin((m ? n)t); 2asin(mt) sin(nt)= sin((m ? n)t)) : Cazuri particulare: daca m = 2n se obtine un cerc de centru de raza 2a, daca m = 3 si n = 1 se obtine trisectoarea Maclaurin, pentru m = 3 si n = 2, rezulta secvisectoarea. Figuri: (a) a = 2; m = 5; n = 3 (b) a = 1; m = 3; n = 1 (c) a = 1; m = 3; n = 2.

Curba spicului (curba lui Stammer) Functia raza: r( ) = a= sin(n ): Ca-

zuri particulare: Daca n este numar irational, curba are o in nitate de ramuri. Daca n = p=q atunci curba are p sau 2p ramuri dupa cum p si q sunt ambele impare sau de paritati diferite. Daca n = 1 este o dreapta, n = 1=2, trisectoarea lui Delanges, n p 1=3, trisectoarea lui Maclaurin. Figuri: 2 0:1; =n ? 0:1] si = (a) a = 2; n = 2 (b) a = 1; n = 1=2 (c) a = 1; n = 1=3. 247

Curba Talbot Forma parametrica: (t) = ?(a2 + f 2 sin2 t)cos(t=a); (a2 ? 2f 2 + f 2 sin2 t))sin(t=b) : Figuri: (a) a = 2; b = 4; f = 3 (b) a =
b = f = 1 (c) a = 4, b = 1, f = 2.

Curba de urmarire Istoric: A fost mentionata de Bouguer (1732). Loc geometric: Daca A se misca de-a lungul unei linii drepte, atunci P descrie curba de urmarire daca P este ^ntotdeauna orientat2 catre A si A si P se misca cu viteze uniforme. Forma neparametrica: y = cx ? log x: Figuri: x 2 0:001; 4] si (a) c = 1=10 (b) c = 1 (c) c = 10.

Curba Watt Istoric: Curba a primit numele dupa James Watt (1736-1819),
cel care a construit masina cu aburi. Loc geometric: Doua roti de raza b se a a la distanta 2a (centrele). Presupunem ca o vergea de metal de lungime 2c este xata la capete pe circumferinta rotilor. Locul geometric al mijlocului vergelei este curba Watt. Forma neparametrica: (x2 + y2 )(x2 + y2 +p 2 ? a2 ? b2 )2 + c c2 ? a2 cos2 )2 : 4a2y2 (x2 + y2 ? b2 ) = 0: Functia raza: r2( ) = b2 ? (a sin Cazuri particulare: Daca a = c, se obtine un cerc de raza b cu un ,,opt" ^n interior. Figuri: (a) a = 2; b = 6; c = 3 (b) a = 2; b = 3; c = 4 (c) a = c = 2, b = 1. 248

Cvadraticea Hippias (trisectoarea Hippias) Istoric: A fost prima curba mentionata dupa cerc si linie (Hippias, c.a. 460 ^.e.n). Loc geometric: Fie un patrat ^n primul cuadrant, cu coltul st^nga-jos ^n origine. Fie o linie a paralela cu axa x care se misca uniform de la latura de jos a patratului la latura de sus a patratului. Fie un unghi cu v^rful ^n origine si o latura pe a latura de jos a patratului. Unghiul creste constant de la 0 la =2. Linia si unghiul porneste ^si termina simultan miscarea. Intersect ia dintre linie si latura mobila a unghiului formeaza trisectoarea Hippias. Forma parametrica: (t) = a(t cos t; t); t 2 ?2 ; 2 ): Functia raza: r( ) = 2a =( sin ): Forma neparametrica: y = x cot( x=(2a)): Figuri: (a) a = 1 (b) a = 2 (c) a = 1=2.

Deltoid (tricuspoida, hipocicloida Steiner) Observatie: Este un caz spe-

cial de hipocicloida. Istoric: A fost mentionat prima data de Euler (1745, aka tricuspid) si ulterior studiat de Steiner (1856). Loc geometric: Este de nit ca urma trasata de un punct de pe un cerc ce se rostogoleste ^n interiorul unui alt cerc de raza de 3 sau de 3/2 ori mai mare. Forma neparametrica: (x2 + y2 + 12ax + 9a2)2 = 4a(2x + 3a)3 Forma parametrica: (t) = a(2 cos t + cos(2t); 2 sint ? sin(2t)) Figuri: (a) a = 1 (b) a = 5 (c) a = 1=5.

Elipsa Observatie: Este o conica. Loc geometric: (a) O elipsa de centru (0; 0) cu semiaxele a si b paralele cu axele de coordonate este uzual descrisa prin locul geometric al punctelor pentru care suma distantelor de la doua puncte xe F1 si F2 este constanta. Cele doua puncte sunt numite focarele elipsei.
249

V^rfurile elipsei sunt de nite ca intersect iile ale elipsei cu linia ce trece prin a focare. Distanta dintre v^rfuri este denumita axa majora sau axa focala. Linia a ce trece prin centru si este perpendiculara pe axa focala este axa minora. In p cazul de mai sus si daca a > b aceste puncte sunt ( a2 ? b2; 0). (b) Poate generata ca hipotrohoida. (c) Este locul geometric al punctelor prin care trece un punct al unui segment de linie de lungime constanta ce gliseaza pe doua drepte ortogonale pe care se a a capetele segmentului. (d) Poate de nita ca intersect ia unui cilindru circular drept cu un plan: daca r este raza cilindrului circular drept, iar este unghiul format de planul de intersectie cu planul bazei cilindrului, atunci intersect ia este o2 elipsa cu axa majora r= cos si semiaza r. Forma neparametrica: x2=a2 + y =b2 = 1: Forma parametrica: (t) = (a cos t; b sint); t 2 0; 2 ): Figuri: (a) a = 2; b = 1 (b) a = 1; b = 2 (c) a = b = 1.

Epicicloida Istoric: Aceasta familie de curbe a fost studiata de Durer (1525). Loc geometric: Este locul geometric al unui punct x al unui cerc de raza b care se rostogoleste pe un cerc x de raza a, ^n exteriorul acestuia. Forma parametrica: (t) = ((a + b) cos t ? b cos ((a + b)t=b); (a + b) sin t ? b sin ((a + b)t=b)) Cazuri particulare: daca a = b, cardioida, daca a = 2b, nefroida. Figuri: (a) a = 8; b = 5 (b) a = b = 5 (c) a = 10; b = 5.

Animatie: Crearea unei epicicloide cu a = 8; b = 5.

Durer (1525). Loc geometric: e doua cercuri, A si B, iar Q un punct x fata de cercul B. Cercul B se roteste ^n jurul cercului A. Urma lasata de Q este epitrohoida. Daca B are raza b, A raza a, iar h este distanta de la punctul x la centrul cercului B, atunci epitrohoida este unic speci cata de cei trei parametrii (a; b; h). Forma parametrica: (t) = 250

Epitrohoida Istoric: Un exemplu de epitrohoida apare ^n lucrarile lui

((a + b) cos t + h cos ((a + b)t=b) ; (a + b) sin t + h sin((a + b)t=b)) : Cazuri particulare: Daca a = 1, iar b = p=q, atunci perioada este p. Daca a = 1, iar b este irational, curba este neperiodica; daca h = 0, cercul, a = b, limcon Pascal, a = b = h, cardioida, a=2 = b = h, nefroida. Figuri: (a) a = h = 5, b = 3 (b) a = 1; b = 1=5; c = 1=10 (c) a = 1; b = 4=5; c = 2:6.

Figuri: (a) a = b = h = 1 (b) a = b = 1, h = 3 (c) a = 2, b = h = 1.

Animatie: Crearea unei epitrohoide cu a = h = 5; b = 3.

Foliu Kepler Forma neparametrica: Forma generala este data de formula: (x2 +y2 )(y2 +x(x+b)) = 4axy2 : Functia raza: r( ) = ?b cos +4a cos sin2 : Cazuri particulare: foliu simplu (curba oului, curba Kepler, ovoid) c^nd b = 4a, a bifoliu c^nd b = 0, trifoliu c^nd b = a. Figuri: (a) a = 5; b = 3 (b) a = 1; b = 4 a a (c) a = 1; b = 0 (d) a = b = 1.

^n N si o dreapta data L perpendiculara pe axa x ^n N1 . Locul geometric al intersect iei lui ON1 cu paralela prin N la dreapta L este foliul lui Descartes. Forma neparametrica: Daca dreapta L este x = b, atunci ecuatia implicita este (b + r)2 (x ? 3r)x2 + b2 (x + r)y2 = 0: Cazuri particulare: Daca tangentele la curba ^n nodul O sunt ortogonale, foliul este ortogonal. In acest caz, 251

Foliul lui Descartes (nodul lui Ruban) Istoric: A fost discutat de Descartes ^n 1638. Loc geometric: Fie un cerc de centru a at la (r; 0) si raza 2r. Fie A punctul de coordonate (?r; 0). O dreapta variabila prin A taie cercul

ecuatiile? sunt: Forma neparametrica: x3 + y3 ? 3axy = 0: Forma parametrica: p (t) = 3at=(1 + t3); 3at2=(1 + t3) : unde a = r 2=2. Figuri: (a) ortogonal a = 2 (b) ortogonal a = 1 (c) general b = 3; r = 2.

Foliu parabolic Loc geometric: Fie un dreptunghi x OABC. O secanta

prin O taie pe AC ^n D. Perpendiculara ^n D pe OD taie pe BC ^n E, perpendiculara ^n E pe DE taie pe AC ^n F si perpendiculara ^n F pe EF taie pe OD ^n P. Locul geometric al punctelor P se numeste foliu parabolic. Forma neparametrica: Daca A(a; 0) si B(0; b), ecuatia implicita a curbei este x3 ? a(x2 + y2 ) + bxy = 0: Cazuri particulare: C^nd b = 0 se obtine curba lui a Longchamp, descrisa: Forma parametrica: (t) = a(1 + t2 ; t(1 + t2 )); t 2 IR: Functia raza: r( ) = a= cos3 Figuri: (a) a = b = 1 (b) a = 3; b = 1 (c) a = 1; b = 1=2 (d) a = 1; b = 0.

Glissette Functia raza: Este o curba de nita prin: r( ) = a= sin2 Figuri:


(a) a = 1 (b) a = 3 (c) a = 1=10.

diferenta distantelor de la punctul P la doua puncte xe F1 si F2 (focare) este constanta. Daca distanta dintre focare este 2c, iar distanta constanta este 2a, excentricitatea hiperbolei este numarul e = p 1 < e. Cazuri particulare: c=a; o hiperbola rectangulara are excentricitatea 2, iar forma implicita standard este xy = 1. Forma parametrica: (t) = (a cosh t; b sinht): Forma neparametrica: x2=a2 ? y2 =b2 = 1: Figuri: (a) a = b = 1 (b) a = 2, b = 1 (c) a = 1, b = 2. 252

Hiperbola Loc geometric: Este locul geometric al punctelor P astfel ^nc^t a

geometric: Este locul geometric al unui punct x al unui cerc de raza b care aluneca ^n interiorul unui cerc de raza a. Forma parametrica: (t) = ((a ? b) cos t + b cos ((a ? b)t=b) ; (a ? b) sin t ? b sin((a ? b)t=b)) : Cazuri particulare: daca a = 3b, tricuspoid, daca a = 4b, astroida. Figuri: (a) a = 5; b = 3 (b) a = 12; b = 5 (c) a = 8; b = 2 (d) a = 6; b = 2.

Hipocicloida Istoric: Familia de curbe a fost studiata de Durer. Loc

Animatie: Crearea unei hipocicloide cu a = 5; b = 3.

Hipotrohoida (spirograful) Loc geometric: Fie doua cercuri A si B, cer-

cul B ^n interiorul cercului A. Fie Q un punct x fata de cercul B. Cercul B se rostogoleste uniform de-a lungul cercului A, pe interior. Punctele din plan prin care trece Q este hipotrohoida. Daca B are raza b si A raza a, iar distanta punctului Q fata de centru cercului B este h, hipotrohoida este unic determinat de coe cient ii (a; b; h). Forma parametrica: (t) = ((a ? b) cos t + h cos ((a ? b)t=b) ; (a ? b) sin t ? h sin((a ? b)t=b)) : Cazuri particulare: Daca a = 1, iar b = p=q curba este periodica de perioada p. Daca a = 1 si b este irational, curba este neperiodica. Daca h = 0 se obtine cercul, a=2 = b = h, segment de linie de lungime 2a, a=2 = b si h 6= b, elipsa cu semiaxe b + h si jb ? hj, a=3 = b = h sau 2a=3 = b = h, deltoid, a=4 = b = h sau 3a=4 = b = h, astroida, a = n=(n+1); b = (n ? 1)=(2n+1); h = 1=2, unde n 2 este un numar natural, rodoneea cu n petale, daca n este impar si 2n altfel, a = 1; b = 1=3; h = 2=3, trifoliu. Figuri: (a) a = 5; b = 7; c = 2:2 (b) a = 1; b = 7=13; c = 1=13 (c) a = 1; b = 7=13; c = 5=13 (d) a = 1; b = 3=4; c = 7=13. 253

Figuri: (a) a = 2; b = 1; c = 3 (b) a = 3; b = 1; c = 1 (c) a = 4; b = 1; c = 1 (d) a = 1; b = 1=3; c = 2=3.

Animatie: Crearea unei hipotrohoide cu a = 7; b = 5; c = 2:2.

Loc geometric: (a) Este curba formata de un lant inextensibil perfect exibil de densitate uniforma at^rnat de doua suporturi asupra caruia actioneaza a gravitatia. (b) Este locul geometric al focarului unei parabole ce aluneca de-a lungul unei linii. (c) Printr-un punct x A se duce o secanta variabila care taie o dreapta daca L (ce nu contine pe A) ^n punctul B. Curba C care trece prin A si a carei tangenta ^n punctul ei curent P este perpendiculara pe AB, ordonata lui P ind egala cu lungimea lui AB, se numeste lantisor. Forma neparametrica: Daca A(0; a), iar L este axa x ecuatia explicita este y = a cosh (x=a): Figuri: (a) a = 1 (b) a = 10 (c) a = 0:1.

Lantisor (catenary) Istoric: Ecuatia sa a fost obtinuta de Leibnitz (1691).

Lemniscata lui Bernoulli Observatie: Este un caz particular de oval cassian. Istoric: A fost mentionata de Bernoulli (1694) si studiata de Fagnano (1750). Loc geometric: Este locul geometric al punctelor P pentru care produsul distantelor la doua puncte xe F1 si F2 (focare) este constant 4a, iar focarele se a a la distanta pa. In cazul reprezentarii paramet254

p rice de mai jos, focarele se a a la ( Forma parametrica: ?a cos t=(1 + sin2 t); a sin t cos t=(1 + sin2at) 2; 0). 0; 2 ): Functia raza: r2(t)) = ; t2 ( =

a2 cos(2 ): Forma neparametrica: (x2 + y2 )2 = a2 (x2 ? y2 ): Figuri: (a) a = 1 (b) a = 5 (c) a = 1=5.

Lemniscata Gerono (curba opt) Forma parametrica: (t) = a(cos t; cos t sin t), t 2 0; 2 ): Forma neparametrica: x4 = a2(x2 ? y2 ): Functia raza: r2( ) = a2 cos(2 )= cos4 : Figuri: (a) a = 1 (b) a = 5 (c) a = 1=5.

Melcul lui Pascal Observatie: Descrie o famile de curbe. Este un caz par-

ticular de epitrohoida. Este o generalizare a cardioidei si trisectoarei. Istoric: A fost descoperit de Etienne Pascal (1588-1640), tatal lui Blaise Pascal. Denumirea actual acceptata provine din 1650 (Roberval). Loc geometric: (a) Fie O un punct x al unui cerc de raza a. Se traseaza linia ce trece prin O si P, un punct oarecare a cercului. Pe aceasta linie se determina punctele Q1 si Q2 pentru care distantele de la P la Q1 si Q2 sunt egale cu o constanta b. Daca P variaza pe cerc, se obtine melcul lui Pascal (b) Este urma lasata de punct x fata de un cerc c^nd cercul se rosa togoleste ^n exteriorul unui alt cerc, x si de raza egala. Forma neparametrica: In cazul clasic, (x2 + y2 ? 2ax)2 = b2 (x2 + y2 ): Forma parametrica: (t) = ((2a cos(nt) + b) cos t; (2a cos(nt) + b) sin t); t 2 0; 2 ): Functia raza: In cazul clasic r( ) = 2a cos( ) + b: In cazul general r( ) = 2a cos(n ) + b: Cazuri particulare: daca 2a > b curba are o bucla, daca 2a = b, cardioida, daca 2a < b curba nu are bucle, daca a = b, trisectoarea. Figuri: Cazul clasic (a) a = 1; b = 3 (b) a = 1; b = 2 (c) a = b = 1 (d) a = 4; b = 5.

Figuri: Cazul general (a) n = 3; a = 1=2; b = 2 (b) n = 1; a = 1; b = 3 (c) n = 12; a = 2; b = 1 (d) n = 10; a = 4; b = 5. 255

Animatie: Crearea melcului lui Pascal.

Nefroida (epicicloida lui Huygens) Istoric: Numele curbei a fost dat de Proctor ^n 1878. Observatie: Este un caz special de epicicloida. Loc geometric: (a) Este urma lasata de un punct x al unui cerc care se rostogoleste ^n jurul unui cerc xat de raza dubla. (b) Este urma lasata de un punct x al unui cerc care se rostogoleste ^n interiorul unui cerc de raza de 2/3 ori mai mica. Forma parametrica: (t) = a(4 cos3 t; 3 sint + sin(3t)); t 2 0; 2 ): sau (t) = a(3 cos t ? cos(3t); 3 sint ? sin(3t)): Forma neparametrica: pentru a = 1, (x2 + y2 ? 4)3 = 108x2: Figuri: (a) a = 1 (b) a = 5 (c) a = 1=5.

Animatie: Crearea nefroidei cu a = 3.

Nefroida Freeth Istoric: A fost mentionat de Freeth ^n 1879. Functia raza:


r( ) = a(1 + 2 sin( =2)): Figuri: (a) a = 1 (b) a = 2 (c) a = 1=2.

O urida Loc geometric: Fie OAB un triunghi dreptunghic, M un punct


mobil pe cateta OA si P proiectia lui O pe perpendiculara ^n M pe MB. 256

Locul geometric al punctelor P este cubica numita o urida. Se considera A(0; ?a); B(b; ?a). Forma neparametrica: x(x2 + y2 ) + y(ax + by) = 0: Forma ? parametrica: (t) = ?bt(a + t)= (a + t)2 + b2 ]; t(a + t)2 = (a + t)2 + b2] Cazuri particulare: Daca a = 0 se obtine cisoida lui Diocles. Figuri: (a) a = 1, b = 2 (b) a = 0, b = 1 (c) a = ?1, b = 1=2.

Ovalele carteziene (ovalele Descartes) Istoric: Au fost studiate prima data de Descartes ^n 1637. Loc geometric: Este locul geometric al punctului P a carui distante s si t la doua puncte xe s si t satisface relatia s + mt = a. Se considera c distanta dintre S si T. Forma neparametrica: ((1 ? m2 )(x2 + y2 ) + 2m2 cx + a2 ? m2 c2)2 = 4a2(x2 + y2 ): Cazuri particulare: daca m = 1, se obtine o conica, iar daca m = a=c, melcul lui Pascal (ovalul interior atinge ovalul exterior). Figuri: (a) a = m = 2, c = 4 (b) a = 4; c = 1; m = 3 (c) a = 3; c = 0; m = 1 (d) a = m = 2, c = 1.

miscarea Pam^ntului si a soarelui. Observatie: Este o generalizare a lemniscatei a lui Bernoulli. Loc geometric: (a) Este locul geometric al punctelor pentru care produsul distantei de la doua puncte xe F1 si F2 (focare) este constant b2 , iar distanta dintre F1 si F2 este 2a. (b) Este intersectia unui tor4 cu un plan paralel cu axa torului. Forma neparametrica: (x2 + y2 + a2 )2 ? b ? 4a2 x2 = p 0: Forma parametrica: (t) = M=2(cos t; sin t); t 2 0; 2 ); a < b; unde p(?a4 + b4) + a4 cos2(2t). Functia raza: r4( ) + a4 ? M = 2a2 cos(2t) + 2 2r2( )a2 cos(2 ) = b4 : Cazuri particulare: daca a = b se obtine lemniscata lui Bernoulli, pentru a = 0, cercul de raza b, pentrupaj < jbj, o curba conexa, iar j daca jaj > jbj apar doua ovale. Figuri: (a) a = 3; b = 2 (b) a = b = 2 (c) a = 2:01; b = 2.

Ovalele cassiene Istoric: Au fost studiate de Cassini (1680), ^n relatie cu

Ovoid (foliul simplu, curba oului, curba lui Kepler) Loc geometric:
257

Fie O originea sistemului de coordonate si un cerc cu centrul pe axa x de raza r. Un punct oarecare de pe cerc se proiecteaza pe axa x^n M1 , iar M1 pe OM si P. Locul geometric al punctelor P c^nd M descrie cercul este ovoidul. Forma a neparametrica: (x2 + y2 )2 ? 2rx3 = 0: Forma parametrica: r( ) = 2r cos3 ( ): Figuri: (a) r = 1 (b) r = 5 (c) r = 1=5.

Parabola Loc geometric: Este locul geometric al punctelor P astfel ^nc^t a distanta de la P la un punct F, numit focarul al parabolei, este egala cu distanta de la P la o linie L, numita directoarea parabolei. V^rful V al parabolei a este punctul cel mai apropiat al parabolei de directoare. Daca parabola este descrisa prin t ! (2at; at2), atunci focarul este (0; a), iar directoarea este linia t ! (t; ?a), iar v^rful parabolei este originea axelor de coordonate. Forma nea parametrica: y = ax2 =2: Forma parametrica: (t) = (2at; at2); t 2 IR: Figuri: (a) a = 3 (b) a = 2 (c) a = ?2.

Parabolele divergente ale lui Newton Istoric: Apare ^n clasi carea lui Newton a curbelor cubice. Forma neparametrica: ay2 = x(x2 ? 2bx+c); a > 0: Cazuri particulare: daca radacinile sunt reale si diferite, curba este o parabola divergenta ^n forma unui clopot cu un oval ^n v^rful sau; daca doua radacini a sunt egale se formeaza o parabola si un oval; daca trei radacini sunt egale, se obtine parabola semicubica; daca exista o unica radacina reala, se obtine o parabola ^n forma de clopot. Figuri: (a) a = b = c = 1 (b) a = 2, b = 3; c = 4 (c) a = 3; b = 1; c = 2.

Parabola semicubica (curba Neil) Istoric: A fost descoperita de Neile ^n 1657. Forma parametrica: (t) = (t3; at2); t 2 IR: Functia raza: r( ) =
258

atan2 = cos : Forma neparametrica: ax2 = y3 : Figuri: (a) a = 1 (b) a = 2 (c) a = 1=2.

Perlele Sluze Istoric: Aceste curbe au fost studiate de Sluze (1657-1698). Numele de perle a fost dat de Pascal. Forma neparametrica: yn = k(a ? x)p xm ;
unde n; p; m sunt ^ntregi. Figuri: (a) a = n = 4; k = m = 2; p = 3 (b) a = k = n = m = p = 1 (c) k = 3; a = m = n = p = 1 (d) a = 2; k = p = 1; n = 6; m = 3.

Rodonee (rozacee) Istoric: Aceasta denumire a fost data de Grandi ^ntre 1723 s^ 1728 datorita aspectului de petale de oare. Loc geometric: Fie punctele A x si M arbitrar pe un cerc de raza a centrat ^n originea O. Se considera un punct N de pe cerc pentru care lungimea arcului AN este de k ori mai mare dec^t lungimea arcului AM. N se proiecteaza ^n N1 pe OA. Pe raza OM se a cauta punctul P pentru care distanta OP este egala cu distanta NN1 . Locul geometric al punctelor P c^nd M descrie cercul C este rodoneea de indice k. Funca tia raza: r( ) = a sin(k ): Cazuri particulare: Daca k este un^ntreg atunci curba are k, respectiv 2k bucle (petale) c^nd k este impar, respectiv impar. Daca k a este irational, numarul de petale este in nit.. Daca k = 1 se obtine un cerc. Daca k = 3 se obtine trifoi regulat (trifoi echilater). Daca k = 1=3 se obtine sescvisectoare. Daca k = 2 se obtine corola sau cuadrifoliu 3 caracterizat prin: Functia raza: r( ) = a sin(2 ?): Forma neparametrica: (x2 +y2 ) = 4a2 x2y2 : Forma parametrica: (t) = 4a t(1 ? t2 )2 =(1 + t2 )3; 2t2(1 ? t2)=(1 + t2)3 : Figuri: (a) a = 1, k = 3 (b) a = 2; k = 8 (c) a = 4; k = 2 (d) a = 1; k = 1=3.

Scoica lui Durer Istoric: A fost descrisa de Durer ^n 1525. Loc geometric:
259

Se traseaza liniile QRP si P 0QR de lungime 16 prin Q(q; 0) si R(r; 0) unde q + r = 13. Locul geometric al punctelor P si P 0 este curba. Forma neparametrica: (x2 + xy + ax ? b2)2 = (b2 ? x2 )(x ? y + a)2: Cazuri particulare: daca b = 0, p obtindoua linii care coincid: x2 = 0, daca a = 0, doua linii paralele, se p x = b= 2 si x = ?b= 2, si cercul x2 +y2 = b2, daca a = b=2, curba are o bucla. Figuri: (a) a = 0; b = 1 (b) a = 1=2; b = 1 (c) a = 1; b = 4 (d) a = b = 1.

Sectiuni spirice Loc geometric: Sunt curbe obtinute prin sectionarea unui
tor cu un plan paralel cu o linie ce trece prin centrul torului. Forma neparametrica: Daca torul este format dintr-un cerc de raza a a carui centru este rotit de-a lungul unui cerc de raza r, iar valoarea c indica distanta dintre planul de taiere p^na2la centrul torului, atunci forma implicita a curbei este a (x2 + y2 + r2 ? a2 + c )2 = 4r2(x2 + c2 ): Cazuri particulare: Daca c = 0 curba consista ^n doua cercuri de centre (r; 0) si (?r; 0). Daca c = r + a, curba se reduce la un punct, iar daca c = r + a curba nu are nici un punct. Figuri: (a) a = 2; c = 1; r = 3 (b) a = 4; c = 2; r = 1 (c) a = 2; c = 1; r = 6.

Serpentina Istoric: A fost studiata de L'H^spital (1692). Forma neparameo trica: x2 y + aby ? a2 x = 0; ab > 0: Figuri: (a) a = 3; b = 1 (b) a = b = 1 (c)
a = 8; b = 3.

Sextica lui Cayley Istoric: Descoperita de Maclaurin (1698-1746), a fost3 studiata2 ulterior2 de Cayley. Forma neparametrica: 4(x2 + y2 ? ax) = 27a 3(x2 + y )2 : Forma parametrica: (t) = (4a cos4(t=2)(?1 + 2 cos t); 4a cos (t=2) sin(3t=2)); t 2 0; 4 ): Functia raza: r( ) = 4a cos3( =3): Figuri: (a) a = 1 (b) a = 2 (c) a = ?2.
260

Spirala arhimediana Functia raza: rn ( ) = an ; 2 0; 2 ): Cazuri parti-

culare: pentru n = 1, adica r( ) = a , spirala lui Arhimede (spirala liniara); 2 pentru n = 2, adica r2 ( ) = a2 , spirala Fermat (caz particular pentru spirala 2 = b ); spirala parabolica generala este de nita prin parabolica (r(theta) ? a) r( ) = a p unde p > 0. pentru n = ?1 adica r( ) = a= , spirala hiperbolica (spirala reciproca, Varignon, 1704); spirala hiperbolica generala este de nita prin r( ) = a ?p ; unde p > 0. pentru n = ?2, adica r2( ) = a2 = , spirala lituus (Cotes, 1722, ^n latina lituus=c^rja). Figuri: (a) Spirala Arhimede a = 2, a 2 0; 10 ] (b) Spirala Arhimede a = 2; 2 ?4 ; 4 ] (c) Spirala Fermat a = 1, 2 0; 6 ].

Figuri: (a) Spirala parabolica cu a = 3; b = 2; 2 0; 5 ] (b) Spirala hiperbolica cu a = 4; 2 0; 10 ] (c) Lituus cu a = 1, 2 (0; 10 ].

Spirala Cornu Forma parametrica: (t) = a R0t cos tn+1 =(n + 1) dt;

a 0t sin tn+1 =(n + 1) dt : Cazuri particulare: Cazul standard: n = 2. Figuri: Clotoida cu (a) n = 1; a = 1 (b) n = 2, a = 1=2 (c) n = 3 a = 5.

261

Spirala Galilei Loc geometric: Curba intervine ^n problema miscarii unei particule ^n cadere libera catre centrul Pam^ntului, tin^nd seama de rotatia a a uniforma a Pam^ntului ^n jurul axei polilor. Functia raza: r( ) = a ? b 2 : a Figuri: (a) a = b = 1 (b) a = 1; b = 0 (c) a = ?15; b = ?1.

Spirala logaritmica (spirala echiunghiulara, spirala Bernoulli, spirala logistica) Istoric: Descrie o familie de curbe. Descoperita de Descartes

(1638), a fost ulterior studiata de Torricelli (1647) si Bernoulli (1655-1705). Loc geometric: Fie o spirala r = f( ), unde f este un functie monoton crescatoare. Din orice punct P al spiralei se traseaza o linie spre centrul spiralei (vector radial). Daca unghiul format de vectorul radial si tangenta ^n punctul P este constant, atuncibtcurba este o spirala echiunghiulara. Formab parametrica: (t) = (aebt cos t; ae sin t); t 2 0; 1): Functia raza: r( ) = ae ; 2 0; 1) sau daca este unghiul constant, atunci o alta parametrizare este: (t) = (et cos( ) cos t; et cos( ) sint): Forma neparametrica: x2 0+ y2 = earctan(y=x)cos : Cazuri particulare: Daca unghiul constant este de 90 , se obtine un cerc. Figuri: (a) a = 1; b = 0:08; 2 0; 3 ] (b) a = 3; b = 0:1; 2 0; 20 ] (c) a = 1; b = 0:05; 2 0; 24 ].

Spirala sinusoidala Istoric: A fost studiata prima data de Maclaurin. Functia raza: rp ( ) = ap cos(p ); unde p este un numar rational. Cazuri particulare: daca p = ?1, se obtine o linie, daca p = 1, cerc, daca p = 1=2, cardioida, daca p = ?1=2, parabola, daca p = ?2, hiperbola, daca p = 2, lemniscata Bernoulli.
Figuri: (a) a = 1; p = 3 (b) a = 2; p = 1 (c) a = 2; p = 1=2 (d) a = p = 2.

Spiricele lui Perseus Loc geometric: Este locul geometric la punctelor P


262

astfel ^nc^t jPF j2jPF 0j = hjOP j2 + k, unde F si F 0 sunt doua puncte xe a (focare), iar O este mijlocul lui FF 0. Forma neparametrica: Daca FF 0 = 2c si F(c; 0), 2ecuatia2 implicita4a spiricelor lui Perseus este (x2 + y2 )2 ? (2c2 + h)x2 + (2c ? h)y = k ? c : Cazuri particulare: In cazul ^n care k = c4 , se obtine lemniscata lui Booth. Daca, ^n plus, h = 2c2 , atunci curba degenereaza ^n cercurile lui Villarceaux. C^nd h = 0 se obtini ovalele cassiene. Figuri: (a) a a = 1; h = 4=5; k = 2 (b) a = 1; h = 2; k = 1=2 (c) a = 1; h = k = 1=2.

Figuri: Cazuri particulare de spirice Perseus (a) a = 1; h = 1=2; k = 1 (b) a = 1; h = 2; k = 1 (c) a = 1; h = 0; k = 9=10.

curge axa y. Strofoida dreapta este locul geometric al punctelor P pentru care distanta PA este egala cu PO, unde O este originea sistemului de coordonate. Figuri: (a) a = b = 1 (b) a = 1; b = 0 (c) a = 1; b = =2.

Strofoida Istoric: A aparut prima data ^n lucrarile lui Barrow (1670). Functia raza: r( ) = asin(b ? 2 )= sin(b ? ) Cazuri particulare: Un caz particular este strofoida dreapta pentru care b = =2. In acest caz ecuatiile sunt: Forma neparametrica: y2 = x2(a ? x)=(a + x): Functia raza: r( ) = acos(2 )= cos ? Forma parametrica: (t) = a (t2 ? 1)=(t2 + 1); t(t2 ? 1)=(t2 + 1) Loc geometric: Se considera punctul x B de coordonate (?a; 0) si puncul A ce par-

Superelipsa (curba Lame) Istoric: Familia de curbe a fost studiata de

=n Lame (1818). Forma neparametrica: (x=a)2=n + (y=b)2n = 1; unde n este un n t; b sin t); t 2 0; 2 ) Cazuri numar real. Forma parametrica: (t) = (a cos particulare: daca n = 0 se obtine dreptunghi, iar daca a = b, patrat, daca n < 1, dreptunghi cu capete rotunjite, daca n = 1, elipsa, iar daca a = b, cerc, daca n = 2, romb, daca n = 3, astroida alungita, iar daca a = b, astroida, daca

263

a = b, supercercuri. Figuri: (a) n = 0 (b) n = 0:2 (c) n = 0:8 (d) n = 1.

Figuri: (a) n = 2 (b) n = 3 (c) n = 5 (d) n = 8.

Tangentoida Functia raza: Tangendoida polara de indice m este de nita

prin r( ) = a tanm : Cazuri particulare: m = 1, curba kappa, m = 1=2, strofoida dreapta, m = 2, curba morii de v^nt. Figuri: (a) a = 1; m = 1 (b) a a = 1; m = 1=2 (c) a = 1; m = 2 (d) a = 1; m = 5.

de Huygens^n 1692. Loc geometric: (a) Este curba ce trece prin punctul A(a; 0) al axei orizontale cu proprietatea ca lungimea segmentului de pe linia tangenta dusa dintr-un punct oarecare al curbei, din punctul de tangenta la axa verticala este constanta. (b) Presupunem ca o bicicleta se ^ndreapta pe axa y ^nspre origine. C^nd roata din fata atinge (0,0), iar roata din spate (0,1), ciclistul a face o ^ntoarcere cu 900 ^nspre est. Urma lasata de roata din spate este o parte a tractricei. Forma parametrica: (t) = (a sin t; a(cos t + log(tan(t=2)))); t 2 p (0; ): Forma neparametrica: pentru a = 1: x = a log (a ? a2 ? y2 )=y + p2 2 a ? y : Figuri: (a) a = 5 (b) a = ?3 (c) a = 10.

Tractricea (curba echitangentiala, tractoarea) Istoric: A fost studiata

264

Tridentul lui Newton (parabola lui Descartes) Istoric: A fost investigata de Newton si Descartes. Forma neparametrica: Este de nit prin ecuatia implicita xy = cx3 + dx2 + ex + f: Figuri: (a) c = 1; d = ?3; e = 1; f = ?2 (b) c = ?2; d = 1; e = 5; f = 3 (c) c = d = e = f = 1.

Trisectoarea Catalan (curba lui Longchamp, cubica Tschirnhaus, cubica L'H^spital) Istoric: A fost mentionata prima data^n clasi carea curbeo

lor data de Tschirnhaus (1900). Loc geometric: Normala ^n P la o parabola si perpendiculara^n focarul ei F pe FP se taie^n Q. Simetricul M al lui F fata de mijlocul M1 al lui PQ, c^nd P 2 a descrie parabola, genereaza trisectoarea Catalan. Forma neparametrica: 3ay = x(x ? a)2 : Functia raza: r( ) = a= cos3 : Figuri: (a) a = 3 (b) a = ?1 (c) a = 10.

r centrat ^n origine si A(r; 0), B(0; r). Se considera un punct arbitrar M, determinat de unghiul AOM de masura 2 si punctul N asociat prin relatia: masura unghiului AON este 2 ? . Curba este locul geometric al intersect iei P a tangentelor ^n2 M si N 2la cerc, c^nd M descrie cercul. Fora ma neparametrica: x(x2 ? 3y ) = a(x + y2 ): Forma parametrica: (t) = ? a (1 + t2)=(1 ? 3t2); t(1 + t2 )=(1 ? 3t2 ) : Functia raza: r( ) = a= cos(3 ): Figuri: (a) a = 1 (b) a = 10 (c) a = ?2.

Trisectoarea Longchamps Loc geometric: Se considera un cerc de raza

Trisectoarea (trisecanta) Maclaurin Istoric: Este curba lui Colin Maclaurin (1742). Functia raza: r( ) = a= cos( =3); 2 (0; 3 ): Forma parame? trica: (t) = a (t2 ? 3)=(1 + t2 ); t(t2 ? 3)=(1 + t2 ) ; t 2 IR: sau (t) = a(1 ?
265

4 cos2 t)(1; tant); t 2 ? =2; =2): Forma neparametrica: y2 (a+x) = x2(3a?x): Figuri: (a) a = 3 (b) a = 10 (c) a = 1=10.

Trohoida (cicloida generalizata) Loc geometric: Descrie o famile de curbe. Este locul geometric al punctelor din plan prin care trece un punct al x fata de un cerc de raza a, a at la distanta b de centrul cercului, c^nd cercul aluneca a uniform de-a lungul unei linii drepte (y = 0). Forma parametrica: (t) = (at ? b sin t; a ? b cos t); t 2 IR: Cazuri particulare: daca a = b, punctul este pe cercul mobil, cicloida; daca b > a, punct este exterior cercului mobil, cicloida extinsa; daca b < a, punct este interior cercului mobil, cicloida contractata. Figuri: (a) a = 1; b = 2 (b) a = 2; b = 2 (c) a = 2; b = 5=4.
Animatie: Crearea unei trohoide cu a = 2; b = 3.

Vrajitoarea lui Agnesi (versiera) Istoric: Curba a fost studiata de Agnesi (1748). Numele a fost dat de Grandi (1703), deoarece este o curba ,,care se ^ntoarce ^n toate directiile". Loc geometric: Fie un cerc de raza a cu centrul ^n (0,a). Fie o linie orizontala L care trece prin (0; 2a). Se traseaza linia ce trece prin origine si un punct oarecare M al cercului. Fie N intersect ia acestei linii cu L. Curba este locul geometric al intersect iilor unei linii orizontale ce trece prin M si o linie verticala ce trece prin N. Forma parametrica: (t) = 2a(tan t; cos2 t); t 2 ? =2; =2): Forma neparametrica: y(x2 + 4a2) = 8a3 : Figuri: (a) a = 4 (b) a = 1 (c) a = 0:1.

Astroid tridimensional Forma parametrica: pentru t 2 0; 2 ), (t) = n n


266

7.3 Curbe spatiale

(a cos t; b sin t; cos(2t)): Figuri: (a) a = b = 1; n = 3 (b) a = 1; b = 2; n = 5 (c) a = 2; b = 1; n = 1=5.

Curba bicilindrica Loc geometric: Este intersectia unui cilindru de raza a cu un cilindru de raza b p caror axe sunt perpendiculare. Forma parametrica: ale (t) = (a cos t; a sint; b2 ? a2 sin2 t); t 2 0; 2 ): Figuri: (a) a = b = 2 (b) a = 1, b = 2 (c) a = 2, b = 1.

Figuri: Curba si intersect ia celor doi cilindri (a) a = b = 2 (b) a = 1, b = 3=2 (c) a = 3=2, b = 1.

Curba lui Viviani (fereastra lui Viviani) Loc geometric: Este intersectia cilindrului (x ? a)2 + y2 = a2 cu sfera x2 + y2 + z 2 = 4a2. Forma parametrica: (t) = a(1 + cos t; sin t; 2 sin(t=2)); t 2 0; 4 ): O curba asemanatoare, mai generala este (t) = (a(1 + cos t)=2; b=2sin t; c sin(t=2)) ; t 2 0; 4 ): Figuri: (a) a = 2 (b) a = b = c = 1 (c) a = 1; b = 3; c = ?1 (d) a = 2, b = 4, c = 5.
267

spirala logaritmica. Figuri: (a) a = b = 2; k = 1=10 (b) a = 2; b = 1; k = 1=5 (c) a = 1; b = 2; k = 1=3.

Elicea cilindro-conica (spirala conica) Forma parametrica: (t) = (aekt cos t; aekt sin t; bekt); t 2 IR Observatie: Se proiecteaza^n planul xOy dupa

Figuri: Curba pe con (a) a = b = 2; k = 1=10 (b) a = 1; b = 2; k = 1=3.

Elicea circulara Observatie: Este asemanatoare unui arc. Forma parametrica: (t) = (a cos t; a sint; bt); t 2 IR: unde a este raza si 2b este pasul elicei.
Figuri: (a) a = 2; b = 1 (b) a = b = 1 (c) a = 1; b = 1=10 (d) a = 1=2; b = 1. 268

Figuri: Curba pe cilindru (a) a = b = 2 (b) a = 1; b = 0:1 (c) a = 3; b = 1.

Elicea elicoidalo-conica Forma parametrica: pentru t 2 22 R, (t) = 2 2 2

(at cos t; at sin t; bt): Forma neparametrica: b (x + y ) = a z : sau explicit y z = b arctan x : Observatie: Proiectia pe planul xOy este spirala lui Arhimede. Figuri: (a) a = b = 2 (b) a = 1; b = 1=10 (c) a = 1; b = 2.

Figuri: Curba pe con (a) a = 1; b = 2 (b) a = b = 2.

269

Epicicloida sferica Loc geometric: Este traiectoria unui punct al unui cerc mobil care se rostogoleste fara alunecare pe un cerc x, planele celor doua cercuri form^nd un unghi constant. Forma parametrica: (t) = (a cos t ? a b(1 ? cos(at=b)) cos cos t + a sin t sin t; a sin t ? r(1 ? cos( t)) cos sin t ? b sin( t) cos t; b(1 ? cos( t)) sin ): Figuri: (a) a = 4; b = 2; = =3 (b)
a = 1; b = 2; = =2 (c) a = b = 1; = =6 (d) a = 3; b = 2; = =4.

Hipopeda (lemniscata sferica) Loc geometric: Este curba de intersectie

a unei sfere si a unui cilindru de rotatie tangent interior sferei. Forma parametrica: Daca sfera are2 raza este 2 descrisa prin x2 + y2 + z 2 = r2 iar cilin2 + y ? (r ? a) = 0, (t) = (r + 2(a ? r) sin2 t; (2a ? drul este (x ?p a) r) sin t cos t; ?2 a(r ? a) sin t): Cazuri particulare: Daca a = r=2 se obtine fereastra Viviani. Figuri: (a) a = 1; r = 3 (b) a = 1=5; r = 4 (c) a = 0; r = 2.

Figuri: Loc geometric (a) a = 2; r = 4 (b) a = 0; r = 2 (c) a = 7=4; r = 2.

Nod toroidal Loc geometric: Este o curba de pe suprafata unui


tor eliptic. Forma parametrica: (t) = ((a + b cos(qt)) cos(pt); (a + 270

b cos(qt)) sin(pt); c sin(qt)); t 2 0; 2 ): Cazuri particulare: a = 8; b = 3; c = 5; p = 2; q = 3 este numit nodul trifoi; un exemplu de nod toroidal fara noduri se obtine ^n cazul ^n care a = 8; b = 3; c = 5; p = 1; q = 10; un nod cu opt noduri este (t) = (10(cos t + cos(3t)) + cos(2t) + cos(4t); 6 sint + 10 sin(3t); 4 sin(3t) sin 52t + 4 sin(4t) ? 2 sin(6t)) unde t 2 (0; 2 ): Figuri: (a) a = 8; b = 3; c = 5; p = 1; q = 10 (b) a = 8; b = 3; c = 5; p = 2; q = 3 (c) opt noduri.

Oroptera Loc geometric: Este cubica rezultata din intersectia unui paraboloid hiperbolic echilater cu un cilindru de rotatie a carei axa se sprijina pe una din generatoarele paraboloidului care trec prin v^rful a sau, cealalta ind generatoare a cilindrului. Forma parametrica: (t) = (2b cos2 t; b sin(2t); a tant); t 2 ? =2; =2): Figuri: (a) a = b = 1 (b) a = 10; b = 1 (c) a = 1=10; b = ?10.

Parabola logaritmica Loc geometric: Este intersectia unui paraboloid de

rotatie cu un cilindru drept av^nd generatoarele paralele cu axa paraboloidului a iar curba directoare ind o parabola situata ^ntr-un plan perpendicular pe axa paraboloidului pe Forma (t) = ?(t2 ? 4a2)=(4a); t; (tcu+focarul=(32aaceasta axa. (a) a = 2,parametrica:= p = 2. 2 4a2)2 2p) : Figuri: p = 1 (b) a

Figuri: Loc geometric pentru (a) a = 2, p = 1 (b) a = 2, p = 3 (c) a = p = 2. 271

Rodoneea sferica Forma parametrica: Este de nita prin functia (t) =

a(sin(nu) cos u; sin(nu) sinu; cos(nu)): Observatie: Proiectia ortogonala a curbei pe planul xOy este rodoneea plana. Cazuri particulare: n = 1, curba lui Viviani si n = 1=4, spirala Pappus. Figuri: (a) a = n = 2 (b) a = 1=2; n = 1 (c) a = 3; n = 1=4 (d) a = 1=3; n = 5.

Figuri: Curba pe sfera (a) a = 3; n = 1=4 (b) a = 4; n = 2 (c) a = 1=3; n = 5.

Spirala hiperboloidica 2Forma parametrica: 2 Este2 de 2nita prin2 functia (t) = r (cos t + sin t k2 t=(r + k2 ); sin t ? cost k t=(r + k ); rkt=(r + k2 ) :
Figuri: (a) r = 3; k = 2 (b) r = k = 1 (c) r = 1; k = 2. 272

Spirala sferica Loc geometric: Este un tip de curba de pe suprafata unei sfere de raza a. Forma parametrica: (t) = a(cos(mt) cos(nt); sin(mt) cos(nt); sin(nt)); t 2 0; 2 ): Figuri: (a) a = 1; m = 24; n = 1 (b) a = 1; m = 5; n = 7
(c) a = 1; m = 2; n = 10.

Banda Mobius Loc geometric: Este suprafata rezultata prin rotirea unui

7.4 Suprafete

segment de linie ^n jurul unei axe simultan cu rotirea segmentului fata de un punct al sau. Forma parametrica: (u; v) = a(cos u + v cos(u=2) cos u; sinu + v cos(u=2) sinu; v sin(u=2)); unde (u; v) 2 0; 2 ) ?d=2; d=2], iar d este lungimea segmentului care se roteste. O forma mai generala care permite rasucirea de mai multe ori a dreptei este urmatoarea: (u; v) = ((a+v cos( 0 + fu)) cos u; (a + v cos( 0 + fu)) sin u; v sin( 0 + fu)): Figuri: Cazul clasic (a) a = 3; d = 1 (b) a = 5; d = 15 (c) a = d = 1.

Figuri: Cazul general (a) a = d = f = 1; 0 = 0 (b) a = d = 1; f = 3; 0 = =3. 273

Animatie: Crearea benzii Mobius dintr-un dreptunghi. Animatie: Crearea benzii Mobius prin rotirea unui segment de dreapta.

Cascavalul vienez Forma neparametrica: Este o suprafata de nita implicit:


cos x cos y + cos y sin z + cos z sin x = 0: Figuri: Cascavalul.

Catenoid (aliseida) Istoric: Este singura suprafata minimala de revolutie si a fost descoperita de Euler ^n 1740. Forma parametrica: (u; v) = (a cosh (u=a) cos v; a cosh (u=a) sin v; u); (u; v) 2 ?c; c] 0; 2 ); c > 0: Figuri:
Catenoid (a) a = 1; c = 2 (b) a = c = 1.

274

Cilindru Loc geometric: Cilindru cu generatoarea paralela cu axa z si de raza a este locul geometric descris de o dreapta paralela (generatoare) cu axa z, a ata la o distanta a de aceasta, si care descrie prin miscarea sa o conica ^ntr-un plan perpendicular pe axa z; Forma neparametrica: Cilindru eliptic: (x=a)2 + (y=b)2 = 1: Cilindru hiperbolic: (x=a)2 ? (y=b)2 = 1: Cilindru parabolic: (x=a)2 + y=b = 0: Figuri: Cilindru (a) eliptic (b) circular (c) hiperbolic (d) parabolic.

a = 1; b = 1; c = 1 (c) a = 1; b = 1=2; c = 1.

Coltul conic al lui Wallis Forma parametrica: (u; v) = (v cos u; v sin u; p p c a2 ? b2 cos2 u); (u; v) 2 0; 2 ) IR: Figuri: (a) a = 1; b = 3; c = 1, (b)

Con Forma neparametrica: (x=a)2 + (y=b)2 ? (z=c)2 = 0: Figuri: (a) a = c =


2; b = 1 (b) a = b = c = 1 (c) a = 1; b = 2; c = 3 si Suprafata iluminata: (d) a = b = c = 1.

Conoid Forma parametrica: (u; v) = (u; uv; (av2 + bv + c)=(1 +


275

v2 )); (u; v) 2 IR2: Cazuri particulare: conoidul Plucker, descris mai jos; un alt caz particular este conoidul drept: Forma parametrica: (u; v) = (v cos u; v sin u; 2 sinu); (u; v) 2 ? ; ) IR: Figuri: (a) Conoid drept (b)-(d) Conoidul general cu (b) a = 1; b = 2; c = 3 (c) a = 2; b = c = 0.

Conoidul Plucker Forma neparametrica: z = 2xy=(x2 + y2 ): Forma parametrica: (u; v) = (u; v; 2uv=(u2 + v2 )); (u; v) 2 IR2 : Functia raza: (r; ) = (r cos ; r sin ; 2 cos sin ); (r; ) 2 IR 0; 2 ): O generalizare a conoidului Plucker este suprafata generata de (r; ) = (r cos ; r sin ; sin(n )); (r; ) 2
IR 0; 2 ): Figuri: (a) Conoidul Pucker (b)-(d) Generalizare cu (b) n = 2 (c) n = 5 (d) n = 8.

y ) Suprafata Cross-Cap, de raza a, este g sfera(a). Astfel 2o parametrizare a acestei suprafete este (u; v) = a2(sin u sin(2v)=2; sin(2u) cos v; cos(2u) cos2 v); unde (u; v) 2 0; 2 ) ? =2; =2) O suprafata similara este pseudo-cross-cap, de nita parametric prin: (u; v) = ((1 ? u2) sin v; (1 ? u2 ) sin(2v); u); (u; v) 2 IR 0; 2 ) Figuri: Cross Cap (a) a = 1 (b) a = 2 (c) pseudo-cross-cap.

Cross Cap Forma parametrica: Fie g : IR3 ! IR3; g(x; y; z) = (yz; 2xy; x2 ? 2

276

Cuadrice Forma neparametrica: O cuadrica este o suprafata descrisa implicit printr-o ecuatie de forma: Ax2 + By2 + Cz 2 + Dxy + Exz + Fyz + Gx + Hy + Iz + J = 0 Cazuri particulare: 1. elipsoidul: (x=a)2 + (y=b)2 + (z=c)2 = 1 2. con: (x=a)2 + (y=b)2 ? (z=c)2 = 0 3. cilindru eliptic: (x=a)2 + (y=b)2 = 1 4. cilindru hiperbolic: (x=a)2 ? (y=b)2 = 1 5. cilindru parabolic: (x=a)2 + 2y = 0 6. paraboloidul eliptic: (x=a)2 + (y=b)2 + 2z = 0 7. paraboloidul hiperbolic: (x=a)2 ? (y=b)2 + 2z = 0 8. hiperboloid cu o p^nza: (x=a)2 + (y=b)2 ? (z=c)2 = 1 a 9. hiperboloid cu doua p^nze: (x=a)2 + (y=b)2 ? (z=c)2 = ?1 a Cvadrice Forma neparametrica: Pi+j+k 4 aijk xiyj z k = 0. Cazuri particulare: Un exemplu concludent este suprafata x2y2 + x2z 2 + y2 z 2 = 1 din gura ce urmeaza. Figuri: Suprafata simetrica (a) prin puncte (b) iluminata.

Torul eliptic, este un alt exemplu ( e torul cu raza mare 40 si raza mica p 12 este descris prin: x4 + 2x2y2 + 2x2z 2 ? 104x2 + y4 + 2y2 z 2 + 56y2 + z 4 ? 104z 2 + 784 = 0). Vrajitoarea lui Agnesi ^n 3D se obtine prin rotirea curbei cu acelasi nume, descrisa ^n 2D, ^n jurul axei z. Pentru exemplul din gura x2y +2 yz 2 + 0:04y + 0:04 = 0: ,,Jgheabul" este de nit prin ecuatia implicita y = x z 2: O sa cubica are ecuatia z = x3 ? y3 : Suprafata iluminata:(a) Tor (b) Vrajitoarea lui Agnesi (c) Jgheab (d) Sa cubica.

Parabola cvadrica se obtine de exemplu din ecuatia 0:1x4 ?x2 ?y2 ?z 2 +0:9 = 0; 277

cilindru cvadric, din x2 y2 + 0:01x2 + y2 z 2 + 0:01z 2 ? 0:01 = 0; piriforma din x4 ? x3 + y2 + z 2 = 0; bicornul din y2 ? (x2 + z 2 )y2 ? (x2 + z 2 + 2y ? 1)2 = 0: Suprafata iluminata: (a) Parabola cvadrica (b) Cilindru cvadric (c) Piriforma (d) Bicorn.

p Torul p parabolic este obtinut, de exemplu, pentru raza2 mare 40 si raza mica 12, din x4 + 2x2y2 ? 2x2z ? 104x2 + y4 ? 2y2 z + 56y + z 2 + 104z + 784 = 0: Curba obtinuta prin2rotirea unei concoide Nicomedes este descrisa prin 99x4 ? 40x3 +98x2y2 +98x z 2 ? 99x2 ? 40xy2 ? 40xz 2 ? y4 ? 2y2 z 2 +y2 ? z 4 +z 2 = 0: Lemniscata Gerono ^n 3D se obtine prin rotire ^n jurul axei x a curbei din 2D, din x4p x2 + y2 + z 2 =p Torul hiperbolic se obtine, de exemplu pentru raza ? 0: mare 40 si raza mica 12, din x4 + 2x2y2 ? 2x2z 2 ? 104x2 + y4 ? 2y2 z 2 + 2 4 2
56y + z + 104z + 784 = 0: Suprafata iluminata: (a) Tor parabolic (b) Concoida Nicomedes (c) Lemniscata Gerono (d) Tor hiperbolic.

Un foliu este descris prin: 2x2 ? 3xy2 ? 3xz 2 + y2 + z 2 = 0: Varianta a curbei dracului ^n spatiu este data de x42 + 2x22z 2 ? 0:36x2 ? y4 + 0:25y2 + z 4 = 0: Un cilindru cubic este de exemplu y + z = 1=2x2 (x + 1): O suprafata bicubica este x4 + y4 + z 4 ? 1000 = 0: Suprafata iluminata: (a) Foliu (b) Suprafata dracului (c) Cilindru cubic (d) Suprafata bicubica. 278

Elicoid Istoric: A fost studiat prima data de Meusnier (1770). Cazuri par-

ticulare: (a) Elicoidul str^mb axial drept (elicoidul drept cu plan director, a suprafata surub, elicoidul lui Kastner): Loc geometric: Este suprafata generata de un segment de linie cu un capat pe o axa si ortogonal pe aceasta, care se roteste^n jurul axei, simultan cu deplasarea punctului de contact de-a lungul axei. Observatie: Acest elicoid taie un plan perpendicular pe Oz dupa o spirala Arhimede. Forma parametrica: (u; v) = (av cos u; av sin u; bu); (u; v) 2 0; 2 ) IR: Forma neparametrica: z = b arctan y=x: Ecuatia anterioara este echivalenta cu xsin(z) ? ycos(z) = 0: Utiliz^nd expansiunea Taylor pentru sin, a cos^n z = 0; se obtine o ecuatie aproximativa ?1=6xz 3 +xz+1=2yz 2 ?y = 0: (b) Elicoidul str^mb axial oblic: Forma parametrica: (u; v) = (v cos u; v sin u; av+ a ku); (u; v) 2 0; 2 )2: (c) Elicoidul desfasurabil: Forma parametrica: (t) = a(cos u ? v sin u); a(sin u + v cos u); k(u + v)): (d) Elicoidul eliptic general este descris parametric prin: (u; v) = (av cos u; bv sin u; cu); (u; v) 2 0; 2 ) ?d; d]; d > 0: Figuri: (a) Elicoid eliptic cu a = 2; b = c = 1 (b) Elicoid str^mb a axial oblic cu a = k = 1 (c) Elicoid str^mb axial drept cu a = 1; b = 2 (d) a Elicoid desfasurabil cu a = k = 1.

Elipsoid Loc geometric: Este o suprafata de revolutie: se poate obtine prin rotirea unei elipse ^n jurul axei z. Se considera un elipsoid centrat ^n (0,0,0) si cu semiaxele2 a; 2 b; c 2paralele cu axele de coordonate. Forma neparametrica: x2=a2 + y =b + z =c2 = 1: Forma parametrica: (u; v) = (a sech v cos u; b sech v sin u; c tanhv): Figuri: (a) a = 1; b = 2; c = 3 (b) a = b = c = 1 (c) a = 3; b = 2; c = 1.
279

Elipsoidul astroidal Forma parametrica: Este 3 nit parametric prin de (u; v) = ((a cos u cos v)3 ; (b sin u cos v)3 ; (c sin v) ); (u; v) 2 0; 2 ) ? =2; =2): Figuri: (a) a = b = c = 1 (b) a = c = 2; b = 3 (c)
a = b = 1; c = 3=2.

Elipsoid stereogra Este de nit ?a(1 ? u2 ? v2)=(1 + u2c + Forma parametrica:2 ); 2cu=(1 + u2 prin:) ; (u; v) = v2 ); 2bu=(1 + u2 + v + v2 u; v 2
d = 2 (c) a = 2; b = 3; c = 1; d = 3=2.

?d; d]2: Figuri: (a) a = 1; b = 3; c = 5; d = 2:8 (b) a = b = c = 1;

Hiperboloid cu o p^nza Forma neparametrica: x2 =a2 + y2 =b2 ? z 2=c2 = 1: a Forma parametrica: (u; v) = (a cosh v cos u; b cosh v sin u; c sinhv)); (u; v) 2
0; 2 ) IR: Figuri: (a) a = c = 1; b = 2 (b) a = b = c = 3 (c) a = b = 1; c = 3. 280

Hiperboloidul cu doua p^nze Forma neparametrica: x2 =a2 ? y2 =b2 ? a z 2 =c2 = 1: Forma parametrica: Forma parametrica standard este (u; v) = (a cosh v cosh u; b coshv sinh u; c sinhv)); (u; v) 2 0; 2 ) IR: Figuri: (a) a =
2; b = 1; c = 3 (b) a = b = c = 1 (c) a = 1; b = 2; c = 1=2.

Lacrima Forma 2 neparametrica: Suprafata ^n forma de lacrima este de nta 2 4


prin ecuatia y + z = 1=2x (x + 1): Suprafata iluminata: Suprafata ^n forma de lacrima.

toroidal (curba 3D) se obtine o suprafata ce este numita de asemenea nod toroidal. Ca si curba 3D, un nod toroidal este caracterizat prin perechea de parametrii (a; b; c; p; q). Ca suprafata, se mai adauga raza r a cercului de alunecare. Figuri: (a) a = 2; b = 4=5; c = 1; p = 7; q = 4; r = 1=4 (b) a = 4; b = 2; c = 5; p = 3; q = 4; r = 1=4 (c) a = 8; b = 3; c = 5; p = 3; q = 2; r = 1. 281

Nod toroidal Loc geometric: Prin alunecarea centrului unui cerc pe un nod

Paraboloid eliptic Forma neparametrica: z=c + (x=a)2 + (y=b)2 = 0: Forma parametrica: (u; v)2 = (u; v; ?c((u=a)2 + (v=b)2 )); (u; v) 2 IR2 sau (u; v) = (au cos v; bu sin v; cu ); (u; v) 2 0; 1) 0; 2 ): Figuri: (a) a = 1; b = 2; c = 3
(b) a = b = c = 1 (c) a = 3; b = 2; c = 1.

Paraboloidul hiperbolic Forma neparametrica: z=c + x2 =a2 ? y2 =b2 = 0: Forma parametrica: O parametrizare a acestuia este (u; v) = (a(u + v); bv; c(u2 ? 2uv)); (u; v) 2 IR2 : Figuri: (a) a = b = c = 1 (b) a = 1; b = 2; c = ?3 (c) a = 3; b = 2; c = ?1.

de nita explicit si Suprafata iluminata: (b) aproximata prin sfere de raze mici. 282

p Palaria mexicana Forma neparametrica: y = sin(4 x2 + z 2): Figuri: (a)

Pseudosfera Loc geometric: Este obtinuta prin rotirea unui tractrix ^n jurul axei y. Forma parametrica: (u; v) = a(cos u sin v; sin u sinv; cos v + log(tan(v=2))); (u; v) 2 0; 2 ) (0; ): Figuri: (a) a = 1 (b) a = 2 (c) a = 1=10.

Scoica In coordonate sferice, r(z; ) = (1:3)z sin ; (z ) 2 ?1; 2 ] 0; ):


Figuri: Scoica.

Sfera Loc geometric: Sfera de centru (0,0,0) si raza r este descrisa ca: locul geometric al punctelor din spatiu a ate la distanta r de centrul (0,0,0). Forma parametrica: (u; v) = a(cos v cos u; cos v sin u; sinv); (u; v) 2 0; 2 ) ? =2; =2): Figuri: Sfera de raza 1.
283

Sticla Klein Loc geometric: (a) Este suprafata descrisa de un curba plana ^nchisa sub forma de opt care se roteste ^n jurul unei axe simultan cu rotirea sa ^n planul curbei fata de punctul de mijloc al curbei. (b) Poate formata din doua benzi Mobius unite la frontiere. Forma parametrica: (a) Privita ca obiect obtinut prin alipirea a doua benzi Mobius, este de nita ? parametric prin (u; v) = (a + cos (u=2)sin v ? b sin(u=2) sin(2v)) cos u; (a+cos (u=2) sin v ? b sin(u=2) sin(2v)) sin u; sin(u=2) sin v+b cos (u=2) sin(2v) unde (u; v) 2 0; 2 ) 0; 2 ): (b) Reprezentarea clasica este parametrizata prin: x(u; v) = 6 cos u(1 + sin u) + r cos u cos v; 0 < u < 2 + ); u n 6 cos u(1++rsin u)cosrv;cos(v +u < 16 sinu sin u 0 y(u; v) = 16 sinu; < u 2 z(u; v) = r sin v unde r = 4 ? 2 cos u; (u; v) 2 0; 2 ) 0; 2 ): Figuri: (a) Suprafata clasica (b)-(c) Doua benzi Mobius unite (b) a = 1; b = 1=2 (c) a = 2; b = 1=2.

paralelipiped dreptunghic, iar daca a = b = c, cub; daca n1 < 1; n2 < 1, cuboid; daca n < 1, n2 = 1, forma de perina; daca n1 , n2 < 1, suprafata cilindrica; daca n1 = n2 = 1, elipsoid, iar daca a = b = c, sfera; daca n1 = n2 = 2 si a = b = c, octoedron. Suprafata iluminata: (a) n1 = n2 si n1 = 0:9; 0:8; : ::; 0:1 (b) n1 = 1 si n2 = 0:9; 0:8; :: :; 0:1 (c) n1 si n2 variaza ^ntre 0:3; 0:5; 1;2;3. 284

Superelipsoid Observatie: Aceasta familie de suprafete include o categorie mare de suprafete clasice precum sferele, cilindrii, paralelipipedele. Forma parametrica: (u; v) = (a cosn1 u cosn2 v; b cosn1 sinn2 v; c sinn1 u); (u; v) 2 ? =2; =2) ? ; ) si n1 ; n2 2 0; 1). Cazuri particulare: daca n1 = n2 = 0,

Supertor Observatie: Este o familie de suprafete, pentru care se obtine ^ntr-

unul din cazurile particulare, torul eliptic. Loc geometric: Se considera un tor centrat ^n (0,0,0) cu raza r1 a cercului ce se roteste ^n jurul axei z, centrul sau descriind un cerc de raza r0 . n Forma parametrica: , (u; v) = (cosn1 u (r + n2 v); sinn1 u (r0 + r1 cos 2 v); r1 sinn2 v); (u; v) 2 0; 2 )2: Valoarea0 n1 r1 cos determina forma inelului supertorului, iar n2 determina forma unei sectiuni a supertorului. Figuri: Supertor cu r0 = 2; r1 = 1 (a) n1 = n2 = 0:2 (b) n1 = 1; n2 = 0:2 (c) n1 = 3; n2 = 0:2.

Figuri: Supertor cu r0 = 2; r1 = 1 (a) n1 = 1; n2 = 3 (b) n1 = 2; n2 = 3 (c) n1 = 3; n2 = 3.

Suprafata Boy Forma parametrica: Este g sfera(1), unde g : IR3 ! IR3 si g1(x; y; z) = (x + y + z) (x + y + z)3 + 4(y ? x)(z ? y)(x ? z)]=8; g2(x; y; z) = p 2 2 3 (y ? x ) + zx(z 2 ? x2) + xy(y2 ? x2)]=2; g3(x; y; z) = (2x2 ? y2 ? z 2 ) +
285

2yz(y2 ? z 2 ) + zx(x2 ? z 2 ) + xy(y2 ? x2 )]=2: Figuri: Suprafata Boy.

Suprafata Catalan Forma parametrica: Este de nita prin: (u; v) = (u ? sin u cosh v; 1 ? cos u cosh v; 4 sin u=2sinh v=2) ; (u; v) 2 IR2 : Figuri: Pro l.

Suprafata Corkscrew (sfera rasucita) Forma parametrica: Este de nita prin: (u; v) = (a cos u cos v; a sin u cos v; a sin v+bu); (u; v) 2 0; 2 ) ? ; ): Figuri: (a) a = b = 1 (b) a = 3; b = 1 (c) a = 1; b = 0 (d) a = 1; b = ?3=2.

Suprafata cu gauri Forma neparametrica: Este de nita prin: (1 ?


cos x) cos x + (y + sin x) sin z + cos(x + z) = 0 Figuri: Suprafata cu gauri.

286

Suprafata Dini Observatie: Este o pseudosfera rasucita. Forma parametrica: (u; v) = (a cos u sin v; a sin u sinv; a(cos v + log(tan(v=2)) + bu); u 2 0; 2 ) (0; ): Figuri: (a) a = 0; b = 1 (b) a = 1=10; b = 1 (c) a = ?1; b = 1
(d) a = b = 1 (e) a = 1=5; b = 1.

Suprafata Enneper ?Forma parametrica: Suprafata este descrisa parametric prin functia (u; v) = u ? u3=3 + uv2 ; v ? v3 =3 + vu2 u2 ? v2 ; (u; v) 2 IR2 : Mai general, suprafata Enneper de grad n provine din aplicatia g : C ! I ? ? C3 ; g(z) = z ? z 2n+1=(2n + 1); ?i z + z 2n+1=(2n + 1) ; 2z n+1=(n + 1) ; I pun^nd (u; v) = Re (g(u + iv)); (u; v) 2 C(0; r): Figuri: (a) Suprafata Ena neper clasica (b)-(c) Suprafata Enneper generala de grad n = 2 (b) r = 0:6 (c) r = 1.

Suprafata Funnel Forma parametrica: (u; v) = (av cos u; bv sin u; c logv); (u; v) 2 0; 2 ) IR: Figuri: (a) a = b = c = 1 (b) a = 3; b = 1; c = 2 (c)
a = 1; b = 2; c = 3 (d) a = b = 1; c = 5.

Suprafata Hennerberg Forma parametrica: (u; v) = (2 sinh u cos v ?


287

2=3sinh (3u) cos(3v); 2 sinh u sin v ? 2=3sinh (3u) sin(3v); 2 cosh (2u) cos(2v)); unde (u; v) 2 IR ? ; ): Figuri: Suprafata Hennerberg.

Suprafata^n forma de opt Forma parametrica: Este de nita prin (u; v) = (cos u sin(2v); sin u sin(2v); sin v); (u; v) 2 0; 2 ) 0; 2 ): Figuri: Suprafata ^n
forma de opt.

Suprafat Kuen Forma de ?2(cos u +au sinu) sin v=(1 + u2parametrica: Este cos u)nita prin u2 (u; 2v) = sin2 v); 2(sinu ? u sinv=(1 + sin v);
log(tan(v=2)) + 2 cos v=(1 + u2 sin2 v) ; unde (u; v) 2 IR Suprafata Kuen.

(0; ): Figuri:

Suprafatele Scherk Istoric: Au fost studiate de Scherk (1835). Cazuri particulare: (a) Prima suprafata minimala este descrisa 2parametric prin: (u; v) = (u; v; logcos(av)=(a cos(au))) (u; v) 2 ? =2; =2] : Figuri: Prima suprafata Scherk (a) a = 1 (b) a = 1=2 (c) a = 1:199.
288

(b) Daca suprafata anterioara este rasucita cu un unghi se obtine functia (u; v) = ((u cos + v sin )= cos(2 ); (u sin + v cos )= cos(2 ); 1=alog(cos(a(u sin +v )= cos(2 ))= cos(a(u cos +v sin )= cos(2 )))); (u; v) 2 ?1; 1]2 (c) A doua suprafata minimala este (u; v) = (u; v; arcsin(sinh u sinh v); (u; v) 2 IR2 : Figuri: (a)-(b) Suprafata Scherk rasucita cu (a) a = 1; = =10 (b) a = 3=5; = =3 (c) A doua suprafata Scherk.

(d) A cincea suprafata minimala este descrisa parametric prin: (u; v) = (a arcsinh u; b arcsinh v; c arcsin (uv)); (u; v) 2 IR2 Figuri: A cincea suprafata Scherk (a) a = b = c = 1 (b) a = 1; b = 2; c = 1=2 (c) a = 2; b = ?1; c = 1.

IR ; g(x; y; z) = (xy; yz; zx) Suprafata romana a lui Steiner, de raza a, este g sfera(a). 2 Astfel o parametrizare a acestei suprafete este (u; v) = a2 =2(sin(2u) cos v; sin u sin(2v); cos u sin(2v)); (u; v) 2 0; 2 ) 0; 2 ): Forma 289

Suprafata Steiner Forma parametrica: Se considera g : IR3 ! 3

neparametrica: Este de nita prin ecuatia x2 y2 +x2 z 2 +z 2 x2 +xyz = 0: Figuri: (a) Suprafata de nita parametric (b) Suprafata de nita implicit (c) Suprafata iluminata: .

2 Saua maimutei Forma neparametrica: z = x3 ? 3xy2 : Forma parametrica: 3 ? 3uv2); (u; v) 2 IR : Observatie: (a) Este Este de nita prin (u; v) = (u; v; u un caz particular pentru partea reala a functiei complexe z ! z n , unde z este un numar complex (n = 3). (b) O sa normala (fara gaura pentru coada maimutei este descrisa prin: (u; v) = (u cos v; v sin v; u2 cos(2v)); (u; v) 2 0; 1] 0; 2 ):

Figuri: (a) O sa obisnuita (b) Saua maimutei si (c) Saua generala cu n = 10.

Surubul lui Steibach Forma parametrica: Este de nit prin: (u; v) = (u cos v; u sin v; v cos u) Figuri: (a) Suprafata de nita parametric si Suprafata iluminata: (b) Suprafata aproximata prin sfere de raze mici.

Tor Loc geometric: Se considera un cerc de raza r1 continut ^ntr-un plan ce contine axa z, cu centrul a at la ^n planul xOy la distanta r0 de originea sistemului. Torul este locul geometric al punctelor cercului c^nd planul cercului a
290

se roteste ^n jurul axei z. Forma neparametrica: x4 + y4 + 2x2y2 + 2x2z 2 + 2 2 2 2 2 2 2 2 2y2 z 2 ? (2r0 +r1 )x2 +2(r0 ? r1 )y2 ? 2(r0 +r1 )z 2 +(r0 ? r1 )2 = 0: Forma parametrica: O parametrizare a torului pentru cazul ^n care cercul este ^nlocuit cu o elipsa cu o semiaxa paralela cu axa z este: (u; v) = ((a + b cos v) cos u; (a + b cos v) sin u; c sinv); (u; v) 2 0; 2 ) 0; 2 ): Figuri: (a) a = 4; b = c = 2 (b) a = 3; b = 1; c = 2 (c) a = 1; b = 2; c = 3.

Animatie: Crearea unui tor dintr-un dreptunghi.

Animatie: Crearea unui tor prin rotirea unui cerc.

Tor eliptic de revolutie Loc geometric: Se obtine prin rotirea unei elipse ^n jurul axei z. Forma parametrica: Ecuatiile parametrice pentru familia de suprafete este: (u; v) = ((a + cos v) cos u; (a + cos v)) sin u; sinv + cos v): Cazuri particulare: Daca jaj > 1 torul nu are intersect ie cu sine ^nsusi. In cazul clasic a = 0. Figuri: (a) a = 1 (b) a = 0 (c) a = ?1=2.

mare cu sfere mici.

Umbrela Whitney 2 Forma parametrica: Este de nita prin (u; v) = (uv; u; v2); (u; v) 2 IR : Figuri: (a) pe baza de nitiei parametrice (b) aproxi291

292

A. Anexe
A.1 Sinonime
Mediu Comentariu { text "text" /*text*/ #text (*text*) %text #text# %text Mediu A sare rezultat Axiom comand Derive comand Macsyma comand; Maple comand; Mathematica comand Matlab comand MuPad comand; Reduce comand; Mediu Suprimare rezultat Axiom comand; Derive var:=comand Macsyma comand$ Maple comand: Mathematica comand; Matlab comand; MuPad comand: Reduce comand$ Mediu i
Axiom Derive Macsyma Maple Mathematica Matlab MuPad Reduce Axiom Derive Macsyma Maple Mathematica Matlab MuPad Reduce

Continuare linie comand <cr>alta comand~ <cr>alta comand<cr>alta comand<cr>alta comand<cr>alta comand: : <cr>alta comand<cr>alta comand<cr>alta Incarcare sier
read " s" quiet load(" s")$ read(` s`);

Ies

quit

meniu

quit(); quit Quit ]

meniu quit quit; Precedenta % % " % %

<< s
s

read(" s"); in " s"$

ans ws

De nire matrice

Lista

m:=matrix( 1,2], 3,4]]) 1,2] m:= 1,2], 3,4]] 1,2] m:=matrix( 1,2], 3,4]) 1,2] m:=array( 1,2], 3,4]]) 1,2] m:=ff1,2g; f3,4gg f1,2g m= 1 2; 3 4] 1 2] M:=Matrix(Integer):m=M( 1,2], 3,4]]); 1,2] m:=mat((1,2),(3,4)); f1,2g

%i #i %i I I i I i

Timpul comenzii

set messages time on showtime: all$ readlib(showtime): on; Timing comand] t0=clock;comand;dt=etime(clock,t0) time(comand) on time;

%pi pi %pi Pi Pi pi PI f1,2g

293

A.2 Chei MathCad


! " # $ & '

Ctrl+1 Ctrl+3 Ctrl+4 Ctrl+9 Ctrl+0 Ctrl+8 Ctrl+, Ctrl+= ; Ctrl+6 ? Ctrl+n Ctrl+I n Ctrl+L ^ Ctrl+A j Crtl+B Esc Ctrl+Shift+3 Ctrl+. ! Ctrl+Shift+4 Ctrl+7 gra c ^n coordonate polare Ctrl+Shift+? Ctrl+2 gra c de suprafata Ctrl+Shift+. Ctrl+G schimba litere grecesti/latine Ctrl+Shift+A Ctrl+M creare matrice sau vector Ctrl+Shift+B Delete sterge regiunea Ctrl+Shift+J Ctrl+A selecteaza regiuni Ctrl+Shift+Z Ctrl+F gaseste sablon Ctrl+Shift+P Ctrl+H ^nlocuieste sablon Ctrl+Z Ctrl+C copiaza ^n Clipboard Ctrl+Y Ctrl+V copiaza din Clipboard Ctrl+X Ctrl+E activeaza dialog functii Ctrl+U Ctrl+F4 ^nchide document Ctrl+K Ctrl+F6 treci la alta fereastra Shift+Enter Ctrl+N creare document Ctrl+O Ctrl+P tiparire document Ctrl+S Ctrl+R reactualizare imagine Alt+F4 F9 recalculare Ctrl+Enter F1 help Shift+F1

factorial conjugata complexa produs rang suma rang integrare pereche paranteze produs separare argumente ^nainte de ultimul din rang diferentiere indice radical putere determinant, val.absoluta ^ntrerupe calcul

transpusa 6= suma elemente produs vectorial vectorizare egal cu indice superior radacina ordin n primitiva limita limita la dreapta limita la st^nga a produs ^nsumare derivata a n-a loc cuv^nt cheie a limita la st^nga a limita la dreapta notatia chimica

undo redo taie selectia dialog unitati hiperlegatura iesi din text deschide document salvare document iesire mediu continuare linie help senzitiv

Literele grecesti se obtin tast^nd Ctrl+G urmat de o litere latina conform tabelului: a b c d k l m s t u $ v A A B B X C D # J K K L M M S T T U & V

' j

f g h i n o o p q r ! w x y z E E F ? G H h I I N N O O P Q R R W X Y Z Z

" e

294

A.3 Referinta rapida pentru Maple


Simboluri := ; :

:: fg
] % `` ''
^

?>
!

si abrevieri asignare terminat comanda inhibat a sare rang delimitaror multime delimitator lista rezultat anterior delimitator nume evaluare am^nata a de nire procedura ridicare la putere factorial

Functii

sin,cos,tan cot,sec,csc arcsin,arctan arcsec,arccos ln log10 exp sqrt Pi, I in nity

;i 1

si constante functii trigonometrice functii trigonometrice functii trigonometrice inverse functii trigonometrice inverse logaritm natural logaritm ^n baza 10 functia exponentiala radical compunere valoarea absoluta

abs

Comenzi: sterge toate de nitiile help (?) a seaza ajutor ^n linie di calculeaza derivata expresiei int integrala de nita sau primitiva limit calculeaza o limita value evalueaza Int, Limit, Di plot gra c bi-dimensional display a seaza gra ce solve rezolva ecuatii si inecuat ii dsolve rezolva ecuatii diferentiale subs substituie valori ^n expresie factor factorizeaza un polinom collect colecteaza coe cienti evalc evalueaza ^n numere complexe rhs parte dreapta ecuatie numer numarator fractie for. . . ciclare
restart while.. . do. . . od assume with D Di Int Limit seq plot3d assign fsolve odeplot simplify convert evalf evalb lhs denom if.. . then. . . elseif.. . else.. . about

^ncarca pachet functii operator de diferentiere forma neevaluata a di forma neevaluata a int forma neevaluata a limit creaza o secventa gra c tri-dimensional asignare la solve, dsolve rezolva numeric a seaza solutia dsolve simpli ca expresia converteste o expresie evalueaza numeric eval. expresie booleana parte st^nga ecuatie a numitor fractie rami care veri care presupuneri

proprietat i adit ionale

295

A.4 Comparare Cas-uri


Testele Wester (http://math.unm.edu/~ wester/cas review.html)
Legenda: d=rezultat corect, i= rezultat incomplet sau partial incorect, n=problema nerezolvata, g=raspuns gresit, Ax=Axiom 1.2, De=Derive 3, Mc=Macsyma 419.0, Mp=Maple V 3, Mm=Mathematica 2.2, Mu=MuPad 1.2.1.a, Re=Reduce 3.5. Nr. Problema Ax De Mc Mp Mm Mu Re 1 50! d d d d d d d 2 factor(50!)! 2 3 47 d d d d d d i 3 d d d d d d d +p + ! 4 N(e d d d d d d d ; 50) 5 N(Bessel (1 + )) d d d n d n d 6 N( )! 0:142857 d n n n n n n 7 fractie contiua a lui d n d d d n n pp p 8 p2 3 +p ! 1 + 3 p 4 n d d d n n d 9 14 + 3 3 + ! 3 + 2 n d i d n n n 10 21 ? 3 ! 1 d d i i d n n p 11 stdev( 1,2,3,4,5])! n i d d d n n 12 testare ipoteze distribut ie t n g i i d n n 13 testare ipoteze distribut ie normala n i i i d n n 14 x2x2 ? ! x? d d d d d d d x ?x 15 eex2 ! ex= ? 1 d d d i d n n x= 16 expand((x + 1) ), di , factor d d d d d d d 17 factor(x ? 1) d d d d d d d 18 factor(x ? 3x + 1;RootOf( ? ? 1)) d n d d n n n 19 factor(x ? 3x + 1) mod 5 d n d d d d d 20 x3 x2 x2 x x ! x ? x + x 2 i d d d d n d 21 assume(x y; y z; z x) ! x = z n n d g n n n 22 assume(x > y; y > 0) ! x > y n n d d n n n 23 solve(jx ? 1j > 2) ! x < ?1 sau x > 3 n d n d n n n 24 solve(expand((x ? 1) (x ? 5)) < 0) n d n d n n n x 25 i d d d d n n x ! cos x ? 3 sin x x ! 2 cos 2x ? 1 26 i d d d d n n x 27 p xx ! cos x ? 3 sin x (cu reguli) d n d i d n d 28 p997 ? (997 ) = ! 0 d d d d d n i 29 999983 ? (999983 ) = ! 0 d d d d n n i 30 (2 = + 4 = ) ? 6(2 = + 4 = ) ? 6 ! 0 n d d d d n d 31 log(tan( x + )) ? sinh? (tan x) ! 0 n n i i n n n 32 derivate expr. 31 ^n 0 ! 0 i i d d i i n p 33 log p r r pr ! 0 n d d n d n d
47 22 1 2 1 4861 2520 10 163 2 1 7 5 2 4 2 +4 +4 1 +1 +2 2 20 100 4 4 2 2 2 +2 +3 3 2 2 +4 +5 +2 +2 +2 ( +1) 2 2 cos 3 2 2 cos cos 3 cos cos 3 cos 2 2 3 1 6 3 1 6 1 3 1 3 3 1 3 1 3 1 1 2 4 2 +1

34 (4r + 4 r + 1) 2pr+1 (2 r + 1) 2pr+1 35 rectform(log(3 + 4i)) ! log 5 + i tan?

4 +4

+1

pr

1 4 3

d i

d i

n d

n d

i i

n i

n n

296

Nr. 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

Problema rectform(tan(x + iy)) p


1 1 2

Ax i pxy p xy p jzj2 y i x p xjzj p!!p0 (6!complex) g ? z z pezz z= i p i? e ! 0 (Imz 2 (? ; ]) e ! ?e i n log ez ! z (Imz 2 (? ; ]) d log e i ! (10 ? 4 )i n (xy) =n ? x =n y =n ! 0 (Re x; y > 0) g tan? (tan z ) ! z (z 2 (? =2; =2]) g tan? (tan 4) ! 4 ? n x + (1 = 1) ! x + 1 = 2 i solve(3x ? 18x + 33x ? 19 = 0) n solve(x + x + x + x + 1 = 0) i veri ca solut ia lui 48 d x solve(e x e = z;x) d solve((x + 1)(sin x + 1) cos 3x = 0) n solve(ez = 1) ! z = 0 + n2 i d solve(sin x = cos x) ! x = =4 + n d solve(tan x = 1) ! x = =4 + n d solve(sin x = tan x) ! x = 0 + n i p solve( x + 1 = x ? 2) ! x = f g g 2 solve(e ?x = e?x )p x = f?1; 2g ! n p solve( log x = log x) ! x = f1; e g g solve(jx ? 1j = 2) ! x = f?1; 3g n solve sistem liniar cu 3 necunoscute d solve un sistem neliniar d inverseaza simbolic matrice 2 2 d det(matrice Vandermonde) d valori proprii M 2 Z (3 3) d derivata covariant tensor n Kihjkjl + Kihkl2jj + Kihljjk ! 0 n Pn k ! n n 2 d Pk ? + ! 2 + (3) 1 n k P k2? k3 N( 1 k2 + k3 ) 2:84699 n k Qn k ! n! n k limn!1 (1 + n )n ! e; d ? d2 y(x(t)) ! d2 y dx + dy d2 x d 2 dt dt R 2 dx, di ,dxsimplify dx dt2 d R x3 dx (a < b) d a b x d R dx ! a b x d dx a b x d jxj ! x sau sign(x) d dx j R jxjdx !xjxjxj (x real) n
6 3 10 1 1 1 1 1 =2 2 3 2 2 4 3 2 2 +2 +1 2 2 2 2 2 4 3 ( +1) =1 =1 4 1 1 1 1 6 =1 =1 1 2 1 +2 1 + cos + 1 1 cos + cos 2

De i d d d i d d d i d d d d d d i d d d i i d n d d n d d d n n d d d d d i d n d d d

Mc d d d d i g n d i i d d d d d i d n d d n d n d d d d d d d d d d d d d d d d d d d

Mp d d d g g i i d i d d d d d d i d d d d i i d d d d d d d n n d d d d d d d d d i i

Mm d i d i i d i d d i g d d d d i d n d n d n n n d d d d d n n d d d d d d d n d i d

Mu n g g d g g n g d n n n n n n n n n n n n n n n d n d i i n n n n n n n i n n n n n

Re n g g g g g n g d n n d d d d d d i d i g n n d d d d d d n n d n n n d n d n i d d

297

Nr. 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Problema de dx Rd jjxxjjdx denita peste tot nita peste tot R


(1+ ) 1+ + 1+ 2 1 1 1 (1+ ) +1 1 +1 1

Ax g g 3=2 ?x 3=2 p x x p ?x dx ! x R p x?p ?x dx ! x 3=2 ?x 3=2 d d Ra n dx ! 0 Raa? x?a dx !divergenta n ? Ra?pxx+a 2 ? 2dx ! n R px + x ? 2dx ! ?p i R px + x ? 2dx ! ?p n R 1 x xdx (a > 0) ! pi e?a n 2 a2 a R?1tax?1 dt (0 < a < 1) ! 1 n a R 1 ? J1t x dx ! n R a R b x?x=a R c ?x=a?y=b 1dzdydz d taylor( p ? v=c 2 ; v = 0) d v2 + 1/(rezultat 91) ! 1 ? c2 d taylor x;x = taylor(tan x; x = 0) d taylor x;x taylor((log x)ae?bx ; x = 1) n taylor(log(sinh z ) + log(cosh(z + w))) n rez.95-taylor(log(sinh z cosh(z + w))) n taylor(log( x x ); x = 0) d power series(log( x x ); x = 0) n power series(e?x sin x;x = 0) n solve(x = sin y + cos y; y = 0;series) n x pade(e?x ; x = 0) ! ?x d laplace(cos((! ? 1)t); t ! s) d transformarea inversa a 102 d solve( rn ? 2rn + rn = 2; : : :]; rn ) n d2f + 4f = sin 2t; f (0) = 0 ]) solve( dt2 d f 0 (0) = 0 solve 105 cu transformarea Laplace n dy solve(x dx + 3xy = x x ; y(x)) d d2 dy solve( dxy + y( dx ) = 0; y(x)) n 2 d solve( dx y(x; a) = ay(x; a); y(x; a)) n d2 y + k y = 0; y(0) = y0 (1) = 0]) solve( dx2 n solve( dx = x ? y; dy = x + y]; x; y]) n dt dt ver ca solutia de la 111 n ? t ; dy = x ? y]) n solve( dx = x 1 + dt t dt ecuatii 113, ecare separat i L = (D ? 1)(D + 2) (operator) d L(f ) ! D f + Df ? 2f d
+(1 3 ) +(1 3 ) 1 1 ( ) 1 1 1 4 0 2 1 2 0 3 4 8 8 8 3 3 cos + 0 0 0 1+ ( ) 2 sin 4 (1 ) (1 3 ) 0 1 0 1 ( ) 2 (sin =0) (cos =0) sin sin 2 2+ +2 +1 2 sin 3 2 cos 2+sin 2

De g n d d g g d d d n n n d d i i n n n d n n n d i n i i n i i n n n n n i n n

Mc d d i d d d d d n d d n d d d d d d d d d i d i d d i d d d d d n d d n i d d

Mp d n d d g g d g g g i g d d i i n i i d n d d d d d d i d d d n n d d n d d d

Mm d n d d g g d d d i d d d d d d n i i d n n d d d d d d d d i n n d d i i d i

Mu n n i i n n n n n n n n n d n n n n n n n n n n n n n n n n n n n n n n n d d

Re n n d d n n n n n n n n n d i i i d d d n n n n d i n i n d n d n n n n d n n

298

Nr. 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131

Problema dg Ly (g(y)) ! d2 g + dy ? 2g dy2 Lz (AP z ) k sin T = k D kf a (x ? a)k (operator) T (f ) = f (a) + (Df )(a)(x ? a) + Ty;b (g(y)) ! g(b) + dg y b (y ? b) + ::: dy Tz;c (sin z ) polinom Legendre direct polinom Legendre recursiv eval.P 4-pol. Legendre la 1 p = i ai xi regula Horner la 126 convertire ^n Fortran
2 2 ( )( ) =0 ! = 5 =1

true and false ! false x or (not x) ! true x or y (x and y) ! x or y

Ax i i i d d d d d i d n i d n n

De n n n n n n d d i d n i d d d

Mc d d d d d d d d d d d d d n n

Mp d d d d d d i d i d d d d d d

Mm i i d d d d d d i d n i d d n

Mu d i d d d d i d i d i n d d n

Re n n i i i d d d i d n i d d d

Din testele Bernardin

Setul complet de probleme se gaseste la http://www.inf.ethz.ch/personal/bernardi/ solve/problems.html). Legenda: d=rezultat corect, i= rezultat incomplet sau partial incorect, n=problema nerezolvata, g=raspuns gresit, Ax=Axiom 2.0, De=Derive 3.06, Mc=Macsyma 420, Mp=Maple V 4, Mm=Mathematica 2.2, Mu=MuPad 1.2.9, Re=Reduce 3.6. Nr. Problema Ax De Mc Mp Mm Mu Re 3 xx = 2x n n n d n n n 6 e +x x n n n d n n n 7 jxjx + ex > 0 n n n d n n n 8 x ex n n n d n n n 9 eix2 = i i i d d i d d 10 ex x = 1 i i d d n d i 11 ex = y=xn ^n x n n n d n n n 13 a x ? ax= + ax= = 2 ^n x n n n d n n d 14 4x2 2x = 8 n d d d n n n 16 5x + i=2x = 0 n i i i n n n 18 (x ? 1)x = 0 n n n d n i n p 1 20 x + px = p i d d d d d d i n n d n n i 23 x + x + 3 x = 3 28 x (ln(8)?ln(x)) = 8 n n n d n n n 40 sin(x) + sin(x + 1) = 1 i i d d n n n 42 c cos(ex ) ? sin(ex ) + c = 0 ^n x i i n d n i n 48 j2x ? 1j = c ^n x n d d i n n i 52 jx ? 4jj4 ? xjx >sign(x)x n n n d n n n 69 (x ? y)! = 720 ^n x n d d n n n n
2 2 1 2 + +2 2 2 3 5 2 2

299

300

Bibliogra e
1] M.L.Abell, J.P.Braselton, Di erential Equations with Maple V, Academic Press, London, 1994. 2] L. Bernardin, A Review of Symbolic Solvers, Report ETH Zurich, 1996. 3] R. Boisvert, S. Browne, R. Grosse, B. Miller, W. Van Snyder, Design of a Problem Taxonomy for Mathematical Software, Gaitherburg, NIST Report 1995. 4] *** Computeralgebra in Deutschland. Bestandsaufnahme, Moglichkeiten, Perspectiven, herausgegeben von der Fachgruppe Computeralgebra der GI, DMV und GAMM, Heidelbergs University Press , 1993. 5] O.Dogaru, R. Reisz, Gh. Petrov, F. Fortis, H. Popa, MathCad, Editura de Vest, Timisoara, 1998. 6] C.Eberhart, Problem Solving with Maple. A Handbook for Calculus Students, Textbook University of Kentucky, 1995. 7] W.Gandler, J.Hrebicek, Solving Problems in Scienti c Computing Using Maple and MatLab, Second Edition, Springer Verlag, Berlin, 1995. 8] M.Ghinea, Matlab. Calcul numeric, Gra ca, Aplicatii, Editura Teora, 1997. 9] A. Gray, Modern Di erential Geometry of Curves and Surfaces , CRC Press, 1993. 10] D.F. Gri ths, An Introduction to Matlab, Textbook University of Dundee, 1996. 11] D. Gruntz, On Computing Limits in a Symbolic Manipulation System, PhD Thesis, Diss. ETH No. 11432, Zurich, 1996. 12] E.N. Houstin, J. R. Rice, Intelligent Mathematical Software Systems, Horth-Holland, Amsterdam, 1990. 13] M. Hill, Math reform: No Technology, No Chance, Electronic Learning 12, no. 17, 24-27, 1993. 300

14] *** Introduction to Scilab. User's Guide, Scilab Group, Textbook INRIA Meta2 Project/ENPC Cergrene, 1997. 15] R.D. Jenks, R.S. Sutor, Axiom. The Scienti c Computation System, Springer Verlag, 1992. 16] H.P. Langtangen, A.M. Bruaset, E. Quak, Advances in Software Tools for Scienti c Computing, Lecture Notes in Computational Science and Engineering, Springer Verlag, 1999. 17] S. Levy, Geometry Formulas and Facts, a 30-a editie a CRC Standard Mathematical Tables and Formulas, CRC Press, 1995. 18] *** MathCad 8, User's Guide, Springer Verlag, 1999. 19] M.Monagan, Programming in Maple: The Basics, Textbook University of Zurich, 1996. 20] D.Petcu, Maple, un Standard pentru Matematica cu Ajutorul Calculatorului, Tipogra a Universitatii de Vest, 1997. 21] D.Petcu, L.Cucu, Gra ca pe Calculator, Editura Excelsior, Timisoara, 1995. 22] M.Petcu, Reprezentarea Asistata de Calculator a Curbelor si Suprafetelor Remarcabile din Spatiul Euclidian, Lucrare de Licenta, coordonator Dorel I. Albu, Facultatea de Matematica, Universitatea de Vest Timisoara, 1997. 23] F. Postel, P. Zimmermann, A Review of the ODE solvers of Axiom, Derive, Macsyma, Maple, Mathematica, MuPad and Reduce, 5th Rhine Workshop on Computer Algebra, 1996. 24] *** POV-Ray 3.0 User's Guide, 1997. 25] D.Redfern, The Maple Handbook, Maple V Release 3, Springer Verlag, New York, 1994. 26] D.Redfern, The Practical Approach Utilities for Maple, Maple V Release 3, Springer-Verlag, New York, 1995. 27] E. Scheiber, M. Lupu, Matematici Speciale. Rezolvarea Problemelor Asistata de Calculator cu Exempli cari ^n Derive, MathCad, Maple, Mathematica, Editura Tehnica, Bucuresti, 1998. 301

28] E. Scheiber, D. Lixandroiu, MathCad. Prezentare si Probleme Rezolvate, Editura Tehnica, Bucuresti, 1994 29] W. Stevens, Software Design. Concepts and Methods, Prentice Hall, 1991. 30] C.W. Ueberhuber, Numerical Computation. Methods, Software and Analysis, vol. I si II, Springer Verlag, 1997. 31] M.Wester, A Review of CAS Mathematical Capabilities, New Mexico, 1994, Computer Algebra Nederland Nieuwsbrief, No. 13, 41-48, 1994. 32] S. Wolfram, Mathematica, a System for Doing Mathematics with the Computer, John Willey, 1992.

302

Cuprins
1 Introducere
2.1 2.2 2.3 2.4 1.1 Software matematic . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Scurta istorie a software-ului matematic . . . . . . . . . . . . . Modelarea stiinti ca Algoritmi . . . . . . Programe . . . . . . Design software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 9

1 2

2 Constructia de software

9 10 12 12

3 Software numeric
3.1 3.2 3.3 3.4 3.5 3.6 3.7

Numerica pe calculator . . . . . . . . . . . . . . . . . . . Matematica numerica si procesarea datelor numerice . . Probleme numerice . . . . . . . . . . . . . . . . . . . . . Erori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Selectia de software si incertitudinea calculelor numerice Date numerice si operatii numerice . . . . . . . . . . . . Software numeric disponibil si reutilizabil . . . . . . . . 3.7.1 Publicatii stiinti ce . . . . . . . . . . . . . . . . 3.7.2 Biblioteci de programe . . . . . . . . . . . . . . . 3.7.3 Pachete de programe . . . . . . . . . . . . . . . . 3.7.4 Servicii de distributie de software . . . . . . . . . 3.7.5 Sisteme interactive multifunctionale . . . . . . . 3.8 Medii de rezolvare a problemelor . . . . . . . . . . . . . Avantajele calculului simbolic . . . . . . . Scurta istorie . . . . . . . . . . . . . . . . Utilizare Cas . . . . . . . . . . . . . . . . Clasi care . . . . . . . . . . . . . . . . . . Computer Algebra . . . . . . . . . . . . . Ce pot si ce nu pot face Cas-urile . . . . Teme si puncte critice ale Ca . . . . . . . Tipuri de date ^n Ca . . . . . . . . . . . . Tehnologii software . . . . . . . . . . . . . Evaluatorul { componenta fundamentala . Studiu de caz: calculul limitelor . . . . . . Relatia cu sistemele expert . . . . . . . . Relatia cu rezolvitoarele de probleme . . . Intercomunicare . . . . . . . . . . . . . . . 303 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20
20 20 21 22 27 27 30 30 30 31 34 40 42 44 45 46 47 48 51 55 57 60 60 62 63 64 64

4 Software algebric
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14

44

4.15 4.16 4.17 4.18 4.19 5.1 5.2 5.3 5.4

Sisteme cu scop general . . . . . . . . . . . . . Sisteme pentru arhitecturi paralele . . . . . . . Sisteme pentru domenii speciale . . . . . . . . . Sisteme experimentale si pachete de programe . Compararea Cas-urilor . . . . . . . . . . . . . 4.19.1 Studiu general . . . . . . . . . . . . . . 4.19.2 Studii de caz . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

65 68 69 72 75 75 77

5 Software matematic ^n educatie

Clasi care . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relatia Ca-Educatie . . . . . . . . . . . . . . . . . . . . . . . . Calculatorul la clasa de matematica? . . . . . . . . . . . . . . . Exemple de produse educationale, de vizualizare a datelor stiinti ce si de editare a textelor matematice . . . . . . . . . .
Axiom . . . . . Derive . . . . Macsyma . . . Maple . . . . MathCad . . Mathematica Matlab . . . . MuPad . . . . Scilab . . . .

82
82 83 83 85

6 Exemple de produse
6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

93 97 101 105 163 181 204 228 232

93

7 Aplicatii ^n geometria curbelor si suprafetelor


7.1 7.2 7.3 7.4 Notiuni geometrice fundamentale Curbe plane . . . . . . . . . . . . Curbe spatiale . . . . . . . . . . Suprafete . . . . . . . . . . . . .

236
236 240 266 273

A Anexe
A.1 A.2 A.3 A.4

Sinonime . . . . . . . . . . . . . Chei MathCad . . . . . . . . . Referinta rapida pentru Maple . Comparare Cas-uri . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

293
293 294 295 296

304

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