Sunteți pe pagina 1din 284

Mădălina Roxana Buneci

Metode Numerice - aspecte teoretice şi practice

Editura Academica Brâncuşi


Târgu-Jiu, 2009
Mădălina Roxana Buneci

ISBN 978-973-144-289-1

2
Metode Numerice

CUPRINS

Prefaţă........................................................................................................................7
I. Noţiuni introductive...............................................................................................9
I.1. Elemente de teoria erorilor ......................................................................9
I.2. Condiţionarea numerică. Factor de condiţionare....................................11
I.3. Stabilitatea algoritmilor..........................................................................14
I.4. Complexitatea algoritmilor.....................................................................15
II. Aproximarea numerelor reale...............................................................................17
II.1. Reprezentarea numerelor întregi într-o bază.........................................21
II. 2. Reprezentarea numerelor reale într-o bază...........................................29
III. Reprezentarea informaţiei în sistemele de calcul................................................29
III.1. Reprezentarea internă a numerelor întregi...........................................29
III. 1.1. Reprezentarea internă a numerelor întregi fără semn
(pozitive)...........................................................................29
III.1.2. Reprezentarea internă a numerelor întregi (cu semn)...........30
III. 2. Reprezentarea internă a numerelor reale................................35
III.2.1. Forma normalizată................................................................35
III.2.2. Reprezentarea în virgulă mobilă...........................................36
III.2.3. Standardul IEEE-754............................................................39
III.2.4. Aritmetica în virgulă mobilă.................................................45
IV. Rezolvarea sistemelor liniare..............................................................................53
IV.1. Elemente de analiză matriceală...........................................................53
IV. 2. Metode directe de rezolvare a sistemelor liniare................................61
IV.2.1. Metoda de eliminare Gauss ..................................................62
IV.2.2. Rezolvarea sistemelor liniare prin metoda de eliminare
Gauss...................................................................................67

3
Mădălina Roxana Buneci

IV.2.3. Calculul determinantului unei matrice..................................70


IV.2.4. Calculul inversei unei matrice..............................................71
IV.3. Factorul de condiţionare al unei matrice..............................................74
IV.4. Metode iterative de rezolvare a sistemelor liniare...............................80
IV.4.1. Generalităţi............................................................................80
IV.4.2. Metoda Jacobi.......................................................................83
IV.4.3. Metoda Gauss-Seidel............................................................87
V. Rezolvarea ecuaţiilor şi sistemelor neliniare........................................................91
V. 1. Rezolvarea ecuaţiilor neliniare.............................................................91
V.1.1. Metoda bisecţiei (metoda înjumătăţirii intervalului)..............93
V.1.2. Metoda coardei.......................................................................96
V.1.3. Metoda tangentei.................................................................104
V. 2. Rezolvarea sistemelor neliniare.........................................................114
V.2.1. Metoda punctului fix............................................................116
V.2.2. Metoda Newton – cazul m-dimensional..............................127
VI. Aproximarea funcţiilor.....................................................................................139
VI. 1. Polinoame de interpolare..................................................................139
VI.1.1. Definiţie. Eroarea de interpolare.........................................142
VI.1.2. Eroarea de interpolare în cazul nodurilor echidistante.......142
VI.1.3. Eroarea de interpolare în cazul nodurilor Cebîşev.............143
VI.1.4. Polinomul Lagrange de interpolare....................................144
VI.1.5. Polinomul Newton de interpolare de speţa I (ascendent)...161
VI.1.6. Polinomul Newton de interpolare de speţa a II-a
(descendent).........................................................................166
VI.1.7. Polinomul Newton de interpolare cu diferenţe divizate.....171
VI. 2. Metoda celor mai mici pătrate..........................................................175
VI.2.1. Caracterizarea elementelor de cea mai bună aproximare pe
subspaţii Hilbert..................................................................175
VI.2.2. Aproximarea în medie prin metoda celor mai mici
pătrate................................................................................178
VI.2.3. Limitări ale metodei celor mai mici pătrate........................186

4
Metode Numerice

VII. Derivarea numerică.........................................................................................189


VII.1. Formule de derivare aproximativă folosind dezvoltări în serie
Taylor................................................................................189
VII.2. Extrapolare Richardson...................................................................205
VII.3. Metode de derivare numerică folosind interpolarea.........................206
VIII. Integrarea numerică........................................................................................209
VIII.1. Formula generală de cuadratură numerică. Formula de cuadratură
Newton-Cotes..................................................................................209
VIII.2. Formula dreptunghiurilor................................................................212
VIII.3. Formula trapezelor..........................................................................218
VIII.4. Formula lui Simson.........................................................................223
VIII.5. Algoritmul lui Romberg..................................................................224
VIII.6. Cuadratura Gauss............................................................................227
VIII.7. Formule pentru calculul aproximativ al unei integrale duble.........230
Anexa: Iniţiere în Maple.........................................................................................235
A.1. Structura internă. Categorii de comenzi MAPLE...............................235
A.2. Operatori, constante şi funcţii predefinite în MAPLE. Expresii........238
A.3. Numere, şiruri şi identificatori............................................................243
A.4. Comenzi de calcul în MAPLE............................................................248
A.5. Reprezentări grafice în MAPLE..........................................................251
A.6. Structuri de date în MAPLE................................................................256
A.6.1 Expresii şi funcţii..................................................................256
A.6.2. Liste......................................................................................261
A.6.3. Mulţimi.................................................................................262
A.6.4. Tablouri................................................................................264
A.7. Elemente de programare în MAPLE...................................................269
A.7.1 Atribuirea. Decizia. Structuri repetitive................................269
A.7. 2. Proceduri în MAPLE...........................................................274
Bibliografie.............................................................................................................279
Index........................................................................................................................281

5
Mădălina Roxana Buneci

6
Metode Numerice

PREFAŢĂ

Analiza numerică are o istorie lungă şi bogată: Arhimede, Newton sau


Gauss, spre exemplu, având contribuţii semnificative în acest domeniu. Însă
metodele numerice moderne, aşa cum le folosim astăzi, sunt caracterizate de
sinergia dintre calculatoarele electronice programabile, analiza matematică, precum
şi oportunitatea şi necesitatea de a rezolva probleme complexe din diverse domenii
cum ar fi ingineria, medicina, economia sau ştiinţele sociale. Deşi a existat
întotdeauna o strânsă interacţiune între matematică, pe de o parte şi ştiinţe şi
tehnologie, pe de altă parte, această interacţiune s-a intensificat în ultimele decenii.
Creşterea utilizării metodelor numerice a fost cauzată nu numai de creşterea
performanţei calculatoarelor, ci şi de îmbunătăţirea algoritmilor. Cu toate că există
produse software performante pentru rezolvarea multor probleme matematice
întâlnite în practică, cunoaşterea şi înţelegerea metodelor numerice rămân esenţiale
pentru utilizarea inteligentă a produselor software respective.
Această carte reprezintă o introducere în studiul metodelor numerice. În cele
opt capitole ale acestei lucrări sunt prezentate noţiuni şi rezultate fundamentale ce
ţin de aproximarea numerelor reale, reprezentarea informaţiei în sistemele de calcul
şi aritmetica în virgula mobilă, rezolvarea sistemelor liniare (prin metode directe şi
iterative), rezolvarea ecuaţiilor şi sistemelor neliniare, aproximarea funcţiilor (prin
polinoame de interpolare şi metoda celor mai mici pătrate), derivarea şi integrarea
numerică. Sunt descrise cele mai utilizate metode numerice, aduse la o formă
algoritmică. În fiecare caz în parte sunt prezentate proceduri în MAPLE şi se fac
comparaţii între datele de ieşire ale procedurilor respective şi rezultatele afişate de
comenzile MAPLE destinate rezolvării aceloraşi probleme. În multe situaţii, pentru
a evidenţia erorile de rotunjire, se compară rezultatele obţinute utilizând aritmetica
virgulei mobile cu rezultatele obţinute folosind calculul simbolic.

7
Mădălina Roxana Buneci

Cartea de faţă corespunde programei analitice a cursului de Metode


Numerice (de la Ingineria Sistemelor, Ingineria Energetică şi Inginerie Industrială –
licenţă). În afară de destinaţia ei directă de manual pentru studenţii facultăţilor
tehnice, cartea poate servi, pentru cei interesaţi, ca punct de plecare în studiul mai
aprofundat al metodelor numerice.

Numerical Methods - theoretical and practical aspects


Author: Mădălina Roxana Buneci

Abstract. This book is an introduction to the study of numerical methods. In


the eight chapters of this book are presented fundamental concepts and results
related to approximating of real numbers, computing in floating point arithmetic,
solving linear systems (by direct and iterative methods), solving equations and
nonlinear systems, approximating functions (polynomial interpolation and the least
squares method), approximating derivatives and quadrature rules. Theoretical as
well as practical aspects are emphasized. The algorithms are implemented in
MAPLE.
These lecture notes were developed for a fourteen-week course the author
has taught for first year students at System Engineering, Power Engineering and
Industrial Engineering.

8
Metode Numerice

I. Noţiuni introductive

Metodele numerice reprezintă tehnici prin care problemele matematice sunt


reformulate astfel încât să fie rezolvate numai prin operaţii aritmetice. Prin trecerea
de la infinit la finit, diferenţial la algebric, neliniar la liniar problemele complicate
sunt înlocuite de probleme mai simple care au aceeaşi sau “aproape” aceeaşi soluţie.
Astfel soluţiile obţinute prin aplicarea metodelor numerice reprezintă doar
aproximaţii ale soluţiilor problemelor originale, şi deci implică erori.

I.1. Elemente de teoria erorilor

Sursele erorilor şi clasificarea lor

Se pot distinge trei tipuri de erori în cazul aplicării de metode numerice


pentru rezolvarea unei probleme:
• Erori provenite din simplificarea modelului fizic, pentru a fi descris într-
un model matematic; erori din măsurătorile iniţiale sau erori din calcule
anterioare. Aceste tipuri de erori se numesc erori inerente.
• Erori datorate metodei utilizate-de exemplu, trunchierea unei serii
infinite (mai precis aproximarea sumei unei serii printr-o sumă parţială),
sau considerarea unui termen cu un rang “suficient” de mare pentru a
aproxima limita unui şir. Aceste erori sunt numite erori de metodă sau
erori de trunchiere.
• Erori datorate reprezentării datelor şi efectuării calculelor într-o
aritmetică cu precizie limitată (de exemplu aritmetica virgulei mobile).
Aceste erori se numesc erori de rotunjire.

9
Mădălina Roxana Buneci

Erorile inerente sunt anterioare aplicării metodei numerice, iar erorile de


trunchiere şi de rotunjire apar în timpul calculului numeric.

Erori absolute şi erori relative

Eroarea absolută = valoare aproximativă - valoare exactă


eroare absolută
Eroarea relativă =
valoare exactă

Din aceste definiţii se obţine:


Valoare aproximativă = (valoare exactă )(1 + eroare relativă)
Eroarea absolută nu ţine seama de ordinul de mărime al valorilor comparate.
De exemplu, o eroare în centimetri este mai importantă dacă lungimea calculată este
de 100 cm, decât dacă este de 100 km. De aceea, eroarea relativă se raportează la
valoarea reală. Adesea eroarea relativă se exprimă în procente:
eroare absolută
. 100 %
valoare exactă

De obicei valoarea exactă nu este cunoscută. De aceea nici eroarea (absolută


sau relativă) nu poate fi calculată, şi doar se estimează valorile limită ale acesteia.
Se utilizează majoranţi pentru modulul erorii (sau norma erorii, dacă se lucrează
într-un spaţiu normat).

Erori ale datelor şi erori de calcul

Considerăm următoarea problemă tipică: calculul valorii unei funcţii f:R→R


pentru un argument dat. Fie:
x = valoarea de intrare exactă
x* = valoare de intrare aproximativă
f(x) = rezultatul dorit
f* = funcţia aproximativă de calcul
Eroarea totală este dată de:
f*(x*) - f(x) = (f*(x*) - f(x*)) - (f(x*) - f(x))
Deci

10
Metode Numerice

Eroare totală = eroare de calcul + eroare propagată a datelor,


unde,
Eroare de calcul = f*(x*) - f(x*)
Eroare a datelor = x* - x.
Algoritmul nu are nici un efect asupra erorii propagate a datelor.

Erori de trunchiere şi erori de rotunjire

Eroare de trunchiere = diferenţa dintre rezultatul exact (pentru datele de


intrare curente) şi rezultatul furnizat de un algoritm dat utilizând aritmetica exactă.
Eroare de rotunjire = diferenţa dintre rezultatul produs de un algoritm dat
utilizând aritmetica exactă şi rezultatul produs de acelaşi algoritm utilizând o
aritmetică cu precizie limitată (de exemplu aritmetica virgulei mobile).
Eroarea de calcul este suma dintre eroarea de trunchiere şi eroarea de
rotunjire, dar de obicei una dintre acestea predomină. De exemplu, dacă aproximăm
derivata într-un punct prin
f (x + h ) − f (x )
f ′(x ) ≈
h
h
eroarea de trunchiere este dominată de M , unde M = sup f ′′(t ) pentru t într-o
2
vecinătate a lui x (acesta rezultă aplicând formula lui Taylor de ordinul doi în x).
Dacă ε domină eroarea cu care se reprezintă valorile lui f, atunci eroarea de

rotunjire în formula de aproximare considerată este mărginită de . Deci eroarea
h
h 2ε
totală este mărginită de E(h) = M + . Studiem variaţia acestei funcţii.
2 h

M 1 ε  ε 
Avem E ′(h ) = -2ε 2 şi deci E ′(h ) = 0 <=> h = 2 . În plus, E ′′ 2  >0,

2 h M  M 

ε
deci funcţia are punct de minim în h = 2 . Ca urmare, eroarea totală este
M

ε
minimă pentru h ≈ 2 . Pentru valori mai mici ale lui h eroarea totală creşte din
M

11
Mădălina Roxana Buneci

cauza creşterii erorii de rotunjire, iar pentru valori mai mari ale lui h eroarea totală
creşte din cauza creşterii erorii de trunchiere.

Erori forward şi erori backward

Să presupunem că dorim să calculăm y = f(x), unde f : R → R, dar obţinem


o valoare aproximativă y*.
Eroare forward absolută = ∆y = y* - y
∆y y*−y
Eroare forward relativă = = .
y y
Deseori eroarea ∆y este dificil de estimat. Ideea analizei erorilor din punct
de vedere a erorilor backward este următoarea: soluţia aproximativă y* este
considerată soluţia exactă a unei probleme cu datele iniţiale modificate, mai precis
se consideră y* = f(x*), unde x* este o perturbaţie a lui x.
Eroare backward absolută = ∆x = x* - x, unde f(x) = y şi f(x*) = y*.
∆x x*−x
Eroare backward relativă = = .
x x
Soluţia aproximativă y* se consideră "bună" dacă este soluţie exactă pentru
o problemă cu datele "uşor" perturbate.
De exemplu, dacă aproximăm 5 prin y* = 2.2, eroarea forward absolută
este
| ∆y | =| y* - y | = | 2.2 - 2.23606…| ≈ 0.03606
iar eroarea forward relativă este aproximativ 1.6 %.
Pentru a calcula eroarea backward, observăm că 4.84 =2.2. Eroarea backward
absolută este
| ∆x | =| x* - x | = | 4.84 - 5 | ≈ 0.16,
iar eroarea backward relativă este aproximativ 3 %.

12
Metode Numerice

I.2. Condiţionarea numerică. Factor de condiţionare.

Problema se numeşte bine condiţionată dacă variaţiile relative ale soluţiei


au acelaşi ordin de mărime cu variaţiile relative ale datelor de intrare ce le
cauzează.
Problema este rău condiţionată dacă modificările relative care au loc în
soluţie pot fi mult mai mari decât cele ale datelor de intrare.
Factorul de condiţionare (relativ) se defineşte prin:
variatia relativă a solutiei
cond =
variatia relativă a datelor de intrare

Să revenim la calculul y = f(x), unde f : R → R. Să presupunem că se obţine


valoarea aproximativă y*. Fie x* cu proprietatea că f(x*) = y*. Avem
f (x *) − f (x ) ∆y
f (x ) y
cond = = .
x *− x ∆x
x x

Problema este rău condiţionată, dacă factorul de condiţionare


cond >> 1.
Factorul de condiţionare acţionează ca un "factor de amplificare" legând
eroarea forward de eroarea backward:
| eroarea relativă forward| = cond × | eroarea relativă backward|
De obicei factorul de condiţionare nu este cunoscut exact şi poate varia în
funcţie de datele de intrare. De aceea se utilizează o estimaţie margine superioară
pentru cond. Deci
| eroarea relativă forward | < cond × | eroarea relativă backward |.

Considerăm un exemplu de estimare pentru factorul de condiţionare. Să


presupunem că se evaluează funcţia diferenţiabilă f pentru data de intrare x şi se
obţine valoarea aproximativă y* corespunzând valorii
x* = x + ∆x,
(mai precis y* = f(x*)). Eroarea absolută forward este
f(x + ∆x) - f(x) ≈ f ′(x ) ∆x

13
Mădălina Roxana Buneci

iar eroarea relativă forward este


f (x + ∆x ) − f (x ) f ′(x )∆x

f (x ) f (x )

Factorul de condiţionare este


f ′(x )∆x
f (x ) xf ′(x )
cond ≈ = .
∆x f (x )
x

Factorul de condiţionare absolut se defineşte ca raportul dintre variaţia


soluţiei şi variaţia datelor de intrare. Factorul de condiţionare absolut acţionează ca
un "factor de amplificare" legând eroarea absolută forward de eroarea absolută
backward.

I.3. Stabilitatea algoritmilor

Noţiunea referitoare la algoritmi analoagă condiţionării numerice a


problemelor este stabilitatea. Intuitiv vorbind, stabilitatea numerică a unui
algoritm înseamnă ca acesta este cât mai puţin sensibil la perturbaţiile din timpul
calculului (erorile de rotunjire sau la alte incertitudini numerice care pot apărea în
procesul de calcul). Se spune că un algoritm de rezolvare a unei probleme este
stabil dacă rezultatul produs este soluţia exactă a aceleaşi probleme cu datele "uşor"
perturbate.
În cazul algoritmilor stabili efectul erorii de calcul nu este mai puternic
decât efectul erorii (mici) a datelor de intrare.
Un algoritm instabil poate amplifica mult perturbaţiile date de erorile de
calcul.

Acurateţea metodelor

Acurateţea se referă la apropierea soluţiei calculate de soluţia exactă a


problemei. Stabilitatea algoritmului nu garantează acurateţea. Aceasta depinde în
egală măsură de buna condiţionare a problemei şi de stabilitatea algoritmului.

14
Metode Numerice

Inacurateţea poate rezulta din aplicarea unui algoritm stabil unei probleme rău
condiţionate, ca şi din aplicarea unui algoritm instabil unei probleme bine
condiţionate.
Aplicarea (cu ajutorul calculatorului) unui algoritm stabil unei probleme
bine condiţionată garantează obţinerea soluţiei cu o precizie bună, în sensul că
eroarea relativă a soluţiei calculate faţă de soluţia exactă este de ordinul de mărime
al erorilor de reprezentare a datelor în calculator.

I.4. Complexitatea algoritmilor

În evaluarea complexităţii unui algoritm se ţine cont de două aspecte


• timpul necesar execuţiei algoritmului (dat de numărul de operaţii elementare)
• spaţiul de memorie necesitat de algoritm
În general nu este posibil să obţinem simultan un timp de execuţie mai scurt precum
şi un necesar de spaţiu de memorare mai mic. Progresele tehnologice din ultima
vreme impun drept criteriu primordial criteriul timp.
Fie n numărul de date de intrare pentru un anumit algoritm (eventual
considerăm n egal cu numărul de locaţii de memorie necesare pentru memorarea
datelor iniţiale). Fie TS(n) timpul cerut de algoritm pentru un anumit set de n date de
intrare S. Vom nota τ(n) timpul cerut de algoritm în cazul cel mai defavorabil, i.e.:
τ(n) = sup {TS(n) : S este un set de date de intrare de dimensiune n }
În general nu este posibil să determinăm o formulă pentru τ(n). În acelaşi timp ne
interesează comportarea lui τ(n) pentru valori mari ale lui n. În acest sens
introducem următoarele notaţii:

• τ(n) = O(f(n)) dacă ∃ C > 0, n0 ∈ N cu τ(n) ≤ C f(n) ∀ n ≥ n0


Interpretare: τ are o creştere mai lentă decât f
τ(n )
• τ(n) = o(f(n)) dacă lim =0
n →∞ f (n )
Interpretare: τ are o creştere strict mai lentă decât f
• τ(n) = θ (f(n)) dacă ∃ C1, C2 > 0, n0∈N cu C1f(n) ≤ τ(n) ≤ C2f(n) ∀n ≥ n0

15
Mădălina Roxana Buneci

Interpretare: τ are o creştere la fel de lentă ca f

τ(n)
• τ(n) ~ f(n) dacă lim =1
n →∞ f ( n )

Interpretare: τ are o creştere la fel de lentă ca f


• τ(n) = Ω(f(n)) dacă f(n) = O(τ(n)
Interpretare: f are o creştere mai lentă decât τ

O şi o se folosesc pentru a stabili marginile superioare ale timpului de


execuţie, iar Ω pentru limita inferioară a timpului de execuţie.
Un algoritm se numeşte algoritm polinomial dacă τ(n) = O(P(n)), unde τ
este timpul cerut de algoritm, iar P este un polinom.

16
Metode Numerice

II. Aproximarea numerelor reale

II. 1. Reprezentarea numerelor întregi într-o bază

Se numeşte bază un număr natural b ∈ N, b ≥ 2. Se numeşte sistem de


numeraţie o mulţime de b simboluri distincte, corespunzătoare mulţimii primelor b
numere naturale: 0, 1,…, b-1. Notăm
Sb = {ci : 0 ≤ i ≤ b-1 }
mulţimea acestor simboluri, numite cifre în baza b. De exemplu:
S2 = {0, 1}
S16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}
unde caracterele A, B, C, D, E, F corespund numerelor naturale 10, 11, 12, 13, 14,
15.
În cele ce urmează fixăm o bază b şi notăm
B = {0, 1, …, b-1 }
n
şi Bk = B pentru orice k∈ N. Fie mulţimea An = ∏ Bk înzestrată cu ordinea
k =0

lexicografică. Reamintim că această relaţie de ordine se defineşte în felul următor:


def
(αn, αn-1, …, α0 ) < (βn, βn-1, …, β0 ) <=> există k∈{0, 1, …, n} astfel încât

αk < βk şi αi = βi pentru i = k + 1, n .

Considerăm funcţia fn : An → {0, 1, …, bn+1-1 } definită prin


fn(αn, αn-1, …, α0) = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0.
Demonstrăm că funcţia fn este bijectivă. Arătăm pentru început că fn este strict
crescătoare, deci este injectivă. Apoi, ţinând cont că mulţimile {0, 1, …, bn+1-1} şi
An sunt mulţimi finite cu acelaşi cardinal (număr de elemente) va rezulta că de fapt
fn este o bijecţie. Fixăm două elemente din An, α=(αn, αn-1, …, α0 ) şi β = (βn, βn-1,

17
Mădălina Roxana Buneci

…, β0 ), cu α < β. Deoarece α < β, rezultă că există k∈{0, 1, …, n} astfel încât αi =

βi pentru i = k + 1, n şi αk < βk (de unde rezultă că αk ≤ βk - 1). Avem

fn(α0, α1, …, αn) = αnbn + αn-1bn-1 + … + αk+1bk+1+ αkbk +αk-1bk-1+ … + α1b + α0


= βnbn + βn-1bn-1 + … + βk+1bk+1 + αkbk + αk-1bk-1+ … + α1b + α0
≤ βnbn + βn-1bn-1 + … + βk+1bk+1+ (βk -1)bk +(b -1)bk-1+ …+ (b-1)
= βnbn + βn-1bn-1 + …+ βk+1bk+1+(βk -1)bk +(b -1)(bk-1+ … + b +1)
bk −1
= βnbn + βn-1bn-1 + … + βk+1bk+1+ βkbk - bk + (b -1)
b −1
= βnbn + βn-1bn-1 + … + βk+1bk+1+ βkbk - 1
< βnbn + βn-1bn-1 + … + βk+1bk+1+ βkbk
≤ fn(β)
În consecinţă, α < β implică fn(α) < fn(β), deci fn este strict crescătoare.
Folosind bijectivitatea funcţiei fn demonstrăm următoarea teoremă:

Teorema 2.1. Fie b o bază (adică b ∈ N, b ≥ 2). Orice număr natural nenul x
poate fi scris în mod unic sub forma
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0, cu αn ≠ 0.
şi α0, α1, …., αn ∈ {0, 1, …, b-1 }.
Demonstraţie. Conform principiului multiplicativ al lui Arhimede, pentru
număr natural nenul x există un număr natural n ≥ 1 astfel încât:
bn ≤ x < bn+1.
De aici rezultă că există un singur număr natural n ≥ 1 astfel încât
x ∈ {0, 1, …, bn+1-1 } - {0, 1, …, bn-1 }.
Deoarece x∈{0, 1, …, bn+1-1 } şi fn : An → {0, 1, …, bn+1-1 } este bijectivă, există
un unic element α = (αn, αn-1, …, α0 ) în An astfel încât x = fn (α) sau echivalent
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0.
Dacă αn ar fi nul, atunci
x = αn-1bn-1 + … + α2b2 + α1b + α0
≤ (b -1)bn-1 + … + (b -1)b2 + (b -1)b + (b -1)
= (b -1) (bn-1 + …b2 + b + 1)

18
Metode Numerice

bn −1
= (b -1)
b −1
< bn,
ceea ce contrazice alegerea lui n. Deci αn ≠ 0.
Dacă ar exista două reprezentări
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0, cu αn ≠ 0.
= βmbm + βm-1bm-1 + … + β2b2 + β1b + β0, cu βm ≠ 0.
cu α0, α1, …., αn, β0, β1, …., βm ∈ {0, 1, …, b-1 }, atunci
bn ≤ x < bn+1 şi bm ≤ x < bm+1
şi în consecinţă, n = m. Deoarece fn este injectivă şi
fn(αn, αn-1, …, α0 ) = fn(βn, βn-1, …β0),
avem (αn, αn-1, …, α0 ) = (βn, βn-1, …β0), şi ca urmare reprezentarea x lui este
unică.


Plecând de la observaţia următoare


x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0
= ( ( …(αnb + αn-1 )b + … + α2)b + α1)b + α0
deducem faptul că reprezentarea sub forma din teorema 1 a unui număr natural
nenul x se poate face prin împărţiri succesive la b şi reţinerea resturilor de la sfârşit
spre început:
x = bq0 + α0, 0 ≤ α0 < b, q0 ≠ 0
q0 = bq1 + α1, 0 ≤ α1 < b, q1 ≠ 0

qn-1 = b qn + αn, 0 ≤ αn < b, qn = 0


Scrierea lui x sub forma din teorema 1 se numeşte reprezentarea lui x în baza b.
Trecerea unui număr dintr-o bază în alta se numeşte conversie. Convenim să scriem
bază în care este reprezentat un număr ca indice. De exemplu numărul 4710 se scrie
în baza 2 astfel:

19
Mădălina Roxana Buneci

47 = 23 ⋅ 2 + 1 47 2
23 = 11 ⋅ 2 + 1 46 23 2
11 = 5 ⋅ 2 + 1 sau 1 22 11 2
5= 2⋅2+1 1 10 5 2
2= 1⋅2+0 1 4 2 2
1= 0⋅2+1 1 2 1
0
Deci 4710 = 1011112.
Conversia de la baza b la baza 10 se face prin însumarea puterilor lui b
înmulţite cu cifrele din baza b corespunzătoare. De exemplu, numărul 1278 şi 1A816
se scriu în baza 10 astfel:
1278 = 7 × 80 + 2 × 81 + 1 × 82 = 8710
1A816 = 8 × 160 + A × 161 + 1 × 162 = 8 × 160 + 10 × 161 + 1 × 162 = 42410.
Conversia unui număr întreg dintr-o bază b1 într-o bază b2 se face prin
intermediul bazei 10. În cazul particular, în care baza b1 care este o putere a lui b2
sau invers, conversia se poate face şi direct.
Fie b1 = bk, cu k ≥ 1. Conversia de la baza b1 = bk la baza b corespunde
dezvoltării fiecărei cifre din reprezentare în echivalentul ei în baza b utilizând k
cifre (adăugând eventual zerouri în faţă). De exemplu,
1728 = 0011110102 = 11110102,
deoarece 8 = 23 şi 18 = 0012, 28 = 0102, 78 = 1112
4E16 = 010011102 = 10011102,
deoarece 16 = 24 şi 416 = 01002, E16 = 11102.
Conversia de la baza b la baza b1 = bk se realizează înlocuind de la dreapta
la stânga grupele de k cifre din baza b prin cifra în baza b1 corespunzătoare. Dacă
numărul de cifre nu este multiplu de k se completează configuraţia la stânga cu
zerouri. De exemplu,
1 011 110 2 = 1368
 
1 3 6

1010 01112 = A716.


 
A 7

20
Metode Numerice

II. 2. Reprezentarea numerelor reale într-o bază

Pentru scrierea unui număr real şi pozitiv în baza b considerăm mulţimea


C = N* × ∏ Bk
k ≥1

cu Bk = {0, 1, …, b-1 }, şi funcţia F : C → (0, ∞) definită prin


∞ α
F(α0, α1, …, αn, …) = α0 + ∑ b nn .
n =1

α αn 1 1
Seria ∑ b nn este convergentă, pentru că 0 ≤
b n
≤ (b-1) n şi
b
∑ bn este
n ≥1 n ≥1

1
convergentă (fiind o serie geometrică cu raţia pozitivă şi subunitară). Deci F
b
este corect definită.

Teorema 2.2. Fie b o bază şi F : C → [0, ∞) funcţia definită mai sus. Atunci
1. F este surjectivă
v
2. Pentru orice număr real x > 0 care nu este de forma cu v∈N şi
bn
n∈ N* există un unic α ∈ C astfel încât F(α) = x.
v
3. Dacă numărul real x > 0 este de forma cu v∈N şi n∈ N* , atunci
bn
există două elemente α, β ∈ C cu α ≠ β astfel încât F(α) = F(β) = x.
În plus, dacă γ∈ C are proprietatea că F(γ) = x, atunci γ = α sau γ =
β.
Demonstraţie. În cele ce urmează notăm cu [y] partea întreagă a numărului
real y, adică cel mai mare număr întreg mai mic sau egal cu y.
1. Considerăm x ∈ (0, ∞) şi construim α ∈ C astfel încât F(α) = x. Pentru
orice n ∈ N, notăm qn = [xbn]. Din definiţia părţii întregi rezultă qn ≤ xbn < qn + 1,
qn q 1 q 1 q
sau echivalent n
≤ x < nn + n , ceea ce implică 0 ≤ x - nn < n şi lim nn =
b b b b b n → ∞ b
x. Pe de altă parte, înmulţind inegalitatea qn ≤ xbn < qn + 1 cu b şi ţinând cont că
[xbn+1] = qn+1, obţinem

21
Mădălina Roxana Buneci

bqn ≤ qn+1 < bqn + b


0 ≤ qn+1 - bqn < b
Luăm α0 = [x] şi αn = qn - b qn-1 pentru orice n ≥1. Evident α0 ∈ N şi 0 ≤ αn ≤ b-1.
Demonstrăm că F(α0, α1, …, αn, …) = x. Pentru aceasta este suficient să
∞ α
demonstrăm că ∑ b nn = x. Considerăm o sumă parţială a acestei serii:
n =0

n
αk n
q k − bq k −1 n
q q k −1  q q q
sn = ∑ k
= α0 + ∑ bk
= α0 + ∑  b kk − k −1
 = α0 + nn - 00 = nn .
k =0 b k =1 k =1  b  b b b

qn
Din lim = x, rezultă că lim sn = x.
n →∞ bn n →∞

v
2. Fie x > 0 un număr real care nu este de forma n
cu v∈N şi n∈ N*.
b
Presupunem prin absurd că în afara elementului α ∈ C construit anterior mai există

βn n
β
β ∈ C astfel încât F(β)= x, sau echivalent ∑ bn = x. Dacă notăm tn = ∑ b kk suma
n =0 k =0


β n
β
parţială de ordin n a acestei serii, atunci tn ≤ x şi x = ∑ b nn = ∑ b kk +
n =0 k =0


βk n βk ∞
1 1 b 1
∑ k ≤ ∑ b k + (b-1) ∑ k
= tn + (b-1) n +1
b −1
= tn + n . Deci
k = n +1 b k =0 k = n +1 b b b
1
tn ≤ x ≤ tn + .
bn
1 v
Dar x nu poate fi egal cu tn + n
pentru că x nu este de forma n cu v∈N şi n∈
b b
1
N*. În consecinţă tn ≤ x < tn + n
şi tnbn ≤ xbn < tnbn + 1. Ţinând cont şi de faptul
b
qn n
αk
că tnbn ∈ N, rezultă că [xbn] = tnbn. Ca urmare tn = n
= ∑ k
suma parţială a
b k =0 b

α α β
seriei ∑ b nn . Seriile ∑ b nn şi ∑ b nn având sumele parţiale egale au termenii
n ≥0 n ≥0 n≥0

generali egali şi deci α = β.

22
Metode Numerice

v
3. Fie x > 0 un număr real de este de forma n
cu v∈N şi n∈ N*. Fie n0 cel
b
v0
mai mic număr natural cu proprietatea că există v0 natural astfel încât x = .
b n0
n0
α
Utilizând relaţiile stabilite la punctul 1, obţinem q n 0 = [x b n 0 ] = x b n 0 = v0 şi ∑ b kk =
k =0

q n0 v0
n0
= = x. Deci
b b n0
α = (α0, α1, …, α n 0 , 0,0, …).

Demonstrăm că α n 0 ≠ 0. Presupunând prin absurd că α n 0 = 0, ar rezulta că x =


n 0 −1
α w0
∑ b kk =
b n 0 −1
ceea ce ar contrazice alegerea lui n0. Luând
k =0

β = (α0, α1, …, α n 0 -1, b -1, b -1, …).

obţinem

β n n0 α k 1 ∞
b −1 1 ∞
1
∑ b n = ∑ b k - b n0 + ∑ k
= x - n + (b-1) ∑ k
n =0 k =0 k = n 0 +1 b b 0 k = n 0 +1 b

1 1 b
=x- n0
+ (b-1) n 0 +1 = x.
b b b −1
Deci F(β) = x şi α ≠ β. În continuare presupunem că există γ∈ C cu proprietatea că
F(γ) = x. Fie n un număr natural cu proprietatea că există m > n astfel încât γm < b-1.
Atunci avem

γi ∞
1 1
∑ i
< (b-1) ∑ i
= n.
i = n +1 b i = n +1 b b
∞ γi
Ţinând cont de reprezentarea lui x sub forma x = ∑ i
, obţinem
i =0 b

n γi ∞ γ n ∞ γi
xbn = bn ∑ i
+ bn ∑ b ii = ∑ b n −i γ i + bn ∑ i
.
i =0 b i = n +1 i=0 i = n +1 b

23
Mădălina Roxana Buneci

n ∞ γi n
Numărul ∑ b n −i γ i este natural, iar bn ∑ i
∈ [0, 1). Deci ∑ b n −i γ i = [xbn]. Cu un
i=0 i = n +1 b i =0

k
raţionament similar, obţinem că ∑ b k −i γ i = [xbk] pentru orice k ≤ n. Din aproape în
i=0

aproape se obţine
α0 = [xb0] = γ0
α1 = [xb1] - b[xb0] = γ0b + γ1 - bγ0 => α1 = γ1

n n −1
αn = [xbn] - b[xbn-1] = ∑ b n −i γ i - b ∑ b n −i γ i = γn => αn = γn
i=0 i=0

Există două cazuri posibile


(i) Există un număr natural N astfel încât γn = b-1 oricare n ≥ N+1.
(ii) Oricare ar fi N există nN ≥ N+1 astfel încât γ n N ≠ b-1 (sau echivalent,

γ n N < b-1).

Presupunem că are loc cazul (i) şi considerăm N0 cel mai mic număr natural
cu proprietatea indicată. Din cele demonstrate mai sus rezultă că αi = γi pentru orice
i ≤ N0 -1 (deoarece γ N 0 < (b-1)). Demonstrăm că γ = β. Avem

γ n N0 γ k ∞
b − 1 N0 γ k ∞
1
x= ∑ n = ∑ bk + ∑ k = ∑ b k + (b-1) ∑ k
n =0 b k =0 k = N 0 +1 b k =0 k = N 0 +1 b

N0
γk 1 b N0
γk 1 w
=∑ k
+ (b-1) N 0 +1
= ∑ k
+ N = N .
k =0 b b b − 1 k =0 b b 0 b 0
şi deci n0 ≤ N0. Presupunând prin absurd că n0 < N0, se obţine următoarea
contradicţie
n0
α k n0 α k ∞ γ ∞ γ
x =∑ k
< ∑ k + ∑ kk = ∑ nn = x
k =0 b k =0 b k = n 0 +1 b n =0 b

∞ γ ∞ α
Utilizând în continuarea egalitatea x = ∑ b nn = ∑ b nn , se obţine γ N 0 = α N 0 -1, şi
n =0 n =0

deci α=β.
Dacă are loc cazul (ii), atunci evident αn = γn pentru orice n, şi deci γ = α.


24
Metode Numerice

∞ α
Definiţie 2.3. Reprezentarea x = ∑ b nn în baza b a numărului real x > 0 se
n =0

numeşte periodică dacă există un numerele naturale N, p astfel încât


αt = αt+p+1 pentru orice t ≥ N.
În această situaţie se foloseşte următoarea notaţie
x = α0, α1α2…αN-1(αNαN+1…αN+p).

Teoremă 2.4. Fie b o bază (adică b ∈ N, b ≥ 2). Un număr real x > 0 este
raţional dacă şi numai dacă x admite o reprezentare periodică în baza b.
Demonstraţie. Presupunem că x admite reprezentarea periodică
x = α0, α1α2…αN-1(αNαN+1…αN+p).
Atunci
∞ α N −1 α N+p
α  1 1 1 
x= ∑ b nn = ∑ b nn + ∑ b nn 1 + p +1 + 2( p+1) + ... + n ( p+1) + ...
n =0 n =0 n=N  b b b 
N −1 α n N+p α n ∞
1 N −1 α n N + p α n b p +1
=∑ n
+∑ n ∑ b (p+1)n =∑ n
+ ∑ n p +1 ,
n =0 b n=N b n =0 n =0 b n=N b b −1
de unde rezultă că x este un număr raţional.
i
Reciproc să considerăm un număr raţional x = , cu i şi j numere naturale, j
j
∞ α
≠ 0. Demonstrăm că reprezentarea x = ∑ b nn în baza b este periodică. Dacă x este
n =0

v
de forma cu v∈N ne vom referi la acea reprezentare care are proprietatea că
bn
oricare ar fi N există nN ≥ N+1 astfel încât α n N ≠ b-1. Atunci avem

α0 = [x] şi αn = [xbn] - b[xbn-1], n ≥ 1,


şi aşa cum am observat în demonstraţia teoremei 2
n
∑ b n −i α i = [xbn] pentru orice n.
i =0

Notăm
x0 = x, xn+1 = b(xn - αn), n ≥ 0.
Se observă că
α0 = [x] = [x0]

25
Mădălina Roxana Buneci

α1 + α0b = [xb] => α1 = [(x-α0)b] = [x1]


α2 + bα1 + b2α0 = [xb2] => α2 = [((x-α0)b - α1)b] = [(x1-α1)b] = [x2]

şi folosind un raţionament prin inducţie obţine αn = [xn] pentru orice n ≥ 0.


i
Ţinem cont că x = şi notăm cu u0 restul împărţirii lui i la j, şi cu un restul
j
bu n −1
împărţirii lui bun-1 la j pentru n ≥ 0. Raţionând prin inducţie obţinem că xn =
j
pentru orice n ≥ 1. Deoarece un reprezintă restul unei împărţiri la j, un ∈ {0, 1,…, j-
1} ceea ce arată că există N şi p naturale astfel încât uN = uN+p+1. De aici rezultă xN
= xN+p+1 şi αN = αN+p+1. Mai departe avem xN+1 = b(xN - αN) = b(xN+p+1 - αN+p+1) =
xN+p+2 şi deci αN+1 = αN+p+2. Folosind un raţionament prin inducţie după t, se
demonstrează că αN+t = αN+p+1+t, t ≥ 0. În consecinţă, reprezentarea lui x este
periodică.


Aşa cum am observat în demonstraţia teoremei precedente, pentru scrierea


unui număr real pozitiv x în baza b se procedează în felul următor. Se scrie
x = [x] + {x}, 0 ≤ {x} < 1,
unde prin [x] am notat partea întreagă a lui x, iar prin {x} partea fracţionară a lui x.
Conversia numărului real pozitiv x de la baza 10 la baza b se face separat pentru
partea întreagă (care este un număr întreg) şi partea fracţionară. Conversia părţii
fracţionare se face prin înmulţiri repetate cu b, după cum urmează:
b ⋅{x} = x1 = [x1] +{x1}= α1 + {x1}
b ⋅ {x1} = x2 = [x2] +{x2}= α2 + {x2}

b ⋅ {xn-1} = xn = [xn] +{xn}= αn + {xn}


ceea ce înseamnă că {x} se reprezintă : {x}b = 0, α1α2 …αn…
În urma acestor înmulţiri repetate, pot apare trei situaţii:

26
Metode Numerice

1. {xn}= 0, ceea ce determină încheierea algoritmului; în această situaţie {x} se


n α
poate reprezenta exact prin 0, α1α2 …αn = ∑ b kk (această situaţie
k =1

v
corespunde cazului x = n
cu v∈N şi n∈ N*).
b
2. {xn} ≠ 0, dar se observă o periodicitate, adică una sau un grup de cifre care
v
se repetă ( această situaţie corespunde cazului x raţional dar x ≠ pentru
bm
orice v∈N şi m∈ N*).
3. {xn} ≠ 0, iar cifrele obţinute se succed fără a respecta vreo regulă ( această
situaţie corespunde cazului x iraţional). În această situaţie 0,α1α2 …αn
n
αk
=∑ k
reprezintă doar o aproximaţie pentru {x} în baza b.
k =1 b

Exemplu : Să se reprezinte 5,125 în baza 2.


5,125 = 5 + 0,125
5 2
4 2 2
1 2 1
0
Deci 510 = 1012
0,125 × 2 = 0,25 = 0 + 0,25
0,25 × 2 = 0,5 = 0 + 0,5
0,5 × 2 = 1 =1+0
Deci 0,12510 = 0,0012. În consecinţă 5,12510 = 101,0012.

27
Mădălina Roxana Buneci

28
Metode Numerice

III. Reprezentarea informaţiei în sistemele de calcul

III.1. Reprezentarea internă a numerelor întregi

III. 1.1. Reprezentarea internă a numerelor întregi fără semn (pozitive)

Reprezentarea în memoria unui calculator a numerelor întregi depinde de


lungimea cuvântului utilizat (numărul de biţi). Pentru a reprezenta un număr întreg
pozitiv pe k biţi se face conversia numărului respectiv la baza 2, iar configuraţia
binară obţinută se completează la stânga cu zerouri până se obţin k cifre. Cel mai
mare număr întreg reprezentabil pe k biţi este

k-1 k-2 0 2k − 1
11 ...1 2 = 2 +2 +…+ 2 = = 2k – 1

k ori
2 −1

Deci pe k biţi se pot reprezenta numerele întregi cuprinse între 0 şi 2k – 1, în total 2k


numere.

Exemple:

k Domeniul de valori

8 biţi = 1 B (byte) 0…255

16 biţi = 2 B 0….65 535

32 biţi = 4 B 0….2 147 483 647

Reprezentarea numărului 6210 pe k = 8 biţi se face astfel:

62 = 25 + 24 + 23 + 22 +2 = 1111102 = 001111102

29
Mădălina Roxana Buneci

7 0
00111110 → 3E (în hexazecimal)
3 E
În reprezentarea binară a numerelor, ponderile cifrelor binare cresc de la dreapta la
stânga, numerotarea lor corespunzând puterilor crescătoare ale bazei de numeraţie
2. Astfel, prima cifră binară din dreapta reprezintă ponderea 20 şi este bitul cel mai
puţin semnificativ. Primul bit din stânga este bitul cel mai semnificativ.

Notăm cu ≺ relaţia de ordine lexicografică pe mulţimea şirurilor formate din 0 şi 1,


de lungime k. Din punct de vedere al ordinii lexicografice, reprezentările numerelor
întregi fără semn satisfac:

0 ≺ 1 ≺ … ≺ 2k - 1

În consecinţă, relaţia de ordine lexicografică este compatibilă cu relaţia de ordine


numerică naturală.

III.1.2. Reprezentarea internă a numerelor întregi (cu semn)

Vom prezenta trei metode de codificare a numerelor întregi cu semn:

• cod direct (semn şi valoare absolută)


• cod invers (complement faţă de 1)
• cod complementar (complement faţă de 2)
Să presupunem că se rezervă k biţi pentru reprezentarea unui număr întreg. Prin
toate cele metode numerele întregi pozitive se codifică prin conversie în baza 2 pe
k-1 biţi şi completarea primului bit cu zero. Astfel, pentru k = 16 reprezentarea
internă a numărului x = 7210 = 26 + 23 = 10010002 este :

0000 0000 01001000 → 0048 (în hexazecimal)


0 0 4 8

30
Metode Numerice

Mulţimea numerelor întregi nenegative reprezentabile pe k biţi (prin oricare din cele
trei metode) este {0, 1, 2, ..., 2k-1-1} (deoarece primul bit este rezervat, iar
reprezentarea se face doar pe restul de k-1 biţi).

Prezentăm mai departe modul în care se face codificarea numerelor întregi


negative prin fiecare din cele trei metode.

Prin metoda semn şi valoare (cod direct) se codifică valoarea absolută a


numărului întreg negativ pe k-1 biţi şi se completează primul bit cu 1. În consecinţă,
mulţimea numerelor întregi negative care se pot reprezenta prin această metodă
este{-2k-1 + 1, -2k-1 + 2, ...., 0}. Această metodă de reprezentare prezintă unele
inconveniente:

• zero are două reprezentări distincte (00…0 şi 10…0), ca +0 şi –0


• tabelele de adunare şi înmulţire sunt complicate datorită bitului de semn care
trebuie tratat separat.
Din punct de vedere al ordinii lexicografice avem:

+0 ≺ 1 ≺ … ≺ 2k-1-1 ≺ -0 ≺ -1 ≺ … ≺ -(2k-1-1)

Deci relaţia de ordine lexicografică nu este compatibilă cu relaţia de ordine


naturală.

Pentru a obţine codul invers:

1. se obţine reprezentarea valorii absolute a numărului întreg negativ pe


k biţi
2. în reprezentarea obţinută (la pasul 1) se înlocuieşte fiecare bit 0 cu 1
şi 1 cu 0
Mulţimea numerelor întregi cu semn care pot fi reprezentate prin această metodă
este acelaşi ca pentru metoda precedentă : {-2k-1 + 1, -2k-1 + 2, ...., 0, 1, ...., 2k-1-1}.

Dacă notăm cu x complementul faţă de 1 al numărului x, atunci


k
x + x = 11 .... 1 = 2 - 1
 2
k

31
Mădălina Roxana Buneci

În consecinţă, complementul faţă de 1 poate fi folosit pe post de opus faţă de


operaţia de adunare. Din acest motiv operaţiile aritmetice relativ la această
reprezentare sunt avantajoase, deoarece operaţia de scădere se realizează prin
adunarea complementului faţă de 1. Un dezavantaj al acestei reprezentări este
recunoaşterea a două zerouri (11…1 şi 00..0).

Din punct de vedere al ordinii lexicografice avem:

+0 ≺ 1 ≺ … ≺ 2k-1-1 ≺ -(2k-1-1) ≺ -(2k-1-2) ≺ … ≺ -0

Deci relaţia de ordine lexicografică nu este compatibilă cu relaţia de ordine


naturală.

Pentru a obţine codul complementar:

1. se obţine codul invers pe k biţi


2. se adună o unitate la valoarea obţinută (la pasul 1)
Zero admite o singură reprezentare prin această metodă: ( 00
 0 ).Mulţimea
...
k

numerelor întregi cu semn care pot fi reprezentate prin această metodă este

{-2k-1, -2k-1 + 2, ...., 0, 1, ...., 2k-1-1}.

Dacă x este complementul faţă de doi al lui x, atunci

k k
x + x = 11 .... 1 + 1 = 2 - 1 + 1 = 2
 2
k

Şi în cazul acestei reprezentări operaţiile aritmetice sunt avantajoase, deoarece


operaţia de scădere se realizează prin adunarea complementului faţă de 2.

Din punct de vedere al ordinii lexicografice avem:

+0 ≺ 1 ≺ … ≺ 2k-1-1 ≺ -2k-1 ≺ -(2k-1-1) ≺ -(2k-1-2) ≺ … ≺ -1

Deci relaţia de ordine lexicografică nu este compatibilă cu relaţia de ordine


naturală.

De exemplu, pentru k = 16, reprezentările pentru x = -72 prin cele trei metode se
obţin după cum urmează:

7210 = 10010002 =10010002

32
Metode Numerice

Cod direct (semn şi valoare absolută)

10000000 01001000 → 1048 (în hexazecimal)


1 0 4 8
Cod invers (complement faţă de 1)

11111111 10110111 → FFB7 (în hexazecimal)


F F B 7

Cod complementar(complement faţă de 2)

11111111 10111000 → FFB8 (în hexazecimal)


F F B 8
(deoarece 11111111101101112 + 1 = 11111111101110002)

Următorul program în C pune în evidenţă reprezentarea în memorie a lui 72


şi -72. Compilatorul folosit este Borland C++ 3.1.

#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(){
unsigned char x=72;
signed char y=-72;
clrscr();
printf("\n%u-->%04X\n%d-->%04X",x,x,y,y);
getch();
}

Programul afisează

33
Mădălina Roxana Buneci

72 --> 0048

-72 --> FFB8

Observaţie: Se poate remarca faptul că primul bit din stânga (bitul cel mai
semnificativ) este întotdeauna 0 pentru numerele pozitive şi 1 pentru numerele
negative şi aceasta pentru fiecare din cele trei reprezentări. Acest bit se mai
numeşte bit de semn.

În tabelul de mai jos sunt reprezentate, prin cele trei metode, pe k = 16 biţi
numere întregi cu semn:

valoare cod direct (semn şi cod indirect cod complementar


zecimală valoare absolută)
(compl. faţă de 1) (compl. faţă de 2)

216-1= 32767 0111…111=7FFF16 0111…111=7FFF16 0111…111=7FFF16

32766 0111…110=7FFE16 0111…110=7FFE16 0111…110=7FFE16

… … … …

1 0000…001=000116 0000…001=000116 0000…001=000116

+0 0000…000=000016 0000…000=000016 0000…000=000016

-0 1000…000=800016 1111…111=FFFF16 0000…000=000016

-1 1000…001=000116 1111…110=FFFE16 1111…111=FFFF16

… … … …

-32766 1111…110=FFFE16 1000…001=800116 1000…010=800216

-32767 1111…111=FFFF16 1000…000=800016 1000…001=800116

-32768= -216 1000…000=800016

34
Metode Numerice

III. 2. Reprezentarea internă a numerelor reale

III. 2.1. Forma normalizată

Fie N şi b ∈ N, b ≥ 2. Se numeşte forma normalizată în baza b a numărului


real nenul x, o reprezentare

x = m ⋅ bE, unde b = baza

m = mantisa

E = exponentul

1
cu 0,1b ≤ |m|b < 1b ⇔ ≤ |m| < 1 (ceea ce înseamnă că mantisa este un număr
b
subunitar cu prima cifră după virgulă în reprezentarea în bază b diferită de zero).

Pentru a scrie numărul sub formă normalizată trebuie găsite mantisa şi


∞ αn
exponentul. Considerăm reprezentarea |x| = ∑ n
care are proprietatea că ar fi N
n =0 b

există nN ≥ N+1 astfel încât α n N ≠ b - 1. Reprezentăm numărul întreg α0 = bnβn +

bn-1βn-1 + … bβ1 + β0 în baza b. Astfel scrierea lui x în baza b este dată de xb =


±βnβn-1…β1β0,α1α2…αm… Mantisa se obţine deplasând virgula în faţa primei cifre
nenule ce apare în scrierea numărului (în baza b). Exponentul se ia egal cu numărul
de poziţii cu care s-a deplasat virgula precedat de semnul + dacă deplasarea s-a
făcut de la dreapta la stânga, şi de semnul – dacă deplasarea s-a făcut de la stânga la
dreapta. Astfel

• dacă x este reprezentat în baza b sub forma xb = ±βnβn-1…β1β0,α1α2…αm…,


cu βn ≠ 0, atunci forma normalizată este xb = ±0, βnβn-1…β1β0α1α2…αm… ⋅
bn+1
• dacă x este reprezentat în baza b sub forma xb = ±0, α1α2…αm…, cu α1 ≠ 0,
atunci forma normalizată este xb = ±0, α1α2…αm…⋅ b0

35
Mădălina Roxana Buneci

• dacă x este reprezentat în baza b sub forma xb = ±0,α1α2… αiαi+1 …αm…,


cu α1= α2 = … = αi = 0 şi αi+1 ≠ 0, atunci forma normalizată este xb = ±0,
αi+1 …αm…⋅ b-i.
Reprezentarea sub formă normalizată a unui număr real x este unică.

III.2.2. Reprezentarea în virgulă mobilă

Una dintre cele mai răspândite reprezentări internă (în PC-uri) a numerelor
reale este reprezentarea în virgulă mobilă. Reprezentarea în virgulă mobilă
presupune existenţa unei baze b (întotdeauna presupusă pară) şi a unei precizii p.
Un număr în virgulă mobilă este un număr de forma
α1 α 2 α p −1
±(α0 + + 2 +…+ p −1 )bE, αk ∈ {0, 1, ...b-1} pentru orice k = 0, p − 1 , E ∈Z.
b b b
Mai precis, denumirea de număr în virgulă mobilă va fi utilizată pentru numerele
reale care se reprezintă exact sub forma de mai sus. În această reprezentare α0, α1,
…, αp-1 se numesc cifre semnificative. Fiecărei reprezentări în virgulă mobilă i se
asociază două numere întregi, Emin şi Emax, ce reprezintă valorile limită permise
pentru exponentul E (Emin ≤ E ≤ Emax). Tabelul de mai jos exemplifică cei patru
parametri (baza, precizia, valorile limită ale exponentului) ce caracterizează
reprezentarea în virgulă mobilă în diverse sisteme

Sistem baza b precizia p Emin Emax


IEEE single-precission 2 24 -126 127
IEEE double-precission 2 53 -1022 1023
Cray 2 48 -16383 16384
calculator HP 10 12 -499 499
mainframe IBM 16 6 -64 63

36
Metode Numerice

Reprezentarea în virgulă mobilă se numeşte normalizată dacă se impune condiţia ca


cifra cea mai semnificativă α0 să fie nenulă. Reprezentarea normalizată are
următoarele avantaje:
• reprezentarea fiecărui număr este unică
• nu de pierd cifre pentru reprezentarea primele zerourilor de la dreapta
virgulei
• în sistemele binare (corespunzătoare bazei b =2) prima cifră poate să nu mai
fie stocată (deoarece este întotdeauna 1).
Restricţia α0 ≠ 0, face imposibilă reprezentarea lui zero. O reprezentare naturală a
lui zero este 1,0⋅ b E min −1 .
Numărul de numere în virgulă mobilă normalizată este
2(b-1)bp-1(Emax - Emin +1).
Cel mai mic număr pozitiv normalizat se notează UFL (underflow level) şi este
E min
UFL = b .
Cel mai mare număr normalizat se notează OFL (overflow level) şi este
b −1 b −1 b −1 E
OFL = (b-1 + + 2 +…+ p −1 ) b max
b b b
E max +1 1
=b (1 - ).
bp
Ca urmare nu toate numerele reale sunt reprezentabile exact. Numerele prea mari
pentru a fi reprezentate corespund unei depăşiri superioare de capacitate (overflow),
iar numerele prea mici unei depăşiri inferioare de capacitate (underflow). Pentru a
fi reprezentat un număr real x este aproximat cu un număr în virgulă mobilă pe care
convenim să-l notăm fl(x). Aproximarea lui x prin fl(x) poartă numele de rotunjire,
iar eroarea introdusă de eroare de rotunjire. Există mai multe modalităţi pentru
rotunjire:
• trunchiere (rotunjire prin tăiere): se reţin primele p cifre din reprezentarea
α1 α 2 α p −1
normalizată a lui x = ± (α0 + + 2 +…+ p −1 + …)bE; deci
b b b
α1 α 2 α p −1
fl(x) = ± (α0 + + 2 +…+ p −1 )bE.
b b b

37
Mădălina Roxana Buneci

• rotunjire la cel mai apropiat număr în virgulă mobilă (rotunjire la par):


fl(x) este cel mai apropiat număr în virgulă mobilă de x; în caz de egalitate
(dacă există două numere în virgulă mobilă egal depărtate de x) se consideră
acel număr în virgulă mobilă a cărui ultimă cifră este pară.
Rotunjirea la par determină o acurateţe mai mare a reprezentării. Acurateţea
sistemului în virgulă mobilă este caracterizată de aşa numita precizie a maşinii (sau
epsilon maşină), notată εmach. Precizia a maşinii este definită ca cel mai mic număr
pozitiv ε cu proprietatea că
fl(1.+ ε) > 1.
Dacă regula de rotunjire este trunchierea atunci
εmach = b1 - p,
iar dacă regula de rotunjire este rotunjirea la par atunci
1 1- p
εmach = b .
2
Eroarea relativă maximă cu care fl(x) aproximează x este dată de
fl(x ) − x
≤ εmach.
x
Deşi amândouă sunt "mici", precizia maşinii (εmach) şi cel mai mic număr pozitiv
normalizat UFL (în reprezentare în virgulă mobilă fixată) nu trebuie confundate. De
obicei Emin < -p şi deci între ele există relaţia
0 < UFL < εmach < OFL.
Fie x un număr real aproximat de
α1 α 2 α p −1
fl(x) =±(α0 + + 2 +…+ p −1 )bE.
b b b
Exponentul E poate lua atât valori pozitive cât şi valori negative. Cel mai adesea
exponentul este “decalat “ şi reprezentat ca un număr întreg pozitiv (fără semn).
Aceasta deoarece ordinea lexicografică (stabilită între şirurile de cifre din
reprezentare) şi ordinea naturală sunt compatibile în cazul numerelor întregi fără
semn. În consecinţă, compararea exponenţilor (şi a numerelor reale

38
Metode Numerice

corespunzătoare) poate fi făcută eficient. Astfel reprezentarea internă a unui număr


α1 α 2 α p −1
real x aproximat prin fl(x) = ± (α0 + + 2 +…+ p −1 )bE se face sub forma
b b b

s ed α0α1…αp-1

unde s este semnul lui x (se completează cu 0 dacă semnul este + şi cu 1 dacă
semnul este -) iar ed este exponentul obţinut prin adunarea unui decalaj D la
exponentul E:
ed = E + D.

III.2.3. Standardul IEEE-754

IEEE este acronim pentru Institute of Electrical and Electronics Engineers,


o organizaţie ce are drept principal scop elaborarea standardelor pentru produsele
hardware şi software. Standardul IEEE-754 se referă la aritmetica în virgulă mobilă
în sistemele binare. Acest standard precizează formatul de reprezentare în memorie
în simplă şi dublă precizie a unui număr real. Reprezentarea se face în virgulă
mobilă normalizată:
α1 α 2 α p −1
x ≈ fl(x) = ± (1 + + 2 +…+ p −1 )2E, p = 24, 53.
2 2 2
Sunt admise şi aşa numitele numere denormalizate ("denormalized floating-point
numbers"):
α1 α 2 α p −1
± (0 + + 2 +…+ p −1 )2E, p = 24, 53,
2 2 2
cu cel puţin una dintre cifrele binare α1, α2, …, αp-1 nenule.
Standardul IEEE-754 defineşte două valori speciale pentru situaţii excepţionale:
• Inf, pe post de "infinit" ("infinity"), pentru rezultatul împărţirii unui număr
finit la zero.
• NaN, pe post de "non-număr" ("not a number"), pentru rezultatul
următoarelor operaţii

39
Mădălina Roxana Buneci

▹ Adunare : Inf + (-Inf)


▹ Înmulţire: 0⋅Inf
▹ Împărţire: 0/0 sau Inf/Inf
▹ Calculul restul împărţirii unui număr x la 0 sau a lui Inf la x
▹ Calculul rădăcinii pătrate x pentru x < 0.
Scopul acestor valori este acela de a permite continuarea calculului.
α1 α 2 α p −1
Un număr în virgulă mobilă ±(α0 + + 2 +…+ p −1 )2E se reprezintă intern
2 2 2
conform IEEE-754 sub forma

s ed α1…αp-1

unde pentru s se rezervă un bit ce se completează cu 0 dacă numărul este pozitiv şi


cu 1 dacă numărul este negativ, iar pentru exponentul decalat ed se rezervă k biţi
(k=8, 11). Decalajul considerat este D = 2k-1 - 1, deci
ed = E + 2k-1 -1,
Pe k biţi se pot reprezenta ca numere întregi fără semn 2k valori, de la 0 la 2k
– 1. Valorile 0 şi 2k – 1 sunt rezervate pentru numerele denormalizate şi pentru
valorile speciale Inf şi Nan. Deci pentru un număr în virgulă mobilă normalizată
trebuie îndeplinită condiţia 1 ≤ ed ≤ 2k-2. De aici rezultă că -2k-1+2 ≤ E ≤ 2k-1-1. De
exemplu, pe k = 8 biţi se pot reprezenta numere întregi fără semn de la 0 la 255.
Decalajul considerat este 27 - 1 = 127, deci exponentul E ia valori de la – 126 la
127. Numărul de biţi rezervaţi pentru exponent determină intervalul de numere reale
reprezentabile în calculator. Numărul de biţi rezervaţi pentru mantisă determină
precizia de reprezentare (gradul de detaliere) a numerelor. Reprezentarea ±(α0 +
α1 α 2 α p −1
+ 2 +…+ p −1 )2E fiind normalizată, există siguranţa că α0 = 1, ceea ce
2 2 2
permite omiterea sa (bit ascuns) pentru creşterea preciziei de reprezentare, dar
complică prelucrarea informaţiei.
Formatele de reprezentare a numerelor în virgulă mobilă (conform standardului
IEEE 754) sunt:
• simplă precizie (single-precission) pe 32 de biţi:

40
Metode Numerice

• 1 bit pentru semnul mantisei


• 8 biţi pentru exponentul decalat (Emin = -126, Emax = 127)
• 23 biţi pentru mantisă (p = 24, α0 = 1 se omite)
• dublă precizie (double-precission) pe 64 de biţi
• 1 bit pentru semnul mantisei
• 11 biţi pentru exponentul decalat (Emin = -1022, Emax = 1023)
• 52 biţi pentru mantisă (p = 53, α0 = 1 se omite)
Regula de rotunjire este rotunjirea la par. Deci pentru
• simplă precizie, εmach = 2-24 ≈ 10-7 (7 cifre zecimale semnificative).
• dublă precizie, εmach = 2-53 ≈ 10-16 (16 cifre zecimale semnificative).

Considerăm o reprezentare în memorie, în simplă precizie:

s e7e6e5e4e3e2e1e0 α1 α2 α23

α1 α 2 α 23
Fie ed = e0 + e12 + e222 + … + e727 şi m = + 2 +…+ 23 . Valoarea v
2 2 2
reprezentată se determină după cum urmează:
▹ dacă 0 < ed < 255, atunci v = (-1)s⋅(1 + m)⋅2ed - 127.

▹ dacă ed = 0, αk = 0 pentru orice k= 1,23 şi s = 0, atunci v = 0.

▹ dacă ed = 0, αk = 0 pentru orice k= 1,23 şi s = 1, atunci v = - 0.

▹ dacă ed = 0 şi există αk ≠ 0, atunci v = (-1)s⋅ m ⋅2 - 126


; v este o valoare
denormalizată
▹ dacă ed = 255, αk = 0 pentru orice k= 1,23 şi s = 0, atunci v = Inf.

▹ dacă ed = 255, αk = 0 pentru orice k= 1,23 şi s = 1, atunci v = -Inf.

▹ dacă ed = 255 şi există αk ≠ 0, atunci v = NaN.

Fie reprezentarea în memorie, în dublă precizie:

s e10e9 …e0 α1 α2 α52

41
Mădălina Roxana Buneci

α1 α 2 α 52
Fie ed = e0 + e12 + e222 + … + e10210 şi m = + 2 +…+ 52 . Valoarea v
2 2 2
reprezentată se determină după cum urmează:
▹ dacă 0 < ed < 2047, atunci v = (-1)s⋅(1 + m)⋅2ed - 1023.

▹ dacă ed = 0, αk = 0 pentru orice k= 1,52 şi s = 0, atunci v = 0.

▹ dacă ed = 0, αk = 0 pentru orice k= 1,52 şi s = 1, atunci v = - 0.

▹ dacă ed = 0 şi există αk ≠ 0, atunci v = (-1)s⋅ m ⋅2 - 1022


; v este o valoare
denormalizată
▹ dacă ed = 2047, αk = 0 pentru orice k= 1,52 şi s = 0, atunci v = Inf.

▹ dacă ed = 2047, αk = 0 pentru orice k= 1,52 şi s = 1, atunci v = -Inf.

▹ dacă ed = 2047 şi există αk ≠ 0, atunci v = NaN.


Exemple:
Să se reprezinte în simplă precizie numerele: 228,15 - 27, 25 0,1 1,2
x = 228,15
x = 228 + 0,15
228 = 128 + 64 + 32 + 4 = 27 + 26 +25 +22 = 111001002
0,15 ⋅ 2 = 0,30 = 0 + 0,3
0,3 ⋅ 2 = 0,6 = 0 + 0,6
0,6 ⋅ 2 = 1,2 = 1 + 0,2
0,2 ⋅ 2 = 0,4 = 0 + 0,4
0,4 ⋅ 2 = 0,8 = 0 + 0,8
0,8 ⋅ 2 = 1,6 = 1 + 0,6

x = 11100100,00100110011001…
Forma normalizată:
x = 0,111001000010011001…⋅ 28 = 1,11001000010011001…⋅ 27
ed = 7 + 28-1 - 1 = 135, ed2 = 100001102
m = 11001000010011001100110 [011]
(am omis primul bit =1, iar cei trei biţi din paranteză sunt utilizaţi pentru rotunjire la
par)

42
Metode Numerice

fl(x) = 1, 11001000010011001100110⋅ 28
Reprezentare în virgulă mobilă, simplă precizie, (cu bit ascuns) pentru 228,15:

0 100 0011 0 110 0100 0010 0110 0110 0110


4 3 6 4 2 6 6 6
Deci reprezentării cu bit ascuns a lui 228,15 îi corespunde 43642666 în
hexazecimal.
x = - 27, 25
|x| = 27 + 0,25
27 = 16 + 8 + 2 + 1 = 24 + 23 +21 +20 = 110112
0,25 = 2-2 = 0,012
x = 11011,01
Forma normalizată: x = 0,1101101× 25 = 1,101101× 24
ed = 4 + 28-1 -1 = 131, ed2 = 100000112
Reprezentare în virgulă mobilă, simplă precizie (cu bit ascuns) pentru –27,25:

11000001110110100000000000000000
C 1 D A 0 0 0 0
Deci reprezentării cu bit ascuns a lui -27,25 îi corespunde C1DA0000 în
hexazecimal.
x = 0,1
0,1 ⋅ 2 = 0,2
0,2 ⋅ 2 = 0,4
0,4 ⋅ 2 = 0,8
0,8 ⋅ 2 = 1,6 = 1 + 0,6
0,6 ⋅ 2 = 1,2 = 1 + 0,2
0,2 ⋅2 = 0,4
0,110 = 0, 00011001100110011…
x = 0, 110011001100…⋅2-3 = 1,10011001100110011001100 110…⋅2-4
fl(x) =1, 10011001100110011001101 ⋅ 2-4
(după cei 23 de biţi ai mantisei urmează 110, şi deci rotunjirea se face prin
adăugarea unei unităţi).

43
Mădălina Roxana Buneci

ed = - 4 + 28-1 -1 = 123 = 26 + 25 + 24 + 23 + 2 + 1 , ed2 = 11110112


Reprezentare în virgulă mobilă, simplă precizie (cu bit ascuns) pentru 0,1:

0 0 1 1 11 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
3 D C C C C C D
Deci reprezentării cu bit ascuns a lui 0,1 îi corespunde 3DCCCCCD în hexazecimal.
x = 1,2
1,2 = 1 + 0,2
0,2 ⋅ 2 = 0,4
0,4 ⋅ 2 = 0,8
0,8 ⋅ 2 = 1,6 = 1 + 0,6
0,6 ⋅ 2 = 1,2 = 1 + 0,2
0,2 ⋅2 = 0,4
x = 1, 0011001100110011…
x = 1,00110011001100110011001 100…⋅20
fl(x) =1,00110011001100110011010 ⋅ 20
(după cei 23 de biţi ai mantisei urmează 100, deci rotunjirea se face astfel încât
ultimul bit să aibă valoare pară).
ed = 0 + 28-1 -1 = 127 = 26 + 25 + 24 + 23 + 22 +2 +1 , ed2 = 11111112
Reprezentare în virgulă mobilă, simplă precizie (cu bit ascuns) pentru 1,2:

0 0 1 1 11 1 1 1 0 0 1 1 0 01 1 0 01 1 0 01 1 0 01 1 0 1 0
3 F 9 9 9 9 9 A
Deci reprezentării cu bit ascuns a lui 1,2 îi corespunde 3F99999A în hexazecimal.

Următorul program în C verifică reprezentările de mai sus.

#include <stdio.h>
#include <conio.h>
void main(){
long int *i;
float f1=228.15,f2=-27.25, f3=0.1, f4=1.2;
clrscr();
i=(long int*) &f1;

44
Metode Numerice

printf("\nNumar in virgula mobila:%f\n\tFormat intern %08lX


(hexazecimal)",f1,*i);
i=(long int*) &f2;
printf("\nNumar in virgula mobila:%f\n\tFormat intern %08lX
(hexazecimal)",f2,*i);
i=(long int*) &f3;
printf("\nNumar in virgula mobila:%f\n\tFormat intern %08lX
(hexazecimal)",f3,*i);
i=(long int*) &f4;
printf("\nNumar in virgula mobila:%f\n\tFormat intern %08lX
(hexazecimal)",f4,*i);
getch();
}

Programul afişează

Numar in virgula mobila: 228.149994


Format intern 43642666 (hexazecimal)
Numar in virgula mobila: -27.250000
Format intern C1DA0000 (hexazecimal)
Numar in virgula mobila: 0.100000
Format intern 3DCCCCCD (hexazecimal)
Numar in virgula mobila: 1.200000
Format intern 3F99999A (hexazecimal)

III.2.4. Aritmetica în virgulă mobilă

Din secţiunea precedentă rezultă că nu toate numerele reale pot fi


reprezentate exact într-un sistem în virgulă mobilă. De asemenea în urma evaluării
unei expresii ai cărei operanzi sunt reprezentabili rezultatul obţinut nu este neapărat
reprezentabil. În mod ideal
x flop y = fl(x op y)
unde op este un operator binar (+, - , *, /), iar flop desemnează corespondentul
operatorului respectiv în aritmetica în virgulă mobilă. Sistemele ce satisfac

45
Mădălina Roxana Buneci

standardul IEEE-754 ating acest ideal în situaţia în care x op y se găseşte în


intervalul de numere reale reprezentabile [UFL, OFL].
Depăşirea superioară de capacitate (overflow) cauzează de obicei probleme
mai serioase decât depăşirea inferioară de capacitate (underflow), deoarece nu
există nici o aproximaţie bună pentru un număr real oarecare "mare". Un număr
real foarte mic poate fi în mod rezonabil aproximat cu zero. Pe multe sisteme de
calcul depăşirea superioară de capacitate este fatală, în timp ce în caz de depăşire
inferioară de capacitate, numărul respectiv este asociat cu zero.
Anumite legi ale aritmeticii reale nu sunt valabile într-un sistem în virgulă
mobilă. Astfel adunarea şi înmulţirea în virgulă mobilă sunt comutative, dar nu
asociative. De exemplu, dacă ε este un număr pozitiv mai mic decât εmach, dar mai
mare decât εmach/2, atunci
(1 + ε) + ε = 1, iar 1 + (ε + ε) > 1.
Rezultatul unei operaţii în virgulă mobilă poate să fie semnificativ diferit
faţă de rezultatul aceleaşi operaţii în aritmetica exactă. Să considerăm numărul real
1
x = . Se reprezintă în baza 2, prin x = 0,0001100110011…=1,
10
10011001100110011001101…2-4. În simplă precizie este aproximat de fl(x) = 1,
10011001100110011001101⋅2-4, ceea ce introduce o eroarea de
0.000000000000000000000000011001100 în binar sau aproximativ 0.000000047 în
zecimal. Programul în C de mai jos pune în evidenţă cum se propagă această eroare
prin înmulţire:

#include <stdio.h>
#include <conio.h>
void main(){
float f=1./10,z=10;
int i;
clrscr();
for(i=1;i<33;i*=2){
printf("\n0.1*10^%d-10^%d = %f ",i+1,i,f*(z*10)-z);
z=z*z;
}

46
Metode Numerice

getch();
}
Programul afişează
0.1*10^2 - 10^1 = 0.000000
0.1*10^3 - 10^2 = 0.000001
0.1*10^5 - 10^4 = 0.000149
0.1*10^9 - 10^8 = 1.490116
0.1*10^17 - 10^16 = 149011616.000000
0.1*10^33 - 10^32 = 1490116168828835360000000.000000
1
Membrul drept ar fi trebuit să fie 0, deoarece ⋅10i+1 - 10i =0.
10
În cazul scăderii a două numere reale x şi y, poate apărea următorul fenomen
(catastrophic cancellation)
(fl(x ) − fl(y )) − fl(x − y )
 εmach,
fl(x − y )

dacă fl(x) este egal (sau foarte apropiat de) fl(y). În următorul program (în C)
aproximăm sin(x) printr-o sumă parţială a seriei

(− 1)n
∑ (2n + 1)! x 2n +1
n =0

Seria fiind alternantă şi convergentă, o sumă parţială de ordin n, aproximează suma


2 n +1
x
seriei (i.e. sin(x)) cu o eroare absolută maximă de . Programul de mai jos
(2n + 1)!
reprezintă versiunea în C pentru calculul sumei care aproximează sin(x):

#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(){
float x,s,t,eps,x2;
int i,n;
clrscr();
printf("x=");scanf("%f",&x);
printf("Eroarea=");scanf("%f",&eps);
t=x;s=0;i=1; x2=x*x;

47
Mădălina Roxana Buneci

while (fabs(t)>=eps){
s+=t;printf("\n%f",s);
t=-t*(x2/(4*i*i+2*i));
i++;
}
printf("\nsin(%f) = %f",x,s);
printf("\nsin(%f) = %f" ,x,sin(x));
getch();
}
Pentru x=2 şi eroare 10-7 se obţine aproximaţia 0.909297 corectă a lui sin(2).
Pentru x = 40 şi eroare 10-7 se obţine aproximaţia 523443136.0 a lui sin(40) !
Valoarea corectă este 0.745113…Acest rezultat se datorează fenomenului de
reducere (catastrophic cancellation). Pentru a evidenţia diferenţele între cazurile în
care se lucrează în aritmetica exactă şi cazurile în care se lucrează în aritmetica în
virgulă mobilă prezentăm implementarea calculul sumei de mai sus (care
aproximează sin(x)) în MAPLE.

> sinus:=proc(x,epsilon)
> local t, x2, i,s;
> s:=0; i:=1;t:=x;x2:=x*x;
> while evalf(abs(t))>=evalf(epsilon) do
> s:=s+t; t:=-t*x2/(4*i*i+2*i);i:=i+1
> od;
> RETURN(s)
> end;

141782
Pentru x=2 şi eroare 10-5 se obţine aproximaţia ≈ 0.9092961362 corectă a
155925
lui sin(2):

> sinus(2, 10^(-5));


141782
155925

> evalf(sinus(2,10^(-5)));
0.9092961360

48
Metode Numerice

> evalf(sin(2));
0.9092974268
> sinus(2., 10^(-5));
0.9092961362
> sin(2.);
0.9092974268
Atunci când primul parametru al procedurii sinus este întreg (sau raţional)
toate calculele se execută simbolic, iar când parametru este în virgulă mobilă
calculele se execută în virgulă mobilă.
Pentru x = 30 şi eroare 10-5 se obţine:

> evalf(sinus(30,10^(-5)));
-0.9880298724
> evalf(sin(30));
-0.9880316241
> sinus(30., 10^(-5));
-13.41937809
> sin(30.);
-0.9880316241

Se observă că în cazul în care calculele se execută simbolic (parametru


actual este dat ca număr întreg) şi evaluarea în virgulă mobilă se face doar asupra
rezultatului, aproximaţia obţinută este -0.9880298724 pentru care 4 zecimale (5 cu
rotunjire) coincid cu cea furnizată de funcţia predefinită sin. Însă în situaţia în care
parametru actual este în virgulă mobilă şi ca urmare calculele se execută în virgulă
mobilă aproximaţia furnizată este -13.41937809 !!! Acest rezultat se datorează
fenomenului de reducere (catastrophic cancellation).
Următoarea procedură MAPLE evaluează valoarea unui polinom într-un
punct. Parametru p reprezintă lista coeficienţilor polinomului (p[i] este coeficientul
lui xi) iar x punctul în care se face evaluarea.

> val:=proc(p,x)
> local n,i,v;
> n:=nops(p);v:=p[n];

49
Mădălina Roxana Buneci

> for i from n-1 by -1 to 1 do v:=x*v+p[i]


> od;
> RETURN(v)
> end;

Astfel
> val([1,2,1], 2);
9
calculează valoarea polinomului 1 + 2X + X2 în X = 2.
Să considerăm polinomul
(X-1)8 = 1 – 8X + 28X2 – 56X3 + 70X4 – 56X5 + 28X6 - 8X7 + X8).
9999
Reprezentarea grafică a acestui polinom pe intervalul [ ,1] este:
10000

> plot((x-1)^8, x=9999/10000..1);

Dacă parametrii procedurii val sunt întregi sau raţionali şi calculele se


execută simbolic cu excepţia evaluării în virgulă mobilă a rezultatului se obţin
9999 i
următoarele valori ale polinomului pentru xi = + , 1 ≤ i ≤ 10:
10000 100000
> for i from 0 to 10 do evalf(val([1,-8,28,-56,70,-56,28,-8,1],
9999/10000+i/100000)) od;

0.1000000000 10 -31

50
Metode Numerice

0.4304672100 10 -32
0.1677721600 10 -32
0.5764801000 10 -33
0.1679616000 10 -33
0.3906250000 10 -34
0.6553600000 10 -35
0.6561000000 10 -36
0.2560000000 10 -37
0.1000000000 10 -39
0.
Aceeaşi procedură apelată cu aceeaşi parametrii, cu singura excepţie că
punctele în care se calculează valorile sunt reprezentate în virgulă mobilă dă
rezultatele:
> for i from 0 to 10 do evalf(val([1,-8,28,-56,70,-56,28,-8,1],
0.9999+i/100000)) od;
0.
-0.1 10 -8
0.84 10 -8
-0.14 10 -7
-0.8 10 -8
-0.2 10 -8
-0.8 10 -8
-0.14 10 -7
0.84 10 -8
-0.1 10 -8
0.
Erorile mari se datorează execuţiei calculelor în aritmetica virgulei mobile. Şi mai
sugestiv este graficul de mai jos:

> plot(val([1,-8,28,-56,70,-56,28,-8,1], x), x = 0.9999..1.);

51
Mădălina Roxana Buneci

sau cel obţinut utilizând un număr mai mic de puncte:


> plot(val([1,-8,28,-56,70,-56,28,-8,1], x), x = 0.9999..1.,
numpoints=5);

52
Metode Numerice

IV. Rezolvarea sistemelor liniare

IV.1. Elemente de analiză matriceală

Fie V un spaţiu vectorial (liniar) peste corpul K (K=R sau K=C).


Reamintim o serie de definiţii şi teoreme legate de spaţiile normate şi spaţiile
Hilbert. O normă pe V este o funcţie p: V → [0, ∞) care satisface următoarele
condiţii:
1. p(x) = 0 dacă şi numai dacă x = 0.
2. p(x +y) ≤ p(x) + p(y) pentru orice x şi y ∈ V.
3. p(λx) = |λ| p(x) pentru orice λ∈K şi orice x ∈V.
Perechea (V, p) se numeşte spaţiu normat. În cele ce urmează vom nota p(x) = ||x||
pentru orice x∈V şi vom spune că V este un spaţiu normat în loc de (V, ||⋅||), atunci
când norma ||⋅|| se subînţelege. Pe orice spaţiu normat se poate defini o metrică
(distanţă) canonică d prin d(x, y) = ||x - y|| pentru orice x, y ∈V. Prin urmare
oricărui spaţiu normat i se pot asocia în mod canonic o structură metrică şi o
structură topologică. Petru orice x0∈V şi orice r >0 vom nota cu B(x0, r) bila din V
centrată în x0 de rază r:
B(x0, r) = {x ∈ V: || x - x0 || < r}.
Pentru orice spaţiu normat V (înzestrat cu structura metrică şi structura topologică
asociate în mod canonic) sunt adevărate următoarele afirmaţii:
1. Şirul (xn)n din V converge la x∈V dacă şi numai dacă lim || xn - x || = 0
n →∞

2. Şirul (xn)n din V este şir Cauchy (fundamental) dacă şi numai dacă pentru orice
ε>0 există nε ∈ N astfel încât || xn - xm || < ε pentru orice m,n ≥ nε.
3. || ⋅ || : V → [0, ∞) este o aplicaţie continuă

53
Mădălina Roxana Buneci

4. Funcţiile (x, y) → x + y [: V × V → V] şi (λ, x) → λx [: K × V → V] sunt


continue (V × V şi K × V sunt înzestrate cu topologia produs).
O normă se numeşte completă dacă metrica asociată ei este completă (i.e. dacă
orice şir Cauchy este convergent). Un spaţiu normat se numeşte spaţiu Banach
dacă norma cu care este înzestrat este completă. Normele p1 şi p2 definite pe spaţiul
vectorial V se numesc echivalente dacă topologiile asociate (în mod canonic) lor
coincid. Pentru a desemna faptul că p1 şi p2 sunt echivalente vom folosi notaţia p1 ~
p2. Se poate arăta că normele p1 şi p2 sunt echivalente dacă şi numai dacă există M,
m >0 astfel încât
m p1(x) ≤ p2(x) ≤ M p1(x) pentru orice x ∈ V.
V se numeşte K algebră normată dacă V este K algebră şi în plus este
înzestrat cu o normă ||⋅|| ce satisface următoarele două proprietăţi:
1. (V, ||⋅||) este spaţiu normat
2. ||xy|| ≤ ||x|| ||y|| pentru orice x, y ∈V,
O algebră normată înzestrată cu o normă completă se numeşte algebră Banach.
Fie V şi W două spaţii vectoriale peste corpul K (K=R sau K=C). O
aplicaţie f : V → W se numeşte liniară dacă şi numai dacă f(λx + µy) = λf(x) +
µf(y) pentru orice λ, µ∈ K şi x, y∈ V. Dacă f : V → W este o aplicaţie liniară, iar
V şi W sunt spaţii normate, atunci următoarele afirmaţii sunt echivalente:
1. f este continuă
2. f este continuă în origine
3. Există M > 0 cu proprietatea că || f(x) || ≤ M||x || pentru orice x∈E.
4. sup ||f(x)||< ∞.
x ≤1

5. sup ||f(x)||< ∞.
x =1

Vom nota cu L(V, W) spaţiul aplicaţiilor liniare şi continue f : V → W. Pentru orice


f∈ L(V, W), avem
sup ||f(x)|| = sup ||f(x)||= inf {M > 0 : || f(x) || ≤ M||x || pentru orice x∈V }.
x ≤1 x =1

54
Metode Numerice

Dacă pentru orice f∈ L(V, W), definim || f || = sup ||f(x)||, atunci (L(V, W), ||⋅||)
x ≤1

devine un spaţiu normat. Spaţiul L(V, W) este denumit spaţiul operatorilor liniari
şi mărginiţi definiţi pe V cu valori în W, iar elementele din L(V, W) se mai numesc
operatori liniari mărginiţi. Spaţiul operatorilor liniari şi mărginiţi L(V, W) este
spaţiu Banach dacă şi numai dacă W este spaţiu Banach.
Dacă V este un spaţiu normat iar pe spaţiul L(V, V) introducem drept lege
de "înmulţire" compunerea operatorilor, atunci L(V, V) devine o algebră normată.
Dacă V este un spaţiu normat peste corpul K, atunci spaţiul normat L(V, K) se
numeşte dualul lui V şi se notează V'.
Fie H un spaţiu vectorial peste corpul K (K=R sau K=C). Se numeşte
produs scalar pe H o aplicaţie ϕ : H × H → K care are următoarele proprietăţi:
1. ϕ(x+y, z) = ϕ(x, z) + ϕ(y, z) pentru orice x, y, z ∈ H.
2. ϕ(λx, y) = λϕ(x, y) pentru orice λ∈K şi x ∈ H

3. ϕ(x, y) = ϕ(y, x ) pentru orice x, y ∈ H.

4. ϕ(x,x) > 0 pentru orice x ≠ 0.


Vom nota ϕ(x,y) = <x, y> pentru orice x, y ∈ H. Se spune că norma spaţiului

normat (H, || ⋅ ||) provine dint-un produs scalar <⋅, ⋅> dacă ||x|| = x , x pentru

orice x din H. Un spaţiu pre-Hilbert este un spaţiu normat în care norma provine
dintr-un produs scalar, iar un spaţiu Hilbert este un spaţiu prehilbert complet (cu
normă completă).
Dacă H un spaţiu prehilbert, atunci:
1. Două elemente x şi y din H se numesc ortogonale dacă <x, y> =0.
2. Pentru A ⊂ H şi x∈H, x se spune ortogonal pe A şi se notează x⊥A, dacă
<x,y>=0 pentru orice y∈A.
3. O familie (xi)i de elemente ale lui H se numeşte sistem ortogonal sau familie
ortogonală dacă <xi, xj> =0 pentru orice i ≠ j.
4. Un sistem ortogonal (xi)i se numeşte ortonormal dacă ||xi|| = 1 pentru orice i.
5. Se numeşte bază ortonormală a spaţiului Hilbert H un sistem ortonormal
maximal (în raport cu relaţia de incluziune).

55
Mădălina Roxana Buneci

Dacă H este un spaţiu Hilbert şi (xi)i este un sistem ortonormal, atunci


următoarele afirmaţii sunt echivalente:
1. (xi)i bază ortonormală
2. Dacă x∈H şi x⊥xi pentru orice i, atunci x = 0.
3. Dacă x∈H, atunci x = ∑ x, x i x i .
i

4. Dacă x, y∈H, atunci <x, y> = ∑ x, x i x i , y .


i

2
5. Dacă x∈H, atunci ||x|| = ∑ x, x i .
i

Orice două baze ortonormale ale unui spaţiu Hilbert au acelaşi cardinal.
Dimensiunea (hilbertiană) a unui spaţiu Hilbert este cardinalul unei baze
ortonormale.
Dacă F este un subspaţiu al spaţiului Hilbert H, atunci se notează cu
F⊥ = {x, x⊥F}
complementul ortogonal al lui F. Dacă F este un subspaţiu închis, atunci H = F +
F⊥ (orice element din H poate fi reprezentat în mod unic ca suma dintre un element
din F şi unul din F⊥).
Se numeşte adjunctul operatorului liniar şi mărginit A ∈ L(H1, H2) (unde
H1, H2 sunt spaţii Hilbert) operatorul liniar şi mărginit A*∈ L(H2, H1)care satisface
condiţia:
<A(x), y > =<x, A*(y) > pentru orice x∈H1, y∈H2.
Orice operator liniar şi mărginit admite un unic adjunct.
Dacă H este un spaţiu Hilbert şi A∈L(H, H), atunci
1. A se numeşte autoadjunct (sau hermitian) dacă A = A*.
2. A se numeşte unitar dacă AA* = A*A =I.
3. A se numeşte pozitiv dacă A este autodjunct şi <A(x), x> ≥ 0 pentru
orice x ∈H.
Considerăm spaţiul vectorial V = Kn(K=R sau K=C), n∈N*. Pe acest spaţiu
Banach orice două norme sunt echivalente. Vom nota cu ||⋅||∞, ||⋅||1, ||⋅||2 următoarele
norme uzuale pe Kn:

56
Metode Numerice

||x||∞ = max |xj|


1≤ j≤ n

n
||x||1 = ∑ xj
j=1

1/ 2
 n 2 
||x||2 =  ∑ x j 
 j=1 
pentru orice x = (x1, x2, …, xn) ∈ Kn.
Norma ||⋅||2 se numeşte normă euclidiană şi provine din produsul scalar canonic
n
<x, y> = ∑xjyj pentru x = (x1, x2, …, xn) şi y = (y1, y2, …, yn)
j=1

n
(dacă K = R, atunci <x, y> = ∑ x j y j ).
j=1

Vom nota cu Mm,n(K) mulţimea matricelor cu m linii şi n coloane. Mm,n(K)


are o structură de spaţiu vectorial relativ la operaţiile:
adunare: A = (aij)i,j,B=(bij)i,j,C=(cij)i,j ∈ Mm,n(K),
C = A+B dacă şi numai dacă cij = aij + bij pentru orice 1≤i≤m şi 1≤j≤n.
înmulţire cu scalari: A = (aij)i,j, C=(cij)i,j ∈ Mm,n(K), λ∈K.
C = λA dacă şi numai dacă cij = λaij pentru orice 1≤i≤m şi 1≤j≤n.
Produsul AB a două matrice A = (aij)i,j∈ Mm,n(K) şi B=(bij)i,j∈ Mn,p(K) este o
matrice C=(cij)i,j ∈ Mm,p(K) pentru care
n
cij = ∑ a ik b kj pentru orice 1≤i≤m şi 1≤j≤p.
k =1

Transpusa unei matrice A=(aij)i,j, este o matrice notată At = ( a it, j )i,j, ale cărei

elemente sunt: a it, j = aj,i pentru orice 1≤i≤n, 1≤j≤m.

Conjugata unei matrice A=(aij)i,j, este o matrice notată A* = ( a *i, j )i,j, ale cărei

elemente sunt: a *i , j = a j,i pentru orice 1≤i≤n, 1≤j≤m. Conjugata este caracterizată

prin :
<Ax, y> = <x, A*y> pentru orice x∈Kn şi orice y∈Km.
O matrice pentru care m=n se numeşte pătratică. Elementul neutru la înmulţire în
Mn,n(K) este matricea unitate In:

57
Mădălina Roxana Buneci

1 0 0 … 0
0 1 0 … 0

0 0 0 … 1
O matrice A∈ Mn,n(K) este inversabilă dacă există B∈ Mn,n(K) astfel încât
AB=BA=In. Inversa unei matrice A se notează A-1. Matricea A este inversabilă dacă
şi numai dacă det(A) ≠ 0 - în acest caz se zice nesingulară.
Matricele pentru care A=At se numesc matrice simetrice, iar cele pentru care A=A*
se numesc matrice hermitiene (evident, pentru matrice cu coeficienţi reali cele două
noţiuni coincid). O matrice A se zice ortogonală dacă A-1 =At şi unitară dacă A-1
=A*. Matricea A este
▹ diagonală dacă aij=0 pentru orice i≠j
a1 0 … 0
A= 0 a2 … 0 = diag(a1, a2,…, an)

0 0 … an
▹ tridiagonală dacă aij=0 pentru orice i,j cu |i-j|>1
a1 b1 0 … 0 0
A= c2 a2 b2 … 0 0

0 0 0 … cn an
▹ superior triunghiulară dacă ai,j = 0 pentru orice i > j.
▹ inferior triunghiulară dacă ai,j = 0 pentru orice i < j.
▹ superior Hessenberg dacă ai,j = 0 pentru orice i > j+1.
▹ inferior Hessenberg dacă ai,j = 0 pentru orice i < j-1.

O matrice A ∈ Mm,n(K) poate fi tratată ca un vector din Knm:


(a11, a12,…, a1n, a21, a22, …, a2n,…, am1, am2, …, amn).
Datorită acestui fapt norma unei matrice poate fi introdusă în mod similar cu norma
unui vector din Knm. Pe de altă parte, se ştie că există un izomorfism de spaţii

58
Metode Numerice

liniare între Mm,n(K) şi L(Kn, Km). Fiecărei matrice A = (ai,j)i,j i se asociază


operatorul liniar S(A) definit prin
n
S(A)(x) = Ax = ( ∑ a ij x j )1≤i≤m pentru orice x = (x1, x2, …, xn)t∈Kn.
j=1

În cele ce urmează vom identifica A cu S(A). Cele mai des utilizate norme de
matrice sunt normele operatoriale: astfel pentru o matrice A∈ Mm,n(K), dacă pe Km
se consideră norma ||⋅||α, iar pe Kn se consideră norma ||⋅||β, atunci se notează cu
||A||αβ norma de aplicaţie liniară:
sup ||Ax||α = sup ||Ax||α.
x β ≤1 x β =1

În cazul în care α=β se utilizează notaţia ||A||α = ||A||αα şi se spune că ||A||α este
norma operatorială a lui A subordonată normei vectoriale ||⋅||α.
Fie A∈ Mn,n(C). Scalarul λ din C se numeşte valoare proprie pentru A dacă
există vectorul nenul x ∈ Cn astfel încât:
Ax= λx
Vectorul x se numeşte vector propriu asociat valorii proprii λ. Mulţimea valorilor
proprii ale lui A formează spectrul lui A şi se notează cu σ(A). Raza spectrală a lui
A se defineşte prin:
ρ(A) = max λ
λ∈σ ( A )

Normele operatoriale pentru o matrice A ∈ Mn,n(C) subordonată normelor


vectoriale ||⋅||∞, ||⋅||1, ||⋅||2 sunt respectiv:
n
||A||∞ = max ∑ a ij
1 ≤ i ≤ ∞ j=1
n
||A||1 = max ∑ a ij
1 ≤ j ≤ ∞ i =1

||A||2 = (
ρ A*A . )
Pentru orice matrice A∈ Mn,n(C) şi orice norma operatorială ||A|| subordonată unei
normei vectoriale avem ρ(A) ≤ ||A||. Deşi norma ||A||2 este importantă din punct de
vedere teoretic (corespunde distanţei euclidiene), în general, în aplicaţiile numerice

59
Mădălina Roxana Buneci

||A||2 nu este convenabilă (fiind dificil de calculat). În locul ei se foloseşte norma


vectorială:
n 2
||A||F = ∑ a ij
i , j=1

care nu este normă operatorială subordonată normei vectoriale deoarece ||In|| =

n ≠1. Între cele două norme există relaţia:


||A||2 ≤ ||A||F.

Dacă ||⋅|| este o normă operatorială pe Mn,n(C), atunci lim A k =0 dacă şi


k →∞

numai dacă ρ(A) < 1.


Fie <⋅, ⋅> produsul scalar canonic pe Kn (K = R sau C). O matrice A∈
Mn,n(K), K = R (respectiv, K = C) se numeşte
• pozitiv definită dacă este simetrică (respectiv, hermitiană) şi dacă
<Ax, x> > 0 pentru orice x≠0 din Kn.
• negativ definită dacă este simetrică (respectiv, hermitiană)şi dacă
<Ax, x> < 0 pentru orice x≠0 din Kn.
• pozitiv semidefinită dacă este simetrică (respectiv, hermitiană)şi
dacă
<Ax, x> ≥ 0 pentru orice x ∈ Kn.
• negativ semidefinită dacă este simetrică (respectiv, hermitiană)şi
dacă
<Ax, x> ≤ 0 pentru orice x ∈ Kn.
În cele ce urmează ne vom concentra asupra matricelor A ∈ Mn,n(R) simetrice.
Pentru o astfel de matrice notăm determinanţii situaţi pe diagonala principală cu
a11 a12 … a1k
∆k = a12 a22 … a2k

a1k a2k … akk


(k =1,2,…n) şi îi numim minori principali.

60
Metode Numerice

• O matrice A∈ Mn,n(R) este pozitiv definită dacă şi numai dacă este


simetrică şi minorii principali ∆k (k∈{1,2,…n}) sunt toţi pozitivi.
• O matrice A∈ Mn,n(R) este negativ definită dacă şi numai dacăeste
simetrică şi minorii principali ∆k (k∈{1,2,…n}) respectă următoarea
alternanţă a semnelor:
∆1 < 0, ∆2 >0, ∆3 <0, ∆4 >0, ..., (-1)n∆n >0.

IV. 2. Metode directe de rezolvare a sistemelor liniare

Metodele de rezolvare a sistemelor liniare sunt clasificate în


1. Metode directe
2. Metode iterative
Metodele directe presupun obţinerea soluţiilor exacte a sistemelor liniare după
un număr finit de operaţii elementare. O metodă directă este cu atât mai bună cu cît
numărul de operaţii elementare (adunare, înmulţire, împărţire şi rădăcină pătrată)
necesare este mai mic (numărul de operaţii executate influenţează atât timpul de
execuţie cât şi eroarea de rotunjire).
Considerăm sistemul cu n ecuaţii şi n necunoscute.
Ax = b, A∈Mn,n(R) nesingulară.
Deoarece A este nesingulară sistemul admite soluţie unică, ce poate fi determinată
∆x i
cu regula lui Cramer: xi = , 1 ≤ i ≤ n. Arătăm că aplicarea acestei metode este

nepractică (pentru n mare). Într-adevăr, aplicarea ei conduce la calculul a n+1
determinanţi de ordinul n. Dar calculul unui determinat de ordinul n pentru o
matrice C = (cij)1≤i,j≤n, ţinând cont de definiţie:

∑ ( −1) (
ε σ)
det(C) = c1σ(1)c 2σ( 2 ) ...c nσ( n )
σ∈Sn

revine la a calcula o sumă de n! termeni (grupul Sn al permutărilor de ordinul n


conţine n! elemente), fiecare termen fiind produsul a n factori. Deci pentru a aplica
regula lui Cramer trebuie efectuate cel puţin Nop(n) = (n+1) n!n =(n+1)!n operaţii.

61
Mădălina Roxana Buneci

nn
Deoarece n!> n (pentru n ≥1), rezultă că Nop(n) > n
( n + 1)n +1 . De exemplu, dacă
e en +1
se utilizează un sistem de calcul ce execută 109 operaţii pe secundă, atunci pentru
rezolvarea unui sistem cu n ecuaţii şi n necunoscute timpii de execuţie sunt
prezentaţi în tabelul de mai jos

n Timp de execuţie
n=5 0.5782433079 ⋅ 10-6 s
n=10 0.04765190154 s
n = 15 31138.61350 s = 8.649614862 ore
n = 20 > 2809 ani
n = 25 >1011 ani
n= 30 >1018 ani

Metodele directe urmăresc transformarea sistemului de rezolvat într-un


sistem echivalent a cărui matrice este inferior triunghiulară sau superior
triunghiulară, sistem ce se rezolvă foarte uşor. Prezentăm în continuare algoritmul
lui Gauss de transformarea matricei A într-o matrice superior triunghiulară.

IV. 2.1. Metoda de eliminare Gauss

Se consideră o matrice A∈Mn,m(R). Eliminarea gaussiană urmăreşte


transformarea matricei A într-o matrice superior triunghiulară S (o matrice cu
proprietatea că bij = 0 pentru orice i<j). Trecerea de la matricea A la matricea S se
realizează prin transformări elementare. La baza metodei stă următorul procedeu:
• prima linie este folosită pentru anularea coeficienţilor de pe prima
coloană din celelalte n-1 linii.
• a doua linie este utilizată pentru anularea coeficienţilor de pe a doua
coloană din ultimele n-2 linii, ş.a.m.d.
Trecerea de la un pas la altul se face aplicând regula dreptunghiului
(pivotului). Pentru a obţine stabilitatea numerică a algoritmului, se alege drept

62
Metode Numerice

pivot de la pasul k elementul maxim în modul din coloana k subdiagonală a lui A, şi


se permută linia k cu linia pe care se găseşte pivotul. Această strategie de
permutare se numeşte pivotare parţială. Performanţe de stabilitate numerică relativ
mai bune se obţin dacă se alege drept pivotul la pasul k elementul maxim în modul
din submatricea delimitată de ultimele n-k linii, şi se permută coloana k cu coloana
pivotului şi linia k cu linia pivotului. Această strategie de pivotare se numeşte
pivotare completă. Prezentăm în continuare algoritmul de eliminare Gauss cu
pivotare parţială. Trecerea de la matricea A la matricea superior triunghiulară se
realizează în nmin paşi, unde nmin = min{n,m}:
A(0)→ A(1)→… →A(nmin),
unde A(nmin) are formă superior triunghiulară, iar A(0) =A. Pentru a se trece de la
A(k)→A(k+1):


(k)
Se determină pivotul de la pasul k; acesta este primul element a k,i

de pe coloana k cu proprietatea

(k) (k)
| a k,i |=max{| a k, j |, k≤j≤n}

• Se permută liniile i cu k;


(k)
Se aplică regula dreptunghiului (pivotului) cu pivotul a k,k . Astfel:

▹ elementele de pe linia pivotului se împart la pivot:


(k)
a k,i
a (kk,i+1) = , i=k,k+1,…m
(k)
a k,k

▹ elementele subdiagonale de pe coloana pivotului se înlocuiesc


cu 0.
a (ikk +1) =0, i= k+1, k+2,…n
▹ elementele din submatricea delimitată de ultimele n-k linii şi de
ultimele n-k coloane se transformă cu regula dreptunghiului:

63
Mădălina Roxana Buneci

k j

(k) (k)
k a k,k a k, j
(k) (k)
i a i,k a i, j

(k) (k) (k) (k)


a i,j a k,k − a k,j a i,k
a (i, j ) =
k +1
(k)
, k+1≤ i ≤ n, k+1≤ j ≤ m.
a k,k

În urma aplicării acestui algoritm se ajunge la următoarea matrice superior


triunghiulară:

1 a1(1,2) a1(1,3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a1(1,n) a1(1,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a1(1,m)

A(nmin) = 0 1⋅ a (22,3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (22,n) a (22,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (22,m)

⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅


0 0 0 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅1 a (nn,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (nn,m)

(dacă m ≤ n).
Exemplu
Prin aplicarea procedurii de eliminare gaussiană cu pivotare parţială asupra matricei
A de mai jos obţinem:

1 2 0 L1 ↔ L2 2 1 1
A= 2 1 1 → 1 2 0 →
1 -3 2 1 -3 2

1 1/2 1/2 L2 ↔ L3 1 1/2 1/2


0 3/2 -1/2 → 0 -7/2 3/2
0 -7/2 3/2 0 3/2 -1/2

64
Metode Numerice

1 1/2 1/2 1 1/2 1/2


→ 0 1 -3/7 → 0 1 -3/7
0 0 1/7 0 0 1

Următoarea procedură MAPLE are drept parametru o matrice A, şi întoarce


matricea superior triunghiulară obţinută prin aplicarea algoritmului de eliminare
Gauss cu pivotare parţială asupra matricei A. Matricea a (locala procedurii) se
iniţializează cu A, şi fiecare din matricele intermediare A(k) sunt afişate.

> elimpp:=proc(A)
> local a,n,m,nmin,i,j,k,aux;
> m:=rowdim(A);n:=coldim(A);
> if n<=m then nmin:=n else nmin:=m fi;
> a:=matrix(m,n);
> for i to m do for j to n do a[i,j]:=A[i,j] od od;
> for k to nmin do print(a);
> i:=k;aux:=abs(a[k,k]);
> for j from k+1 to m do
> if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od;
> if i>k then for j from k to n do
> aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od; print(a) fi;
> if a[k,k]<>0 then
> for j from k+1 to n do a[k,j]:=a[k,j]/a[k,k] od;
> a[k,k]:=1;
> for i from k+1 to m do
> for j from k+1 to n do a[i,j]:=a[i,j]-a[k,j]*a[i,k] od od;
> for j from k+1 to m do a[j,k]:=0 od
> fi od;
> RETURN(evalm(a))
> end;

Exemple de utilizare a procedurii


> A:=matrix(3,3,[1,2,0,2,1,1,1,-3,2]);

65
Mădălina Roxana Buneci

1 2 0
 

A := 2 1 1
 
1 -3 2
> elimpp(A);

1 2 0
 
2 1 1

 
1 -3 2
2 1 1
 
1 2 0

 
1 -3 2
 1 1 
 1 
 2 2 
 
 3 -1 
 
 0 
 2 2 
 
 
 -7 3 
 0 
 2 2 
 
 1 1 
 1 
 2 2 
 
 -7 3 
 
 0 
 2 2 
 
 
 3 -1 
 0 
 2 2 
 
 1 1 
 1 
 2 2 
 
 -3 
 
 0 1 
 7 
 
 
 1 
 0 0 
 7 
 
 1 1 1 
 
 2 2 
 
 -3 
 
 0 1 
 7 
 
 
 0 0 1 
> A1:=matrix(3,2,[3,2,-1,5,2,0]);

 3 2
 
A1 :=  -1 5
 
 2 0
> elimpp(A1);

66
Metode Numerice

 3 2
 
 -1 5

 
 2 0
 2 
 1 
 3 
 
 17 
 
 0 
 3 
 
 
 -4 
 0 
 3 
 
 1 2 
 
 3 
 
 0 1 
 
 
 0 0 
 
> A2:=matrix(2,3,[1,-1,2,3,4,-2]);
1 -1 2
A2 :=  
3 4 -2
> elimpp(A2);

1 -1 2
 
3 4 -2
3 4 -2
 
1 -1 2
 4 -2 
 1 
 3 3 
 
 -7 8 
 
 0 
 3 3 
 4 -2 
 1 
 3 3 
 
 -8 
 
 0 1 
 7 

IV.2.2. Rezolvarea sistemelor liniare prin metoda de eliminare Gauss

Considerăm sistemul cu n ecuaţii şi n necunoscute:


Ax = b, A∈Mn,n(R) nesingulară

67
Mădălina Roxana Buneci

Pentru rezolvarea acestui sistem vom aplica algoritmul de eliminare Gauss

cu pivotarea parţială asupra matricei extinse A = (A | b ) . Vom nota elementele

matricei A tot cu ai,j . Astfel ai,n+1= bi pentru orice i=1,2,..n.


La primul pas algoritmul presupune eliminarea necunoscutei x1 din ultimele
n-1 ecuaţii. La al doilea pas se elimină necunoscuta x2 din ultimele n-2 ecuaţii,
ş.a.m.d. În cazul acestui algoritm pentru fiecare k se efectuează n+1-k + (n+1-k)(n-
k) = (n+1-k)2 operaţii elementare (prin operaţie elementară înţelegând aici o
operaţie în virgulă mobilă de forma ax + b, sau o împărţire) . Deci algoritmul
necesită
n −1
2
n n ( n + 1)( 2n + 1)
Nop(n) = ∑ ( n + 1 − k ) = ∑ j2 = 6
-1
k =1 j= 2

n3
operaţii elementare. Deci Nop(n) ~ (sau Nop(n) ∈ O(n3) ).
3
Ca urmare a aplicării algoritmului se obţine sistemul echivalent:

x1 + a1(1,2) x2 + a1(1,3) x3 +⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a1(1,n) xn = a1(1,n) +1

x2 + a (22,3) x3⋅+ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (22,n) xn = a (22,n) +1

⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅

xn = a (nn,n) +1

Rezolvarea acestui sistem se poate face foarte uşor de la sfârşit spre început:
xn = a (nn,n) +1
n
x i = a i(i,n) +1 − ∑ a i(,i )j x j
j=i +1

Procedura rezsist de mai jos întoarce soluţia unui sistem liniar cu n ecuaţii şi
n necunoscute. Parametri procedurii sunt matricea sistemului şi vectorul termenilor
liberi
> with(linalg):
> rezlin:=proc(A,b)
> local a,x,n,i,j,k,aux;

68
Metode Numerice

> n:=rowdim(A);
> a:=matrix(n,n+1);
> for i to n do
> for j to n do a[i,j]:=A[i,j] od;
> a[i,n+1]:=b[i] od;
> for k to n do i:=k;aux:=abs(a[k,k]);
> for j from k+1 to n do
> if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od;
> if i>k then for j from k to n+1 do
> aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi;
> if a[k,k]=0 then print(`matrice singulara`);RETURN(NULL) fi;
> for j from k+1 to n+1 do a[k,j]:=a[k,j]/a[k,k] od;
> for i from k+1 to n do
> for j from k+1 to n+1 do a[i,j]:=a[i,j]-a[k,j]*a[i,k] > od od;
> od;
> x:=vector(n);x[n]:=a[n,n+1];
> for i from n-1 by -1 to 1 do x[i]:=a[i,n+1];
> for j from i+1 to n do x[i]:=x[i]-a[i,j]*x[j] od od;
> RETURN(evalm(x))
> end;

Utilizăm procedura se mai sus pentru rezolvarea sistemului


x1 + x2 + x3 = 3
x1 - x2 + 2x3 = 2
-x1 - x2 + 3x3 = 1

> a1:=matrix(3,3,[1,1,1,1,-1,2,-1,-1,3]);

1 1 1
 
a1 :=  1 -1 2
 
-1 -1 3
> b1:=vector(3,[3,2,1]);
b1 := [ 3, 2, 1 ]
> rezlin(a1,b1);
[ 1, 1 , 1 ]
> linsolve(a1,b1);
[ 1, 1 , 1 ]

69
Mădălina Roxana Buneci

Comanda MAPLE linsolve(A,b) din pachetul linalg întoarce soluţia sistemului Ax


= b.

IV.2.3. Calculul determinantului unei matrice

Pentru calculul determinantului unei matrice A∈Mn,n(R) se poate folosi


metoda de eliminare Gauss, ţinându-se seama că determinantul unei matrice nu se
modifică dacă asupra matricei se efectuează transformări elementare. Determinantul

este produsul elementelor a (kk,k) (înainte de împărţire). Dacă se foloseşte pivotare,

trebuie avut în vedere faptul că prin permutarea a două linii semnul determinantului
se schimbă. Procedura determinant de mai jos are drept parametru matricea şi
întoarce determinantul. Pentru transformarea matricei A într-o matrice superior
triunghiulară se foloseşte algoritmul de eliminare Gauss cu pivotare parţială.
>determinant:=proc(A)
>local a,n,i,j,k,d,aux;
>n:=rowdim(A);
>a:=matrix(n,n);
>for i to n do
>for j to n do a[i,j]:=A[i,j] od od;
>d:=1;
>for k to n do i:=k;aux:=abs(a[k,k]);
>for j from k+1 to n do
>if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od;
>if i>k then d:=-d; for j from k to n do
>aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi;
>if a[k,k]=0 then d:=0;RETURN(d) fi; d:=d*a[k,k];
>for j from k+1 to n do a[k,j]:=a[k,j]/a[k,k] od;
>for i from k+1 to n do
>for j from k+1 to n do a[i,j]:=a[i,j]-a[k,j]*a[i,k] od od;
>od;
>RETURN(d)
>end;
Exemplificăm utilizarea procedurii de mai sus
> a2:=matrix(3,3,[1,1,1,1,8,3,12,1,2]);

70
Metode Numerice

 1 1 1
 
a2 :=  1 8 3
 
12 1 2
> determinant(a2);
-48
> det(a2);
-48
Comanda det(A) din pachetul linalg calculează determinantul matricei
indicate drept parametru.

IV.2.4. Calculul inversei unei matrice

Fie A∈Mn,n (R). Matricea A este inversabilă dacă şi numai dacă există o
matrice B∈ Mn,n (R) astfel încât A⋅B=B⋅A=In, unde

1 0 0 ---------- 0
In= 0 1 0 ---------- 0
---------------------------------------
0 0 0 ---------- 1

Se ştie că A este inversabilă dacă şi numai dacă are determinantul nenul. Notăm:
ek = (0,…,0,1,0…0)t
vectorul k al bazei canonice din Rn.
Pentru fiecare k (k=1,2,…,n) considerăm sistemul Ax=ek. Soluţia acestui
sistem reprezintă chiar coloana k a matricei A-1. Astfel pentru aflarea lui A-1 este
necesar să rezolvăm n sisteme de ecuaţii liniare Ax=ek, k=1,2,…,n. Aceste sisteme
pot fi rezolvate utilizând algoritmul de eliminare al lui Gauss. Pentru a micşora
volumul de calcul vom aplica algoritmul asupra matricei obţinute prin concatenarea
la matricea A a coloanelor bazei canonice din Rn. Coeficienţii matricei
A = (A|e1|e2|------|en)
sunt

71
Mădălina Roxana Buneci

aij, dacă 1 ≤ i, j ≤ n
ai,n+k = δik, dacă 1 ≤ i, k≤ n
unde
1, i=k
δik= 0, i≠k.

Prin aplicarea algoritmului de eliminare Gauss cu pivotare parţială asupra


lui A se obţine un şir de matrice

A(0)→ A(1)→ ----


→A(n),

unde A(0)= A, iar A(n) are următoarea formă superior triunghiulară:

1 a1(1,2) a1(1,3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a1(1,n) a1(1,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a1(1, 2) n

A(n)= 0 1⋅ a (22,3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (22,n) a (22,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (22, 2) n

⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅


0 0 0 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅1 a (nn,n) +1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a (nn,2) n

Dacă B = A-1, atunci coeficienţii lui B pot fi determinaţi cu formulele:

bn,k= a (nn, n) + k , 1 ≤ k ≤ n
n
bi,k= a i(,in) + k - ∑ a i(,ij) bi, j , 1 ≤ i ≤ n-1, 1 ≤ k ≤ n
j= i +1

Procedura inversa de mai jos întoarce inversa matricei indicată drept parametru.
> inversa := proc(A)
> local n,a, b, i, j, k,aux;
> n:=rowdim(A);
> b := matrix(n, n); a := matrix(n, 2*n);
> for i to n do for j to n do a[i, j] := A[i, j] od od;
> for i to n do for j to n do a[i, j + n] := 0 od od;
> for i to n do a[i, i + n] := 1 od;

72
Metode Numerice

> for k to n do
> aux := abs(a[k, k]);i := k;
> for j from k + 1 to n do
> if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi
> od;
> for j from k to 2*n do
> aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od;
> if a[k, k] = 0 then print(`Matrice singulara`);
> RETURN(NULL) fi;
> for j from k + 1 to 2*n do a[k, j] := a[k, j]/a[k, k] od;
> for i from k + 1 to n do
> for j from k + 1 to 2*n do
> a[i, j] := a[i, j] - a[k, j]*a[i, k] od od;
> od;
> for i to n do b[n, i] := a[n, i + n] od;
> for k to n do
> for i from n - 1 by -1 to 1 do
> b[i, k] := a[i, n + k];
> for j from i + 1 to n do
> b[i, k] := b[i, k] - a[i, j]*b[j, k] od
> od
> od;
> RETURN(evalm(b))
> end;
Calculul inversei matricei

1 1 1
1 2 3
2 1 2

se realizează cu ajutorul comenzilor


> a3:=matrix(3,3,[1,1,1,1,2,3,2,1,2]);

1 1 1
 
a3 :=  1 2 3
 
2 1 2
> inversa(a3);

73
Mădălina Roxana Buneci

 1 -1 1 
 
 2 2 2 

 2 0 -1 

 
 -3 1 1 

 
 2 2 2 

Comanda inverse din pachetul linalg calculează de asemenea inversa unei matrice.
În exemplul următor presupunem că o aplicăm asupra aceleaşi matrice a3.
> inverse(a3);

 1 -1 1 
 
 2 2 2 

 2 0 -1 

 
 -3 1 1 

 
 2 2 2 

IV.3. Factorul de condiţionare al unei matrice

Definiţie 1. Factorul de condiţionare al unei matrice pătrate A∈Mn,n(R) se


defineşte prin
cond(A) = ||A|| ⋅ ||A-1||
unde ||⋅|| este o norma operatorială a matricei A (de exemplu, ||⋅||1 sau ||⋅||∞). Prin
convenţie cond(A) = ∞ dacă A este singulară.
Se poate observa că
−1
 Ax  Ax 
cond(A) =  max min
 x ≠0 x  x ≠0 x  .

  
Factor de condiţionare cond(A) mare înseamnă A „aproape singulară”.
Factorul de condiţionare cond(A) are următoarele proprietăţi
• cond(A) ≥ 1
• cond(In) = 1 pentru orice n ≥ 1
• cond(αA) = cond(A) pentru orice scalar α ≠0

74
Metode Numerice

−1
• cond(D) =  max αi   min αi  pentru orice matrice diagonală
 1≤i≤n   1≤i≤n 
D=diag(α1, α2, ..., αn).
Calcul valorii exacte a factorului de condiţionare al unei matrice A
presupune calculul ||A-1||. Cum numărul de operaţii necesare pentru calculul normei
inversei lui A (||A-1||) este mai mare decât cel pentru rezolvarea unui sistem liniar
Ax = b, de obicei în practică se foloseşte un estimator pentru ||A-1||. Determinarea
unei estimaţii pentru ||A-1|| pleacă de la observaţia că, dacă Ax = y, atunci
x
≤ ||A-1||,
y

şi mărginea superioară a mulţimii


 x 
 , Ax = y 
 y 

este ||A-1|| şi se atinge pentru o anumită valoare y.


Comanda MAPLE cond(A) din pachetul linalg calculează factorul de
condiţionare matricei A.
Considerăm sistemul
Ax = b, cu A nesingulară
şi notăm cu x* soluţia exactă.
Să presupunem că în locul matricei A este furnizată matricea A + E şi ca
urmare se rezolvă sistemul
(A+E) x = b,
a cărui soluţie o notăm cu x̂ . Atunci
(A+E) x̂ = Ax*
E x̂ = A(x*- x̂ ).
A-1E x̂ =x*- x̂
Atunci
||x*- x̂ || = || A-1E x̂ || ≤ || A-1|| ⋅|| E|| ⋅|| x̂ || ,
de unde

75
Mădălina Roxana Buneci

x̂ − x * E
≤ cond(A) .
x̂ A

Deci factor de condiţionare „mic” şi variaţii relative mici ale coeficienţilor


matricei implică variaţii relative mici ale soluţiei. Dacă factorul de condiţionare
cond(A) este mare, atunci rezolvarea sistemului Ax = b este o problemă rău
condiţionată.
Să presupunem acum că în locul vectorului termenilor liberi b este dat

vectorul b̂ şi ca urmare se rezolvă sistemul

A x = b̂ ,
a cărui soluţie o notăm cu x̂ . Atunci

A x̂ = b̂ - b + b

A x̂ = b̂ - b + Ax*

A(x*- x̂ ) = b- b̂

x*- x̂ = A-1(b- b̂ )
Atunci
Ax *
||x*- x̂ || = || A-1(b- b̂ )|| ≤ || A-1|| ⋅|| (b- b̂ )|| =|| A-1|| ⋅|| (b- b̂ )|| ≤
b

-1
b − bˆ
≤ || A || ||A|| ||x*||,
b

de unde

x̂ − x * b − bˆ
≤ cond(A) .
x* b

Deci factor de condiţionare „mic” şi variaţii relative mici ale termenilor


liberi implică variaţii relative mici ale soluţiei.
Dacă gradul de acurateţe a datelor de intrare este compatibil cu precizia
maşinii εmach, atunci
x̂ − x *
≤ cond(A)εmach.
x*

76
Metode Numerice

În urma calculului soluţiei sistemului Ax = b se pot pierde până la log10(cond(A))


cifre zecimale semnificative relativ la acurateţea datelor de intrare.
Interpretare geometrică: n = 2: Ecuaţii unui sistem liniar a cărui matrice A
∈ M2,2(R) pot fi interpretate ca ecuaţiile a două drepte în plan, iar soluţia sistemului
drept coordonatele punctului de intersecţie a celor două drepte. Factor de
condiţionare mare al matricei A înseamnă că dreptele sunt „aproape” paralele.

problemă bine condiţionată problemă rău condiţionată

Exemplu
Considerăm sistemul Ax = b, unde
A= 888.445 887.112
887.112 885.781
şi
b= 1
0
Considerăm următoarele comenzi MAPLE:
> with(linalg):
> A:=matrix(2,2,[888.445,887.112,887.112,885.781]);
888.445 887.112
A :=  
887.112 885.781
> A1:=matrix(2,2,[888445/1000,887112/1000,887112/1000,
885781/1000]);

177689 110889
 
 200 125 
A1 := 
110889 885781
 
 125 1000 
> cond(A1);
3152602660249

77
Mădălina Roxana Buneci

> b:=vector([1,0]);
b := [ 1, 0 ]
> Digits:=6;
Digits := 6
> linsolve(A,b);
[ -499.248 , 500.000 ]
> Digits:=15;
Digits := 15
> linsolve(A,b);

[ 0.887555222890557 10 9, -0.888888888888889 10 9 ]
> Digits:=10;
Digits := 10
> linsolve(A,b);

[ 0.2496249066 10 7, -0.2500000000 10 7 ]
> linsolve(A1,b);
[ 885781000, -887112000 ]
Deşi matricele A şi A1 sunt egale - diferenţa este dată doar de reprezentarea
coeficienţilor: simbolic (ca numere raţionale) în cazul lui A1 şi în virgulă mobilă în
cazul lui A – comenzile linsolve(A,b) şi linsolve(A1,b) întorc rezultate diferite.
Soluţia corectă a sistemului este cea obţinută în varianta în care s-a lucrat simbolic:
x1 = 885781000
x2 = -887112000
Rezultatul eronat furnizat de comanda linsolve(A,b) se datorează relei condiţionări
a matricei A. Se observă că factorul de condiţionare este:
0.315260266024900 10 13
Revenim la sistemul
Ax = b, cu A nesingulară
notăm cu x* soluţia exactă şi cu x̂ soluţia aproximativă. Vectorul
r = b - A x̂
se numeşte reziduu. Avem
||x*- x̂ || = 0 ⇔ ||r|| = 0,
dar ||x*- x̂ || şi ||r|| nu sunt mici simultan. Avem
r = b - A x̂ = Ax* - A x̂ = A(x*- x̂ )

78
Metode Numerice

A-1r = x* - x̂
1
|| x* - x̂ || = ||A-1r|| ≤ ||A-1|| ||r|| =cond(A) ||r|| =
|| A ||
|| x* || || x* ||
= cond(A) ||r|| ≤ cond(A) ||r|| =
|| A |||| x* || || Ax* ||

|| x* ||
= cond(A) ||r||.
|| b ||
de unde rezultă
x * − xˆ r
≤ cond(A)
x* b

Ca urmare factor de condiţionare „mic” (problemă bine condiţionată) şi reziduu mic


implică variaţii relative mici ale soluţiei.
Exemplu
Considerăm sistemul Ax = b, unde
A= 1 1.001
1 1
şi

b = 2.001
2
Evident soluţia corectă a sistemului este
x1 = 1
x2 = 1
Dacă se consideră vectorul y
y1 2
y2 = 0
se observă că
b - Ay = 0.001
0

79
Mădălina Roxana Buneci

Deci y aparent verifică sistemul, deşi este diferit de x. Aceasta se datorează valorii
factorului de condiţionare al lui A pe care-l putem determina folosind următoarele
comenzi MAPLE:

> with(linalg):
> A:=matrix(2,2,[1,1.001,1,1]);
1 1.001
A :=  
1 1 
> cond(A);
4004.001000
Arătăm în continuare că dacă reziduu este mare atunci variaţia relativă a
coeficienţilor matricei de intrare A este mare. Să presupunem că x̂ este soluţia
sistemului (A+E) x = b. Atunci
(A+E) x̂ = b
E x̂ = b -A x̂
E x̂ = r
de unde
||r|| = ||E x̂ || ≤ ||E|| || x̂ ||,
şi ca urmare
|| r || || E ||
≤ .
ˆ
|| A |||| x || || A ||

În consecinţă dacă a reziduu este mare atunci variaţia relativă a coeficienţilor


matricei de intrare A este mare. Deci dacă algoritmul de rezolvare a sistemului este
stabil atunci reziduul relativ este mic indiferent dacă problema este bine
condiţionată sau nu.

IV.4. Metode iterative de rezolvare a sistemelor liniare

IV.4.1. Generalităţi

Metodele iterative constau în construcţia unui şir (xk)k convergent către


soluţia exactă a sistemului. Oprirea procesului iterativ are loc la un indice m

80
Metode Numerice

determinat pe parcursul calculului în funcţie de precizia impusă astfel încât


termenul xm să constituie o aproximaţie satisfăcătoare a soluţiei căutate.
Se consideră sistemul liniar
Ax = b, A∈Mn,n(R) nesingulară
şi desfacerea matricei A definită prin
A = N-P.
cu N o matrice inversabilă. Fie x0 un vector arbitrar din Rn. Construim şirul (xk)k
folosind relaţia de recurenţă:
Nxk+1 = P xk + b, k ≥ 0.
Notăm ek = x* – xk eroarea absolută cu care xk aproximează x*, soluţia exactă a
sistemului Ax = b.

Teoremă 4.1. Fie sistemul liniar Ax = b cu A∈Mn,n(R) nesingulară şi fie A


= N-P o desfacere a matricei A (N ∈Mn,n(R) matrice nesingukară). Şirul (xk)k
definit prin
Nxk+1 = P xk + b, k ≥ 0, x0 dat
converge la soluţia exactă a sistemului Ax = b oricare ar fi x0 dacă şi numai dacă
ρ(N-1P) < 1 (ρ(N-1P) reprezintă raza spectrală a lui N-1P, i.e. maximum modulelor
valorilor proprii ale lui N-1P).
Demonstraţie. Notăm G = N-1P. Atunci
ek+1 = x* – xk+1 = x* - N-1(P xk + b)
= x* - N-1P xk - N-1 b
= x* - N-1P xk - N-1 Ax*
= x* - N-1P xk - N-1 (N-P) x*
= x* - N-1P xk - x* + N-1 P x*
= N-1 P (x* - xk)
= Gek.
Ca urmare ek+1 = G ek = G G ek-1 = ...= Gk+1e0, pentru orice k ≥ 0. În consecinţă,

lim x k = x* pentru orice termen iniţial x0 dacă şi numai dacă lim G k e0 =0 pentru
k →∞ k →∞

81
Mădălina Roxana Buneci

orice e0, sau echivalent lim G k =0. Este cunoscut că lim G k =0 dacă şi numai
k →∞ k →∞

dacă ρ(G) < 1.


Din demonstraţia teoremei anterioare a rezultat că dacă G= N-1P şi ek = x* –


xk, atunci ek = Gek-1 = Gke0 pentru orice k ≥ 0.
N se alege astfel încât sistemul
Nxk+1 = P xk + b, k ≥ 0.
a cărui soluţie este xk+1 să se rezolve uşor – de exemplu se alene N diagonală sau
triunghiulară În cazul metodelor concrete descrise în continuare se consideră
desfacerea standard a matricei A = (ai,j)1≤i,j≤n definită prin:
A=L+D+R
unde
a1,1 0 0 …… 0 0
D = diag(a1,1,a2,2,…. an,n) = 0 a2,2 0 ……0 0
……………………..
0 0 0 ……0 an,n

0 0 0 …… 0 0
L = a2,1 0 0 …… 0 0
………………………..
an,1 an,2 an,3 …… an,n-1 0

0 a1,2 a1,3 …… a1,n-1 a1,n


R = 0 0 a2,3 …… a2,n-1 a2,n
………………………..
0 0 0 …… 0 0

82
Metode Numerice

IV.4.2. Metoda Jacobi

Metoda Jacobi se caracterizează prin desfacerea


N = D, P = - (L+R)

1
0 0 …… 0 0
a11
1
N-1 = 0 0 ……0 0
a 22
……………………..

1
0 0 0 ……0
a nn

1
0 0 …… 0 0 0 -a1,2 -a1,3 …… -a1,n-1 -a1,n
a11
1 -a2,1 0 -a2,3 …… -a2,n-1 -a2,n
0 0 ……0
-1
N P= a 22
…………………….. :......................................................

1 -an,1 -an,2 -an,3 …… -an,n-1 0


0 0 0 ……0
a nn

Dacă G = N-1P, atunci coeficienţii matricei G = (gij)1≤i,j≤n sunt:

0, i = j
a i, j
gi,j = − , i ≠ j.
a i ,i

Şirul (xk)k definit prin


Nxk+1 = P xk + b, k ≥ 0, x0 dat
converge la soluţia exactă a sistemului Ax = b oricare ar fi x0 dacă şi numai dacă
ρ(G) < 1. Deoarece ρ(G) ≤ ||G||, pentru orice normă operatorială ||⋅|| a lui G, avem

83
Mădălina Roxana Buneci

ρ(G) ≤ min( G 1 , G ∞
), şi ca urmare pentru a asigura convergenţa şirului (xk)k este

suficient ca min( G 1 , G ∞
)<1.

Calculăm G 1 :
n
G 1 = max{ ∑g i =1
i, j ,1 ≤j≤n}

n a i, j
= max{ ∑ , 1 ≤j≤n}
i =1 a i ,i
i≠ j

Calculăm G ∞ :
n
G ∞
= max{ ∑ g i , j ,1 ≤i≤n}
j=1

n a i, j
= max{ ∑ ,1 ≤i≤n}.
j=1 a i ,i
j≠ i

Dacă G 1 < 1 sau G ∞ <1, atunci ρ(G) <1. Dar condiţia G ∞ <1 este echivalentă cu

n a i, j
∑a j=1
< 1 pentru orice i, 1 ≤i≤n
i ,i
j≠ i

n
| ai,i | > ∑ a i , j pentru orice i, 1 ≤i≤n
i =1
i≠ j

caz în care spunem că A este diagonal dominantă. Deci dacă ai,i ≠ 0 pentru orice i
= 1,2,…, n, şi dacă A este diagonal dominantă atunci şirul obţinut prin metoda
Jacobi converge la soluţia exactă a sistemului Ax = b. Dacă ek = x*- xk este eroarea
absolută cu care xk aproximează x*, soluţia exactă a sistemului Ax = b, atunci ek =
Gke0 pentru orice k ≥ 0. În consecinţă, pentru orice norme compatibile
k
ek ≤ G k e0 ≤ G k e0 ≤ G e0

Fie n1,∞ = min( G 1 , G ∞


) şi fie ε > 0 dat. Vom considera xk este o aproximaţie

satisfăcătoare pentru soluţia exactă a sistemului dacă


(n1,∞)k < ε.

84
Metode Numerice

ceea ce este echivalent cu


 ln (ε ) 
k≥   +1 .
 ln (n 1,∞ )
Şirul (xk)k construit prin metoda Jacobi este definit prin
Nxk+1 = P xk + b, k ≥ 0, x0 dat
xk+1 = N-1P xk + N-1 b, k ≥ 0,
xk+1 = G xk + N-1 b, k ≥ 0,
Deci pentru orice i, 1 ≤ i ≤n,
n n n a i,j k
bi b b
x ik +1 = ∑ gi, jx kj + = ∑ gi, jx kj - i = ∑ − xj + i .
j=1 a i,i j=1 a i,i j=1 a i,i a i,i
j≠i j≠i

În consecinţă, şirul (xk)k construit prin metoda Jacobi este:


x0 dat
n
1
x ik +1 = (bi - ∑ a i, jx kj ), i =1,2,…,n, k≥0.
a i,i j=1
j≠i

Următoarea procedură Maple are drept parametri matricea sistemului,


vectorul termenilor liberi, aproximaţia iniţială x0 a soluţiei, şi eroarea epsilon.
Procedura întoarce aproximaţia xk (dată de metoda Jacobi) a soluţiei cu
 ln (eps ) 
k=   +1 .
 ln (n 1,∞ )
> with(linalg):
> mjacobi:=proc(a,b,x0,epsilon)
> local n,n1,ni,x1,x2,k,i,j,p,suma;
> n:=vectdim(x0);
> ni:=0;
> for i to n do
> suma:=0;
> for j to i-1 do
> suma:=suma+abs(a[i,j]) od;
> for j from i+1 to n do
> suma:=suma+abs(a[i,j]) od;
> if a[i,i]=0 then print(`Metoda nu se aplica`);
> RETURN(NULL) fi;

85
Mădălina Roxana Buneci

> suma:=suma/abs(a[i,i]);
> if ni<suma then ni:=suma fi;
> od;
> n1:=0;
> for j to n do
> suma:=0;
> for i to j-1 do suma:=suma+abs(a[i,j]/a[i,i]) od;
> for i from j+1 to n do suma:=suma+abs(a[i,j]/a[i,i]) od;
> if n1<suma then n1:=suma fi;
> od;
> if ni>n1 then ni:=n1 fi;
> if ni>=1 then print (`Metoda nu se aplica`); RETURN fi;
> k:=floor(ln(epsilon)/ln(ni))+1;
> x1:=vector(n); x2:=vector(n);
> for i to n do x1[i]:=x0[i] od;
> for p to k do
> for i to n do
> x2[i]:=b[i];
> for j to i-1 do
> x2[i]:=x2[i]-a[i,j]*x1[j] od;
> for j from i+1 to n do
> x2[i]:=x2[i]-a[i,j]*x1[j] od;
> x2[i]:=x2[i]/a[i,i]; od;
> for i to n do x1[i]:=x2[i] od
> od;
> RETURN(evalm(x2))
> end;
Utilizăm această procedură pentru rezolvarea sistemului:

3 x1 + x2 + x3 = 4
x1 + 5x2 + x3 = -2
-x1 + x2 + 8x3 = 14

> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);

3 1 1
 
a :=  1 5 1
 
-1 1 8

86
Metode Numerice

> b:=vector([4,-2,14]);
b := [ 4, -2, 14 ]
> linsolve(a,b);
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mjacobi (a,b,x0,0.001);
[ 1.000000094 , -0.9999998188 , 1.999999921 ]
> x1:=vector(3,[0,1,2345]);
x1 := [ 0, 1, 2345 ]
> mjacobi (a,b,x1,10^(-3));

 1919531, -8001171, 51199997 


 
 1920000 8000000 25600000 
> map(evalf,mjacobi (a,b,x1,10^(-3)));
[ 0.9997557292 , -1.000146375 , 1.999999883 ]

IV.4.3. Metoda Gauss-Seidel

Metoda Gauss-Seidel corespunde desfacerii


N = L + D, P = -R.
k
Şirul (x )k construit prin metoda Gauss-Seidel este definit prin
Nxk+1 = P xk + b, k ≥ 0, x0 dat

a1,1 0 0 … 0 0 x1k +1

a2,1 a2,2 0 … 0 0
x k2 +1
:..................................................
= Pxk + b
an,1 an,2 an,3 …… an,n-1 ann
x kn +1

Deci
1 1 n 1 n
x1k +1 = ((Pxk)1 + b1) = ( ∑ P1, jx kj + b1) = ( ∑ P1, jx kj + b1) =
a1,1 a1,1 j=1 a1,1 j=2

87
Mădălina Roxana Buneci

1 n 1 n
= ( ∑ −a1,jx kj + b1) = (b1 - ∑ a1,jx kj )
a1,1 j=2 a1,1 j= 2

şi pentru orice i , 2 ≤ i ≤n, avem

i−1 n i−1
1 1
x ik +1 = ((Pxk)i + bi - ∑ a i, jx kj +1 ) = ( ∑ Pi, jx kj + bi - ∑ a i, jx kj +1 )
a i,i j=1 a i,i j=1 j=1
n i−1
1
= ( ∑ Pi, jx kj + bi - ∑ a i,jx kj +1 )
a i,i j=i +1 j=1
n i−1
1
= ( ∑ −a i, jx kj + bi - ∑ a i,jx kj +1 )
a i,i j=i +1 j=1
n i−1
1
= ( bi - ∑ a i, jx kj - ∑ a i, jx kj +1 )
a i,i j=i +1 j=1

În consecinţă, şirul (xk)k construit prin metoda Gauss-Seidel este:


x0 dat
n
1
pentru k≥0, x1k +1 = (b1 - ∑ a1, jx kj )
a1,1 j= 2

n i−1
1
x ik +1 = ( bi - ∑ a i,jx kj - ∑ a i,jx kj +1 ), i =2,3,…,n
a i,i j=i +1 j=1

Ca şi în cazul metodei Jacobi dacă A este diagonal dominantă atunci şirul obţinut
prin metoda Gauss-Seidel converge la soluţia exactă a sistemului Ax=b. De
asemenea dacă A este o matrice simetrică şi are elementele de pe diagonala
principală pozitive, atunci metoda Gauss-Seidel converge dacă şi numai dacă
matricea A este pozitiv definită.
Procedura Maple de mai jos are drept parametri, matricea sistemului
presupusă diagonal dominantă, vectorul termenilor liberi, aproximaţia iniţială x0 a
soluţiei, şi eroarea epsilon. Procedura întoarce aproximaţia xk (dată de metoda
Gauss Seidel) a soluţiei cu
 ln (epsilon ) 
k=   +1 .
(
 ln N −1 P 
 ∞ 
)
88
Metode Numerice

> with(linalg):
> mgaussseidel := proc(a, b,x0, epsilon)
> local n, ni, x1, k, i, j, p, suma;
> n:=rowdim(a);
> ni := 0;
> for i to n do
> suma := 0;
> for j to i - 1 do suma := suma + abs(a[i, j])od;
> for j from i + 1 to n do suma := suma + abs(a[i, j])
> od;
> if a[i, i] = 0 then
> print(`Metoda nu se aplica`); RETURN(NULL) fi;
> suma := suma/abs(a[i, i]);
> if ni < suma then ni := suma fi
> od;
> if 1 <= ni then
> print(`Matricea nu este diagonal dominanta`);
> RETURN (NULL) fi;
> k := floor(ln(epsilon)/ln(ni)) + 1;
> x1 := vector(n);
> for i to n do x1[i]:=x0[i] od;
> for p to k do x1[1] := b[1];
> for j from 2 to n do
> x1[1] := x1[1] - a[1, j]*x1[j] od;
> x1[1] := x[1]/a[1, 1];
> for i from 2 to n do
> x1[i] := b[i];
> for j from i + 1 to n do
> x1[i] := x1[i] - a[i, j]*x1[j] od;
> for j to i - 1 do x1[i] := x1[i] - a[i, j]*x1[j] od;
> x1[i] := x1[i]/a[i, i]
> od;
> od;
> RETURN(evalm(x1))
> end;

Utilizăm această procedură pentru rezolvarea sistemului:

89
Mădălina Roxana Buneci

3 x1 + x2 + x3 = 4
x1 + 5x2 + x3 = -2
-x1 + x2 + 8x3 = 14

> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);

3 1 1
 
a :=  1 5 1
 
-1 1 8
> linsolve(a,b);
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mgaussseidel(a,b,x0,10^(-3));
[ 1.000000000 , -1.000000000 , 2.000000000 ]
> x1:=vector(3,[0,1,2345]);

x1 := [ 0, 1, 2345 ]

> mgaussseidel (a,b,x1,10^(-3));

 1703893329976716088550034332273 , -170389332997668792871267240303 ,

 1703893329976655609856000000000 170389332997665560985600000000
9087431093208860851748902245101 

4543715546604414959616000000000 

> map(evalf,mgaussseidel(a,b,x1,10^(-3)));

[ 1.000000000 , -1.000000000 , 2.000000000 ]

Metoda Gauss-Seidel care implică modificarea unei necunoscute la fiecare


moment de timp este preferabilă metodei Jacobi care implică modificarea tuturor
necunoscutelor în acelaşi timp dacă se dispune de un calculator serie obişnuit.
Metoda Jacobi este preferabilă metodei Gauss Seidel c-se dispune de un calculator
paralel.

90
Metode Numerice

V. Rezolvarea ecuaţiilor şi sistemelor neliniare

V.1 Rezolvarea ecuaţiilor neliniare

Presupunem date a, b∈R, f: [a,b] → R. Problema pe care o studiem este


determinarea numerelor reale x∈[a,b] cu proprietatea că f(x) = 0. Numim un număr
real x*∈[a,b] cu proprietatea că f(x*) = 0, soluţie (sau rădăcină) a ecuaţiei f(x) = 0
sau zerou al funcţiei f pe intervalul [a,b].
Dacă f : [a,b] → R, este o funcţie continuă cu proprietatea că
f(a)f(b) < 0.
Atunci există cel puţin o rădăcină x* ∈(a,b) a ecuaţiei f(x) = 0. Rădăcina ecuaţiei
f(x) = 0 nu este neapărat unică.
Presupunem că f : [a,b] → R este o funcţie derivabilă, x*∈(a,b) o rădăcină a
ecuaţiei f(x) = 0 şi x̂ = x* + h o aproximaţie a lui x*. Aplicând formula lui Taylor
rezultă că
f( x̂ ) = f(x*) + f ′ (x*)h + o(h),
o(h)
unde lim =0. Ca urmare,
h →0 h

f( x̂ ) - f(x*) - o(h) = f ′ (x*)( x̂ -x*)


şi
1
x̂ -x* ≤ (f( x̂ ) - f(x*)).

≈ f (x*)

1
Deci factorul de condiţionare absolut al problemei f(x) = 0 este . Dacă ε > 0 şi
f ′(x)
x̂ este un număr real cu proprietatea că |f( x̂ )| ≤ ε atunci

91
Mădălina Roxana Buneci

1
| x̂ - x*| ≤ ε .
f ′(x*)
(unde x* este o rădăcină a ecuaţiei f(x) = 0). În general, | x̂ -x*| şi |f( x̂ )| nu sunt
simultan mici (| x̂ -x*| este eroarea absolută cu care x̂ aproximează x*, iar |f( x̂ )|
1
indică reziduu corespunzător lui x̂ ). Dacă problema este bine condiţionată (
f ′(x*)
mic), atunci reziduu mic implică eroare absolută | x̂ -x*| mică.

problemă bine condiţionată problemă rău condiţionată

Metodele iterative de rezolvare a unei ecuaţii f(x)=0 presupun construcţia unui


şir (xk)k convergent către o rădăcină x* a ecuaţiei. Eroarea absolută cu care xk
aproximează x* este ek = x* - xk. Se spune că şirul (xk)k converge cu rata r dacă
există o constantă C ∈ (0, ∞) astfel încât
e k +1
lim r
= C.
k →∞
ek

Dacă
• r = 1 şi 0 < C<1, rata convergenţei se spune liniară
• r = 1 şi C = 0 (sau r > 1), rata convergenţei se spune superliniară
• r = 2, rata convergenţei se spune pătratică

92
Metode Numerice

V.1. 1. Metoda bisecţiei (metoda înjumătăţirii intervalului)

Fie f : [a,b] → R, o funcţie continuă cu proprietatea că


f(a)f(b) < 0.
Atunci există cel puţin o rădăcină x* ∈(a,b) a ecuaţiei f(x)=0. Pentru găsirea
rădăcinii se micşorează la fiecare pas intervalul în care funcţia îşi schimbă semnul.
Metoda bisecţiei presupune înjumătăţirea la fiecare pas a acestui interval. Astfel
a+b
• se determină mijlocul c = al intervalului (a,b).
2

• dacă f(c)f(a)<0, atunci se continuă algoritmul cu intervalul [a,c]


• dacă f(c)f(b)<0, atunci se continuă algoritmul cu intervalul [c,b]
• dacă f(c) =0 s-a determinat o rădăcină a ecuaţiei f(x) = 0.

Se construieşte astfel un şir de intervale (In)n , In = [an, bn], cu lungimea lui In egală
cu jumătate din lungimea lui In-1. Fiecare din aceste intervale conţine o soluţie a
ecuaţiei f(x) = 0. Presupunem că se dă o precizie ε>0. Considerăm că cn mijlocul
intervalului In este o aproximaţie satisfăcătoare a soluţiei ecuaţiei f(x) = 0 dacă
lungimea lui In este mai mică decât ε. Dacă notăm Ln = |bn - an| lungimea
1 1 1
intervalului In, avem Ln = Ln-1 = ... = n L0 = n |b-a|. Ca urmare Ln < ε dacă şi
2 2 2

1 ln ( b − a ε )
numai dacă |b-a| < ε sau echivalent n > .
2 n
ln ( 2 )

Algoritm
Date de intrare:
f continuă, a, b cu f(a)f(b)<0
ε (precizie)
Date de ieşire:
c mijlocul intervalului In = [an, bn] cu | an-bn |<ε (c este o aproximaţie a unei
ε
rădăcini x* ∈(a,b) a ecuaţiei f(x) = 0 cu eroarea absolută |x*-c| < ).
2

93
Mădălina Roxana Buneci

 ln ( b − a ε ) 
nmax:=   +1;
 ln ( 2 ) 
pentru j = 0, 1, ...., nmax execută
a+b
c: = ;
2
dacă f(c) = 0 atunci j : = nmax +1
altfel dacă f(c)f(a)<0 atunci b : = c;
altfel a : = c;

1
Rata convergenţei pentru metoda bisecţiei este liniară (r = 1, C = ).
2
Procedură MAPLE
> bisectie:=proc(f,A,B,epsilon)
> local c,a,b,nmax,j;
> a:=A; b:=B;
> nmax:=floor(ln(abs(b-a)/epsilon)/ln(2))+1;
> for j from 0 to nmax do
> c:=(a+b)/2;
> if f(c)=0 then a:=c;b:=c;else
> if evalf(f(c)*f(a))<0 then b:=c else a:=c fi fi
> od;
> c:=(a+b)/2;
> RETURN(c)
> end;
Utilizăm această procedură pentru determinarea rădăcinilor reale ecuaţiei:
x8 –3x-3 = 0.
Reprezentăm grafic funcţia
x->x8 –3x-3
pentru a localiza rădăcinile.
> with(plots):
> plot(x^8-3*x-3,x,color=black);

94
Metode Numerice

> plot(x^8-3*x-3,x=-5..5,color=black);

> plot(x^8-3*x-3,x=-2..2,color=black);

> plot(x^8-3*x-3,x=-1.5..1.5,color=black);

95
Mădălina Roxana Buneci

Se observă că ecuaţia are două rădăcini reale. Una în intervalul (-1.5, -0.5) şi alta în
intervalul (1,1.5).
> f:=(x-> x^8-3*x-3);

f := x → x 8 − 3 x − 3
> bisectie(f,1,3/2,10^(-3));
5207
4096
> evalf(bisectie(f,1,3/2,10^(-3)));
1.271240234
> bisectie(f,1,1.5,10^(-3));
1.271240234
> bisectie(f,-1.5,0,10^(-3));
-0.8801879883
> fsolve(f(x),x);
-0.8800582880 , 1.271068437

> evalf(bisectie(f,1,3/2,10^(-10)));
1.271068437
> evalf(bisectie(f,1,-3/2,10^(-10)));
-0.8800582880
Comanda MAPLE fsolve(f(x), x) întoarce rădăcinile ecuaţiei f(x) = 0.

V.1.2. Metoda coardei

Fie f : [a,b] → R, o funcţie continuă cu proprietatea că


f(a)f(b) < 0.
Rădăcina ecuaţiei f(x)=0 se caută ca şi în cazul metodei bisecţiei prin micşorarea la
fiecare pas a intervalului în care funcţia îşi schimbă semnul. Metoda coardei
presupune următoarele:
• se determină punctul c în care coarda AB intersectează axa Ox, unde
A(a,f(a)) şi B(b,f(b)).
• dacă f(c)f(a)<0, atunci se continuă algoritmul cu intervalul [a,c]
• dacă f(c)f(b)<0, atunci se continuă algoritmul cu intervalul [c,b]

96
Metode Numerice

• dacă f(c) =0 s-a determinat o rădăcină a ecuaţiei f(x) = 0.

a c1 c2 b

Să determinăm coordonatele punctului C de intersecţie a dreptei AB cu axa Ox,


unde A(a,f(a)) şi B(b,f(b)) .
Ox: y = 0
x−a y − f (a )
AB: =
b − a f (b ) − f (a )

Dacă C(c,0) =AB ∩ Ox, atunci


b−a
c=a- f(a)
f (b ) − f (a )

Teoremă 5.1. Fie f : [a, b] → R o funcţie de două ori derivabilă cu


proprietăţile: f’(x) ≠ 0, f”(x) ≠ 0, oricare ar fi x ∈ [a, b] şi f(a)f(b) < 0. Atunci unica
soluţie a ecuaţiei f(x) = 0 poate fi obţinută ca limită a şirului strict monoton din [a,
b] definit prin:
f (x n −1 )
x0 = a, xn = xn-1 - (xn-1-b), dacă f(a)f”(a)<0
f (x n −1 ) − f (b )
şi
f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a), dacă f(b)f”(b)<0
f (x n −1 ) − f (a )

Dacă m1 > 0, M1 > 0 sunt astfel încât m1 ≤ |f’(x)| ≤ M1 şi dacă x* este unica soluţie
a ecuaţiei f(x) = 0, atunci eroarea absolută cu care termenul xn aproximează x*
satisface inegalităţile:

97
Mădălina Roxana Buneci

f (x n )
|x*-xn| ≤
m1

M 1 − m1
|x*-xn| ≤ x n − x n −1
m1

Demonstraţie. Deoarece f ′ (x) ≠ 0 pentru orice x ∈[a, b], rezultă că f ′ este


fie strict pozitivă, fie strict negativă, deci f este strict monotonă. Ţinând cont şi de
faptul că f(a)f(b) < 0, rezultă că ecuaţia f(x) = 0 are o unică soluţie x*. Presupunem
că f(a)f”(a)< 0 şi că f(a)< 0 (înlocuind eventual f cu –f). Deoarece f”(x) ≠ 0 pentru
orice x ∈[a, b] şi f”(a)>0, rezultă că f” este strict pozitivă. Din faptul că f este strict
monotonă şi f(a) < 0 < f(b), rezultă că f ′ este strict pozitivă. Dacă B este punctul
de coordonate (b,f(b)) şi Cn-1 punctul de coordonate (xn-1, f(xn-1)), atunci xn este
abscisa punctului de intersecţie a coardei BCn-1 cu axa Ox. Ca urmare f(xn-1) < 0.
Deoarece f este o funcţie Rolle pe intervalul [xn-1, b], conform teoremei lui
Lagrange există dn-1 ∈( xn-1, b) astfel încât f(xn-1) – f(b) = f ′ (dn-1)(xn-1 – b). Avem
f (x n −1 ) f ( x n −1 )
xn = xn-1 - (xn-1-b) = xn-1 - > xn-1.
f (x n −1 ) − f (b ) f ′ ( d n −1 )

Deci şirul (xn)n este crescător şi mărginit (termenii şirului aparţin intervalului
(a,x*)). Fie x limita şirului (xn)n. Trecând la limită în
f (x n −1 )
xn = xn-1 - (xn-1-b)
f (x n −1 ) − f (b )

obţinem
f ( x )
x = x - ( x -b),
f ( x ) − f ( b )

de unde rezultă f( x ) = 0. Deoarece x* este unica rădăcină a ecuaţiei f(x) = 0 din


intervalul (a, b) rezultă că x* = x . Analog se arată că dacă f(b)f”(b)<0 şirul definit
prin
f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a)
f (x n −1 ) − f (a )

este strict descrescător către x*.

98
Metode Numerice

Conform teoremei lui Lagrange pentru orice x∈[a, b] există dx între x şi x*


astfel încât f(x*) – f(x) = (x* - x) f ′ (dx). Ca urmare,
| f(xn)| = | f(x*) – f(xn)| = |x* - xn| | f ′ (dn)|,
de unde rezultă că
f ( xn ) f (x n )
|x* - xn| = ≤ .
f ′ (dn ) m1

Dacă presupunem că f(a)f”(a)<0 şi


f (x n −1 )
xn = xn-1 - (xn-1-b)
f (x n −1 ) − f (b )

atunci
f ( x n −1 ) − f ( b )
- f(xn-1) = (xn – xn-1),
x n −1 − b
şi ţinând cont că f(x*) = 0,
f ( x n −1 ) − f ( b )
f(x*) - f(xn-1) = - f(xn-1) = (xn – xn-1).
x n −1 − b

Conform teoremei lui Lagrange există ηn∈(xn-1, x*) şi ζn ∈ (xn-1, b) astfel încât:
f(x*) – f(xn-1) = (x* - xn-1) f ′ (ηn)
f(xn-1) – f(b) = (xn-1 - b) f ′ (ζn)
Ţinând cont de
f ( x n −1 ) − f ( b )
f(x*) - f(xn-1) = (xn – xn-1).
x n −1 − b
obţinem
(x* - xn-1) f ′ (ηn) = f ′ (ζn) (xn – xn-1)
şi deci
f ′ (ζn )
(x* - xn) = (x* - xn-1) + (xn-1 - xn) = (xn – xn-1) - (xn – xn-1)
f ′ ( ηn )

f ′ (ζn )
=( - 1) (xn – xn-1),
f ′ ( ηn )

99
Mădălina Roxana Buneci

|f ′ ( ζ n ) − f ′ ( ηn ) | M − m1
de unde | x* - xn | = | xn – xn-1| ≤ 1 | xn – xn-1|, deoarece
|f ′ ( ηn ) | m1

f ′ >0. Similar se tratează cazul f(b)f”(b)<0.



Semnificaţie geometrică. Fie f : [a, b] → R o aplicaţie de două ori
derivabilă cu f’(x)≠0, f”(x) ≠ 0 oricare ar fi x∈[a, b], f(a)f(b)<0, şi fie
f (x n −1 )
x0 = a, xn = xn-1 - (xn-1-b), dacă f(a)f”(a)<0
f (x n −1 ) − f (b )

şi
f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a), dacă f(b)f”(b)<0
f (x n −1 ) − f (a )

Atunci şirul (xn)n converge la x* unica soluţie a ecuaţiei f(x) = 0.

Cazul 1. f(a)f”(a) < 0: pentru orice n ≥1, xn reprezintă abscisa punctului de


intersecţie a axei Ox cu coarda BCn-1 unde B(b,f(b)) şi Cn-1(xn-1, f(xn-1)). Aşadar
avem subcazurile
1.1 f ′ > 0 (f strict crescătoare)
1.2 f ′ < 0 (f strict descrescătoare)

x0 = a x1 x2 b

1.1. f” > 0, f(a) < 0

100
Metode Numerice

x0 = a x1 x2 b

1.2. f” < 0, f(a) > 0

Cazul 2. f(b)f”(b) < 0 (sau echivalent f(a)f”(a) > 0) : pentru orice n ≥1, xn
reprezintă abscisa punctului de intersecţie a axei Ox cu coarda ACn-1 unde A(a,f(a))
şi Cn-1(xn-1, f(xn-1)). Aşadar avem subcazurile
2.1. f ′ > 0 (f strict descrescătoare)
2.2. f ′ < 0 (f strict crescătoare)
2.3.

a x2 x1 x0 = b

2.1. f” > 0, f(b) < 0

101
Mădălina Roxana Buneci

a x2 x1 x0 = b

2.2 f” < 0, f(b) > 0

Algoritm
Date de intrare:
• f de două ori derivabilă pe [a,b], cu f ′ (x) ≠0, f”(x) ≠0 pentru orice x şi
f(a)f(b)<0
• ε (precizie)

Date de ieşire:
• xN aproximaţie a unicei rădăcini x* ∈(a,b) a ecuaţiei f(x) = 0, unde
f (x n −1 )
x0 = a, xn = xn-1 - (xn-1-b), dacă f(a)f”(a)<0
f (x n −1 ) − f (b )

f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a), dacă f(b)f”(b)<0
f (x n −1 ) − f (a )

iar N este cel mai mic număr natural cu proprietatea că |xN –xN-1| < ε

102
Metode Numerice

dacă f(a) f”(a) < 0 execută


x1: = b ; x2: = a;
cât timp | x1-x2 | ≥ ε execută
x1: = x2;
f ( x1)
x2 : = x1 - (x1-b),
f ( x1) − f ( b )

altfel
x1: = a ; x2: = b;
cât timp | x1-x2 | ≥ ε execută
x1: = x2;
f ( x1)
x2 : = x1 - (x1-a),
f ( x1) − f ( a )

x2 reprezintă xN unde N este cel mai mic număr natural cu proprietatea că


|xN –xN-1| < ε.
Procedură MAPLE
> mcoarda:= proc(f,a,b,epsilon)
> local x1, x2;
> if evalf(f(a)*(D@@2)(f)(a))<0 then
> x1:=b; x2:=a;
> while evalf(abs(x1-x2))>=epsilon do
> x1:=x2;
> x2:= x1-f(x1)*(x1-b)/(f(x1)-f(b))
> od;
> else
> x1:=a; x2:=b;
> while evalf(abs(x1-x2))>=epsilon do
> x1:=x2;
> x2:= x1-f(x1)*(x1-a)/(f(x1)-f(a))
> od;
> fi;
> RETURN(x2)
> end;

103
Mădălina Roxana Buneci

Aplicăm această procedură pentru determinarea rădăcinilor reale ale ecuaţiei:


x8 –3x-3 = 0.
În secţiunea precedentă rădăcinile au fost localizate în intervalele (-1.5, -0.5) şi
(1,1.5).
> f:=(x-> x^8-3*x-3);

f := x → x 8 − 3 x − 3
> mcoarda(f,1,1.5,10^(-3));
1.270281421
> mcoarda(f,-1.5,0,10^(-3));
-0.8741520730
> fsolve(f(x),x);
-0.8800582880 , 1.271068437
> mcoarda(f,1,1.5,10^(-10));
1.271068437
> mcoarda(f,-1.5,0,10^(-10));

V.1.3. Metoda tangentei

Metoda tangentei este utilizată pentru determinarea unei rădăcini a ecuaţiei


f(x) = 0. Presupunem că f este derivabilă şi că derivata nu se anulează. Rădăcina
ecuaţiei este determinată ca limita unui şir. Se pleacă de la un punct x0 dat.
Presupunând că s-a construit termenul xn-1, termenul xn se determină ca fiind
abscisa intersecţiei dintre tangenta la graficul funcţiei în xn-1 şi axa Ox.

xn xn-1

104
Metode Numerice

Ecuaţia tangentei în xn-1 este:


y – f(xn-1) = f ′ (xn-1)(x – xn-1)

Deci intersecţia cu axa Ox se află rezolvând sistemul

 y- f(x n-1 ) = f ′(x n-1 ) ( x-x n-1 )



 y = 0
În consecinţă ,

f ( x n −1 )
xn = xn-1 - .
f ′ ( x n −1 )

Convergenţa şirului este determinată de termenul iniţial x0. Următoarea


teoremă stabileşte condiţii suficiente pentru convergenţa metodei tangentei.

Teoremă 5.2. (Metoda tangentei). Fie f : [a, b] → R o aplicaţie de două ori


derivabilă cu următoarele proprietăţi: f’(x)≠0, f”(x) ≠ 0 oricare ar fi x∈[a, b] şi
f(a)f(b)<0. Atunci unica soluţie x* a ecuaţiei f(x) = 0 este limita a şirului (xn)n
definit prin:
f ( x n −1 )
xn = xn-1 - ,n≥1
f ′ ( x n −1 )

unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. În plus, oricare ar fi n ≥ 1
eroarea absolută cu care termenul xn aproximează x* verifică următoarele
inegalităţi:
f (x n )
|x* - xn| ≤
m1

M2
|x* - xn| ≤ (x n − x n −1 )2
2 m1

unde m1 = inf f ′ ( x ) şi M2 = sup f ′′ ( x ) .


x∈[a,b] x∈[a,b]

Demonstraţie. Putem presupune f(a) < 0, eventual înlocuind f cu – f.


Deoarece f ′ (x) ≠ 0 pentru orice x ∈[a, b], rezultă că f ′ este fie strict pozitivă, fie

105
Mădălina Roxana Buneci

strict negativă, deci f este strict monotonă. Ţinând cont şi de faptul că f(a) < 0 şi f(b)
> 0, rezultă că f este strict crescătoare şi că f ′ este strict pozitivă. Deoarece
f(a)f(b)<0, rezultă că ecuaţia f(x) = 0 are o cel puţin soluţie x*, iar din faptul că f
este strict crescătoare rezultă că soluţia este unică. Deoarece f”(x) ≠ 0 pentru orice
x∈[a, b], f” este fie strict pozitivă, fie strict negativă. Să presupunem f”>0. Atunci
f(x0) > 0 şi deci x0 > x*. Arătăm prin inducţie după n că xn > x* pentru orice n ≥0.
Presupunem că xn > x* şi demonstrăm că xn+1 > x*. Aplicând formula lui Taylor
rezultă că există ζn între xn şi x* astfel încât
2
0 = f(x*) = f(xn) +
x * −x n
f ′ (xn) +
( x * − x n ) f”(ζ )
n
1! 2!
Din faptul că f”(ζn) > 0, rezultă că
x * −x n
0 > f(xn) + f ′ (xn)
1!
de unde
f ( xn )
xn+1 = xn - > xn + x* - xn = x*.
f ′( xn )

Ca urmare xn > x* pentru orice n ≥0. Deoarece f este strict crescătoare,


f(xn) > f(x*) = 0,
şi în consecinţă,
f (xn )
xn+1 = xn - < xn pentru orice n ≥ 0.
f ′( xn )

Aşadar şirul (xn)n este strict descrescător şi mărginit inferior, deci este convergent.
Fie x limita şirului (xn)n. Avem x0 > x ≥ x*. Trecând la limită în
f ( x n −1 )
xn = xn-1 -
f ′ ( x n −1 )

obţinem
f ( x )
x = x - ,
f ′ ( x )

de unde rezultă f( x ) = 0. Deoarece x* este unica rădăcină a ecuaţiei f(x) = 0 din


intervalul [a, b] rezultă că x* = x . Similar se tratează cazul f” < 0.

106
Metode Numerice

Conform teoremei lui Lagrange pentru orice x∈[a,b] există dx între x şi x*


astfel încât f(x*) – f(x) = (x* - x) f ′ (dx). Ca urmare,
| f(xn)| = | f(x*) – f(xn)| = |x* - xn| | f ′ (dn)|,
de unde rezultă că
f ( xn ) f (x n )
|x* - xn| = ≤ .
f ′ (dn ) m1

Aplicând formula lui Taylor rezultă că există ηn între xn şi xn-1 astfel încât
2
x − x n −1
f(xn) = f(xn-1) + n
( x − x n −1 ) f”(η )
f ′ (xn-1) + n n
1! 2!
f ( x n −1 )
Ţinând cont şi de faptul că xn = xn-1 - sau echivalent
f ′ ( x n −1 )

f ( x n −1 )
xn - xn-1 = - ,
f ′ ( x n −1 )

obţinem
2
f ( x n −1 ) ( x − x n −1 ) f”(η )
f(xn) = f(xn-1) - f ′ (xn-1) + n n
f ′ ( x n −1 ) 2!

=
( x n − x n −1 )2 f”(η ).
n
2!
Ca urmare
2
f (x n ) 1 ( x n − x n −1 ) M2
|x* - xn| ≤ = |f”(ηn)| ≤ (xn – xn-1)2.
m1 m1 2! 2m1

Observaţie 5.3. Rata convergenţei pentru metoda tangentei este pătratică.
Într-adevăr, să presupunem că f : [a, b] → R o aplicaţie de două ori derivabilă cu
f’(x)≠0, f”(x) ≠ 0 oricare ar fi x∈[a, b], f(a)f(b)<0, şi că
f ( x n −1 )
xn = xn-1 - ,n≥1
f ′ ( x n −1 )

unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. Din teorema anterioară rezultă
că (xn)n converge la x* unica soluţie a ecuaţiei f(x) = 0. Aplicând formula lui
Taylor rezultă că există ζn între xn şi x* astfel încât

107
Mădălina Roxana Buneci

2
0 = f(x*) = f(xn) +
x * −x n
f ′ (xn) +
( x * − x n ) f”(ζ ),
n
1! 2!
de unde
f ( x n ) f ′′ ( ζ n ) 1
x* - xn = - - (x*-xn)2,
f ′( xn ) f ′( xn ) 2

sau echivalent
f (xn ) f ′′ ( ζ n ) 1
x* - xn + =- (x*-xn)2.
f ′( xn ) f ′(xn ) 2

Aşadar
f ′′ ( ζ n ) 1
x* - xn+1 = - (x*-xn)2,
f (xn ) 2

şi trecând la limită obţinem


| f ′′ ( x *) | M 2
| x * − x n +1 |
lim = ≤
n →∞ | x * − x n |2 2 | f ′ ( x *) | 2m1

unde m1 = inf f ′ ( x ) şi M2 = sup f ′′ ( x ) .


x∈[a,b] x∈[a,b]

Semnificaţie geometrică. Fie f : [a, b] → R o aplicaţie de două ori


derivabilă cu f’(x)≠0, f”(x) ≠ 0 oricare ar fi x∈[a, b], f(a)f(b)<0, şi fie
f ( x n −1 )
xn = xn-1 - ,n≥1
f ′ ( x n −1 )

unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. Atunci şirul (xn)n converge la x*
unica soluţie a ecuaţiei f(x) = 0. Pentru orice n ≥1, xn reprezintă abscisa punctului
de intersecţie a axei Ox cu tangenta la graficul lui f în punctul de coordonate (xn-1,
f(xn-1)). Deoarece f’ şi f” nu se anulează pe [a, b], rezultă că sunt fie strict pozitive
fie strict negative. Aşadar avem
Cazul 1. f” > 0 (f strict convexă)
1.1. f ′ > 0 (f strict crescătoare)
1.2. f ′ < 0 (f strict descrescătoare)

108
Metode Numerice

x2 x1 x0

1.1. f’ > 0, f” > 0

x0 x1 x2

1.2. f’ < 0, f” > 0

Cazul 2. f” < 0 (f strict concavă)


2.1. f ′ > 0 (f strict crescătoare)
2.2. f ′ < 0 (f strict descrescătoare)

109
Mădălina Roxana Buneci

x0 x1 x2

2.1. f’ > 0, f” < 0

x2 x1 x0

2.2. f’ < 0, f” < 0


Deci pentru aplicarea metodei tangentei în rezolvarea ecuaţiei f(x) = 0 trebuie
stabilite intervalele de monotonie şi intervalele de convexitate/concavitate pentru
funcţia f. Dacă a şi b sunt capetele unui astfel de interval şi dacă f(a)f(b)<0, atunci
se alege în intervalul [a, b] un punct x0 astfel încât f(x0)f”(x0)>0. Şirul construit rin

110
Metode Numerice

metoda tangentei, având termenul iniţial x0 converge la unica rădăcină a ecuaţiei


f(x) = 0, situată în intervalul [a, b].

Algoritm
Date de intrare:
f - în condiţiile 1.1,1.2,2.1 sau 2.2
x0 - f(x0)f”(x0)>0
ε >0 (precizia –determină condiţia de oprire a iteraţiilor)
Date de ieşire: xN cu proprietatea că N este cel mai mic număr natural pentru care
|xN – xN-1 |2 < ε.
unde (xn)n este şirul corespunzător metodei tangentei (xN este considerat o
aproximaţie satisfăcătoare a unicei soluţii a ecuaţiei f(x)=0)

x1 := x0;
f (x1)
x2 : = x1 - ;
f ′(x1)
cât timp | x2 – x1 |2 ≥ ε execută
x1 := x2;
f (x1)
x2 : = x1 - ;
f ′(x1)
Prezentăm în continuare o variantă a acestui algoritm pentru cazul în care f nu
verifică neapărat condiţiile suficiente de convergenţă. Introducem ca dată
suplimentară de intrare numărul maxim de termeni din şir ce urmează a fi calculaţi
(Nmax). Condiţia de oprire se transformă

| xn - xn-1 |2 < ε sau n > Nmax

x1 := x0;
f (x1)
x2 : = x1 - ;
f ′(x1)
n : = 1;

111
Mădălina Roxana Buneci

cât timp (| x2 – x1 |2 ≥ ε ) şi (n ≤ Nmax) execută


x1 := x2;
f (x1)
x2 : = x1 - ;
f ′(x1)
n : = n + 1;

Trebuie verificat la ieşirea din ciclu dacă f(x2) ≅ 0. Dacă problema este bine
condiţionată, aceasta condiţie va asigura acurateţea aproximaţiei.

Proceduri MAPLE
> mtangenta:=proc(f,x0,epsilon)
> local x1,x2,df;
> df:=D(f);x1:=x0;x2:=x1-f(x1)/df(x1);
> while evalf((x2-x1)^2)>=epsilon do
> x1:=x2;x2:=x1-f(x1)/df(x1)
> od;
> RETURN(x2)
> end;

> mtangentaN:=proc(f,x0,epsilon,Nmax)
> local x1,x2,n,df;
> df:=D(f);x1:=x0;x2:=x1-f(x1)/df(x1);n:=1;
> while (evalf((x2-x1)^2)>=epsilon)and (n<=Nmax) do
> x1:=x2;x2:=x1-f(x1)/df(x1) ;n:=n+1; print(evalf(x2))
> od;
> print(`Numar de termeni calculati`, n-1);
> RETURN(x2)
> end;

Exemple de utilizare a procedurilor

> with(plots):
> plot(exp(x)+2*x+1,x,color=black);

112
Metode Numerice

> plot(exp(x)+2*x+1,x=-2..2,color=black);

> f1:=(x->exp(x)+2*x+1);
f1 := x → e x + 2 x + 1
> mtangenta(f1,0.1,10^(-5));
-0.7388349460

> fsolve(f1(x),x);
-0.7388350311

> plot(sin(x)+x-1,x,color=black);

> f2:=(x->sin(x)+x-1);
f2 := x → sin( x ) + x − 1
> mtangenta(f2,1.1,10^(-8));

113
Mădălina Roxana Buneci

0.5109734294
> fsolve(f2(x),x);
0.5109734294
> mtangentaN(f2,1.1,10^(-8),10);
0.5099954153
0.5109733047
0.5109734294
Numar de termeni calculati , 3
0.5109734294
> xN:=mtangentaN(f2,-10.1,10^(-8),10);
19.33165959
9.366076806
-4881.864603
-2422.713182
14288.93783
5139.034940
2315.137476
-96996.81022
0.1024903391 10 8
-0.5376704605 10 8
Numar de termeni calculati , 10
xN := -0.5376704605 10 8
> f2(xN);

-0.5376704787 10 8

V.2. Rezolvarea sistemelor neliniare

Presupunem date o mulţime G ⊂ Rn şi o funcţie f = (f1, f2, ..., fn): G → Rn.


Problema pe care o studiem este determinarea vectorilor n-dimensionali
x = (x1, x2, ..., xn)t ∈G

114
Metode Numerice

cu proprietatea că f(x) = 0 sau echivalent


f1(x1, x2, ..., xn) = 0
f2(x1, x2, ..., xn) = 0
...............................
fn(x1, x2, ..., xn) = 0
Numim soluţie a sistemului (de n ecuaţii cu n necunoscute) f(x) = 0 pe G un vector
x*∈G ⊂ Rn cu proprietatea că f(x*) = 0,.
Presupunem că G ⊂ Rn este o mulţime deschisă, ||⋅|| o normă pe Rn care
induce o normă pe L(Rn, Rn) ) ≅ Mn,n(R) notată tot ||⋅||, f = (f1, f2, ..., fn) : G → Rn
este o funcţie diferenţiabilă şi x*∈G o soluţie a sistemului f(x) = 0. De asemenea fie
x̂ = x* + δh ∈G (h∈Rn cu ||h||=1, δ∈R) o aproximaţie a lui x*. Notăm cu Jf(x)
jacobianul funcţiei f în punctul x, adică matricea
 ∂f 
 i (x) .
 ∂x j 
 1≤i, j≤ n

Aplicând formula lui Taylor rezultă că


f( x̂ ) = f(x*) + δJf(x*)h + o(δ),
|| o ( δ ) ||
unde lim =0. Ca urmare,
δ→0 δ
f( x̂ ) - f(x*) - o(δ) = Jf(x*)( x̂ -x*)
Jf(x*)-1(f( x̂ ) - f(x*) - o(δ)) =( x̂ -x*)
şi
|| x̂ -x*|| ≤ || Jf(x*)-1|| f( x̂ ) - f(x*)||.

Deci factorul de condiţionare absolut al problemei f(x) = 0 este|| Jf(x)-1||. Dacă ε >
0 şi x̂ este un număr real cu proprietatea că |f( x̂ )| ≤ ε atunci
| x̂ - x*| ≤ ε|| Jf(x*)-1||

(unde x* este o soluţie a sistemului f(x) = 0). În general, || x̂ -x*|| şi ||f( x̂ )|| nu sunt
simultan mici (|| x̂ -x*|| este eroarea absolută cu care x̂ aproximează x*, iar ||f( x̂ )||
indică reziduu corespunzător lui x̂ ). Dacă problema este bine condiţionată (adică

115
Mădălina Roxana Buneci

dacă norma || Jf(x*)-1|| este mică), atunci reziduu mic implică faptul că eroarea
absolută cu care x̂ aproximează x*, || x̂ -x*||, este mică.
Metodele iterative de rezolvare a unui sistem de ecuaţii f(x)=0 presupun
construcţia unui şir (xk)k convergent către o rădăcină x* a ecuaţiei. Eroare absolută
cu care xk aproximează x* este ek = x* - xk. Se spune că şirul (xk)k converge cu rata
r dacă există o constantă C ∈ (0, ∞) astfel încât

|| ek +1 ||
lim = C.
k →∞ || ek ||r
Dacă
• r = 1 şi C<1, rata convergenţei se spune liniară
• r=1 şi C = 0 (sau dacă r > 1), rata convergenţei se spune superliniară
• r = 2, rata convergenţei se spune pătratică

V.2.1. Metoda punctului fix

Definiţie 5.4. Fie (X,d) un spaţiu metric şi fie f: X → X. Funcţia f se


numeşte contracţie dacă şi numai dacă există q∈ (0,1) astfel încât
d(f(x), f(y) ≤ q d(x,y)
pentru orice x,y ∈X

Definiţie 5.5 Fie f: X → X. Punctul α ∈X se numeşte punct fix pentru f


dacă f(α) = α.

Teoremă 5.6. (metoda punctului fix). Fie (X,d) un spaţiu metric complet
şi fie f : X → X o contracţie. Atunci există şi este unic x* punct fix pentru f. Punctul
x* este limita unui şir construit după cum urmează:
x0 ∈ X dat
xn = f(xn-1), n ≥ 1.
Mai mult, dacă numărul q ∈ (0,1) este astfel încât d(f(x), f(y)) ≤ qd(x,y)
pentru orice x,y ∈ X, atunci pentru orice n≥1 avem

116
Metode Numerice

q
1. d(x*, xn) ≤ d(xn, xn-1)
1− q

qn
2. d(x*, xn) ≤ d(x1, x0)
1− q
3. d(x*, xn) ≤ qd(x*, xn-1)
Demonstraţie. Deoarece f este contracţie, rezultă că există q ∈(0,1) astfel
încât d(f(x), f(y)) ≤ qd(x,y) pentru orice x,y ∈ X. Arătăm unicitatea punctului fix.
Presupunem prin absurd că x* şi y* sunt puncte fixe ale lui f şi că x* ≠ y*. Atunci
f(x*) = x* şi f(y*) = y* şi avem
d(x*, y*) = d(f(x*), f(y*)) ≤ q d(x*, y*) < d(x*, y*),
ceea ce este o contradicţie. În consecinţă, punctul fix (dacă există) este unic. Arătăm
că şirul (xn)n este convergent şi limita lui este punct fix pentru f. Pentru orice k≥0 şi
orice n ≥ 0, avem
d(xn+k, xn+k-1) = d(f(xn+k-1), f(xn+k-2)) ≤ q d(xn+k-1, xn+k-2) ≤ ...≤ qk-1d(xn+1, xn).
şi ţinând cont de aceasta
d(xn+k, xn) ≤ d(xn+k, xn-k-1) + d(xn+k-1, xn+k-2) +....+ d(xn+1, xn) ≤
≤ qk-1d(xn+1, xn) + qk-2d(xn+1, xn) + ...+ d(xn+1, xn)
= (qk-1 + qk-2 + ... + 1) d(xn+1, xn)

1 − qk
= d(xn+1, xn).
1− q
Deci

1 − qk
d(xn+k, xn) ≤ d(xn+1, xn) (1).
1− q
Din faptul că d(xn+1, xn) = d(f(xn), f(xn-1)) ≤ q d(xn, xn-1) ≤ ... ≤ qn d(x1, x0) şi din
relaţia (1) rezultă

1 − qk 1 − qk n 1 n
d(xn+k, xn) ≤ d(xn+1, xn) ≤ q d(x1, x0) ≤ q d(x1, x0).
1− q 1− q 1− q
Ca urmare
1 n
d(xn+k, xn) ≤ q d(x1, x0) (2).
1− q

117
Mădălina Roxana Buneci

Fie ε>0. Deoarece q ∈ (0,1), lim q n = 0, şi de aici rezultă că există nε ∈N astfel


n →∞

1− q
încât qn < ε . Ţinând cont de relaţia (2) obţinem
d(x1, x 0 )

d(xn+k, xn) < ε


pentru orice n ≥ nε şi orice k≥0. Deci (xn)n este şir Cauchy şi deoarece X este spaţiu
complet rezultă că (xn)n este convergent. Notăm x* = lim x n . Arătăm că x* este
n →∞

punct fix pentru f. Funcţia f fiind contracţie este funcţie continuă. Trecând la limită
cu n → ∞ în
xn = f(xn-1)
obţinem
lim x n = lim f (x n −1 ) = f ( lim x n −1 ) ,
n →∞ n →∞ n →∞

de unde ţinând cont că x* = lim x n = lim x n −1 rezultă


n →∞ n →∞

x* = f(x*),
adică x* este punct fix pentru f.
Din relaţia (1) rezultă

1 − qk 1 − qk
d(xn+k, xn) ≤ d(xn+1, xn) ≤. q d(xn, xn-1)
1− q 1− q
şi trecând la limită cu k → ∞, se obţine
q
d(x*, xn) ≤ d(xn, xn-1).
1− q
În continuare folosind şi faptul că d(xn, xn-1) ≤ qn-1d(x1, x0) se obţine

qn
d(x*, xn) ≤ d(x1, x0).
1− q
Pentru a arăta ultima afirmaţia din teoremă ţinem seama de
d(x*, xn) = d(f(x*), f(xn-1)) ≤ q d(x*, xn-1).

Corolar 5.7. Fie (E, ||⋅||) un spaţiu Banach (în particular, E = Rm) şi S o
submulţime închisă a lui E. Fie f : S → S o funcţie cu proprietatea că există un

118
Metode Numerice

număr q ∈ (0,1) este astfel încât ||f(x) - f(y)|| ≤ q||x -y|| pentru orice x,y ∈ S Atunci
există şi este unic x* punct fix pentru f şi pentru orice x0∈E, şirul definit recursiv
prin
xn = f(xn-1), n ≥ 1
converge la x*.
Mai mult, pentru orice n≥1 avem
q
1. ||x*- xn|| ≤ ||xn - xn-1||
1− q

qn
2. ||x*- xn|| ≤ ||x1- x0||
1− q
3. ||x*- xn|| ≤ q ||x*- xn-1||
Demonstraţie. Dacă (E, ||⋅||) un spaţiu Banach şi S o submulţime închisă a lui
E atunci (S,d) (unde d(x,y) = || x-y||) este spaţiu metric complet. În consecinţă,
afirmaţiile rezultă aplicând direct teorema precedentă.

Observaţie 5.8. În general, rata convergenţei pentru metoda punctului fix
este liniară.

Algoritm:
Date de intrare:
f (contracţie)
x0 (termenul iniţial al şirului)
ε (precizia ce determină condiţia de oprire: se calculează termenii şirului
până la xN cu proprietatea ||xN-xN-1|| < ε).
Date de ieşire:
xN (aproximaţie satisfăcătore (determinată de ε) pentru punctul fix).

x1:=x0;
x2:=f(x1);
cât timp x 2 − x1 ≥ε execută

x1:=x2;
x2:=f(x1);

119
Mădălina Roxana Buneci

La ieşire x2 este aproximaţie pentru x*, punctul fix al lui f. Faptul că f este
contracţie asigură terminarea programului într-un număr finit de paşi. Pentru a evita
ciclarea în situaţia în care s-ar încerca folosirea algoritmului pentru o funcţie care
nu este contracţie, se poate stabili de la început un număr maxim de paşi ce urmează
a fi executaţi. De asemenea se poate afişa la fiecare pas diferenţa dintre termenii
consecutivi curenţi. (pentru a observa că şirul nu converge dacă f nu e contracţie).
Astfel se poate folosi următoarea variantă a algoritmului:
Date de intrare:
f (contracţie)
x0 (termenul iniţial al şirului)
ε (precizia)
Nmax (număr maxim de termeni ai şirului ce urmează a fi calculaţi)
Condiţia de oprire: se calculează termenii şirului până la xN cu proprietatea
||xN-xN-1|| < ε sau N ≥ Nmax).
Date de ieşire:
xN (dacă f este contracţie, xN este aproximaţie satisfăcătore - determinată de
ε şi Nmax - pentru punctul fix al lui f).

x1:=x0;
x2:=f(x1);
n:=1;

cât timp ( x 2 − x1 ≥ε) sau (n<Nmax) execută

x1:=x2;
x2:=f(x1);
n:=n+1;

Dacă f este contracţie şi Nmax suficient de mare, la ieşirea din ciclu, x2 este
aproximaţie pentru x*, punctul fix al lui f.

120
Metode Numerice

Interpretare geometrică: f: I → I contracţie, I ⊂ R interval închis

y = f(x)
y=x

x0 x2 x4 x3 x1

Propoziţie 5.9. Fie a, b două numere reale cu a < b şi fie f: [a, b] → [a,b] ⊂
R o funcţie derivabilă cu proprietatea că sup | f ′(x) | < 1. Atunci f este contracţie.
x∈(a,b)

Demonstraţie. Notăm q = sup | f ′(x) | . Avem q ∈ (0,1). Fie x, y ∈ [a, b].


x∈(a,b)

Aplicând teorema lui Lagrange, rezultă că există ζ între x şi y astfel încât


f(x) – f(y) = f ′ (ζ) (x – y),
de unde obţinem
|f(x) – f(y)| = | f ′ (ζ) | |x – y| ≤ q|x – y|.

Exemple.
1) Să se rezolve (în mulţimea numerelor reale) ecuaţia următoare aplicând
metoda punctului fix
x3 – x -1 = 0.
Se poate arăta că ecuaţia x3 – x -1 = 0 are o singură rădăcină reală, şi că această
rădăcină este în intervalul (1,2). Ecuaţia se poate scrie:
x3 = x+1
x = 3 x +1

121
Mădălina Roxana Buneci

1 1
Fie f: [1,2] → [1,2], definită prin f(x) = 3 x + 1 . Avem f ′ (x) = şi deci
3 3 (x + 1)2

1 1
sup | f ′(x) | = <1
x∈(1,2) 3 34

Ca urmare f este contracţie pe intervalul [1,2]. Deci soluţia ecuaţiei poate fi aflată ca
limita şirului (xn)n, cu
xn = f(xn-1) = 3 x n −1 + 1 , x0∈[1,2].

2) Să se rezolve (în mulţimea numerelor reale) ecuaţia următoare aplicând


metoda punctului fix
x – cos(x) = 0
Notăm g(x) = x – cos(x). Cum cos(x) ∈ [-1, 1], soluţiile ecuaţiei x – cos(x) =
0 se găsesc în intervalul [-1, 1]. Deoarece g′ (x) = 1 + sin(x) > 0 pentru x din
intervalul [-1, 1], rezultă că g este strict crescătore pe [-1, 1] şi deci ecuaţia
x – cos(x) = 0
π
are cel mult o rădăcină. Cum g(0)g( )<0, ecuaţia x – cos(x) = 0 are exact o
2
π π π 1
rădăcină în intervalul [0, ]. Fie f: [0, ] → [0, ], f(x) = ( x +cos(x)). Avem
2 2 2 2
1
f ′ (x) = (1 – sin(x)) şi deci
2
1
sup | f ′(x) | = <1
x∈(0,π 2) 2

π
Ca urmare f este contracţie pe intervalul [0, ]. Deci soluţia ecuaţiei poate fi aflată
2
ca limita şirului (xn)n, cu
1 π
xn = f(xn-1) = ( xn-1 +cos(xn-1)), x0∈[0, ].
2 2
Procedura MAPLE de mai jos implementează metoda punctului fix pentru o
contracţie pe un interval închis al lui R.

122
Metode Numerice

> punctfix:=proc(f,x0, epsilon)


> local x1,x2;
> x1:=x0;
> x2:=f(x1);
> while evalf(abs(x2-x1))>=epsilon do
> x1:=x2;
> x2:=f(x1)
> od;
> RETURN(x2);
> end;

Exemplificăm aplicarea procedurii pentru contracţiile

f1: [1,2] → [1,2], definită prin f1(x) = 3 x + 1 .


π π 1
f2: [0, ] → [0, ], f2(x) = ( x +cos(x))
2 2 2
comparative cu aplicarea comenzii fsolve.
> f1:=x->(x+1)^(1/3);
( 1/ 3 )
f1 := x → ( x + 1 )
> punctfix(f1,1.5,10^(-5));
1.324719474
> fsolve(f1(x)=x,x);
1.324717957
> f2:=x->1/2*(x+cos(x));
1 1
f2 := x → x + cos( x )
2 2
> punctfix(f2,1.,10^(-5));
0.7390856959
> fsolve(f2(x)=x,x);
0.7390851332

Procedura de mai jos implementează metoda punctului fix pentru o contracţie pe


Rm.
> punctfixM:=proc(f,x0,epsilon,Nmax)
> local m,x1, x2,n, norma,i;
> m:=nops(x0);

123
Mădălina Roxana Buneci

> x1:=x0;
> x2:=[seq(f[i](op(x1)), i=1..m)];
> n:=1;
> norma:=0;
> for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od;
> while (evalf(norma) >= epsilon) and (n < Nmax) do
> x1:=x2;
> x2:=[seq(f[i](op(x1)), i=1..m)];
> n:=n+1;
> norma:=0;
> for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od;
> od;
> RETURN(x2)
> end;

Propoziţie 5.10. Fie a, b două numere reale cu a < b şi fie f: [a, b] → R o


funcţie de clasă C1 (derivabilă cu derivata continuă) care admite un punct fix x*.
Dacă | f ′ (x*)| < 1, atunci există un interval închis I ⊂ [a, b] astfel încât x*∈I şi f|I
este contracţie. Ca urmare şirul definit prin xn = f(xn-1), n≥1 converge la x* pentru
orice termen iniţial x0∈I.
Demonstraţie. Deoarece | f ′ (x*)| < 1 şi | f ′ | este continuă, rezultă că există
ε>0 astfel încât | f ′ (x)| < 1 pentru orice x cu proprietatea că |x-x*| < ε. Luăm
ε ε
I = [x* - , x* + ].
2 2
Deoarece | f ′ | este continuă, există ζ ∈ I astfel încât sup | f ′(x) | = | f ′ (ζ)| <1. Dacă
x∈I

mai arătăm şi că f(I) ⊂ I, rezultă că f|I este contracţie. Aplicând formula lui
Lagrange rezultă că pentru orice x ∈ I există ζx între x şi x* astfel încât
f(x) - f(x*) = f ′ (ζx)(x-x*)
f(x) - x* = f ′ (ζx)(x-x*)
ε
|f(x) – x*| =| f ′ (ζx)(x-x*)| =| f ′ (ζx)| | x-x*| < | x-x*| ≤ ,
2
ε ε
de unde rezultă că f(x) ∈ [x* - , x* + ] = I.
2 2

124
Metode Numerice

Observaţie 5.11. Fie J ⊂ R un interval deschis şi f: J → R o funcţie de clasă C2


care admite o rădăcină x* ∈ J cu proprietatea că f ′ (x*) ≠ 0. Deoarece | f ′ | este
continuă şi | f ′ (x*)| > 0, rezultă că există un interval J0 ⊂ J astfel încât x* ∈ J0 şi
pentru orice x ∈ J0 avem | f ′ (x)| > 0 (sau echivalent f ′ (x) ≠ 0). Considerăm funcţia
1
g:J0→R, definită prin g(x) = x – f(x). Avem
f ′(x)
1
g(x*) = x* - f(x*) = x*,
f ′(x*)
deci x* punct fix pentru g. Cum

f ′(x) 2 − f (x)f ′′(x) f (x)f ′′(x)


g′ (x) = 1 - 2
= ,
f ′(x) f ′(x) 2
rezultă că
f (x *)f ′′(x *)
| g′ (x*)| = =0 < 1.
f ′(x *)
2

Din propoziţia precedentă rezultă că există un interval închis I ⊂ J0 ⊂ J


astfel încât x*∈I şi g|I : I → I este contracţie. Ca urmare şirul definit prin recurenţă
xn= g(xn-1), n≥1 converge la x* pentru orice termen iniţial x0∈I. Din definiţia lui g
rezultă că

1
xn = xn-1 – f(xn-1), n ≥ 1,
f ′(x n −1 )

adică şirul corespunzător metodei tangentei pentru ecuaţia f(x) = 0.

Propoziţie 5.12. Fie ||⋅|| o normă pe Rm, care induce o normă pe


L(Rm, Rm) ≅ Mm,m(R)

notată tot ||⋅||. Fie a ∈ Rm, r>0, S =  B ( a, r ) = {x ∈ Rm, ||x-a|| ≤ r}, şi f : S → S o

funcţie diferenţiabilă pe S cu proprietatea că sup || Jf (x) || < 1, unde Jf(x) este


x∈S

jacobianul funcţiei f în punctul x, adică matricea

125
Mădălina Roxana Buneci

 ∂fi 

 ∂x j
( x)

.
 1≤i,j≤m

Atunci f este contracţie.


Demonstraţie. Notăm q = sup || Jf (x) || . Avem q ∈ (0,1). Fie x, y ∈S.
x∈S

Aplicând teorema creşterilor finite , rezultă că


||f(x) – f(y)|| ≤ sup || Jf (x + θ(y − x)) || ||x – y|| ≤ sup || Jf (x) || ||x – y|| ≤
θ∈[0,1] x∈S

≤ q||x – y||.

Propoziţie 5.13. Fie ||⋅|| o normă pe Rm, care induce o normă pe


L(Rm, Rm) ≅ Mm,m(R)

notată tot ||⋅||. Fie G ⊂ Rm o mulţime deschisă şi fie f: G → Rm o funcţie de clasă C1


care admite un punct fix x*. Dacă ||Jf (x*)|| < 1, atunci există r > 0 astfel încât dacă
notăm

S = B ( x*, r ) = {x ∈ Rm, ||x-x*|| ≤ r}

avem S ⊂ G şi f|S : S → S este contracţie. Ca urmare şirul definit prin xn=f(xn-1),


n≥1 converge la x* pentru orice termen iniţial x0∈S.
Demonstraţie. Deoarece G este deschisă, ||Jf (x*)|| < 1 şi ||Jf|| este continuă,
rezultă că există ε>0 astfel încât pentru orice x cu proprietatea că ||x-x*|| < ε avem
ε
x∈ G şi ||Jf(x)|| < 1. Luăm r = .
2
Deoarece ||Jf|| este continuă şi S compactă, există ζ ∈ S astfel încât
sup || Jf (x) || = ||Jf (ζ)|| <1.
x∈S

Dacă mai arătăm şi că f(S) ⊂ S, rezultă că f|S este contracţie. Aplicând formula lui
Taylor rezultă că pentru orice x ∈ S există ζx = x* + θx(x-x*) ∈ S astfel încât
f(x) = f(x*) + Jf(ζx)(x-x*)
f(x) = x* + Jf(ζx)(x-x*)

126
Metode Numerice

f(x) - x* = Jf(ζx)(x-x*)
||f(x) – x*|| = ||fζx)(x-x*)|| ≤||Jfζx)|| || x-x*||< || x-x*||≤r

de unde rezultă că f(x) ∈ B ( x*, r ) = S


V.2.2. Metoda Newton – cazul m-dimensional

Metoda Newton (varianta m - dimensională, m>1) este o generalizare a


metodei tangentei. Este o metodă iterativă de rezolvare a unor sisteme de m ecuaţii
şi m necunoscute:
f(x) = 0,
unde f : G → Rm, G ⊂ Rm.
La fel ca în secţiunile precedente convenim să notăm cu x1, x2,…, xn,… un
şir de elemente din Rm. Rezervăm indicii inferiori pentru a desemna componentele
unui element x = (x1, x2,…,xm) din Rm. Dacă G este o mulţime deschisă şi f : G →
Rm este o funcţie diferenţiabilă pe G, identificăm diferenţiala de ordinul I a lui f în
x, df(x), cu jacobianul lui f în x, notat Jf(x):
∂f 
Jf(x) =  i (x )
∂x j 1≤i, j≤ m

În cele ce urmează presupunem că matricea Jf(x) este inversabilă pentru x ∈G.


Metoda Newton constă în aproximarea soluţiei ecuaţiei considerate cu xn,
unde
xn = xn-1 – Jf(xn-1)-1 f(xn-1) (*)

iar aproximaţia iniţială x0∈G este suficient de apropiată de soluţia sistemului.

Observaţii. 1) Presupunem că f este de clasă C2 şi sistemul f(x) = 0 admite o


soluţie x* ∈ G cu proprietatea că Jf(x*) este matrice inversabilă (sau echivalent
det(Jf(x*)) ≠0). Atunci există o vecinătate deschisă V ⊂ G a lui x* astfel încât
pentru orice x ∈ V să avem Jf(x) este inversabilă. Considerăm funcţia

127
Mădălina Roxana Buneci

g: V → Rm, definită prin g(x) = x – Jf(x)-1 f(x).


Avem
g(x*) = x* - Jf(x*)-1 f(x*) = x*,
deci x* punct fix pentru g. Cum
||Jg (x*)|| = 0 < 1,

aplicând propoziţia precedentă rezultă că există r > 0 astfel încât astfel dacă notăm

S = B(x*, r ) = {x ∈ Rm, ||x-x*|| ≤ r}

avem S ⊂ V şi g|S : S → S este contracţie. Ca urmare şirul definit prin xn= g(xn-1),
n≥1 converge la x* pentru orice termen iniţial x0∈S. Din definiţia lui g rezultă că

xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1,

adică şirul dat de relaţia (*) (corespunzător metodei lui Newton pentru f(x) = 0 cu
termenul iniţial x0 ∈S).
2) Amplificând relaţia (*) cu Jf(xn-1) rezultă
Jf(xn-1)(xn - xn-1) = –f(xn-1) (**)
sau echivalent

m (
∂fi x n −1 )

j=1 ∂x j
( x nj − x nj −1 ) = − fi ( x n−1 ) , i = 1,2,…, m

Dacă se foloseşte relaţia (*) pentru determinarea lui xn este necesar să se calculeze
inversa matricei Jf(xn-1). Dacă se foloseşte relaţia (**), este necesar să se rezolve un

sistem liniar cu m ecuaţii, şi necunoscutele ∆x nk −1 = x nk − x nk −1 , k = 1, …, m.


Rezolvarea acestui sistem necesită un număr mai mic de operaţii decât inversarea
matricei Jf(xn-1). Folosim relaţia (**) se înlocuieşte rezolvarea sistemului neliniar
prin rezolvarea succesivă a unor sisteme liniare.
3) Una din dificultăţile metodei este necesitatea determinării derivatelor
∂f i
parţiale (x ) , componentele matricei Jf(x) (dacă se utilizează un mediu de
∂x j

programare simbolică cum este MAPLE aceasta nu e o dificultate majoră). O

128
Metode Numerice

posibilitate de eliminare a acestei dificultăţi este aproximarea derivatelor parţiale


prin diferenţe finite

∂f i
(x ) ≈ 1 f i x + h ij e j − f i (x ) = ∆ ij (x )
( ( ) )
∂x j h ij

unde hij sunt parametri specifici discretizării considerate, iar


ej =(0,..,0,1,0…0)t
sunt vectorii bazei canonice. În acest fel Jf(x) se înlocuieşte prin
J(x) = (∆ij(x))1≤i,j≤m
Metoda obţinută în acest caz se numeşte metoda iterativă discretă a lui Newton:
xn = xn-1 – J(xn-1)-1 f(xn-1), n ≥ 1.

Metoda Newton este o metodă frecvent folosită deoarece este foarte rapid
convergentă (rata convergenţei este pătratică). Dar ca şi în cazul metodei tangentei
convergenţa metodei depinde de alegerea aproximaţiei iniţiale. Aproximaţia iniţială
trebuie luată cât mai aproape de soluţia problemei, eventual utilizând o altă metodă
de găsire a soluţiei. În următoarele teoreme se presupune că s-a fixat o normă pe
Rm, notată , iar pe spaţiile de operatori liniari L(Rm, Rm), L(Rm, L(Rm, Rm)) se

consideră normele operatoriale induse. Pentru x ∈ Rm şi r > 0, se notează B(x,r)


mulţimea:

{y ∈ R m , y−x <r }
şi cu B ( x, r ) închiderea acestei mulţimi, adică

{y ∈ R m , y−x ≤r }
Teoremă 5.14. (Metoda Newton). Fie G ⊂ Rm o mulţime deschisă, f : G →

Rm o funcţie de clasă C2, cu proprietatea că există M > 0 astfel ca d 2f ( x ) ≤ M

pentru orice x ∈G. Presupunem că ecuaţia f(x) = 0 admite o soluţie x* astfel încât
Jf(x*) să fie inversabil. Atunci pentru orice q ∈ (0, 1) există r, µ > 0 astfel încât
Jf(x) este inversabil pentru orice x ∈ B(x*,r), şirul (xn)n, definit prin
xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1

129
Mădălina Roxana Buneci

rămâne în B(x*,r) oricare ar fi x0 ∈ B(x*,r) şi converge la x*. În plus, au loc


următoarele relaţii
2µ 2n
xn − x * ≤ q
M

( )
1 M n 2
xn − x * ≤ f xn ≤ x − x n −1 .
µ 2µ

Parametrii procedurii mnewton (de mai jos) sunt


funcţia f (se presupune că se rezolvă sistemul f(x) = 0)
x0 = termenul iniţial din şirul definit de (**)
epsilon = precizia
Nmax = numărul maxim de termeni din şir ce vor fi calculaţi
Se calculează n termeni, cu n verificând
2
( x n − x n −1 ∞ < epsilon) sau (n≥Nmax).

Comanda
>subs(expr1,expr2);
substituie subexpresia expr1 în expresia expr2. Comanda
>jacobian(f(x,y,...), [x, y, ...]);
calculează jacobianul lui f. Este o comnadă ce apaţine pachetului linalg. Comanda
>norm(a, t);
calculează norma t, unde t =1, 2, infinity a vectorului (sau matricei) a. Este de
asemenea o comanda ce aparţine pachetului linalg.
Procedură MAPLE
> mnewton := proc(f, x0, epsilon, Nmax)
> local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;
> m:=vectdim(x0);x1 := vector(m);x2:=vector(m);
> for i to m do x1[i] := x0[i] od;
> dx := vector(m);
> b := vector(m);
> fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[i],i=1..m)]);
> fx1 := matrix(m, m);
> ex := seq(x[i] = x1[i], i = 1 .. m);
> for i to m do

130
Metode Numerice

> for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j])) od


> od;
> b := map(-evalf,f(seq(x1[i],i=1..m)));
> dx := linsolve(fx1, b, 'r');
> if r <> m then print(`Metoda nu se aplica`); RETURN(NULL) fi;
> for i to m do x2[i] := x1[i] + dx[i] od;
> n := 1;
> print(x2);
> while epsilon <= norm(dx, infinity)^2 and n < Nmax do
> for i to m do x1[i] := x2[i] od;
> ex := seq(x[i] = x1[i], i = 1 .. m);
> for i to m do
> for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j]))
> od
> od;
> b := map(-evalf, f(seq(x1[i],i=1..m)));
> dx := linsolve(fx1, b, 'r');
> if r <> m then print(`Metoda nu se aplica`); RETURN fi;
> for i to m do x2[i] := x1[i] + dx[i] od;
> n := n + 1;
> print(x2)
> od;
> print(`Numar de pasi`, n);
> b := vector(map(evalf, f(seq(x1[i],i=1..m))));
> print(`Valoarea functiei`, b);
> RETURN(evalm(x2))
> end;

Exemple de utilizare a procedurii mnewton


> with(linalg):
> f:=(x,y)->[x^2-y,x^3-5*y];
f := ( x, y ) → [ x 2 − y, x 3 − 5 y ]
> mnewton(f,vector([10,0.1]),10^(-5),9);
[ 7.500000001, 50.00000002 ]
[ 6.000000002, 33.75000004 ]
[ 5.250000001, 27.00000001 ]
[ 5.021739128, 25.16576084 ]

131
Mădălina Roxana Buneci

[ 5.000186603, 25.00140155 ]
[ 5.000000017, 25.00000013 ]
Numar de pasi , 6
Valoarea functiei , [ 0.00046451 , 0.0069879 ]
[ 5.000000017, 25.00000013 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) → [ x 2 + y 2 − 1, x 3 − y ]
> mnewton(f1,vector([0.9,0.5]),10^(-5),9);
[ 0.8316784870 , 0.5629787234 ]
[ 0.8260617824 , 0.5636079087 ]
[ 0.8260313586 , 0.5636241619 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000031943, 0.0000785347 ]
[ 0.8260313586 , 0.5636241619 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([1,1]),10^(-5),9);
[ 0.8750000000 , 0.6250000000 ]
[ 0.8290363483 , 0.5643491124 ]
[ 0.8260401080 , 0.5636197732 ]
Numar de pasi , 3
Valoarea functiei , [ 0.005791188, 0.0054486200 ]
[ 0.8260401080 , 0.5636197732 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([-1,1]),10^(-5),20);
[ -0.2500000001 , 1.250000000 ]
[ -81.50000065 , -15.25000014 ]
[ -54.33007595 , 64.91769907 ]
[ -36.21723980 , 24.89070061 ]
[ -24.14389039 , 3.68381152 ]
[ -16.10992954 , -24.48752262 ]

132
Metode Numerice

[ -10.75342471 , -10.48890844 ]
[ -7.178878965 , -3.444508772 ]
[ -4.781922755 , 0.617903126 ]
[ -3.270919075 , -5.691810662 ]
[ -2.260819460 , -2.574374564 ]
[ -1.578178423 , -1.088178100 ]
[ -1.121843867 , -0.5209805009 ]
[ -0.8857962879 , -0.5206567978 ]
[ -0.8296024170 , -0.5627517822 ]
[ -0.8260437059 , -0.5636179649 ]
[ -0.8260313579 , -0.5636241623 ]
Numar de pasi , 17
Valoarea functiei , [ 0.000013414, -0.0000314743 ]
[ -0.8260313579 , -0.5636241623 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ x = -0.8260313577 , y = -0.5636241622 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
f2 := ( x , y, z ) → [ x + x 2 − 2 y z − 0.1, y − y 2 + 3 x z + 0.2, z + z 2 + 2 x y − 0.3 ]
> mnewton(f2,vector([0,0,0]),10^(-5),10);
[ 0.1, -0.2, 0.3 ]
[ 0.02245322250 , -0.1743243244 , 0.2461538462 ]
[ 0.01287849239 , -0.1778109522 , 0.2447473526 ]
[ 0.01282415092 , -0.1778006638 , 0.2446880471 ]
Numar de pasi , 4
Valoarea functiei , [ 0.0000818676 , 0.0000282439 , 0.0000687452 ]
[ 0.01282415092 , -0.1778006638 , 0.2446880471 ]
> fsolve({f2(x,y,z)[1],f2(x,y,z)[2], f2(x,y,z)[3]},{x=0,y=0,z=0});
{ x = 0.01282414583 , y = -0.1778006680 , z = 0.2446880443 }

Printre dezavantajele metodei Newton prezentate mai înainte se află


necesitatea calculării la fiecare pas a inversei unei matrice, Jf(xn), sau eventual a
rezolvării unui sistem de ecuaţii liniare (aşa cum remarcam mai înainte). Un alt
dezavantaj este localizarea teoretică a procesului iterativ într-o vecinătate a soluţiei

133
Mădălina Roxana Buneci

căutate. Metoda Newton simplificată înlătură primul inconvenient. Această variantă


a metodei constă în aproximarea soluţiei cu xn, unde x0, c ∈ G, şi
xn = xn-1 – Jf(c)-1 f(xn-1), n ≥ 1 (***)
Următoarea teoremă stabileşte condiţii suficiente de convergenţă a acestei
metode.

Teoremă 5.15 (Metoda Newton simplificată). Fie G ⊂ Rm o mulţime


deschisă, f : G → Rm o funcţie de clasă C2, cu proprietatea că există M > 0 astfel ca

d 2f ( x ) ≤M pentru orice x ∈G. Presupunem că ecuaţia f(x) = 0 admite o soluţie x*

astfel încât Jf(x*) să fie inversabil. Atunci pentru orice q ∈ (0, 1) există r, µ, L > 0
astfel încât Jf(x) este inversabil pentru orice c∈ B(x*,r), şirul (xn)n, definit prin
xn = xn-1 – Jf(c)-1 f(xn-1), n ≥ 1
rămâne în B(x*,r) oricare ar fi x0 ∈ B(x*,r) şi converge la x*. În plus, au loc
următoarele relaţii

xn − x * ≤ qn x0 − x *

( )
1 L n +1 2
xn − x * ≤ f xn ≤ x − xn .
µ µ

Parametrii procedurii mnewtonsimplif (de mai jos) sunt


funcţia f (se presupune că se rezolvă sistemul f(x) = 0)
x0 = termenul iniţial din şirul definit de (***)
c = punctul în care se evaluează inversa matricei jacobiene
epsilon = precizia
Nmax = numărul maxim de termeni din şir ce vor fi calculaţi
Se calculează n termeni, cu n verificând
2
( x n − x n −1 ∞ < epsilon) sau (n≥Nmax).

Procedură MAPLE
> mnewtonsimplif := proc(f, x0,c,epsilon, Nmax)
> local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;

134
Metode Numerice

> m:=vectdim(x0);x1 := vector(m);x2:=vector(m);


> for i to m do x1[i] := x0[i] od;
> dx := vector(m);
> b := vector(m);
> fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[i],i=1..m)]);
> fx1 := matrix(m, m);
> ex := seq(x[i] = c[i], i = 1 .. m);
> for i to m do
> for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j])) od
> od;
> if det(fx1)=0 then print(`Metoda nu se aplica`); RETURN(NULL) fi;
> fx1:=inverse(fx1); b := map(evalf,f(seq(x1[i],i=1..m)));
> dx := evalm(fx1&*b);
> for i to m do x2[i] := x1[i] - dx[i] od;
> n := 1;
> print(x2);
> while epsilon <= norm(dx, infinity)^2 and n < Nmax do
> for i to m do x1[i] := x2[i] od;
> b := map(evalf, f(seq(x1[i],i=1..m)));
> dx := evalm(fx1&*b);
> for i to m do x2[i] := x1[i] - dx[i] od;
> n := n + 1;
> print(x2)
> od;
> print(`Numar de pasi`, n);
> ex := seq(x[i] = x2[i], i = 1 .. m);
> b := vector(map(evalf, f(seq(x1[i],i=1..m))));
> print(`Valoarea functiei`, b);
> RETURN(evalm(x2))
> end;

Exemple de utilizare a procedurii mnewtonsimplif


> with(linalg):
> f:=(x,y)->[x^2-y,x^3-5*y];
f := ( x, y ) → [ x 2 − y, x 3 − 5 y ]
> mnewtonsimplif(f,vector([6,0.1]),vector([6,0.1]),10^(-5),20);
[ 5.250000002, 27.00000000 ]

135
Mădălina Roxana Buneci

[ 5.106445312, 25.83984374 ]
[ 5.048619375, 25.38187247 ]
[ 5.022801923, 25.17874816 ]
[ 5.010817356, 25.08472436 ]
[ 5.005158912, 25.04038926 ]
[ 5.002466430, 25.01930594 ]
[ 5.001180563, 25.00923998 ]
[ 5.000565396, 25.00442502 ]
[ 5.000270852 , 25.00211976 ]
Numar de pasi , 10
Valoarea functiei , [ 0.00122926 , 0.0202844 ]
[ 5.000270852, 25.00211976 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) → [ x 2 + y 2 − 1, x 3 − y ]
> mnewtonsimplif(f1,vector([0.9,0.5]),vector([0.9,0.5]),10^(-5),9);
[ 0.8316784870 , 0.5629787234 ]
[ 0.8267332448 , 0.5632460104 ]
[ 0.8261303960 , 0.5635972122 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000733926, 0.0018161243 ]
[ 0.8261303960 , 0.5635972122 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([1,1]),vector([1,1]),10^(-5),9);
[ 0.8750000000 , 0.6250000000 ]
[ 0.8442382812 , 0.5776367188 ]
[ 0.8324169200 , 0.5662568530 ]
[ 0.8280863872 , 0.5638050098 ]
[ 0.8266269335 , 0.5634628865 ]
Numar de pasi , 5
Valoarea functiei , [ 0.003603154, 0.0040362378 ]

136
Metode Numerice

[ 0.8266269335 , 0.5634628865 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([-1,1]),vector([-1,1]),10^(-5),20);
[ -0.2500000000 , 1.250000000 ]
[ 0.2265625000 , 1.414062500 ]
[ 0.6650531295 , 1.327101470 ]
[ 0.8806553123 , 0.9409566642 ]
[ 0.8443975609 , 0.5742223014 ]
[ 0.8197933010 , 0.5282487956 ]
[ 0.8206651612 , 0.5535667326 ]
[ 0.8261112430 , 0.5690490973 ]
[ 0.8271727754 , 0.5669722992 ]
Numar de pasi , 9
Valoarea functiei , [ 0.006276661, -0.0052613953 ]
[ 0.8271727754 , 0.5669722992 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ y = -0.5636241622 , x = -0.8260313577 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
f2 := ( x , y, z ) → [ x + x 2 − 2 y z − 0.1, y − y 2 + 3 x z + 0.2, z + z 2 + 2 x y − 0.3 ]
> mnewtonsimplif(f2,vector([0,0,0]),vector([0,0,0]),10^(-5),20);
[ 0.1000000000 , -0.2000000000 , 0.3000000000 ]
[ -0.0300000000 , -0.2500000000 , 0.2500000000 ]
[ -0.02590000000 , -0.1150000000 , 0.2225000000 ]
[ 0.04815419000 , -0.1694867500 , 0.2445367500 ]
[ 0.01478969600 , -0.2066006490 , 0.2565247722 ]
[ -0.00621510390 , -0.1686979420 , 0.2403061628 ]
[ 0.01888306226 , -0.1670604211 , 0.2401559976 ]
[ 0.01940230578 , -0.1856954577 , 0.2486343215 ]
[ 0.00728302228 , -0.1799894344 , 0.2453868143 ]
[ 0.01161288975 , -0.1729652764 , 0.2424070455 ]
[ 0.01600913753 , -0.1785281521 , 0.2452560777 ]
[ 0.01217347883 , -0.1799067137 , 0.2455656198 ]

137
Mădălina Roxana Buneci

[ 0.01149399913 , -0.1766017380 , 0.2440777075 ]


[ 0.01365879328 , -0.1772281130 , 0.2444857931 ]
Numar de pasi , 14
Valoarea functiei , [ -0.00216479415 , 0.0006263750 , -0.0004080856 ]
[ 0.01365879328 , -0.1772281130 , 0.2444857931 ]
> fsolve({f2(x,y,z)[1],f2(x,y,z)[2], f2(x,y,z)[3]},{x=0,y=0,z=0});
{ z = 0.2446880443 , x = 0.01282414583 , y = -0.1778006680 }

Metoda Newton – Kantorovici nu localizează procesul iterativ într-o


vecinătate a soluţiei problemei. Metoda Newton – Kantorovici constă în
aproximarea rădăcinii ecuaţiei considerate cu xn, unde

xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1, (****)


iar aproximaţia iniţială x0∈G satisface condiţiile din teorema următoare.

Teoremă 5.16. (Metoda Newton-Kantorovici). Fie G ⊂ Rm o mulţime


deschisă, f : G → Rm o funcţie de clasă C2, cu proprietatea că există M > 0 astfel ca

d 2f ( x ) ≤M pentru orice x ∈G. Presupunem că există x0∈ G şi există a, b >0 astfel

încât:
Jf(x0) este inversabilă şi ||Jf(x0)-1|| ≤ a, ||Jf(x0)-1f(x0)|| ≤ b,
1
abM <
2
1
( )
B x 0 , r ⊂ G, unde r = (1 − 1 − 2abM ) .
aM

Atunci f(x) = 0 are o unică soluţie x* în B(x 0 , r ), şirul (xn)n, este corect
definit prin
xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1,
rămâne în B(x0 , r) şi converge la x*. În plus, are loc următoarea relaţie
b
xn − x * ≤ , n ≥ 1.
2n −1

138
Metode Numerice

VI. Aproximarea funcţiilor

Fie f : [a, b] → R o funcţie. Se pune problema determinării unei funcţii F


care să aproximeze funcţia f. O astfel de aproximaţie este necesară în următoarele
situaţii:
1. Când nu se cunoaşte expresia analitică a lui f, ci doar valorile sale într-un
număr finit de puncte x0, x1, …, xn din intervalul [a, b].
2. Când expresia analitică a lui f este prea complicată şi calculele efectuate cu
ajutorul acesteia ar fi prea dificile.
F trebuie să fie o funcţie simplă, uşor de evaluat, de diferenţiat şi de integrat.

VI.1. Polinoame de interpolare

În cele ce urmează aproximarea funcţiei f : [a, b] → R se face cu un polinom.

VI.1.1. Definiţie. Eroarea de interpolare.

Definiţie. Fie x0, x1, …, xn n+1 puncte distincte două câte două din
intervalul [a, b] (numite noduri), şi fie yi = f(xi) pentru orice i = 0,1,…n. Se
numeşte polinom de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0=f(x0),
y1= f(x1), …, yn=f(xn) un polinom Pn care îndeplineşte următoarele condiţii
grad(Pn) ≤ n
Pn(xi) = yi, i = 0, 1, …, n .
Polinomul determinat de condiţiile anterioare există şi este unic. Într-adevăr,
deoarece grad(Pn) ≤ n, există an, an-1, ...a0 ∈R astfel încât
Pn(X) = anXn + an-1Xn-1 + … + a1X + a0
Relaţiile Pn(xi) = yi, i = 0, 1, …, n conduc la sistemul:

139
Mădălina Roxana Buneci

a0 + a1x0 + a2 x 20 + … + an x n0 = y0
a0 + a1x1 + a2 x 12 + … + an x 1n = y1
(*)
a0 + a1xn + a2 x 2n + … + an x nn = yn

Determinatul acestui sistem este


1 x0 x 20 … x 0n

∆ = 1 x1 x 12 … x 1n = ∏ (x
0 ≤ j<i ≤ n
i −xj )

1 xn x 2n … x nn

(fiind un determinant Vandermonde). Deci ∆ ≠0, şi în consecinţă sistemul (*) este


compatibil determinat, adică polinomul de interpolare Pn este unic determinat.
Coeficienţii polinomului de interpolare pot fi determinaţi rezolvând sistemul (*),
dar dacă n este mare, atunci volumul de calcul este mare. De aceea se utilizează
diferite forme comode ale polinoamelor care conduc la polinoame de interpolare
Lagrange, Newton, etc.
Teorema următoare stabileşte eroarea maximă cu care polinomul Pn
aproximează funcţia f:
Teoremă 6.1. (eroarea de interpolare). Fie f : [a, b] → R o funcţie de
n+1
clasă C . Fie x0, x1, …, xn n+1 puncte distincte două câte două din intervalul [a,
b], şi yi = f(xi) pentru orice i=0,1,…n. Fie Pn polinomul de interpolare asociat
nodurilor x0, x1, …, xn şi valorilor y0=f(x0), y1= f(x1), …, yn=f(xn). Atunci oricare ar
fi x∈[a,b], există ζx∈(a,b) astfel încât

f (n +1) (ζ x )
f(x) – Pn(x) = (x – x0) (x – x1) … (x – xn).
( n + 1) !
În consecinţă, oricare ar fi x ∈ [a, b], avem:

140
Metode Numerice

sup f (
n +1)
(t)
t∈[ a,b ]
| f(x) – Pn(x) | ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !
Demonstraţie. Fie x ∈[a, b]. Dacă x ∈{ x0, x1, …, xn}, atunci
f( x ) = Pn( x )
şi
( x – x0) ( x – x1) … ( x – xn) = 0,
ca urmare

f (n +1) (ζ )
f( x ) - Pn( x ) = 0 = ( x – x0) ( x – x1) … ( x – xn)
( n + 1) !
pentru orice ζ ∈(a,b). Presupunem că x ∉ { x0, x1, …, xn} şi considerăm funcţia
g:[a, b] → R, definită prin
g(x) = f(x) – Pn(x) - c (x – x0) (x – x1) … (x – xn),
unde constanta c va fi determinata astfel încât g( x ) = 0 sau echivalent
0 = g( x ) = f( x ) – Pn( x ) - c( x – x0) ( x – x1) … ( x – xn)

f (x) − Pn (x)
c= .
(x − x 0 )(x − x1 )...(x − x n )

Deci g( x ) = 0 şi g(xi) = 0 pentru orice i =0, 1, ..., n. Aşadar g se anulează în n+2


puncte distincte. Deoarece g este o funcţie Rolle, rezultă că derivata g′ se anulează
în n+1 puncte distincte din intervalul (a,b). Repetând raţionamentul cu g′ , rezultă
că g′′ se anulează în n puncte distincte din (a, b). Raţionând similar g(3) se anulează
în n-1 puncte distincte din (a, b), g(4) se anulează în n-2 puncte distincte din (a, b), şi
aşa mai departe. Se obţine că există ζ x ∈ (a, b) astfel încât

g(n+1)( ζ x ) = 0.

Pe de altă parte deoarece gradul lui Pn este cel mult n, rezultă că Pn(n +1) (x) = 0

pentru orice x ∈ [a, b] şi deoarece x → (x – x0) (x – x1) … (x – xn) este o funcţie


polinomială de grad n+1 cu coeficientul termenului de grad maxim 1, rezultă că a
n+1 derivată a sa este (n+1)!. În consecinţă, pentru orice x∈[a, b], avem

141
Mădălina Roxana Buneci

g(n+1)(x) = f(n+1)(x) - Pn(n +1) (x) - c(n+1)! = f(n+1)(x) - c(n+1)!.

În particular, pentru x = ζ x se obţine

0 = g(n+1)( ζ x ) = f(n+1)( ζ x ) - c(n+1)!,

de unde

f (n +1) (ζ x )
c= .
( n + 1) !
Cum pe de altă parte avem

f (x) − Pn (x)
c= .
(x − x 0 )(x − x1 )...(x − x n )
Rezultă că

f (x) − Pn (x) f (n +1) (ζ x )


= ,
(x − x 0 )(x − x1 )...(x − x n ) ( n + 1) !
sau echivalent,

f (n +1) (ζ x )
f( x ) – Pn( x ) = (x – x0) (x – x1) … (x – xn).
( n + 1) !
În plus,

sup f (
n +1)
(t)
t∈[ a,b ]
|f( x ) – Pn( x )| ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !

VI.1.2. Eroarea de interpolare în cazul nodurilor echidistante

Fie f : [a, b] → R o funcţie şi fie x0, x1, …, xn n+1 noduri echidistante din
intervalul [a, b]:
b−a
xi = a + ih, i = 0, 1, ...n, h=
n
Fie Pn polinomul de asociat nodurilor x0, x1, …, xn şi valorilor y0=f(x0), y1= f(x1),
…, yn=f(xn). Atunci oricare ar fi x ∈ [a, b], avem:

142
Metode Numerice

sup f (
n +1)
(t)
t∈[ a,b ]
| f(x) – Pn(x) | ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !
Pentru orice x ∈[a, b] există i astfel încât x ∈ [xi, xi+1] şi ca urmare

h h h2
|(x – xi) (x – xi+1)| ≤ = .
2 2 4
De asemenea se poate arăta că
|(x – xj)| ≤ (j – i + 1) h pentru i < j
|(x – xj)| ≤ (i – j ) h pentru j+1 < i
şi ţinând seama că (j+1)!(n-j)! ≤ n! se obţine

h n +1
|(x – x0) (x – x1) … (x – xn)| ≤ n!,
4
şi deci eroarea de interpolare satisface:

h n +1
sup f ( ) ( t ) .
n +1
| f(x) – Pn(x) | ≤
4(n + 1) t∈[a,b]

VI.1.3. Eroarea de interpolare în cazul nodurilor Cebîşev

Pentru n ∈ N dat, se numesc noduri Cebîşev (rădăcini ale polinomului


Cebîşev de grad n+1) numerele reale:
 2i + 1 
xi = cos  π  , 0 ≤ i ≤ n.
 2n + 2 
Polinoamele Cebîşev de prima speţă pot fi definite recursiv prin : T0(x) = 1, T1(x) =
x, Tn+2(x) = 2xTn+1(x) – Tn(x), n ≥ 0, sau pot fi definite prin Tn(x) = cos(n
arccos(x)). Nodurile Cebîşev sunt proiecţiile pe axa OX a unor puncte egal
distanţate situate pe un semicerc:

143
Mădălina Roxana Buneci

Nodurile Cebîşev au proprietatea că


1
|(x – x0) (x – x1) … (x – xn)| ≤
2n
pentru orice x∈ [-1, 1]. Se poate arăta că pentru oricare alte noduri ci, i=0, ...,n.
1
sup |(x – c0) (x – c1) … (x – cn)| ≥ n .
x∈[ −1,1] 2
Nodurile Cebîşev pot fi scalate şi translatate pentru a putea fi folosite pe un interval
oarecare [a, b]:
b−a  2i + 1  b + a
xi = cos  π + , 0 ≤ i ≤ n.
2  2n + 2  2
Astfel în cazul nodurilor Cebîşev eroarea de interpolare este

(b − a)n +1
sup f (
n +1)
| f(x) – Pn(x) | ≤ 2n +1
(t) .
2 (n + 1)! t∈[a,b]

VI.1.2. Polinomul Lagrange de interpolare

Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din intervalul [a,
b], şi yi = f(xi) pentru orice i = 0,1,…n. Se numesc polinoame Lagrange cele n+1
polinoame li, i =0, 1, ...n cu proprietăţile
grad (li) = n
li(xj) = δij = 1, dacă i = j
0, dacă i≠ j
Pentru orice i = 0, 1, ...n, deoarece li are gradul n şi admite drept rădăcini pe x0, x1,
..., xi-1, xi+1, ..., xn, rezultă că
li(X) = Ai(X – x0) (X – x1) …(X – xi-1) (X – xi+1) ... (X – xn).

144
Metode Numerice

Cum li(xi) = 1, rezultă


1
Ai = ,
( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − xi+1 ) ...( x i − x n )
şi ca urmare

li(x) =
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )
( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
Forma Lagrange a polinomului de interpolare este:
Ln(x) = y0l0(x) + y1l1(x) + … + ynln(x)
Se observă uşor că
Ln(xi) = y0l0(xi) + y1l1(xi) + … + ynln(xi) = yili(xi) = yi
pentru orice i = 0, 1, …, n şi că grad(Ln) ≤ n. Aşadar Ln este polinomul de
interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0, y1, …, yn.
În consecinţă, polinomul de interpolare asociat nodurilor x0, x1, …, xn şi
valorilor y0, y1, …, yn poate fi scris sub forma
n
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ...( x − x n )
Ln(x) = ∑ yi ( x
i =0 i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i +1 ) ... ( x i − x n )

numită formă Lagrange.

Algoritm pentru determinarea polinomului Lagrange


Date de intrare:
x – listă ce conţine cele n+1 puncte distincte din intervalul [a, b]
x0 x1 … xn
y – lista ce conţine valorile funcţiei în punctele x0, x1, ...., xn
y0 y1 … yn
yi = f(xi), i = 0,1,…, n
a – punctul în care se evaluaeză polinomul.
Date de ieşire:
v - valoarea polinomului în x

v : =0;

145
Mădălina Roxana Buneci

pentru i = 0,n,1 executa


t : =yi;
pentru j = 0,i - 1,1 executa
t: = t * (a – xj)/ (xi – xj)

pentru j = i + 1,n,1 executa


t: = t * (a– xj)/ (xi – xj)

v : = v + t;

Procedură MAPLE pentru calculul valorii polinomului Lagrange


> PLagrange:=proc(x,y,a)
> local n,v,t,i,j;
> n:=nops(x);v:=0;
> for i from 0 to n-1 do
> t:=y[i+1];
> for j from 0 to i-1 do
> t:=t*(a-x[j+1])/(x[i+1]-x[j+1]) od;
> for j from i+1 to n-1 do
> t:=t*(a-x[j+1])/(x[i+1]-x[j+1]) od;
> v:=v+t;
> od;
> RETURN(v)
> end;

Exemple
> PLagrange([1,-1,3],[2,-5,-1],2);
7
4
> PLagrange([1,-1,3],[2,-5,-1],-1);
-5
> expand(PLagrange([1,-1,3],[2,-5,-1],X));
5 7 1
− X2 + X −
4 2 4

146
Metode Numerice

Considerăm funcţia f1: R → R definită prin f1(x) = xcos(x) şi nodurile x0=0,


2π 4π
x1 = , x2 = şi x3 = 2π. Vom aplica procedura PLagrange pentru a determina
3 3
2π 4π
polinomul de interpolare P3 asociat nodurilor x0=0, x1= , x2 = şi x3 = 2π şi
3 3
valorilor y0 = f1(x0), y1 = f1(x1), y2 = f1(x2), y3 = f1(x3). De asemenea vom reprezenta
grafic funcţia f1 şi polinomul asociat pe intervalul [0, 2π], şi apoi pe intervalul
[-π,3π].
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x1 :=  0, , , 2 π 
 3 3 
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
π 2π
y1 :=  0, − , − , 2 π 
 3 3 
> expand(PLagrange(x1,y1,X));
27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):

> plot([f1(a),PLagrange(x1,y1,a)],a=0..2*Pi);

> plot([f1(a),PLagrange(x1,y1,a)],a=-Pi..3*Pi);

147
Mădălina Roxana Buneci

Considerăm funcţia f2: R → R definită prin f2(x) = cos(x) + sin(x). Se poate


observa uşor că |f(k)(x)| ≤ 2 pentru orice x∈R şi orice k∈N. Vom considera
intervalul [0,2π] şi nodurile echidistante corespunzătoare lui n = 3. Eroarea de

h4 2π
interpolare este dominată de 2, unde h =
16 3
> f2:=x->sin(x)+cos(x);
f2 := x → sin( x ) + cos ( x )
> x2:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x2 :=  0, , , 2 π 
 3 3 
> y2:=[seq(f2(2*Pi/3*i),i=0..3)];

 3 1 3 1 
y2 :=  1, − ,− − , 1 
 2 2 2 2 
> expand(PLagrange(x2,y2,X));
27 X 2 27 X 27 X 3 3 81 X 2 3 27 X 3
− + 1 + − +
16 π 2 8π 16 π 3 16 π2 8π
> plot({f2(a),PLagrange(x2,y2,a)},a=0..2*Pi);

148
Metode Numerice

1
Considerăm funcţia f3: R → R definită prin f3(x) = . Vom reprezenta grafic
1 + x2
funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante,
respectiv nodurilor Cebîşev pentru n = 3 pe intervalul [-1, 1]:
> f3:=x->1/(1+x^2);
1
f3 := x →
1 + x2
> x4:=[seq(-1+2*i/3,i=0..3)];
-1 1
x4 :=  -1, , , 1 
 3 3 
> y4:=[seq(evalf(f3(-1+2*i/3)),i=0..3)];
y4 := [ 0.5000000000 , 0.9000000000 , 0.9000000000 , 0.5000000000 ]
> plot([f3(a),PLagrange(x4,y4,a)],a=-1..1);

> x5:=[seq(evalf(cos((2*i+1)/(2*3+2)*Pi)),i=0..3)];

149
Mădălina Roxana Buneci

x5 := [ 0.9238795325 , 0.3826834325 , -0.3826834325 , -0.9238795325 ]


> y5:=[seq(evalf(f3(cos((2*i+1)/(2*3+2)*Pi))),i=0..3)];
y5 := [ 0.5395042867 , 0.8722604187 , 0.8722604187 , 0.5395042867 ]
> plot([f3(a),PLagrange(x5,y5,a)],a=-1..1);

> plot([f3(a),PLagrange(x4,y4,a),PLagrange(x5,y5,a)],a=-1..1);

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


echidistante, pentru n = 3, 6, 9 pe intervalul [-5, 5]:
> x_3:=[seq([seq(-5+10*i/(3*j),i=0..3*j)],j=1..3)];
-5 5 -10 -5 5 10 -35 -25 -5 -5 5 5 25 35  
x_3 :=   -5, , , 5 ,  -5, , , 0, , , 5 ,  -5, , , , , , , , , 5
 3 3   3 3 3 3   9 9 3 9 9 3 9 9  
> y_3:=[seq([seq(evalf(f3(-5+10*i/(3*j))),i=0..3*j)],j=1..3)];

150
Metode Numerice

y_3 := [ [ 0.03846153846 , 0.2647058824 , 0.2647058824 , 0.03846153846 ], [


0.03846153846 , 0.08256880734 , 0.2647058824 , 1., 0.2647058824 , 0.08256880734 ,
0.03846153846 ], [ 0.03846153846 , 0.06202143951 , 0.1147308782 , 0.2647058824 ,
0.7641509434 , 0.7641509434 , 0.2647058824 , 0.1147308782 , 0.06202143951 ,
0.03846153846 ] ]
> plot([f3(a),seq(PLagrange(x_3[j],y_3[j],a), j=1..3)],a=-5..5);

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


Cebîşev pentru n = 3, 6, 9 pe intervalul [-5, 5]:
> x_c3:=
[seq([seq(evalf(5*cos((2*i+1)/(6*j+2)*Pi)),i=0..3*j)],j=1..3)];

x_c3 := [ [ 4.619397662 , 1.913417162 , -1.913417162 , -4.619397662 ], [ 4.874639561,


3.909157412 , 2.169418697 , 0., -2.169418697 , -3.909157412 , -4.874639561 ], [
4.938441703 , 4.455032621 , 3.535533905 , 2.269952498 , 0.7821723260 ,
-0.7821723260 , -2.269952498 , -3.535533905 , -4.455032621 , -4.938441703 ] ]
> y_c3:=
[seq([seq(evalf(f3(5*cos((2*i+1)/(6*j+2)*Pi))),i=0..3*j)],j=1..3)];
y_c3 := [ [ 0.04476509230 , 0.2145386291 , 0.2145386291 , 0.04476509230 ], [
0.04038427927 , 0.06141935837 , 0.1752425253 , 1., 0.1752425253 , 0.06141935837 ,
0.04038427927 ], [ 0.03938836726 , 0.04796780633 , 0.07407407407 , 0.1625306849 ,
0.6204268538 , 0.6204268538 , 0.1625306849 , 0.07407407407 , 0.04796780633 ,
0.03938836726 ] ]
> plot([f3(a),seq(PLagrange(x_c3[j],y_c3[j],a), j=1..3)],a=-5..5);

151
Mădălina Roxana Buneci

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


echidistante, respectiv nodurilor Cebîşev pentru n = 9 pe intervalul [-5, 5]:

> plot([f3(a),PLagrange(x_3[3],y_3[3],a), PLagrange(x_c3[3],y_c3[3]


,a)],a=-5..5);

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


echidistante, pentru n = 5, 10, 15 pe intervalul [-5, 5]:
> x_5:=[seq([seq(-5+10*i/(5*j),i=0..5*j)],j=1..3)];

152
Metode Numerice

x_5 :=  [ -5, -3, -1, 1, 3, 5 ], [ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ],

 -5, -13, -11, -3, -7, -5, -1, -1, 1, 1, 5, 7, 3, 11, 13, 5  
 
 3 3 3 3 3 3 3 3 3 3  
> y_5:=[seq([seq(evalf(f3(-5+10*i/(5*j))),i=0..5*j)],j=1..3)];
y_5 := [ [ 0.03846153846 , 0.1000000000 , 0.5000000000 , 0.5000000000 , 0.1000000000 ,
0.03846153846 ], [ 0.03846153846 , 0.05882352941 , 0.1000000000 , 0.2000000000 ,
0.5000000000 , 1., 0.5000000000 , 0.2000000000 , 0.1000000000 , 0.05882352941 ,
0.03846153846 ], [ 0.03846153846 , 0.05056179775 , 0.06923076923 , 0.1000000000 ,
0.1551724138 , 0.2647058824 , 0.5000000000 , 0.9000000000 , 0.9000000000 ,
0.5000000000 , 0.2647058824, 0.1551724138 , 0.1000000000 , 0.06923076923 ,
0.05056179775 , 0.03846153846 ] ]
> plot([f3(a),seq(PLagrange(x_5[j],y_5[j],a), j=1..3)],a=-5..5);

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


Cebîşev pentru n = 5, 10, 15 pe intervalul [-5, 5]:
> x_c5:= [seq([seq(evalf(5*cos((2*i+1)/(10*j+2)*Pi)),i=0..5*j)],
j=1..3)];

153
Mădălina Roxana Buneci

x_c5 := [ [ 4.829629132 , 3.535533905 , 1.294095226, -1.294095226 , -3.535533905 ,


-4.829629132 ], [ 4.949107210 , 4.548159976 , 3.778747872 , 2.703204086,
1.408662782 , 0., -1.408662782 , -2.703204086 , -3.778747872 , -4.548159976 ,
-4.949107210 ], [ 4.975923634 , 4.784701678 , 4.409606322 , 3.865052266,
3.171966420 , 2.356983682 , 1.451423384 , 0.4900856985 , -0.4900856985 ,
-1.451423384 , -2.356983682 , -3.171966420 , -3.865052266 , -4.409606322 ,
-4.784701678 , -4.975923634 ] ]
>y_c5:= [seq([seq(evalf(f3(5*cos((2*i+1)/(10*j+2)*Pi))),i=0..5*j)],
j=1..3)];
y_c5 := [ [ 0.04110943251 , 0.07407407407 , 0.3738761582 , 0.3738761582 ,
0.07407407407 , 0.04110943251 ], [ 0.03922543546 , 0.04611321154 ,
0.06544958589 , 0.1203758761 , 0.3350834928 , 1., 0.3350834928 , 0.1203758761 ,
0.06544958589 , 0.04611321154 , 0.03922543546 ], [ 0.03882015305,
0.04185261408 , 0.04891260454 , 0.06274065346 , 0.09040470686 , 0.1525466423 ,
0.3218922278 , 0.8063319688 , 0.8063319688 , 0.3218922278 , 0.1525466423 ,
0.09040470686 , 0.06274065346 , 0.04891260454 , 0.04185261408 , 0.03882015305 ]
]
> plot([f3(a),seq(PLagrange(x_c5[j],y_c5[j],a), j=1..3)],a=-5..5);

Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor


echidistante, respectiv nodurilor Cebîşev pentru n = 15 pe intervalul [-5, 5]:
>plot([f3(a),PLagrange(x_5[3],y_5[3],a), PLagrange(x_c5[3],y_c5[3],
a)], a=-5..5);

154
Metode Numerice

(n) (n)
Fie f : [a, b] → R şi un şir de diviziuni ∆n = ( x 0 , x1 , …, x (n ) ) ale
n

intervalului [a, b], n ≥ 0. Pentru fiecare n se construieşte polinomul de interpolare Pn


(n) (n) n
( ) ( )
(n) (n)
asociat nodurilor x 0 , x1 , …, x (n ) şi valorilor f x 0 , f x1 , …, f x (n ) .
n
( )
Se pune problema convergenţei punctuale sau uniforme a lui Pn la f. În general, Pn
nu converge la f, însă dacă f este o funcţie întreagă reală şirul de polinoame Pn
converge uniform la f.
În cele ce urmează vom considera trei funcţii f1, f3 : R → R, definite mai sus
precum şi f4 : R → R respectiv f4(x) = |x|.
> f4:=x->abs(x);
f4 := abs
Vom vizualiza comportarea polinoamelor de interpolare (sub forma Lagrange) L0,
(n) (n)
( ) ( )
(n) (n)
L1,...,Ln asociate unor noduri x 0 , x1 , …, x (n ) şi valorilor f x 0 , f x1 , …,
n

( )
f x (n ) (cu exemplificări pentru f ∈ {f1, f2, f3}).
n

155
Mădălina Roxana Buneci

Procedura grafic_polinoame de mai jos reprezintă grafic n + 1 polinoamele de


interpolare L0, L1, ..., Ln. Parametrul tip al procedurii determină ce fel de noduri se
vor folosi (n + 1 noduri echidistante dacă tip = 1 şi n + 1 noduri Cebîşev altfel).
Ceilalţi parametri ai procedurii sunt funcţia f (care se aproximează prin polinoame
de interpolare), capetele intervalului [a, b] şi n care indică numărul de noduri (n+1).

> grafic_polinoame:=proc(f,a,b,tip,n)
> local xn,yn,titlu,legenda;
> if tip=1 then xn:=[seq(noduri_echidistante(a,b,j),j=0..n)]
> else xn:=[seq(noduri_Cebisev(a,b,j),j=0..n)] fi;
> yn:=[seq(map(f,xn[j]),j=1..n+1)];
> titlu:=cat(f,`:=x->`,convert(f(x),string) ,`; x0, x1, ..., x`,
> convert(n,string),` noduri `);
> if tip=1 then titlu:=cat(titlu, `echidistante `)
> else titlu:=cat(titlu, `Cebisev `) fi;
> titlu:=cat(titlu, `in intervalul [`, convert(a,string), `,
`,convert(b,string),`]`);titlu:=cat(titlu,`\ny0=`,f,`(x0), y1=`,
f,`(x1), ... , y`,convert(n,string),`=`,f,`(x`,convert(n,string),
`)`);
> titlu:=cat(titlu, `\nL i = polinomul de interpolare asociat
nodurilor x0, x1, ...,x `,convert(i,string),` si valorilor y0,
y1, ...,y`,convert(i,string), `, i =0..`,convert(n,string));
> legenda:=f,seq(cat(`L `,convert(j,string)),j=0..n);
> plot([f(t),seq(polinom_Lagrange(xn[j],yn[j],t),j=1..n+1)],
> t=a..b,labels=[X,Y],color=[COLOR(RGB,1,0,0),seq(COLOR(RGB,(1-
> floor(log[5](j))/(floor(log[5](n))+1))*irem(irem(j,7)+1,2),(1-
> floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1,2),
2),(1-floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1,
4),2)),j=1..n+1)],thickness=[2,seq(1,j=0..n)],legend=[legenda],
title=titlu,xtickmarks=map(evalf,xn[n]),ytickmarks=map(evalf,yn[n])
);
> end;

Aplicăm procedura pentru funcţia f1 pe intervalele [0, 2π], [-π, 3π] , funcţia f3 pe
intervalul [-3, 3] şi funcţia f4 pe intervalul [-1, 1]. În toate cazurile n = 10 şi se
consideră două variante: noduri echidistante şi noduri Cebîşev.
> grafic_polinoame(f1,0,2*Pi,1,10);

156
Metode Numerice

> grafic_polinoame(f1,0,2*Pi,2,10);

> grafic_polinoame(f1,-Pi,3*Pi,1,10);

157
Mădălina Roxana Buneci

> grafic_polinoame(f1,-Pi,3*Pi,2,10);

> grafic_polinoame(f3,-3,3,1,10);

158
Metode Numerice

> grafic_polinoame(f3,-3,3,2,10);

> grafic_polinoame(f4,-1,1,1,10);

159
Mădălina Roxana Buneci

> grafic_polinoame(f4,-1,1,2,10);

160
Metode Numerice

VI. 1.5. Polinomul Newton de interpolare de speţa I (ascendent)

Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Punctele x0, x1, …, xn se
presupun echidistante, adică
xi = x0 + ih, i = 0,1, …, n
h ≠0 fiind pasul reţelei. Se construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel
încât pentru fiecare i, Pi să fie polinomul de interpolare asociat nodurilor x0, x1, …,
xi şi valorilor y0, y1, …, yi. Construcţia se face după cum urmează
P0(x) = y0
Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xi+1) = yi+1.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-x0) + c2(x-x0)(x-x1) + .... + cn(x-x0)(x-x1)...(x-xn-1)
Pentru exprimarea coeficienţilor c0, c1, …, cn este necesară cunoaşterea
noţiunilor de putere generalizată şi diferenţă finită.
Fie f : [a, b] → R o funcţie, şi fie reţeaua cu nodurile echidistante x0, x1, …,
xn, având pasul h > 0. Produsul
x[n] = x(x-h)…(x-(n-1)h)
se numeşte putere generalizată a lui x. Dacă h ar fi 0, atunci puterea generalizată ar
coincide cu puterea obişnuită. Expresia
∆f(x) = f(x+h) - f(x)
se numeşte diferenţă finită (la dreapta) de ordinul întâi. Diferenţele finite de
ordin superior se definesc cu ajutorul relaţiei:
∆nf(x) = ∆(∆n-1f(x))
Se verifică cu uşurinţă relaţiile
∆(f+g) = ∆(f) +∆(g)
∆(cf) = c∆(f)
∆(m+n)(f) = ∆m(∆nf).

161
Mădălina Roxana Buneci

Pentru aplicaţii, calculul diferenţelor finite este comod dacă se construieşte tabelul
triunghiular următor:
f(x0) f(x1) f(x2) f(x3) f(xn-3) f(xn-2) f(xn-1) f(xn)
∆f(x0) ∆f(x1) ∆f(x2) ∆f(xn-3) ∆f(xn-2) ∆f(xn-1)
∆2f(x0) ∆2f(x1) ∆2f(xn-3) ∆2f(xn-2)
∆3f(x0) ∆3f(xn-3)

∆nf(x0)

Astfel
∆f (x 0 ) = f (x1 ) − f (x 0 )

∆ 2f (x 0 ) = ∆f (x1 ) − ∆f (x 0 )
= f (x 2 ) − f (x1 ) − (f (x1 ) − f (x 0 ))
= f (x 2 ) − 2f (x1 ) + f (x 0 )

∆ 3f (x 0 ) = ∆ 2f (x1 ) − ∆ 2f (x 0 )
= f (x 3 ) − 3f (x 2 ) + 3f (x1 ) + f (x 0 )
Se poate demonstra uşor prin inducţie că
n
i
∆ n f ( x ) = ∑ ( −1) Cin f ( x + ( n − i ) h )
i=0

dar în aplicaţii se va folosi tabelul diagonal de mai sus.


Pentru determinarea unui coeficientul ci al polinomului de interpolare Pn se
utilizează diferenţa finită de ordinul i a lui Pn în x0. Ţinând cont de
Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1,
se obţine
yi +1 − Pi (x i+1 )
ci+1 = .
(i + 1)!h i+1
şi se poate arătă inductiv că

∆ i +1f (x 0 )
ci+1 = , i = 0, 1, ..., n-1.
(i + 1)!h i +1

162
Metode Numerice

Aşadar

2 3
∆f (x 0 ) [1] + ∆ f (x 0 ) x − x [ 2] + ∆ f (x 0 ) x − x [3] + .... +
Pn (x) = f (x 0 ) + ( x − x 0) ( 0) ( 0)
1!h 2!h 2 3!h 3
∆ n f (x 0 )
+ ... + n
( x − x 0 )[ n ]
n!h
Expresia polinomului de interpolare de mai sus poartă denumirea de polinom
Newton de speţa I (sau ascendent ). Expresia polinomului Newton se poate pune
sub o formă mai comodă pentru aplicaţii, dacă se face schimbarea de variabilă
x − x0
t=
h
şi se ţine seama că

( x − x 0 )[i] = ( x − x 0 ) ( x − x 0 − h ) ( x − x 0 − 2h ) .... ( x − x 0 − (i − 1)h )


hi h h h h
= t ( t − 1)( t − 2 ) .... ( t − i + 1)

pentru orice i = 1,2,…,n. Se obţine


Pn (x) = Pn (x 0 + th)
∆f (x 0 ) ∆ 2f (x 0 ) ∆3f (x 0 )
= f (x 0 ) + t+ t(t − 1) + t(t − 1)(t − 2) +
1! 2! 3!
∆ n f (x 0 )
+ .... + t(t − 1)...(t − n + 1)
n!
Dacă se efectuează calculele în aritmetica virgulei mobile, aproximarea
funcţiei f prin polinomul Newton ascendent este avantajoasă pentru valorile x din
vecinătatea lui x0, eroarea fiind mică pentru t în modul mic.

Algoritm pentru determinarea polinomului Newton ascendent


Date de intrare:
x0- primul punct din reţea
h – pasul reţelei
y – lista ce conţine valorile funcţiei în punctele reţelei.
y0 y1 … yn
yi = f(xi) =f(x0 + ih), i = 0,1,…, n
x – punctul în care se evaluează polinomul.

163
Mădălina Roxana Buneci

Date de ieşire: px - valoarea polinomului în x


px : =y0; t : = (x-x0)/h; u: = 1;
pentru i = 1,n,1 executa
pentru j =0,n-i,1 executa
yj := yj+1 –yj;
u :=u*(t-i+1)/i;
px:=px+u*y0 ;

Procedură MAPLE pentru calculul valorii polinomului Newton de speţa I


(ascendent)
> PNewton1 := proc(x0, h, y, x)
> local t, u, yl, i, j,n, px;
> n:=nops(y);
> yl := [seq(y[i],i=1..n)];
> px := yl[1];
> t := (x - x0)/h;
> u := 1;
> for i from 1 to n-1 do
> for j from 0 to n-1-i do
> yl[j + 1] := yl[j + 2] - yl[j+1]
> od;
> u := u*(t – i + 1)/i;
> px := px + u*yl[1] od;
> RETURN(px)
> end;

> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];

2π 4π
x1 :=  0, , , 2 π 
 3 3 
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];

π 2π
y1 :=  0, − , − , 2 π 
 3 3 

164
Metode Numerice

> PNewton1(0,2*Pi/3,y1,X);
3X 3X
3 X  − 1   − 2 
X  2π   2π 
− +
2 4
> sort(expand(PNewton1(0,2*Pi/3,y1,X)));

27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):

> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=0..2*Pi);

> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=-Pi..3*Pi);

165
Mădălina Roxana Buneci

VI.1.6. Polinomul Newton de interpolare de speţa II (descendent)

Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Punctele x0, x1, …, xn se
presupun echidistante, adică
xi = x0 + ih, i = 0,1, …, n
h fiind pasul reţelei. Se construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel încât
pentru fiecare i, Pi să fie polinomul de interpolare asociat nodurilor xn, xn-1, …, xn-
i+1 şi valorilor yn, yn-1, …, yn-i+1. Construcţia se face după cum urmează
P0(x) = yn
Pi+1(x) = Pi(x) + ci+1(x-xn)(x-xn-1)...(x-xn-i+1), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xn-i) = yn-i.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-xn) + c2(x-xn)(x-xn-1) + .... + cn(x-xn)(x-xn-1)...(x-x1)

166
Metode Numerice

Pentru exprimarea coeficienţilor c0, c1, …, cn este necesară cunoaşterea


noţiunii de diferenţă finită la stânga. Expresia
∇f(x) = f(x) - f(x-h)
se numeşte diferenţă finită (la stânga) de ordinul întâi. Diferenţele finite la
stânga de ordin superior se definesc cu ajutorul relaţiei:
∇nf(x) = ∇(∇n-1f(x))
Se observă că
∇f(x) = ∆f(x-h).
În aplicaţii, pentru calculul diferenţelor finite la stânga se utilizează tabelul
triunghiular următor:
f(x0) f(x1) f(x2) f(x3) f(xn-3) f(xn-2) f(xn-1) f(xn)
∇f(x1) ∇f(x2) ∇f(x3) ∇f(xn-2) ∇f(xn-1) ∇f(xn)
∇2f(x2) ∇2f(x3) ∇2f(xn-2) ∇2f(xn)
∇3f(x3) ∇3f(xn)

∇nf(xn)
Pentru determinarea unui coeficient ci al polinomului de interpolare Pn se utilizează
diferenţa finită de ordinul i a lui Pn în xn. Se obţine:

∇f (x 0 ) ∇ 2f (x n ) 3
[ 2] + ∇ f (x n ) x − x
Pn (x) = f (x n ) + ( x − x n )[1] + 2
( x − x n −1 ) 3
( [3]
n −2 ) +
1!h 2!h 3!h
∇ n f (x n )
+ .... + n
( x − x1 )[ n ]
n!h

Expresia polinomului de interpolare de mai sus poartă denumirea de polinom


Newton de speţa II (sau descendent ). Expresia polinomului Newton descendent se
poate pune sub o formă mai comodă pentru aplicaţii, dacă se face schimbarea de
variabilă
x − xn
t=
h
Se obţine

167
Mădălina Roxana Buneci

Pn (x) = Pn (x n + th)
∇f (x n ) ∇ 2f (x n ) ∇3f (x n )
= f (x n ) + t+ t(t + 1) + t(t + 1)(t + 2) +
1! 2! 3!
∇ n f (x n )
+ .... + t(t + 1)...(t + n − 1)
n!
Dacă se efectuează calculele în aritmetica virgulei mobile, aproximarea
funcţiei f prin polinomul Newton descendent este avantajoasă pentru valorile x din
vecinătatea lui xn, eroarea fiind mică pentru t în modul mic.

Algoritm pentru determinarea polinomului Newton descendent


Date de intrare:
xn- ultimul punct din reţea
h – pasul reţelei
y – lista ce conţine valorile funcţiei în punctele reţelei.
y0 y1 … yn
yi = f(xi) =f(x0 + ih), i = 0,1,…, n
x – punctul în care se evaluează polinomul.
Date de ieşire: px - valoarea polinomului în x
px : =yn; t : = (x-xn)/h; u: = 1;
pentru i = 1,n,1 executa
pentru j =n,i,1 executa
yj := yj –yj-1;
u :=u*(t+i-1)/i;
px:=px+u*yn ;

Procedură MAPLE pentru calculul valorii polinomului Newton de speţa I


(ascendent)
> PNewton2 := proc(xn, h, y, x)
> local t, u, yl, i, j,n, px;
> n:=nops(y);
> yl := [seq(y[i],i=1..n)];
> px := yl[n];
> t := (x - xn)/h;

168
Metode Numerice

> u := 1;
> for i from 1 to n-1 do
> for j from n-1 by -1 to i do
> yl[j+1] := yl[j+1] - yl[j]
> od;
> u := u*(t + i - 1)/i;
> px := px + u*yl[n] od;
> RETURN(px)
> end;
Exemple
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];

2π 4π
x1 :=  0, , , 2 π 
 3 3 
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];

π 2π
y1 :=  0, − , − , 2 π 
 3 3 
> PNewton2(2*Pi,2*Pi/3,y1,X);
3 (X − 2 π)
9 ( X − 2 π )  + 1 
 2 π 
−6 π + 4 X +
4
3 (X − 2 π) 3 (X − 2 π)
3 ( X − 2 π )  + 1   + 2 
 2π   2π 
+
4
> sort(expand(PNewton2(2*Pi,2*Pi/3,y1,X)));

27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):

> plot([f1(a),pnewton2(2*Pi,2*Pi/3,y1,a)],a=0..2*Pi);

169
Mădălina Roxana Buneci

> plot([f1(a),PNewton2(2*Pi,2*Pi/3,y1,a)],a=-Pi..3*Pi);

170
Metode Numerice

VI.1.7. Polinomul Newton cu diferenţe divizate

Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte (nu
neapărat echidistante) din intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Se
construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel încât pentru fiecare i, Pi să
fie polinomul de interpolare asociat nodurilor x0, x1, …, xi şi valorilor y0, y1, …, yi.
Construcţia se face după cum urmează
P0(x) = y0
Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xi+1) = yi+1.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-x0) + c2(x-x0)(x-x1) + .... + cn(x-x0)(x-x1)...(x-xn-1)
Pentru exprimarea coeficienţilor c0, c1, …, cn este necesară cunoaşterea noţiunii de
diferenţă divizată.
Expresia
f (x j ) − f (x i )
f (x i , x j ) = , i≠ j
x j − xi

se numeşte diferenţă divizată de ordinul întâi. Diferenţele divizate de ordin 2 se


definesc cu ajutorul diferenţelor divizate de ordinul întâi:
f (x j , x k ) − f (x i , x j )
f (x i , x j , x k ) =
x k − xi
Cunoscând diferenţele divizate de ordinul m, diferenţele divizate de ordinul m+1 se
definesc prin:
f (x i , x i+1,..., x i+ m ) − f (x i −1, x i ,..., x i + m−1 )
f (x i −1, x i , x i+1,..., x i+ m ) =
x i + m − x i−1
În consecinţă, polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor
y0,y1, …, yn poate fi scris sub forma
Pn (x) = f (x 0 ) + f (x 0 , x1 )(x − x 0 ) + f (x 0 , x1 , x 2 )(x − x 0 )(x − x1 ) +
+ .... + f (x 0 , x1 ,..., x n )(x − x 0 )(x − x1 )...(x − x n −1 )

171
Mădălina Roxana Buneci

Pentru aplicaţii, calculul diferenţelor divizate este comod dacă se construieşte


tabelul triunghiular următor:
f(x0) f(x1) f(x2) f(x3) f(xn-2) f(xn-1) f(xn)
f(x0,x1) f(x1,x2) f(x2,x3) f(xn-2,xn-1) f(xn-1,xn)
f(x0,x1,x2) f(x1, x2,x3) f(xn-2,xn-1,xn)

f(x0,x1,....,xn)

Algoritm pentru determinarea polinomului Newton cu diferenţe divizate


Date de intrare:
x – listă ce conţine cele n+1 puncte distincte din intervalul [a, b]
x0 x1 … xn
y – lista ce conţine valorile funcţiei în punctele x0, x1, ...., xn
y0 y1 … yn
yi = f(xi), i = 0,1,…, n
a – punctul în care se evaluaeză polinomul.
Date de ieşire:
v - valoarea polinomului în a

v : =y0; u:= 1;
pentru i = 0,n-1,1 executa
pentru j = 0,n-i-1,1 executa
yj := (yj+1 –yj)/(xj+i+1 –xj);
u :=u*(a-xi);
v:=v+u*y0 ;

Procedură MAPLE pentru calculul valorii polinomului Lagrange


> PNewtond := proc(x, y, a)
> local t, u, y1,i, j,n, v;
> n:=nops(y);

172
Metode Numerice

> y1 := [seq(y[i],i=1..n)];
> v := y1[1];
> u := 1;
> for i from 0 to n-2 do
> for j from 0 to n-2-i do
> y1[j+1]:=(y1[j+2]-y1[j+1])/(x[j+i+2]-x[j+1]) ;
> od;
> u := u*(a-x[i+1]); v := v + u*y1[1];
> od;
> RETURN(v)
> end;

Exemple
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];

2π 4π
x1 :=  0, , , 2 π 
 3 3 
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];

π 2π
y1 :=  0, − , − , 2 π 
 3 3 
> PNewtond(x1,y1,X);
2π 4π
27 X  X −   X − 
X  3  3 
− +
2 16 π 2
> sort(expand(PNewtond(x1,y1,X)));

27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):

> plot([f1(a),PNewtond(x1,y1,a)],a=0..2*Pi);

173
Mădălina Roxana Buneci

> plot([f1(a),PNewtond(x1,y1,a)],a=-Pi..3*Pi);

174
Metode Numerice

VI.2. Metoda celor mai mici pătrate

Fie f : [a, b] → R o funcţie şi fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b] pentru care se cunosc valorile funcţiei yi = f(xi) pentru orice i =
0,1,…n. Aproximarea funcţiei f printr-un polinom de interpolare nu este indicată în
următoarele situaţii:
• când n este un număr foarte mare, ceea ce determină un volum mare de
calcul pentru determinarea coeficienţilor de interpolare
• când valorile yi = f(xi) nu sunt exacte.
În aceste situaţii se poate folosi aproximarea funcţiei prin metoda celor mai mici
pătrate.

VI.2.1. Caracterizarea elementelor de cea mai bună aproximare pe


subspaţii Hilbert.

Definiţie. Fie (S, d) un spaţiu metric şi X o submulţime a sa. Fie x0 un


element al lui S. Se numeşte element de cea mai bună aproximare a lui x0 pe X un
element p0∈X astfel încât
d(p0, x0) = inf d(x, x0)
x∈X

Reamintim că orice spaţiu pre-Hilbert H (spaţiu vectorial real sau complex


înzestrat cu un produs scalar < ⋅, ⋅ >) este în particular un spaţiu metric (distanţa d

este definită prin d(x,y) = || x – y || = x − y, x − y pentru orice x, y∈H). În acest

caz dacă X o submulţime a lui H şi x0∈H, atunci un element p0∈X este element de
cea mai bună aproximare pentru x0 pe X dacă

p0 − x 0 = inf x − x 0 = inf x − x0 , x − x0
x∈X x∈X

175
Mădălina Roxana Buneci

Teoremă 6.2. Fie H un spaţiu pre-Hilbert (real sau complex), H0 un


subspaţiu vectorial al său şi x0 ∈ H. Dacă există un element de cea mai bună
aproximare a lui x0 pe H0, atunci acesta este unic.
Demonstraţie. Presupunem prin absurd că există p1 ≠ p2 elemente de cea mai
bună aproximare a lui x0 pe H0. Deoarece H0 este subspaţiu vectorial al lui H,
1 1 2
rezultă că p = p1 + p ∈ H0. Avem
2 2
1 1 2 0 2 1
||p-x0||2 = || p1 + p -x || = || p1 – x0 + p2 – x0||2 <
2 2 4
1 1
< || p1 – x0 + p2 – x0||2 + || p1 – x0 – (p2 – x0)||2
4 4

1
= (|| p1 – x0 ||2 + || p2 – x0||2)
2

≤|| p1 – x0 ||2.
Deci p ∈ H0 şi ||p-x0|| < || p1 – x0 ||, contradicţie cu faptul că p1 este element de cea
mai bună aproximare a lui x0 pe H0. Rezultă că presupunerea este falsă, şi în
consecinţă elementul de cea mai bună aproximare este unic.

Teoremă 6.3. Fie H un spaţiu pre-Hilbert, H0 un subspaţiu liniar al lui H şi


x0 ∈ H. Un element p0 ∈ H0 este element de cea mai bună aproximare a lui x0 pe H0
dacă şi numai dacă
p0-x0⊥H0 (sau echivalent, < p0-x0, x> = 0 pentru orice x∈H0).
Demonstraţie. Presupunem că p0-x0⊥H0 şi demonstrăm că p0 ∈ H0 este
element de cea mai bună aproximare a lui x0 pe H0. Dacă p0 = x0, atunci este evident
că p0 este element de cea mai bună aproximare a lui x0 pe H0. Presupunem că p0 ≠
x0. Deoarece < p0-x0, x> = 0 pentru orice x∈H0, atunci în particular, <p0-x0, p0> = 0
şi ca urmare < p0-x0, p0 - x> = 0 pentru orice x∈H0. Pentru un x∈H0 oarecare, avem
||p0-x0||2 = < p0-x0, p0 -x0> = < p0 -x0, p0 - x + x - x0>
= < p0-x0, p0 - x> + < p0 -x0, x- x0>
= < p0-x0, x- x0> = |< p0-x0, x- x0>| ≤ || p0-x0|| || x- x0||.
Deci ||p0-x0||2 ≤ || p0-x0|| || x- x0|| pentru orice x∈H0. Împărţind inegalitatea cu

176
Metode Numerice

|| p0 -x0|| > 0,
obţinem
||p0-x0|| ≤ || x- x0|| pentru orice x∈H0,
adică p0 ∈ X este element de cea mai bună aproximare a lui x0 pe H0.
Presupunem că p0 ∈ H0 este element de cea mai bună aproximare a lui x0 pe
H0 şi demonstrăm că <p0-x0, x> = 0 pentru orice x∈H0. Presupunem prin absurd că
există y0∈H0 astfel încât
<p0-x0, y0> ≠ 0.
Scriind <p0-x0, y0> = r (cosθ + isinθ)= reiθ cu r>0 şi θ∈[0, 2π], rezultă că înlocuind
y0 cu eiθy0 ∈ H0, putem presupune că există y0∈H0 astfel încât
<p0-x0, y0> > 0.
Pentru orice λ > 0, avem p0 - λy0 ∈ H0, deoarece H0 este subspaţiu vectorial. În
plus avem
||p0 - λy0– x0||2 = < p0 - λy0 – x0, p0 - λy0 – x0>
= < (p0– x0) - λy0, (p0 – x0) - λy0>
= || p0 – x0||2 - λ<y0, p0-x0> -λ< p0-x0, y0> + λ2|| y0||2
=|| p0 – x0||2 + λ(λ|| y0||2 – 2 < p0-x0, y0>)
În consecinţă pentru orice scalar λ cu proprietatea că

p 0 − x 0 , y0
0<λ< 2
2
y0

avem ||p0 - λy0– x0||2 < || p0 – x0||2 şi p0 - λy0 ∈ H0. Am obţinut astfel o contradicţie
cu faptul că p0 este element de cea mai bună aproximare a lui x0 pe H0. În
consecinţă, presupunerea este falsă şi deci
<p0 -x0, x> = 0
pentru orice x∈H0.

177
Mădălina Roxana Buneci

VI. 2.2. Aproximarea în medie prin metoda celor mai mici pătrate

Considerăm mulţimea funcţiilor definite pe intervalul [a, b],


F : = {f : [a, b] → R }
şi n+1 puncte distincte x0, x1, …, xn din intervalul [a, b]. Spunem că funcţiile f şi g
din această mulţime sunt egale aproape peste tot (şi vor fi identificate) dacă f(xi) =
g(xi) pentru orice i = 0,1,…, n. Mai precis,
f ~ g ⇔ f(xi) = g(xi) pentru orice i = 0,1,…, n,
defineşte o relaţie de echivalenţă pe F. Notăm
[f] = {g: f ~ g} = { g : [a, b] → R, f(xi) = g(xi) pentru orice i = 0,1,…, n}
clasa de echivalenţă a lui f. Notăm cu cu H mulţimea claselor de echivalenţă relativ
la relaţia de echivalenţă de mai sus. H poate fi înzestrat cu o operaţie de grup
abelian după cum urmează:
[f] + [g] : = [h], unde h : [a, b] → R, h(x) = f(x) + g(x) pentru orice x∈[a, b].
Arătăm că definiţia nu depinde de reprezentanţi. Fie f1 ~ f2, g1 ~ g2 şi pentru i=1,2
fie hi:[a,b]→R, hi(x) = fi(x) + gi(x) pentru orice x∈[a, b]. Avem
h1(xj) = f1(xj) + g1(xj) = f2(xj) + g2(xj) = h2(xj)
pentru orice j = 0,1,…, n. Ca urmare h1 ~ h2, adică [h1] = [h2]. Evident operaţia
definită mai sus este asociativă şi comutativă. Dacă notăm
o: [a, b] → R, o(x) = 0 pentru orice x∈[a, b],
atunci [o] este element neutru. Pentru orice [h], [-h] este simetricul faţă de +, unde
-h: [a, b] → R, (-h)(x) = -h(x) pentru orice x∈[a, b].
De asemenea H poate fi înzestrat cu o operaţie externă de înmulţire cu scalari reali
după cum urmează:
α[f]: = [h], unde h : [a, b] → R, h(x) = αf(x) pentru orice x∈[a, b].
Este uşor de observat că definiţia nu depinde de reprezentanţi. H înzestrat cu cele
două operaţii definite mai sus devine spaţiu vectorial.
Fie p o funcţie cu următoarele proprietăţi:
• p(xi) > 0
n
• ∑ p(x i ) =1.
i =0

178
Metode Numerice

Dacă f1 ~ f2 şi g1 ~ g2 atunci
n n
∑ p ( xi ) f1 ( xi )g1 ( xi ) = ∑ p ( xi ) f2 ( xi )g 2 ( xi ) .
i=0 i=0

Introducem următorul produs scalar pe H


n
<[f], [g]> = ∑ p(x i )f (x i )g(x i )
i=0

Funcţia p(x) este o funcţie pondere introdusă în ipoteza că aproximările f(xi) sunt
diferite ca ordin de mărime. Relativ la produsul scalar introdus, norma lui [f] este
definită prin
n
2
[f ] = ∑ p(x i )f 2 (x i ) .
i =0

În cele ce urmează convenim să desemnăm o clasă de echivalenţă [f] printr-


un reprezentant al ei f.
Fie ϕ0, ϕ1, …ϕm un sistem de m+1 funcţii liniar independente definite pe
[a,b], cu m ≤ n. Convenim să numim spaţiul generat de ele spaţiul polinoamelor
generalizate şi să-l notăm Hm. Deci un polinom generalizat F ∈ Hm este de forma
m
F(x) = ∑ c i ϕ i (x ) .
i =0

Aproximarea în medie prin metoda celor mai mici pătrate a unui element f∈H
presupune determinarea elementului de cea mai bună aproximare F0 a lui f pe Hm.
Conform definiţiei elementul F0 de cea mai bună aproximare a lui f pe Hm trebuie să
satisfacă condiţia
n n

∑ p(x i )(f (x i ) − F0 (x i ))2 = F∈infH m ∑


i=0
p(x i )(f (x i ) − F(x i ))2
i =0

Determinarea coeficienţilor cj ai polinomului generalizat F0 cu ajutorul acestei


relaţii este dificilă. Se foloseşte caraterizarea elementului de cea mai bună
aproximare dată în secţiunea precedentă. Mai precis F0∈Hm este element de cea mai
bună aproximare a lui f pe Hm dacă şi numai dacă <f – F0, ϕ> = 0 pentru orice
ϕ∈Hm. Deoarece {ϕ0, ϕ1, ..., ϕm} este o bază a lui Hm, pentru ca F0∈Hm să fie
element de cea mai bună aproximare a lui f pe Hm este suficient ca
<f – F0, ϕj> = 0 pentru orice j = 0, 1, 2…m,

179
Mădălina Roxana Buneci

ceea ce revine la
<f, ϕj> = c0<ϕ0, ϕj> + c1<ϕ1, ϕj> + … + cm<ϕm, ϕj>, j = 0, 1,…,m.
Notăm
n
aij = <ϕi, ϕj> = ∑ p(x k )ϕ i (x k )ϕ j (x k )
k =0

n
bj = <f, ϕj> = ∑ p(x k )f (x k )ϕ j (x k )
k =0

Pentru determinarea coeficienţilor cj ai polinomului generalizat F0 se rezolvă


sistemul
c0a00 + c1a10 + … + cmam0 = b0
c0a01 + c1a11 + … + cmam1 = b1

c0a0m + c1a1m + … + cmamm = bm

Determinantul acestui sistem fiind un determinant Gramm (elementele sale sunt


produse scalare) este diferit de zero, deoarece sistemul de funcţii ϕ0, ϕ1, …ϕm este
un sistem liniar independent.
1
Dacă ϕj(x) = xj, j =0, 1,…, m, m ≤ n, şi p≡ , atunci
n +1
m
F0(x) = ∑ ci x i .
i =0

iar sistemul anterior devine


m m m
c0(n+1) + c1 ∑ x i + … + cm ∑ x im = ∑ f (x i )
i=0 i =0 i=0

m m m m
c0 ∑ x i + c1 ∑ x i2 + … + cm ∑ x im +1 = ∑ x i f (x i )
i=0 i =0 i =0 i =0

m m m m
c0 ∑ x im + c1 ∑ x im +1 + … + cm ∑ x i2m = ∑ x im f (x i )
i=0 i =0 i=0 i =0

Acest sistem este numit sistemul normal al lui Gauss.

180
Metode Numerice

Parametrii procedurii patrate_mici de mai jos sunt:


x - lista celor n +1 puncte: x0, x1, …, xn
y - lista ce conţine valorile funcţiei f în ce n +1 puncte: x0, x1, …, xn (y0 =
f(x0), y1 =f(x1), ….,yn =f(xn))
ϕ – lista funcţiilor liniar independente ϕ0, ϕ1, …ϕm
p – ponderea (lista)
Procedura întoarce o lista ce conţine coeficienţii polinomului generalizat ce
aproximează f.
> patrate_mici:=proc(x,y,p,phi)
> local n,m,i,k,j,a,b,c,ep,ei;
> n:=nops(x)-1;
> m:=nops(phi)-1;
> b:=vector(m+1);
> a:=matrix(m+1,m+1);
> for i from 0 to m do
> b[i+1]:=0;for k from 0 to n do
> b[i+1]:=b[i+1]+y[k+1]*phi[i+1](x[k+1])*p[k+1]
> od
> od;
> for i from 0 to m do
> for j from i to m do
> a[i+1,j+1]:=0;
> for k from 0 to n do
> a[i+1,j+1]:=a[i+1,j+1]+p[k+1]*phi[i+1](x[k+1])*phi[j+1](x[k+1])
> od;
> a[j+1,i+1]:=a[i+1,j+1]
> od;
> od;
> c:=vector(m+1);
> c:=linsolve(a,b,'r');
> if r<m+1 then print(`Sistemul de functii nu este liniar
independent`); RETURN(NULL) fi;
> print(`Factorul de conditionare`,evalf(cond(a)));
> ep:=0;
> for i from 0 to n do ei:=y[i+1];
> for j from 0 to m do

181
Mădălina Roxana Buneci

> ei:=ei-phi[j+1](x[i+1])*c[j+1]
> od;
> ei:=ei^2*p[i+1]; ep:=ep+ei
> od;
> print(`Suma patratelor erorilor (ponderate)`,evalf(ep));
> RETURN([seq(c[i],i=1..m+1)])
> end;
În exemplele ce urmează vom folosi şi procedurile desen_puncte, baza_normal,
evalueaza şi desen. Procedura desen_puncte reprezintă grafic cele n+1 puncte date
iniţial: (x0, y0), (x1, y1), ..., (xn, yn). Procedura baza_normal primeşte drept
paramentru un număr natural m şi construieşte lista funcţiilor ϕ0, ϕ1, …ϕm unde
ϕj(x) = xj pentru orice x şi orice j=0..m. Procedura evalueaza primeşte drept
parametri lista funcţiilor liniar independente ϕ0, ϕ1, …ϕm, lista coeficienţilor
polinomului generalizat ce aproximează f şi un punct a. Procedura returnează
valoarea polinomului generalizat în a. Procedura desen reprezintă grafic în acelaşi
sistem de axe de coordonate polinomul generalizat ce aproximează funcţia şi cele
n+1 puncte date iniţial. Punctele sunt reprezentate prin elipse. Parametrii procedurii
sunt funcţia determinată de polinomul generalizat, lista x ce conţine punctele x0, x1,
…, xn, şi şi lista y ce conţine valorile funcţiei. Înainte de a folosi aceste proceduri
trebuie încărcate pachetele linalg, plots şi plottools.
> desen_puncte:=proc(xn,yn)
> local n, d;
> n:=nops(xn);
> d:=pointplot([seq([xn[i],yn[i]],i=1..n)],symbol=CIRCLE,
labels=[X,Y],color=COLOR(RGB,0,0,0),thickness=15);display(d)
> end;

> baza_normal:=proc(n,t)
> RETURN([unapply(1,t),seq(unapply(t^j,t),j=1..n)])
> end;

> evalueaza:=proc(phi,c,a)
> local i,m,fx;
> m:=nops(phi);fx:=0;
> for i from 1 to m do

182
Metode Numerice

> fx:=fx+phi[i](a)*c[i] od;


> RETURN(fx)
> end;

> desen:=proc(f,x,y)
> local n,i,d1,d2,d3,x1,x2;
> n:=nops(x);
> x1:=min(seq(x[i],i=1..n));x2:=max(seq(x[i],i=1..n));
> d1:=pointplot([seq([x[i],y[i]],i=1..n)],symbol=CIRCLE,
color=black,thickness=15);
> d2:=plot(f(t),t=x1..x2,labels=[X,Y],xtickmarks=map(evalf,x),
ytickmarks=map(evalf,y));
> d3:=d1,d2;
> display(d3);
> end;
Exemple
> x1:=[1,2,3,4,5,6];
x1 := [ 1, 2, 3, 4, 5, 6 ]
> y1:=[0.9,0.98,1.02,1.04,1.10,1.12];
y1 := [ 0.9, 0.98, 1.02, 1.04, 1.10, 1.12 ]
> p1:=[seq(1/6,i=1..6)];
1 1 1 1 1 1
p1 :=  , , , , , 
6 6 6 6 6 6
> desen_puncte(x1,y1);

183
Mădălina Roxana Buneci

> phi1:=baza_normal(1,x);
φ1 := [ 1, x → x ]

> c1:=patrate_mici(x1,y1,p1,phi1);
Factorul de conditionare, 119.4666666
Suma patratelor erorilor (ponderate) , 0.0002069841270
c1 := [ 0.8786666680 , 0.0422857140 ]
> evalueaza(phi1,c1,x);
0.8786666680 + 0.0422857140 x
> desen((t->evalueaza(phi1,c1,t)),x1,y);

> phi2:=baza_normal(2,x);

φ2 := [ 1, x → x, x → x2 ]

> c2:=patrate_mici(x1,y1,p1,phi2);

184
Metode Numerice

Factorul de conditionare, 15157.80004


Suma patratelor erorilor (ponderate) , 0.0001109523809
c2 := [ 0.8419999980 , 0.0697857165 , -0.00392857178 ]
> evalueaza(phi2,c2,x);

0.8419999980 + 0.0697857165 x − 0.00392857178 x2


> desen((t->evalueaza(phi2,c2,t)),x1,y1);

> phi3:=baza_normal(3,x);

φ3 := [ 1, x → x, x → x 2, x → x3 ]
> c3:=patrate_mici(x1,y1,p1,phi3);

Factorul de conditionare, 0.3034682363 10 7


Suma patratelor erorilor (ponderate) , 0.00008095238089
c3 := [ 0.8000000130 , 0.1226190347 , -0.0214285678 , 0.001666666359 ]
> evalueaza(phi3,c3,x);

0.8000000130 + 0.1226190347 x − 0.0214285678 x2 + 0.001666666359 x3


> desen((t->evalueaza(phi3,c3,t)),x1,y1);

185
Mădălina Roxana Buneci

VI. 2.3. Limitări ale metodei celor mai mici pătrate

Pentru determinarea coeficienţilor cj ai polinomului generalizat F0 se rezolvă


sistemul Ax = b, cu A = Xt X iar b = Xt Y, unde

p(x 0 ) ϕ0(x0) p(x 0 ) ϕ1(x0) ... p(x 0 ) ϕm(xn)

p(x1 ) ϕ0(x1) p(x1 ) ϕ1(x1) ... p(x1 ) ϕm(x1)


X=

p(x n ) ϕ0(xn) p(x n ) ϕ1(xn) ... p(x n ) ϕm(xn)

Iar

186
Metode Numerice

p(x 0 ) f(x0)

p(x1 ) f(x1)
Y=

p(x n ) f(xn)

Dacă funcţiile ϕ0, ϕ1, …ϕm sunt liniar independente, atunci rang(X) = m+1
şi matricea A este pozitiv definită. Ca urmare există şi este unică o matrice inferior
triunghiulară L cu elementele de pe diagonala principală pozitive astfel încât A =
LLt (matricea L se numeşte factor Cholesky). Rezolvarea sistemului Ax=b revine la
rezolvarea a două sisteme cu matrice triunghiulare: Lz =b, Ltx=z. O variantă mai
lentă (volum de calcul mai mare), dar numeric mai stabilă, de rezolvare a sistemului
Ax = b este dată de descompunerea QR a matricei A, adică de reprezentarea
matricei A sub forma A = QR unde Q este o matrice ortogonală (QtQ = Im+1) iar R o
matrice superior triunghiulară. Atunci rezolvarea sistemului Ax=b este echivalentă
cu rezolvarea sistemului Rx =Qtb.
Dacă A=XtX nu este bine condiţionată, atunci gradul de acurateţe al soluţiei
furnizate de metoda celor mai mici pătrate poate fi foarte scăzut.

187
Mădălina Roxana Buneci

188
Metode Numerice

VII. Derivarea numerică

Se recurge la aproximarea derivatei unei funcţii f sau a derivatelor ei de


ordin superior atunci când expresia lui f este prea complicată sau când nu se
cunoaşte expresia analitică a funcţiei f (f este dată prin intermediul unui tabel de
valori).

VII. 1. Formule de derivare aproximativă folosind dezvoltări


în serie Taylor

Fie f : [a, b] → R, derivabilă. Presupunem că se dau n+1 puncte distincte în


intervalul [a, b], x0, x1, …., xn, în care se cunosc valorile funcţiei f.
Prezentăm o tehnică de găsire a unor formule de aproximare pentru valorile
derivatelor de orice ordin ale funcţiei f. Această tehnică are la bază formula lui
Taylor. Reamintim această formulă.
Fie I un interval de numere reale, a ∈ I şi f : I → R o funcţie de n ori
derivabilă în a. Polinomul Taylor de ordin n ataşat lui f în punctul a este funcţia
polinomială Ta,n : I → R, definită prin:
f ' (a ) f " (a ) f (n ) (a )
Ta,n(x) = f(a) + (x-a) + (x-a)2 + (x-a)n.
1! 2! n!

Restul formulei Taylor de ordin n ataşat funcţiei f în punctul a este funcţia


Ra,n : I → R definită prin Ra,n(x) = f(x) - Ta,n(x). Egalitatea
f(x) = Ta,n(x) + Ra,n(x)
valabilă pentru orice x ∈ I se numeşte formulă Taylor de ordin n ataşată funcţiei f
R a,x
în punctul a. Se demonstrează că lim = 0. Dacă f este de clasă Cn+1, atunci
x →a (x − a ) n

189
Mădălina Roxana Buneci

există u strict cuprins între a şi x (sau echivalent există θ ∈ (0, 1) astfel încât u = a+
θ(x – a)) cu proprietatea că
f (n +1) (u )
Ra,n(x) = (x - a)n+1.
(n + 1)!
Ne propunem să aproximăm valorile derivatelor de ordinul întâi şi doi ale
funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în punctele
xi-1, xi, xi+1
care nu sunt neapărat echidistante, adică:
xi-1 = xi –h, xi+1 = xi + αh.
dar că α variază într-un interval fixat.
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de
ordinul 2 pentru f în xi:
f ′(x i ) f ′′(x i ) f ′′′(w x )
f (x) = f (x i ) + (x − x i ) + (x − x i ) 2 + (x − x i )3 .
1! 2! 3!
cu wx stric cuprins între x şi xi. Înlocuim în această formulă x = xi-1, respectiv x =
xi+1 şi obţinem relaţiile:

f ′(x i ) f ′′(x i )h 2 f ′′′(u)


f (x i −1 ) = f (x i ) + (−h) + + (−h)3 (7.1)
1! 2! 3!
f ′(x i ) f ′′(x i ) 2 2 f ′′′(v) 3 3
f (x i+1 ) = f (x i ) + αh + h α + α h (7.2)
1! 2! 3!
cu u strict cuprins între xi-1 şi xi şi v strict cuprins între xi şi xi+1. Scăzând din a doua
relaţie prima relaţie înmulţită cu α2 obţinem:
f ′′′(v) 3 3 f ′′′(u) 3 2
f ′(x i ) =
( )
f (x i+1 ) + f ( x i ) α 2 − 1 − α 2f (x i−1 ) +
3!
α h +
3!
h α
hα ( α + 1)

Putem aproxima valoarea derivatei funcţiei f în xi prin:

f ′(x i ) ≈
( )
f (x i+1 ) + f ( x i ) α 2 − 1 − α 2f (x i−1 )
hα ( α + 1)

cu eroarea:
 α 2 f ′′′(v) α f ′′′(u)  2
ε = + h
 α + 1 3! α + 1 3! 

190
Metode Numerice

care este de ordinul lui h2 (O(h2)).


Adunând la a doua relaţie prima înmulţită cu α obţinem:
 f ′′′(v) 3 3 f ′′′(u) 3 
2  f (x i +1 ) + (1 + α ) f (x i ) + αf (x i −1 ) + α h − αh 
3! 3!
f ′′(x i ) =  2
.
h α ( α + 1)

Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin


2 ( f (x i +1 ) − (1 + α ) f (x i ) + αf (x i−1 ) )
f ′′(x i ) ≈
h 2α ( α + 1)

cu eroarea
h  f ′′′(v) 2 f ′′′(u) 
ε= α −
( α + 1)  3 3 

de ordinul lui h: O(h).


Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
f (x i +1 ) − f (x i −1 )
f ′(x i ) ≈
2h
f (x i +1 ) − 2f (x i ) + f (x i−1 )
f ′′(x i ) ≈ .
h2
În cazul nodurilor echidistante vom arătă că eroare de aproximare a derivatei de
ordinul doi prin formula de mai sus este de ordinul O(h2). Folosind formula lui
Taylor de ordinul 3 pentru f în xi, obţinem:

f ′(x i ) f ′′(x i )h 2 f ′′′(x i ) ( 4 ) (u)


3 f
f (x i −1 ) = f (x i ) + (− h) + + ( −h) + h4 (7.3)
1! 2! 3! 4!

f ′(x i ) f ′′(x i ) 2 f ′′′(x i ) 3 f ( 4 ) (v) 4


f (x i +1 ) = f (x i ) + h+ h + h + h (7.4)
1! 2! 3! 4!
cu u strict cuprins între xi-1 şi xi şi v strict cuprins între xi şi xi+1. Adunând cele două
relaţii rezultă:

f ( ) (v) 4 f ( ) (u) 4
4 4
f (x i +1 ) + 2f (x i ) + f (x i−1 ) + h + h
f ′′(x i ) = 4! 4!
h2
astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin

191
Mădălina Roxana Buneci

f (x i +1 ) − 2f (x i ) + f (x i−1 )
f ′′(x i ) ≈
h2
cu eroarea
 f ( 4 ) (v) f ( 4 ) (u) 
ε= +  h2
 4! 4! 
 
de ordinul lui h2: O(h2).
Ne propunem acum să aproximăm valorile derivatelor de ordinul întâi şi doi
ale funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în punctele
xi, xi+1, xi+2
care nu sunt neapărat echidistante, adică:
xi = xi+1 –h, xi+2 = xi+1 + αh.
cu α
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de ordinul 2
ataşată lui f în xi:
f ′(x i ) f ′′(x i ) f ′′′(w x )
f (x) = f (x i ) + (x − x i ) + (x − x i )2 + (x − x i )3 .
1! 2! 3!
cu wx stric cuprins între x şi xi. Înlocuim în această formulă x = xi+1, respectiv x =
xi+2 şi obţinem relaţiile:

f ′(x i ) f ′′(x i )h 2 f ′′′(u) 3


f (x i +1 ) = f (x i ) + h+ + h (7.5)
1! 2! 3!
f ′(x i ) f ′′(x i ) 2 f ′′′(v)
f (x i+ 2 ) = f (x i ) + (α + 1)h + h (α + 1) 2 + (α + 1)3 h 3 (7.6)
1! 2! 3!
cu u strict cuprins între xi şi xi+1 şi v strict cuprins între xi şi xi+2. Scăzând din relaţia
(7.5) relaţia (7.6) înmulţită cu (1+α)2 obţinem:

f ′(x i ) =
( )
f (x i+ 2 ) + f ( x i ) α 2 + 2α − (1 + α ) 2 f (x i+1 )
+
− hα ( α + 1)
f ′′′(v) f ′′′(u) 3
− (α + 1)3 h 3 + h (1 + α ) 2
+ 3! 3!
− hα ( α + 1)

Putem aproxima valoarea derivatei funcţiei f în xi prin:

192
Metode Numerice

f ′(x i ) ≈
(
−f (x i+ 2 ) − (1 + α) 2 f (x i +1 ) − α 2 + 2α f ( x i ) )
hα ( α + 1)

cu eroarea:
 f ′′′(v) (α + 1) 2 f ′′′(u) (α + 1)  2
ε= −  h
 3! α 3! α
 
Adunând la relaţia (7.6) relaţia (7.5) înmulţită cu -(1+α) obţinem:
f (x i+ 2 ) + αf (x i ) − (α + 1)f (x i +1 )
f ′′(x i ) = 2
h 2 ( α + 1) α
f ′′′(v) f ′′′(u) .
− (α + 1)3 h 3 + (α + 1)h 3
+2 3! 3!
2
h ( α + 1) α
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
f (x i+ 2 ) − (α + 1)f (x i+1 ) + αf (x i )
f ′′(x i ) ≈ 2
h 2 α ( α + 1)

cu eroarea
 f ′′′(v) (α + 1) 2 f ′′′(u) 1 
ε = − + h
 3! α 3! α 

Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
−f (x i+ 2 ) + 4f ( x i+1 ) − 3f (x i )
f ′(x i ) ≈
2h
cu eroare de ordinul O(h2)
f (x i + 2 ) − 2f (x i+1 ) + f (x i )
f ′′(x i ) ≈ .
h2
cu eroare de ordinul O(h).
Similar ne propunem să aproximăm valorile derivatelor de ordinul întâi şi
doi ale funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în
punctele

193
Mădălina Roxana Buneci

xi-2, xi-1, xi
care nu sunt neapărat echidistante, adică:
xi = xi-1 + h, xi-2 = xi-1 –αh
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de ordinul 2
pentru f în xi:

f ′(x i ) f ′′(x i )h 2 f ′′′(u) 3


f (x i −1 ) = f (x i ) − h+ − h (7.7)
1! 2! 3!
f ′(x i ) f ′′(x i ) 2 f ′′′(v)
f (x i −2 ) = f (x i ) − (α + 1)h + h (α + 1)2 − (α + 1)3 h 3 (7.8)
1! 2! 3!
cu u strict cuprins între xi şi xi+1 şi v strict cuprins între xi şi xi+2. Scăzând din relaţia
(7.8) relaţia (7.7) înmulţită cu (1+α)2 obţinem:

f ′(x i ) =
( )
f (x i−2 ) + f ( x i ) α 2 + 2α − (1 + α )2 f (x i −1 )
+
hα ( α + 1)
f ′′′(u) 3 f ′′′(v)
− h (1 + α )2 + (α + 1)3 h 3
+ 3! 3!
hα ( α + 1)

Putem aproxima valoarea derivatei funcţiei f în xi prin:

f ′(x ) ≈
( α 2 + 2α ) f ( x i ) − (1 + α )2 f (x i−1 ) + f (x i− 2 )
i
hα ( α + 1)

cu eroarea:
 f ′′′(u) (α + 1) f ′′′(v) (α + 1)2  2
ε = − +  h
 3! α 3! α
 
Adunând la relaţia (7.8) relaţia (7.7) înmulţită cu -(1+α) obţinem:
f (x i−2 ) + αf (x i ) − (α + 1)f (x i −1 )
f ′′(x i ) = 2
h 2 ( α + 1) α
f ′′′(v) f ′′′(u) .
− (α + 1)3 h 3 + (α + 1)h 3
+2 3! 3!
2
h ( α + 1) α
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin

194
Metode Numerice

−αf (x i ) − (α + 1)f (x i−1 ) + f (x i−2 )


f ′′(x i ) ≈ 2
h 2α ( α + 1)

cu eroarea
 f ′′′(u) 1 f ′′′(v) (α + 1)2 
ε= − h
 3! α 3! α 

Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
3f (x i ) − 4f (x i −1 ) + f ( x i− 2 )
f ′(x i ) ≈
2h
2
cu eroare de ordinul O(h ), şi

f (x i −2 ) − 2f (x i −1 ) + f (x i )
f ′′(x i ) ≈ .
h2
cu eroare de ordinul O(h).
Folosind acest tip de tehnici, se poate obţine o mare varietate de formule
aproximative pentru valorile derivatelor de orice ordin în xi. Prezentăm mai jos
câteva astfel de formule pentru cazul nodurilor echidistante.
Formulă de aproximare a derivatei prin diferenţe finite centrale Eroare
f (x i +1 ) − f (x i −1 ) O(h2)
f ′(x i ) ≈
2h
−f (x i+1 ) + 8f (x i+1 ) − 8f (x i−1 ) + f (x i− 2 ) O(h4)
f ′(x i ) ≈
12h
f (x i +1 ) − 2f (x i ) + f (x i−1 ) O(h2)
f ′′(x i ) ≈
h2
−f (x i+ 2 ) + 16f (x i +1 ) − 30f (x i ) + 16f (x i−1 ) − f (x i− 2 ) O(h4)
f ′′(x i ) ≈
12h 2
f (x i+ 2 ) − 2f (x i +1 ) + 2f (x i−1 ) − f (x i − 2 ) O(h2)
f ′′′(x i ) ≈
2h 3
−f (x i +3 ) + 8f (x i + 2 ) − 13f (x i+1 ) + 13f (x i −1 ) − 8f (x i −2 ) + f (x i−3 ) O(h4)
f ′′′(x i ) ≈
8h 3

195
Mădălina Roxana Buneci

Formulă de aproximare a derivatei prin diferenţe finite progresive Eroare


f (x i+1 ) − f (x i ) O(h)
f ′(x i ) ≈
h
−f (x i+ 2 ) + 4f ( x i+1 ) − 3f (x i ) O(h2)
f ′(x i ) ≈
2h
f (x i + 2 ) − 2f (x i+1 ) + f (x i ) O(h)
f ′′(x i ) ≈
h2
−f (x i +3 ) + 4f (x i + 2 ) − 5f (x i+1 ) + 2f (x i ) O(h2)
f ′′(x i ) ≈
h2
f (x i+3 ) − 3f (x i+ 2 ) + 3f (x i+1 ) − f (x i ) O(h)
f ′′′(x i ) ≈
h3
−3f (x i+ 4 ) + 14f (x i +3 ) − 24f (x i+ 2 ) + 18f (x i +1 ) − 5f (x i ) O(h2)
f ′′′(x i ) ≈
2h 3

Formulă de aproximare a derivatei prin diferenţe finite regresive Eroare


f (x i ) − f (x i −1 ) O(h)
f ′(x i ) ≈
h
3f (x i ) − 4f (x i−1 ) + f ( x i− 2 ) O(h2)
f ′(x i ) ≈
2h
f (x i ) − 2f (x i−1 ) + f (x i −2 ) O(h)
f ′′(x i ) ≈
h2
2f (x i ) − 5f (x i−1 ) + 4f (x i −2 ) − f (x i −3 ) O(h2)
f ′′(x i ) ≈
h2
f (x i ) − 3f (x i −1 ) + 3f (x i −2 ) − f (x i −3 ) O(h)
f ′′′(x i ) ≈
3
h
5f (x i ) − 18f (x i −1 ) + 24f (x i− 2 ) − 14f (x i−3 ) + 3f (x i− 4 ) O(h2)
f ′′′(x i ) ≈
2h 3

196
Metode Numerice

Procedură MAPLE pentru determinarea valorilor aproximative ale


derivatei de ordinul 1
Procedura d1 admite drept parametri lista x ce conţine punctele x1, x2, …., xn şi
lista y ce conţine valorile y1 = f(x1), y2 = f(x2), …., yn= f(xn). Procedura întoarce
lista aproximaţiilor derivatei de ordinul I a lui f în punctele x2, x3, ..., xn-1.

> d1:=proc(x,y)
> local df,h,alpha,i,n;
> n:=nops(x);df:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do
> h:=x[i]-x[i-1];
> alpha:=(x[i+1]-x[i])/h;
> df[i-1]:=(y[i+1]+y[i]*(alpha^2-1)-alpha^2*y[i-1])/
(h*alpha*(alpha+1))
> od;
> RETURN(df);
> end;
Procedură MAPLE pentru determinarea valorilor aproximative ale
derivatei de ordinul 2
Procedura d2 admite drept parametri lista x ce conţine punctele x1, x2, …., xn şi
lista y ce conţine valorile y1 = f(x1), y2 = f(x2), …., yn= f(xn). Procedura întoarce
lista aproximaţiilor derivatei de ordinul al II-lea a lui f în punctele x2, x3, ..., xn-1.

> d2:=proc(x,y)
> local d2f,h,alpha,i,n;
> n:=nops(x);d2f:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do h:=x[i]-x[i-1];
> alpha:=(x[i+1]-x[i])/h;
> d2f[i-1]:=2*(y[i+1]-(alpha+1)*y[i]+alpha*y[i-
1])/(h^2*alpha*(alpha+1))
> od;
> RETURN(d2f);
> end;
Exemple
> x1:=[seq(-1+2*i/5,i=0..5)];

197
Mădălina Roxana Buneci

-3 -1 1 3
x1 :=  -1, , , , , 1 
 5 5 5 5 
> f1:=t->ln(1+t^2);
f1 := t → ln( 1 + t 2 )
> y1:=[seq(evalf(f1(-1+2*i/5)),i=0..5)];
y1 := [ 0.6931471806 , 0.3074846997 , 0.03922071315 , 0.03922071315 , 0.3074846997 ,
0.6931471806 ]
> d1(x1,y1);
[ -0.8174080840 , -0.3353299832 , 0.3353299832 , 0.8174080840 ]
> d2(x1,y1);
[ 0.7337405900 , 1.676649916, 1.676649916, 0.7337405900 ]
> z1:=[seq(D(f1)(-1+2*i/5),i=1..4)];
-15 -5 5 15
z1 :=  , , , 
 17 13 13 17 
> z2:=[seq((D@@2)(f1)(-1+2*i/5),i=1..4)];
200 300 300 200 
z2 :=  , , , 
 289 169 169 289 
> map(evalf,d1(x1,y1));
[ -0.8174080840 , -0.3353299832 , 0.3353299832 , 0.8174080840 ]
> map(evalf,z1);-.8174080840
[ -0.8823529412 , -0.3846153846 , 0.3846153846 , 0.8823529412 ]
> map(evalf,d2(x1,y1));
[ 0.7337405900 , 1.676649916, 1.676649916, 0.7337405900 ]
> map(evalf,z2);
[ 0.6920415225 , 1.775147929 , 1.775147929 , 0.6920415225 ]

Cazul nodurilor echidistante:


Procedură MAPLE pentru determinarea valorilor aproximative ale
derivatei de ordinul 1 utilizând o formula de aproximare prin diferenţe finite
centrale
Procedura de1 admite drept parametri pasul h al discretizării şi lista y ce conţine
valorile y1 = f(x1), y1 = f(x1), …., yn= f(xn) (xi = xi + (i-1)h). Procedura returnează
lista aproximaţiilor derivatei de ordinul I a lui f în punctele x2, x3, ..., xn-1.
> de1:=proc(h,y)
> local df,i,n;

198
Metode Numerice

> n:=nops(y);df:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do
> df[i-1]:=(y[i+1]-y[i-1])/(2*h)
> od;
> RETURN(df);
> end;

Procedură MAPLE pentru determinarea valorilor aproximative ale


derivatei de ordinul 2 utilizând o formula de aproximare prin diferenţe finite
centrale
Procedura de2 admite drept parametri drept parametri pasul h al discretizării şi
lista y ce conţine valorile y1 = f(x1), y1 = f(x1), …., yn= f(xn) (xi = xi + (i-1)h).
Procedura întoarce lista aproximaţiilor derivatei de ordinul al II-lea a lui f în
punctele x2, x3, ..., xn-1.
> de2:=proc(h,y)
> local df,i,n;
> n:=nops(y);df:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do
> df[i-1]:=(y[i+1]-2*y[i]+y[i-1])/(h*h)
> od;
> RETURN(df);
> end;
Exemple
> x2:=[seq(1+2*i/5,i=0..5)];
7 9 11 13
x2 :=  1, , , , , 3 
 5 5 5 5 
> f2:=t->1/(1+t^2);
1
f2 := t →
1 + t2
> y2:=[seq(evalf(f2(1+2*i/5)),i=0..5)];
y2 := [ 0.5000000000 , 0.3378378378 , 0.2358490566 , 0.1712328767 , 0.1288659794 ,
0.1000000000 ]
> de1(2/5,y2);
[ -0.3301886792 , -0.2082562014 , -0.1337288465 , -0.08904109590 ]
> de2(2/5,y2);

199
Mădălina Roxana Buneci

[ 0.3760836312 , 0.2335787581 , 0.1390580162 , 0.08438073688 ]


> z3:=[seq(D(f2)(1+2*i/5),i=1..4)];
-875 -1125 -1375 -1625 
z3 :=  , , , 
 2738 5618 10658 18818 
> z4:=[seq((D@@2)(f2)(1+2*i/5),i=1..4)];
38125 68125 105625 150625 
z4 :=  , , , 
 101306 297754 778034 1825346 
> map(evalf,de1(2/5,y2));
[ -0.3301886792 , -0.2082562014 , -0.1337288465 , -0.08904109590 ]
> map(evalf,z3);
[ -0.3195763331 , -0.2002491990 , -0.1290110715 , -0.08635349134 ]
> map(evalf,de2(2/5,y2));
[ 0.3760836312 , 0.2335787581 , 0.1390580162 , 0.08438073688 ]
> map(evalf,z4);
[ 0.3763350641 , 0.2287962546 , 0.1357588486 , 0.08251860195 ]
> with(plots):
> plot([D(f2),t->de1(2/5,[f2(t-2/5),f2(t),f2(t+2/5)])[1]],1..3);

200
Metode Numerice

> plot([(D@@2)(f2),t->de2(2/5,[f2(t-2/5),f2(t),f2(t+2/5)])[1]],
1..3);

> plot([D(f2),t->de1(10^(-8),[f2(t-10^(-8)),f2(t),f2(t+10^(-
8))])[1]],1..3);

201
Mădălina Roxana Buneci

> plot([(D@@2)(f2),t->de2(10^(-4),[f2(t-10^(-4)),f2(t),f2(t+10^(-
4))])[1]],1..3);

Ceea ce vedem în ultimele două grafice se datorează aritmeticii virgulei mobile.


Aşa cum am arătat în primul capitol eroarea de calcul este suma dintre eroarea de
trunchiere şi eroarea de rotunjire, dar de obicei una dintre acestea predomină. De
obicei există o valoare optimală a pasului de discretizare h. Pentru valori mai mici
ale lui h eroarea totală creşte din cauza creşterii erorii de rotunjire, iar pentru valori
mai mari ale lui h eroarea totală creşte din cauza creşterii erorii de trunchiere.
Pentru a evidenţia acest aspect considerăm procedurile eroare1 (respectiv eroare2)
de mai jos care returnează eroarea cu care este aproximată derivata de ordinul 1
(respectiv 2) a funcţiei f în punctul x când se aplică o formulă de aproximare prin
diferenţe finite centrale (nodurile sunt x-h,x,x+h). În exemple ce urmează se poate
face comparaţie între situaţia în care calculul se execută simbolic (şi doar rezultatele
sunt afişate în virgulă mobilă) şi situaţia în care calculul se execută în virgulă
mobilă.
> eroare1:=proc(f,x,h)
> RETURN(D(f)(x)-de1(h,[f(x-h),f(x),f(x+h)])[1])
> end;

202
Metode Numerice

> map(evalf,[seq(eroare1(f2,3/2,10^(-i)),i=1..6)]);

[ 0.0006711385277 , 0.6722343900 10 -5, 0.6722452598 10 -7 , 0.6722453685 10 -9 ,


0.6722453695 10 -11 , 0.6722453696 10 -13 ]
> [seq(eroare1(f2,1.5,10^(-i)),i=1..6)];

[ 0.0006711384 , 0.67214 10 -5 , 0.314 10 -7 , -0.1686 10 -6, 0.13314 10 -5 , -0.0000236686 ]


> plot(h->abs(eroare1(f2,1.5,h)), 10^(-6)..10^(-2));

> plot(h->abs(eroare1(f2,1.5,h)), 10^(-6)..10^(-2),numpoints=2);

> eroare2:=proc(f,x,h)
> RETURN((D@@2)(f)(x)-de2(h,[f(x-h),f(x),f(x+h)])[1])
> end;

203
Mădălina Roxana Buneci

> map(evalf,[seq(eroare2(f2,3/2,10^(-i)),i=1..5)]);

[ -0.0002076099410 , -0.2102654016 10 -5 , -0.2102918739 10 -7 , -0.2102921386 10 -9 ,


-0.2102921412 10 -11 ]
> [seq(eroare2(f2,1.5,10^(-i)),i=1..5)];

[ -0.0002076042 , -0.17242 10 -5 , 0.22758 10 -5, 0.0050022758 , -0.6649977242 ]


> plot(h->abs(eroare2(f2,1.5,h)), 10^(-4)..1/3);

> plot(h->abs(eroare2(f2,1.5,h)), 10^(-4)..1/3,numpoints=2);

204
Metode Numerice

VII. 2. Extrapolare Richardson

Să presupunem că dorim să calculăm o cantitate L şi că avem



ϕ(h) = L + ∑ a 2k h 2k .
k =1

Atunci ϕ(h) reprezintă o aproximaţie pentru L cu eroare de ordinul O(h2). În cele ce


urmează vom arăta cum să obţinem o aproximaţie pentru care eroarea să fie de de
ordinul O(h2(n+1)), cu n dat. Notăm
 h 
D(n,0) = ϕ  
 2n 
şi definim

4m D ( n, m − 1) − D ( n − 1, m − 1)
D(n,m) = , 1 ≤ m ≤ n.
4m − 1
Se poate arăta utilizând inducţia că
Teorema 7.9 (Extrapolare Richardson). Cu notaţiile de mai sus există
constantele ak,m astfel încât
∞ 2k
 h 
D(n,m) = L + ∑ a k,m  2n  .
k = m +1

Ca o consecinţă a teoremei precedente rezultă că


D(n,m) = L + O(h2(n+1)).
Cu alte cuvinte D(n,n) este o aproximaţie a lui L cu eroare de ordinul O(h2(n+1)).
Pentru calculul recursiv al valorilor D(n,m) se poate folosi tabelul
triunghiular:

D(0,0)
D(1,0) D(1,1)
D(2,0) D(2,1) D(2,2)

D(n,0) D(n,1) D(n,2) D(n,n)

205
Mădălina Roxana Buneci

 h 
Prima coloană a acestui tabel poate fi calculată direct cu definiţia: D(n,0) = ϕ  .
 2n 
În cazul elementelor de pe celelalte coloane se observă că fiecare dintre ele depinde
de elementul din stânga de pe aceeaşi linie şi de pe linia de deasupra din stânga.
Să exemplificăm aplicarea acestui procedeu pentru îmbunătăţirea formulei
de aproximare a derivatei de ordinul 1:
f (x + h) − f (x − h)
f ′(x) ≈ ϕ ( h ) = .
2h
Dacă f este analitică avem:

f(
∞ 2k +1)
ϕ(h) = f ′(x) + ∑ ( x ) h 2k .
k =1 ( 2k + 1) !

Deci putem aplica extrapolare Richardson.Vom aproxima f ′(x) cu D(1,1). Dar

h
4ϕ   − ϕ ( h )
4D (1, 0 ) − D ( 0, 0 ) 2
D(1,1) = = .
3 3
h
4ϕ   − ϕ ( h )
Ca urmare 2 reprezintă o aproximaţie a lui f ′(x) cu eroare de
3
f (x + h) − f (x − h)
ordinul O(h4), unde ϕ ( h ) = .
2h

VII.3. Metode de derivare numerică folosind interpolarea

Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Aproximăm f(k) prin derivata
de ordinul k a polinomului de interpolare asociat lui f şi x0, x1, …, xn.
Să presupunem că n = 4 şi că punctele x0, x1, x2, x3, x4 sunt echidistante şi să
construim polinomul Newton ascendent.

206
Metode Numerice

P4 (x) = P4 (x 0 + th)
∆f (x 0 ) ∆ 2f (x 0 ) ∆3f (x 0 )
= f (x 0 ) + t+ t(t − 1) + t(t − 1)(t − 2) +
1! 2! 3!
∆ 4f (x 0 )
+ t(t − 1)(t − 2)(t − 3)
4!

∆f (x 0 ) ∆ 2f (x 0 ) 2 ∆3f (x 0 ) 3
= f (x 0 ) + t+ (t − t) + (t − 3t 2 + 2t) +
1! 2! 3!
∆ 4f (x 0 ) 4
+ (t − 6t 3 + 11t 2 − 6t)
4!
Notăm g(t) = P4(x0 +th). Avem

g′ (t) = P4′ (x0 +th)h

g′′ (t) = P4′′ (x0 +th)h2.


Pe de altă parte

∆ 2f (x 0 ) ∆3f (x 0 ) 2
g′ ( t ) = ∆f (x 0 ) + (2t − 1) + (3t − 6t + 2) +
2 6
∆ 4f (x 0 ) 3
+ (4t − 18t 2 + 22t − 6)
24

(2t − 1) (3t 2 − 6t + 2)
= ∆f (x 0 ) + ∆ 2f (x 0 ) + ∆3f (x 0 ) +
2 6
(2t 3 − 9t 2 + 11t − 3)
+ ∆ 4f (x 0 )
12
iar

∆ 2f (x 0 ) ∆3f (x 0 )
g′′ ( t ) = 2+ (6t − 6) +
2 6
∆ 4f (x 0 ) 2
+ (6t − 18t + 11)
12

(6t 2 − 18t + 11)


= ∆ 2f (x 0 ) + ∆3f (x 0 ) ( t − 1) + ∆ 4f (x 0 ) .
12
În consecinţă avem:

1 (2t − 1) (3t 2 − 6t + 2)
f ′ (x)= f ′ (x0+ht) ≈ ( ∆f (x 0 ) + ∆ 2f (x 0 ) + ∆3f (x 0 ) +
h 2 6

207
Mădălina Roxana Buneci

(2t 3 − 9t 2 + 11t − 3)
+ ∆ 4f (x 0 ) )
12

1 (6t 2 − 18t + 11)


f ′′ (x) = f ′′ (x0+ht) ≈ 2
( ∆ 2f (x 0 ) + ∆3f (x 0 ) ( t − 1) + ∆ 4f (x 0 ) ).
h 12

208
Metode Numerice

VIII. Integrarea numerică

VIII.1. Formula generală de cuadratură numerică. Formula de


cuadratură Newton-Cotes.

Fie f : [a, b] → R o funcţie continuă. Ne punem problema să calculăm


b
valoarea aproximativă a integralei ∫ f (x)ρ(x)dx , unde ρ : [a, b]→R este o funcţie
a

continuă strict pozitivă numită pondere. Considerăm x0, x1, …, xn n+1 puncte
distincte din intervalul [a, b], şi notăm yi = f(xi) pentru orice i = 0,1,…n.
b
O formulă de cuadratură presupune aproximarea integralei ∫ f (x)ρ(x)dx
a

printr-o combinaţie liniară de valori ale funcţiei f în punctele x0, x1, …, xn, i.e
b
∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn).
a

Fie Ln polinomul Lagrange asociat lui f şi punctelor considerate:


n n
Ln(x) = ∑ f ( x i ) li ( x ) = ∑ yi
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )
.
i =0 i =0 ( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
Înlocuind f prin Ln, obţinem formula de aproximare
b b
∫ f (x)ρ(x)dx ≈ ∫ Ln (x)ρ(x)dx
a a
b b n n b
∫ f (x)ρ(x)dx ≈ ∫ ρ(x)∑ f ( x i ) li ( x )dx = ∑ f ( x i ) ∫ ρ(x)li ( x ) dx
a a i =0 i=0 a

209
Mădălina Roxana Buneci

b b
Deci notăm dacă Ai = ∫ ρ(x)li ( x ) dx , atunci ∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) +
a a

... + Anf(xn).
În cele ce urmează ne propunem să calculăm eroarea cu care
b b
∫ Ln (x)ρ(x)dx aproximeză ∫ f (x)ρ(x)dx . Reprezentând punctele sub forma
a a

a +b b−a
xi = + t i , ti ∈[-1, 1], i ∈{0, 1, ..., n},
2 2
avem
b
∫ Ln (x)ρ(x)dx =
a

b n
ρ ( x ) ∑ f ( xi )
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n ) dx
= ∫a ( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
i=0

n
= ∑ f ( xi )∫ ρ ( x )
b ( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n ) dx
i =0
a ( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
Facem schimbarea de variabilă
a +b b−a
x= + t
2 2
şi obţinem
b
∫ Ln (x)ρ(x)dx =
a
1
b−a n a +b b−a (t − t 0 )  (t − t i −1 )(t − t i +1 )  (t − t n )

2 i =0
f (x i ) ∫ ρ(
2
+
2
t)
(t i − t 0 )  (t i − t i −1 )(t i − t i+1 )  (t i − t n )
dt
−1
Formula
b
∫ f (x)ρ(x)dx ≈
a

1
b−a n a +b b−a (t − t 0 ) (t − t i−1 )(t − t i+1 ) (t − t n )

2 i =0
f (x i ) ∫ ρ(
2
+
2
t)
(t i − t 0 ) (t i − t i−1 )(t i − t i+1 )  (t i − t n )
dt.
−1
se numeşte formula generală de cuadratură.

210
Metode Numerice

Presupunem că f este de clasă Cn+1. Pentru a evalua restul formulei ţinem


seama că eroarea cu care polinomul de interpolare aproximează funcţia este dată de

|f(x) − Ln(x)| ≤
M
(x − x 0 )(x − x1 ) (x − x n ) ,
(n + 1)!
unde M = sup |f(n+1)(x)|
x∈[a,b]

b b b
Rn(f) = ∫ f (x)ρ(x)dx − ∫ ρ(x)L n (x)dx = ∫ (f (x) − L n (x))ρ(x)dx
a a a
b b
|Rn(f)| = | ∫ (f (x) − L n (x))ρ(x)dx | ≤ ∫ | f (x) − Ln (x) | ρ(x)dx
a a

Procedând ca mai înainte obţinem restul formulei generale de cuadratură:


n+2 1
M  b−a   a +b b−a 
|Rn(f)| ≤
(n + 1)!  2  ∫ ρ  2
+ t  (t − t 0 )(t − t1 ) (t − t n )dt ,
2 
−1

unde M = sup |f(n+1)(x)|.


x∈[a,b]

Presupunem că ρ ≡ 1, punctele sunt echidistante şi că x0 = a, xn = b. Deci


b−a
xi = a + i, i = 0, 1, 2, …, n.
n
Aproximând sub integrală funcţia cu polinomul de interpolare Lagrange şi făcând
schimbarea de variabilă
b−a
x=a+ t,
n
obţinem
b n n
(n) (n)  b−a 
∫ f (x)ρ(x)dx ≈ ( b − a ) ∑ Hi f ( xi ) = ( b − a ) ∑ Hi f  a + i n 
a i=0 i =0

unde
n −i
( n ) 1 ( −1) n
t ( t − 1) ... ( t − i + 1)( t − i − 1) ... ( t − n )dt
Hi = ∫
n ( n − i ) !i! 0
n −i
1 ( −1) n t ( t − 1) ... ( t − n )
= ∫
n ( n − i ) !i! 0 t −i
dt

211
Mădălina Roxana Buneci

Numerele H i(n ) se numesc coeficienţii Newton - Cotes


ˆ iar formula se aproximare se

ˆ . Au loc relaţiile
numeşte formula Newton - Cotes
n
(n) (n)
∑ Hi(
n)
= 1 şi Hi = H n −i , i = 0,1,…,n.
i =0

Dacă f este o aplicaţie de clasă Cn+1 are loc următoarea formulă de evaluare a
restului:
b n
(n)  b−a 
∫ f (x)ρ(x)dx − ( b − a ) ∑ Hi f  a + i n  ≤
a i =0

n +2 n
1  b−a 
∫ t(t − 1)(t − 2) (t − n)dt x∈sup
n+1)
|f( (x)|.
( n + 1)!  n  0 [a,b]

De reţinut că există funcţii continue pentru care şirul


 n
(n)  b
 ( b − a ) ∑ Hi f ( x i )  nu converge către ∫a f ( x )dx .
 i =0 n

VIII.2. Formula dreptunghiurilor

Fie f : [a, b] → R o funcţie de clasă C1. Aplicăm formula generală de


a+b
cuadratură pentru ρ≡1, n=0, x0 = (deci t0 = 0). Obţinem
2
b
a+b
∫ f (x)dx ≈ (b-a) f  
2 
a

cu o eroare ≤
( b − a )2 sup f ' ( x ) .
4 x∈[ a,b ]

Considerăm o diviziune (x0, x1, …., xn) a intervalului [a, b] cu puncte


b−a
echidistante (xi = a + i, i = 0, 1, 2, …, n.) şi aplicăm pe fiecare subinterval [xi,
n
xi+1] formula de aproximare

212
Metode Numerice

x  x i + x i+1 
∫xii+1 f ( x )dx ≈ (xi+1-xi) f  2

b x n −1
Ţinând cont că ∫a f ( x )dx = ∑ ∫ i +1 f ( x )dx , obţinem următoarea formulă de
x
i =0 i

cuadratură numită formula dreptunghiurilor:

b
b − a n −1  x i + x i +1 
∫ f (x)dx ≈ ∑ f  2  .
n i =0 
a

Restul (eroarea) este dat de:

b b − a n −1  x i + x i+1 
∫a f ( x ) dx − ∑ f  2  =
n i =0 

n −1 x
b − a n −1  x i + x i+1 
= ∑ ∫x i +1

i
f ( x ) dx − ∑ f  2 
n i=0 
i =0

n −1
 x i +1 b − a  x i + x i +1  
= ∑  ∫x i
f ( x ) dx −
n 
f
2


i =0

n −1 x
b − a  x i + x i+1 
≤∑ ∫x
i +1
f ( x ) dx − f 
i =0 i n  2 
n −1 x
 x + x i +1 
= ∑ ∫x i +1

i
f ( x ) dx − ( x i+1 − x i ) f  i
 2


i =0

≤∑
n −1
( xi+1 − x i )2 sup | f ′(x) |
i =0 4 x∈[x i ,x i +1 ]

n −1
( x i+1 − x i )2
≤ sup | f ′(x) | ∑ 4
x∈[a,b] i =0

n −1
( b − a )2
= sup | f ′(x) | ∑ 4n 2
x∈[a,b] i =0

= sup | f ′(x) |
( b − a )2
x∈[a,b] 4n

213
Mădălina Roxana Buneci

Ca urmare restul (eroarea) în formula dreptunghiurilor este


2
b b − a n −1  x i + x i+1  ( b − a )
∫a f ( x ) dx − ∑ f  2  ≤ 4n
n i =0 
sup f ' ( x )
x∈[ a,b ]

Interpretarea geometrică a formulei dreptunghiurilor


Fie Di dreptunghiul cu o dimensiune dată intervalul [xi, xi+]] şi cu cealaltă
 x + x i+1 
dimensiune dată de f  i 
 2 

 x + x i+1 
f i 
 2 

xi xi+1

Atunci aria dreptunghiului Di este


 x + x i+1  b − a  x i + x i+1 
(xi+1-xi) f  i = f ,
 2  n  2 
b
şi deci formula dreptunghiurilor presupune aproximarea ∫ f (x)dx prin suma ariilor
a

dreptunghiurilor Di, i = 0, 1, …n-1.

Proceduri MAPLE pentru calculul valorii aproximative a unei integrale


definite folosind formula dreptunghiurilor:
Procedura dreptunghiuri1 are drept parametri funcţia care se integrează,
limitele de integrare, şi numărul de subintervale din diviziune. Procedura întoarce
valoarea aproximativă a integralei obţinută aplicând formula dreptunghiurilor.
Procedura dreptunghiuri2 este similară, cu singura deosebire că în locul numărului

214
Metode Numerice

de subintervale se introduce un număr pozitiv eps ce reprezintă eroarea maximă.

> dreptunghiuri1:=proc(f,a,b,n)
> local i,iab,h,h0;
> iab:=0;h:=(b-a)/n;h0:=a+1/2*h;
> for i from 0 to n-1 do
> iab:=iab+evalf(f(h0+i*h))
> od;
> iab:=iab*h;
> RETURN(evalf(iab))
> end;

> dreptunghiuri2:=proc(f,a,b,eps)
> local i,iab,h,h0,n;n:=floor(1/4*(b-a)^2/eps)+1;
> print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0;h0:=a+1/2*h;
> for i from 0 to n-1 do
> iab:=iab+evalf(f(h0+i*h))
> od;
> iab:=iab*h;
> RETURN(evalf(iab))
> end;

Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x → x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> dreptunghiuri1(f,2,3,5);
768.4434052
> dreptunghiuri1(f,2,3,50);
778.2346340
> dreptunghiuri1(f,2,3,500);
778.3329936
> dreptunghiuri2(f,2,3,0.01);
Numar de pasi , 26
777.9666004

215
Mădălina Roxana Buneci

> dreptunghiuri2(f,2,3,0.001);
Numar de pasi , 251
778.3300446
> dreptunghiuri2(f,2,3,0.0001);
Numar de pasi , 2501
778.3339476
> g:=(x->exp(-x^2));
( −x 2 )
g := x → e
> evalf(int(g(x),x=-1..1));
1.493648266

> dreptunghiuri1(g,-1,1,5);
1.503548970
> dreptunghiuri1(g,-1,1,10);
1.496106505
> dreptunghiuri1(g,-1,1,500);
1.493649246
> dreptunghiuri2(g,-1,1,0.01);
Numar de pasi , 101
1.493672307
> dreptunghiuri2(g,-1,1,0.001);
Numar de pasi , 1001
1.493648512
> dreptunghiuri2(g,-1,1,0.0001);
Numar de pasi , 10001
1.493648267
> with(student):

> middlesum(g(x),x=-1..1,5);
2
 4  − − 4/5 + 2 i   
2    
5  
 ∑ e  
5 i = 0 
 
> evalf(middlesum(g(x),x=-1..1,5));
1.503548970
> middlebox(g(x),x=-1..1,5);

216
Metode Numerice

> middlesum(g(x),x=-1..1,10);
2
 9  − − 9/10 + i   
1    
5  

 ∑ e  
5 i = 0 
 
> evalf(middlesum(g(x),x=-1..1,10));
1.496106505
> middlebox(g(x),x=-1..1,10);

Comanda middlesum(g(x), x=a..b,n) din pachetul student întoarce aproximaţia


b
integralei ∫ g(x)dx obţinută prin aplicarea formulei dreptunghiurilor utilizând n
a

subintervale. Comanda middlebox(g(x), x=a..b,n) reprezintă grafic dreptunghiurile


utilizate în formulei dreptunghiurilor.

217
Mădălina Roxana Buneci

VIII.3. Formula trapezelor

Fie f : [a, b] → R o funcţie de clasă C2. Aplicăm formula generală de


cuadratură pentru ρ≡1, n=1, x0 = a, x1 =b (deci t0 = -1 şi t1 =1). Obţinem
b
b−a  (t + 1)  =
1 1
(t − 1)
∫ f (x)dx ≈
2


f (a) ∫
( −1 − 1)
dt + f (b) ∫
(1 + 1)
dt 

a  −1 −1 
 21 21 
= b − a  (t − 1) (t + 1) 
f (a) + f (b)
2  −4 4 
 −1 −1 

b−a
= (f(a) +f(b)).
2
b
b−a
Deci ∫ f (x)dx ≈ (f(a) +f(b)).
2
a

Eroarea este
b 3
b−a 1 ( b − a) 1
| ∫ f (x)dx - (f(a) +f(b)) | ≤ sup f " ( x ) ∫ (t − 1)(t + 1)dt =
2 2! x∈[ a,b] 8
a −1

3 3
1 ( b − a) 1 2 1 ( b − a) 1 2
= sup f " ( x ) ∫ t − 1dt = 2! x∈sup f "( x ) 2 ∫ t − 1dt
2! x∈[ a,b] 8 [ a,b] 8
−1 0

 31
= sup f " ( x )
( b − a )3 1
2
dt = sup f " ( x )
( b − a )3 t1 − t 
x∈[ a,b ] 8 ∫1 − t x∈[ a,b ] 8  0 3 
0  0

= sup f " ( x )
( b − a )3 .
x∈[ a,b ] 12

Deci
b
| ∫ f (x)dx -
b−a
(f(a) +f(b)) | ≤
( b − a )3 sup f " ( x ) .
2 12 x∈[ a,b ]
a

218
Metode Numerice

Considerăm o diviziune (x0, x1, …., xn) a intervalului [a, b] cu puncte


b−a
echidistante (xi = a + i, i = 0, 1, 2, …, n.) şi aplicăm pe fiecare subinterval [xi,
n
xi+1] formula de aproximare
x x i+1 − x i
∫xii+1 f ( x )dx ≈ 2
( f(xi) + f(xi+1))

b x n −1
Ţinând cont că ∫a f ( x )dx = ∑ ∫ i +1 f ( x )dx , obţinem următoarea formulă de
x
i =0 i

cuadratură numită formula trapezelor:

b  f ( a ) + f ( b ) n −1 
b−a
∫ f (x)dx ≈  + ∑ f ( xi )  .
n 2 
a  i=1 
Restul (eroarea) este dat de:

b b − a  f ( a ) + f ( b ) n −1 
∫a f ( x ) dx −  + ∑ f ( xi )  =
n  2 
i=1 

n −1 x
b − a  f ( a ) + f ( b ) n −1 
= ∑ ∫x i +1
f ( x ) dx −
n 

2
+ ∑ f ( xi ) 

i =0 i
i=1 
n −1 x n −1
x −x
∑ ∫x f ( x ) dx − ∑ i +1 i ( f ( x i ) + f ( x i +1 ) )
i +1
=
i =0 i
i =0 2

n −1 x
x −x
∑ ∫x f ( x ) dx − i+1 i ( f ( x i ) + f ( x i+1 ) )
i +1
=
i =0 i 2

n −1 x
x i +1 − x i
≤ ∑ ∫x i +1

i
f ( x ) dx −
2
( f ( x i ) + f ( xi+1 ) )
i =0

≤∑
n −1
( xi+1 − x i )3 sup | f ′′(x) |
i =0 12 x∈[x i ,x i +1 ]

n −1
( x i+1 − x i )3
≤ sup | f ′′(x) | ∑ 12
x∈[a,b] i =0

219
Mădălina Roxana Buneci

n −1
( b − a )3
= sup | f ′′(x) | ∑ 12n 3
x∈[a,b] i =0


( b − a )3 sup f " ( x ) .
12n 2 x∈[ a,b ]

Ca urmare restul (eroarea) în formula trapezelor este

b b − a  f ( a ) + f ( b ) n −1  ( b − a )3
∫a f ( x ) dx − n  + ∑ f ( xi )  ≤ sup f " ( x )
2  12n 2 x∈[ a,b]
 i =1 

Interpretarea geometrică a formulei trapezelor


Fie Ti trapezul dreptunghic cu înălţimea egală cu lungimea intervalului [xi,
xi+]] şi cu bazele f(xi) şi f(xi+1).

f(xi+1)
f(xi)

xi xi+1

Atunci aria trapezului Ti este


x i+1 − x i b−a
( f(xi) + f(xi+1)) = ( f(xi) + f(xi+1)),
2 2n
b
şi deci formula trapezelor arată că ∫a f ( x )dx se poate aproxima prin suma ariilor
trapezelor Ti, i = 0, 1, …n-1.
Proceduri MAPLE pentru calculul valorii aproximative a unei integrale
definite folosind formula trapezelor:
Procedura trapeze1 are drept parametri funcţia care se integrează,
limitele de integrare, şi numărul de subintervale din diviziune. Procedura întoarce

220
Metode Numerice

valoarea aproximativă a integralei obţinută aplicând formula trapezelor. Procedura


trapeze2 este similară, cu singura deosebire că în locul numărului de
subintervale se introduce un număr pozitiv eps ce reprezintă eroarea maximă.

> trapeze1:=proc(f,a,b,n)
> local i,iab,h;
> iab:=0;h:=(b-a)/n;;
> for i from 1 to n-1 do
> iab:=iab+evalf(f(a+i*h))
> od;
> iab:=iab+(f(a)+f(b))/2;iab:=iab*h;
> RETURN(evalf(iab))
> end;

> trapeze2:=proc(f,a,b,eps)
> local i,iab,h,n;n:=floor(abs((b-a)^3/(12*eps))^(1/2))+1;
> print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0;
> for i from 1 to n-1 do
> iab:=iab+evalf(f(a+i*h))
> od;
> iab:=iab+(f(a)+f(b))/2;iab:=iab*h;
> RETURN(evalf(iab))
> end;

Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x → x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> trapeze1(f,2,3,5);
798.1539466
> trapeze1(f,2,3,50);
778.5326999
> trapeze1(f,2,3,500);
778.3359754
> trapeze2(f,2,3,0.01);

221
Mădălina Roxana Buneci

Numar de pasi , 3
833.1348363
> trapeze2(f,2,3,0.001);
Numar de pasi , 10
783.2986759
> trapeze2(f,2,3,0.0001);
Numar de pasi , 29
778.9246586
> g:=(x->exp(-x^2));
( −x 2 )
g := x → e
> evalf(int(g(x),x=0..1));
0.7468241330
> trapeze1(g,0,1,5);
0.7443683397
> trapeze1(g,0,1,50);
0.7467996064
> trapeze1(g,0,1,500);
0.7468238866
> trapeze2(g,0,1,0.01);
Numar de pasi , 3
0.7399864752
> trapeze2(g,0,1,0.001);
Numar de pasi , 10
0.7462107961
> trapeze2(g,0,1,0.0001);
Numar de pasi , 29
0.7467512252
> trapeze2(g,0,1,10^(-8));
Numar de pasi , 2887
0.7468241295
> with(student):
> trapezoid(g(x),x=-1..1,5);
2
 4  − −1 + 2 i   
2 ( -1 ) 2    
5  

+  ∑ e
 
e 
5 5 i=1 
 

222
Metode Numerice

> evalf(trapezoid(g(x),x=-1..1,5));
1.473924388
> trapezoid(g(x),x=-1..1,10);
2
 9  − −1 + i   
1 ( -1 ) 1    
5  

+  ∑ e
 
e 
5 5 i=1 
 
> evalf(trapezoid(g(x),x=-1..1,10));
1.488736679
Comanda trapezoid(g(x), x=a..b,n) din pachetul student întoarce aproximaţia
b
integralei ∫ g(x)dx obţinută prin aplicarea formulei trapezelor utilizând n
a

subintervale.

VIII.4. Formula lui Simpson

Fie f : [a, b] → R o funcţie de clasă C4. Aplicăm formula generală de


a+b
cuadratură pentru ρ≡1, n=2, x0 = a, x1 = , x2 =b (deci t0 = -1 şi t1 = 0, t2 =1).
2
Obţinem
b−a
b
∫a f ( x )dx ≈ 6
( )
(f(a) +4 f a +2b + f(b))

Considerăm o diviziune (x0, x1, …., x2n) a intervalului [a, b] cu puncte


b−a
echidistante (xi = a + i, i = 0, 1, 2, …, 2n.) şi aplicăm pe fiecare subinterval
2n
[xi, xi+2] cu i par formula de aproximare
x x i+ 2 − x i
∫xii+2 f ( x )dx ≈ 6
( f(xi) +4f(xi+1) + f(xi+2))

b 2n −2 x
Ţinând cont că ∫a f ( x )dx = ∑ ∫x i+2 f ( x )dx , obţinem următoarea formulă de
i=0 i
i par

cuadratură numită formula lui Simpson:

223
Mădălina Roxana Buneci

b b−a  n −1 n −1 
∫a f ( x )dx ≈  ( ) ( ) ∑ ( 2i ) ∑ f ( x 2i−1 )  .
f a + f b + 2 f x + 4
6n  i =1 i =1 
Se poate arăta că restul (eroarea) este dat de:

b b−a  n −1 n −1 
∫a f ( x ) dx − 
6n 
f ( a ) + f ( b ) + 2 ∑ f ( x 2i ) + 4 ∑ f ( x 2i −1 ) 


i=1 i=1 

( b − a )5 sup f ( ) ( x ) .
4
4
2880n x∈[ a,b]

VIII.5. Algoritmul lui Romberg

Fie f : [a, b] → R o funcţie de clasă C2. Considerăm o diviziune (x0, x1, ….,
b−a
x 2n ) a intervalului [a, b] cu puncte echidistante (xi = a + i, i = 0.. 2n).
n
2
Aplicând formula trapezelor:

b  n 
b − a  f ( a ) + f ( b ) 2 −1 
∫ f (x)dx ≈ 2n  + ∑ f ( xi ) .
2 i=1

a  

 n 
b − a  f ( a ) + f ( b ) 2 −1 
Dacă notăm ϕ(n) = + ∑ f ( x i ) , atunci eroarea cu care ϕ(n)
2n  2 i=1

 
b
aproximează ∫a f ( x )dx este dată de
b (b − a)
∫a f ( x ) dx − ϕ ( n ) ≤ h 2n sup f " ( x )
12 x∈[ a,b ]

b−a
unde hn = . Deci eroarea este de ordinul O( h 2n ). Se poate arăta că
n
2

224
Metode Numerice

b
ϕ(n) = ∫ f (x)dx + a2 h 2n + a4 h 4n + a6 h 6n + a8 h 8n +....
a

unde pentru orice i ai depinde doar de f(i). Pe de altă parte


b
2
ϕ(n+1) = ∫ f (x)dx + a2 hn+1 + a4 h 4n +1 + a6 h 6n +1 + a8 h 8n +1 +....
a

b
1 1 1 1
= ∫ f (x)dx + a2 h 2n + a4 h 4n + a6 h 6n + a8 h 8n +....
4 16 64 256
a

şi ca urmare
b
4ϕ ( n + 1) − ϕ ( n ) 1 5 21
= ∫ f (x)dx - a4 h 4n - a6 h 6n - a8 h 8n +....
3 4 16 64
a

În cazul acestei formule de aproximare eroarea de trunchiere este de ordinul O( h 4n ).


Ca şi în cazul extrapolării Richardson formula poate fi înbunătăţită succesiv. Pentru
aceasta notăm
I (n,0) = ϕ(n)
şi definim

4m I ( n, m − 1) − I ( n − 1, m − 1)
I(n,m) = , 1 ≤ m ≤ n.
4m − 1
Pentru calculul recursiv al valorilor I(n,m) se poate folosi tabelul
triunghiular:

I(0,0)
I(1,0) I(1,1)
I(2,0) I(2,1) I(2,2)

I(n,0) I(n,1) I(n,2) I(n,n)

Prima coloană a acestui tabel poate fi calculată direct cu definiţia: I(n,0) =ϕ(n). În
cazul elementelor de pe celelalte coloane se observă că fiecare dintre ele depinde de
elementul din stânga de pe aceeaşi linie şi de pe linia de deasupra din stânga.

225
Mădălina Roxana Buneci

b−a
În situaţia în care h0 = b-a >1, alegem k astfel încât să fie suficient de
2k
mic (de exemplu mai mic decât 1) şi facem calculul recursiv al valorilor I(k+l,m)
folosind tabelul triunghiular:

I(k,0)
I(k+1,0) I(k+1,1)
I(k+2,0) I(k+2,1) I(k+2,2)

I(k+n,0) I(k+n,1) I(k+n,2) I(k+n,n)

b
În final se ţine seama că I(k+n+j,n) este o aproximaţie bună a ∫ f (x)dx când j → ∞.
a

De obicei n este mic (n = 2 sau n = 3).


Încheiem acestă sectiune prezentând o modalitate mai eficientă de calcul a
lui I(n,0) = ϕ(n). Se observă că

 n +1 
b − a  f ( a ) + f ( b ) 2 −1
I(n+1,0) = ϕ(n+1) = + ∑ f ( a + ih n +1 ) 
2n +1  2 i=1

 

 n 
1 b − a  f ( a ) + f ( b ) 2 −1 
= + ∑ f ( a + (2i − 1)h n +1 ) + f ( a + (2i)h n +1 )
2 2n  2 i =1

 

 n 2n −1 
1 b − a  f ( a ) + f ( b ) 2 −1
= + ∑ f ( a + ih n ) + ∑ f ( a + (2i − 1)h n +1 ) 
2 2n  2 i=1 i =1

 

2 −1 n
1
= I(n,0) + hn+1 ∑ f ( a + (2i − 1)h n +1 ) .
2 i =1

Astfel utilizând această formulă recursivă calculul lui I(n+1,0) necesită doar 2n – 1
evaluri ale lui f în loc de 2n+1 + 1 câte ar necesita dacă s-ar aplica definiţia.

226
Metode Numerice

VIII.6. Cuadratura Gauss

Fie f : [a, b] → R o funcţie continuă şi ρ : [a, b]→R o pondere. Presupunem


că nodurilor x0, x1, …, xn∈[a, b] sunt date. Formula generală de cuadratură pentru
b
calcului lui ∫ f (x)ρ(x)dx dă integrala polinomului de interpolare asociat nodurilor
a

x0, x1, …, xn şi valorilor f(x0), f(x1), ..., f(xn):


b b n n b n
∫ f (x)ρ(x)dx ≈ ∫ ρ(x)∑ f ( xi ) li ( x )dx = ∑ f ( x i ) ∫ ρ(x)li ( x ) dx = ∑ Ai f ( x i )
a a i =0 i =0 a i =0

b
unde Ai = ∫ ρ(x)li ( x ) dx pentru orice i. Dacă nu se impune nici o condiţie asupra
a

nodurilor x0, x1, …, xn formula de cuadratură


b
∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn)
a

este exactă pentru orice polinom de grad ≤ n.


Există însă posibilitatea alegerii a n+1 noduri astfel încât formula de
cuadratură să fie exactă pentru orice polinoam de grad ≤ 2n+1. Gauss a arătat că
cele n+1 noduri trebuie să fie rădăcile unui polinom q de grad n+1 cu proprietatea

b
k
∫ q(x)x ρ(x)dx = 0 pentru orice 0 ≤ k ≤n.
a

Să presupunem că polinomul q are proprietatea de mai sus şi să arătăm că


formula de cuadratură pentru care nodurile sunt rădăcinile lui q este exactă pentru
orice polinom f de grad ≤ 2n+1. Efectuând împărţirea lui f la q rezultă că există
polinoamele p şi r de grade ≤ n astfel încât
f(x) = p(x)q(x) + r(x).
Pentru orice i fie
b
Ai = ∫ ρ(x)li ( x ) dx
a

227
Mădălina Roxana Buneci

b( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )


=∫ ρ ( x ) dx
a ( x − x ) ( x − x ) .... ( x − x )( x − x
i 0 i 1 i i−1 i i +1 ) ... ( x i − x n )

Formula generală de cuadratură fiind exactă pentru orice polinom de grad ≤ n avem
b b
∫ f (x)ρ(x)dx = ∫ ( p ( x ) q ( x ) + r ( x ) ) ρ(x)dx
a a
b b
= ∫ p ( x ) q ( x ) ρ(x)dx + ∫ r ( x ) ρ(x)dx
a a
b
= ∫ r ( x ) ρ(x)dx
a

n
= ∑ Ai r ( x i )
i =0

Pe de altă parte avem


n n n
∑ Ai f ( x i ) = ∑ Ai ( p ( x i ) q ( x i ) + r ( x i ) ) = ∑ Ai r ( x i ) .
i =0 i =0 i =0

deoarece xi este rădăcină a lui q pentru orice i. În consecinţă,


b n
∫ f (x)ρ(x)dx = ∑ Ai f ( x i ) .
a i =0

Teorema 8. (cuadratura Gauss) Fie ρ : [a, b]→R o pondere. Fie {xi}i cele
b
n+1 noduri ale polinomului qn+1 de grad n+1 cu prorietatea că ∫ q n +1 (x)x k ρ(x)dx =
a

0 pentru orice 0 ≤ k ≤n. Pentru orice i fie


b
Ai = ∫ ρ(x)li ( x ) dx
a

b
= ∫ ρ(x)
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )
dx .
a ( xi − x 0 ) ( x i − x1 ) .... ( x i − xi−1 )( x i − x i+1 ) ... ( x i − x n )
Atunci formula de cuadratură

228
Metode Numerice

b
∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn)
a

este exactă pentru orice polinom de grad ≤ 2n+1.


Restul (eroarea) este dat de

f(
b 2n + 2 )
n (ξ) b 2
∫ f (x)ρ(x)dx − ∑ Ai f ( x i ) ≤ q ( x )ρ ( x ) dx
( 2n + 2 )! ∫a n +1
a i=0

pentru un anumit ξ ∈(a, b).

Particularizăm în continuare ponderea ρ


1. Dacă ρ(x) = 1 pe intevalul [a,b], atunci polinomele qn care satisfac
condiţiile din teorema precedentă sunt polinoamele Legendre Ln.
Expresia acestor polinoame este dată de

n! d n 
x − a ) ( x − b ) 
n n
Ln(x) =  (
( 2n )! dx 
n 

Restul (eroarea) formulei de cuadratură în situaţia în care se folosesc

( n!)4 ( b − a )2n +1 f ( 2n ) ( ξ )
ca noduri rădăcinile lui Ln este dat de .
3
( 2n ) ! ( 2n + 1)

1
2. Dacă ρ(x) = pe intervalul (-1,1), atunci polinomele qn care
1 − x2
satisfac condiţiile din teorema precedentă sunt polinoamele Cebîşev
de speţa I Tn. Polinoamele Cebîşev de prima speţă pot fi definite
recursiv prin : T0(x) = 1, T1(x) = x, Tn+2(x) = 2xTn+1(x) – Tn(x), n ≥ 0,
sau pot fi definite prin Tn(x) = cos(n arccos(x)). Rădăcinile
polinomului Cebîşev de grad n+1 sunt:
 2i + 1 
xi = cos  π  , 0 ≤ i ≤ n.
 2n + 2 
π
În acest caz Ai = pentru orice i = 0,..., n.
n +1

229
Mădălina Roxana Buneci

3. Dacă ρ(x) = 1 − x 2 pe intervalul [-1, 1], atunci polinomele qn care


satisfac condiţiile din teorema precedentă sunt polinoamele Cebîşev
de speţa a II-a Un. Polinoamele Cebîşev de prima speţă pot fi definite
recursiv prin : U0(x) = 1, U1(x) = 2x, Un+2(x) = 2xUn+1(x) – Un(x), n
sin ( ( n + 1) arccos x )
≥ 0, sau pot fi definite prin Un(x) = . Rădăcinile
sin ( arccos x )

polinomului Cebîşev Un+1 de grad n+1 sunt:


 i +1 
xi = cos  π  , 0 ≤ i ≤ n.
n+2 
π  i +1 
În acest caz Ai = sin 2  π  pentru orice i = 0,..., n.
n+2 n+2 
4. Dacă ρ(x) =(1-x)α(1+x)β (α, β> -1) pe intervalul (-1,1), atunci
polinomele qn care satisfac condiţiile din teorema precedentă sunt
polinoamele Jacobi.

Intervalul [a, b] poate fi transformat în intervalul [-1, 1] cu ajutorul


b−a b+a
schimbării de variabilă t = x- .
2 2

VIII.7. Formule pentru calculul aproximativ al unei integrale


duble
Fie ϕ1, ϕ2 : [a, b] → R două funcţii de clsă C1 şi fie
D = {(x,y) ∈ R2 | a≤x≤b, ϕ1(x) ≤ y ≤ ϕ2(x) }.
Atunci D este un domeniu simplu. Considerăm o funcţie continuă f : D → R. Ne

punem problema aproximării integralei ∫∫ f ( x, y ) dxdy . D fiind un domeniu simplu


D

putem trece la integrale iterate:

b  ϕ (x)  b
∫∫ f ( x, y ) dxdy = ∫a  ∫ϕ12( x ) f ( x, y )dy dx = ∫a F ( x ) dx
D

230
Metode Numerice

ϕ (x)
unde F(x) = ∫ϕ12( x ) f ( x, y )dy . Considerăm o reţea de noduri (xi, yj), i = 0, 1, …, n şi
b
j = 0, 1, …, m. Aplicând integralei ∫a F ( x ) dx o formulă de cuadratură se obţine:
n
∫∫ f ( x, y ) dxdy ≈ ∑ Ai F ( x i )
D i =0

unde
ϕ (x )
F(xi) = ∫ϕ 2( x i) f ( x i , y )dy .
1 i

Aplicând şi acestei ultime integrale o formulă de cuadratură:


m
i
F(xi) ≈ ∑ Bijf x i , y j ( )
j=0

rezultă formula de aproximare


n mi
∫∫ f ( x, y ) dxdy ≈ ∑ ∑ Ai Bijf ( x i , y j ) .
D i =0 j=0

Să considerăm cazul în care D este un dreptunghi:


D = {(x,y) ∈ R2 | a≤x≤b, c ≤ y ≤ d }.
şi reţeaua este formată din punctele
b−a
xi = a + ih, i = 0, 1, …, n, h =
n
d−c
yi = c + jk, j = 0, 1, …, m, k =
m

Y
d
yi+1
yi

c
a xi xi+1 b X

231
Mădălina Roxana Buneci

Vom obţine valoarea aproximativă a integralei funcţiei f pe dreptunghiul de


vârfuri (xi, yi), (xi, yi+1) , (xi+1, yi) şi (xi+1, yi+1) prin aplicarea repetată a formulei
trapezelor:

x
i +1  y  x k
Iij = ∫ ∫
 yj
j+1
 x
(( )) (
f ( x, y ) dy  dx ≈ ∫ i+1  f x, y j + f x, y j+1 ) dx
x   i 2
i

k x x 
( )
=  ∫ i +1 f x, y j dx + ∫ i+1 f x, y j+1 dx 
2  xi x
( )
i 
kh

22
(( ) ( ) (
f x,i y j + f x,i+1 y j + f x i , y j+1 + f x i +1, y j+1 ) ( ))
Astfel valoarea aproximativă a integralei

∫∫ f ( x, y ) dxdy =
D

n −1m −1 n −1m −1
=∑ ∑ Iij ≈ ∑
kh
∑ (( ) ( ) (
f x,i y j + f x,i +1 y j + f x i , y j+1 + f x i+1, y j+1 . ) ( ))
i =0 j=0 i =0 j=0 4

Presupunem că
b−a
xi = a + ih, i = 0, 1, …, 2n, h =
2n
d−c
yi = c + jk, j = 0, 1, …, 2m, k =
2m
Dacă pentru calculul integralei Iij cu i şi j pare se aplică formula Simpson repetată se
obţine
x
i+2  y 
j+ 2
Iij = ∫  ∫y j f ( x, y ) dy  dx

x  
i

k 
x
(( ) (
≈ ∫ i+ 2  f x, y j + 4f x, y j+1 + f x, y j+ 2 dx
x
i 6 
) ( ))
k x x x 
( ) ( )
=  ∫ i + 2 f x, y j dx + 4 ∫ i + 2 f x, y j+1 dx + ∫ i + 2 f x, y j+ 2 dx 
3  xi x x
( )
i i 

232
Metode Numerice

hk

9
( ) ( ) ( ) (
(f x i , y j + f x i + 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + )
+ 4 ( f ( x i +1, y j ) + f ( x i +1y j+1 ) + f ( x i+ 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) +

+ 16f ( x i+1, y j+1 ))

Notăm
hk
Fij =
9
( ) ( ) ( ) (
(f x i , y j + f x i+ 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + )
+ 4 ( f ( x i +1, y j ) + f ( x i+1y j+1 ) + f ( x i + 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) +

+ 16f ( x i +1, y j+1 ))

Atunci
n −1m −1 n −1m −1
∫∫ f ( x, y ) dxdy = ∑ ∑ I2i,2 j ≈ ∑ ∑ F2i,2 j
D i =0 j=0 i =0 j=0

Procedura dtrapeze are drept parametri funcţia care se integrează, limitele


de integrare, şi numerele n şi m care determină punctele din reţea. Procedura
returnează valoarea aproximativă a integralei duble obţinută prin aplicarea repetată
a formulei trapezelor.

> dtrapeze := proc(f, a, b, c, d, n, m)


> local i, j, iabcd, h, k;
> iabcd := 0;
> h := (b - a)/n;
> k := (d - c)/m;
> for i from 0 to n - 1 do for j from 0 to m - 1 do iabcd :=
> iabcd + f(a + i*h, c + j*k)+ f(a + i*h, c + (j + 1)*k)
+ f(a + (i + 1)*h, c + j*k) + f(a + (i + 1)*h, c + (j + 1)*k)
> od
> od;
> iabcd := 1/4*iabcd*h*k;
> RETURN(evalf(iabcd))
> end;
Exemple
> f:=((x,y)->x^7*ln(x+y)+x*y*cos(x));

233
Mădălina Roxana Buneci

f := ( x, y ) → x 7 ln( x + y ) + x y cos( x )
> evalf(int(int(f(x,y),y=1..3),x=2..3));
2418.125737
> evalf(dtrapeze(f,2,3,1,3,5,10));
2470.913760
> dtrapeze(f,2.,3.,1.,3.,5,10);
2470.913767

234
Metode Numerice

Anexa : Iniţiere în Maple

A.1 Structura internă. Categorii de comenzi MAPLE.

MAPLE este un mediu de programare pentru calcule numerice şi simbolice.


Calculul simbolic este calculul cu variabile şi constante care respectă regulile
algebrice, ale analizei şi ale altor ramuri ale matematicii. MAPLE-ul permite
manipularea formulelor care utilizează simboluri, necunoscute şi operaţii formale,
în comparaţie cu limbajele de programare tradiţionale care utilizează doar date
numerice, caractere şi şiruri de caractere. Se încadrează în aceeaşi clasă de produse
software ca şi Mathematica, MathCAD, MATLAB şi TKSolver.
MAPLE are trei componente de bază: nucleul (kernel), biblioteca standard
(library) şi interfaţă cu utilizatorul (interface). Nucleul este scris în C şi realizează
cea mai mare parte a calculelor făcute de sistem. Biblioteca standard este automat
încărcată în memorie la deschidere unei sesiuni MAPLE. În afara acestei biblioteci
există o bibliotecă extinsă cu rutine destinate rezolvării unor probleme mai
complicate, ca de exemplu, rezolvarea sistemelor de ecuaţii, probleme de statistică
sau algebră liniară. Această bibliotecă nu este încărcată automat în memorie, ci
trebuie accesată, atunci când este necesar. Interfaţa cu utilizatorul este scrisă în C.
Interfaţa pentru sistemul de operare Windows este bazată pe ferestre. O foaie
(formular) de programare MAPLE (fişier MAPLE, fişier cu extensia .mws)
existentă poate fi încărcată selectând Open din meniul File, iar o foaie nouă de
programare MAPLE poate fi creată selectând New din meniul File. Salvarea foii de
programare MAPLE se realizează selectând Save sau Save as (pentru salvarea sub
un alt nume) din meniul File. Foia de programare se poate salva sub forma unui
fişier text sau latex dacă se selectează Export as din meniu File. Încheierea
sesiunii MAPLE se face selectând Exit din meniul File, sau prin clic pe butonul de
închidere X.

235
Mădălina Roxana Buneci

Foile de programare MAPLE constau în cinci tipuri de zone: text, input


(intrare), ouput (ieşire), 2D graphics (grafică 2D), 3D graphics (grafică 3D), şi
animation (animaţie). În zona text se introduce textul necesar documentării. Zona
input este zona în care se introduc comenzile MAPLE şi este recunoscută după
promptul > prezent în marginea din stânga. Întinderea zonei input sau a zonei text
este arătată printr-o bară verticală în partea stângă. Comutarea între cele două zone
se poate face cu ajutorul tastei funcţionale F5 sau din bara de meniu. Zona output
este generată automat la furnizarea răspunsului. Colecţia de butoane şi informaţia
afişată în bara de context (sub bara de instrumente) depind de conţinutul curent
definit tipul de zonă în care se găseşte cursorul. Informaţia despre foia de
programare curentă este afişată în bara de stare, în partea de jos a ecranului.
MAPLE este un mediu interpretat. Explicăm în continuare ce înseamnă
aceasta. Pentru ca un program (indiferent de limbajul în care este scris) să poată fi
executat de calculator este necesar să fi tradus în limbaj maşină. Există trei
modalităţi principale pentru a obţine această traducere: interpretarea, asamblarea
şi compilarea. Programele asamblate şi cele compilate sunt traduse în limbaj
maşină înainte ca să fie utilizate. Interpretarea este un tip special de traducere, în
care programul este tradus în instrucţiuni în limbaj maşină “din mers”, adică în
timpul execuţiei sale. Mai precis, programul care trebuie interpretat (să-l numim P)
este preluat de un program de interpretare (interpretorul I). Când se utilizează
programul P, calculatorul rulează de fapt interpretorul I, iar interpretorul I execută
paşii programului P. Interpretorul verifică textul programului P şi îndeplineşte
instrucţiunile acestuia pas cu pas. Interpretarea este flexibilă deoarece un program
interpretat poate fi adaptat, schimbat sau revizuit din mers. Sigur, interpretarea are
şi dezavantaje asupra cărora nu insistăm aici (de exemplu, programele interpretate
nu pot fi executate dacă nu există şi un interpretor corespunzător).
Fiind un mediu interpretat MAPLE permite realizare de rutine interactive.
Apariţia promptului > în fereastra MAPLE semnifică faptul că se poate introduce o
comandă. Fiecare comandă (cu excepţia comenzii ?) trebuie încheiată cu punct şi
virgulă (;) sau două puncte (:). Omiterea acestora generează o eroare de sintaxă.
Rectificarea se face tipărind ; sau : pe o linie nouă. Fiecare comanda este executată

236
Metode Numerice

după apăsarea tastei ENTER. Dacă s-a utilizat : pentru încheierea comenzii,
comanda este executată fără a se afişa rezultatele, iar în cazul utilizării ; se afişează
şi rezultatele.
MAPLE dispune de peste 2000 de funcţii predefinite şi comenzi. Fiecare
comandă este introdusă, în zona input, în felul următor:
> nume_comanda(param1,param2,...);
Numele comenzilor a fost ales astfel încât pe de o parte să fie apropiat de
funcţionalitatea comenzii şi pe de altă parte să fie cât mai scurt posibil. MAPLE
este un mediu “case-sensitive” (se face distincţie între literele mari şi literele mici).
Cele mai multe comenzi încep cu literă mică şi au în corespondenţă o aceeaşi
comandă care începe cu literă mare. Aceasta din urmă poartă denumirea de
comandă inertă şi rolul ei este doar de afişare matematică a unei expresii. Cele mai
multe comenzi MAPLE necesită o listă de parametri la intrare. Această listă poate
conţine de exemplu, numere, expresii, mulţimi, etc., sau poate să nu conţină nici un
parametru. Indiferent de numărul de parametri specificaţi, ei trebuie incluşi între
paranteze rotunde (). Toate comenzile au număr minim de parametri de tip precizat,
de cele mai multe ori într-o ordine precizată. Multe comenzi pot fi utilizate cu un
număr de parametri mai mare strict decât acest număr minim de parametri. Aceşti
“extra” parametri reprezintă de obicei opţiuni de control al funcţionării comenzii
respective. Comenzile MAPLE pot fi folosite ca parametri. Acestea sunt evaluate şi
rezultatele lor sunt inserate în lista de parametri.
Comenzile MAPLE se pot clasifica în trei categorii:
1. Comenzi care se încarcă automat la deschiderea unei sesiuni
MAPLE. Acestea pot fi apelate direct aşa cum s-a precizat mai sus.
2. Comenzi din biblioteca extinsă. Înainte de a le folosi acestea trebuie
mai întâi încărcate în memorie cu ajutorul comenzii readlib sub forma
> readlib(nume_comanda);
3. Comenzi care aparţin unor pachete specializate. Există două
modalităţi de utilizare a acestor comenzi:
• prin specificarea pachetului sub forma:
> nume_pachet[nume_comanda](param1,param2,...);

237
Mădălina Roxana Buneci

• cu ajutorul comenzii with. Un apel de forma


> with(nume_pachet);
are ca urmare încărcarea în memorie şi afişarea în zona ouput a tuturor comenzilor
din pachet. Până la încheierea sesiunii MAPLE acestea pot fi utilizate ca şi cele din
prima categorie.
Din cele de mai sus rezultă că nu este întotdeauna suficient să se cunoască
numele unei comenzii. Uneori ea trebuie încărcată din bibliotecă sau dintr-un
pachet. Dacă nu s-a făcut acest lucru şi s-a introdus comanda, MAPLE nu generează
un mesaj de eroare, ci afişează în zona output, comanda introdusă în zona input. În
acest caz trebuie verificat dacă este scrisă corect comanda (inclusiv dacă literele
mari şi mici se potrivesc), sau trebuie încărcată în memorie. Informaţii asupra
modului corect de introducere a unei comenzi se pot obţine cu ajutorul comenzii
help. Există mai mute modalităţi de utilizare a acestei comenzi. Este recomandabilă,
următoarea formă:
> ? nume_comanda
O comandă de forma:
>?
afişează informaţii generale despre structura help-ului.
Altă variantă presupune un apel de forma
> help(`nume_comanda`);
De remarcat faptul că numele comenzii este inclus între apostrofuri întoarse
(backquotes).

A.2. Operatori, constante şi funcţii predefinite în MAPLE.


Expresii.

O expresie este o combinaţie validă de operatori şi variabile, constante, şi


apeluri de funcţii.

Operaţie Operator Exemple


Adunare + x+y

238
Metode Numerice

Scădere - x-y
Opus - -x
Înmulţire * x*y
Împărţire / x/y
Ridicare la putere (xy) ** sau ^ x**y sau x^y
Tabelul precedent conţine operatorii aritmetici de bază din MAPLE.
Precedenţa operatorilor este aceeaşi ca în majoritatea limbajelor de programare. Mai
întâi sunt evaluate expresiile din paranteze. În lista următoare prioritatea cade de sus
în jos:
1. – (operator unar)
2. **, ^
3. *, /
4. +, -(scădere)
De remarcat faptul că exponenţierea succesivă nu e validă. Astfel MAPLE nu poate
evalua x^y^z. O expresie de acest fel trebuie introdusă sub forma x^(y^z). Ori de
câte ori există ambiguităţi trebuie utilizate ( ).
Următorul tabel prezintă funcţiile de bază din MAPLE ce pot interveni în
expresiile aritmetice.
Notaţie MAPLE Semnificaţie
abs(x) |x| (modulul)
iquo(x,y) partea întreagă a împărţirii x/y
irem(x,y) restul împărţirii lui x la y
trunc(x) cel mai mare număr întreg ≤ x,
dacă x ≥ 0, sau cel mai mic
număr întreg ≥ x, dacă x < 0
frac(x) x-trunc(x)
round(x) rotunjeşte pe x la cel mai
apropiat întreg
floor(x) cel mai mare număr întreg ≤ x
ceil(x) cel mai mic număr întreg ≥ x

239
Mădălina Roxana Buneci

sqrt(x) sau x^(1/2) x


exp(x) ex
ln(x) sau log(x) lnx (logaritm natural)
sin(x) sinx
cos(x) cosx
tan(x) tgx

Facem câteva remarci asupra funcţiilor irem şi iqou (deoarece nu respectă


întocmai teorema împărţirii cu rest). Astfel dacă m şi n sunt două numere întregi, n
este nenul şi r este numărul întreg returnat de irem, atunci este satisfăcută relaţia:
m = n*q + r, abs(r) < abs(n) şi m*r ≥ 0.
Dacă m şi n nu sunt amândouă numere întregi, atunci irem rămâne neevaluată.
Ambele funcţii pot fi utilizate şi cu câte trei parametri. Dacă al treilea parametru
este prezent în funcţia irem, atunci lui i se asignează câtul, iar în cazul funcţiei iquo
i se asignează restul împărţirii.
Exemple:
> irem(29,4,'q');
1
> q;
7
> iquo(29,4,'r');
7
> r;
1
> irem(-29,4);
-1
> irem(29,-4);
1
> irem(-29,-4);
-1
> iquo(-29,4);
-7
> iquo(29,-4);

240
Metode Numerice

-7
> iquo(-29,-4);
7
Funcţiile rem şi quo se aplică polinoamelor şi reprezintă analoagele
funcţiilor irem şi iquo. Acestea cer obligatoriu al treilea parametru ce indică
nedeterminata în raport cu care se consideră polinomul. Opţional admit al patrulea
parametru, cu acelaşi rol ca parametru 3 din funcţiile irem şi iquo. Asfel dacă a şi b
sunt două polinoame, b este nenul, r restul returnat de rem şi q este câtul returnat de
quo, atunci este satisfăcută relaţia:
a = b*q + r, grad(r) < grad(n)
Exemple:
> rem(x^5+2*x+1, x^2+x+1, x, 'q');
x
> q;

x3 − x2 + 1
> quo(x^5+2*x+1, x^2+x+1, x);

x3 − x2 + 1
> quo(x^5+2*y+z, x^2+x+1, x,'r');

x3 − x2 + 1
> r;
2y+z−1−x
Funcţia factorial(k) calculează k! (k factorial, 12…k). Acelaşi efect în are şi k!,
după cum rezultă din exemplele de mai jos:
> factorial(4);
24
> 4!;
24
> 6!;
720
> factorial(factorial(3))=3!!;
720 = 720
Tabelul de mai jos conţine câteva constante MAPLE:
Constantă Notaţia matematică

241
Mădălina Roxana Buneci

Pi π
infinity ∞
gamma constanta lui Euler
true adevăr, în cazul evaluării booleene
false fals, în cazul evaluării booleene

Numărul complex i (i2 = -1) este desemnat în MAPLE prin I.


De reţinut că pi (scris cu literă mică) se referă la litera grecească π.
Tipul booleean în MAPLE are două valori: true şi false. Expresiile booleene
(logice) pot fi formate cu ajutorul operatorilor de comparaţie şi operatorilor logici.
Următoarele două tabele conţin aceşti operatori.

Operator Simbol Exemple


egal = x=y
diferit <> x<>y
mai mare > x>y
mai mare egal >= x>=y
mai mic < x<y
mai mic egal <= x<=y

Operator Simbol Exemple


Negaţie (non) – unar not not x
Conjuncţie (şi) and x and y
disjuncţie (sau) or x or y

Ordinea de efectuare a operaţiilor este: not, and, or.


În MAPLE există expresii similare cu expresiile din C formate cu operatorul
virgulă. Astfel o secvenţă de expresii în MAPLE este un şir de expresii separate
între ele prin virgulă. Cele mai multe funcţii din MAPLE cer la intrare o secvenţă de
expresii, şi întorc un rezultat ce conţine o secvenţă de instrucţiuni. Cel mai simplu
mod de a crea o secvenţă de instrucţiuni este:
> 1,2,3,4,5;

242
Metode Numerice

1, 2 , 3, 4 , 5
> a=1,b=a+2,c+2;
a = 1, b = a + 2 , c + 2
Alternativ, există alte două moduri de a crea secvenţe de instrucţiuni în
MAPLE: cu ajutorul operatorului $ sau cu ajutorul comenzii seq. Următoarele
exemple sunt edificatoare:
> a$5;
a, a , a, a , a
> $2..7;
2, 3 , 4, 5, 6 , 7
> i^2$i=1..4;
1, 4, 9, 16
> seq(i!,i=1..4);
1, 2, 6, 24
> seq(i!!,i=1..4);
1, 2, 720, 620448401733239439360000

Secvenţă vidă este desemnată prin NULL.

A.3. Numere, şiruri şi identificatori.

Constantele numerice din MAPLE sunt de trei tipuri:


• întregi
• raţionale
• în virgulă mobilă
Constantele întregi sunt şiruri de cifre zecimale (0..9) eventual
precedate de un semn (+,-) reprezentând un număr întreg. Numărul maxim de cifre
permise este dependent de sistem, dar în general este mai mare de 500 000. Nu
poate fi aflat cu ajutorul comenzii kernelopts(maxdigits).
Exemple de constante întregi:
> 0;
0

243
Mădălina Roxana Buneci

> 123;
123
> -6789;
-6789
> 123456789123456789012;
123456789123456789012
Constantele raţionale utilizează operatorul de împărţire / pentru a separa
numărătorul de numitor. Astfel m/n cu m şi n constante întregi reprezintă numărul
m
raţional .
n

Exemple de constante raţionale:


> 2/3;
2
3
> 6/7;
6
7
> 4/6;
2
3
> 4/2;
2
> -39/13;
-3
Se observă că MAPLE face automat simplificarea fracţiilor.
Reprezentarea unei constante în virgulă mobilă conţine în general
câmpurile următoare:
• partea întreagă
• punctul zecimal
• partea fracţionară
e sau E şi un exponent cu semn (opţional);

244
Metode Numerice

Se poate omite partea întreagă sau partea fracţionară, dar nu amândouă. De


asemenea, se poate omite punctul zecimal sau litera e(E) şi exponentul, dar nu
amândouă.
Exemple de constante în virgulă mobilă:
> 2.3;
2.3
> 678.96e-9;

0.67896 10 -6
> .1234;
0.1234
> 123E56;

0.123 10 59
> 1.;
1.

Constante în virgulă mobilă pot fi obţinute şi cu comanda Float. Această


comandă are forma
Float(mantisa,exponent);
şi întoarce mantisa*10 ^exponent.
> Float(123,56);

0.123 10 59

Expresiile aritmetice cu operanzi constante întregi sau raţionale sunt evaluate exact
în MAPLE (rezultatul este o constantă raţională sau o constantă întreagă).
Exemple:
> 1/3+4/5;
17
15
> 1/3+8;
25
3
> 1/3+2/3;
1

245
Mădălina Roxana Buneci

În cazul în care expresia conţine constante în virgulă mobilă, atunci


constantele întregi şi cele raţionale (care apar eventual în expresie) sunt convertite
în virgulă mobilă (sunt aproximate cu constante în virgulă mobilă). Rezultatul
expresiei este în acest caz o constantă în virgulă mobilă.
Exemple:
> 1/3.+4/5;
1.133333333
> 1./3+8;
8.333333333
> 1/3+2/3.;
1.000000000
> 20+45.75e-2;
20.4575
Orice număr real nenul x poate fi scris sub formă normalizată, în baza 10:
x = ±m 10p
cu 0,1≤m<1, (m = mantisa). În calcule se reţin de obicei un număr finit de cifre
zecimale ale mantisei. Numărul de cifre care se reţin se numeşte număr de cifre
semnificative. Numărul de cifre semnificative poate fi controlat în MAPLE cu
ajutorul variabilei globale Digits. Valoarea implicită pentru pentru digits este 10.
Exemple:
> 1./7;
0.1428571429
> Digits:=20;
Digits := 20
> 1./7;
0.14285714285714285714
Deci MAPLE poate lucra în virgulă mobilă cu o precizie teoretic “infinită”.
Pentru a determina evaluarea unei expresii în virgulă mobilă (chiar dacă toţi
operanzii din expresie sunt întregi sau raţionali) se poate folosi comanda evalf.
evalf(expresie)
determină evaluarea expresiei la o valoare în virgulă mobilă, cu numărul de cifre
semnificative stabilit de variabila Digits.

246
Metode Numerice

evalf(expresie,n)
determină evaluarea expresiei la o valoare în virgulă mobilă, utilizând n de cifre
semnificative (valoarea variabilei Digits nu este afectată).
Exemple:
> evalf(1/7);
0.1428571429
> evalf(1/7,20);
0.14285714285714285714
> evalf(Pi);
3.141592654
> evalf(Pi,30);
3.14159265358979323846264338328
Există o întreagă familie de funcţii de evaluare numerică şi algebrică a expresiilor:
• eval – evaluează în întregime o expresie
• evala– evaluează algebric o expresie
• evalf– evaluează numeric o expresie
• evalb– evaluează boolean o expresie
• evalm– evaluează matriceal o expresie
• evalc– evaluează în mulţimea numerelor complexe o expresie
În MAPLE un şir de caractere (string) constă dintr-o succesiune de
caractere cuprinse între apostrofuri întoarse (backquote) (`) sau între ghilimele (“).
Operatorul de concatenare pentru şirurile de caractere în MAPLE este || (de
asemenea se poate utiliza comanda cat).
Exemple:
> `Acesta este un string in MAPLE`;
Acesta este un string in MAPLE
> `1+2=?`;
1+2=?
> `acesta este`||` un string`;
acesta este un string
Un identificator în MAPLE este un şir de caractere alfabetice (A-Z, a-z),
cifre (0-9) şi caracterul _ (liniuţa de subliniere, underline), şir în care primul

247
Mădălina Roxana Buneci

caracter este un caracter alfabetic (A-Z, a-z). Lungimea maximă a unui identificator
este dependentă de sistem . MAPLE este case-sensitive, ceea ce însemnă că
identificatorul nume este diferit de identificatorul Nume. MAPLE conţine un număr
de identificatori predefiniţi (identificatori rezervaţi). O listă a acestora poate fi
obţinută cu comanda
> ?ininame
sau
> help(`ininame`);

A.4. Comenzi de calcul în MAPLE

Tabelul de mai jos conţine comenzile din MAPLE pentru diferenţiere,


integrare şi însumare.

Notaţie MAPLE Semnificaţie Notaţie


matematică
diff(f(x),x) derivată parţială ∂f
∂x
int(f(x),x) integrală indefinită
∫ f (x )dx
sum(f(n),n) suma seriei ∞
∑ f (n )
n =1

int(f(x),x=a..b) integrală definită b


∫a f ( x ) dx
sum(f(k),k=a..b) sumă de la a la b b
∑ f (k )
k =a

limit(f(x), x=a) limita funcţiei f în a; lim f ( x )


x →a

Diff, Int, Sum, Limit reprezintă comenzile inerte corespunzătoare. Comanda


limit admite un al treilea parametru opţional (dacă acesta este left se calculează
limita la stânga, dacă este right se calculează limita la dreapta

248
Metode Numerice

Exemple:
> diff(sin(x),x);
cos( x )
> diff(cox(x),y);
0
> diff(x*sin(cos(x)),x);
sin( cos( x ) ) − x cos( cos( x ) ) sin( x )
> diff(ln(x),x);
1
x
> Diff(ln(x),x);
d
ln( x )
dx
> Diff(ln(x),x) = diff(ln(x),x);
d 1
ln( x ) =
dx x
> Diff(sin(x)*tan(y),x,y)= diff(sin(x)*tan(y),x,y);

∂2
( sin( x ) tan( y ) ) = cos( x ) ( 1 + tan( y ) 2 )
∂y ∂ x
> int( sin(x), x );
−cos( x )
> Int( sin(x), x );


sin( x ) dx

> int( sin(x), x=0..Pi );
2
> Int( x^2*ln(x), x=1..3 )=int( x^2*ln(x), x=1..3 );
3
⌠ x 2 ln( x ) dx = 9 ln( 3 ) − 26

 9
⌡1

> Int( Int(exp(-x^2-y^2), x=0..infinity ), y=0..infinity) =int(int(


exp(-x^2-y^2), x=0..infinity ), y=0..infinity);

249
Mădălina Roxana Buneci

∞ ∞
⌠ ⌠ ( −x 2 − y 2 ) π
  e dx d y =

 
 4
⌡0 ⌡0

> sum(k^2,k=1..4);
30
> Sum(k^2,k=1..4);
4
∑ k2
k=1

> Sum(k^2,k=1..n)=sum(k^2,k=1..n);
n
( n + 1 )3 ( n + 1 )2 n 1
∑ k2 =
3

2
+ +
6 6
k=1

> sum(1/k^2,k=1..infinity);

π2
6
> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);

1
∑ k!
=e
k=0

> limit(sin(x)/x, x=0);


1
> Limit(sin(x)/x, x=0);
sin( x )
lim
x→0 x
> Limit(sin(x)/x, x=0)=limit(sin(x)/x, x=0);
sin( x )
lim =1
x→0 x
> Limit((cos(2*x)-1)/x^2, x=0)=limit((cos(2*x)-1)/x^2, x=0);
cos( 2 x ) − 1
lim = -2
x→0 x2
> Limit(exp(x), x=infinity)=limit(exp(x), x=infinity);

lim e x = ∞
x→∞

> Limit(exp(x), x=-infinity)=limit(exp(x), x=-infinity);

lim ex = 0
x → ( −∞ )

250
Metode Numerice

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


1
lim = undefined
x→0 x
> Limit(1/x, x=0, left)=limit(1/x, x=0, left);
1
lim = −∞
x → 0- x
> Limit(1/x, x=0, right)=limit(1/x, x=0, right);
1
lim =∞
x → 0+ x
Prezentăm în continuare câteva exemple cu comenzile expand, factor şi
simplify. Principalul rol al comenzii expand este aplicarea distributivităţii
produsului faţă de adunare. Comanda factor se aplică pentru descompunerea în
factori ireductibili a polinoamelor de mai multe variabile. Iar comanda simplify
aplică regulile de simplificare într-o expresie.
> expand((X^2-Y^2)^2*(X^2+Y^2)^2);

X 8 − 2 X 4 Y 4 + Y8
> factor(X^6-Y^6);

( X − Y ) ( X + Y ) ( X 2 + X Y + Y2 ) ( X 2 − X Y + Y2 )
> simplify((X^6-Y^6)/(X^2+X*Y+Y^2));

X 4 − Y X 3 + Y3 X − Y4

A.5. Reprezentări grafice în MAPLE

Comenzile destinate reprezentărilor grafice sunt incluse în pachetul plots.


Numele pachetului trebuie să preceadă fiecare comandă. Altă variantă presupune
încărcarea întregului pachet în memorie cu ajutorul comenzii with:
> with(plots);

251
Mădălina Roxana Buneci

[ animate, animate3d, animatecurve, arrow, changecoords , complexplot, complexplot3d,


conformal , conformal3d , contourplot, contourplot3d, coordplot, coordplot3d,
cylinderplot, densityplot, display, display3d, fieldplot, fieldplot3d, gradplot,
gradplot3d, graphplot3d, implicitplot, implicitplot3d, inequal, interactive,
listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot,
matrixplot, odeplot, pareto, plotcompare, pointplot, pointplot3d, polarplot,
polygonplot, polygonplot3d, polyhedra_supported , polyhedraplot, replot, rootlocus ,
semilogplot, setoptions, setoptions3d, spacecurve , sparsematrixplot , sphereplot ,
surfdata , textplot, textplot3d, tubeplot ]
Prezentăm câteva exemple cu comenzile plot, plot3d şi animate3d.
Plot este destinată reprezentărilor grafice în plan şi poate fi folosită sub mai
multe forme. Prezentăm de fiecare dată numărul minim de parametri ceruţi.

Notaţie MAPLE Curba/Curbele reprezentate


plot(f(x),x = a..b) y = f(x), x∈[a,b]
plot([f(x),g(x),…],x = a..b) y = f(x),y = g(x)…, x∈[a,b]
plot([f(t),g(t),t = a..b])  x = f (t )
 t ∈ [a , b ]
 y = g (t )

Reprezentarea grafică se face conform cu opţiunile (de stil, culoare, axe,


coordonate, rezoluţie …) indicate în comandă sau în raport cu cele implicite. Unele
din aceste opţiuni se pot stabili şi din meniul contextual: se introduce comanda de
reprezentare grafică a curbei, iar apoi se selectează din bara de context, sau prin
clic cu butonul drept al mouse-ului pe grafic, opţiunile dorite.
Implicit se folosesc coordonatele carteziene. Dacă se doreşte utilizarea altor
coordonate, acestea trebuie specificate, prin introducerea în lista de opţiuni sub
forma coords = nume_coordonate. O opţiune de forma discont=true, determină
apelul comenzii Discont pentru determinarea punctelor de discontinuitate a funcţiei
ce se reprezintă grafic.
Exemple:
> plot(sin(x)*ln(x), x=Pi..8*Pi, color=black);

252
Metode Numerice

> plot([sin(x),cos(x)],x=0..2*Pi,title=`sinus si cosinus`);

>plot([sin(t),cos(t),t=0..2*Pi],title=`cerc`,color=black);

> plot(sin(2*t),t=0..2*Pi,coords=polar, color=black);

253
Mădălina Roxana Buneci

>plot(sin(x)/x, x=-3*Pi..3*Pi,discont=true,color=black);

Comanda plot3d este destinată reprezentării grafice a suprafeţelor în spaţiu


tridimensional. Ca şi în cazul comenzii plot reprezentarea grafică se face conform
cu opţiunile indicate în comandă sau în raport cu cele implicite. Unele din aceste
opţiuni se pot stabili şi din meniul contextual. Comanda plot3d poate fi folosită sub
mai multe forme. Prezentăm de fiecare dată numărul minim de parametri ceruţi.

Notaţie MAPLE Suprafaţa/Suprafe


ţele reprezentate
plot3d(f(x,y),x = a..b,y=c..d) z = f(x,y),
(x,y)∈[a,b]×[c,d]
plot({f(x,y),g(x,y)},x = a..b,y=c..d) z = f(x,y),z=g(x,y)
(x,y)∈[a,b]×[c,d]
plot([f(u,v),g(u,v),h(u,v)],u=a..b,v=c.. x = f (u , v )

d)  y = g (u , v )
z = h (u, v )

254
Metode Numerice

Exemple
>plot3d(cos(x)*sin(y),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi);

>plot3d([v*cos(u),v*sin(u),v*ln(u)],u=Pi..4*Pi,v=0..1);

Comenzile animate şi animate3d sunt destinate animaţiei în plan şi spaţiu.


Comanda
animate3d(f(x,y,t),x=a..b,y=b..c,t=t1..t2)
creează animaţie cu ajutorul cadrelor obţinute prin reprezentarea grafică a
suprafeţelor
zt = f(x,y,t), (x,y)∈[a,b]×[c,d]
pentru valori ale lui t în intervalul [t1,t2]. Numărul de cadre poate fi stabilit cu
ajutorul opţiunii frames (implicit sunt 8).
Exemplu:
>animate3d(cos(x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi,t=1..2);

255
Mădălina Roxana Buneci

A.6. Structuri de date în MAPLE

A.6.1 Expresii şi funcţii


Comanda
>subs(x=a, expr);
întoarce expresia obţinută prin înlocuirea lui x cu a în expresia expr
Comanda
>subs(s1,s2,..., sn, expr);
(unde s1,s2,..., sn sunt ecuaţii sau mulţimi de ecuaţii sau liste de ecuaţii)
întoarce expresia obţinută în urma substituţiilor indicate de s1, s2, ..., sn în expresia
expr. Substituţiile se execută secvenţial începând cu s1. Substituţiile dintr-o
mulţime sau dintr-o listă se execută simultan.
Acţiunea comenzii subs nu este urmată de o evaluare completă. Dacă se
doreşte evaluarea completă se foloseşte comanda
>eval(expr, x=a);
care întoarce expresia obţinută prin înlocuirea lui x cu a în expresia expr sau
comanda
>eval(expr, s1,s2,..., sn);
(unde s1,s2,..., sn sunt ecuaţii sau mulţimi de ecuaţii sau liste de ecuaţii)
care întoarce expresia obţinută în urma substituţiilor simultane indicate de s1, s2, ...,
sn în expresia expr.
Exemple:
> subs(x=Pi, sin(x));
sin( π )
> eval(sin(x), x=Pi);
0
Comanda
>nops(expr);
întoarce numărul de operanzi ai expresiei expr
Comanda
>op(i, expr);

256
Metode Numerice

extrage un operand din expresia expr:


• dacă i > 0, comanda extrage cel de al i-lea operand
• dacă i < 0, comanda extrage cel de al nops(expr) +i +1 operand
• în cazul funcţiilor, dacă i = 0, comanda returnează numele funcţiei
• dacă i > nops(expr) sau i < -nops(expr) se generează mesaj de eroare
Comanda
>op(i..j, expr);
întoarce şirul operanzilor de la operandul i la operandul j.
Comanda
>subsop(i=expr1, expr);
întoarce expresia obţinută prin înlocuirea unui operand al expresiei expr cu expresia
expr1
• dacă i > 0, se înlocuieşte cel de al i-lea operand
• dacă i < 0, se înlocuieşte cel de al nops(expr) +i +1 operand
Comanda
>subsop(i1=expr1, i2=expr2,..., ik=exprk, expr);
întoarce expresia obţinută prin înlocuirea simultană a operanzilor expresiei expr
desemnaţi de i1, i2, ... ik (în acelaşi mod ca mai sus) cu expresiile expri1, ..., exprik
(respectiv).
Exemple:
> expr:=u*v+cos(u*v)/exp(-u^2);
cos( u v )
expr := u v + 2
( −u )
e
> nops(expr);
2
> op(1,expr);
uv
> op(2,expr);
cos( u v )
2
( −u )
e
> subsop(2=u+v,expr);

257
Mădălina Roxana Buneci

uv+u+v
> expr;
cos( u v )
uv+ 2
( −u )
e
Definirea unei legături fucţionale în MAPLE se face sub forma
>nume_functie: (lista variabile) -> expresie;
Comanda
>nume_functie(lista argumente curente);
întoarce valoarea funcţiei nume_funcţie pentru argumentele precizate.
Operatorii pentru adunarea, înmulţirea, compunerea funcţiilor sunt +, *, respectiv,
@.
Operatorul pentru compunere repetată este @@. Astfel dacă f este o funcţie şi n un
număr natural, atunci
• dacă n > 0, f @@ n reprezintă compunerea de n ori a funcţiei f cu ea
însăşi.
• dacă n = 0, f @@ 0 reprezintă funcţia identică
• dacă n < 0 şi f este inversabilă, atunci f @@ n reprezintă
compunerea de -n ori a inversei funcţiei f cu ea însăşi (inversa
funcţie este dată de invfunc[f]).
Comanda
>unapply(expr, x);
întoarce funcţia x -> expr, iar comanda
>unapply(expr, x, y, ...);
întoarce funcţia (x,y, ...) -> expr
Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
2
( 1 /3 ) ( −x )
f := x → x3 + cos( x ) x +e
> nops(f);
1
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);

258
Metode Numerice

2 2
( −x − y )
g := ( x, y ) → x2 e + cos( x ) sin( y )
> nops(g);
1
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) → sin( u ) cos( w ) v + u
> f(1);
( -1 )
1 + cos( 1 ) + e
> f(1.);
1.908181747
> evalf(f(1));
1.908181747
> evalf(f(1),50);
1.9081817470395820389964603776044374711781215516497
> f(alpha);
2
( 1 /3 ) ( −α )
α3 + cos( α ) α +e
> g(Pi/2,3);
 π2 
− − 9 

1 2  4 
π e
4
> evalf(g(Pi/2,3));
0.00002582324018
> g(2,3);
( -13 )
4e + cos( 2 ) sin( 3 )
> g(2,3.);

0.9041317628 10 -5 + 0.1411200081 cos( 2 )


> g(2.,3);

0.9041317628 10 -5 − 0.4161468365 sin( 3 )


> g(2.,3.);
-0.05871760362
> evalf(g(2,3));
-0.05871760362
> h(Pi/3,2,Pi/4);

259
Mădălina Roxana Buneci

3 2 π
+
2 3
> evalf(h(Pi/3,2,Pi/4));
2.271942423
> h(alpha,beta,gamma);
sin( α ) cos( γ ) β + α
> h(alpha,3,Pi/4);
3
sin( α ) 2 + α
2
> expresie:=u*v^2+cos(Pi/u*v)/u^(1/2);
πv
cos 
2  u 
expresie := u v +
u
> f1:=unapply(expresie,u);
πv
cos 
f1 := u → u v2 +  u 
u
> f1(1);

v 2 + cos( π v )
> f2:=unapply(expresie,u,v);
πv
cos 
2  u 
f2 := ( u, v ) → u v +
u
> f2(1,2/3);
-1
18
> f2(alpha, 2);
2π
cos 
4α+  α 
α
> f3:=unapply(expresie,v);
πv
cos 
f3 := v → u v2 +  u 
u
> f3(1);

260
Metode Numerice

π
cos 
u+ u
u

A.6.2. Liste

Listele (lists) în MAPLE sunt şiruri ordonate de expresii, separate între ele
prin virgulă şi incluse între paranteze drepte []. Ordinea expresiilor este dată de
poziţia în care apar în listă. Dacă L este o listă L[i] desemnează elementul de pe
poziţia i. Lista vidă este desemnată prin []. Se pot efectua următoarele operaţii cu
liste:
• extragerea din lista L a elementelor de poziţia i până la poziţia j: L(i..j)
sau op(i..j,L).;
• adăugarea unui element x la lista L: [x,op(L)] (adaugă elementul pe
prima poziţie), [op(L),x] (adaugă elementul pe ultima poziţie);
• modificarea elementului de pe poziţia i: subsop(i=x,L) sau L[i]:=x;
• eliminarea elementului de pe poziţia i: subsop(i=NULL,L);
Exemple:
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> nops(L);
8
> L[2];
-1
> op(2,L);
-1
> op(3..6,L);
1, 2, 3, -1
> L[3..6];
[ 1, 2, 3, -1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]

261
Mădălina Roxana Buneci

> L1:=[5,op(L)];
L1 := [ 5, 1, -1, 1, 2, 3, -1, 1, 1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L2:=[op(L),5];
L2 := [ 1, -1, 1, 2, 3, -1, 1, 1, 5 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L[3]:=8;
L3 := 8

> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> subsop(4=10,L);
[ 1, -1, 8, 10, 3, -1, 1, 1 ]
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> L3:=subsop(6=NULL,L);
L3 := [ 1, -1, 8, 2, 3, 1, 1 ]
> L3;
[ 1, -1, 8, 2, 3, 1, 1 ]
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> op(-3,L);
-1

A.6.3. Mulţimi

Mulţimile (sets) în MAPLE sunt şiruri neordonate de expresii, separate


între ele prin virgulă şi incluse între acolade {}. Duplicatele sunt eliminate.
Mulţimea vidă este desemnată prin {}. Se pot efectua următoarele operaţii cu
mulţimi:
• reuniune: operatorul union

262
Metode Numerice

• intersecţie: operatorul intersect


• diferenţă: operatorul minus
Exemple:
> A:={1,2,-3,-7,12};
A := { -7, -3, 1, 2, 12 }
> nops(A);
5
> op(3,A);
1
> B:={0,-1,2,-7,11,15,16};
B := { -7, -1, 0, 2, 11, 15, 16 }
> C:=A union B;
C := { -7, -3, -1, 0, 1, 2, 11, 12, 15, 16 }
> A;
{ -7, -3, 1, 2, 12 }
> {-7, -3, 1, 2, 12};
{ -7, -3, 1, 2, 12 }
> B;
{ -7, -1, 0, 2, 11, 15, 16 }
> A intersect B;
{ -7, 2 }
> B minus A;
{ -1, 0, 11, 15, 16 }
> Delta:=(A minus B) union (B minus A);
∆ := { -3, -1, 0, 1, 11, 12, 15, 16 }
> culori_calde:={rosu,galben,portocaliu};
culori_calde := { rosu , portocaliu, galben }
> culori_reci:={verde,albastru,violet};
culori_reci := { albastru, verde, violet }
> culori:=culori_calde union culori_reci;
culori := { rosu , portocaliu, albastru, galben, verde, violet }
> culori_calde intersect culori_reci;
{ }

263
Mădălina Roxana Buneci

A.6.4. Tablouri

Tablourile (tables) în MAPLE sunt structuri de date ai căror membri sunt


indexaţi.
Exemple:
> t:=table([(culoare1)=red,(culoare2)=green, (culoare3)=blue]);
t := table([culoare1 = red, culoare2 = green, culoare3 = blue])
> t[culoare2];
green
Un tablou cu zero sau mai multe dimensiuni, pentru care fiecare dimensiune
are domeniu întreg se numeşte în MAPLE array. Pentru a crea un array se poate
apela funcţia array sub forma:
>array( domeniile de indexare, listă de iniţializare);
Parametrii sunt opţionali şi pot apărea în orice ordine.
Exemple:
> v := array(1..4);
v := array( 1 .. 4, [ ] )
> v[2];
v2

> v[2]:=3;
v2 := 3

> evalm(v);
[ v1, 3, v3, v4 ]

> A := array(1..2,1..2);
A := array( 1 .. 2, 1 .. 2, [ ] )
> A[1,2] := x;
A1, 2 := x

> A[1,1];
A1 , 1

> A[1,2];
x

264
Metode Numerice

> evalm(A);

A1, 1 x 
 
A A2, 2
 2, 1
 
> A := array(1..2,1..2, [ [1,x], [x,x^2] ] );

1 x
A :=  
x
 x 2 

Vectorii şi matricele pot fi creaţi şi cu comenzile vector şi matrix din


pachetul linalg. Vectorii în MAPLE sunt tablouri unidimensionale cu indexate de la
1. Comanda
>vector(n, listă de iniţializare);
este echivalentă cu array(1..n, listă de iniţializare). Matricele (matrix) în MAPLE
sunt tablouri bidimensionale indexate de la 1. Cu alte cuvinte un apel
>matrix(m,n, listă de iniţializare);
este echivalent cu array(1..m,1..n, listă de iniţializare).
Exemple:
> with(linalg):
> x:=vector(3,[1,-1,0]);
x := [ 1, -1, 0 ]
> x[1];
1
> y:=vector(3);
y := array( 1 .. 3, [ ] )
> y[1];
y1

> M:=matrix(3,2,[[1,2],[3,4],[5,6]]);

1 2
 
M :=  3 4
 
5 6
> M[1,2];
2
Pachetul linalg conţine comenzi pentru operaţii cu vectori şi matrice.

265
Mădălina Roxana Buneci

Comanda
> map(fcn, expr, arg2, arg3, ..., argn);
aplică o funcţie sau o procedură fiecărui operand al unei expresii. Se înlocuieşte
fiecare operand i al expresiei expr cu fcn(operand_i, arg2, ..., argn).
Comanda
> map2(fcn, arg1, expr, arg3, ..., argn);
este similară comenzii map, cu deosebirea că se înlocuieşte operandul i al expresiei
expr cu fcn(arg1, operand_i, arg3, ..., argn).
Comanda
> applyop(f, i, expr, arg2, arg3, ..., argn);
înlocuieşte operandul desemnat de i (dacă i > 0, se înlocuieşte cel de al i-lea
operand iar dacă i < 0, se înlocuieşte cel de al nops(expr) +i +1 operand) al
expresiei expr cu f(operand_i, arg2, ..., argn) (f este o funcţie).
Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
2
( 1 /3 ) ( −x )
f := x → x 3 + cos( x ) x +e
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
2 2
( −x − y )
g := ( x, y ) → x2 e + cos( x ) sin( y )
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) → sin( u ) cos( w ) v + u
> with(linalg):
> x:=vector(3,[1,-1,0]);
x := [ 1, -1, 0 ]
> map(f,x);
( -1 ) ( 1/ 3 ) ( -1 )
[ 1 + cos( 1 ) + e , −1 + cos( 1 ) ( -1 ) +e , 1]
> map(g,x,Pi/3);

  −1 − π2   2
 −1 − π  
   1  
1 3 
e 9 
+ cos( 1 ) 3 , e
 9 
+ cos( 1 ) 3 ,
 
 2 2 2 
> map(h,x,2,Pi/2);
[ 1, -1, 0 ]
> map(h,x,2,Pi/4);

266
Metode Numerice

[ sin( 1 ) 2 + 1, −sin( 1 ) 2 − 1, 0 ]
> M:={Pi,-Pi,Pi/2,-Pi/2};
π π
M := { π, , −π, − }
2 2
> map(h,M,3,Pi/3);
3 π 3 π
{ π, − − , + , −π }
2 2 2 2
> map2(g,Pi/3, x);

  π2   2
 −1 − π 
 π2  
 1 2  −1 − 9  1 1 2  
1
 
1 2  − 9  
 π e + sin( 1 ), π e
9 
− sin( 1 ), π e
 
9 2 9 2 9 
> map2(h,2, x,Pi/2);
[ 2, 2 , 2 ]
> map(h,2, x,Pi/4);
1
sin( 2 ) 2 x + 2
2
> M:={Pi,-Pi,Pi/2,-Pi/2};
π π
M := { π, , −π, − }
2 2
> map(h,3,M,Pi/3);
1 π π
sin( 3 ) { π, , −π, − } + 3
2 2 2
> expr:=u*v+cos(u*v)/exp(-u^2);

cos( u v )
expr := u v + 2
( −u )
e
> applyop(f,1,expr);
2 2
( 1/3 ) ( −u v ) cos( u v )
u 3 v3 + cos( u v ) ( u v ) +e + 2
( −u )
e
> applyop(g,1,expr,Pi/3);
 2 2 π2 
 −u v − 
 
 9  1 cos( u v )
u 2 v2 e + cos( u v ) 3 +
2 2
( −u )
e
> applyop(g,2,expr,0);

267
Mădălina Roxana Buneci

 2 
− cos ( u v )
 
 2
  ( −u )  
2
  e  

   
cos( u v ) 2 e
uv+ 2
2
( −u )
(e )
> applyop(h,1,expr,0, Pi/2);
cos( u v )
uv+ 2
( −u )
e
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> op(1,L);
1
> applyop(f,1,L);
( -1 )
[ 1 + cos( 1 ) + e , -1, 1, 2, 3, -1, 1, 1 ]
> op(3,L);
1
> applyop(f,3,L);
( -1 )
[ 1, -1, 1 + cos( 1 ) + e , 2, 3, -1, 1, 1 ]
> applyop(g,3,L, Pi/2);
2
 
 −1 − π  
   
 1, -1, e  4 
+ cos( 1 ), 2, 3, -1, 1, 1 

> applyop(g,3,L, Pi);
2
( −1 − π )
[ 1, -1, e , 2, 3, -1, 1, 1 ]
> applyop(h,3,L, 2,Pi/3);
[ 1, -1, sin( 1 ) + 1, 2, 3, -1, 1, 1 ]
> applyop(h,3,L, 2,Pi/2);
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> applyop(h,-1,L, 2,Pi/3);
[ 1, -1, 1, 2, 3, -1, 1, sin( 1 ) + 1 ]

268
Metode Numerice

A.7. Elemente de programare în MAPLE

Vom prezenta câte două variante pentru fiecare instrucţiune. Prima variantă
este valabilă în MAPLE V iar cea de a doua în versiuni mai noi de MAPLE.
Anumite versiuni (cum ar fi MAPLE 8) admit ambele forme. Vom folosi ulterior
prima variantă.

A.7.1 Atribuirea. Decizia. Structuri repetitive

Atribuirea are forma


x:=v;
Efectul acestei instrucţiuni constă în evaluarea expresiei v pentru valorile curente
ale variabilelor pe care le conţine şi înscrierea rezultatului în locaţia de memorie
rezervată variabilei x
Decizia are forma:
if condiţie then instrucţiuni1 else instrucţiuni2 fi;
if condiţie then instrucţiuni1 else instrucţiuni2 end if;

Da Nu
condiţie

Instrucţiuni1 Instrucţiuni2

Condiţia este o expresie logică (formată cu operatori logici sau relaţionali). Modul
de execuţie al deciziei (precum rezultă din subschema logică de mai sus) este
următorul:
1. se evaluează condiţia
2. dacă rezultatul este adevărat se execută instrucţiuni1, în caz contrar se
execută instrucţiuni2.
3. se trece la comanda care urmează după decizie
În cazul în care else lipseşte se foloseşte forma simplificată:

269
Mădălina Roxana Buneci

if condiţie then instrucţiuni fi;

Da
condiţie

Nu
instrucţiuni

1. se evaluează condiţia
2. dacă rezultatul este adevărat se execută instrucţiuni
3. se trece la comanda care urmează după decizie
Un extra element elif (ţinând loc de else+if) poate fi adăugat în decizie, obţinând:
if/then/elif/then…/else/fi
Exemple:
> a := 3; b := 7;
a := 3
b := 7
> if (a > b) then a else b fi;
7
> if (a > b) then c:=7 fi;
> c;
c
> if (a > b) then c:=7 elif (a<b) then c:=9 fi;
c := 9

Există două instrucţiuni repetitive în MAPLE: for şi while. For are mai
multe forme:
(1) for i from ei by p to ef do instrucţiuni od;
for i from ei by p to ef do instrucţiuni end do;
unde i este variabila de contorizare, p este pasul cu care se face incrementarea
(decrementarea), iar ei (respectiv ef ) este o expresie care determină valoarea

270
Metode Numerice

iniţială (respectiv finală) a contorului. Modul de execuţie al acestei instrucţiuni este


următorul:
1. se execută atribuirea i : = ei
2. se evaluează condiţia i ≤ ef dacă p > 0 (sau i ≥ ef dacă p < 0), şi dacă
este îndeplinită această condiţie se trece la pasul 3, altfel se trece la
pasul 5
3. se execută instrucţiuni
4. se execută atribuirea i := i + p
5. se execută comanda care urmează după for

Pentru p >0 comanda este echivalentă cu următoarea subschemă logică:

i := ei

Da
i ≤ ef instrucţiuni i: = i + p

Nu

Pentru p < 0 comanda este echivalentă cu următoarea subschemă logică:

i := ei

Da
i ≥ ef instrucţiuni i: = i + p

Nu

Construcţiile from ei şi by p pot lipsi, caz în care ei se ia 1 şi pasul se consideră egal


cu 1.

271
Mădălina Roxana Buneci

(2) for i from ei by p while condiţie do instrucţiuni od;


for i from ei by p while condiţie do instrucţiuni end do;
Modul de execuţie al acestei instrucţiuni este următorul:
1. se execută atribuirea i : = ei
2. se evaluează condiţia trecută după while, şi dacă este îndeplinită, se
trece la pasul 3, altfel se trece la pasul 5
3. se execută instrucţiuni
4. se execută atribuirea i := i + p
5. se execută comanda care urmează după for
Comanda este echivalentă cu următoarea subschemă logică:

i := ei

Da
condiţie instrucţiuni i: = i + p

Nu

Ca şi înainte construcţiile from ei şi by p poate lipsi, caz în care ei se ia 1, iar pasul


se consideră egal cu 1. Condiţia este dată printr-o expresie booleană.
Ambele clauze to şi while pot fi prezente în instrucţiunea for:
(3) for i from ei by p to ef while condiţie do instrucţiuni od;
for i from ei by p to ef while condiţie do instrucţiuni end do;
În acest caz
1. se execută atribuirea i : = ei
2. se evaluează condiţia i ≤ ef dacă p > 0 (sau i ≥ ef dacă p < 0), şi condiţia
trecută după while; dacă amândouă sunt îndeplinite se trece la pasul 3,
altfel se trece la pasul 5
3. se execută instrucţiuni
4. se execută atribuirea i := i + p
5. se execută comanda care urmează după for

272
Metode Numerice

În cazul următoarei instrucţiuni for contorul i parcurge toate elementele unei liste
sau unei mulţimi (expr):
(4) for i in expr while condiţie do instrucţiuni od;
for i in expr while condiţie do instrucţiuni end do;

Exemple:
> for i from 6 by 2 to 10 do print(i) od;
6
8
10
> suma := 0;
suma := 0
> for i from 11 by 2 while i < 15 do suma := suma + i od;
suma := 11
suma := 24
> L:=[1,5,3];
L := [ 1, 5, 3 ]
> suma:=0;
suma := 0
> for z in L do suma:=suma+z od;
suma := 1
suma := 6
suma := 9
Ciclu cu test iniţial are forma:
while condiţie do instrucţiuni od;
while condiţie do instrucţiuni end do;
Testul pentru repetarea calculelor se face înaintea execuţiei grupului de comenzi
care trebuie repetate. Dacă este îndeplinită condiţia, se execută instrucţiunile după
care se reevaluează condiţia. În caz contrar, se trece la comanda care urmează după
ciclul cu test iniţial. Subschema logică echivalentă este următoarea:

273
Mădălina Roxana Buneci

Da
condiţie instrucţiuni

Nu

Condiţie reprezintă o expresie booleană.


Exemple:
> x:=234;
x := 234
> while x>0 do x:=iquo(x,10,'r');print(r) od;
x := 23
4
x := 2
3
x := 0
2

A.7. 2. Proceduri în MAPLE

În principal, necesitatea subprogramelor se datorează faptului că de multe


ori algoritmul prevede executarea aceloraşi instrucţiuni pentru date diferite. Grupul
de instrucţiuni care se repetă poate constitui o unitate distinctă căreia i se dă un
nume şi un set de parametri. Ori de câte ori va fi necesară execuţia acestui grup de
instrucţiuni se specifică numele şi parametrii care actualizează grupul de
instrucţiuni (astfel se scurtează dimensiunea şi creşte claritate programului). Grupul
de instrucţiuni se numeşte procedură (procedure) în MAPLE.
Forma unei proceduri este:
nume:=proc (param1, param2,…)
local lista declaraţii locale;
global lista declaraţii globale;

274
Metode Numerice

options listă opţiuni;


description descriere;
instrucţiuni
end;
În variantele mai noi de Maple end de la sfârşit se va înlocui cu end proc.
Nu toate elementele de mai sus sunt obligatorii. Dacă este necesar ca
procedura să întoarcă o valoare, se poate folosi apelul
RETURN(v)
în şirul de instrucţiuni din corpul procedurii.
Parametrii care apar în scrierea unei proceduri se numesc parametrii
formali, ei având un rol descriptiv (un parametru formal este o variabilă al cărei
nume este cunoscut, dar al cărei conţinut nu este precizat decât în momentul
execuţiei). În cadrul listei, parametrii formali sunt separaţi prin virgulă. Numele
procedurii (nume) este un identificator MAPLE. Apelul unei proceduri se face cu
comanda:
nume (listă parametrii actuali)
parametrii actuali fiind expresii despărţite între ele prin virgulă în cadrul listei. În
momentul execuţiei parametrii actuali substituie parametrii formali. Un apel de
procedură determină următoarele acţiuni:
♦ se stabileşte corespondenţa între argumente şi parametrii
♦ se execută instrucţiunile subprogramului, până când se ajunge la end sau la
o instrucţiune RETURN. Efectul acestor instrucţiuni (end şi RETURN)
este întoarcerea în unitatea de program în care a avut loc apelul, şi anume la
instrucţiunea ce urmează imediat acestui apel (precizăm că o procedură
poate apela la rândul său o altă procedură). Un apel de procedură este corect
dacă între parametrii actuali şi cei formali există o corespondenţă atât ca
număr, cât şi ca tip şi organizare.

275
Mădălina Roxana Buneci

Exemplu:
Să presupunem că se dă un număr întreg pozitiv x, şi se cere lista cifrelor
corespunzând reprezentării binare a lui x. Procedura următoare rezolvă această
problemă.
> lbinar:=proc(x)
local y,L;
y:=x; L:=[];
while y>0 do
L:=[irem(y,2,'c'),op(L)];y:=c;
od;
RETURN(L)
end;

> lbinar(27);
[ 1, 1, 0 , 1, 1 ]
> lbinar(32);
[ 1, 0, 0 , 0 , 0, 0 ]
Procedura lbinarfr de mai jos întoarce lista primelor n cifre ale reprezentării
binare a unui număr x, cu proprietatea 0≤x<1.
> lbinarfr:=proc(x,n)
local y,i,L;
y:=x;L:=[];
for i from 1 to n do y:=y*2;
L:=[op(L),floor(y)];y:=frac(y)od;
RETURN(L)
end;
> lbinarfr(0.15,10);
[ 0, 0 , 1, 0, 0, 1, 1 , 0, 0 , 1 ]

Procedura lbin întoarce lista cifrelor binare corespunzătoare unui număr real
x. Pentru partea fracţionară a numărului se reţin n cifre. Procedura lbin apelează
procedurile precedente.
> lbin:=proc(x,n)
local y,L1,L2,L;
y:=abs(x);

276
Metode Numerice

L1:=lbinar(floor(y));
L2:=lbinarfr(frac(y),n);
L:=[L1,L2];
RETURN(L)
end;
> lbin(23.15,10);
[ [ 1, 0, 1, 1, 1 ], [ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1 ] ]

277
Mădălina Roxana Buneci

278
Metode Numerice

BIBLIOGRAFIE

1. K. E. Atkinson, An Introduction to Numerical Analysis, Wiley, New York,


1978.
2. G. Bal, Lecture notes, course on numerical analysis, 2002.
http://www.columbia.edu/~gb2030/COURSES/E6302/NumAnal.ps.
3. B. J. C. Baxter and A. Iserles, On the foundations of computational
mathematics, In P. G. Ciarlet and F. Cucker, editors, Handbook of
Numerical Analysis, volume XI, pages 3–34. North Holland Elsevier,
Amsterdam, 2003.
4. C. M. Bucur, C.A. Popeea, Gh. Gh. Simion, Matematici Speciale-Calcul
Numeric, Editura Didactică şi Pedagogică, Bucuresti, 1983.
5. M. Buneci, Metode Numerice - Lucrări de laborator, Editura Academica
Brâncusi, 2003.
6. R. L. Burden, J.d: Faires, Numerical Analysis, 5th ed. PWS Publishing,
Boston, 1993.
7. Ghe. Coman, Analiză numerică, Editura Libris Cluj-Napoca, 1995.
8. G. Dahlquist şi A. Bjorck, Numerical Methods in Scientific Computing, Vol
I, SIAM, 2007.
9. S. Dimitriu, E. Cerna Mladin, M. Stan, Metode Numerice, Editura Matrix
Rom, Bucureşti, 2001.
10. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matricial.
Algoritmi fundamentali, Editura ALL Educational, Bucureşti, 1998.
11. Gh. Dodescu, M.Toma, Metode de calcul numeric, Editura Didactică şi
Pedagogică, Bucureşti, 1976.
12. Gh. Grigore, Lecţii de analiză numerică, Tipografia Univ. Bucuresti, 1990.

279
Mădălina Roxana Buneci

13. J. Hoffman, Numerical Methods for Engineers and Scientist, McGraw-Hill,


New York, 1992.
14. V. Iorga, Metode numerice. Îndrumar de laborator, Institutul Politehnic
Bucureşti, 1992.
15. G. Marinescu, Analiză numerică, Editura Academiei R.S. România, 1974.
16. M.B. Monagan, K.O. Geddes, K.M. Heal, G. Labahn, S.M. Vorkoetter, J.
McCarron and P. DeMarco, Maple 8 Advanced Programming Guide.
Waterloo Maple Inc., Waterloo, Ontario, Canada, 2002.
17. S. Pav, Numerical Methods Course Notes, 2004 (UCSD),
http://scicomp.ucsd.edu/~spav/pub/numas.pdf.
18. M. Popa ş.a., Noţiuni de analiză numerică, Sitech Craiova, 2001.
19. M. Postolache, Metode numerice în algebră, Universitatea Politehnică
Bucureşti, 1993.
20. A. Rusu Casandra ş.a., Metode numerice pentru calculul structurilor,
Editura Universităţii Politehnica Bucureşti, 1998.
21. M. Stan ş.a., Metode numerice, Editura Matrix Rom Bucureşti, 2001.
22. J. Stoer şi R. Bulirsch, Introduction to Numerical Analysis (3rd ed.),
Springer, 2002.

280
Metode Numerice

INDEX

A calculul inversei unei matrice prin


adjunctul unui operator liniar şi metoda de eliminare Gauss, 71
mărginit, 56 catastrophic cancellation, 47
algebră Banach, 54 cifră în baza b, 17
algoritm polinomial, 16 cifre semnificative, 36
algoritm stabil, 14 cod complementar, 32
algoritmul Romberg, 224 cod direct, 31
aplicaţie liniară, 54 cod invers, 31
aproximare a derivatei prin diferenţe ˆ , 212
coeficienţi Newton-Cotes
finite progresive, 192 complementul ortogonal, 56
aproximare a derivatei prin diferenţe conjugata unei matrice, 57
finite regresive, 194 contracţie, 116
aproximare a derivatelor prin conversie, 19
diferenţe finite centrale, 190 cuadratură Gauss, 227
aritmetica în virgulă mobilă, 45 D
B derivare numerică folosind diferenţe
bază ortonormală, 55 finite, 189
bază, 17 derivare numerică folosind
bit ascuns, 39 interpolarea, 206
bit de semn, 34 desfacere a standard a unei matrice,
bitul cel mai puţin semnificativ, 30 82
bitul cel mai semnificativ, 30 desfacere a unei matrice, 81
C diferenţă finită divizată, 171
calculul determinantului unei matrice diferenţă finită la dreapta, 161
prin metoda de eliminare Gauss, 70 diferenţă finită la stânga, 167

281
Mădălina Roxana Buneci

dimensiunea unui spaţiu Hilbert, 56 forma normalizată – exponentul, 35


dualul unui spaţiu normat, 55 forma normalizată – mantisa, 35
element de cea mai bună aproximare, forma normalizată, 35
175 formula dreptunghiurilor, 212
E formula generală de cuadratură, 210
elemente ortogonale, 55 formula lui Simpson, 223
eroare a datelor, 11 formula trapezelor, 218
eroare backward, 12 ˆ , 212
formula Newton-Cotes
eroare de calcul, 10 funcţie pondere, 179
eroare de interpolare în cazul I
nodurilor Cebîşev, 143 IEEE-754- dublă precizie (double-
eroare de interpolare în cazul precission), 41
nodurilor echidistante, 142 IEEE-754-simplă precizie (single-
eroare de interpolare, 140 precission), 40
eroare de metodă, 9 Inf, 39
eroare de rotunjire, 9 , 11 integrarea numerică, 209
eroare de trunchiere, 9, 11 M
eroare forward, 12 matrice diagonal dominantă, 84
eroare inerentă, 9 matrice diagonală, 58
eroarea absolută, 10 matrice hermitiană, 58
eroarea relativă , 10 matrice inferior Hessenberg, 58
extrapolare Richardson, 205 matrice inferior triunghiulară, 58
F matrice inversabilă, 58
factor de condiţionare în cazul matrice nesingulară, 58
rezolvării unei ecuaţii neliniare, 91 matrice ortogonală, 58
factor de condiţionare în cazul matrice simetrică, 58
rezolvării unui sistem neliniar, 105 matrice superior Hessenberg, 58
factorul de condiţionare al unei matrice superior triunghiulară, 58
matrice, 74 matrice tridiagonală, 58
factorul de condiţionare, 13 matrice unitară, 58
fl(x), 37 matricea unitate, 57

282
Metode Numerice

metoda bisecţiei (metoda înjumătăţirii numere denormalizate („denormalized


intervalului), 93 floating-point numbers”), 39
metoda celor mai mici pătrate, 178 O
metoda coardei, 96 OFL (overflow level), 37
metoda de eliminare Gauss, 62 operator liniar şi mărginit, 55
metoda Gauss-Seidel, 87 ordine lexicografică, 17
metoda Jacobi, 83 overflow, 37
metoda lui Newton, 127, 104 P
metoda Newton simplificată, 134 pivotare completă, 63
metoda Newton-Kantorovici, 138 pivotare parţială, 63
metoda punctului fix, 116 polinoame Cebîşev de speţa a II-a,
metoda tangentei, 104 230
metode directe de rezolvare a polinoame Cebîşev de speţa I, 230
sistemelor liniare, 61 polinoame Jacobi, 230
metode iterative de rezolvare a polinoame Legendre,229
sistemelor liniare, 80 polinom de interpolare, 139
minori principali, 60 polinom generalizat, 179
N polinom Lagrange de interpolare, 144
NaN, 39 polinom Newton cu diferenţe
negativ definită, 60 divizate, 171
negativ semidefinită, 60 polinom Newton de interpolare de
noduri Cebîşev, 143 speţa a II-a (descendent), 166
norma 1 ||⋅||1, 57 polinom Newton de interpolare de
norma ∞ ||⋅||∞, 57 speţa I (ascendent), 161

norma euclidiană ||⋅||2, 57 pondere(integrare numerică), 209

normă completă, 54 pozitiv definită, 60

normă operatorială asociată unei pozitiv semidefinită, 60

matrice, 59 precizie a maşinii, 38

normă, 53 precizie, 36

norme echivalente, 54 problemă bine condiţionată, 13


problemă rău condiţionată, 13

283
Mădălina Roxana Buneci

produs scalar, 55 rotunjire prin tăiere, 37


produsul scalar canonic, 57 S
punct fix, 116 sistem de numeraţie, 17
R sistem ortogonal, 55
rată de convergenţă, 92, 116 sistem ortonormal, 55
rată liniară de convergenţă, 92, 116 sistemul normal al lui Gauss, 180
rată pătratică de convergenţă, 92, 116 soluţie a unei ecuaţii, 91
rată superliniară de convergenţă, 92, soluţie a unui sistem neliniar, 105
116 spaţiu Banach, 54
raza spectrală, 59 spaţiu Hilbert, 55
rădăcină a unei ecuaţii, 91 spaţiu normat, 53
reprezentare complement faţă de 1,31 spaţiu pre-Hilbert, 55
reprezentare complement faţă de 2, 32 spaţiul operatorilor liniari şi mărginiţi,
reprezentare în virgulă mobilă 55
normalizată, 37 spectru, 59
reprezentare în virgulă mobilă, 36 standardul IEEE-754, 39
reprezentare periodică în baza b, 25 T
reprezentare semn şi valoare absolută, transpusa unei matrice, 57
31 trunchiere, 37
reprezentarea internă a numerelor U
întregi fără semn, 29 UFL (underflow level), 37
reprezentarea unui număr întreg în underflow, 37
baza b, 19 V
reprezentarea unui număr real în baza valoare proprie, 59
b, 21 vector propriu, 59
restul formulei generale de Z
cuadratură, 211 zerou al funcţiei, 91
rezolvarea unui sistem liniar prin
metoda de eliminare Gauss , 67
rotunjire la cel mai apropiat număr în
virgulă mobilă (rotunjire la par), 38

284