METODE DE CALCUL NUMERIC MATRICEAL. ALGORITMI FUNDAMENTALI

Σχετικά έγγραφα
Metode iterative pentru probleme neliniare - contractii

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

Sisteme diferenţiale liniare de ordinul 1

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Esalonul Redus pe Linii (ERL). Subspatii.

Metode de interpolare bazate pe diferenţe divizate

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

Curs 1 Şiruri de numere reale

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

Noţiuni introductive

Sisteme liniare - metode directe

Asupra unei inegalităţi date la barajul OBMJ 2006

Curs 4 Serii de numere reale

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

Spatii liniare. Exemple Subspaţiu liniar Acoperire (înfăşurătoare) liniară. Mulţime infinită liniar independentă

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

Seminar 5 Analiza stabilității sistemelor liniare

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

III. Reprezentarea informaţiei în sistemele de calcul

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Matrice. Determinanti. Sisteme liniare

I. Noţiuni introductive

Integrala nedefinită (primitive)

2 Transformări liniare între spaţii finit dimensionale

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Subiecte Clasa a VIII-a

1.3 Baza a unui spaţiu vectorial. Dimensiune

Curs 2 Şiruri de numere reale

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

1.3. Erori în calculele numerice

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Laborator 6. Integrarea ecuaţiilor diferenţiale

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă

MARCAREA REZISTOARELOR

Subiecte Clasa a VII-a

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

METODE NUMERICE: Laborator #7 Calculul valorilor proprii si vectorilor proprii prin metodele puterii. Metoda Householder

Criptosisteme cu cheie publică III

CURS 11: ALGEBRĂ Spaţii liniare euclidiene. Produs scalar real. Spaţiu euclidian. Produs scalar complex. Spaţiu unitar. Noţiunea de normă.

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

Lucrarea de laborator nr. 2

III.2.2. Reprezentarea în virgulă mobilă

prin egalizarea histogramei

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

Conf.dr.ing. Gabriela Ciuprina

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

METODE NUMERICE: Laborator #5 Metode iterative pentru rezolvarea sistemelor: Jacobi, Gauss-Siedel, Suprarelaxare

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

riptografie şi Securitate

5.4. MULTIPLEXOARE A 0 A 1 A 2

Problema a II - a (10 puncte) Diferite circuite electrice

Vectori liberi Produs scalar Produs vectorial Produsul mixt. 1 Vectori liberi. 2 Produs scalar. 3 Produs vectorial. 4 Produsul mixt.

z a + c 0 + c 1 (z a)

Erori si incertitudini de măsurare. Modele matematice Instrument: proiectare, fabricaţie, Interacţiune măsurand instrument:

Cursul Măsuri reale. D.Rusu, Teoria măsurii şi integrala Lebesgue 15

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare

2. Sisteme de forţe concurente...1 Cuprins...1 Introducere Aspecte teoretice Aplicaţii rezolvate...3

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

CURS XI XII SINTEZĂ. 1 Algebra vectorială a vectorilor liberi

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

Examen AG. Student:... Grupa: ianuarie 2016

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Seminar Algebra. det(a λi 3 ) = 0

Functii Breviar teoretic 8 ianuarie ianuarie 2011

Toate subiectele sunt obligatorii. Timpul de lucru efectiv este de 3 ore. Se acordă din oficiu 10 puncte. SUBIECTUL I.

CONCURS DE ADMITERE, 17 iulie 2017 Proba scrisă la MATEMATICĂ

Examen AG. Student:... Grupa:... ianuarie 2011


RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

8 Intervale de încredere

O generalizare a unei probleme de algebră dată la Olimpiada de Matematică, faza judeţeană, 2013

1. Sisteme de ecuaţii liniare Definiţia 1.1. Fie K un corp comutativ. 1) Prin sistem de m ecuaţii liniare cu n necunoscute X 1,...

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

Nicolae Cotfas ELEMENTE DE EDITURA UNIVERSITĂŢII DIN BUCUREŞTI

Subiecte Clasa a V-a

Concurs MATE-INFO UBB, 1 aprilie 2017 Proba scrisă la MATEMATICĂ

Proiectarea Algoritmilor 2. Scheme de algoritmi Divide & Impera

Laborator 11. Mulţimi Julia. Temă

1.4 Schimbarea bazei unui spaţiu vectorial

Criterii de comutativitate a grupurilor

Să se arate că n este număr par. Dan Nedeianu

Aparate de măsurat. Măsurări electronice Rezumatul cursului 2. MEE - prof. dr. ing. Ioan D. Oltean 1

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Metode directe pentru sisteme de ecuaţii liniare

MODELE DE TESTE GRILĂ PENTRU ADMITEREA DISCIPLINA: ALGEBRĂ (cls. a IX-a, a X-a, a XI-a)

Conice - Câteva proprietǎţi elementare

V O. = v I v stabilizator

Lucian Maticiuc CURS I II. 1 Matrice şi determinanţi. Sisteme de ecuaţii liniare. 1.1 Matrice şi determinanţi

Aplicaţii ale principiului I al termodinamicii la gazul ideal

VII.2. PROBLEME REZOLVATE

Progresii aritmetice si geometrice. Progresia aritmetica.

CURS 5 Spaţii liniare. Spaţiul liniar R n

Transcript:

METODE DE CALCUL NUMERIC MATRICEAL. ALGORITMI FUNDAMENTALI Bogdan Dumitrescu Corneliu Popeea Boris Jora Partea I

Tuturor studenţilor, foşti, actuali sau viitori, precum şi copiilor noştri Andrei Octavia Monica Sebastian Corneliu Şerban

i Cuvânt introductiv Lucrarea de faţă, prima de o asemenea amploare în limba română, este construită pe structura cursului de Calcul numeric, predat de autori la Facultatea de Automatică şi Calculatoare a Universităţii Politehnica din Bucureşti. Lucrarea expune, în manieră eminamente algoritmică, metodele de rezolvare a problemelor fundamentale de calcul din algebra matriceală, care constituie primele şi, de cele mai multe ori, principalele componente ale celor mai diverse aplicaţii din inginerie, economie şi numeroase alte ramuri ale ştiinţei. În afara studenţilor din facultăţile cu profil tehnic sau economic, lucrarea poate fi utilă tuturor celor care, fie ei studenţi, cadre didactice, ingineri sau cercetători, doresc să utilizeze cele mai moderne instrumente de calcul numeric matriceal. Pentru înţelegerea noţiunilor prezentate, cititorul trebuie să posede cunoştinţe minime de matematică, la nivelul celor dobândite în liceu sau în primul an de facultate. Pentru orientare, fiecare capitol începe cu o trecere în revistă a bazelor matematice ale problemelor de calcul studiate. De asemenea, cititorul ar trebui să fie capabil a se exprima într-un limbaj de programare de nivel înalt; această condiţie nu e strict necesară, dar constituie un avantaj, pentru că îi permite să se concentreze asupra ideilor şi nu a detaliilor de implementare ale acestora. Cartea conţine 7 capitole, descrise în câteva cuvinte mai jos. La început se află o bibliografie de bază, cuprinzând lucrări de largă utilizare, referite cu cifre romane, care oferă o privire de perspectivă asupra întregului domeniu. În final se găseşte o a doua bibliografie, în general formată din articole (referite cu cifre arabe) privind aspecte specifice ale problemelor tratate şi destinată cititorului care doreşte să adâncească studiul dincolo de textul de faţă. Pentru facilitarea lecturii, recomandăm consultarea listelor de notaţii şi de prescurtări uzuale, aflate câteva pagini mai departe. Capitolul 0, numerotat astfel pentru a sublinia caracterul său de iniţiere în domeniu, prezintă specificul calculului numeric şi justifică necesitatea existenţei cărţii de faţă. Este vorba aici despre: reprezentarea numerelor reale în virgulă mobilă, proprietăţile (uneori neaşteptate ale) operaţiilor cu astfel de numere precum şi mecanismele de apariţie inevitabilă a erorilor numerice. Este apoi considerată perechea formată din problema de calcul şi algoritmul de rezolvare, relativ la care sunt defi-

ii nite noţiunile fundamentale de condiţionare şi, respectiv, stabilitate numerică. În încheiere, este aruncată o privire asupra modului în care arhitectura calculatorului influenţează concepţia algoritmilor. Capitolul 1 este dedicat expunerii noţiunilor primare ale algebrei matriceale (vectori, subspaţii, matrice de diverse tipuri şi proprietăţile acestora), constituind totodată o introducere în problematica specifică a capitolelor următoare. Algoritmii prezentaţi rezolvă unele probleme simple, dar fundamentale, cum ar fi înmulţirea a două matrice, sau unele cazuri particulare, de exemplu cel al matricelor triunghiulare, ale unor probleme mai dificile (rezolvarea sistemelor liniare, calculul valorilor şi vectorilor proprii). Aceşti algoritmi sunt larg utilizaţi în continuare, ca elemente constructive primare. Capitolul 2 tratează metodele directe de rezolvare a sistemelor liniare Ax = b, cu matrice A nesingulară, prezentând procedura de eliminare gaussiană, inclusiv strategiile de pivotare adecvate, precum şi versiunile compacte ale acestei metode bazate pe factorizarea LU a matricei A. În afara matricelor de formă generală, sunt studiate şi cazurile, des întâlnite în practică, ale matricelor bandă, simetrice şi simetric pozitiv definite. De asemenea, sunt abordate probleme conexe, cum ar fi calculul inversei şi al determinantului. Capitolul 3 descrie metodele de rezolvare în sensul celor mai mici pătrate (CMMP) a sistemelor liniare Ax = b, în care numărul ecuaţiilor diferă de cel al necunoscutelor, deci A este o matrice dreptunghiulară de formă generală. În acest caz se utilizează metode de eliminare specifice, bazate pe aplicarea transformărilor ortogonale (reflectori Householder, rotaţii Givens etc.) iar conceptul central este cel de factorizare QR. Dacă matricea A nu este de rang maxim, se recomandă utilizarea factorizării ortogonale complete, care are la bază un algoritm de triangularizare cu pivotarea coloanelor. Sistemele liniare de acest tip apar frecvent în prelucrarea datelor experimentale, statistică, identificarea sistemelor etc. Capitolul 4 expune principalele metode de calcul al valorilor şi vectorilor proprii ai unei matrice A. Este prezentat în detaliu algoritmul QR, care aduce matricea A la forma Schur, reală sau complexă, pornind de la forma de principiu a algoritmului, ale cărei proprietăţi matematice sunt uşor de analizat, şi ajungând la variantele relativ sofisticate sub care acesta este implementat în programele profesionale. Alături de cazul general este tratat şi cel al matricelor simetrice. Nu sunt uitaţi alţi algoritmi importanţi, utili în cazuri particulare, cum ar fi metodele puterii, puterii inverse, bisecţiei sau Jacobi. Cunoaşterea valorilor proprii este utilă în analiza stabilităţii sistemelor dinamice, în studiul vibraţiilor (pentru clădiri, poduri, avioane) şi în multe alte probleme aplicative majore. Capitolul 5 prezintă metodele de calcul al descompunerii valorilor singulare (DVS), care constituie instrumentul cel mai sigur de rezolvare a numeroase probleme din algebra matriceală, cum ar fi determinarea rangului, calculul unor norme matriceale, construcţia bazelor pentru diverse subspaţii, rezolvarea în sensul celor mai mici pătrate a sistemelor cu matrice de rang nemaxim. Algoritmul DVS este o adaptare ingenioasă a algoritmului QR simetric, cunoscut din capitolul anterior. Utilizarea DVS este ilustrată considerând unele variante ale problemei CMMP, de exemplu CMMP totală sau cu restricţii, frecvent întâlnite în aplicaţii.

Capitolul 6 consideră calculul valorilor şi vectorilor proprii generalizaţi ai unei perechi de matrice (A, B). Este prezentat algoritmul QZ, care aduce perechea la forma Schur generalizată, precum şi problema conexă a calculului bazelor ortogonale pentru subspaţii de deflaţie. Noţiunile şi algoritmii studiaţi aici sunt de mare utilitate în probleme care apar, de exemplu, în teoria sistemelor precum şi în analiza circuitelor electrice sau mecanice cu elemente ideale. Principalele rezultate ale expunerii sunt concretizate sub formă de algoritmi de calcul descrişi într-un pseudocod extrem de apropiat de implementarea directă într-un limbaj de programare de nivel înalt. Algoritmii au fost testaţi de autori în mediul de programare MATLAB; cu toate acestea, orice observaţii şi propuneri din partea cititorilor, care să conducă la eliminarea unor erori sau la îmbunătăţirea performanţelor, sunt binevenite şi pot fi transmise la adresa menţionată mai jos. Pentru majoritatea algoritmilor sunt precizate proprietăţile de stabilitate numerică, de obicei într-o secţiune specială dedicată acestei teme, în fiecare capitol. Menţionăm că o altă secţiune expune întotdeuna informaţii despre condiţionarea problemelor de calcul studiate; în acest fel, cititorul va avea o imagine clară a acurateţii cu care se pot obţine soluţiile numerice ale diverselor probleme studiate. De asemenea, fiecare capitol conţine în final o secţiune ce prezintă rutine (funcţii) din biblioteca LA- PACK (Linear Algebra PACKage) şi din limbajul MATLAB (MATrix LABoratory), reprezentative pentru problemele de calcul studiate. LAPACK [XV] implementează cei mai eficienţi şi siguri algoritmi de calcul numeric matriceal şi este instrumentul cel mai utilizat în acest domeniu. MATLAB [XIV] are o componentă didactică mai pronunţată, îmbinând o interfaţă utilizator simplă cu o calitate remarcabilă a algoritmilor. De asemenea, fiecare capitol este însoţit de un set de probleme, în total peste 200, ale căror rezolvări complete sau parţiale se găsesc în partea finală a lucrării. Recomandăm cititorului să consulte indicaţiile sau rezolvarea propusă de autori numai pentru verificarea soluţiei personale sau după tentative serioase de găsire a acesteia. În plus, un mare câştig pentru cititor îl poate reprezenta implementarea algoritmilor (cei de bază, din lucrare, şi cei derivaţi, în probleme) precum şi testarea funcţionării lor pe exemple numerice reprezentative. Aducem la cunoştinţa cititorilor că Grupul de Calcul Numeric din cadrul catedrei de Automatică şi Ingineria Sistemelor de la Facultatea de Automatică şi Calculatoare, din care autorii fac parte, dispune de o bibliotecă de calcul numeric matriceal scrisă în limbajul C, care conţine implementarea tuturor algoritmilor din lucrare. Cei interesaţi pot contacta autorii la următoarele adrese de e-mail bogdan,popeea,jora@lucky.schur.pub.ro Autorii mulţumesc colegilor lor prof. Paul Flondor şi conf.dr.ing. Ioan Tăbuş pentru interesul acordat şi în special pentru comentariile şi observaţiile constructive făcute pe marginea lucrării. De asemenea, autorii aduc mulţumiri doamnei redactor Viorica Fătu, de la Editura ALL Educational, pentru atenţia acordată acestei cărţi în drumul către tipar. iii Autorii

iv Bibliografie generală Pentru chestiuni teoretice de calcul matriceal: [ I ] Gantmaher F.R. Teoriia matriţ (ediţia a 2-a), Ed. Nauka, Moscova, 1966. (The Theory of Matrices, vols. 1-2, Chelsea, New York, 1959). [ II ] Horn R.A., Johnson C.R. Matrix Analysis, Cambridge University Press, Cambridge UK, 1985. [ III ] Strang G. Introduction to Linear Algebra, Wellesley-Cambridge Press, Wellesley, MA, USA, 1993. Pentru algoritmi de calcul matriceal: [ IV] Wilkinson J.H. The Algebraic Eigenvalue Problem, Clarendon Press, Oxford, 1965. [ V] Stewart G. W. Introduction to Matrix Computations, Academic Press, New York and London, 1973. [ VI ] Golub G. H., Van Loan Ch. F. Matrix Computations, Second edition, The John Hopkins University Press, Baltimore, Maryland, 1989. [ VII ] Lawson C.L., Hanson R.J. Solving Least Squares Problems, SIAM, Philadelphia, PA, USA, 1995. Pentru studiul condiţionării problemelor de calcul matriceal şi al stabilităţii numerice a algoritmilor aferenţi: [ VIII ] Stewart G.W., Sun J. Matrix Perturbation Theory, Academic Press, London, 1990. [ IX] Higham N.J. Accuracy and Stability of Numerical Algorithms, SIAM, Philadelphia PA, 1996. Pentru programe de calcul şi indicaţii de utilizare: [ X] Wilkinson J.H., Reinsch C. Handbook for Automatic Computation. Linear Algebra, Springer-Verlag Berlin, 1971. [ XI ] Smith B.T., Boyle J.M., Ikebe Y., Klema V.C., Moler C.B. Matrix Eigensystem Routines: EISPACK Guide, 2-nd ed., Springer Verlag, New York, 1974. [ XII ] Garbow B.S., Boyle J.M., Dongarra J.J., Moler C.B. Matrix Eigensystem Routines: EISPACK Guide Extension, Springer Verlag, New York, 1977. [ XIII ] Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W. LINPACK User s Guide, SIAM Publications, Philadelphia, PA, 1978. [ XIV] MATLAB User s Guide, The MathWorks Inc., Natick, MA, USA, 1992.

v [ XV] Anderson E., Bai Z., Bischof C., Demmel J., Dongarra J., Du Croz J., Greenbaum A., Hammarling S., McKenney A., Ostrouchov S., Sorensen D. LAPACK Users Guide, Second Edition, SIAM, Philadelphia PA, 1995. (http://www.netlib.org/lapack/lug) Lucrări în limba română: [ XVI ] Brânzănescu V., Stănăşilă O. Matematici speciale teorie, exemple, aplicaţii, Ed. ALL, Bucureşti, 1994. [ XVII ] Bucur C.M., Popeea C.A., Simion Gh.Gh. Matematici speciale. Calcul numeric, E.D.P., Bucureşti, 1983. [ XVIII ] Ionescu V., Varga A. Teoria sistemelor. Sinteza robustă. Metode numerice de calcul., Ed. ALL, Bucureşti, 1994. [ XIX] Iorga V., Jora B., Nicolescu C., Lopătan I., Fătu I., Programare numerică, Ed. Teora, Bucureşti, 1996. Lista de notaţii N mulţimea numerelor naturale Z mulţimea numerelor întregi R mulţimea numerelor reale C mulţimea numerelor complexe Vectori n i : p : n f vectorul cu elementele întregi n i, n i + p, n i + 2p,..., n f ; dacă p = 1, vectorul se scrie simplu n i : n f R n spaţiul liniar n-dimensional al vectorilor (coloană) x cu n componente reale x i R, i = 1 : n C n spaţiul liniar n-dimensional al vectorilor (coloană) x cu n componente complexe x i C, i = 1 : n e k, k = 1 : n baza standard a spaţiului liniar R n, respectiv C n x i, x(i) elementul vectorului x aflat în poziţia i x(i 1 : i 2 ) vectorul format din elementele din poziţiile de la i 1 la i 2 ale vectorului x (x, y) = y T x = n i=1 x iy i produsul scalar standard a doi vectori x, y R n ; în cazul complex produsul scalar este (x, y) = y H x = n i=1 x iȳ i x = (x, x) 1/2 = ( n i=1 x i 2 ) 1/2 norma euclidiană a vectorului x R n

vi x p = ( n i=1 x i p ) 1/p p-normele vectorului n-dimensional x, p 1; în calcule se utilizează în special x 1, x 2 = x şi x =max i=1:n x i Matrice R m n spaţiul liniar al matricelor cu m linii şi n coloane cu elemente reale a ij R, i = 1 : m, j = 1 : n C m n spaţiul liniar al matricelor cu m linii şi n coloane cu elemente complexe a ij C, i = 1 : m, j = 1 : n 1 I n matricea unitate de ordinul n a ij, A(i, j) elementul matricei A situat în linia i, coloana j A(i 1 : i 2, j 1 : j 2 ) blocul matricei A format din liniile de la i 1 la i 2 şi coloanele de la j 1 la j 2. Indicele :, fără altă precizare, semnifică luarea tuturor liniilor sau coloanele A T transpusa matricei (reale sau complexe) A A H conjugata hermitică a matricei (complexe) A, i.e. A H = ĀT, unde Ā este conjugata complexă a lui A A 1 inversa matricei pătrate nesingulare A, i.e. AA 1 = A 1 A = I n A T = (A 1 ) T = (A T ) 1 A H = (A 1 ) H = (A H ) 1 tra urma matricei pătrate A, i.e. suma elementelor diagonale deta determinantul matricei pătrate A λ i (A), i = 1 : n valorile proprii ale matricei pătrate A de ordin n λ(a) spectrul (de valori proprii) {λ 1 (A), λ 2 (A),..., λ n (A)} al matricei A ρ(a) = max i=1:n λ i (A) raza spectrală a matricei A cond(a) = A A 1 numărul de condiţie la inversare al matricei A ( este o normă matriceală consistentă) A + pseudoinversa normală (Moore-Penrose) a matricei A; dacă A este monică A + =(A T A) 1 A T, dacă A este epică, atunci A + =A T (AA T ) 1 σ i (A), i = 1 : p, p = min(m, n) valorile singulare ale matricei A ordonate astfel încât σ 1 σ 2... σ p 1 În calcule, vectorii se identifică cu matricele cu o singură coloană, iar scalarii se identifică cu matricele (sau vectorii) cu un singur element.

vii σ(a) mulţimea {σ 1 (A), σ 2 (A),..., σ p (A)} a valorilor singulare ale matricei A r = ranga rangul matricei A, i.e. numărul valorilor singulare nenule (A, B) = tr(b T A) (tr(b H A)) produsul scalar a două matrice reale (complexe) A F = (A, A) 1/2 norma Frobenius a matricei A, A 2 F = m n i=1 j=1 a ij 2 sau A 2 F = r i=1 σ i 2 A p = ( r i=1 σ i p ) 1/p p-normele Schatten, p 1; în calcule se utilizează în special norma-urmă A 1 = r i=1 σ i, norma Frobenius A 2 = A F şi norma spectrală A = σ 1 (A) A p = max x p =1 Ax p p-normele induse; în calcule se utilizează în special norma A 1 = max j=1:n m i=1 a ij, norma spectrală A 2 = σ 1 (A) şi norma A = max i=1:m n j=1 a ij Transformări SAT transformare de echivalenţă (bilaterală) a matricei A R m n (S şi T sunt matrice pătrate nesingulare; transformarea de echivalenţă conservă rangul, iar dacă S, T sunt ortogonale, atunci conservă şi valorile singulare) T 1 AT transformare de asemănare a matricei A R n n (transformarea de asemănare conservă valorile proprii) T T AT transformare de congruenţă a matricei A R n n (T este nesingulară; aplicată unei matrice A simetrice, transformarea de congruenţă conservă rangul şi inerţia i.e. numerele de valori proprii negative, nule şi, respectiv, pozitive) Dacă T este ortogonală, atunci T 1 = T T şi transformarea T T AT se numeşte transformare de asemănare ortogonală Prescurtări i.e. (id est) adică e.g. (exempli gratia) de exemplu, bunăoară DVS descompunerea valorilor singulare FSR(G) forma Schur reală (generalizată) FSC(G) forma Schur complexă (generalizată) FSH forma (bloc-)superior Hessenberg FVM format virgulă mobilă ITE matrice inferior triunghiulară elementară

viii LU factorizarea LU PE matrice de permutare elementară QR factorizarea QR Alfabetul grec Majuscule Minuscule Denumire Corespondentul latin A α alfa A, a B β beta B, b Γ γ gamma G, g δ delta D, d E ǫ epsilon E, e Z ζ zeta Z, z H η eta E, e Θ θ theta - I ι iota I, i K κ kappa K, k Λ λ lambda L, l M µ mü M, m N ν nü N, n Ξ ξ xi X, x O o omicron O, o Π π pi P, p P ρ rho R, r Σ σ sigma S, s T τ tau T, t Υ υ upsilon U, u Φ φ phi F, f X χ hi H, h Ψ ψ psi - Ω ω omega O, o

Cuprins 0 Concepte fundamentale 1 0.1 Reprezentarea în virgulă mobilă..................... 2 0.2 Aritmetica în virgulă mobilă....................... 7 0.3 Condiţionarea problemelor de calcul.................. 10 0.4 Stabilitatea numerică a algoritmilor.................. 12 0.5 Calităţile unui algoritm numeric.................... 15 0.6 Implicaţiile arhitecturii calculatoarelor................. 16 0.7 Probleme................................. 18 1 Algoritmi elementari 19 1.1 Vectori. Spaţiul vectorial R n...................... 19 1.2 Produs scalar. Norme. Ortogonalitate................. 24 1.3 Matrice.................................. 28 1.4 Înmulţirea matricelor........................... 32 1.5 Norme matriceale............................. 37 1.6 Matrice structurate............................ 39 1.7 Matrice bloc................................ 42 1.8 Matrice normale............................. 46 1.9 Sisteme de ecuaţii liniare......................... 49 1.10 Valori şi vectori proprii.......................... 59 1.11 Rutinele BLAS.............................. 62 1.12 Probleme................................. 67 2 Rezolvarea sistemelor de ecuaţii liniare 69 2.1 Transformări elementare......................... 70 2.2 Triangularizare prin eliminare gaussiană................ 72 2.3 Strategii de pivotare........................... 76 2.3.1 Pivotare parţială......................... 76 2.3.2 Pivotare completă........................ 78 2.4 Factorizări LU.............................. 81 2.4.1 Factorizări LU rezultate din eliminarea gaussiană....... 82 2.4.2 Factorizări LU compacte..................... 84 2.4.3 Factorizări LU prin eliminare gaussiană la nivel de bloc... 86 2.4.4 Factorizări LU compacte la nivel de bloc............ 89 2.5 Rezolvarea sistemelor liniare....................... 91

x CUPRINS 2.6 Calculul inversei şi al determinantului................. 93 2.6.1 Calculul inversei unei matrice.................. 94 2.6.2 Calculul determinantului.................... 97 2.7 Condiţionarea sistemelor liniare..................... 97 2.8 Stabilitate numerică........................... 102 2.8.1 Scalarea sistemelor liniare.................... 103 2.8.2 Rafinarea iterativă a soluţiei calculate............. 104 2.9 Sisteme bandă.............................. 105 2.10 Sisteme simetrice............................. 109 2.11 Sisteme simetrice pozitiv definite.................... 114 2.12 Rutine LAPACK şi MATLAB...................... 117 2.13 Probleme................................. 119 3 Problema celor mai mici pătrate 123 3.1 Transformări ortogonale......................... 125 3.1.1 Reflectori............................. 125 3.1.2 Rotaţii............................... 133 3.2 Transformări unitare........................... 138 3.2.1 Reflectori complecşi....................... 138 3.2.2 Rotaţii complexe......................... 142 3.3 Triangularizarea ortogonală....................... 143 3.4 Factorizarea QR............................. 149 3.4.1 Acumularea transformărilor................... 153 3.4.2 Aplicarea transformărilor.................... 155 3.4.3 Triangularizarea ortogonală la nivel de bloc.......... 156 3.4.4 Alte metode de ortogonalizare................. 160 3.4.5 Factorizarea QL......................... 162 3.5 Rezolvarea problemei CMMP...................... 162 3.5.1 Calculul pseudosoluţiei...................... 164 3.5.2 Calculul proiecţiilor....................... 167 3.5.3 Problema CMMP cu membru drept multiplu......... 168 3.5.4 Calculul pseudoinversei..................... 168 3.5.5 Alte metode de rezolvare a problemei CMMP......... 169 3.6 Sisteme liniare subdeterminate..................... 170 3.6.1 Triangularizarea ortogonală la dreapta............. 170 3.6.2 Factorizarea LQ......................... 172 3.6.3 Rezolvarea sistemelor subdeterminate............. 174 3.7 Condiţionarea problemelor CMMP................... 177 3.7.1 Preliminarii............................ 177 3.7.2 Sensibilitatea pseudosoluţiei................... 180 3.7.3 Sensibilitatea soluţiei normale.................. 182 3.8 Stabilitatea algoritmilor de triangularizare............... 183 3.8.1 Stabilitatea numerică a algoritmilor fundamentali....... 184 3.8.2 Acurateţea soluţiilor calculate.................. 185 3.8.3 Scalarea problemei CMMP................... 186 3.8.4 Rafinarea iterativă a soluţiei CMMP.............. 187

CUPRINS xi 3.9 Descompunerea ortogonală completă.................. 189 3.9.1 Triangularizarea ortogonală cu pivotarea coloanelor...... 190 3.9.2 Determinarea rangului...................... 193 3.9.3 Triangularizarea ortogonală completă............. 195 3.9.4 Descompunerea ortogonală completă.............. 197 3.9.5 Problema generală CMMP................... 197 3.10 Rutine LAPACK şi MATLAB...................... 199 3.11 Probleme................................. 200

0 CUPRINS

Capitolul 0 Concepte fundamentale ale calculului numeric Rezolvarea numerică cu ajutorul calculatorului a unei probleme de calcul se face întotdeauna pe baza unui algoritm, i.e. a unei succesiuni finite şi bine precizate de operaţii elementare (cum ar fi adunarea, înmulţirea etc.) prin care soluţia problemei este calculată în funcţie de datele iniţiale. Deşi matematica furnizează deseori, în demonstraţiile numite constructive, algoritmi de rezolvare a problemelor pe care le tratează, s-a dovedit că de multe ori implementările numerice ale acestor algoritmi au dezavantaje majore care îi fac de nefolosit. Discrepanţa între corectitudinea matematică a unui algoritm şi adecvarea lui la specificul calculului numeric practic poate proveni din două cauze importante. Una, evidentă, constă în (eventuala) complexitate (în ce priveşte numărul operaţiilor de executat şi memoria ocupată de date), care poate duce fie la timpi de execuţie foarte mari, deci nepractici, fie, pur şi simplu, la imposibilitatea execuţiei programului care implementează algoritmul. A doua cauză, mai subtilă, o constituie erorile care însoţesc calculul numeric; prin acumulare, acestea pot periclita acurateţea rezultatului. O serie de erori sunt inerente, cum ar fi cele care apar la determinarea datelor din măsurători experimentale. Altele sunt legate de algoritmul de calcul utilizat, care se poate baza pe simplificări în modelarea unor fenomene fizice sau poate proveni dintr-o metodă matematică implicând o infinitate de operaţii, din care, prin trunchiere, se reţine doar un număr finit de operaţii; în ambele cazuri, prin natura lucrurilor, algoritmul va furniza o soluţie aproximativă. În fine, există erori având cauze specifice calculului numeric, care operează cu numere reale (şi nu doar cu numere întregi); de acestea ne vom ocupa mai pe larg. Desigur, numerele reale sunt reprezentate în memoria calculatorului într-un format bine precizat şi ocupând un număr relativ mic de locaţii de memorie, de exemplu 4 sau 8 octeţi; astfel, o infinitate de numere este reprezentată printr-un număr finit de combinaţii de biţi. De aici o primă sursă de erori, cele de reprezentare. Apoi, pot apărea erori şi la efectuarea operaţiilor cu numere reale aflate în memoria calculatorului, erori numite de rotunjire; aceasta nu se întâmplă pentru că unitatea

2 CAPITOLUL 0. CONCEPTE FUNDAMENTALE centrală (microprocesorul, de exemplu) ar greşi la calcule, ci, din nou, datorită faptului că numerele reale sunt reprezentate într-un format finit, atât în memorie, cât şi în unitatea centrală. Prin aceasta, calculul cu numere reale diferă fundamental de cel cu întregi. Vom obţine 1 + 2 = 3 pe orice calculator, în schimb 0.1 + 0.2 0.3 pe orice calculator (doar dacă nu se folosesc programe speciale!); de exemplu pe un calculator şi într-un limbaj de programare pe care nu le precizăm adunând 0.1+0.2 şi scăzând din rezultat 0.3 nu obţinem 0, aşa cum ne-am aştepta, ci aproximativ 5.5 10 17 ; e drept, eroarea este infimă. Pericolul apare în cazul acumulării unor astfel de mici erori, acumulare care poate duce la degradarea uneori fatală a rezultatului produs. În acest capitol ne vom ocupa de aspecte specifice elementare ale calculului numeric: modul de reprezentare a numerelor reale, felul în care se apreciază calitatea unui algoritm numeric, cuantificarea efectului erorilor de rotunjire asupra acurateţii soluţiei numerice a unei probleme; acest ultim scop face obiectul analizei numerice şi este, în general, dificil de atins. 0.1 Reprezentarea în virgulă mobilă Fie x şi ˆx numere reale, ˆx fiind interpretat ca o aproximare a lui x. Vom prezenta două măsuri naturale ale calităţii aproximării. Eroarea absolută (cu care ˆx aproximează x) se defineşte prin = x ˆx. Dacă x 0, atunci eroarea relativă se defineşte prin ε = x ˆx x = x. Dacă x R n, se înlocuieşte în relaţiile de mai sus valoarea absolută cu o normă vectorială (vom discuta despre norme vectoriale în capitolul 1). Exemplul 0.1 Fie x = 1.0, şi ˆx = 0.999 o aproximare a sa. Atunci = 10 3 şi ε = 10 3. Dacă ŷ = 0.009 este o aproximaţie a lui y = 0.01, atunci eroarea absolută este aceeaşi ca în cazul precedent, = 10 3, dar eroarea relativă este de o sută de ori mai mare: ε = 10 1. Raportându-se la valoarea lui x, eroarea relativă este mult mai adecvată pentru estimarea calităţii aproximării ˆx. Erorile de reprezentare apar datorită memorării în calculator a numerelor reale printr-o secvenţă finită de simboluri (cifre binare). Pentru a prezenta o estimare a acestor erori, să reamintim bine cunoscuta reprezentare poziţională a numerelor reale. Fie β N, β 2, baza de numeraţie; C = {0, 1,..., β 1}, mulţimea cifrelor în baza β, adică primele β numere naturale.

0.1. REPREZENTAREA ÎN VIRGULĂ MOBILĂ 3 Se ştie că orice număr x R poate fi scris unic sub forma unei secvenţe infinite x = sa n 1 a n 2... a 0.a 1 a 2 a 3..., (0.1) care nu se termină printr-o secvenţă infinită de cifre egale cu β 1 şi în care a i C, iar s este semnul, s {+, }. Valoarea lui x este ( n 1 ) x = s a i β i + a i β i. (0.2) i=0 Convenim să eliminăm din scriere secvenţa infinită de zerouri finale, atunci când este cazul. Să exemplificăm relaţiile (0.1) şi (0.2). Exemplul 0.2 Numărul în baza 10 i=1 3.25 = 3 10 0 + 2 10 1 + 5 10 2 se reprezintă în baza 2 în modul următor (verificaţi egalitatea): 11.01 = 1 2 1 + 1 2 0 + 0 2 1 + 1 2 2. În ambele baze, reprezentările au un număr finit de cifre. În schimb, numărul exprimat simplu în baza 10: 0.1 = 1 10 1 are o reprezentare de lungime infinită în baza 2 (verificaţi din nou egalitatea): 0.0001100110011... = (2 4 + 2 5 ) În baza 10, următoarele două secvenţe 0.99999... 1.00000... 2 4k. reprezintă acelaşi număr real. Reprezentările binare corespunzătoare sunt 0.11111... 1.00000... k=0 În ambele situaţii, reprezentarea acceptată este 1.0000... Evident, reprezentarea numerelor reale pe calculator poate avea doar un număr finit de cifre şi deci, prin natura ei, este aproximativă. O bună aproximare printr-o secvenţă finită de lungime fixată trebuie să asigure: un domeniu suficient de mare de numere reprezentate; o eroare relativă de reprezentare suficient de mică; o distribuţie uniformă a erorii relative de reprezentare.

4 CAPITOLUL 0. CONCEPTE FUNDAMENTALE Un bun compromis în satisfacerea acestor cerinţe este dat de aşa numitul Format Virgulă Mobilă (FVM). Definiţia 0.1 Un Format Virgulă Mobilă (FVM) este definit de trei întregi (β, t, p), cu următoarea semnificaţie: β baza de numeraţie (β 2); t precizia, adică numărul de cifre semnificative ( lungimea mantisei); p numărul de cifre ale exponentului. Un număr în virgulă mobilă este o pereche (f, e), unde f = ±0.f 1 f 2...f t, f 1 0, f i C este un număr fracţionar cu semn (plus sau minus), normalizat (i.e. f 1 0), cu t cifre, denumit mantisă, iar e = ±e 1 e 2... e p este un întreg cu semn, cu p cifre, numit exponent. Valoarea reală asociată numărului în virgulă mobilă (f, e) este x = f β e. Fie L valoarea minimă admisă a exponentului (de exemplu L = ρ...ρ, unde }{{} p ρ = β 1) şi U cea maximă (de exemplu U = L). Se observă că toate numerele în virgulă mobilă x satisfac: β L 1 = m x M = β U (1 β t ) adică domeniul reprezentării în virgulă mobilă este intervalul R = [ M, M]. Desigur, pentru majoritatea reprezentărilor pe calculator, β = 2 (se mai foloseşte, de exemplu, β = 16 şi chiar β = 10). Exemplul 0.3 Să considerăm FVM cu (β, t, p) = (2, 2, 1). Atunci L = 1, U = 1, m = 2 2 = 0.25 10, M = 2(1 2 2 ) = 1.5 10. Numerele reale care au o reprezentare exactă în acest FVM sunt: x 1 = ( 0.11, +1) = 1.5 10 x 7 = (+0.10, 1) = 0.25 10 x 2 = ( 0.10, +1) = 1.0 10 x 8 = (+0.11, 1) = 0.375 10 x 3 = ( 0.11, 0) = 0.75 10 x 9 = (+0.10, 0) = 0.5 10 x 4 = ( 0.10, 0) = 0.5 10 x 10 = (+0.11, 0) = 0.75 10 x 5 = ( 0.11, 1) = 0.375 10 x 11 = (+0.10, +1) = 1.0 10 x 6 = ( 0.10, 1) = 0.25 10 x 12 = (+0.11, +1) = 1.5 10 şi vor fi folosite pentru reprezentarea (aproximativă) a tuturor numerelor reale din intervalul [ 1.5, 1.5]. Reprezentarea geometrică a tuturor acestor numere pe axa reală este prezentată în figura 0.1. Numerele cu reprezentare exactă în virgulă mobilă sunt relativ uniform distribuite; mai precis, x i x i 1 / x i are aproximativ aceleaşi valori pentru orice i. Exemplul 0.4 Un FVM pe 32 biţi poate fi următorul: (β, t, p) = (2, 24, 7). Doi biţi sunt atribuiţi reprezentării semnelor mantisei şi exponentului; deoarece primul

0.1. REPREZENTAREA ÎN VIRGULĂ MOBILĂ 5-1.5-1 -0.5 0.5 1 1.5 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 12 x 11 Fig. 0.1: Reprezentarea numerelor în virgulă mobilă din exemplul 0.3 0 1 0 0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1 exponent (7 biţi) mantisa (23+1 biţi) semn exponent semn număr (mantisă) Fig. 0.2: Structura unui număr în virgulă mobilă, pentru (β, t, p) = (2, 24, 7) bit al mantisei are întotdeauna valoarea 1, semnul mantisei se memorează în locul acestui bit, economisind astfel un bit al reprezentării. Un exemplu de număr în virgulă mobilă în acest format este prezentat în figura 0.2. Pentru acest FVM avem: L = 127, U = 127, m = 2 127 = (2 10 ) 13 2 3 10 38, M 10 38 (putem aproxima 2 10 10 3 ). Aceasta arată că FVM acoperă un domeniu larg de numere, utilizând un număr relativ mic de cifre binare. Acest exemplu este foarte apropiat de formatul standard IEEE pentru numere în virgulă mobilă în simplă precizie. În formatul din acest exemplu, numărul real 0.1 are mantisa 0.110011001100110011001100 şi exponentul 10000011 ( 3 în baza 10; prima cifră 1 a exponentului reprezintă semnul). Aşadar numărul 0.1 este reprezentat aproximativ (vezi exemplul 0.2). Observaţia 0.1 Definiţia 0.1 nu permite reprezentarea exactă a numărului 0, acesta neputând avea o mantisă normalizată. Practic, pentru a reprezenta 0, precum şi unele simboluri speciale despre care se va vorbi mai târziu, se folosesc valori dedicate ale exponentului, în afara intervalului [L, U]. De aceea, în standardul IEEE pentru simplă precizie, L = 126. Pentru a estima erorile efectuate la reprezentarea unui număr real în virgulă mobilă, să considerăm un FVM, adică (β, t, p), şi să notăm F = {x R x are reprezentare exactă in VM} {0}. (0.3) Desigur, F este o mulţime finită de numere raţionale. Reprezentarea numărului real x [ M, M] în FVM înseamnă aproximarea lui cu un număr ˆx F. Această aproximare poate fi exprimată printr-o funcţie de rotunjire. Definiţia 0.2 Dacă (β, t, p) este un FVM şi F este mulţimea definită în (0.3), atunci o funcţie fl : [ M, M] F

6 CAPITOLUL 0. CONCEPTE FUNDAMENTALE care asociază fiecărui x [ M, M] o unică reprezentare în virgulă mobilă ˆx = fl(x) este numită funcţie de rotunjire. Eroarea relativă de aproximare x fl(x) x definită pentru orice x [ M, M] nenul este denumită eroare de reprezentare. Deoarece intervalul [ M, M] este o mulţime infinită de numere reale, fiecare ˆx F constituie reprezentarea în VM a unei mulţimi infinite de numere din [ M, M]; suntem interesaţi să găsim o margine superioară a erorii de reprezentare pentru o funcţie de rotunjire dată. Există mai multe funcţii de rotunjire. O vom prezenta doar pe cea mai simplă, denumită rotunjire prin tăiere. În acest scop, să scriem numărul x [ M, M] în forma (0.1) normalizată: x = f β e = ±0.f 1 f 2... f t f t+1... β e = = ±0.f 1 f 2... f t β e ± 0.f t+1 f t+2... β e t = = ˆf β e + ĝ β e t, unde f i C, f 1 0, ˆf = ±0.f 1 f 2... f t, ĝ = ±0.f t+1 f t+2... În mod evident: 1/β f < 1, 1/β ˆf < 1, 0 ĝ < 1. (0.4) Funcţia de rotunjire prin tăiere este definită prin ˆx = fl 1 (x) = fl 1 : [ M, M] F { ˆf β e, pentru x 0, 0, pentru x = 0. Pe scurt, reprezentarea în VM se obţine prin tăierea cifrelor mantisei normalizate a numărului x care se află în afara formatului (de la poziţia t + 1 încolo). Utilizând inegalităţile (0.4), este uşor de stabilit o margine superioară a erorii de reprezentare introduse de fl 1. Într-adevăr, pentru orice x [ M, M] \ {0} avem ε = x fl 1(x) x = fβe ˆfβ e f β e = ĝ βe t f β e < β t β 1 = β t+1. Această formulă arată că, indiferent de valoarea numărului x, o margine pentru mărimea erorii de reprezentare este determinată exclusiv de numărul de cifre ale mantisei (în baza de numeraţie a FVM) şi acesta este motivul pentru care t este numit precizia reprezentării în virgulă mobilă. Numărul β t+1 este numit epsilon maşină şi reprezintă distanţa dintre 1 şi următorul număr cu reprezentare în FVM (vezi problema 0.5).

0.2. ARITMETICA ÎN VIRGULĂ MOBILĂ 7 Pe majoritatea calculatoarelor, numerele în virgulă mobilă au o precizie fixată. Multe calculatoare au, de asemenea, posibilitatea de a manipula numere în virgulă mobilă cu aproximativ 2t biţi pentru mantisă; astfel de numere sunt numite în dublă precizie. De exemplu, în standardul IEEE, numerele în dublă precizie sunt memorate pe 64 biţi, cu t = 53 şi p = 10 (un bit suplimentar este dedicat memorării semnului exponentului). Pentru toate funcţiile de rotunjire folosite, marginea superioară a erorii de reprezentare are forma ε µ β t, (0.5) unde µ este un număr de ordinul unităţii. Din (0.5) rezultă existenţa unui număr ρ astfel încât ˆx = fl(x) = x(1 + ρ), ρ µβ t, (0.6) ceea ce este un alt mod de exprimare a erorii de reprezentare. Cele t cifre ale mantisei sunt numite cifre semnificative ale numărului real reprezentat. În baza de numeraţie zecimală, numerele reprezentate în simplă precizie conform standardului IEEE (t = 24) au 7 cifre semnificative (numărăm 3 cifre zecimale pentru 10 cifre binare), iar cele în dublă precizie (t = 53) au 16 cifre semnificative; în consecinţă, eroarea maximă de reprezentare este de aproximativ 10 7, respectiv 10 16 (anume chiar epsilon maşină). O prezentare detaliată a standardului IEEE poate fi găsită în [?]. 0.2 Aritmetica în virgulă mobilă Calculatoarele cu hardware dedicat operaţiilor în virgulă mobilă sunt prevăzute cu un set de instrucţiuni pentru implementarea unor operaţii cu numere în virgulă mobilă ca, de exemplu, adunarea, scăderea, înmulţirea sau împărţirea. Trebuie subliniat că operaţiile menţionate diferă de cele matematice corespunzătoare deoarece rezultatul lor aparţine întotdeauna mulţimii finite F a numerelor în virgulă mobilă. Aşadar operaţiile aritmetice nu pot fi executate exact. Eroarea introdusă de operaţiile aritmetice în virgulă mobilă se numeşte eroare de rotunjire. Consecinţele pot fi foarte importante; există posibilitatea ca erorile de rotunjire să se acumuleze şi, în calcule lungi, valorile finale să fie afectate, chiar până la a le face inutilizabile. De aceea este de dorit ca fiecare algoritm să fie analizat pentru a vedea în ce măsură erorile de rotunjire afectează rezultatele; în general, aceasta este o sarcină dificilă. Exemplul 0.5 Considerăm FVM cu (β, t, p) = (10, 3, 1). Adunând exact numerele 1.23 şi 20.5, amândouă reprezentabile exact în FVM ales, se obţine 21.73. Rotunjit prin tăiere, rezultatul în VM este 21.7, deci diferit de cel exact. Analiza erorilor de rotunjire se bazează pe cunoaşterea marginilor superioare ale erorilor ce apar în operaţiile în virgulă mobilă. Pentru majoritatea calculatoarelor este valabil următorul model al erorilor asociate operaţiilor în virgulă mobilă, bazat pe evaluarea (0.6): notând cu fl(xy), fl(x/y) şi fl(x+y) produsul, câtul, respectiv suma calculate ale numerelor în virgulă mobilă x şi y, atunci, într-un FVM cu t cifre avem fl(xopy) = (xop y)(1 + ρ), ρ µβ t, (0.7)

8 CAPITOLUL 0. CONCEPTE FUNDAMENTALE unde op poate fi +, sau /, iar µ este un număr de ordinul unităţii. Modelul (0.7) este obţinut presupunând că x op y este calculat exact, apoi rezultatul este transformat în FVM printr-o funcţie de rotunjire. În realitate, lucrurile nu stau chiar aşa; unităţile specializate pentru calculul în VM nu obţin rezultatul exact, dar se comportă ca şi cum l-ar obţine, lucrând pe baza unor algoritmi nebanali, a căror cunoaştere nu este necesară pentru înţelegerea algoritmilor din această lucrare şi a căror prezentare depăşeşte cadrul problematicii propuse. În completarea relaţiei (0.7), trebuie să menţionăm că, atunci când o operaţie în virgulă mobilă produce un număr cu un modul prea mare (> M), apare eroarea numită de depăşire superioară (overflow). Când rezultatul este prea mic în valoare absolută (< m, dar nenulă), eroarea se numeşte de depăşire inferioară (underflow). Desigur, orice algoritm bine conceput trebuie să specifice cum se procedează în eventualitatea unor depăşiri şi, mai ales, să încerce evitarea lor (vom explica în capitolul următor tehnica folosită scalarea). Depăşirea inferioară nu constituie de regulă o eroare gravă, de aceea majoritatea calculatoarelor atribuie automat rezultatului valoarea zero. În cazul unei depăşiri superioare, de obicei calculele sunt oprite sau, cel puţin, este afişat un mesaj de avertisment. În standardul IEEE pentru virgulă mobilă, există o valoare specială, numită Inf (infinit), care este atribuită rezultatului în cazul unei depăşiri superioare; calculele continuă cu această valoare; rezultatele se obţin conform regulilor uzuale de lucru cu infinităţi. O altă valoare specială NaN (Not a Number) este atribuită rezultatelor nedefinite, ca 0, 0/0, / ; o operaţie implicând NaN are întotdeauna ca rezultat NaN. Relaţia (0.7) garantează că o operaţie aritmetică introduce erori relative mici, de ordinul β t (adică al lui epsilon maşină). O problemă fundamentală a calculului numeric este evaluarea mărimii erorii ce afectează rezultatul în cazul unei secvenţe de operaţii. Pentru a aborda problema, să considerăm două exemple în care apar erori numerice mari, dar din cauze esenţial diferite. Lucrăm în FVM cu (β, t, p) = (10, 3, 1). Pentru a evita confuziile, vom nota cu,, şi adunarea, scăderea, înmulţirea, respectiv împărţirea în VM; deci x + y este suma exactă, iar x y = fl(x + y) este suma calculată în VM. Exemplul 0.6 În calculul rădăcinilor polinomului de gradul al doilea ax2 + bx + c, cu a 0, este necesar calculul expresiei b 2 4ac. Considerând b = 3.34, a = 1.22, c = 2.28, avem b 2 4ac = 0.0292, în timp ce, rotunjind prin tăiere, b b = 4 a c = 11.1, deci b b 4 a c = 0. Rezultatul calculat are toate cifrele semnificative eronate, iar eroarea relativă aferentă este egală cu 1; totuşi, pentru fiecare operaţie în parte, eroarea relativă este mai mică decât 10 2. Exemplul 0.7 Dacă polinomul de gradul II are rădăcini reale, acestea se calculează de obicei utilizând formulele x 1 = b b 2 4ac 2a, x 2 = b + b 2 4ac. (0.8) 2a Luând b = 10.1, a = 0.0123, c = 32.4, valoarea exactă rotunjită la 3 cifre semnificative a lui x 2 este 3.22. Efectuând calculele în formatul ales, obţinem = b b 4 a c = 100 (în loc de 100.41, dar eroarea relativă e încă de ordinul

0.2. ARITMETICA ÎN VIRGULĂ MOBILĂ 9 10 3 ); dar b SQRT( ) = 0.1, în timp ce b + b 2 4ac = 0.0792, eroarea relativă fiind acum 0.26. Valoarea calculată a rădăcinii x 2 este 4.06, în timp ce valoarea exactă este 3.22; din nou toate cifrele semnificative ale rezultatului sunt eronate. Se observă că, în ambele exemple, erorile mari apar după scăderea a două numere de valori apropiate. Se produce o anulare catastrofală, adică o pierdere completă a cifrelor semnificative ale rezultatului. În primul caz anularea trebuie pusă integral pe seama operaţiei matematice de scădere; problema calculului b 2 4ac este cauza erorilor, şi nu algoritmul de calcul. În schimb, în al doilea caz, algoritmul de calcul al rădăcinilor este de vină, deoarece nu evită scăderea a două numere apropiate, deşi aceasta este posibil, după cum vom vedea puţin mai târziu. Să studiem întâi mai amănunţit ce se întâmplă la scăderea a două numere apropiate. Exemplul 0.8 Considerăm două numere reale, x şi y, de acelaşi ordin de mărime (cu x > y, pentru simplitate), ale căror prime k cifre coincid, cu următoarele reprezentări (exacte) în baza β (d 1 0): x = 0.d 1 d 2... d k d k+1... d t 1 β e, y = 0.d 1 d 2... d k c k+1...c t 0 β e. Rotunjind prin tăiere, reprezentările lor într-un FVM cu (β, t, p) sunt Diferenţa lor, calculată în VM, este ˆx = fl(x) = 0.d 1 d 2... d k d k+1... d t β e, ŷ = fl(y) = 0.d 1 d 2...d k c k+1... c t β e. ˆx ŷ = 0.f 1...f t k 0...0 β k+e. Observăm că ˆx ŷ = ˆx ŷ, deci scăderea se efectuează fără erori. În schimb, rezultatul scăderii cu valorile exacte ale operanzilor este x y = 0.f 1... f t k 10...0 β k+e, iar eroarea relativă asociată lui este (x y) (ˆx ŷ) x y β t+1+e β k+e = β t 1+k. În concluzie, observăm că operanzii scăderii sunt afectaţi de erori relative de reprezentare de ordinul β t 1, în timp ce rezultatul ei are o eroare relativă de ordinul β t 1+k ; atunci când x şi y au multe cifre semnificative identice, deci k aproape de t, (şi acelaşi ordin de mărime) eroarea asociată rezultatului scăderii poate deveni uriaşă. Exemplul 0.8 arată că adunarea (scăderea) nu introduce erori mari prin ea însăşi, ci potenţează în anumite cazuri erorile operanzilor. De aceea, scăderea numerelor apropiate trebuie evitată. Pentru aceasta, dacă este posibil, algoritmul de calcul este cel care trebuie modificat.

10 CAPITOLUL 0. CONCEPTE FUNDAMENTALE Exemplul 0.9 Am constatat, în exemplul 0.7, că formulele (0.8) nu sunt cele mai bune din punct de vedere numeric, mai ales când b 2 4ac, şi deci b. Pentru a evita scăderea unor numere apropiate, se pot folosi formulele x 1 = b sgn(b) b 2 4ac, x 2 = 2a 2c b + sgn(b) b 2 4ac. (0.9) Utilizând în (0.9) valorile numerice din exemplul 0.7, se obţine, în FVM de lucru, un rezultat cu toate cifrele semnificative exacte. 0.3 Condiţionarea problemelor de calcul Orice problemă de calcul numeric impune obţinerea unor rezultate numerice, pornind de la date de intrare numerice, astfel încât rezultatele să poată fi interpretate ca o aproximaţie a soluţiei unei probleme matematice pentru datele de intrare respective. Pentru ca o astfel de problemă să fie bine definită, trebuie asigurate existenţa şi unicitatea soluţiei. În acest caz, o problemă de calcul numeric poate fi întotdeauna descrisă ca evaluare a unei funcţii f : D R n R m (0.10) într-un punct x D dat. Cele n componente ale argumentului constituie datele de intrare, iar cele m componente ale vectorului f(x) sunt rezultatele sau datele de ieşire. Desigur, aplicaţia f este de cele mai multe ori definită implicit iar descoperirea unei căi prin care calculul valorii f(x) devine posibil echivalează cu rezolvarea, printr-un algoritm specific, a problemei de calcul considerate. Exemplul 0.10 a) Fie D o mulţime de trei numere reale şi x = a b c Rezolvarea ecuaţiei de gradul II D = {x R 3 a 0, b 2 4ac 0} R 3. ay 2 + by + c = 0 este o problemă numerică bine definită, deoarece pentru orice x D există un unic vector b sgn(b) b 2 4ac [ ] y1 2a y = f(x) = = y 2 2c R2, care este soluţia problemei. b) Calculul integralei b a b + sgn(b) b 2 4ac e t2 dt,

0.3. CONDIŢIONAREA PROBLEMELOR DE CALCUL 11 unde a, b R sunt date (a b), este de asemenea [ ] o problemă numerică bine definită. a Într-adevăr, pentru datele de intrare x = D = R b 2, există şi este unică valoarea integralei y R, deşi integrala nedefinită e t2 dt nu este exprimabilă prin funcţii elementare. Abaterea soluţiei calculate faţă de soluţia exactă a unei probleme numerice poate avea două surse esenţial diferite, legate de problemă în sine şi, respectiv, de algoritmul de calcul utilizat. De prima sursă de erori numită condiţionarea problemei ne ocupăm în continuare, de cea de-a doua stabilitatea algoritmului în paragraful următor. Condiţionarea problemei caracterizează sensibilitatea soluţiei în raport cu perturbaţiile datelor de intrare. În practică este cunoscută doar o aproximaţie ˆx a datelor de intrare x şi, în cel mai bun caz, presupunând că toate calculele se efectuează exact, putem calcula f(ˆx) în loc de f(x). Dacă funcţia f definind problema noastră este prea sensibilă la variaţii ale argumentului, f(ˆx) şi f(x) pot diferi semnificativ chiar în cazul unei erori relative mici x ˆx / x a datelor de intrare ( este o normă adecvată). O astfel de problemă este numită rău condiţionată. Dacă încercăm rezolvarea unei probleme rău condiţionate pornind de la date inexacte, atunci soluţia obţinută va fi însoţită de erori mari indiferent de felul în care este calculată! Definiţia 0.3 Condiţionarea numerică sau sensibilitatea locală a unei probleme f : D R n R m într-un punct x D este exprimată de amplificarea erorii relative f(x) f(ˆx) x κ(x) = f(x) x ˆx, (0.11) pentru x 0 şi f(x) 0. Când κ(x) este mic (de ordinul unităţii, de exemplu) problema este numită bine condiţionată în punctul x. Altfel, problema este rău condiţionată. Observaţia 0.2 Dacă f este Lipschitz continuă, i.e. există L astfel încât atunci f(x) f(y) L x y, κ(x) L x f(x), iar dacă f este de clasă C 1 iar x este apropiat de y, atunci L se poate lua f (x), unde f este derivata lui f în punctul x. Subliniem faptul că condiţionarea este o proprietate locală. De obicei, totuşi, o problemă este numită bine condiţionată dacă este bine condiţionată în orice punct x D; de asemenea, este numită rău condiţionată, dacă există puncte x D în care este rău condiţionată. Exemplul 0.11 Problema calculului sumei a două numere x, y R poate fi bine sau rău condiţionată funcţie de valorile lui x şi y (datele de intrare). (Aici

12 CAPITOLUL 0. CONCEPTE FUNDAMENTALE [ x f(x, y) = x + y, f : R 2 R; convenim să scriem şi f(x, y) în loc de f( y cum ar cere (0.10).) Presupunem că ˆx, ŷ sunt aproximări ale lui x, respectiv y, afectate de erori relative de acelaşi ordin de mărime, γ; mai precis, ˆx = x + ε x x, cu ε x γ 1, ŷ = y + ε y y, cu ε y γ. Eroarea relativă asociată sumei este (calculul sumei se face exact) ε = x + ε xx + y + ε y y (x + y) x + y Dacă x şi y au acelaşi semn, atunci ε ε xx + ε y y x + y γ ] ), = ε xx + ε y y. (0.12) x + y şi suma este afectată de o eroare de acelaşi ordin de mărime ca şi operanzii; în acest caz, adunarea este bine condiţionată. Dacă x şi y au semne diferite, este posibil (atunci când ε x şi ε y au şi ele semne diferite) ca ε şi γ max( x, y ) θ = x + y să aibă acelaşi ordin de mărime. Dar dacă x + y max( x, y ), ceea ce se întâmplă atunci când x şi y au valori apropiate, atunci θ γ. În acest caz, problema calculului sumei este rău condiţionată. Exemplele 0.6, 0.7, 0.8 ilustrează această situaţie. Pentru a vedea câte subtilităţi ascunde calculul aparent simplu al unei sume, cititorul este invitat să consulte [?]. 0.4 Stabilitatea numerică a algoritmilor Pentru a rezolva o problemă de calcul numeric definită de funcţia (0.10), un calculator execută o secvenţă (finiţă) bine precizată de operaţii denumită algoritm. În general există mai mulţi algoritmi pentru rezolvarea unei probleme. Un algoritm ˆf pentru problema f produce un răspuns unic determinat pentru date de intrare fixate şi deci poate fi exprimat matematic printr-o funcţie ˆf : D F R n R m. Deoarece execuţia unui algoritm se face folosind numere în FVM şi calculele sunt însoţite de erori, este clar că ˆf(x) este de regulă diferit de f(x). De asemenea, nu ne putem aştepta ca algoritmul ˆf să calculeze soluţia unei probleme rău condiţionate mai precis decât o garantează datele de intrare. Totuşi, e de dorit ca ˆf să nu introducă erori exagerat de mari. Noţiunea de stabilitate numerică exprimă mărimea erorilor numerice introduse de un algoritm, în ipoteza că datele iniţiale sunt exacte.

0.4. STABILITATEA NUMERICĂ A ALGORITMILOR 13 x Eroare înapoi ˆx f f ˆf f(x) Eroare înainte ˆf(x) = f(ˆx) Date de intrare Date de ieşire Fig. 0.3: Erori înainte şi înapoi Definiţia 0.4 Un algoritm ˆf, destinat rezolvării problemei f, este numeric stabil dacă una dintre următoarele două condiţii alternative este îndeplinită: i) ˆf(x) este aproape de f(x) pentru orice intrare x, adică soluţia calculată aproximează bine soluţia exactă. ii) pentru orice intrare x, există un ˆx D apropiat de x astfel încât f(ˆx) să fie egal cu ˆf(x), adică soluţia calculată de algoritmul ˆf cu date de intrare exacte este egală cu soluţia exactă pentru nişte date de intrare uşor perturbate. Altfel, algoritmul este numeric instabil. Cele două condiţii sunt similare, doar că prima se formulează în spaţiul datelor de ieşire, iar a doua în spaţiul datelor de intrare, după cum se poate remarca în figura 0.3; în mod plastic, eroarea (absolută) ˆf(x) f(x) este numită eroare înainte, deoarece corespunde sensului de calcul al algoritmului, iar ˆx x eroare înapoi, deoarece găsirea unui ˆx care să satisfacă ii) înseamnă întoarcerea în spaţiul datelor de intrare, ulterior aplicării algoritmului. Analiza stabilităţii numerice a unui algoritm înseamnă cuantificarea erorilor din definiţia 0.4; evaluarea ˆf(x) f(x) este caracteristică analizei înainte (directe); evaluarea ˆx x defineşte analiza înapoi (inversă). Noţiunea vagă aproape se poate reexprima prin cea de eroare relativă mică (noţiune destul de vagă şi ea); în calculul numeric se folosesc deseori astfel de exprimări. În mod sigur, o eroare relativă de ordinul erorii de rotunjire (introduse de (0.7)) caracterizează un algoritm numeric stabil 1 : soluţia este calculată cu precizia intrinsecă a FVM utilizat. Este uşor de arătat că utilizarea unui algoritm stabil la rezolvarea unei probleme bine condiţionate conduce la un rezultat de înaltă acurateţe 2. Într-adevăr, din definiţia 0.4 varianta ii), pentru intrarea exactă x există ˆx astfel încât eroarea relativă este (să zicem) de ordinul erorii de rotunjire x ˆx x µβ t 1 În continuare, vom spune algoritm stabil în loc de algoritm numeric stabil. 2 Atragem atenţia asupra sensurilor diferite pe care le au în calculul numeric termenii precizie şi acurateţe, aproape sinonimi în limbajul uzual. Precizia se referă la numărul de cifre semnificative din FVM, iar acurateţea la mărimea erorii dintre rezultatul calculat numeric şi cel exact.