text

35 downloads 2093 Views 5MB Size Report
De aceea ^ n design-ul de software mate- matic trebuie s a se ..... LOC este determinat a dup a completarea unui proiect software. Ea include toate activt at ileĀ ...
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^at este posibila de nirea unei probleme ^ntr-un anumit 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

1

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^at calcule simbolice c^at si 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.

1.2 Scurta istorie a software-ului matematic

1948-1960

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^andute, ultima masina 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^and Toronto, Stanford si 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^and ^n Lisp este relativ usor de realizat. 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^at sa se comporte ca un student la matematica. 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^and polinoame si functii rationale. Un alt 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.

3

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.

1966-1970

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^at Saint. 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.

1971-1980

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^andite sisteme ale acestei perioade. Prin intermediul sau multi utilizatori devin interesati de 4

Computer Algebra.

Aldes/Sac a urmat lui Sac-1, ca sistem non-interactiv const^and din module 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^anga facilitatile standard de manipulare 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^andu-se la Oxford. 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

5

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

de efectuarea de integrari numerice.

1981-1990

In perioada anterioara, datorita cerintelor semni cative de resurse de calculator ale aplicatiilor de tip software matematic, rasp^andirea unor asemenea 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^at ^n ceea ce priveste functionalitatea c^at si ^n interfetele utilizator. 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^and Mathematica a aparut ^n 1988, capabilitatile sale gra ce (^n spatiul 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^and alte Cas-uri dezvolta algoritmi pentru o colectie speci ca de domenii algebrice (de exemplu, c^ampul numerelor rationale, domenii de poli6

noame cu coe cienti ^ntregi), Axiom permite utilizatorilor sa scrie algoritmi pe c^ampuri sau domenii generale. 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^angeri. Apare prima versiune 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^at cele disponibile oricarui utilizator c^at si cele comerciale. Datorita accesibilitatii PC-urilor 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.

8

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^at cu obiectul sau fenomenul. 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^and seama de temperatura medie prezisa tk+1 si viteza v^antului prognozata vk+1 . Aceasta ecuatie modeleaza relatia functionala ^ntre cresterea concentratiei SO2 si descresterea temperaturii, precum si descresterea concentratiei cu cresterea vitezei v^antului. 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^and anumite informatii nu pot obtinute de la 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^and vizualizarea gra ca a rezultatelor numerice a unei tomogra i computerizate 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 cati 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^and se alege strategia de urmat trebuie tinut cont de cost si de realizabilitatea 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 secvente 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. Executia unui algoritm se realizeaza pas cu pas. Secventa de rulare a pasilor 10

c^and un algoritm este executat se numeste proces. Algoritmul este executat de 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^and este executat). Algoritmul este deterministic daca ^n ecare punct al executiei 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^and este executat. 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 executie sunt realizate relativ la anumit index de complexitate a problemei. De obicei se contorizeaza numarul de pasi computationali necesari pentru executarea algoritmului (presupun^and ca toate operatiile elementare au loc ^n timp egal). Depinz^and de un parametru al problemei p, complexitatea C(p) a algoritmului 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: Ordin

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

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

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    + c0 cdp +polinom(p) cp!

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^at 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 Cerinte ^n design-ul de software

Design-ul de software este procesul de inventare, ^mbunatatire, selectie ^ntre solutii alternative si apoi descrierea programelor calculator care satisfac cerintele utilizatorilor ^n constr^angerile mediului si bazat pe criterii relevante. 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^angerile si criteriile. De exemplu cel mai bun design al unei masini este unul care include facilitatile cele mai probabil a v^andute ^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

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^angerile sistemului.

Conceptul de cutie neagra

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^and este opaca si nu putem vedea ce se ^nt^ampla ^n interior. Speram ca se va petrece totul corect, dar nu stim cu siguranta. Programatorii se confrunta cu cutiile negre tot timpul prin utilizarea de subrutine, biblioteci si programe scrise de alte persoane. At^at timp c^at aceste unelte lucreaza corespunzator si se cunoaste modul de utilizare, rareori se pune problema constructiei 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.

Testare

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 2 +bx+c = 0. Pentru aceasta exemplu, se consider a un rezolvitor a ecuat  iei ax b2 ? 4ac trebuie calculat cu o precizie foarte mare. Posibilitatea de depasiri2 complica de asemenea speci carea unei asemenea probleme (de exemplu, b 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  ukAkkx^k, unde r = b ? A^x este reziduul, iar u este eroarea la 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

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^xk=(kAkkx^k), care trebuie sa e de ordinul nu, unde n este dimensiunea sistemului. Un exemplu semn cativ este faptul ca aproximativ 40% din liniile produsului LaPack constau ^n codul de testare.

Pro ler

Un pro ler (pro lator) este stetoscopul programatorului. Un pro ler este un program care ofera informatii asupra executiei 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 constructia 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);

14

for i=1:100 x x x x x x x x

= = = = = = = =

a+b; a-b; a.*b; a./b; sqrt(a); exp(a); sin(a); tan(a);

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

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

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.

Portabilitate

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

pachetul LaPack este ,,o modalitate transportabila de a atinge o e cienta ^nalta pe diverse masini moderne", pe c^and Blas trebuie sa e optimizat pentru 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^ateva dintre ele permit indicarea utilizarii extensiilor, altele nu, fac^and di cila informatia 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^and 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.

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

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 secventa 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

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:0atan(1:0).

Evitarea dep Pasirilor Un exemplu clasic este evaluarea normei unui vector kxk2 = ( i jxij2)1=2 . Pentru numeroase valori la x2i se poate produce o

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^at este ^ncet. Un algoritm mai rapid ce necesita o singura trecere 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.

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^ana acum este dezvoltarea 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^at un cod obiect executabil sau un cod sursa cel mai des ^nt^alnite ^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^and utilizatorul adapteaza implementarile la 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^ane de vazut daca utilizatorii vor 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^and valoarea unei variabile se schimba, valoarea si locatia la care s-a facut asignarea sunt a sate;  pro ler descris ^ntr-un paragraf anterior; 18

 debugger: permite setarea punctelor de ^ntrerupere la conditii sau locatii

speci ce, executie pas-cu-pas (de exemplu, Matlab are un debugger). Aceste unelte sunt implementate^nmediile de dezvoltare ale aplicatiilor precum produsele Microsoft Development Studio sau Borland pentru limbajele de nivel ^nalt.

Cost

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^ateva ore, dar trebuie luat ^n calcul si timpul 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).

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 Matematica numerica si procesarea datelor numerice trateaza designul, ana-

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

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^alnita ^n evaluarea functiilor 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^arziu, o bariera de netrecut este atinsa datorita 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 calculareaR valorilor 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^angeri speci ce, care optimizeaza (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^and de care cantitate y; x; sau F este necunoscuta ^n ecuatia Fx = y, 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 identi care.

3.4 Erori

Clasi carea erorilor

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

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^and Y = 0:09994 are doar trei si nu exista o corespondenta 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^and la o 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^and un asemenea algoritm numeric este dezvoltat, 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.

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

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, atunci efortul computational poate redus semni cativ. De exemplu, k  kAk2kA?1 k2ln(2=")=2 operatii de multiplicare matrice-vector sunt necesare pentru o obtine solutia iterativa aproximativa cu o eroare ". 23

Erori de trunchiere Algoritmii numerici implementati pe calculator cuprind o secventa 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 secventa nita de operatii aritmetice este referita ca eroare de trunchiere. De exemplu prin ^nlocuirea seriei de calcul a functie cosinus cos x = cu

1 (?1)k X

2k

x k=0 (2k)!

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

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

tinue cu informatii discrete este referita drept R eroare de discretizare. 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 exceptia unui set nit P de puncte discrete utilizate pentru calculul unei aproximatii a integralei de tip Ni=1 cif(ti ).

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 acuratetii algoritmului. De exemplu, la calculul seriei cosinus 2k+2 p p jP2k(x) ? cos xj < (2kx + 2)! ; x 2 (? 2; 2): Un alt exemplu este ^nt^alnit la calculul recursiv a valorii 2 pe baza 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^arfuri conduce la recursii, pentru lungimea sk a unui poligon regulat ^nscris, de tipul

p

r q

s4 = 2; s2k = 2 ? 4 ? s2k ; iar pentru lungimea ck a poligonului circumscris, de tipul

q

ck = 2sk = 4 ? s2k : Ambele secvente 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 ? 2j, respectiv jkck ? 2j. 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.

Erori de rotunjire

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^ana la valoarea 2:38  10?7 dupa 11 dublari ale numarului de v^arfuri, respectiv la k = 8192. Incep^and cu iteratia urmatoare, limita erorii calculata ram^ane zero. Se poate conclude ca aproximatiile ksk si 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^arsit. Ratiunea acestei comportari este eliminarea cifrelor semni cative la operatiile de scadere din formula lui sk .

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 B 2012 C B 57 C 10 20 15 4 C A=B @ 20 45 36 10 A ; b = @ 4581 A cu solutia x = @ 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^at o mica schimbare relativa a datelor kbk2=kbk2  0:01% conduce la o schimbare ^nsemnata ^n solutie kxk2=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)a = y + y; deci jy=yj = K ja=aj cu K = jaf 0 (^a)=f(a)j. 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^alni trei situatii: (a) se poate 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 executia 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^and se confrunta cu aceasta cantitate, este important ca utilizatorul sa aiba 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^and proprietatile problemei ce urmeaza a rezolvata.

3.6 Date numerice si operatii numerice Date matematice Datele matematice fundamentale Numerele sunt unitatile fundamentale

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

nenumarabil care24se extinde de lap?1 la 1. De exemplu numere reale valide 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^and agregarea (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

Ascunderea informatiei este un principiu fundamental ^n stiinta calculatoarelor

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.

Date numerice fundamentale Bitul este unitatea fundamentala a datelor

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).

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 IRmn 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^alnesc probleme ^n implementare. 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^at pentru ecare element 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). Tipuri numerice de date Conceptul de tip de data are o importanta funda-

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.

Operatii numerice

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

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 Software numeric disponibil si reutilizabil

3.7.1 Publicatii stiinti ce

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^atva timp). Incep^and cu 1975, ACM (Association for Computing Machinery) publica colectia de algoritmi a ACM prin Transactions on Mathematical Software (TOMS), toate programele put^and 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^arziu a devenit o companie 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 Labora-

tory, New Mexico, USA

Cmlib { Center for Computing and Applied Mathematics, Maryland, USA Port { AT&T, Bell Laboratories, New Jersey, USA Boeing Math. Software Library { Boeing Computer Service Company,

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^at programele din bibliotecile software 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.

3.7.3 Pachete de programe

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

ItPack este un pachet software construit pentru solutia iterativa a sistemelor

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^and metoda multigrid; MinPack rezolva sisteme de ecuatii neliniare si sarcini de optimizare; TnPack rezolva probleme mari de minimizare separabile si fara constr^angeri; HomPack rezolva sisteme de ecuatii neliniare utiliz^and omotopii; OrdPack rezolva probleme neliniare de potrivire a datelor utiliz^and aproximari 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 secventelor 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

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^and toate capabilitatile lor. LaPack le ^mbunatateste ^n cel putin 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^and codul de 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^and driverele expert au capabilitati aditionale pentru un utilizator pretentios. 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^ativa parametrii 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^and convertorul f2c (1990). O extensie orientata 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 constructie 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

Figura 3.2: Colectia NetLib

35

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

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

software TOMS: programe publicate ^n Transactions on Mathematical Software

accesibile prin indicarea numarului de ordine din revista. Acestea pot obtinute prin e-mail (send index la [email protected] 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: [email protected] pentru software de statistica, [email protected] pentru editorul de texte matematice TEX, [email protected] pentru calcul simbolic cu Reduce, [email protected] pentru calcul simbolic cu Maple, [email protected] 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

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 experienta NetLib. Este constituit din repertoriile curent existente: NetLib, Softlib,

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

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

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 cuati cata, 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.

Taxonometrii a problemelor solutionabile prin software matematic

Sistemele automate de selectie 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^andita (^n utilizare) 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^and un numar de probleme de design. 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

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 variantei 2-5 Regresii 2-6 Analiza datelor 2-7 Analiza seriilor temporale 2-8 Analiza corelatiilor 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 Solutia sistemelor liniare 1-3-6 Probleme de valori proprii 1-3-7 Alte ecuatii matriceale 1-4 Matematica discreta 1-4-1 Ecuatii cu diferente 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.

3.7.5 Sisteme interactive multifunctionale

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.

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

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

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

Sisteme numerice C^and scopul unei aplicatii consta ^n solutionarea nu-

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

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^and FFT (Fast Fourier Transforms), 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. Octave, produs din domeniul public (ftp.che.utexas.edu:pub/octave), este

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^and un limbaj compatibil cu Matlab. 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.

Sisteme simbolice

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

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.

Sisteme de simulare Reamintimca simularea utilizeaza modele matematice pentru experimentare ^n loc de obiecte si fenomene reale. Un model matematic este stabilit utiliz^and datele care descriu stari ale unui proces. Experimentele pot efectuate utiliz^and modelele cu date de intrare adecvate (comportarea 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^and o interfata utilizator de nivel ^nalt. Pse sunt unelte 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^and ecuatii 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 restrictionat 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 selectie variaza ^ntre arbori de decizie simpli la sisteme expert a caror baze de cunosttinte sunt consituite de specialisti ^n domenii particulare. C^and baza de cunostiinte este stabilita, experienta obtinuta anterior printr-un proces de solutionare terminat cu succes poate utilizat de Pse (^nvatare). C^and mecanismul intern de solutionare a produs rezultatele, Pse-ul trebuie 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^and si examinarea statistica 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 Calcul exact

Dorinta de a utiliza calculatorul pentru a efectua simbolic calcule matematice apare ^n mod natural c^and este ceruta o secventa de manipulari grele si lungi. 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^and manipularea numerica nu este acceptata; sau la calculul 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

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^and nedeterminate. Scopul 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^arsit de numere. Un Cas de succes implica mai mult dec^at motorul sau matematic: stocarea 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^at utilizatori individuali sa poata extinde utilitatea sistemului ^n directii pe care ei le gasesc necesare si interesante.

Calcule simbolice versus calcule numerice

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.

4.2 Scurta istorie Contextul de dezvoltare a Cas

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^ana la sf^arsitul secolului 19 tema centrala a algebrei. La ^nceputul secolului XIX, aceste metode au fost completate prin algebra structurilor, astfel ^nc^at interesul s-a mutat asupra cautarii structurilor din 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^and posibila aplicarea lor ^n noi domenii,^n special ^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

Ca leaga algebra algoritmica si structurala ^n anumit sens de metodele informaticii, transform^and-o^ntr-o unealta noua metodica, a ata la intersectia 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.

Cele trei generatii

Etapa premergatoare ^n dezvoltarea Cas-urilor este marcata de aparitia ^n 1961, a sistemului Pm ce putea calcula divizori comuni a polinoamelor cu coe cienti ^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^ant ^n informatica si matematica. Prima generatie a ^nceput la sf^arsitul anilor '60 cu Macsyma, MathLab, 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^at de mare poate 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.

4.3 Utilizare Cas Cas au o varietate de aplicatii^n domenii care necesita calcule lungi si di cil a

realizate cu m^ana. Puterea de vizualizare si rezolvare a unor exemple netriviale face posibila utilizarea Cas ^n educatie din ce ^n ce mai mult. 46

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

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

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

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^ampului de magneti pentru directionare), ^n teoria cuantica (feromagneti anizotropi), cautarea simetriilor si invariantelor, de la magneto-hidrodinamica p^ana la metereologie, ^n zica corpurilor solide, solitoni etc.

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.

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

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.

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 Computer Algebra (Ca) este un domeniu stiinti c care se ocupa cu metodele

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^at mai putin sunt sistemele sale rezolvitoare universale de probleme. 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.

In uenta Ca Metodele si rezultatele Ca au fost introduse^n Cas (medii Ca), desi acestea nu sunt folosite ^n mod explicit la constructia 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 studentii 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 conceptionala 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^ana si prin aceasta dispozitia de calcul ^n probleme nerezolvate sa nu mai e exersate, astfel ^nc^at viitorii matematicieni sa e neajutorati fara un mediu electronic de rezolvare a problemelor. Predarea Ca este p^ana acum si probabil si^n viitor^mpartita ^n doua tipuri. 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^and la demonstrarea unor presupuneri si 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 cienta ^n implementare. Pentru aceasta este necesara compararea algoritmilorsi optimizarea acestora. Posibilitatile de optimizare depind de Cas-ul ^n cauza, presupun^and de obicei conceperea unui nou 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^and aceste cunostiinte este posibila o folosire optimala a resurselor existente. Realizarile ^n Ca sunt periodic prezentate ^n Journal of Symbolic Computation, Algebra in Engineering, Communication and Computing, etc.

Perspective

Se poate observa astazi o dezvoltare a Ca ca acum 30 de ani ^n Cn. Extrapol^and, se pot prevedea o serie de efecte si dezvoltari ^n anumite directii 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^andite si ^nlocuite. Totalitatea Cas-urilor va o reuniune de sine 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^and posibila dezvoltarea lor 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^arf ^n domeniile calculului stiinti c a fost ^ntotdeauna 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

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^at 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^at mai mic cu c^at cresterea este exponentiala ^n dimensiune. 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.

Precizie aritmetica in nita Majoritatea

Cas pot efectua aritmetica rationala exacta pe numere ce au cel putin c^ateva mii de cifre zecimale. Desi 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^ateva mii. Algoritmii aritmetici din Cas cu scop general sunt adecvati unei vaste majoritati a problemelor din algebra, dar nu si pentru proiecte numerice extreme precum determinarea aproximatiilor lui .

Expansiunea polinomiala Majoritatea Cas pot reprezenta polinoamele av^and mai mult dec^at 1000 de termeni ^n numeroase variabile, daca numarul 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 cientilor proport ional 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^ateva sute.

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 cienta cu expansiunea polinomiala. Calculul celui mai mare divizor comun a polinoamelor este semni cativ mai costisitoare dec^at expansiunea polinomiala, cu timpul si spatiul cresc^and rapid cu numarul de variable si gradele lor la fel ca ^n numarul de termeni. Din acest motiv este recomandata exprimarea unei probleme cu functii rationale ^n problema polinomiala.

Factorizare si descompunere Factorizarea este tipic mai di cila dec^at de-

terminarea c.m.m.d.c., astfel ^nc^at Cas-urile nu calculeaza c.m.m.d.c. prin 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^and coe cienti rationali. Clasele care permit factori ireductibili ca rezultat sunt cele ale polinoamelor multivariate care au coe cientii: 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^and este posibil.

Determinanti si inverse Determinantul unei matrici dense si patratice de

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

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^at timpul de calcul poate semni cativ redus 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^at un determinant, 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^at algoritmul poate aplicat pentru matrici de ordin p^ana la c^ateva sute.

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

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^ana c^and nu se descopera identitati utile, proprietati 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^ana la 30 de ecuatii, ^nsa imposibilitatea de rezolvare poate apare si la mai putin de 4 necunoscute.

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^and astfel imposibila determinarea unei forme ^nchise exacte la det(A ? I) = 0 pentru chiar si pentru valori mici ale lui n. Prezenta 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^at simpli carea expresiilor ^n anumite 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 Ra antiderivativelor. De exemplu, o antiderivativa a lui x?2 este ?1=x, dar ?23 x?2dx 6= (?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^ai, tehnica uzuala este de a ^ncerca asemanarea ecuatiei cu 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 cienti 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 cientilor constanti. O solutie exacta 54

presupune determinarea unei structurii proprii (valori si vectori proprii), ceea ce este di cil de realizat pentru sisteme av^and un grad total mai mare dec^at 3 sau 4. Pachetele cele mai bune tind sa-si realizeze sarcinile mai bine dec^at oamenii, 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.

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

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.

Limitari

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.

4.7 Teme si puncte critice ale Ca

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

mentarii aritmeticii tuturor numerelor. Aici trebuie deosebita realizarea cu 55

exactitate marginita care poate posibila prin alocarea c^atorva mii de octeti 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 curenti sunt departe de a optimi.

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

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 cienti nuli, astfel ^nc^at reprezentarea acestora se face prin setul (i; ai ); ai 6= 0; algoritmi speciali sunt construiti pentru tratarea acestor cazuri. Pentru polinoamele multivariabile apar doua probleme suplimentare: recursivitatea (luat ca polinom ^ntr-o anumita variabila, coe cientii 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 a xi, ele nu pot reprezentate Datorita naturii in nite a seriilor de tip 1 i=0 i cu exceptia acelor cazuri ^n care coe cientii 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.

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

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.

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

Alte probleme di cile

Pe l^anga aritmetica exacta si alte probleme de interes major intern Cas precum 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,

4.8 Tipuri de date ^n Ca Numere

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 (oPgeneralizare a notatiei zecimale conventionale)^n care n este reprezentat ca ki=0 ni B i unde ?B=2 < ni  B=2 si B este reprezentabil ^ntr-un singur cuv^ant pe calculator, sau putem alege o reprezentare modulara, ^n care n este reprezentat prin valoarea sa modulo un numar su cient de mare (dar reprezentabil pe un cuv^ant pe calculator) 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^ateva di cultati conceptuale, 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

Polinoame Polinoamele univariate nu aduc probleme teoretice mari c^and este vorba de 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 cientilor ^ntre 0 si n sunt nuli (de nitia nu este riguroasa pentru ca nu se speci ca c^ate elemente nule trebuie sa avem pentru ca polinomul sa e rar). Se observa ca raritatea este conservata prin adunare si scadere, si ^n anumita masura si prin ^nmultire, pe c^and ^mpartirea polinoamelor distruge 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^at un polinoam rar sa ocupe mai putin spatiu dec^at unul dens de acelasi grad. O reprezentare densa presupune de exemplu pentru un polinom de grad n, o lista de n+1 coe cienti, pe c^and o reprezentare rara presupune o lista de perechi ordonate (coe cient nenul, exponent corespunzator) astfel ^nc^at x1000 + 1 va reprezentat dens prin (1; 0; : : :; 0; 1) cu 1001 termeni, dar ((1; 1000); (1; 0)) ^n reprezentare rara. Presupun^and 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^and cel rar va necesita O(m2 logm) operatii, termenul logaritmic provenind de la cerinta de sortare a iesirii ^n ordinea descrescatoare a gradului. Majoritatea Cas actuale utilizeaz a 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^ana la 7776 termeni). In calcularea c^atului a doua polinoame trebuie speci cat c^ampul de coe cienti. 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 cienti 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^and este vorba de ^mpartire, ordinea ^n care 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 esentiala. 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

Functii algebrice

In aceasta categorie se includ si numerele algebrice. Pot cauza tot felul de probleme, de la cele pur matematice la cele legate de programare. Una dintre ele p pp este di cultatea asigurarii reprezentarilor canonice.p Si 6 si p2 3 reprezinta 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.

Matrice

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 cienti (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^and daca sistemul este rar sau nu. In cazul dens, majoritatea algoritmilor sunt bazati pe eliminarea gaussiana. Principala problema ^n Cn este stabilitatea numerica a procesului (acuratetea 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.

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^at chiar primele Cas au^ncercat 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 ar 1presupune refacerea tuturor calculelor. Fie de exemplu funct  ia f(x) = 1 + ar xr si r=2 p p p se considera f(x) p 3? 1.3 Aceasta se poate exprima prin a2x+a3=(2n a2)x2 + 2 (4a2a4 ? a3)=(8 a2)x +   . Daca trunchiem f(x) la termenul anx se poate 59

p

deduce expresia lui f(x) ? 1 p^ana la termenul xn?1 pentru urmatorul ind necesar an+1. Aceasta presupune o reducere ^n acuratetea rezultatului. Tehnica Norman presupune reprezentarea seriilor de puteri prin functiile lor generatoare, d^andu-se astfel impresia unui calcul cu ^ntreaga arie si nu cu una 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 numitorPsi multiplicarea acesteia cu seria de la i si vrem sa calculam g = 1=f. f x numarator. Presupunem ca f(x) = 1 i i=0 P Presupunem ca f0 6= 0 si cum fgP= 1 avem f0g0 = 1 si ni=0 gi fn?i = 0; (n  ?1 g f =f , o de nitie buna pentru g ^n 0). Atunci g0 = 1=f0 si gn = ? in=0 i n?i 0 n termenii lui f. Relatii similare pot gasite pentru toate functiile de nite prin ecuatii diferentiale.

Algebra constructiva

Ca este diferita de algebra pura ^n special pentru ca doreste obtinerea unui rezultat mai mult dec^at cunostiinta ca un rezultat exista. In matematica constructiva ^ntr-o demonstratie ecare pas consta ^n operatii pur constructive. Ca este limitata la demonstratii neconstructive a algoritmilor constructivi.

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^ateodata valorile nu sunt singurele 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^ampla. Eval preia intrarea ce reprezinta comanda utilizatorului, directivele program si alte instructiuni si le combina cu starea sistemului pentru a oferi un rezultat, c^ateodata schimb^and si starea sistemului. Cu alte cuvinte, eval sta ^ntre 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^an aceleasi, eventual se fac conversii 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 ciente. 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^and valori. 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^ampuri algebrice, ele sunt surprinzator de slabe c^and trebuie sa rezolve probleme aparent simple 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): 1: limit(x"7/exp(x), x, infinity);

Axiom 2.0 returneaza failed la urmatoarea limita, desi aceasta exista si este 1. >limit(exp(x+exp(x))-exp(x), x=%plusInfinity)

Maple Release 3 returneaza la urmatoarea limita

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

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^andi ca problema determinarii comportarii la limita a unei functii 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 1 lim ln ln ln ln 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: In[1]:=1/100, Terms ->20]

Rezultatul este 1:40806e  10?12. Si totusi limita este 1. Cresterea spre in nit ^ncepe c^and x < e?ee  0:4  10?1656520, o valoare prea mica pentru 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

domeniul ^n care este evaluata, functia poate prost conditionata, iar aproximarea numerica ^n virgula otanta sa sufere de rotunjiri. De exemplu, e lim (erf(x ? e?ex ) ? erf(x))eex ex2

x!1

a carei limita este ?2=; functia nu poate evaluata pentru x > 22 utiliz^and Maple datorita limitelor impuse marimii exponentului unui numar ^n virgula

otanta (pe masini cu cuv^ant de 32-biti), iar pentru x = 22 o precizie de 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^at aceste cunostiinte sa poata sa e manipulate 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^alnesc de exemplu la operatiile cu functii speciale sau 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^at tipuri de date prede nite. Cunostiintele algoritmice 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^astiga regulile cheie 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^at si 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^artiei si creionului. Asemenea sisteme nu presupun ca utilizatorul doreste sa calculeze ceva, ci ca utilizatorul doreste sa rationeze asupra unei probleme, si posibil mai t^arziu, sa 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^at Pse trebuie sa contina, sau sa aibe acces 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^arnit si ^n alte arii de calcul 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 constructia 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

{ un Cas cu tipuri abstracte de date

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

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^at 5 prin radicali, factorizare de polinoame pe corpuri 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

{ asitentul ^n matematica

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

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

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^andute p^ana ^n 1993 ^n Europa. In Austria ministerul ^nvatam^antului a cumparat licenta Derive ^n toamna anului 1991 pentru a-l introduce ^n ^nvatam^antul 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

Este utilizat^n cercetare,^nvatam^ant,^nstiintele naturii, inginerie si matematica. 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^at ^n limbajele de programare C sau Lisp. Un alt scop a fost realizarea unui mediu cu cerinte de memorie adecvate datelor, astfel ^nc^at sa poata 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^ant. 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^and integrale, sume, produse, reziduuri. Calculele simbolice 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^arsitul anilor '60. Punctul de plecare 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^andu-se de scopul initial si orient^andu-se spre 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 precedenta. 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. Interdependenta 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,~x) => 1, Hermite(1,~x) => 2*x, Hermite(~n,~x) => 2*x*Hermite(n-1,x)-2*(n-1)*Hermite(n-2,x) when n> 1g; let Hermite rules;

Construirea unui polinom Hermite se face astfel: Hermite(4,z);

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^and cu 1989, cu un scop dublu: sa e o unealta pentru acces 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^ant. Prototipul pentru versiunea paralela ruleaza pe Sequent Symmetry. MuPad este un Cas cu scop general. Tipurile de date admise sunt numere ^ntregi, rationale, complexe, multimi, liste, c^ampuri si tabele (ultimele 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^ange obiecte speciale ^ntr-o scena. Detalii suplimentare sunt oferite ^n capitolul urmator. Parsac

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

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

4.17 Sisteme pentru domenii speciale Aceste sisteme sunt construite pentru rezolvarea unor probleme complexe ^n domenii mai restr^anse care nu pot solutionate sau sunt ine cient solutionate 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^ana la un milion pe 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, secvente, functii. CoCoA (Computations in Commutative Algebra) este un sistem mic cu scop

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, intersectii 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 [email protected]. 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^and versiunea a 2-a este o versiune comerciala. Preia sintaxa de la Fortran, C, Reduce. Poate trata formule foarte lungi si sisteme de dimensiuni mari. Gap (Groups, Algorithms, Programming) este un sistem pentru tratarea struc-

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^at 50. Ruleaza pe sisteme Unix si IBM-PC compatibile. Vesiunea 3 poate obtinuta prin ftp anonim de la adresa samson.math.rwth-aachen.de. Kant este un sistem pentru calcul algebric ^n teoria numerelor, elaborat la

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.

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

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

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 cienta. 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

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^andita pentru matematicieni, ce permite manipularea algebrica 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^and algebra liniara (calcul determinanti, polinoame caracteristice, intersectii 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. Symmetrica este un Cas pentru grupuri simetrice, teoria invariantilor si

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.

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^ase de interes si concepute pentru specialisti ^n respectivele domenii sau care se a a ^n faza de constructie. In continuare sunt enumerate c^ateva asemenea sisteme: 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^and rezultatele ^n format de pagina Web. 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

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

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

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^and nu numai 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.

4.19.1 Studiu general

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^ancimii acoperirii anumitor clase de probleme. Situatia statistica a rezolvarii problemelor este cea din tabelul 4.1. 75

Mediu

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

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^alnite de Cas-urile 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, ?raxspuns 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^and un asemenea tabel se pot observa 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^and de setul de probleme de testare, ^nsa pot 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^at unul cu un coe cient de ^ncredere ridicat atunci c^and este discutata anumita clasa de 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

Ax De Ms Ma Mm Mu Re

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

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^and rezultatele testelor, s-a ^ntocmit statistica din tabelul 4.4. Mediu

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

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^ampina o serie de di cultati, dupa cum se exemplica 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 nerezolvat p pa de celelalte: sistemul x6 + 8 = 0; x2 + 2 6= 0, cu solutiile x =  1  i 3; 7. rezolvata corect de MuPad, Maple si Derive, partial p de Reduce si Macsyma, nerezolvata de Mathematica si Axiom: j xj = 3 pentru x cu solutiile x = 9; 8. rezolvat2ax de Axiom , MuPad, Reduce si Macsyma si partial de celelalte: e ? 2ex + 2 = 0 pentru x, cu solutiile x =ln(1  i) + 2ui; u ^ntreg.

Rezolvarea ecuatiilor diferentiale ordinare

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

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

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

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

Tabelul 4.5: Testul Zimmerman { statistica

Aceste teste evidentiaza capabilitatile MuPad-ului de rezolvare a ecuatiilor diferentiale. Dintre problemele di cile se remarca: 1. problem a rezolvata de toate mediile corect: y"(ax + b)2 + 4y0 (ax + b)a + 2 2ya = 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 2+1 t 2 t 0 y = ? t2+1 x + t(t2+1)y+1 3. 4.

5. 6.

cu solutia x = log t + C1 ? C2 =t; y = t logt + C1t + C2t2 ; problema rezolvata de Derive si MuPad, eroare ^n timpul calculului la Axiom si Mathematica, nerezolvata de celelalte: 2yy" ? y0 2 = (y0 ? 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 celelalte: 8 +1)=(y2 +1) are solutia implicita y3 =3+y = ecuat  ia separabil a y = (9x x9 + x + C care are trei solutii ^n forma explicita; 79

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 2celelalte:4 y"" ? 4=x2 y"+8=x3 y0 ? 8=x4 y = 0 cu solutia C1x + C2 =x + C3x + C4 x . Analiz^and rezultatele testelor Zimmerman se pot trage unele concluzii. 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 cienti 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^at Maple la ecuatii speciale. MuPad este slab 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^and Axiom, nu este usoara 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.

Timpi de executie

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^at Mathematica.

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

Maple Mathematica

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

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^and ca utilizatorul sa raspunda ^n 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 secventa 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^ane sa ,,controleze" utilizatorul, mai mult dec^at utilizatorul^l controleaza pe el. Tipul II de software permite utilizatorului sa controleze software-ul, permit^and acestuia sa ia decizii, sa manipuleze activitati, sa shimbe directia 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^alnite ^n situatii reale sau imaginare.  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 Computer Algebra (Ca) este una dintre cele mai mari ^ncercari ale educatiei

matematice de-a lungul secolului. Ca este disponibila astazi chiar si ^n calculatoare de productie ^n masa precum cele de buzunar, astfel ^nc^at profesorii 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.

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 exceptia 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^and ca ^nlatura ,,drogheria" din manipularea 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 studentii care vor deveni analfabeti matematic, ca vor trata aceste unelte software precum cutii negre perfect implementate si vor sf^arsi prin a nu ^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^astiguri, iar punctul de vedere pesimist ne arata defectele care trebuie evitate sau trecute. Trebuie gasita o pozitie ^ntre extreme unde se poate obtine c^at mai mult bine si c^at mai putin rau. 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 studentii 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^anare prin repetitie, dar nu ^ntotdeauna au timpul necesar pentru teme matematice mai interesante si de valoare mai mare. De c^ate ori n-au strigat studentii ,,numi 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 studenti c^and acestia 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 constructie a unui curs poate vazut ca o decizie care cutii negre sa e prezentate si la care li se va ignora existenta. C^and devin ^nsa cutiile negre lucruri rele? Iata c^ateva situatii: 1. c^and studentilor li se interzice accesul ^n interiorul cutiilor negre (contraexemplu: ^n Maple se poate vizualiza,^n pachetul student, pas-cu-pas integrarea unei functii, iar studentii pot interveni ^n aceasta prezentare); 2. c^and studentii nu ^nteleg cum o cutie neagra lucreaza chiar daca este 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^and studentii nu au motive pentru a le pasa de interiorul unei cutii 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^and pasii utilizati si rezultatele intermediare; 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^andire). 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 studenti. 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^and rationarea matematica mai mult dec^at raspunsurile cheie. Testele de aptitudini practice sunt ^nsa o fr^ana ^n modalitatea de transformare ^n acest ideal a clasei, in uent^and modalitatea de predare (,,azi e joi, deci trebuie sa 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^andirii spatiale necesare ^n matematica. Majoritatea softwareurilor 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 consecinta a progresului. Calculatoarele elimina calculele lungi si permit o implicare mai mare ^n procesul de ^nvatare. Educatia matematica trebuie sa formeze studenti 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^ateva minute, contine sute de probleme interesante, face ca testele sa e 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^and imagini fotorealistice. Ruleaza sub Windows 95 sau NT 4. Poate crea 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 intersectii de regiuni tridimensionale, exporta imagini^n mediile clasice de procesare a textelor, detalii realistice prin efecte de luminare, umbrire, transparenta ( gura 5.3). Geo1 este ideal pentru studentii^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^at pot investigati prin plotare, schimbare de parametrii. De exemplu, caut^and ,,First derivative" se obtin o fereastra 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 studentilor ^n algebra, geometrie, analiza, stohastica, algebra liniara. MathPert (Algebra, Pre-Calculus and Calculus Assistant) se concentreaza asupra ^nvatarii matematicii ajut^and studentul sa lucreze cu succes asupra problemelor. Studentii adesea ^nt^alnesc di cultati ^n rezolvarea problemelor 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^ant. MathPert este construit pentru a elimina asemenea blocari prin ajutorul dat studentilor ^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 sectiuni 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

ecuatiilor care pot legate la pagini HTML. Are translator pentru TEX, LATEXsi 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^at corectarea erorile de sintaxa nu mai este o poblema 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), ani89

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, intersectii 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^at se pot trata probleme aritmetice, 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 precum Casio, Hewlett Packard. Ofera iesiri de texte ^n format LATEX. 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. TEX(cu cea mai cunoscuta versiune a sa LATEX), 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. Aceasta carte de exemplu a fost editata ^n LATEX. Cunoscutul Microsoft Word, de tip WYSIWYG (What You See Is What You Get), din pachetul Microsoft Oce 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^ant. Permite incorporarea 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, umbrite etc. Poate generata o copie PostScript a gra celor si iesiri LATEX. 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^ateva 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^at un limbaj interactiv pentru interactiunea cu utilizatorul 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^and siere de intrare se pot crea biblioteci proprii de reguli 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^and o intefatare de tip pentru deducerea 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^and polinoamele de matrice nu. Cate-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^and posibila utilizarea aceluiasi 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^and un bloc x de stocare. Avantajul lor este acela ca ofera 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^and 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^at optimizeaza insertia si extractia elementelor maxime. Operatia de extractie returneaza elementul maxim din heap, distruge informatia si se reorganizeaza astfel ^nc^at urmatorul element este pregatit pentru 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^and 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 perioad a 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 - list a 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 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

Facilitatile oferite de Derive sunt urmatoarele:

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, recunoste 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^and coordonate rectangulare sau polare, speci carea rangului de trasare utiliz^and 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 secvente ^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^arma pentru functii de doua variabile, ascunderea 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, intersectii, 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

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 selectia 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

Structura unui document

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

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: Funct P ii

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); 0 (x); f (n) (x) Rf 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

5

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

7x6y + 21x5y2 + 35x4y3 + 35x3y4 + 21x2y5 + 7xy6 7xy(x + y)(x2 + xy + y2 )2 lim((a^x-1)/x,x,0)

ln(a)

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

-e/2

(1+x)^(1/x)

dif(#10,x) 



1 ? ln(x + 1) (x + 1) x1 x(x + 1) x2

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

p

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

2 2

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)

[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^at acesta poate recuperat, chiar daca nu i s-a dat un nume de catre utilizator. Macsyma poate exporta gra ca ca siere meta le Windows (Maple poate exporta doar bitmap-uri). Macsyma este mai performant dec^at Maple ^n ceea ce priveste substitutiile si testul de divizare cu zero. Notatiile matriceale si 101

comenzile corespunzatoare sunt usor de utilizat. La integrarea monoamelor,

Macsyma ^ntreaba utilizatorul asupra conditiilor de integrare. Diferentierea

se poate face cu respectarea unor reguli. Nici un alt produs nu poate rezolva mai multe ODE-uri dec^at Macsyma 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^and probleme de tip mixt. Are un generator automat 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^and reguli care se aplica automat si care se pot seta ^nainte sau dupa 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.

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^at cel al Mathematica. Se pot edita peste 200 de atribute ^ntr-un gra c tridimensional tipic utiliz^and dialogurile cu utilizatorul. Coordonatele unui punct dintr-un gra c 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^at Mathematica.

102

Variabilele implicit sunt reale pentru ca software-ul este destinat inginerilor care utilizeaza mai mult variabilele reale dec^at cele complexe; se pot trata ^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^at orice 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^at Macsyma, dar este mai greu de utilizat. Macsyma balanseaza cele trei tehnologii: pattern matching, programarea procedurala si baze de date. Mathematica se bazeaza mai mult dec^at alte produse de software matematice pe pattern matching, utilizarea 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

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

(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

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 x0 then 1 else 0$ sum(f(i), i, -2, 8); sqrt(x^2) declare (z, complex) $ sqrt(z^2) assume (x); 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^amp marcat prin lipsa prompter-ului de 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^anga (lhs). Numele de variabile trebuie sa difere de numele 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^and pi reprezinta o variabila (desemnata printr-o litera greceasca ^n c^ampul rezultatelor). Pentru argumente de 106

functii se utilizeaza parantezele rotunde, iar pentru indici de matrice, vectori, liste, tablouri, multimi, parantezele drepte (indicii vor separati prin virgula). Prezenta acoladelor indica o multime, parantezele drepte o lista, iar parantezele rotunde o secventa. Operatorul de multiplicare trebuie introdus explicit, deci utilizatorul va scrie 2  x si nu 2x. Ghilimelele " au o semni catie speciala, permit^and referirea la comanda anterioara. Nu se permite spatiu ^ntr-un c^amp domeniu : : sau ^n 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:=x^2+4*x+4;

p := x2 + 4 x +2 4 Identi catorului p ^i este asignata formula x + 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;

Care este valoarea lui x?

x2 + 4 x + 4 107

> x;

x Este simbolul x. Daca p trebuie evaluat, consideram de exemplu: > x:=3; p;

x := 3 25 Evaluarea de mai sus poate afecta e cienta si semantica programului. De exemplu, ce se ^nt^ampla daca ^ncercam sa calculam: > int(p,x);

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

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

face prin:

> x:='x';

x := x

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

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). Funct ii 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:=x^2*y+3*x^3*z+2;

p := x2 y + 3 x3 z + 2 iar formula sin(x + =2)e?x se scrie ^n Maple > sin(x+Pi/2)*exp(-x);

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, > type(p, integer); whattype(p); type(p,`+`);

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. Prezenta punctului zecimal este semni cativa. De exemplu, > 2/3; 2/3.0;

108

2 3 :6666666667 Functia nops returneaza numarul de operanzi ai unei expresii. Pentru o suma indica numarul de termeni din suma. De exemplu, > nops(p);

3 Functia op este utilizata pentru a extrage unul dintre operanzii unei expresii. Are sintaxa op(i; f) ^nsemn^and ca extrage al i-lea operand al expresiei f. In exemplul nostru, > op(1,p), op(2,p);

x2 y; 3 x3 z Functia op poate utilizata ^n forma op(i: :j; f). Aceasta returneaza secventa de operanzi ai lui f de la i la j. De exemplu, > op(1..3,p);

x2 y; 3 x3 z; 2 O prescurtare este op(f), echivalenta cu op(1..nops(f); f), care are semni catia crearii unei secvente cu toti operanzii lui f.

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

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 > p:=x^2+4*x+4:

Ce se ^nt^ampla daca utilizam acelasi nume p ^n ambele parti ale unei asignari? > p:=p+x;

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

Warning, recursive definition of name

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

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. Instructiunea de executie conditionata ^n Maple are sintaxa: if expr then setinstr1 [elif altexpr then altsetinstr]* [else setinstr2] ;

unde setinstr1, altsetinstr, setinstr2 sunt secvente 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 > if x for i to 3 do print(i^2) od;

1 4 9

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

10000000019 Combinatia dintre for si while este adesea utila:

> for i from 10^10+1 by 2 while not isprime(i) do od;

print(i);

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 > for i to nops(s) do f(op(i,s)) od;

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

Secvente O secventa (de tip exprseq) este o ^nsiruire de expresii separate prin virgule. O secventa poate descrisa direct: > s:=1,4,9,16,25;

s := 1; 4; 9; 16; 25 Secventele de secvente se simpli ca ^ntr-o secventa mai mare, adica secventele sunt asociative. De exemplu, > s:=1,(4,9,16),25;

s := 1; 4; 9; 16; 25 Simbolul special NULL indica o secventa vida. Cu ajutorul secventelor se pot construi liste si multimi. Apelul unei functii se bazeaza pe o secventa de argumente ale functiei. De exemplu functiile min sau max considera un numar arbitrar de valori ca argumente, adica o secventa de argumente. > min(s,0,s);

0 Functiile op si nops nu pot utilizate direct pentru secvente. >

nops(3,4,a); Error, wrong number (or type) of parameters in function nops

> nops([3,4,a]);

3 Functia seq este extrem de utila ^n crearea secventelor. 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 > s:=NULL; for i from m by 1 to n do s:=s, f(i) od;

De exemplu,

> seq(i^2,i=1..5);

1; 4; 9; 16; 25

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

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 secvente intermediare. A doua varianta pentru seq este seq(f(i),i=a) care este echivalenta cu seq(f(op(i,a)),i=1..nops(a))

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));

?11; y; 0; 3 111

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

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

Liste si multimi Listele, multimile si functiile sunt construite pe baza de secvente. 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]; whattype(l);

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^arfurile (1,1), (3,1), (3,3), (1,3) se creaza o lista: > ab := [[1,1],[3,1],[3,3],[1,3],[1,1]]: > plot(ab);

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^and de la o lista cu c^ate 3 valori pentru un punct. De exemplu, pentru jumatatea superioara a cercului de raza 4 si centru la (1,5): >

plot( [1+4*cos(t),5+4*sin(t),t=0..Pi],scaling=constrained);

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:={x,1,1-z,x}; whattype(s);

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 secvente, liste sau multimi. De exemplu, > op(1,s); s[1]; op(1..3,s); s[1..3];

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^and true ^n caz a rmativ, false ^n caz contrar: > for i to nops(s) while s[i]x do od: > if i>nops(s) then print(false) else print(true) fi;

true Functia prede nita member efectueaza aceasta operatie. member(x; s) re112

turneaza true daca elementul x este ^n lista sau multimea s. Adaugarea unui nou element la lista l se face prin > l:=[op(l),x];

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)]];

sau utiliz^and functia subsop

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

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

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

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

> substring(",3..9);

love yo

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

false

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

z := 54

> whattype(z); length(z);

string

2

Tabele Tabelele sunt extrem de utile pentru scrierea unor programe e ciente.

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^ana. > COLOUR[red]:=rouge, rot, rosu; COLOURred rouge

:=

113

; rot ; rosu

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

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

[ yellow ]; [ red ]; [ blue ]

> entries(COLOUR);

[ 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^and o cheie sau un indice de tabel putem gasi rapid intrarea corespunzatoare. De exemplu, > COLOUR[red];

rouge ; rot ; rosu returneaza rapid numele culorii ^n alte limbi. C^at de rapid? In acelasi timp, indiferent de lungimea intrarile tabelului. Putem de asemenea testa daca o intrare se a a ^n tabel: > assigned(COLOUR[green]);

false si putem sterge intrari din tabel prin dezasignare:

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

table([

:=

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

])

Vectori si matrice O matrice unidimensionala poate creata utiliz^and co-

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: > restart; n:=3: v:=array(1..n);

v := array( 1::3; [ ] )

> for i from 2 to n do v[i]:=a*v[i-1] mod n od;

v1 := a 114

v2 := a2 v3 := a3 Matricele unidimensionale se aseamana cu tabelele cu un indice restrictionat la un rang x. Sunt mult mai e ciente ^n accesare dec^at tabelele si ^n plus prevad veri carea apartenentei indicelui ^n rang. Consideram exemplul de utilizare a unei matrice unidimensionale pentru sortarea prin metoda bulelor a unei secvente 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: > 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]:

Construim matricea bidimensionala M a carui element Mij este derivata lui vi de xj : > 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);

M 0 0 0 3 1 1 1 77 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.

2 66 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 := ?21 ; [ [ x + 1; 2 ]; [ x ? 1; 1 ] ]



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

?1

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: > Cuaternion(2,3,0,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^andi ca un polinom multivariabile^n c^ampul numelor, si de a-i stoca valorile coe cientilor. Acest mod este util c^and c^ampurile sunt numerice si se doreste efectuarea unor operatii cu aceste c^ampuri. De exemplu, putem reprezenta un cuaternion ca un polinom de variabilele i; j; k: > restart; z1:=2+3*i+k; z2:=2-3*i+2*j+2*k; z1+z2;

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 secvente 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

Maple permite speci carea unui operator ^n doua modalitati:

> f := x -> x^3-4;

> g:=;

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

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

( a2 + b2 )3 ? 4 4 O expresie neevaluata poate transformata ^ntr-un operator utiliz^and functia unapply: > f:=unapply(z^3-4,z);

f := z ! z 3 ? 4 De exemplu, Maple are operatorul prede nit de diferentiere: > D(sin); D(ln); cos 117

a ! a1 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^at D returneaza un operator sageata care transforma numere ^n inversele lor.

Relatii O relatie ^ntre doua variabile x si y este speci cata printr-o ecuatie

de forma:

> y = x^2 + 1:

Pentru ecare valoare a lui x, putem utiliza ecuatia pentru a calcula valorile corespunzatoare a lui y. Curba de dependenta poate trasata cu comanda Maple implicitplot. > plots[implicitplot](y=x^2+1,x=-3..3,y=-10..10);

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^and aceasta regula, gra cul anterior este gra cul unei functii, la fel ca urmatoarele: > eq1 := y=x^2+1: eq2 := y=x^3-3*x^2-2: > implicitplot({eq1, eq2}, x=-3..3, y=-10..10);

Urmatoarele relatii nu sunt ^nsa functii (vezi gra c):

> eq1 := x=y^2+1: eq2 := x=y^3-3*y^2-2: > plots[implicitplot]({eq1, eq2}, x=-10..10, y=-3..3);

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;

aria :=  r2

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: > plot(aria,r=0..4);

rezult^and o fereastra separata pentru gra cul functiei pe intervalul r = 0::4. 2. Functii de nite prin operatorul sageata: asignarea > aria := r -> Pi*r^2:

de neste de asemenea functia arie. Pentru a gasi aria cercului de raza 3, putem scrie simplu: > aria(3); 9 118

Pentru a trasa functia:

> plot(aria,0..4):

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

pol := x ! x2 + 4 x ? 1

4. Functii de nite ca proceduri: asignarea >

aria := proc(r) Pi*r^2 end:

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^and cuv^antul cheie ERROR. Mesajul de eroare este ^ncadrat ^ntre caractere `. > aria := proc(r) > if r else Pi*r^2 fi > end: > aria(3);

9

> aria(-3);

Error, (in aria) Raza trebuie sa fie pozitiva

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: > V := (r,h) -> Pi*r^2*h:

Pentru a vizualiza gra cul lui V se poate utiliza plot3d: > plot3d(V,0..4,0..4);

Toate functiile matematice standard se ^nt^alnesc ^n Maple. Pentru o lista completa se pot cere informatii suplimentare cu > ?inifcns.

Operatorul de compunere a functiilor este @. > y := sin@cos@(x->x^2+3); y(3.);

y := sin@cos@( x ! x2 + 3 ) :7472099577

Parametrii si domeniul lor exemplu putem scrie

Maple accepta procedura ^n procedura. De

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

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

> f2:=proc(x) local g; g:=()->x+1; x*g() 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);

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);

Error, (in F) STACK OVERFLOW

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

> end: > F(200);

453973694165307953197296969697410619233826 O alta posibilitate este aceea de a utiliza optiunea remember. Aceasta este utilizata pentru a stoca valorile care sunt calculate astfel ^nc^at pot folosite ulterior. > restart; F:=proc(n) option remember;

>

if n=0 or n=1 then 1 else F(n-1)+F(n-2) fi end:

> F(200);

Error, (in F) STACK OVERFLOW

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

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

este secventa de argumente, iar intrarea tabelului este valoare functiei. C^and 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^and asa numita asignare functionala. Aceasta este mult mai exibila dec^at 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

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

Semni catia este aplicarea functiei f la operanzii expresiei a pas^and argumentele x1; : : :; xn lui f. De obicei, argumentelor optionale sunt neglijate. Formal, aceasta situatie este echivalenta cu cea ^nt^alnita ^n calculul secventei > seq(f,op(i,a),x1,...,n),i=1..nops(a));

De exemplu,

> p:=x^3+2*x+1: map(F,p);

F( x3 ) + F( 2 x ) + F( 1 )

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

x6 + 4 x2 + 1 4

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 > >

if args[i]>maximum then maximum:=args[i] fi od; maximum

> end:

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

Returnarea apelului procedurii ca expresie neevaluata Procedura

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

Maple max permite calcul simbolic. > MAX(1,2,x);

Error, (in MAX) cannot evaluate boolean

> max(1,2,x);

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

1

?1

signum( a ? b ) args[i] 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 >

j:=i+1; while j >

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;

>

'MAX'(seq(a[i],i=1..n));

if n=1 then RETURN(a[1]) fi;

> end:

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);



p

MAX x + 1; 2

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

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

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^at max(max(a,b),c) c^at si max(a,max(b,c)) ^n max(a,b,c). In plus 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,MAX(c,b),a);

MAX( a; a; b; c ) Sa introducem si proprietatea max(a,a)=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^and algoritmului lui Euclid. Functia irem calculeaza restul ^ntreg al ^mpartirii a doi ^ntregi. > GCD:=proc(a,b) local c,d,r; > c:=a; d:=b; while d0 do r:=irem(c,d); c:=d; d:=r od; > end:

c

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

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

c := 3 d := 0 3 printlevel:=1: GCD(100!, 2^100);

158456325028528675187087900672 Procedura poate scrisa si recursiv:

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

{--> {--> {--> {--> {-->

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

3

enter MAX, args = b, a

a := f a; b g a := f a; b g 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 )

p:=x^3+2*x+1: degree(p);

3

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

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)

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

> end:

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

Returnarea rezultatelor prin parametrii Numeroase functii ^n Maple returneaza mai mult dec^at o valoare. Este posibila returnarea unui numar oarecare utiliz^and o secventa sau o lista. Pe de alta parte este posibila returnarea 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: > divide(x^3-1,x-1);

true De obicei, daca b divide a, utilizatorul are nevoie ^n continuarea calculelor de c^atul ^mpartirii, q. In Maple, acest lucru poate realizat d^and ^n functia divide un al treilea parametru, care este un nume si caruia i se va asigna c^atul daca b divide pe a: > if divide(x^3-1,x-1,`q`) then print(q) fi;

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^at 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

> >

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

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

false

pozitie

126

RETURN(true) fi od;

> 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^and comanda read. De exemplu, daca am scris procedura MAX ^n sierul MAX, putem citi acest sier prin > read `MAX`;

Procedurile si orice formula de calcul dintr-o sesiune Maple poate salvata din linia de comanda utiliz^and comanda save, cu forma save, f1, 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 sa^ndu-se situatia 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^ans de informatii, este preferabila 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 i := 1; tmp1 := 1; > while i < number do tmp1 :=(i+1)*tmp1; i:=i+1 od;

127

>

RETURN(tmp1)

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

Prin restart toate informatiile se pierd: > restart; > print(FACTORIAL);

FACTORIAL

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

proc(number) local i,tmp1; options remember; if number alias(F=FACTORIAL);

I; F

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

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: > save NEWTON, `/dana/newt.m`;

Pentru crearea unui pachet propriu:

> 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^and, writeto, appendto si lprint. Maple poate rula programul 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^and comanda read. O schita a codului Maple corespunzator este urmatoarea: > interface(quiet=true); > writeto(input);

> ... #scrie datele in fisierul input > writeto(terminal); > interface(quiet=false); > system(...); #executa programul extern > read output; > ... #continua procesarea ^ n {\sc Maple}

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.

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

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

129

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);

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

C.

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

with(linalg): h:=det(hessian(e1,[x,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

(

)

3

(

)

3

2

2

(

2

)

3

2

2

2

2

2

(

)

3

2

2

2

(

)

3

2

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);

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

In sierul temp.c regasim expresia de mai sus, h ind ^nlocuit cu r. Costul evaluarii lui h poate estimat prin: > readlib(cost): cost(h);

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;

130

2

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;

Legatura cu editoarele de texte Subrutinele latex si eqn sunt destinate

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.

Z

Z1

> e2:=Int(Int(exp(x^2+y^2),x=-infinity..infinity),y=-Pi/2..zeta);

e2 :=

? 1=2  ?1

e( x2 +y2 ) dx dy

> latex(e2);

\int _{-{\frac {\pi }{2}}}^{\zeta}\!\int _{-\infty }^{ \infty }\!{e^{{x}^{2}+{y}^{2}}}{dx}\,{dy}

> readlib(eqn): eqn(e2);

{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" }

Rezultatele pot salvate ^ntr-un sier, adaug^and numele sierului ca parametru secund: > latex(e1,`foo.tex`);

Calcule aritmetice, exacte sau aproximative Prima diferenta dintre Maple si un calculator de buzunar este aceea ca Maple a seaza rezultatele exacte, lucreaza cu fractii si variabile. Maple lucreaza cu fractii at^at c^at este

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

5 6

> evalf(5/6);

:8333333333 p Maple accepta si numere complexe. I este constanta pentru ?1. > (3+2*I)*(2-I);

8+I Numele pentru , aria cercului de raza 1, ^n Maple este Pi. > Pi*3^2;

9 Maple nu are o limita a numarului de cifre a unui ^ntreg: > big:=100!;

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: > ifactor(big);

( 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 )

Un alt exemplu privind capabilitatile de calcul aritmetic este determinarea celui mai mare divizor comun a doua numere ^ntregi: > igcd(3^500,5^300-1); ilcm(9615319,12345678909876543210);

9 16958234427147887654490570 Maple utilizeaza un test probabilitistic pentru a determina daca un numar este prim. Un rezultat false va ^ntotdeauna corect, pe c^and un rezultat true este foarte probabil de a exact. > isprime(3195958637); nextprime(3195958637);

true 3195958679 Maple poate calcula numarul de^ntregi mai mici dec^at n, argumentul functiei, numere relativ prime cu n: > numtheory[phi](76458146187641);

75925851724800 Maple efectueaza calcule ^n virgula otanta cu o precizie arbitrara. De exemplu, putem aproxima  cu 100 de zecimale: > evalf(Pi,100);

3:1415926535897932384626433832795028841971693993751058209749n 44592307816406286208998628034825342117068 Numerele reale ^n Maple pot introduce ^n Maple e utiliz^and numere ce cont  in punctul zecimal, e direct utiliz^and functia Float, unde Float(m; e)=m  10e, iar mantisa m este un numar ^ntreg cu precizie oarecare, si exponentul e este restrictionat 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 secventa de numere aleatoare din [0; 1), cu 6 cifre zecimale exacte. > UniformInteger:=rand(0..10^6-1): > UniformFloat:=proc() Float(UniformInteger(),-6) end: > seq(UniformFloat(), i=1..6);

: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

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 )

> evalf(");

:8414709848078965066525023 Pe l^anga functiile matematice pe care le^nt^alnim^ntr-un limbaj de programare, Maple cunoaste si o serie de functii speciale precum functiile Bessel, functia Dirac, functia ? etc. Acestea sunt calculate cu precizie ^nalta prin ^nsumarea pa poate calculat aplic^and metoda Newton la reunor serii. De exemplu, zolvarea 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);

1:4142135623730950488016887242096980785696718753769

Simpli care si calcul polinomial

Maple are posibilitatea de a simpli ca 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^at termenul constant este primul termen ^n produs (e) termenii asemenea ^n 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) simpli carea functiilor matematice standard pentru p 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).

133

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

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));

5 x4 + 84 x3 ? 79 x2 ? 1 eq1 := 3362 x ? 1517 6 x2 + 7 x ? 5

> normal(eq1);

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^anga simpli carea polinoamelor are posibilitatea de simpli care a expresiilor trigonometrice sau a expresiilor cu radicali. > eq3:=cos(x)^5 + sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x): > simplify(eq3);

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);

csgn( x ) x

> assume(x eq5 := (y^5+273*y^4+27502*y^3+1219766*y^2+20416065*y+ > 13760393)^(1/3): > simplify(eq5,radical,assume=positive);

( y + 59 ) ( y2 + 96 y + 67 )1=3 O alta functie este combine. Aceasta reduce numarul termenilor dintr-o expresie.

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

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);

1

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 )

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

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



p

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



p



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

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

( 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);

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

3

15

> convert(p3,confrac);

1+

315

x

2835

x2

x2 2 5+ x 1 ?7 + 9 x2 P am exemplul de calcul a normei ni=0 a2i a polinomului a(x) = PnConsider i i=0 aix :

?3 +

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

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

element al listei este ridicat la patrat, rezult^and o noua lista; apoi lista de 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

> Euclidian(p);

p

14 Daca se doreste determinarea coe cientilor 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 co cientilor numerici. Adica pentru p = ux2 + y2 + v Euclidian returneaza 3. Daca dorim sa vedem acest polinom ca polinom de x si y cu coe cienti 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) >

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)`)

>

fi

> end:

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

Limite si diferentiale

Maple calculeaza limitele unei expresii examin^and 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);

1

> 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

> limit(eq3,x=1);

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. > 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);

2 ( a2 ? 1b2 )3 r6 ? ( a2 ? 1b2 )2 r4 2 ( a2 ? 1b2 )3 r6 + ( a2 ? 1b2 )2 r4 ? lim r!0 e( b2 r2 ) e( a2 r2 ) > value(");

?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);

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

unde ned

1

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

1 ?1

Comanda Maple limit poate utilizata pentru calculul derivatelor utiliz^and de nitia: >

f := x -> x^2 + x -3: fp := limit((f(x+h)-f(x))/h,h=0);

fp := 2 x + 1 Pentru de nirea ca functie a derivatei unei expresii se poate utiliza unapply:

137

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

yp := 2 x + 1

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

yp := x ! 2 x + 1

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

?

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



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

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

Serii Maple poate calcula serii Taylor, serii Laurent si serii Chebyshev. Daca functia este analitica, se calculeaza seria Taylor. > eq5:=x*sin(x): series(eq5,x=0);

x2 ? 61 x4 + O( x6 ) Ordinul de acuratete poate speci cat. > series(eq5,x=0,10);

1 x6 ? 1 x8 + O( x10 ) x2 ? 61 x4 + 120 5040 Daca functia are un pol ^n punctul de expansiune, se determina seria Laurent. > eq6:=1/x^5*sin(x): series(eq6,x=0);

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

Sume Puterea Maple-ului const Pna, de20 fapt, ^n abilitatea de calcul simbolic. 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 223193 41990 11 9 13 ? 323 ( n + 1 ) + 33 ( n + 1 ) ? 63 ( n + 1 ) + 6460 ( n + 1 )7 174611 5 219335 3 174611 ? 68723 10 ( n + 1 ) + 63 ( n + 1 ) ? 330 n ? 330 > simplify(");

219335 n3 ? 68723 n5 + 6460 n7 ? 223193 n9 + 41990 n11 ? 323 n13 + 1292 n15 63 10 63 33 21 5 1 1 174611 19 17 19 20 21 ? 2 n + 3 n + 2 n + 21 n ? 330 n 138

> factor(");

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 1 Maple lucreaza si cu notiunea de in nit. De exemplu, putem calcula 1 i=1 i3 >

sum(1/i^3,i=1..infinity);

( 3 )

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

^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: > evalf(");

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>

X

81*n^3+35*n^2-133*n+55),n);

n

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

> value(");

3 n2 ? 7 n + 9 5 n3 ? 8 n2 + 9 n ? 11

Integrare

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

Z

f( x ) dx

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

?ln( ex + 1 ) + ln( ex )

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

1 8 4 8 x ? x + 3x 139



p p 1 1 2 x + 1 2 ? 3 x2 + x + 1 + 9 3arctan 3 ( 2 x + 1 ) 3 De asemenea poate trata integrale de nite:

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

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

r4 := 9 + ln( 2 )

800 :7043971806 Exista ^nsa functii a caror integrale nu pot reprezentate ^n termenii unor functii elementare. De exemplu, functia Gauss de eroare: > f6 := exp(-x^2): int(f6,x);

1 p erf( x ) 2 Maple utilizeaza anumite functii prede nite ^n termeni de integrale. Se pot trata si integralele improprii:

Z1

> Int( exp(-t^2), t=-infinity..infinity ); value(");

e( ?t2 ) dt ?1 p 

Z 1 e( ?t ) 3 dt 0 t1= 2

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

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

? 3

Z

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

X R=%1

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

%1 := RootOf( 23 Z 3 + 3 Z + 1 ) In anumite cazuri, integralele depind de parametrii. De exemplu:

Z1

> f5:= exp(-u*x)*ln(x)*sqrt(x): int(f5,x=0..infinity);

p

e( ?u x ) ln( x ) x dx 0 Putem informa Maple despre o anumita calitate a lui u: > assume(u 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.

Zx

> f8 := exp(t^3): int(f8,t=0..x);

0

e( t3 ) dt

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

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

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);

1 x7 p8 := x ! x + 41 x4 + 14

> evalf(p8(1));

O cale mai scurta este:

1:321428571

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

1:341904418 Un avantaj al utilizarii functiei evalf este acela ca raspunsul este corect p^ana la ultima zecimala. Daca utilizam solutia tip serie trebuie sa facem o analiza a ordinului de acuratete a raspunsului.

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

> r1 := int( exp(-t) / sqrt(1-t^2),t = -1..1 );

r1 := > evalf(r1);

?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. > with(student);

[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

slope ; trapezoid ; value ]

Sa consideram, de exemplu, functia f de nita prin: > f := (x) -> x^2 + 3:

Panta liniei tangente ^ntr-un punct oarecare x = a poate calculata astfel: > slope( [x,f(x)], [a,f(a)] );

x2 ? a 2 x?a

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

x2 ? a 2 lim x!a x ? a lim a + x x!a 2a De exemplu, linia tangenta ^n x = 3 are panta: > subs(a=3,");

6 Acesta linie tangenta poate vizualizata cu comanda > showtangent( f(x),x=3,x=0..4 );

Pentru o secventa de valori x, se poate construi o secventa de imagini ale tangentelor: > for i to 8 do p.i := showtangent(f(x),x=2+i*.2,x=0..4) od: > plots[display]( [p.(1..8)], insequence=true );

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 );

!

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

> leftsum(f(x),x=0..4 ,n); expand("); value("); expand(");

nX ?1 

 2 i 16 n2 + 3 i =0 4 n 142

nX ?1

i2

nX ?1

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

1

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);

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

n!1 > value(");

100 3 Acest proces sta la baza de nitiei functiei de integrare^nt^alnita drept comanda:

Z4

> Int(f(x),x=0..4); value(");

Alte exemple:

x2 + 3 dx 0 100 3

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

>

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

>

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

>

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

:3325000000

Gra ca bidimensionala Suplimentarea procedurilor de trasare se realizeaza

prin:

> with(plots);

[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 ] 143

Figura 6.5:

Figura 6.6:

Procedura Maple de trasare pentru cazul unei informatii din spatiul bidimensional este plot. > A:=plot(x^3+3*x^2-3*x-1,x=-3..3,style=POINT): > A;

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. > f :=

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

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: > plot( f,

x = -Pi .. Pi ,

-10 .. 10 , discont=true );

Gra c: vezi gura 6.6.b Doua functii pot trasate pe acelasi gra c:

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

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

Figura 6.7:

Figura 6.8: > plot( [cos(3*t),sin(2*t),t=0..Pi], x=-1..1, y=-1..1 );

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});

Alte exemple:

Gra c: vezi gura 6.8

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

Gra c: vezi gura 6.9.a

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

Gra c: vezi gura 6.9.b

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

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;

145

Figura 6.9:

Figura 6.10: > >

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

> end:

Descrierea transformarii se realizeaza cu ajutorul unei matrice. > symm := matrix( [ [1,2], [2,1.5] ] ):

Obiectele care se vor transforma sunt:

> 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.10

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

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

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)]]): > transform(rotate,sq);transform(rotate,segment);

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^ang al segmentului, se parcurge d=3 din segment, dupa care are loc o ^ntoarcere cu 60 de grade la st^anga, directie pe care se parcurge 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^anga si distanta d=3. Curba rezultata are 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;

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

De exemplu, daca aplicam basic asupra segmentului de lungime 1 cu capetele [0,0], [1,0] obtinem o secventa de numere: >

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

:3333333333; 0;:5000000000; :2886751347;:6666666666; 0;1;0 Punctul din st^anga a segmentului original a fost ^n mod intentionat omis, 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^and de 4 ori mai multe segmente de 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

147

Figura 6.12: > curve:=[op(curve),basic([fl[i],fl[i+1]],[fl[i+2],fl[i+3]])] od > end:

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

> 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);

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^ana ^n punctul ^n care aceasta ^nt^alneste axa x. Fie (x1; 0) acest punct de intersectie. x1 poate exprimat astfel: >

)

(

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

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 secventa 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:

148

Figura 6.13:

Figura 6.14:

Testam aceasta procedura pentru rezolvarea ecuatiei x2 = 2 plec^and de la estimarea x0 = 3 si utiliz^and intervalul de trasare de la 0 la 4. > vnewt(x -> x^2 - 2, 3, 0,

4);

#rezultat grafic

Gra ca tridimensionala Se considera urmatoarea functie: > f := x*exp(-x^2-y^2):

Gra cul sau arata astfel:

> plot3d(f,x=-2..2,y=-2..2,axes=BOX,orientation=[-116,75]);

Gra c: vezi gura 6.13.a

Contourplot este utilizat pentru a trasa contururile lui f ^n planul xy: > contourplot(f,x=-2..2,y=-2..2,axes=BOX,shading=Z);

Gra c: vezi gura 6.13.b Un gra c de densitate este o alta cale de a transpune informatia tridimensionala ^ntr-un plan. > densityplot(f, x=-2..2, y=-2..2, axes=BOX );

Gra c: vezi gura 6.14.a Putem genera de asemenea un gra c al gradientului lui f utiliz^and gradplot. 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);

Gra c: vezi gura 6.14.b 149

Figura 6.15:

Figura 6.16:

Un c^amp vectorial poate vizualizat cu ajutorul functiei eldplot3d:

> 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.a Suprafetele descrise explicit pot trasate cu plot3d:

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

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

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

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);

Alte exemple:

Gra c: vezi gura 6.16.b

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

Gra c: vezi gura 6.17.a

> plots[spacecurve]([t*cos(t),t*sin(t),t],t=0..7*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

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^and o curba de pro l oarecare (r(t); 0; h(t)) ^n planul rOz 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): > display3d({circ, torus}, orientation=[-60,80]);

Gra c: vezi gura 6.18.a O alt a posibilitate este aceea de a g^andi torul ca un tub ^n jurul cercului 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]);

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, > orientation=[45,60]): > display({T1,T2}, orientation=[45,60]);

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

> 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]);

Gra c: vezi gura 6.19.b Introducem torul initial, dar cu o raza mai mica:

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

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);

Operatii vectoriale si matriceale

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. > with(linalg);

Warning: new definition for Warning: new definition for

norm trace

[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 ] 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);

2 1 13 66 1 2 3 77 66 1 1 1 77 66 2 3 4 77 41 1 15

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]);

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

21 x y3 A := 4 0 1 z 5

> A:=matrix([[1,x,y],[0,1,z],[0,0,1]]);

0 0 1 Utiliz^and functiile prede nite ^n linalg se poate calcula inversa, determinantul, 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.

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

> evalm(A&*A); # echivalent cu evalm(A^2);

0 0

> det(A);

1

1

> B:=matrix([[a,a,c],[b,5,f],[g,c,d]]): det(B);

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

> inverse(A);

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

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

de ecuatii diferentiale.

> exponential(A);

2 1 xze +ye 3 e x e 66 77 2 4 5

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]]):

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

eq1 := ?2 ? 7  + 2

Acesta este polinomul caracteristic. Radacinile sale sunt: > egv:=solve(det(F),lambda);

p

p

egv := 27 + 21 57; 27 ? 21 57

0 0

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

Vectorii proprii se pot obtine astfel:

0 0

 3 1 p  ? 8 + 8 571

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

Maple are comenzi pentru determinarea valorilor proprii si a polinomului caracteristic: > eigenvals(C); charpoly(C,lambda); eigenvects(C,'radical');

7 + 1 p57; 7 ? 1 p57 2 2 2 22 ? 2 ? 7   7 1 p  3 1 p   7+  1 p  3 1 p  2 + 2 57; 1; ? 8 + 8 571 ; 2 ? 2 57; 1; ? 8 ? 8 571 Fiecare lista din aceasta secventa contine o valoare proprie, ordinul sau de multiplicitate si vectorul propriu asociat. Fara speci carea optiunii radical:



 RootOf( Z 2 ? 7 Z ? 2 ); 1; 1 13 RootOf( Z 2 ? 7 Z ? 2 ) ? 32 Maple poate reduce matricele la diferite forme canonice. De exemplu se poate calcula forma normala Jordan: > eigenvects(C);

 14 1 

> J:=matrix([[34,25],[-16,-6]]): jordan(J,'T1');

0 14 155

 14 1 

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

0 14

Maple poate crea matrice Hilbert, matrice Vandermonde sau matrice

Toeplitz:

x1 x1 2 x1 3 3 x2 x2 2 x2 3 77 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 := 64 1

> V := vandermonde( [x.(1..4)] ); factor(det(V));

In pachetul linalg exista implementari ale eliminarii gaussiene cu interschimbarea liniilor. Acestea pot ajuta utilizatorul la rezolvarea sistemelor liniare: >

2 62 11 88 1 3 A := 4 30 81 ?5 ?28 5 4 ?11 10 57 3 2 4 ?11 10 66 0 327 ?80 ?57 911 77 66 2 2 77 4 5 2377 ? 41077 0 0 109 109   63082 ?26721 ?41077

A := randmatrix(3,4); gausselim(A); backsub(");

2377 2377 2377 Notatia pentru matricea identitate ^n Maple este: > &*():

Deoarece aceasta notatie este greoaie, ^i putem asocia p un ,,alias", de exemplu Id (I ^n Maple este rezervat numarului complex ?1). > alias(Id = &*());

I; Id Pachetul de algebra liniara contine functia linsolve pentru rezolvarea sistemelor de ecuatii liniare. > A := matrix([[-85, -55, -37, -35], [97, 50, 79, 56], >

[49, 63, 57, -59], [45, -8, -93, 92]]):

> b := matrix([[43], [-62], [77], [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 ?1873417 ?184492  x := 13019547 1456498 728249 1456498 31663 > evalm( A &* x - b ):

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], [-90, -79, 0, -92, 0], [0, 0, -24, 0, 0], [-58, 0, 0, 0, 0]]): b := vector(5,0): C := gausselim( concat(A,b), 5 ):

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



x := linsolve( submatrix(C,1..5,1..5), col(C,6) );

t1 t1

Rezolvarea ecuatiilor algebrice Rezolvarea sistemelor de ecuatii se poate realiza prin metoda gra ca, metoda substitutiei, sau utiliz^and solve. In metoda gra ca se traseaza gra cul iar pe baza acestuia se aproximeaza solutia. De exemplu, nu punem problema punctului de intersectie a lui x+y = 4 cu x ? 2y = 10. Utilizam Maple pentru vizualizarea celor doua linii: > with(plots): > implicitplot({x+y=4, x-2*y=10}, x=-1..7, y=-6..3);

Gra c: vezi gura 6.20.a Gra cul este utilizat pentru estimarea punctului de intersectie; ^n cazul curent, punctul de intersectie 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});

f 4 = 4; 10 = 10 g

In metoda substitutiei, exprimam y ^n termenii lui x: > solve(x+y=1,{y});

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

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

si rezolvam ecuatia ^n x:

12 x ? 8 = 49

> solve( " , {x});



x = 19 4 Substituim valoarea lui x ^n ecuatia lui y:



> subs(x=19/4, y=1-x);

y = ?415 Putem utiliza direct functia solve. Rezolvam, de exemplu: 8 6x ? 7y + 11z ? 4u = 74 > < + 3y ? 9z = u ? 22 n 2y ? 3x ? 11 = 0 (a) > xx ? (b) 4y ? 6x ? 11 = 0 : x + yy ?= zz ?? uu =? 610 > 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});

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

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

In cazul al doilea Maple nu a oferit nici o solutie pentru ca nu exista solutie. Veri cam aceasta concluzie tras^and curbele asociate ecuatiilor: > implicitplot({2*y-3*x-11=0, 4*y-6*x-11=0}, x=-20..20, y=-20..20);

Gra c: vezi gura 6.20.b ^n cazul ^n care nu poate determina o solutie simbolica.

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});



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



110 5 55 110 Raspunsul este returnat sub forma de multime de expresii. > subs(a1,eqs1);

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 a3 + 79 a2 + 99 a + 124 y = ? 10 a + 61 a ? 379 a ? %1 ; 6 + 228 a5 + 237 a4 + 518 a3 + 41 a2 + 86 a + 40  188 a z = ?2 %1 6 5 4 %1 := 40 a ? 293 a + 224 a ? 580 a3 + 268 a2 ? 127 a ? 100 > map(normal,subs(a2,eqs2));

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);

 ? arccos( y ? 9 )

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

ln( ?G ) ln( 2 ) Pentru radacinile unui polinom de grad trei, Maple returneaza o secventa a solutiilor exacte. > eqn3:=x^3-54*x^2+972*x-5839: solve(eqn3,x);

p p 71=3 + 18; ? 12 71=3 + 18 + 12 I 371=3; ? 12 71=3 + 18 ? 12 I 3 71=3 Pentru polinoame de grad patru sau mai mare, Maple utilizeaza reprezentarea RootOf pentru radacini. > eqn4:=x^5+3*x^2-2*x-1: a4:=solve(eqn4,x);

a4 := RootOf( Z 5 + 3 Z 2 ? 2 Z ? 1 ) Putem determina valorile radacinilor utiliz^and functia allvalues. Daca Maple nu gaseste o solutie acceptabila ^n forma RootOf, atunci returneaza un raspuns

numeric.

> s4:=[allvalues(a4)];

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

: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});



2  a 3 + 2 a 1 a z = ? 3 + 2 a ; y = 2 a2 ; x = 3 + 2 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,

>

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

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

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

a7 := Putem ^n asemenea caz sa obtinem o solutie numerica. > a7:=fsolve(eqn7,x);

a7 := 1:408842218 Solutia poate calculata cu un numar arbitrar de zecimale. > Digits:=30: a7:= fsolve(eqn7,x);

a7 := 1:40884221780205679557366608834

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

0=0 Functia fsolve, precum solve, poate utilizata pentru determinarea radacinilor unui polinom. In general, fsolve gaseste o singura radacina reala (except^and 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)};

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

?:6623589786 ? :5622795121 I g

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

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);

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

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

21

Optimizare

Maple are un pachet de rutine dedicat programarii liniare.

> with(simplex);

[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^angeri: > c1:={x feasible(c1,NONNEGATIVE);

false Maple utilizeaza metoda simplex pentru optimizare. Consideram functia obiectiv: > w := -x + y + 2*z:

si constr^angerile

> eq1 := 3*x+4*y -3*z maximize(w,c2,NONNEGATIVE);

sau



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



x = 0; z = 21 ; 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:

z := 2 x1 ? x2 + 8 x3

> cnts1:=[2*x3 dsolve(de1,y(x));

y( x ) = 31 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. > dsolve({de1,y(0)=0},y(x));

y( x ) = 31 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: > de6:=diff(y(t),t$2)+mu*(y(t)^2-1)*diff(y(t),t)+y(t)=0: > dsolve(de6,y(t));

Maple este incapabil de a gasi o solutie, astfel ^nc^at nu returneaza nimic.

    1 t4 + y( t ) = 1 + t ? 21 t2 + ? 16 ? 31  t3 + 61  + 24   2 2 2 + 1 t5 + O( t6 ) + 15  + 15 120 Maple poate rezolva sisteme de ecuatii diferentiale: > dsolve({de6,y(0)=1,D(y)(0)=1},y(t),series);

@

@





> 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



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

y( t ) = 3 + C1 e

? pt  p a a? ? pt 

x( t ) = ?1 + C1 e

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^at 1). Algoritmul implicit utilizat este bazat pe metoda 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



> s9(1.);

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

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

6.5 MathCad

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

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, studentilor si educatorilor sa rezolve probleme de la aritmetica simpla p^ana la cele mai avansate teme din algebra simbolica si 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

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^angeri; 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^and metode simbolice si numerice; 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^angeri; 13. lucreaza cu expresiile vizual, scrie ecuatiile si expresiile utiliz^and notatia 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^and 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)" = 6R  23:14 = 307:688 6:2^3:14 = 2 2 2:333 x&x^2 = 1 x dx = x := "0:5 #dxd x3 = 0:75 x : 0:5x?x^3 = 1 v := 5 j := 0: :2 v : +m1 5 6 j : 0; 2 P v =6 12 j$v[j = Q j v j = 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 restrictii: 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 secvente 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^anga si limita la dreapta, 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^angi). Operatorul de a sare = a seaza valoarea membrului st^ang dupa semnul =. Operatorul de de nire globala  (obtinut prin tastarea ~ ) are ca efect xarea valorii variabilei din membrul st^ang cu valoarea expresiei cu valabilitate pentru 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^at), < (mai mic dec^at),  (mai 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 P ). De exemplu, "Euler"> 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 implementata ca 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

compilator modern pentru un limbaj de programare.

MuPad este orientat pe comenzi: se introduce o comanda, iar rezultatul

este tiparit.

MuPad nu fost initial construit pentru ^nvatam^antul matematic. Are ^nsa 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.

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([[c, a], [a*d, b+c]]); >> A + B; >> 3*A*B;

6.9 Scilab 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

la adresa http://www-rocq.inria.fr/scilab. A fost conceput initial ca interfata pentru PBlas si ScaLaPack. Poate utilizat ^n ^nvatam^ant si industrie. 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^and matrice rare, forme Kronecker, 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^at matricele numerice, precum grafurile sau sistemele 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^ainile utilizatorului. 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

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.

7.1 Notiuni geometrice fundamentale

Curbe ^n IRn Fie : (a; b) ! IRn o functie pe intervalul deschis (a; b). Atunci scriem (t) =

( 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 (parametric a) ^n IRn este o functie continuu-diferentiabila : n (a; b) ! IR 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 neparametric a 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^at urma lui este 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 na curbei . O curba : (a; b) ! IR este regulata daca 0 (t) 6= 0 pentru oricare t 2 (a; b).

Curbe ^n plan

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 .

236

R

Lungimea unei curbe este ab k 0 (t)kdt. O curba algebrica este o curba a carui ecuatii pot exprimate ^n termeni

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^and k este diametrul lui C, 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^and P1 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 nit0a parametric0 (x(t); y(t))0 evoluta este: (x(t)+y (t)=M; y(t) ? x (t)=M), M = [y (t)x"(t) ? x (t)y"(t)]=[x (t)2 + y0 (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 nit a parametric (x(t); y(t)) si daca cercul 2(?a + x(t))=M; b + r2(?b + y(t))=M); este centrat ^  n (a; b), inversa este (a + r p M = (x(t) ? a)2 + (y(t) ? b)2 : Exemple de curba { centru cerc { inversa: parabola { focar { cardioid, parabola { v^arf { cisoida Diocles, hiperbola { centru { 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

tangentp a, c^and tangenta Ralunec a: (x(t) ? x0(t)=M; y(t) ? y0 (t)=M), p 0a pe2 curb t 0 2 0 2 0 M = x (t) + y (t) = a x (s) + y (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 0 0 y(t)  dx (t)=M); M = x (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^and P descrie curba C este pedala negativa a lui C. De exemplu, elipsa este pedala negativa a cercului daca punctul x este interior cercului, pe c^and hiperbola este pedala negativa 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 intersectie a perpendicularei din O la o tangenta la C. Exemple de curba { punct x { curba pedala: parabola { v^arf { cisoid, cerc { centru { cerc, cerc { punct diferit de centru { melc, cerc { punct pe cerc { cardioid, cardioid { punct de intersectie { 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^and C2 aluneca pe C1. Cicloida este o ruleta a unui punct al 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^at lungimea segmentului OP 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^alneste C ^n Q, astfel ^nc^at 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 funct ie 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^at J 2 = ?I se numeste structura complexa pe V . Fiecare spatiu tangent MP la o suprafata M ^ntr-un punct P are o structura complexa JP : MP ! MP . Aplicatia Pn ! JP poate sau nu sa e o functie continua de P. O suprafata M  IR este orientabila daca ecare spatiu tangent MP are o structura complexa JP : MP ! MP astfel ^nc^at P ! JP este o functie continua. Banda Mobius si sticla lui Klein sunt suprafete neorientabile.

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^alneste M perpendicular pe aceasta. Valorile minima si maxima ale 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

^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

C^and C este rotit ^n IR3 ^n jurul lui L, multimea de puncte M rezultata este 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 intersectia suprafetei cu un plan ce contine axa suprafetei de revolutie, L. O paralela este intersectia 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.

Bifoliu Loc geometric: Fie triunghiul dreptunghic OAB si N piciorul per-

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 intersectie a lui L cu perpendiculara din N1 pe d este bifoliul. Forma neparametrica: Daca lungimea laturilor este a pentru OA si b pentru AB, atunci ecuat?ia implicita este (x2 + y2 )2 = x2 (ax  + by): Forma parametrica: (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.

Campila lui Eudoxus Istoric: A2 fost descoperit a2 de Eudoxus, discipol al 4 4 2

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.

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 cerc de raza 2a, ^n afara acestuia. Forma neparametrica: (?2ax + x + y2 )2 = 4a2(x2 + y2 ) 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^and cercul aluneca uniform de-a lungul 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.

Cisoida lui Diocles (cisoida dreapta) Istoric: A fost mentionata prima data p de Diocles (c.a. 250-100 ^.e.n) Loc geometric: (a) Se considera un cerc de raza a=2 tangent la o linie ^ntr-un punct diametral opus unui punct A al cer-

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

aceste segmente se misca astfel ^nc^at una din linii trece ^ntotdeauna printrun punct x si capatul celuilalt segment aluneca de-a lungul unei linii drepte, atunci mijlocul segmentului de linie ce aluneca conduce la cisoidul lui Dio3 + xy2 ? 2ay2 = 0: Forma parametrica: (t) = cles. Form a neparametric a : x ?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 Nicome-

des (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.

Concoida Sluze Istoric:2A fost2 construit a de Rene de Sluze (1662). Forma 2x2 : Functia raza: a(r() cos  ? a) = neparametric a : a(x ? a)(x + y ) = k 2 2

k cos : Figuri: (a) a = k = 1 (b) a = 0:1, k = 1 (c) a = 2, k = 1. 243

Conica Istoric: Conica este una dintre cele mai vechi curbe. A fost de-

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 intersectie a unui con circular drept cu un plan. Depinz^and de unghiul dintre plan si planul perpendicular 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.

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 intersectie 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: Locul geometric al punctelor An este parametrizat prin (Cn1 ) r() = sin(a=n) iar locul geometric al punctelor Bn este parametrizat prin (Cn2 ) r() = tan(a=n) Cazuri particulare: C11 este dreapta y = a, iar C12 este curba kappa, C21 este trisectoarea Delanges, C31 este trisectoarea Maclaurin. Figuri: Cn1 (a) a = n = 1 (b) a = 1; n = 2 (c) a = 1; n = 3. 244

Figuri: Cn2 (a) a = n = 1 (b) a = 1; n = 2 (c) a = 1; n = 3.

Curba desagilor (parabola virtuala) Loc geometric: D^andu-se un cerc,

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 ^n O pe2 L, este curba desagilor. For2 2 2 a neparametric p a2: (x ? by) = 2a (x ? y ): Forma parametrica: (t) = ?m (a + bt)= 1 + t ; (a + bt)t=(1 + t ) : Figuri: t 2 [?20; 20] si (a) a = 3; b = 1 (b) a = 1; b = 0 (c) a = 0:5; b = 1.

Curba dracului2 Istoric: A fost studiata de Cramer (1750). Forma 2 ? b2 ) ? x2(x2 ? a2 ) = 0: Functia raza: r() = neparametric a : y (y 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 cercurile de raza a, cu centrele pe dreapta L. Forma neparametrica: y2 (x2 +y2 ) = a2 x2: 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 par a 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 parametric a: (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 +pc2 ? a2 ? b2 )2 + 4a2y2 (x2 + y2 ? b2 ) = 0: Functia raza: r2() = b2 ? (a sin   c2 ? a2 cos2 )2 : 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^anga-jos ^n origine. Fie o linie 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^arful ^n origine si o latura pe latura de jos a patratului. Unghiul creste constant de la 0 la =2. Linia si unghiul porneste ^si termina simultan miscarea. Intersectia 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^arfurile elipsei sunt de nite ca intersectiile ale elipsei cu linia ce trece prin focare. Distanta dintre v^arfuri este denumita axa majora sau axa focala. Linia ce trece prin centru si este perpendiculara pe axa focal p a este axa minora. In 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 intersectia 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 intersect2ia este o elipsa cu axa majora r= cos si semiaza r. Forma neparametrica: x =a2 + y2 =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.

Epitrohoida Istoric: Un exemplu de epitrohoida apare ^n lucrarile lui

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

((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^and b = 4a, bifoliu c^and b = 0, trifoliu c^and b = a. Figuri: (a) a = 5; b = 3 (b) a = 1; b = 4 (c) a = 1; b = 0 (d) a = b = 1.

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

^n N si o dreapta data L perpendiculara pe axa x ^n N1 . Locul geometric al intersectiei 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

ecuatiile? sunt: Forma neparametric a: x3 + y3 ? 3axy  p = 0: Forma parametrica: 3 2 3 (t) = 3at=(1 + t ); 3at =(1 + t ) : 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^and b = 02 se obtine curba lui Longchamp, descrisa: Forma3 parametrica: (t) = a(1 + t ; t(1 + t2 )); t 2 IR: Functia raza: r() = a= cos  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.

Hiperbola Loc geometric: Este locul geometric al punctelor P astfel ^nc^at

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 = pc=a; 1 < e. Cazuri particulare: o hiperbola rectangulara are excentricitatea 2, iar forma implicita standard este xy 2= 1. Forma parametrica: (t) = (a cosh t; b sinht): Forma neparametrica: x =a2 ? y2 =b2 = 1: Figuri: (a) a = b = 1 (b) a = 2, b = 1 (c) a = 1, b = 2. 252

Hipocicloida Istoric: Familia de curbe a fost studiata de Durer. Loc

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.

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 cientii (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.

Lantisor (catenary) Istoric: Ecuatia sa a fost obtinuta de Leibnitz (1691).

Loc geometric: (a) Este curba formata de un lant inextensibil perfect exibil de densitate uniforma at^arnat de doua suporturi asupra caruia actioneaza 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.

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

de mai jos, focarele se a a la (a 2; 0). Forma parametrica: (t) = ?rice a cos t=(1 + sin2 t); a sin t cos t=(1 + sin2 t) ; t 2 [0; 2): Functia raza: r2() =

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^and cercul se rostogoleste ^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 interiorul3 unui cerc de raza de 2/3 ori mai mica. Forma parametrica: (t) = a(4 cos 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). Form ? a neparametrica: x(x2 + y2 ) + y(ax + by) = 0: Form  a 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.

Ovalele cassiene Istoric: Au fost studiate de Cassini (1680), ^n relatie cu

miscarea Pam^antului si a soarelui. Observatie: Este o generalizare a lemniscatei lui Bernoulli. Loc geometric: (a) Este locul geometric al punctelor pentru care2 produsul distantei de la doua puncte xe F1 si F2 (focare) este constant b , iar distanta dintre F1 si F2 este 2a. (b) Este intersect ia unui tor cu un plan 2 + y2 + a2 )2 ? b4 ? 4a2 x2 = paralel cu axa torului. Forma neparametric a : (x p 0: Forma parametricap : (t) = M=2(cos t; sin t); t 2 [0; 2); a < b; unde M = 2a2 cos(2t) + 2 (?a4 + b4) + a4 cos2 (2t). Functia raza: r4() + a4 ? 2r2()a2 cos(2) = b4 : Cazuri particulare: daca a = b se obtine lemniscata lui Bernoulli, pentru a = 0, cercul de raza b, pentrupjaj < jbj, o curba conexa, iar daca jaj > jbj apar doua ovale. Figuri: (a) a = 3; b = 2 (b) a = b = 2 (c) a = 2:01; b = 2.

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^and M descrie cercul este ovoidul. Forma 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^at 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^arful V al parabolei 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^arful parabolei este originea axelor de coordonate. Forma neparametrica: 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^arful sau; daca doua radacini 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^at lungimea arcului AM. N se proiecteaza ^n N1 pe OA. Pe raza OM se cauta punctul P pentru care distanta OP este egala cu distanta NN1 . Locul geometric al punctelor P c^and M descrie cercul C este rodoneea de indice k. Functia raza: r() = a sin(k): Cazuri particulare: Daca k este un^ntreg atunci curba are k, respectiv 2k bucle (petale) c^and k este impar, respectiv impar. Daca k 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 caracterizat prin: Functia raza: r() = a sin(2): Forma neparametrica: (x2 +y2 )3 = 4a2 x2y2 : For? ma 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 2 b = 0, pse obtindoua linii p care coincid: x = 0, daca a = 0, doua linii paralele, 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^ana la centrul torului, atunci forma implicita a curbei este (x2 + y2 + r2 ? a2 + c2 )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^ospital (1692). Forma neparametrica: 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 2 + y2 ? fost3 studiata2 ulterior de Cayley. Form a neparametric a : 4(x ax) = 27a 3(x2 + y2 )2 : Forma parametrica: (t) = (4a cos4(t=2)(3 ?1 + 2 cos t); 4a cos (t=2) sin(3t=2)); t 2 [0; 4): Functia raza: r() = 4a cos (=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); pentru n = 2, adica r2 ()2 = a22 , spirala Fermat (caz particular pentru spirala parabolica (r(theta) ? a) = b ); spirala parabolica generala este de nita prin r() = ap 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^arja). Figuri: (a) Spirala Arhimede a = 2,  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;

R





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^antului, tin^and seama de rotatia uniforma a Pam^antului ^n jurul axei polilor. Functia raza: r() = a ? b2 : 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, atunci curba este o spirala echiunghiulara. Forma parametrica: (t) = (aebt cos t; aebt sin t); t 2 [0; 1): Functia raza: r() = aeb ;  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^at jPF j2jPF 0j = hjOP j2 + k, unde F si F 0 sunt doua puncte xe (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 ? (2c4 2 + 2 h)x + (2c ? h)y = k ? c : Cazuri particulare: In cazul ^n care k = c , se obtine lemniscata lui Booth. Daca, ^n plus, h = 2c2 , atunci curba degenereaza ^n cercurile lui Villarceaux. C^and h = 0 se obtini ovalele cassiene. Figuri: (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.

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 cos  ? + x): Functia raza: r() = acos(2)=  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 parcurge 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.

Superelipsa (curba Lame) Istoric: Familia de curbe a fost studiata de

Lame (1818). Forma neparametrica: (x=a)2=n +n (y=b)2n=n = 1; unde n este un numar real. Forma parametrica: (t) = (a cos t; b sin t); t 2 [0; 2) Cazuri 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^ant. Figuri: (a) a = 1; m = 1 (b) a = 1; m = 1=2 (c) a = 1; m = 2 (d) a = 1; m = 5.

Tractricea (curba echitangentiala, tractoarea) Istoric: A fost studiata

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^and roata din fata atinge (0,0), iar roata din spate (0,1), ciclistul 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)))); p 2 2 t 2 (0; ): Forma neparametrica: pentru a = 1: x = a log (a ? a ? y )=y + p a2 ? y2 : Figuri: (a) a = 5 (b) a = ?3 (c) a = 10.

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^ospital) Istoric: A fost mentionata prima data ^n clasi carea curbe-

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^and P 2descrie 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.

Trisectoarea Longchamps Loc geometric: Se considera un cerc de raza

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 intersectiei P a tangentelor ^n M si N la cerc, c^and M descrie cercul. Form?a neparametrica: x(x2 ? 3y2 ) = a(x2 + 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 (trisecanta) Maclaurin Istoric: Este curba lui Colin Maclaurin (1742). Funct ? ia raza: r() = a= cos(=3);  2 (0; 3): Forma parametrica: (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^and cercul aluneca 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 intersectia acestei linii cu L. Curba este locul geometric al intersectiilor 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.

7.3 Curbe spatiale

Astroid tridimensional Forma parametrica: pentru t 2 [0; 2), (t) = n n

(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. 266

Curba bicilindrica Loc geometric: Este intersectia unui cilindru de raza a cu un cilindru de raza b p ale caror axe sunt perpendiculare. Forma parametrica: (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 intersectia 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

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

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.

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 parametric a: 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 z = b arctan xy : 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^and un unghi constant. Forma parametrica: (t) = (a cos t ? 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 para2 + y2 + z 2 = r2 iar cilinmetrica: Daca sfera are raza este descris a prin x drul este (x ?pa)2 + y2 ? (r ? a)2 = 0, (t) = (r + 2(a ? r) sin2 t; (2a ? 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^arful 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^and generatoarele paralele cu axa paraboloidului iar curba directoare ind o parabola situata ^ntr-un plan perpendicular pe paraboloidului cu focarul pe aceast ?axa  a axa. Forma parametrica: (t) = (t2 ? 4a2)=(4a); t; (t2 + 4a2)2 =(32a2p) : Figuri: (a) a = 2, p = 1 (b) a = p = 2.

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 hiperboloidic a Forma parametrica: Este de nita prin functia (t) = r (cos t + sin t k2 t=(r2 + k2 ); sin t ? cost k2t=(r2 + k2); rkt=(r2 + 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.

7.4 Suprafete

Banda Mobius Loc geometric: Este suprafata rezultata prin rotirea unui

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.

Colt p ul conic al lui Wallis Forma parametrica: (u; v) = (vpcos u; v sin u; c a2 ? b2 cos2 u); (u; v) 2 [0; 2)  IR: Figuri: (a) a = 1; b = 3; c = 1, (b)

a = 1; b = 1; c = 1 (c) a = 1; b = 1=2; c = 1.

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.

2 + y2 ): Forma paraConoidul Plucker Forma neparametrica: z = 2xy=(x 2 2 2 metrica: (u; v) = (u; v; 2uv=(u + v )); (u; v) 2 IR : 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.

Cross Cap Forma parametrica: Fie g : IR3 ! IR3; g(x; y; z) = (yz; 2xy; x2 ? 2 y ) Suprafata Cross-Cap, de raz2a a, este gsfera(a). Astfel 2o parametrizare a acestei suprafete este (u; v) = a (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.

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^anza: (x=a)2 + (y=b)2 ? (z=c)2 = 1 9. hiperboloid cu doua p^anze: (x=a)2 + (y=b)2 ? (z=c)2 = ?1 Cvadrice Forma neparametrica: Pi+j+k4 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.

p

Torul ( e torul cu raza mare 40 si raza mica p eliptic, este un alt4 exemplu 12 este descris prin: x + 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 yz2 2 + 0:04y + 0:04 = 0: ,,Jgheabul" este de nit prin ecuatia implicita y = x z : 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 parabolic este obtinut, de exemplu, pentru raza mare 40 si raza mica p 12, din x4 + 2x2y2 ? 2x2z ? 104x2 + y4 ? 2y2 z + 56y2 + z 2 + 104z + 784 = 0: 4? Curb a obtinut a prin2rotirea unei concoide Nicomedes este2 descris a prin 99x 3 2 2 2 2 2 2 4 2 2 4 2 40x +98x y +98x z ? 99x ? 40xy ? 40xz ? y ? 2y z +y ? z +z = 0: Lemniscata Gerono ^n 3D se obtine prin rotire ^n jurul axei x a curbei din 2D, din x4p? x2 + y2 + z 2 =p0: Torul hiperbolic se obtine, de exemplu pentru raza 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 + y22+ z 24 = 0: Variant a a curbei 2 + z 4 = 0: Un dracului ^n spatiu este data de x42 + 2x22z 2 ? 0:36x ? y + 0:25y cilindru cubic este de exemplu y + z = 1=2x2 (x + 1): O suprafata bicubica 4 4 4 este x + y + z ? 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^amb axial drept (elicoidul drept cu plan director, 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^and expansiunea Taylor pentru sin, cos^n z = 0; se obtine o ecuatie aproximativa ?1=6xz 3 +xz+1=2yz 2 ?y = 0: (b) Elicoidul str^amb axial2 oblic: Forma parametrica: (u; v) = (v cos u; v sin u; av+ ku); (u; v) 2 [0; 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^amb axial oblic cu a = k = 1 (c) Elicoid str^amb axial drept cu a = 1; b = 2 (d) 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 semiaxele a; b; c paralele cu axele de coordonate. Forma neparametrica: x2=a2 + y2 =b2 + z 2 =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 Form a parametrica: Este de nit parametric prin (u; v) = ((a cos u cos v)3 ; (b sin u cos v)3 ; (c sin v)3 ); (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.

stereogra c Forma parametrica: Este de nit prin: (u; v) = ?Elipsoid a(1 ? u2 ? v2 )=(1 + u2 + v2 ); 2bu=(1 + u2 + v2 ); 2cu=(1 + u2 + v2 ) ; u; v 2 [?d; d]2: Figuri: (a) a = 1; b = 3; c = 5; d = 2:8 (b) a = b = c = 1; d = 2 (c) a = 2; b = 3; c = 1; d = 3=2.

Hiperboloid cu o p^anza Forma neparametrica: x2 =a2 + y2 =b2 ? z 2=c2 = 1: 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^anze Forma neparametrica: x2 =a2 ? y2 =b2 ? 2 2 z =c = 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 Form a neparametric a: Suprafata ^n forma de lacrima este de nta 2 2 4 prin ecuatia y + z = 1=2x (x + 1): Suprafata iluminata: Suprafata ^n forma de lacrima.

Nod toroidal Loc geometric: Prin alunecarea centrului unui cerc pe un nod

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

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.

p Palaria mexicana Forma neparametrica: y = sin(4 x2 + z 2): Figuri: (a)

de nita explicit si Suprafata iluminata: (b) aproximata prin sfere de raze mici. 282

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: u(1 + sin u) + r cos u cos v; 0  u <  x(u; v) = 66 cos cos u(1 + sin u) + r cos(v + );  < u  2 n 16 sinu y(u; v) = 16 sinu;+ r sin u cos v; 0 < uu 1 torul nu are intersectie cu sine ^nsusi. In cazul clasic a = 0. Figuri: (a) a = 1 (b) a = 0 (c) a = ?1=2.

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) aproxi-

mare cu sfere mici.

291

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

%i #i %i I I i I i

Continuare linie comand alta comand~ alta comandalta comandalta comandalta comand: : alta comandalta comandalta Incarcare sier read " s" quiet load(" s")$ read(` s`);

Ies

quit

meniu

quit(); quit Quit[]

meniu quit quit; Precedenta %