Mate

309
 

Transcript of Mate

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

Figura 1.1: Clasi care software

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

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^t calcule simbolice c^t si a a calcule numerice. Software-ul numeric este utilizat pentru rezolvarea numerica a problemelor matematice precum: probleme de aproximare, sisteme de ecuatii liniare si neliniare, algebrice si diferentiale. Software-ul numeric este o unealta importanta ^n dezvoltarea software-ului de aplicatii tehnic si stiinti c.

1948-1960

1.2 Scurta istorie a software-ului matematic

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

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

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

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

1966-1970

1971-1980

Computer Algebra.

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

5

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

de efectuarea de integrari numerice.

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

1981-1990

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

1991-1999

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

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

8

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

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

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

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

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

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

Ordin

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

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

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

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

Cerinte ^n design-ul de software

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

Conceptul de cutie neagra

Testare

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

Pro ler

14

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

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

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

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

Portabilitate

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

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

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

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

Prototipizarea

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

1. 2. 3. 4.

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

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

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

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

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

Cost

19

20

3. Software numeric3.1 Numerica pe calculatorSolutionarea 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 numericeliza 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 20Matematica numerica si procesarea datelor numerice trateaza designul, ana-

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

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

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

3.4 Erori

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

Clasi carea erorilor

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

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

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

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

x k=0 (2k)!

2k

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

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

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

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

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

p

r q

q

Erori de rotunjire

Erori de date

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

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

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

3.6 Date numerice si operatii numericeale datelor matematice. Calculele clasice se bazeaza pe numere reale, un set 27

Date matematice Datele matematice fundamentale Numerele sunt unitatile fundamentale

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

Date algebrice Numerele reale pot utilizate pentru crearea obiectelor-date

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

Date analitice Sunt e functii e aplicatii de tip mapare (domeniul functiilorconsista ^n mod tipic ^ntr-un numar in nit de numere).

Datele numerice pe calculator

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

Ascunderea informatiei este un principiu fundamental ^n stiinta calculatoarelor

Date numerice fundamentale Bitul este unitatea fundamentala a datelor

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

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

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

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

Operatii numerice

29

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

3.7.1 Publicatii stiinti ce

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

3.7.2 Biblioteci de programe

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

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

tory, New Mexico, USA

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

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

3.7.3 Pachete de programe

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

ItPack este un pachet software construit pentru solutia iterativa a sistemelor

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

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

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

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

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

3.7.4 Servicii de distributie de software

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

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

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

34

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

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

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

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

Figura 3.2: Colectia NetLib

35

software TOMS: programe publicate ^n Transactions on Mathematical Software

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

accesibile prin indicarea numarului de ordine din revista. Acestea pot obtinute prin e-mail (send index la [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

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

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

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

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

36

Figura 3.3: Cautarea pe baza de Nhse

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

Cain

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

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

Sistemele automate de select ie a componentelor software matematice reutilizabile trebuie sa utilizeze o varietate de indicatori pentru a determina cerintele utilizatorului. Exemp