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
2
ISBN 978-973-144-289-1
Metode Numerice
3
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
Mădălina Roxana Buneci
4
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
Metode Numerice
5
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
Mădălina Roxana Buneci
6
Metode Numerice
7
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.
Mădălina Roxana Buneci
8
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.
Metode Numerice
9
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.
Mădălina Roxana Buneci
10
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ă
Eroarea relativă = exactăvaloare
absolutăeroare
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:
exactăvaloare
absolutăeroare . 100 %
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
Metode Numerice
11
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
( )xf ′ ≈( ) ( )
h
xfhxf −+
eroarea de trunchiere este dominată de M2
h, unde M = ( )tfsup ′′ pentru t într-o
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 h
2ε. Deci eroarea
totală este mărginită de E(h) = M2
h +
h
2ε. Studiem variaţia acestei funcţii.
Avem ( )hE′ = 2
M-2ε
2h
1 şi deci ( )hE′ = 0 <=> h = 2
M
ε. În plus,
ε′′
M2E >0,
deci funcţia are punct de minim în h = 2M
ε. Ca urmare, eroarea totală este
minimă pentru h ≈ 2M
ε. Pentru valori mai mici ale lui h eroarea totală creşte din
Mădălina Roxana Buneci
12
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
Eroare forward relativă = y
y
∆ =
y * 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*.
Eroare backward relativă = x
x
∆ =
x * 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ă 84.4 =2.2. Eroarea backward
absolută este
| ∆x | =| x* - x | = | 4.84 - 5 | ≈ 0.16,
iar eroarea backward relativă este aproximativ 3 %.
Metode Numerice
13
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:
cond = intrarededatelorarelativăvariatia
solutieiarelativăvariatia
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
cond =
( ) ( )( )
x
x*x
xf
xf*xf
−
−
=
x
x
y
y
∆
∆
.
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) ≈ ( )xf ′ ∆x
Mădălina Roxana Buneci
14
iar eroarea relativă forward este
( ) ( )( )xf
xfxxf −∆+ ≈ ( )( )xf
xxf ∆′
Factorul de condiţionare este
cond ≈
( )( )
x
xxf
xxf
∆
∆′
= ( )( )xf
xfx ′.
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.
Metode Numerice
15
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) = o(f(n)) dacă ( )( )
0nf
nτlimn
=∞→
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
Mădălina Roxana Buneci
16
Interpretare: ττττ are o creştere la fel de lentă ca f
• τ(n) ~ f(n) dacă ( )( )n
nlim 1
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.
Metode Numerice
17
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
şi Bk = B pentru orice k∈ N. Fie mulţimea An = ∏=
n
0kkB înzestrată cu ordinea
lexicografică. Reamintim că această relaţie de ordine se defineşte în felul următor:
(αn, αn-1, …, α0 ) < (βn, βn-1, …, β0 ) def
<=> există k∈0, 1, …, n astfel încât
αk < βk şi αi = βi pentru i = n,1k + .
Considerăm funcţia fn : An → 0, 1, …, bn+1-1 definită prin
fn(αn, αn-1, …, α0) = αnbn + αn-1b
n-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,
Mădălina Roxana Buneci
18
…, β0 ), cu α < β. Deoarece α < β, rezultă că există k∈0, 1, …, n astfel încât αi =
βi pentru i = n,1k + şi αk < βk (de unde rezultă că αk ≤ βk - 1). Avem
fn(α0, α1, …, αn) = αnbn + αn-1b
n-1 + … + αk+1bk+1+ αkb
k +αk-1bk-1+ … + α1b + α0
= βnbn + βn-1b
n-1 + … + βk+1bk+1 + αkb
k + αk-1bk-1+ … + α1b + α0
≤ βnbn + βn-1b
n-1 + … + βk+1bk+1+ (βk -1)bk +(b -1)bk-1+ …+ (b-1)
= βnbn + βn-1b
n-1 + …+ βk+1bk+1+(βk -1)bk +(b -1)(bk-1+ … + b +1)
= βnbn + βn-1b
n-1 + … + βk+1bk+1+ βkb
k - bk + (b -1) 1b
1bk
−−
= βnbn + βn-1b
n-1 + … + βk+1bk+1+ βkb
k - 1
< βnbn + βn-1b
n-1 + … + βk+1bk+1+ βkb
k
≤ 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-1b
n-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-1b
n-1 + … + α2b2 + α1b + α0.
Dacă αn ar fi nul, atunci
x = αn-1bn-1 + … + α2b
2 + α1b + α0
≤ (b -1)bn-1 + … + (b -1)b2 + (b -1)b + (b -1)
= (b -1) (bn-1 + …b2 + b + 1)
Metode Numerice
19
= (b -1) 1b
1bn
−−
< bn,
ceea ce contrazice alegerea lui n. Deci αn ≠ 0.
Dacă ar exista două reprezentări
x = αnbn + αn-1b
n-1 + … + α2b2 + α1b + α0, cu αn ≠ 0.
= βmbm + βm-1bm-1 + … + β2b
2 + β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-1b
n-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:
Mădălina Roxana Buneci
20
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,
6
2
31
1100111 = 1368
7
2
A
01111010 = A716.
Metode Numerice
21
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* × ∏≥1k
kB
cu Bk = 0, 1, …, b-1 , şi funcţia F : C → (0, ∞) definită prin
F(α0, α1, …, αn, …) = α0 + ∑∞
=
α
1nnn
b.
Seria ∑≥
α
1nnn
b este convergentă, pentru că 0 ≤
nn
b
α≤ (b-1)
nb
1 şi ∑
≥1nnb
1 este
convergentă (fiind o serie geometrică cu raţia b
1 pozitivă şi subunitară). Deci F
este corect definită.
Teorema 2.2. Fie b o bază şi F : C → [0, ∞) funcţia definită mai sus. Atunci
1. F este surjectivă
2. Pentru orice număr real x > 0 care nu este de forma nb
v cu v∈N şi
n∈ N* există un unic α ∈ C astfel încât F(α) = x.
3. Dacă numărul real x > 0 este de forma nb
v cu v∈N şi n∈ N* , atunci
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,
sau echivalent nn
b
q ≤ x <
nn
b
q +
nb
1, ceea ce implică 0 ≤ x -
nn
b
q <
nb
1 şi
∞→nlim
nn
b
q =
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
Mădălina Roxana Buneci
22
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ă ∑∞
=
α
0nnn
b= x. Considerăm o sumă parţială a acestei serii:
sn =∑=
αn
0kkk
b= α0 + ∑
=
−−n
1kk
1kk
b
bqq= α0 + ∑
=−−
−
n
1k1k1k
kk
b
q
b
q= α0 +
nn
b
q-
00
b
q=
nn
b
q.
Din ∞→n
limnn
b
q= x, rezultă că
∞→nlim sn = x.
2. Fie x > 0 un număr real care nu este de forma nb
v cu v∈N şi n∈ N*.
Presupunem prin absurd că în afara elementului α ∈ C construit anterior mai există
β ∈ C astfel încât F(β)= x, sau echivalent ∑∞
=
β
0nnn
b= x. Dacă notăm tn =∑
=
βn
0kkk
b suma
parţială de ordin n a acestei serii, atunci tn ≤ x şi x = ∑∞
=
β
0nnn
b= ∑
=
βn
0kkk
b+
∑∞
+=
β
1nkkk
b≤∑
=
βn
0kkk
b + (b-1) ∑
∞
+= 1nkkb
1= tn + (b-1)
1nb
1+
1b
b
−= tn + nb
1. Deci
tn ≤ x ≤ tn + nb
1.
Dar x nu poate fi egal cu tn + nb
1 pentru că x nu este de forma
nb
v cu v∈N şi n∈
N*. În consecinţă tn ≤ x < tn + nb
1 şi tnb
n ≤ xbn < tnbn + 1. Ţinând cont şi de faptul
că tnbn ∈ N, rezultă că [xbn] = tnb
n. Ca urmare tn =nn
b
q =∑
=
αn
0kkk
b suma parţială a
seriei ∑≥
α
0nnn
b. Seriile ∑
≥
α
0nnn
b şi ∑
≥
β
0nnn
b având sumele parţiale egale au termenii
generali egali şi deci α = β.
Metode Numerice
23
3. Fie x > 0 un număr real de este de forma nb
v cu v∈N şi n∈ N*. Fie n0 cel
mai mic număr natural cu proprietatea că există v0 natural astfel încât x = 0n
0
b
v.
Utilizând relaţiile stabilite la punctul 1, obţinem 0nq = [x 0nb ] = x 0nb = v0 şi ∑
=
α0n
0kkk
b=
0
0
n
n
b
q=
0n0
b
v= x. Deci
α = (α0, α1, …, 0nα , 0,0, …).
Demonstrăm că 0nα ≠ 0. Presupunând prin absurd că
0nα = 0, ar rezulta că x =
∑−
=
α1n
0kkk
0
b=
1n0
0b
w−
ceea ce ar contrazice alegerea lui n0. Luând
β = (α0, α1, …, 0nα -1, b -1, b -1, …).
obţinem
∑∞
=
β
0nnn
b=∑
=
α0n
0kkk
b -
0nb
1 + ∑
∞
+=
−
1nkk
0 b
1b= x -
0nb
1+ (b-1) ∑
∞
+= 1nkk
0 b
1
= x -0nb
1+ (b-1)
1n0b
1+
1b
b
− = x.
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
∑∞
+=
γ
1niii
b< (b-1) ∑
∞
+= 1niib
1=
nb
1.
Ţinând cont de reprezentarea lui x sub forma x =∑∞
=
γ
0iii
b, obţinem
xbn = bn∑=
γn
0iii
b+ bn ∑
∞
+=
γ
1niii
b = ∑
=
− γn
0ii
inb + bn ∑∞
+=
γ
1niii
b.
Mădălina Roxana Buneci
24
Numărul ∑=
− γn
0ii
inb este natural, iar bn ∑∞
+=
γ
1niii
b∈ [0, 1). Deci ∑
=
− γn
0ii
inb = [xbn]. Cu un
raţionament similar, obţinem că ∑=
− γk
0ii
ikb = [xbk] pentru orice k ≤ n. Din aproape în
aproape se obţine
α0 = [xb0] = γ0
α1 = [xb1] - b[xb0] = γ0b + γ1 - bγ0 => α1 = γ1
αn = [xbn] - b[xbn-1] = ∑=
− γn
0ii
inb - b∑−
=
− γ1n
0ii
inb = γn => αn = γn
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 Nnγ ≠ b-1 (sau echivalent,
Nnγ < 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 0Nγ < (b-1)). Demonstrăm că γ = β. Avem
x = ∑∞
=
γ
0nnn
b=∑
=
γ0N
0kkk
b + ∑
∞
+=
−
1Nkk
0 b
1b=∑
=
γ0N
0kkk
b + (b-1) ∑
∞
+= 1Nkk
0 b
1
=∑=
γ0N
0kkk
b+ (b-1)
1N0b
1+
1b
b
−=∑
=
γ0N
0kkk
b+
0Nb
1=
0Nb
w.
şi deci n0 ≤ N0. Presupunând prin absurd că n0 < N0, se obţine următoarea
contradicţie
x =∑=
α0n
0kkk
b<∑
=
α0n
0kkk
b+ ∑
∞
+=
γ
1nkkk
0 b=∑
∞
=
γ
0nnn
b= x
Utilizând în continuarea egalitatea x = ∑∞
=
γ
0nnn
b= ∑
∞
=
α
0nnn
b, se obţine
0Nγ = 0Nα -1, şi
deci α=β.
Dacă are loc cazul (ii), atunci evident αn = γn pentru orice n, şi deci γ = α.
Metode Numerice
25
Definiţie 2.3. Reprezentarea x = ∑∞
=
α
0nnn
b în baza b a numărului real x > 0 se
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
x = ∑∞
=
α
0nnn
b= ∑
−
=
α1N
0nnn
b+∑
+
=
αpN
Nnnn
b ( ) ( )
++++++++
...b
1...
b
1
b
11
1pn1p21p
=∑−
=
α1N
0nnn
b+ ∑
+
=
αpN
Nnnn
b ( )∑∞
=+
0nn1pb
1 =∑
−
=
α1N
0nnn
b+∑
+
=
αpN
Nnnn
b 1b
b1p
1p
−+
+
,
de unde rezultă că x este un număr raţional.
Reciproc să considerăm un număr raţional x =j
i, cu i şi j numere naturale, j
≠ 0. Demonstrăm că reprezentarea x = ∑∞
=
α
0nnn
b în baza b este periodică. Dacă x este
de forma nb
v cu v∈N ne vom referi la acea reprezentare care are proprietatea că
oricare ar fi N există nN ≥ N+1 astfel încât Nnα ≠ 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
0ii
inb = [xbn] pentru orice n.
Notăm
x0 = x, xn+1 = b(xn - αn), n ≥ 0.
Se observă că
α0 = [x] = [x0]
Mădălina Roxana Buneci
26
α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.
Ţinem cont că x =j
i şi notăm cu u0 restul împărţirii lui i la j, şi cu un restul
împărţirii lui bun-1 la j pentru n ≥ 0. Raţionând prin inducţie obţinem că xn = j
bu 1n−
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ă : xb = 0, α1α2 …αn…
În urma acestor înmulţiri repetate, pot apare trei situaţii:
Metode Numerice
27
1. xn= 0, ceea ce determină încheierea algoritmului; în această situaţie x se
poate reprezenta exact prin 0, α1α2 …αn = ∑=
αn
1kkk
b (această situaţie
corespunde cazului x = nb
v cu v∈N şi n∈ N*).
2. xn ≠ 0, dar se observă o periodicitate, adică una sau un grup de cifre care
se repetă ( această situaţie corespunde cazului x raţional dar x ≠ m
v
b pentru
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
1kkk
b reprezintă doar o aproximaţie pentru x în baza 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.
Mădălina Roxana Buneci
28
Metode Numerice
29
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
orik
1...11 2 = 2k-1 + 2k-2 +…+ 20 = 12
12k
−−
= 2k – 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
Mădălina Roxana Buneci
30
7 0
0 0 1 1 1 1 1 0 → 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 :
0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 → 0048 (în hexazecimal)
0 0 4 8
Metode Numerice
31
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
x + x = 2
k
1....11
= 2k - 1
Mădălina Roxana Buneci
32
Î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ă: ( k
0...00 ).Mulţimea
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
x + x = 2
k
1....11
+ 1 = 2k - 1 + 1 = 2k
Ş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
Metode Numerice
33
Cod direct (semn şi valoare absolută)
1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 → 1048 (în hexazecimal)
1 0 4 8
Cod invers (complement faţă de 1)
1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 → FFB7 (în hexazecimal)
F F B 7
Cod complementar(complement faţă de 2)
1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 → 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ă
Mădălina Roxana Buneci
34
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
zecimală
cod direct (semn şi
valoare absolută)
cod indirect
(compl. faţă de 1)
cod complementar
(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
Metode Numerice
35
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
cu 0,1b ≤ |m|b < 1b ⇔ 1
b≤ |m| < 1 (ceea ce înseamnă că mantisa este un număr
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
exponentul. Considerăm reprezentarea |x| =∑∞
=
α
0nnn
b care are proprietatea că ar fi N
există nN ≥ N+1 astfel încât Nnα ≠ 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
Mădălina Roxana Buneci
36
• 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
±(α0 + b
1α+
22
b
α+…+
1p
1p
b −
−α )bE, αk ∈ 0, 1, ...b-1 pentru orice k = 1p,0 − , E ∈Z.
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
Metode Numerice
37
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⋅ 1Eminb − .
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
UFL = minEb .
Cel mai mare număr normalizat se notează OFL (overflow level) şi este
OFL = (b-1 + b
1b −+
2b
1b −+…+
1pb
1b−
− ) maxE
b
= 1maxE
b+
(1 -pb
1).
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
normalizată a lui x = ± (α0 + b
1α+
22
b
α+…+
1p
1p
b −
−α + …)bE; deci
fl(x) = ± (α0 + b
1α+
22
b
α+…+
1p
1p
b −
−α )bE.
Mădălina Roxana Buneci
38
• 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
εmach = 2
1b 1- p.
Eroarea relativă maximă cu care fl(x) aproximează x este dată de
( )x
xxfl −≤ εmach.
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
fl(x) =±(α0 + b
1α+
22
b
α+…+
1p
1p
b −
−α )bE.
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
Metode Numerice
39
corespunzătoare) poate fi făcută eficient. Astfel reprezentarea internă a unui număr
real x aproximat prin fl(x) = ± (α0 + b
1α+
22
b
α+…+
1p
1p
b −
−α )bE se face sub forma
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ă:
x ≈ fl(x) = ± (1 + 2
1α+
22
2
α+…+
1p
1p
2 −
−α )2E, p = 24, 53.
Sunt admise şi aşa numitele numere denormalizate ("denormalized floating-point
numbers"):
± (0 + 2
1α+
22
2
α+…+
1p
1p
2 −
−α )2E, p = 24, 53,
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
Mădălina Roxana Buneci
40
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.
Un număr în virgulă mobilă ±(α0 + 2
1α+
22
2
α+…+
1p
1p
2 −
−α )2E se reprezintă intern
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 +
21α
+22
2
α+…+
1p
1p
2 −
−α )2E fiind normalizată, există siguranţa că α0 = 1, ceea ce
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:
Metode Numerice
41
• 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
Fie ed = e0 + e12 + e222 + … + e72
7 şi m = 2
1α+
22
2
α+…+
2323
2
α. Valoarea v
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= 23,1 şi s = 0, atunci v = 0.
dacă ed = 0, αk = 0 pentru orice k= 23,1 ş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= 23,1 şi s = 0, atunci v = Inf.
dacă ed = 255, αk = 0 pentru orice k= 23,1 ş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
Mădălina Roxana Buneci
42
Fie ed = e0 + e12 + e222 + … + e102
10 şi m = 2
1α+
22
2
α+…+
5252
2
α. Valoarea v
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= 52,1 şi s = 0, atunci v = 0.
dacă ed = 0, αk = 0 pentru orice k= 52,1 ş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= 52,1 şi s = 0, atunci v = Inf.
dacă ed = 2047, αk = 0 pentru orice k= 52,1 ş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)
Metode Numerice
43
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:
1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
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).
Mădălina Roxana Buneci
44
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;
Metode Numerice
45
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
Mădălina Roxana Buneci
46
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
x = 10
1. Se reprezintă în baza 2, prin x = 0,0001100110011…=1,
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;
Metode Numerice
47
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
Membrul drept ar fi trebuit să fie 0, deoarece 10
1⋅10i+1 - 10i =0.
În cazul scăderii a două numere reale x şi y, poate apărea următorul fenomen
(catastrophic cancellation)
( ) ( )( ) ( )( )
yxfl
yxflyflxfl
−
−−−εmach,
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
( )( )∑
∞
=
+
+−
0n
1n2n
x!1n2
1
Seria fiind alternantă şi convergentă, o sumă parţială de ordin n, aproximează suma
seriei (i.e. sin(x)) cu o eroare absolută maximă de ( )!1n2
x1n2
+
+
. Programul de mai jos
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;
Mădălina Roxana Buneci
48
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;
Pentru x=2 şi eroare 10-5 se obţine aproximaţia 141782155925 ≈ 0.9092961362 corectă a
lui sin(2):
> sinus(2, 10^(-5));
141782155925
> evalf(sinus(2,10^(-5)));
0.9092961360
Metode Numerice
49
> 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];
Mădălina Roxana Buneci
50
> 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).
Reprezentarea grafică a acestui polinom pe intervalul [9999
10000,1] este:
> 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
următoarele valori ale polinomului pentru xi = 9999
10000 +
i
100000 , 1 ≤ i ≤ 10:
> 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
Metode Numerice
51
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.);
Mădălina Roxana Buneci
52
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);
Metode Numerice
53
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ă ∞→n
lim || xn - x || = 0
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ă
Mădălina Roxana Buneci
54
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. 1x
sup≤
||f(x)||< ∞.
5. 1x
sup=
||f(x)||< ∞.
Vom nota cu L(V, W) spaţiul aplicaţiilor liniare şi continue f : V → W. Pentru orice
f∈ L(V, W), avem
1x
sup≤
||f(x)|| =1x
sup=
||f(x)||= inf M > 0 : || f(x) || ≤ M||x || pentru orice x∈V .
Metode Numerice
55
Dacă pentru orice f∈ L(V, W), definim || f || = 1x
sup≤
||f(x)||, atunci (L(V, W), ||⋅||)
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) = ( )x,yϕ 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).
Mădălina Roxana Buneci
56
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 = ∑i
ii xx,x .
4. Dacă x, y∈H, atunci <x, y> = ∑i
ii y,xx,x .
5. Dacă x∈H, atunci ||x|| = ∑i
2
ix,x .
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:
Metode Numerice
57
||x||∞ = nj1
max≤≤
|xj|
||x||1 = ∑=
n
1jjx
||x||2 =2/1
n
1j
2
jx
∑
=
pentru orice x = (x1, x2, …, xn) ∈ Kn.
Norma ||⋅||2 se numeşte normă euclidiană şi provine din produsul scalar canonic
<x, y> = ∑=
n
1jjj yx pentru x = (x1, x2, …, xn) şi y = (y1, y2, …, yn)
(dacă K = R, atunci <x, y> = ∑=
n
1jjjyx ).
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
cij = ∑=
n
1kkjik ba pentru orice 1≤i≤m şi 1≤j≤p.
Transpusa unei matrice A=(aij)i,j, este o matrice notată At = ( tj,ia )i,j, ale cărei
elemente sunt: tj,ia = aj,i pentru orice 1≤i≤n, 1≤j≤m.
Conjugata unei matrice A=(aij)i,j, este o matrice notată A* = ( *j,ia )i,j, ale cărei
elemente sunt: *j,ia = i,ja 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:
Mădălina Roxana Buneci
58
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
Metode Numerice
59
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
S(A)(x) = Ax = (∑=
n
1jjijxa )1≤i≤m pentru orice x = (x1, x2, …, xn)
t∈Kn.
Î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ă:
1xsup
≤β
||Ax||α =1x
sup=β
||Ax||α.
Î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) = ( )
λσ∈λ A
max
Normele operatoriale pentru o matrice A ∈ Mn,n(C) subordonată normelor
vectoriale ||⋅||∞, ||⋅||1, ||⋅||2 sunt respectiv:
||A||∞ = ∑=∞≤≤
n
1jija
i1max
||A||1 = ∑=∞≤≤
n
1iija
j1max
||A||2 = ( )AA*ρ .
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
Mădălina Roxana Buneci
60
||A||2 nu este convenabilă (fiind dificil de calculat). În locul ei se foloseşte norma
vectorială:
||A||F = ∑=
n
1j,i
2
ija
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 k
kAlim
∞→=0 dacă şi
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.
Metode Numerice
61
• 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ă
cu regula lui Cramer: xi = ix∆∆
, 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:
det(C) = ( ) ( )( ) ( ) ( )
n
1 1 2 2 n nS
1 c c ...cε σσ σ σ
σ∈
−∑
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.
Mădălina Roxana Buneci
62
Deoarece n!> n
n
n
e(pentru n ≥1), rezultă că Nop(n) > n
( )n 1
n 1
n 1
e
+
+
+. De exemplu, dacă
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
Metode Numerice
63
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 = minn,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):
• Se determină pivotul de la pasul k; acesta este primul element ( )kk,ia
de pe coloana k cu proprietatea
| ( )kk,ia |=max| ( )k
k, ja |, k≤j≤n
• Se permută liniile i cu k;
• Se aplică regula dreptunghiului (pivotului) cu pivotul ( )kk,ka . Astfel:
elementele de pe linia pivotului se împart la pivot:
a )1k(i,k+ =
( )
( )
kk,ik
k,k
a
a, i=k,k+1,…m
elementele subdiagonale de pe coloana pivotului se înlocuiesc
cu 0.
( )1kika + =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:
Mădălina Roxana Buneci
64
k j
k (k)k,ka (k)
k, ja
i (k)i,ka (k)
i, ja
( )k 1i, ja
+=
(k) (k) (k) (k)i, j k,k k, j i,k
(k)k,k
a a a a
a
−, k+1≤ i ≤ n, k+1≤ j ≤ m.
În urma aplicării acestui algoritm se ajunge la următoarea matrice superior
triunghiulară:
1 a )1(2,1 a )1(
3,1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )1(n,1 a )1(
1n,1 + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )1(m,1
A(nmin) = 0 1⋅ ( )a 2
3,2 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )2(n,2
( )a 21n,2 + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ( )a 2
m,2
⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
0 0 0 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅1 ( )a n1n,n + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ( )a n
m,n
(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
Metode Numerice
65
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]);
Mădălina Roxana Buneci
66
:= A
1 2 0
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
112
12
032
-12
0-72
32
112
12
0-72
32
032
-12
112
12
0 1-37
0 017
112
12
0 1-37
0 0 1
> A1:=matrix(3,2,[3,2,-1,5,2,0]);
:= A1
3 2
-1 5
2 0
> elimpp(A1);
Metode Numerice
67
3 2
-1 5
2 0
123
0173
0-43
123
0 1
0 0
> A2:=matrix(2,3,[1,-1,2,3,4,-2]);
:= A2
1 -1 2
3 4 -2
> elimpp(A2);
1 -1 2
3 4 -2
3 4 -2
1 -1 2
143
-23
0-73
83
143
-23
0 1-87
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ă
Mădălina Roxana Buneci
68
Pentru rezolvarea acestui sistem vom aplica algoritmul de eliminare Gauss
cu pivotarea parţială asupra matricei extinse ( )b|AA = . 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ă
Nop(n) = ( )n 1
2
k 1
n 1 k−
=
+ −∑ =n
2
j 2
j=∑ =
( )( )n n 1 2n 1
6
+ +- 1
operaţii elementare. Deci Nop(n) ~ 3
n 3
(sau Nop(n) ∈ O(n3) ).
Ca urmare a aplicării algoritmului se obţine sistemul echivalent:
x1 + a )1(2,1 x2 + a )1(
3,1 x3 +⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )1(n,1 xn = a )1(
1n,1 +
x2 + ( )a 23,2 x3⋅+ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )2(
n,2 xn = ( )a 21n,2 +
⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
xn = ( )a n1n,n +
Rezolvarea acestui sistem se poate face foarte uşor de la sfârşit spre început:
xn = ( )a n1n,n +
( ) ( )∑+=
+ −=n
1ijj
ij,i
i1n,ii xaax
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;
Metode Numerice
69
> 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]);
:= a1
1 1 1
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
Mădălina Roxana Buneci
70
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 ( )kk,ka (î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]);
Metode Numerice
71
:= a2
1 1 1
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
Mădălina Roxana Buneci
72
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 a )1(2,1 a )1(
3,1 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )1(n,1 a )1(
1n,1 + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )1(n2,1
A(n)= 0 1⋅ ( )a 23,2 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ a )2(
n,2( )a 2
1n,2 + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ( )a 2n2,2
⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
0 0 0 ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅1 ( )a n1n,n + ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ ( )a n
n2,n
Dacă B = A-1, atunci coeficienţii lui B pot fi determinaţi cu formulele:
bn,k= a )n(kn,n + , 1 ≤ k ≤ n
bi,k= a )i(kn,i + - ba j,i
n
1ij
)i(j,i∑
+=
, 1 ≤ i ≤ n-1, 1 ≤ k ≤ n
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;
Metode Numerice
73
> 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
se realizează cu ajutorul comenzilor
> a3:=matrix(3,3,[1,1,1,1,2,3,2,1,2]);
:= a3
1 1 1
1 2 3
2 1 2
> inversa(a3);
1 1 1
1 2 3
2 1 2
Mădălina Roxana Buneci
74
12
-12
12
2 0 -1
-32
12
12
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);
12
-12
12
2 0 -1
-32
12
12
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ă
cond(A) =
1
x 0x 0
Ax Axmax min
x 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
Metode Numerice
75
• cond(D) = 1
i i1 i n1 i n
max min−
≤ ≤≤ ≤
α α
pentru orice matrice diagonală
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
y≤ ||A-1||,
ş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
Mădălina Roxana Buneci
76
x x *
x
− ≤ cond(A)
E
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
||x*- x || = || A-1(b- b )|| ≤ || A-1|| ⋅|| (b- b )|| =|| A-1|| ⋅|| (b- b )|| Ax *
b ≤
≤ || A-1|| ˆb b
b
−||A|| ||x*||,
de unde
x x *
x *
− ≤ cond(A)
ˆb b
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 *
x *
− ≤ cond(A)εmach.
Metode Numerice
77
Î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.
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]);
:= A
888.445 887.112
887.112 885.781
> A1:=matrix(2,2,[888445/1000,887112/1000,887112/1000,
885781/1000]);
:= A1
177689200
110889125
110889125
8857811000
> cond(A1);
3152602660249
problemă bine condiţionată problemă rău condiţionată
Mădălina Roxana Buneci
78
> 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 109 -0.888888888888889 109
> Digits:=10;
:= Digits 10
> linsolve(A,b);
[ ],0.2496249066 107 -0.2500000000 107
> 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 1013
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 )
Metode Numerice
79
A-1r = x* - x
|| x* - x || = ||A-1r|| ≤ ||A-1|| ||r|| =cond(A) 1
|| A ||||r|| =
= cond(A) || x* ||
|| A |||| x* ||||r|| ≤ cond(A)
|| x* ||
|| Ax* ||||r|| =
= cond(A) || x* ||
|| b ||||r||.
de unde rezultă
ˆx * x
x *
− ≤ cond(A)
r
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
Mădălina Roxana Buneci
80
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]);
:= A
1 1.001
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 ||ˆ|| A |||| x ||
≤ || E ||
|| 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
Metode Numerice
81
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ţă,
k
klim x→∞
= x* pentru orice termen iniţial x0 dacă şi numai dacă k 0
klim G e→∞
=0 pentru
Mădălina Roxana Buneci
82
orice e0, sau echivalent k
klim G→∞
=0. Este cunoscut că k
klim G→∞
=0 dacă şi numai
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
Metode Numerice
83
IV.4.2. Metoda Jacobi
Metoda Jacobi se caracterizează prin desfacerea
N = D, P = - (L+R)
11
1
a 0 0 …… 0 0
N-1 = 0 22
1
a 0 ……0 0
……………………..
0 0 0 ……0 nn
1
a
Dacă G = N-1P, atunci coeficienţii matricei G = (gij)1≤i,j≤n sunt:
0, i = j
gi,j = i,i
j,i
a
a− , i ≠ j.
Ş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
11
1
a 0 0 …… 0 0
0 22
1
a 0 ……0
……………………..
0 0 0 ……0 nn
1
a
0 -a1,2 -a1,3 …… -a1,n-1 -a1,n -a2,1 0 -a2,3 …… -a2,n-1 -a2,n :...................................................... -an,1 -an,2 -an,3 …… -an,n-1 0
N-1P =
Mădălina Roxana Buneci
84
ρ(G) ≤ min(1
G ,∞
G ), şi ca urmare pentru a asigura convergenţa şirului (xk)k este
suficient ca min(1
G ,∞
G )<1.
Calculăm 1
G :
1G = max∑
=
n
1ij,ig ,1 ≤j≤n
= max∑≠=
n
ji1i i,i
j,i
a
a, 1 ≤j≤n
Calculăm ∞
G :
∞G = max∑
=
n
1jj,ig ,1 ≤i≤n
= max∑≠=
n
ij1j i,i
j,i
a
a,1 ≤i≤n.
Dacă 1
G < 1 sau ∞
G <1, atunci ρ(G) <1. Dar condiţia ∞
G <1 este echivalentă cu
∑≠=
n
ij1j i,i
j,i
a
a < 1 pentru orice i, 1 ≤i≤n
| ai,i | >∑≠=
n
ji1i
j,ia pentru orice i, 1 ≤i≤n
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
0k0k0kk eGeGeGe ≤≤≤
Fie n1,∞ = min(1
G ,∞
G ) şi fie ε > 0 dat. Vom considera xk este o aproximaţie
satisfăcătoare pentru soluţia exactă a sistemului dacă
(n1,∞)k < ε.
Metode Numerice
85
ceea ce este echivalent cu
k ≥ ( )
( ) 1nln
ln
,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,
k 1ix + =
nk
i, j jj 1
g x=∑ + i
i,i
b
a=
nk
i, j jj 1j i
g x=≠
∑ - i
i,i
b
a=
ni, j k
ji,ij 1
j i
ax
a=≠
−∑ + i
i,i
b
a.
În consecinţă, şirul (xk)k construit prin metoda Jacobi este:
x0 dat
k 1ix + =
i,i
1
a(bi -
nk
i, j jj 1j i
a x=≠
∑ ), i =1,2,…,n, k≥0.
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
k = ( )( ) 1nln
epsln
,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;
Mădălina Roxana Buneci
86
> 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]);
:= a
3 1 1
1 5 1
-1 1 8
Metode Numerice
87
> 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));
, ,
19195311920000
-80011718000000
5119999725600000
> 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.
Şirul (xk)k construit prin metoda Gauss-Seidel este definit prin
Nxk+1 = P xk + b, k ≥ 0, x0 dat
Deci
k 11x + =
1,1
1
a((Pxk)1 + b1) =
1,1
1
a(
nk
1, j jj 1
P x=∑ + b1) =
1,1
1
a(
nk
1, j jj 2
P x=∑ + b1) =
a1,1 0 0 … 0 0
a2,1 a2,2 0 … 0 0
:..................................................
an,1 an,2 an,3 …… an,n-1 ann
k 11x +
k 12x +
k 1nx +
= Pxk + b
Mădălina Roxana Buneci
88
= 1,1
1
a(
nk
1,j jj 2
a x=
−∑ + b1) = 1,1
1
a(b1 -
nk
1,j jj 2
a x=∑ )
şi pentru orice i , 2 ≤ i ≤n, avem
k 1ix + =
i,i
1
a((Pxk)i + bi -
i 1k 1
i, j jj 1
a x−
+
=∑ ) =
i,i
1
a (
nk
i, j jj 1
P x=∑ + bi -
i 1k 1
i, j jj 1
a x−
+
=∑ )
= i,i
1
a(
nk
i, j jj i 1
P x= +∑ + bi -
i 1k 1
i, j jj 1
a x−
+
=∑ )
= i,i
1
a(
nk
i, j jj i 1
a x= +
−∑ + bi - i 1
k 1i, j j
j 1
a x−
+
=∑ )
= i,i
1
a( bi -
nk
i, j jj i 1
a x= +∑ -
i 1k 1
i, j jj 1
a x−
+
=∑ )
În consecinţă, şirul (xk)k construit prin metoda Gauss-Seidel este:
x0 dat
pentru k≥0, k 11x + =
1,1
1
a(b1 -
nk
1, j jj 2
a x=∑ )
k 1ix + =
i,i
1
a( bi -
nk
i, j jj i 1
a x= +∑ -
i 1k 1
i, j jj 1
a x−
+
=∑ ), i =2,3,…,n
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
k = ( )( ) 1
PNln
epsilonln1
+
∞
−.
Metode Numerice
89
> 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:
Mădălina Roxana Buneci
90
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]);
:= a
3 1 1
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));
17038933299767160885500343322731703893329976655609856000000000
-170389332997668792871267240303170389332997665560985600000000
, ,
90874310932088608517489022451014543715546604414959616000000000
> 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.
Metode Numerice
91
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),
unde ( )
h 0
o hlim
h→=0. Ca urmare,
f( x ) - f(x*) - o(h) = f ′ (x*)( x -x*)
şi
x -x*≈≤
1
f (x*)′(f( x ) - f(x*)).
Deci factorul de condiţionare absolut al problemei f(x) = 0 este 1
f (x)′. Dacă ε > 0 şi
x este un număr real cu proprietatea că |f( x )| ≤ ε atunci
Mădălina Roxana Buneci
92
| x - x*| ≤ ε 1
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 )|
indică reziduu corespunzător lui x ). Dacă problema este bine condiţionată (1
f (x*)′
mic), atunci reziduu mic implică eroare absolută | x -x*| mică.
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
r
k
1k
k e
elim +
∞→ = C.
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ă
problemă bine condiţionată problemă rău condiţionată
Metode Numerice
93
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
• se determină mijlocul c = 2
ba + al intervalului (a,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]
• 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
intervalului In, avem Ln = 1
2Ln-1 = ... =
n
1
2L0 =
n
1
2|b-a|. Ca urmare Ln < ε dacă şi
numai dacă n
1
2|b-a| < ε sau echivalent n >
( )( )
ln b a
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
ε).
Mădălina Roxana Buneci
94
nmax:=( )
( )ln b a
ln 2
− ε
+1;
pentru j = 0, 1, ...., nmax execută
c: =2
ba + ;
dacă f(c) = 0 atunci j : = nmax +1
altfel dacă f(c)f(a)<0 atunci b : = c;
altfel a : = c;
Rata convergenţei pentru metoda bisecţiei este liniară (r = 1, C = 1
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);
Metode Numerice
95
> 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);
Mădălina Roxana Buneci
96
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 − − x8 3 x 3
> bisectie(f,1,3/2,10^(-3));
52074096
> 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]
Metode Numerice
97
• dacă f(c) =0 s-a determinat o rădăcină a ecuaţiei f(x) = 0.
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
AB: ( )( ) ( )afbf
afy
ab
ax
−−
=−−
Dacă C(c,0) =AB ∩ Ox, atunci
c = a - ( ) ( )afbf
ab
−− 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:
x0 = a, xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b), dacă f(a)f”(a)<0
şi
x0 = b, xn = xn-1 - ( )
( ) ( )afxf
xf
1n
1n
−−
− (xn-1-a), dacă f(b)f”(b)<0
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:
b c1 c2 a
Mădălina Roxana Buneci
98
|x*-xn| ≤ ( )
1
n
m
xf
|x*-xn| ≤ 1nn1
11 xxm
mM−−
−
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
xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b) = xn-1 - ( )( )
n 1
n 1
f x
f d−
−′ > xn-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
xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b)
obţinem
x = x - ( )
( ) ( )f x
f x f b−
( x -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
x0 = b, xn = xn-1 - ( )
( ) ( )afxf
xf
1n
1n
−−
− (xn-1-a)
este strict descrescător către x*.
Metode Numerice
99
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ă
|x* - xn| =( )( )
n
n
f x
f d′ ≤
( )1
n
m
xf.
Dacă presupunem că f(a)f”(a)<0 şi
xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b)
atunci
- f(xn-1) = ( ) ( )n 1
n 1
f x f b
x b−
−
−
−(xn – xn-1),
şi ţinând cont că f(x*) = 0,
f(x*) - f(xn-1) = - f(xn-1) = ( ) ( )n 1
n 1
f x f b
x b−
−
−
−(xn – xn-1).
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*) - f(xn-1) = ( ) ( )n 1
n 1
f x f b
x b−
−
−
−(xn – xn-1).
obţinem
(x* - xn-1) f ′ (ηn) = f ′ (ζn) (xn – xn-1)
şi deci
(x* - xn) = (x* - xn-1) + (xn-1 - xn) = ( )( )
n
n
f
f
′ ζ
′ η (xn – xn-1) - (xn – xn-1)
= (( )( )
n
n
f
f
′ ζ
′ η - 1) (xn – xn-1),
Mădălina Roxana Buneci
100
de unde | x* - xn | = ( ) ( )
( )n n
n
|f f |
|f |
′ ′ζ − η
′ η | xn – xn-1| ≤ 1 1
1
M m
m
−| xn – xn-1|, deoarece
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
x0 = a, xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b), dacă f(a)f”(a)<0
şi
x0 = b, xn = xn-1 - ( )
( ) ( )afxf
xf
1n
1n
−−
− (xn-1-a), dacă f(b)f”(b)<0
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
Metode Numerice
101
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.
x0 = a x1 x2 b
1.2. f” < 0, f(a) > 0
a x2 x1 x0 = b
2.1. f” > 0, f(b) < 0
Mădălina Roxana Buneci
102
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
x0 = a, xn = xn-1 - ( )
( ) ( )bfxf
xf
1n
1n
−−
− (xn-1-b), dacă f(a)f”(a)<0
x0 = b, xn = xn-1 - ( )
( ) ( )afxf
xf
1n
1n
−−
− (xn-1-a), dacă f(b)f”(b)<0
iar N este cel mai mic număr natural cu proprietatea că |xN –xN-1| < ε
a x2 x1 x0 = b
2.2 f” < 0, f(b) > 0
Metode Numerice
103
dacă f(a) f”(a) < 0 execută
x1: = b ; x2: = a;
cât timp | x1-x2 | ≥ ε execută
x1: = x2;
x2 : = x1 - ( )
( ) ( )f x1
f x1 f b−(x1-b),
altfel
x1: = a ; x2: = b;
cât timp | x1-x2 | ≥ ε execută
x1: = x2;
x2 : = x1 - ( )
( ) ( )f x1
f x1 f a−(x1-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;
Mădălina Roxana Buneci
104
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 − − x8 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
Metode Numerice
105
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
( )n-1 n-1 n-1y- f(x ) f (x ) x-x
y 0
′=
=
În consecinţă ,
xn = xn-1 - ( )( )
n 1
n 1
f x
f x−
−′.
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:
xn = xn-1 - ( )( )
n 1
n 1
f x
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:
|x* - xn| ≤ ( )
1
n
m
xf
|x* - xn| ≤ ( )21nn
1
2 xxm2
M−−
unde m1 = ( )x [a,b]
f xinf∈
′ şi M2 = ( )x [a,b]
f xsup∈
′′ .
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
Mădălina Roxana Buneci
106
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
0 = f(x*) = f(xn) + nx * x
1!
− f ′ (xn) +
( )2nx * x
2!
−f”(ζn)
Din faptul că f”(ζn) > 0, rezultă că
0 > f(xn) + nx * x
1!
− f ′ (xn)
de unde
xn+1 = xn - ( )( )
n
n
f x
f x′> xn + x* - xn = x*.
Ca urmare xn > x* pentru orice n ≥0. Deoarece f este strict crescătoare,
f(xn) > f(x*) = 0,
şi în consecinţă,
xn+1 = xn - ( )( )
n
n
f x
f x′ < xn pentru orice n ≥ 0.
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
xn = xn-1 - ( )( )
n 1
n 1
f x
f x−
−′
obţinem
x = x - ( )( )
f 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.
Metode Numerice
107
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ă
|x* - xn| =( )( )
n
n
f x
f d′ ≤
( )1
n
m
xf.
Aplicând formula lui Taylor rezultă că există ηn între xn şi xn-1 astfel încât
f(xn) = f(xn-1) + n n 1x x
1!−−
f ′ (xn-1) + ( )2
n n 1x x
2!−−
f”(ηn)
Ţinând cont şi de faptul că xn = xn-1 - ( )( )
n 1
n 1
f x
f x−
−′ sau echivalent
xn - xn-1 = - ( )( )
n 1
n 1
f x
f x−
−′,
obţinem
f(xn) = f(xn-1) - ( )( )
n 1
n 1
f x
f x−
−′f ′ (xn-1) +
( )2n n 1x x
2!−−
f”(ηn)
= ( )2
n n 1x x
2!−−
f”(ηn).
Ca urmare
|x* - xn| ≤ ( )
1
n
m
xf=
1
1
m
( )2n n 1x x
2!−−
|f”(ηn)| ≤ 2
1
M
2m(xn – xn-1)
2.
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ă
xn = xn-1 - ( )( )
n 1
n 1
f x
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
Mădălina Roxana Buneci
108
0 = f(x*) = f(xn) + nx * x
1!
− f ′ (xn) +
( )2nx * x
2!
−f”(ζn),
de unde
x* - xn = - ( )( )
n
n
f x
f x′ -
( )( )
n
n
f
f x
′′ ζ
′1
2(x*-xn)
2,
sau echivalent
x* - xn + ( )( )
n
n
f x
f x′= -
( )( )
n
n
f
f x
′′ ζ
′1
2(x*-xn)
2.
Aşadar
x* - xn+1 = - ( )( )
n
n
f
f x
′′ ζ
′1
2(x*-xn)
2,
şi trecând la limită obţinem
n 12n n
| x * x |lim
| x * x |+
→∞
−
−=
( )( )
| f x * |
2 | f x * |
′′
′≤ 2
1
M
2m
unde m1 = ( )x [a,b]
f xinf∈
′ şi M2 = ( )x [a,b]
f xsup∈
′′ .
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
xn = xn-1 - ( )( )
n 1
n 1
f x
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)
Metode Numerice
109
Cazul 2. f” < 0 (f strict concavă)
2.1. f ′ > 0 (f strict crescătoare)
2.2. f ′ < 0 (f strict descrescătoare)
x2 x1 x0
1.1. f’ > 0, f” > 0
x0 x1 x2
1.2. f’ < 0, f” > 0
Mădălina Roxana Buneci
110
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
x0 x1 x2
2.1. f’ > 0, f” < 0
x2 x1 x0
2.2. f’ < 0, f” < 0
Metode Numerice
111
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;
x2 : = x1 - ( )( )1xf
1xf′
;
cât timp | x2 – x1 |2 ≥ ε execută
x1 := x2;
x2 : = x1 - ( )( )1xf
1xf′
;
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;
x2 : = x1 - ( )( )1xf
1xf′
;
n : = 1;
Mădălina Roxana Buneci
112
cât timp (| x2 – x1 |2 ≥ ε ) şi (n ≤ Nmax) execută
x1 := x2;
x2 : = x1 - ( )( )1xf
1xf′
;
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);
Metode Numerice
113
> plot(exp(x)+2*x+1,x=-2..2,color=black);
> f1:=(x->exp(x)+2*x+1);
:= f1 → x + + eeee 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));
Mădălina Roxana Buneci
114
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 108
-0.5376704605 108
,Numar de termeni calculati 10
:= xN -0.5376704605 108
> f2(xN);
-0.5376704787 108
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
Metode Numerice
115
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
( )i
j 1 i, j n
fx
x≤ ≤
∂ ∂
.
Aplicând formula lui Taylor rezultă că
f( x ) = f(x*) + δJf(x*)h + o(δ),
unde ( )
0
|| o ||limδ→
δ
δ=0. Ca urmare,
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ă
Mădălina Roxana Buneci
116
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
k 1
k rk
|| e ||lim
|| e ||
+
→∞ = C.
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
Metode Numerice
117
1. d(x*, xn) ≤ q
1 q−d(xn, xn-1)
2. d(x*, xn) ≤ nq
1 q−d(x1, x0)
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)
= k1 q
1 q
−−
d(xn+1, xn).
Deci
d(xn+k, xn) ≤ k1 q
1 q
−−
d(xn+1, xn) (1).
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ă
d(xn+k, xn) ≤ k1 q
1 q
−−
d(xn+1, xn) ≤ k1 q
1 q
−−
qn d(x1, x0) ≤1
1 q−qn d(x1, x0).
Ca urmare
d(xn+k, xn) ≤ 1
1 q−qn d(x1, x0) (2).
Mădălina Roxana Buneci
118
Fie ε>0. Deoarece q ∈ (0,1), n
nlim q→∞
= 0, şi de aici rezultă că există nε ∈N astfel
încât qn < ε1 0
1 q
d(x , x )
−. Ţinând cont de relaţia (2) obţinem
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* = nnlim x→∞
. Arătăm că x* este
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
nnlim x→∞
= n 1nlim f (x )−→∞
= n 1n
f ( lim x )−→∞
,
de unde ţinând cont că x* = nnlim x→∞
= n 1nlim x −→∞
rezultă
x* = f(x*),
adică x* este punct fix pentru f.
Din relaţia (1) rezultă
d(xn+k, xn) ≤ k1 q
1 q
−−
d(xn+1, xn) ≤.k1 q
1 q
−−
q d(xn, xn-1)
şi trecând la limită cu k → ∞, se obţine
d(x*, xn) ≤ q
1 q−d(xn, xn-1).
În continuare folosind şi faptul că d(xn, xn-1) ≤ qn-1d(x1, x0) se obţine
d(x*, xn) ≤ nq
1 q−d(x1, x0).
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
Metode Numerice
119
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
1. ||x*- xn|| ≤ q
1 q−||xn - xn-1||
2. ||x*- xn|| ≤ nq
1 q−||x1- x0||
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 1x2x − ≥ε execută
x1:=x2;
x2:=f(x1);
Mădălina Roxana Buneci
120
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 ( 1x2x − ≥ε) 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.
Metode Numerice
121
Interpretare geometrică: f: I → I contracţie, I ⊂ R interval închis
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ă x (a,b)
sup | f (x) |∈
′ < 1. Atunci f este contracţie.
Demonstraţie. Notăm q = x (a,b)
sup | f (x) |∈
′ . Avem q ∈ (0,1). Fie x, y ∈ [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 1x +
x0 x2 x4 x3 x1
y = f(x)
y = x
Mădălina Roxana Buneci
122
Fie f: [1,2] → [1,2], definită prin f(x) = 3 1x + . Avem f ′ (x) = 1
3 23
1
(x 1)+ şi deci
x (1,2)sup | f (x) |∈
′ = 1
3 3
1
4< 1
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) = 3n 1x 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(2
π)<0, ecuaţia x – cos(x) = 0 are exact o
rădăcină în intervalul [0, 2
π]. Fie f: [0,
2
π] → [0,
2
π], f(x) =
1
2( x +cos(x)). Avem
f ′ (x) = 1
2(1 – sin(x)) şi deci
x (0, 2)sup | f (x) |
∈ π′ =
1
2< 1
Ca urmare f este contracţie pe intervalul [0, 2
π]. Deci soluţia ecuaţiei poate fi aflată
ca limita şirului (xn)n, cu
xn = f(xn-1) =1
2( xn-1 +cos(xn-1)), x0∈[0,
2
π].
Procedura MAPLE de mai jos implementează metoda punctului fix pentru o
contracţie pe un interval închis al lui R.
Metode Numerice
123
> 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+ .
f2: [0, 2
π] → [0,
2
π], f2(x) =
1
2( x +cos(x))
comparative cu aplicarea comenzii fsolve.
> f1:=x->(x+1)^(1/3);
:= f1 → x ( ) + x 1( )/1 3
> punctfix(f1,1.5,10^(-5));
1.324719474
> fsolve(f1(x)=x,x);
1.324717957
> f2:=x->1/2*(x+cos(x));
:= f2 → x + 12
x12
( )cos x
> 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);
Mădălina Roxana Buneci
124
> 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* - 2
ε, x* +
2
ε].
Deoarece | f ′ | este continuă, există ζ ∈ I astfel încât x Isup | f (x) |
∈′ = | f ′ (ζ)| <1. Dacă
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* - 2
ε, x* +
2
ε] = I.
Metode Numerice
125
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
g:J0→R, definită prin g(x) = x – 1
f (x)′f(x). Avem
g(x*) = x* - 1
f (x*)′ f(x*) = x*,
deci x* punct fix pentru g. Cum
g′ (x) = 1 - 2
2
f (x) f (x)f (x)
f (x)
′ ′′−
′=
2
f (x)f (x)
f (x)
′′
′,
rezultă că
| g′ (x*)| = ( ) ( )
( )2*xf
*xf*xf
′
′′=0 < 1.
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ă
xn = xn-1 – n 1
1
f (x )−′f(xn-1), 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ă x Ssup || Jf (x) ||
∈< 1, unde Jf(x) este
jacobianul funcţiei f în punctul x, adică matricea
Mădălina Roxana Buneci
126
( )i
j 1 i, j m
fx
x≤ ≤
∂ ∂
.
Atunci f este contracţie.
Demonstraţie. Notăm q =x Ssup || Jf (x) ||
∈. Avem q ∈ (0,1). Fie x, y ∈S.
Aplicând teorema creşterilor finite , rezultă că
||f(x) – f(y)|| ≤ [0,1]
sup || Jf (x (y x)) ||θ∈
+ θ − ||x – y|| ≤x Ssup || Jf (x) ||
∈||x – y|| ≤
≤ 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
x Ssup || Jf (x) ||
∈= ||Jf (ζ)|| <1.
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*)
Metode Numerice
127
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):
Jf(x) = ( )mj,i1j
i xx
f
≤≤
∂
∂
Î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
Mădălina Roxana Buneci
128
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 = ( )r*,xB = 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
( ) ( ) ( )n 1m i n n 1 n 1
j j ijj 1
f xx x f x
x
−− −
=
∂− = −
∂∑ , 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 n 1 n n 1k k kx x x− −∆ = − , 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
parţiale ( )xx
f
j
i
∂
∂, componentele matricei Jf(x) (dacă se utilizează un mediu de
programare simbolică cum este MAPLE aceasta nu e o dificultate majoră). O
Metode Numerice
129
posibilitate de eliminare a acestei dificultăţi este aproximarea derivatelor parţiale
prin diferenţe finite
( ) ( ) ( )( ) ( )xxfehxfh
1x
x
fiji
jiji
ijj
i ∆=−+≈∂
∂
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:
my , y x r∈ − <R
şi cu ( )B x, r închiderea acestei mulţimi, adică
my , y x r∈ − ≤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 ( )2d f 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
Mădălina Roxana Buneci
130
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
nn 22
x x * qM
µ− ≤
( ) 2n n n n 11 Mx x * f x x x
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
( 2n n 1x x − ∞− < 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
Metode Numerice
131
> 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 [ ], − x2 y − x3 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
Mădălina Roxana Buneci
132
[ ],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 [ ], + − x2 y2 1 − x3 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
Metode Numerice
133
[ ],-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 x2 2 y z 0.1 − + + y y2 3 x z 0.2 + + − z z2 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
Mădălina Roxana Buneci
134
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
( )2d f 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
n n 0x x * q x x *− ≤ −
( ) 2n n n 1 n1 Lx x * f x x x+− ≤ ≤ −
µ µ.
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
n n 1x x − ∞− < 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;
Metode Numerice
135
> 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 [ ], − x2 y − x3 5 y
> mnewtonsimplif(f,vector([6,0.1]),vector([6,0.1]),10^(-5),20);
[ ],5.250000002 27.00000000
Mădălina Roxana Buneci
136
[ ],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 [ ], + − x2 y2 1 − x3 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
Metode Numerice
137
[ ],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 x2 2 y z 0.1 − + + y y2 3 x z 0.2 + + − z z2 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
Mădălina Roxana Buneci
138
[ ], ,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
( )2d f 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,
abM < 2
1
( )r,xB 0 ⊂ G, unde r = 1
(1 1 2abM)aM
− − .
Atunci f(x) = 0 are o unică soluţie x* în ( )r,xB 0 , ş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
nn 1
bx x *
2 −− ≤ , n ≥ 1.
Metode Numerice
139
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-1X
n-1 + … + a1X + a0
Relaţiile Pn(xi) = yi, i = 0, 1, …, n conduc la sistemul:
Mădălina Roxana Buneci
140
a0 + a1x0 + a220x + … + an
n0x = y0
a0 + a1x1 + a221x + … + an
n1x = y1
(*)
a0 + a1xn + a22nx + … + an
nnx = yn
Determinatul acestui sistem este
1 x0 20x … n
0x
∆ = 1 x1 21x … n
1x = ( )∏≤<≤
−nij0
ji xx
1 xn 2nx … n
nx
(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
clasă Cn+1. 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(x) – Pn(x) = ( )
(n 1)xf ( )
n 1 !
+ ζ
+ (x – x0) (x – x1) … (x – xn).
În consecinţă, oricare ar fi x ∈ [a, b], avem:
Metode Numerice
141
| f(x) – Pn(x) | ≤[ ]
( ) ( )
( )
n 1
t a,bf tsup
n 1 !
+
∈
+ |(x – x0) (x – x1) … (x – xn)|.
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( x ) - Pn( x ) = 0 = ( )
(n 1)f ( )
n 1 !
+ ζ+
( x – x0) ( x – x1) … ( x – xn)
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)
c = n
0 1 n
f (x) P (x)
(x x )(x x )...(x x )
−
− − −.
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ă (n 1)nP (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
Mădălina Roxana Buneci
142
g(n+1)(x) = f(n+1)(x) - (n 1)nP (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
c = ( )
(n 1)xf ( )
n 1 !
+ ζ
+.
Cum pe de altă parte avem
c = n
0 1 n
f (x) P (x)
(x x )(x x )...(x x )
−
− − −.
Rezultă că
n
0 1 n
f (x) P (x)
(x x )(x x )...(x x )
−
− − − =
( )
(n 1)xf ( )
n 1 !
+ ζ
+,
sau echivalent,
f( x ) – Pn( x ) = ( )
(n 1)xf ( )
n 1 !
+ ζ
+ (x – x0) (x – x1) … (x – xn).
În plus,
|f( x ) – Pn( x )| ≤ [ ]
( ) ( )
( )
n 1
t a,bf tsup
n 1 !
+
∈
+ |(x – x0) (x – x1) … (x – xn)|.
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]:
xi = a + ih, i = 0, 1, ...n, h = b a
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:
Metode Numerice
143
| f(x) – Pn(x) | ≤[ ]
( ) ( )
( )
n 1
t a,bf tsup
n 1 !
+
∈
+ |(x – x0) (x – x1) … (x – xn)|.
Pentru orice x ∈[a, b] există i astfel încât x ∈ [xi, xi+1] şi ca urmare
|(x – xi) (x – xi+1)| ≤ h
2
h
2 =
2h
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
|(x – x0) (x – x1) … (x – xn)| ≤ n 1h
4
+n!,
şi deci eroarea de interpolare satisface:
| f(x) – Pn(x) | ≤ n 1h
4(n 1)
+
+ [ ]
( ) ( )n 1
t a,bf tsup +
∈.
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:
xi = 2i 1
cos2n 2
+ π + , 0 ≤ i ≤ n.
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:
Mădălina Roxana Buneci
144
Nodurile Cebîşev au proprietatea că
|(x – x0) (x – x1) … (x – xn)| ≤ n
1
2
pentru orice x∈ [-1, 1]. Se poate arăta că pentru oricare alte noduri ci, i=0, ...,n.
x [ 1,1]sup
∈ −|(x – c0) (x – c1) … (x – cn)| ≥ n
1
2.
Nodurile Cebîşev pot fi scalate şi translatate pentru a putea fi folosite pe un interval
oarecare [a, b]:
xi = b a
2
− 2i 1cos
2n 2
+ π + +
b a
2
+, 0 ≤ i ≤ n.
Astfel în cazul nodurilor Cebîşev eroarea de interpolare este
| f(x) – Pn(x) | ≤ n 1
2n 1
(b a)
2 (n 1)!
+
+−
+ [ ]
( ) ( )n 1
t a,bf tsup +
∈.
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).
Metode Numerice
145
Cum li(xi) = 1, rezultă
Ai = ( )( ) ( )( ) ( )i 0 i 1 i i 1 i i 1 i n
1
x x x x .... x x x x ... x x− +− − − − −,
şi ca urmare
li(x) = ( )( ) ( )( ) ( )
( )( ) ( )( ) ( )0 1 i 1 i 1 n
i 0 i 1 i i 1 i i 1 i n
x x x x .... x x x x ... x x
x x x x .... x x x x ... x x− +
− +
− − − − −
− − − − −
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
Ln(x) = ( )( ) ( )( ) ( )( )( ) ( )( ) ( )
n0 1 i 1 i 1 n
ii 0 i 1 i i 1 i i 1 i ni 0
x x x x .... x x x x ... x xy
x x x x .... x x x x ... x x− +
− +=
− − − − −
− − − − −∑
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;
Mădălina Roxana Buneci
146
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);
74
> PLagrange([1,-1,3],[2,-5,-1],-1);
-5
> expand(PLagrange([1,-1,3],[2,-5,-1],X));
− + − 54
X2 72
X14
Metode Numerice
147
Considerăm funcţia f1: R → R definită prin f1(x) = xcos(x) şi nodurile x0=0,
x1= 2
3
π , x2 =
4
3
π şi x3 = 2π. Vom aplica procedura PLagrange pentru a determina
polinomul de interpolare P3 asociat nodurilor x0=0, x1= 2
3
π , x2 =
4
3
π şi x3 = 2π şi
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)];
:= x1
, , ,0
2 π3
4 π3
2 π
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
:= y1
, , ,0 −
π3
−2 π3
2 π
> expand(PLagrange(x1,y1,X));
− + 27 X3
16 π2
27 X2
8 πX
> with(plots):
> plot([f1(a),PLagrange(x1,y1,a)],a=0..2*Pi);
> plot([f1(a),PLagrange(x1,y1,a)],a=-Pi..3*Pi);
Mădălina Roxana Buneci
148
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
interpolare este dominată de 4h
162, unde h =
2
3
π
> f2:=x->sin(x)+cos(x);
:= f2 → x + ( )sin x ( )cos x
> x2:=[seq(2*Pi/3*i,i=0..3)];
:= x2
, , ,0
2 π3
4 π3
2 π
> y2:=[seq(f2(2*Pi/3*i),i=0..3)];
:= y2
, , ,1 −
32
12
− − 3
212
1
> expand(PLagrange(x2,y2,X));
− + + − + 27 X2
16 π2
27 X8 π
127 X3 3
16 π3
81 X2 3
16 π2
27 X 38 π
> plot(f2(a),PLagrange(x2,y2,a),a=0..2*Pi);
Metode Numerice
149
Considerăm funcţia f3: R → R definită prin f3(x) = 2
1
1 x+. Vom reprezenta grafic
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);
:= f3 → x1
+ 1 x2
> x4:=[seq(-1+2*i/3,i=0..3)];
:= x4
, , ,-1
-13
13
1
> 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)];
Mădălina Roxana Buneci
150
:= 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)];
:= x_3
, ,
, , ,-5
-53
53
5
, , , , , ,-5
-103
-53
053
103
5
, , , , , , , , ,-5
-359
-259
-53
-59
59
53
259
359
5
> y_3:=[seq([seq(evalf(f3(-5+10*i/(3*j))),i=0..3*j)],j=1..3)];
Metode Numerice
151
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);
Mădălina Roxana Buneci
152
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)];
Metode Numerice
153
x_5 [ ], , , , ,-5 -3 -1 1 3 5 [ ], , , , , , , , , ,-5 -4 -3 -2 -1 0 1 2 3 4 5, , :=
, , , , , , , , , , , , , , ,-5
-133
-113
-3-73
-53
-1-13
13
153
73
3113
133
5
> 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)];
Mădălina Roxana Buneci
154
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);
Metode Numerice
155
Fie f : [a, b] → R şi un şir de diviziuni ∆n = ( ( )n0x , ( )n
1x , …, ( )nnx ) ale
intervalului [a, b], n ≥ 0. Pentru fiecare n se construieşte polinomul de interpolare Pn
asociat nodurilor ( )n0x , ( )n
1x , …, ( )nnx şi valorilor ( )( )n
0f x , ( )( )n1f x , …, ( )( )n
nf x .
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,
L1,...,Ln asociate unor noduri ( )n0x , ( )n
1x , …, ( )nnx şi valorilor ( )( )n
0f x , ( )( )n1f x , …,
( )( )nnf x (cu exemplificări pentru f ∈ f1, f2, f3).
Mădălina Roxana Buneci
156
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);
Metode Numerice
157
> grafic_polinoame(f1,0,2*Pi,2,10);
> grafic_polinoame(f1,-Pi,3*Pi,1,10);
Mădălina Roxana Buneci
158
> grafic_polinoame(f1,-Pi,3*Pi,2,10);
> grafic_polinoame(f3,-3,3,1,10);
Metode Numerice
159
> grafic_polinoame(f3,-3,3,2,10);
> grafic_polinoame(f4,-1,1,1,10);
Mădălina Roxana Buneci
160
> grafic_polinoame(f4,-1,1,2,10);
Metode Numerice
161
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).
Mădălina Roxana Buneci
162
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
0 1 0f (x ) f (x ) f (x )∆ = −
20 1 0
2 1 1 0
2 1 0
f (x ) f (x ) f (x )
f (x ) f (x ) (f (x ) f (x ))
f (x ) 2f (x ) f (x )
∆ = ∆ − ∆
= − − −
= − +
3 2 20 1 0
3 2 1 0
f (x ) f (x ) f (x )
f (x ) 3f (x ) 3f (x ) f (x )
∆ = ∆ − ∆
= − + +
Se poate demonstra uşor prin inducţie că
( ) ( ) ( )( )n
in in
i 0
f x 1 C f x n i h=
∆ = − + −∑
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
ci+1 = i 1 i i 1i 1
y P (x )
(i 1)!h+ +
+−
+.
şi se poate arătă inductiv că
ci+1 = i 1
0i 1
f (x )
(i 1)!h
+
+
∆
+, i = 0, 1, ..., n-1.
Metode Numerice
163
Aşadar
( )[ ] ( )[ ] ( )[ ]
( )[ ]
2 31 2 30 0 0
n 0 0 0 02 3
nn0
0n
f (x ) f (x ) f (x )P (x) f (x ) x x x x x x ....
1!h 2!h 3!h
f (x )... x x
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ă
0x xt
h
−=
şi se ţine seama că
( )[ ] ( ) ( ) ( ) ( )
( )( ) ( )
i0 0 0 0 0
i
x x x x x x h x x 2h x x (i 1)h....
h h h hht t 1 t 2 .... t i 1
− − − − − − − − −=
= − − − +
pentru orice i = 1,2,…,n. Se obţine
n n 0
2 30 0 0
0
n0
P (x) P (x th)
f (x ) f (x ) f (x )f (x ) t t(t 1) t(t 1)(t 2)
1! 2! 3!
f (x ).... 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.
Mădălina Roxana Buneci
164
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)];
:= x1
, , ,0
2 π3
4 π3
2 π
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
:= y1
, , ,0 −
π3
−2 π3
2 π
Metode Numerice
165
> PNewton1(0,2*Pi/3,y1,X);
− + X2
3 X
−
3 X2 π
1
−
3 X2 π
2
4
> sort(expand(PNewton1(0,2*Pi/3,y1,X)));
− + 27 X3
16 π2
27 X2
8 πX
> 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);
Mădălina Roxana Buneci
166
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)
Metode Numerice
167
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:
( )[ ] ( )[ ] ( )[ ]
( )[ ]
2 31 2 30 n n
n n n n 1 n 22 3
nnn
1n
f (x ) f (x ) f (x )P (x) f (x ) x x x x x x
1!h 2!h 3!h
f (x ).... x x
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ă
nx xt
h
−=
Se obţine
Mădălina Roxana Buneci
168
n n n
2 3n n n
n
nn
P (x) P (x th)
f (x ) f (x ) f (x )f (x ) t t(t 1) t(t 1)(t 2)
1! 2! 3!
f (x ).... 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;
Metode Numerice
169
> 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)];
:= x1
, , ,0
2 π3
4 π3
2 π
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
:= y1
, , ,0 −
π3
−2 π3
2 π
> PNewton2(2*Pi,2*Pi/3,y1,X);
6 π 4 X9 ( ) − X 2 π
+
3 ( ) − X 2 π2 π
1
4− + +
3 ( ) − X 2 π
+
3 ( ) − X 2 π2 π
1
+
3 ( ) − X 2 π2 π
2
4 +
> sort(expand(PNewton2(2*Pi,2*Pi/3,y1,X)));
− + 27 X3
16 π2
27 X2
8 πX
> with(plots):
> plot([f1(a),pnewton2(2*Pi,2*Pi/3,y1,a)],a=0..2*Pi);
Mădălina Roxana Buneci
170
> plot([f1(a),PNewton2(2*Pi,2*Pi/3,y1,a)],a=-Pi..3*Pi);
Metode Numerice
171
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
j ii j
j i
f (x ) f (x )f (x , x ) , i j
x x
−= ≠
−
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:
j k i ji j k
k i
f (x , x ) f (x , x )f (x , x , x )
x x
−=
−
Cunoscând diferenţele divizate de ordinul m, diferenţele divizate de ordinul m+1 se
definesc prin:
i i 1 i m i 1 i i m 1i 1 i i 1 i m
i m i 1
f (x , x ,..., x ) f (x , x ,..., x )f (x , x , x ,..., x )
x x+ + − + −
− + ++ −
−=
−
În consecinţă, polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor
y0,y1, …, yn poate fi scris sub forma
n 0 0 1 0 0 1 2 0 1
0 1 n 0 1 n 1
P (x) f (x ) f (x , x )(x x ) f (x , x , x )(x x )(x x )
.... f (x , x ,..., x )(x x )(x x )...(x x )−
= + − + − − +
+ + − − −
Mădălina Roxana Buneci
172
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);
Metode Numerice
173
> 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)];
:= x1
, , ,0
2 π3
4 π3
2 π
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
:= y1
, , ,0 −
π3
−2 π3
2 π
> PNewtond(x1,y1,X);
− + X2
27 X
− X
2 π3
− X
4 π3
16 π2
> sort(expand(PNewtond(x1,y1,X)));
− + 27 X3
16 π2
27 X2
8 πX
> with(plots):
> plot([f1(a),PNewtond(x1,y1,a)],a=0..2*Pi);
Mădălina Roxana Buneci
174
> plot([f1(a),PNewtond(x1,y1,a)],a=-Pi..3*Pi);
Metode Numerice
175
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) = x Xinf∈
d(x, x0)
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ă
0 0p x− = 0
x Xinf x x∈
− = 0 0
x Xinf x x , x x∈
− −
Mădălina Roxana Buneci
176
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,
rezultă că p =2
1 p1 + 2
1 p2∈ H0. Avem
||p-x0||2 = ||2
1 p1 + 2
1 p2-x0||2 =4
1 || p1 – x0 + p2 – x0||2 <
<4
1 || p1 – x0 + p2 – x0||2 +4
1 || p1 – x0 – (p2 – x0)||2
=2
1 (|| p1 – x0 ||2 + || p2 – x0||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
Metode Numerice
177
|| 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ă
0 < λ <
0 0 0
20
p x , y2
y
−
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.
Mădălina Roxana Buneci
178
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
0iixp =1.
Metode Numerice
179
Dacă f1 ~ f2 şi g1 ~ g2 atunci
( ) ( ) ( )n
i 1 i 1 ii 0
p x f x g x=∑ = ( ) ( ) ( )
n
i 2 i 2 ii 0
p x f x g x=∑ .
Introducem următorul produs scalar pe H
<[f], [g]> = ( ) ( ) ( )i
n
0iii xgxfxp∑
=
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
2[f ] = ( ) ( )∑=
n
0ii
2i xfxp .
Î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
F(x) = ( )∑=
ϕm
0iii xc .
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
0i
2i0ii xFxfxp = ( ) ( ) ( )( )∑
=∈
−n
0i
2iii
mHF
xFxfxpinf
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,
Mădălina Roxana Buneci
180
ceea ce revine la
<f, ϕj> = c0<ϕ0, ϕj> + c1<ϕ1, ϕj> + … + cm<ϕm, ϕj>, j = 0, 1,…,m.
Notăm
aij = <ϕi, ϕj> = ( ) ( ) ( )kj
n
0kkik xxxp ϕϕ∑
=
bj = <f, ϕj> = ( ) ( ) ( )kj
n
0kkk xxfxp ϕ∑
=
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.
Dacă ϕj(x) = xj, j =0, 1,…, m, m ≤ n, şi p≡
1n
1
+, atunci
F0(x) = m
ii
i 0
c x=∑ .
iar sistemul anterior devine
c0(n+1) + c1 ∑=
m
0iix + … + cm∑
=
m
0i
mix = ( )∑
=
m
0iixf
c0∑=
m
0iix + c1∑
=
m
0i
2ix + … + cm∑
=
+m
0i
1mix = ( )∑
=
m
0iii xfx
c0∑=
m
0i
mix + c1∑
=
+m
0i
1mix + … + cm∑
=
m
0i
m2ix = ( )∑
=
m
0ii
mi xfx
Acest sistem este numit sistemul normal al lui Gauss.
Metode Numerice
181
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
Mădălina Roxana Buneci
182
> 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
Metode Numerice
183
> 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)];
:= p1
, , , , ,
16
16
16
16
16
16
> desen_puncte(x1,y1);
Mădălina Roxana Buneci
184
> 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);
Metode Numerice
185
,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 x2 → x x3
> c3:=patrate_mici(x1,y1,p1,phi3);
,Factorul de conditionare 0.3034682363 107
,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);
Mădălina Roxana Buneci
186
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
Iar
0p(x ) ϕ0(x0) 0p(x ) ϕ1(x0) ... 0p(x ) ϕm(xn)
1p(x ) ϕ0(x1) 1p(x ) ϕ1(x1) ... 1p(x ) ϕm(x1)
np(x ) ϕ0(xn) np(x ) ϕ1(xn) ... np(x ) ϕm(xn)
X =
Metode Numerice
187
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.
0p(x ) f(x0)
1p(x ) f(x1)
np(x ) f(xn)
Y =
Mădălina Roxana Buneci
188
Metode Numerice
189
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:
Ta,n(x) = f(a) + ( )!1
a'f (x-a) + ( )!2
a"f (x-a)2 +( ) ( )
!n
af n
(x-a)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
în punctul a. Se demonstrează că ( )n
x,a
ax ax
Rlim
−→= 0. Dacă f este de clasă Cn+1, atunci
Mădălina Roxana Buneci
190
există u strict cuprins între a şi x (sau echivalent există θ ∈ (0, 1) astfel încât u = a+
θ(x – a)) cu proprietatea că
Ra,n(x) = ( ) ( )( )!1n
uf 1n
+
+
(x - a)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:
2 3i i xi i i i
f (x ) f (x ) f (w )f (x) f (x ) (x x ) (x x ) (x x )
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:
23i i
i 1 if (x ) f (x )h f (u)
f (x ) f (x ) ( h) ( h)1! 2! 3!−
′ ′′ ′′′= + − + + − (7.1)
2 2 3 3i ii 1 i
f (x ) f (x ) f (v)f (x ) f (x ) h h h
1! 2! 3!+′ ′′ ′′′
= + α + α + α (7.2)
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:
( )( )( )
2 2 3 3 3 2i 1 i i 1
i
f (v) f (u)f (x ) f x 1 f (x ) h h
3! 3!f (x )h 1
+ −′′′ ′′′
+ α − − α + α + α′ =
α α +
Putem aproxima valoarea derivatei funcţiei f în xi prin:
( )( )( )
2 2i 1 i i 1
i
f (x ) f x 1 f (x )f (x )
h 1
+ −+ α − − α′ ≈
α α +
cu eroarea:
22f (v) f (u)
h1 3! 1 3!
′′′ ′′′α αε = + α + α +
Metode Numerice
191
care este de ordinul lui h2 (O(h2)).
Adunând la a doua relaţie prima înmulţită cu α obţinem:
( )
( )
3 3 3i 1 i i 1
i 2
f (v) f (u)2 f (x ) 1 f (x ) f (x ) h h
3! 3!f (x )
h 1
+ −′′′ ′′′ + + α + α + α − α
′′ =α α +
.
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
( )( )( )
i 1 i i 1i 2
2 f (x ) 1 f (x ) f (x )f (x )
h 1
+ −− + α + α′′ ≈
α α +
cu eroarea
( )2h f (v) 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:
i 1 i 1i
f (x ) f (x )f (x )
2h+ −−
′ ≈
i 1 i i 1i 2
f (x ) 2f (x ) f (x )f (x )
h+ −− +
′′ ≈ .
Î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:
( )423 4i i i
i 1 if (x ) f (x )h f (x ) f (u)
f (x ) f (x ) ( h) ( h) h1! 2! 3! 4!−
′ ′′ ′′′= + − + + − + (7.3)
( )42 3 4i i i
i 1 if (x ) f (x ) f (x ) f (v)
f (x ) f (x ) h h h h1! 2! 3! 4!+
′ ′′ ′′′= + + + + (7.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ă:
( ) ( )4 44 4
i 1 i i 1
i 2
f (v) f (u)f (x ) 2f (x ) f (x ) h h
4! 4!f (x )h
+ −+ + + +′′ =
astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
Mădălina Roxana Buneci
192
i 1 i i 1i 2
f (x ) 2f (x ) f (x )f (x )
h+ −− +
′′ ≈
cu eroarea
( ) ( )4 42f (v) f (u)
h4! 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:
2 3i i xi i i i
f (x ) f (x ) f (w )f (x) f (x ) (x x ) (x x ) (x x )
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:
23i i
i 1 if (x ) f (x )h f (u)
f (x ) f (x ) h h1! 2! 3!+
′ ′′ ′′′= + + + (7.5)
2 2 3 3i ii 2 i
f (x ) f (x ) f (v)f (x ) f (x ) ( 1)h h ( 1) ( 1) h
1! 2! 3!+′ ′′ ′′′
= + α + + α + + α + (7.6)
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:
( )( )( )
( )
2 2i 2 i i 1
i
3 3 3 2
f (x ) f x 2 (1 ) f (x )f (x )
h 1
f (v) f (u)( 1) h h (1 )
3! 3!h 1
+ ++ α + α − + α′ = +
− α α +
′′′ ′′′− α + + + α
+− α α +
Putem aproxima valoarea derivatei funcţiei f în xi prin:
Metode Numerice
193
( ) ( )( )
2 2i 2 i 1 i
i
f (x ) (1 ) f (x ) 2 f xf (x )
h 1
+ +− − + α − α + α′ ≈
α α +
cu eroarea:
22f (v) ( 1) f (u) ( 1)
h3! 3!
′′′ ′′′α + α +ε = − α α
Adunând la relaţia (7.6) relaţia (7.5) înmulţită cu -(1+α) obţinem:
( )
( )
i 2 i i 1i 2
3 3 3
2
f (x ) f (x ) ( 1)f (x )f (x ) 2
h 1
f (v) f (u)( 1) h ( 1)h
3! 3!2h 1
+ ++ α − α +′′ =
α + α
′′′ ′′′− α + + α +
+α + α
.
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
( )i 2 i 1 i
i 2
f (x ) ( 1)f (x ) f (x )f (x ) 2
h 1+ +− α + + α
′′ ≈α α +
cu eroarea
2f (v) ( 1) f (u) 1h
3! 3!
′′′ ′′′α +ε = − + α α
Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
( )i 2 i 1 ii
f (x ) 4f x 3f (x )f (x )
2h+ +− + −
′ ≈
cu eroare de ordinul O(h2)
i 2 i 1 ii 2
f (x ) 2f (x ) f (x )f (x )
h+ +− +
′′ ≈ .
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
Mădălina Roxana Buneci
194
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:
23i i
i 1 if (x ) f (x )h f (u)
f (x ) f (x ) h h1! 2! 3!−
′ ′′ ′′′= − + − (7.7)
2 2 3 3i ii 2 i
f (x ) f (x ) f (v)f (x ) f (x ) ( 1)h h ( 1) ( 1) h
1! 2! 3!−′ ′′ ′′′
= − α + + α + − α + (7.8)
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:
( )( )( )
( )
2 2i 2 i i 1
i
3 2 3 3
f (x ) f x 2 (1 ) f (x )f (x )
h 1
f (u) f (v)h (1 ) ( 1) h
3! 3!h 1
− −+ α + α − + α′ = +
α α +
′′′ ′′′− + α + α +
+α α +
Putem aproxima valoarea derivatei funcţiei f în xi prin:
( ) ( )( )
2 2i i 1 i 2
i
2 f x (1 ) f (x ) f (x )f (x )
h 1
− −α + α − + α +′ ≈
α α +
cu eroarea:
22f (u) ( 1) f (v) ( 1)
h3! 3!
′′′ ′′′α + α +ε = − + α α
Adunând la relaţia (7.8) relaţia (7.7) înmulţită cu -(1+α) obţinem:
( )
( )
i 2 i i 1i 2
3 3 3
2
f (x ) f (x ) ( 1)f (x )f (x ) 2
h 1
f (v) f (u)( 1) h ( 1)h
3! 3!2h 1
− −+ α − α +′′ =
α + α
′′′ ′′′− α + + α +
+α + α
.
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
Metode Numerice
195
( )i i 1 i 2
i 2
f (x ) ( 1)f (x ) f (x )f (x ) 2
h 1− −−α − α + +
′′ ≈α α +
cu eroarea
2f (u) 1 f (v) ( 1)h
3! 3!
′′′ ′′′ α +ε = − α α
Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
( )i i 1 i 2i
3f (x ) 4f (x ) f xf (x )
2h− −− +
′ ≈
cu eroare de ordinul O(h2), şi
i 2 i 1 ii 2
f (x ) 2f (x ) f (x )f (x )
h− −− +
′′ ≈ .
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
i 1 i 1i
f (x ) f (x )f (x )
2h+ −−
′ ≈ O(h2)
i 1 i 1 i 1 i 2i
f (x ) 8f (x ) 8f (x ) f (x )f (x )
12h+ + − −− + − +
′ ≈ O(h4)
i 1 i i 1i 2
f (x ) 2f (x ) f (x )f (x )
h+ −− +
′′ ≈ O(h2)
i 2 i 1 i i 1 i 2i 2
f (x ) 16f (x ) 30f (x ) 16f (x ) f (x )f (x )
12h+ + − −− + − + −
′′ ≈ O(h4)
i 2 i 1 i 1 i 2i 3
f (x ) 2f (x ) 2f (x ) f (x )f (x )
2h+ + − −− + −
′′′ ≈ O(h2)
i 3 i 2 i 1 i 1 i 2 i 3i 3
f (x ) 8f (x ) 13f (x ) 13f (x ) 8f (x ) f (x )f (x )
8h
+ + + − − −− + − + − +′′′ ≈
O(h4)
Mădălina Roxana Buneci
196
Formulă de aproximare a derivatei prin diferenţe finite progresive Eroare
i 1 ii
f (x ) f (x )f (x )
h+ −
′ ≈ O(h)
( )i 2 i 1 ii
f (x ) 4f x 3f (x )f (x )
2h+ +− + −
′ ≈ O(h2)
i 2 i 1 ii 2
f (x ) 2f (x ) f (x )f (x )
h+ +− +
′′ ≈ O(h)
i 3 i 2 i 1 ii 2
f (x ) 4f (x ) 5f (x ) 2f (x )f (x )
h
+ + +− + − +′′ ≈
O(h2)
i 3 i 2 i 1 ii 3
f (x ) 3f (x ) 3f (x ) f (x )f (x )
h
+ + +− + −′′′ ≈
O(h)
i 4 i 3 i 2 i 1 ii 3
3f (x ) 14f (x ) 24f (x ) 18f (x ) 5f (x )f (x )
2h
+ + + +− + − + −′′′ ≈
O(h2)
Formulă de aproximare a derivatei prin diferenţe finite regresive Eroare
i i 1i
f (x ) f (x )f (x )
h−−
′ ≈ O(h)
( )i i 1 i 2i
3f (x ) 4f (x ) f xf (x )
2h− −− +
′ ≈ O(h2)
i i 1 i 2i 2
f (x ) 2f (x ) f (x )f (x )
h− −− +
′′ ≈ O(h)
i i 1 i 2 i 3i 2
2f (x ) 5f (x ) 4f (x ) f (x )f (x )
h
− − −− + −′′ ≈
O(h2)
i i 1 i 2 i 3i 3
f (x ) 3f (x ) 3f (x ) f (x )f (x )
h
− − −− + −′′′ ≈
O(h)
i i 1 i 2 i 3 i 4i 3
5f (x ) 18f (x ) 24f (x ) 14f (x ) 3f (x )f (x )
2h
− − − −− + − +′′′ ≈
O(h2)
Metode Numerice
197
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)];
Mădălina Roxana Buneci
198
:= x1
, , , , ,-1
-35
-15
15
35
1
> f1:=t->ln(1+t^2);
:= f1 → t ( )ln + 1 t2
> 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)];
:= z1
, , ,
-1517
-513
513
1517
> z2:=[seq((D@@2)(f1)(-1+2*i/5),i=1..4)];
:= z2
, , ,
200289
300169
300169
200289
> 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;
Metode Numerice
199
> 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)];
:= x2
, , , , ,1
75
95
115
135
3
> f2:=t->1/(1+t^2);
:= f2 → t1
+ 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);
Mădălina Roxana Buneci
200
[ ], , ,0.3760836312 0.2335787581 0.1390580162 0.08438073688
> z3:=[seq(D(f2)(1+2*i/5),i=1..4)];
:= z3
, , ,
-8752738
-11255618
-137510658
-162518818
> z4:=[seq((D@@2)(f2)(1+2*i/5),i=1..4)];
:= z4
, , ,
38125101306
68125297754
105625778034
1506251825346
> 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);
Metode Numerice
201
> 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);
Mădălina Roxana Buneci
202
> 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;
Metode Numerice
203
> 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;
Mădălina Roxana Buneci
204
> 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);
Metode Numerice
205
VII. 2. Extrapolare Richardson
Să presupunem că dorim să calculăm o cantitate L şi că avem
ϕ(h) = L + 2k2k
k 1
a h∞
=∑ .
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
D(n,0) = n
h
2
ϕ
şi definim
D(n,m) = ( ) ( )m
m
4 D n,m 1 D n 1, m 1
4 1
− − − −
−, 1 ≤ m ≤ n.
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
D(n,m) = L + 2k
k,m nk m 1
ha
2
∞
= +
∑ .
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)
Mădălina Roxana Buneci
206
Prima coloană a acestui tabel poate fi calculată direct cu definiţia: D(n,0) = n
h
2
ϕ
.
Î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:
ϕ(h) = f (x)′ + ( )
( )( )
2k 12k
k 1
fx h
2k 1 !
+∞
= +∑ .
Deci putem aplica extrapolare Richardson.Vom aproxima f (x)′ cu D(1,1). Dar
D(1,1) = ( ) ( )4D 1,0 D 0,0
3
− =
( )h4 h
2
3
ϕ − ϕ .
Ca urmare ( )h
4 h2
3
ϕ − ϕ reprezintă o aproximaţie a lui f (x)′ cu eroare de
ordinul O(h4), unde ( ) f (x h) f (x h)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.
Metode Numerice
207
4 4 0
2 30 0 0
0
40
P (x) P (x th)
f (x ) f (x ) f (x )f (x ) t t(t 1) t(t 1)(t 2)
1! 2! 3!
f (x )t(t 1)(t 2)(t 3)
4!
= +
∆ ∆ ∆= + + − + − − +
∆+ − − −
2 32 3 20 0 0
0
44 3 20
f (x ) f (x ) f (x )f (x ) t (t t) (t 3t 2t)
1! 2! 3!
f (x )(t 6t 11t 6t)
4!
∆ ∆ ∆= + + − + − + +
∆+ − + −
Notăm g(t) = P4(x0 +th). Avem
g′ (t) = 4P ′ (x0 +th)h
g′′ (t) = 4P ′′ (x0 +th)h2.
Pe de altă parte
( )2 3
20 00
43 20
f (x ) f (x )g t f (x ) (2t 1) (3t 6t 2)
2 6
f (x )(4t 18t 22t 6)
24
∆ ∆′ = ∆ + − + − + +
∆+ − + −
22 3
0 0 0
3 24
0
(2t 1) (3t 6t 2)f (x ) f (x ) f (x )
2 6
(2t 9t 11t 3)f (x )
12
− − += ∆ + ∆ + ∆ +
− + −+ ∆
iar
( )2 3
0 0
420
f (x ) f (x )g t 2 (6t 6)
2 6
f (x )(6t 18t 11)
12
∆ ∆′′ = + − +
∆+ − +
( )2
2 3 40 0 0
(6t 18t 11)f (x ) f (x ) t 1 f (x )
12
− += ∆ + ∆ − + ∆ .
În consecinţă avem:
f ′ (x)= f ′ (x0+ht) ≈1
h(
22 3
0 0 0(2t 1) (3t 6t 2)
f (x ) f (x ) f (x )2 6
− − +∆ + ∆ + ∆ +
Mădălina Roxana Buneci
208
+3 2
40
(2t 9t 11t 3)f (x )
12
− + −∆ )
f ′′ (x) = f ′′ (x0+ht) ≈ 2
1
h( ( )
22 3 4
0 0 0(6t 18t 11)
f (x ) f (x ) t 1 f (x )12
− +∆ + ∆ − + ∆ ).
Metode Numerice
209
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
valoarea aproximativă a integralei b
a
f (x) (x)dxρ∫ , unde ρ : [a, b]→R este o funcţie
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.
O formulă de cuadratură presupune aproximarea integralei b
a
f (x) (x)dxρ∫
printr-o combinaţie liniară de valori ale funcţiei f în punctele x0, x1, …, xn, i.e
b
a
f (x) (x)dxρ∫ ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn).
Fie Ln polinomul Lagrange asociat lui f şi punctelor considerate:
Ln(x) = ( ) ( )n
i ii 0
f x l x=∑ = ( )( ) ( )( ) ( )
( )( ) ( )( ) ( )
n0 1 i 1 i 1 n
ii 0 i 1 i i 1 i i 1 i ni 0
x x x x .... x x x x ... x xy
x x x x .... x x x x ... x x− +
− +=
− − − − −
− − − − −∑ .
Înlocuind f prin Ln, obţinem formula de aproximare
b b
na a
f (x) (x)dx L (x) (x)dxρ ≈ ρ∫ ∫
( ) ( ) ( ) ( )b b bn n
i i i ii 0 i 0a a a
f (x) (x)dx (x) f x l x dx f x (x)l x dx= =
ρ ≈ ρ = ρ∑ ∑∫ ∫ ∫
Mădălina Roxana Buneci
210
Deci notăm dacă Ai = ( )b
ia
(x)l x dxρ∫ , atunci b
a
f (x) (x)dxρ∫ ≈ A0 f(x0) + A1 f(x1) +
... + Anf(xn).
În cele ce urmează ne propunem să calculăm eroarea cu care
b
na
L (x) (x)dxρ∫ aproximeză b
a
f (x) (x)dxρ∫ . Reprezentând punctele sub forma
xi = ia b b a
t2 2
+ −+ , ti ∈[-1, 1], i ∈0, 1, ..., n,
avem
b
na
L (x) (x)dxρ∫ =
= ( ) ( ) ( )( ) ( )( ) ( )( )( ) ( )( ) ( )
nb 0 1 i 1 i 1 nia
i 0 i 1 i i 1 i i 1 i ni 0
x x x x .... x x x x ... x xx f x dx
x x x x .... x x x x ... x x− +
− +=
− − − − −ρ
− − − − −∑∫
= ( ) ( ) ( )( ) ( )( ) ( )( )( ) ( )( ) ( )
n b 0 1 i 1 i 1 ni a
i 0 i 1 i i 1 i i 1 i ni 0
x x x x .... x x x x ... x xf x x dx
x x x x .... x x x x ... x x− +
− +=
− − − − −ρ
− − − − −∑ ∫
Facem schimbarea de variabilă
x = a b b a
t2 2
+ −+
şi obţinem
b
na
L (x) (x)dxρ∫ =
1n0 i 1 i 1 n
ii 0 i i 1 i i 1 i ni 0 1
(t t ) (t t )(t t ) (t t )b a a b b af (x ) ( t) dt
2 2 2 (t t ) (t t )(t t ) (t t )− +
− += −
− − − −− + −ρ +
− − − −∑ ∫
Formula
b
a
f (x) (x)dxρ ≈∫
1n0 i 1 i 1 n
ii 0 i i 1 i i 1 i ni 0 1
(t t ) (t t )(t t ) (t t )b a a b b af (x ) ( t) dt.
2 2 2 (t t ) (t t )(t t ) (t t )− +
− += −
− − − −− + −ρ +
− − − −∑ ∫
se numeşte formula generală de cuadratură.
Metode Numerice
211
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)| ≤ 0 1 nM
(x x )(x x ) (x x )(n 1)!
− − −+
,
unde M = x [a,b]sup∈
|f(n+1)(x)|
Rn(f) = b b b
n na a a
f (x) (x)dx (x)L (x)dx (f (x) L (x)) (x)dxρ − ρ = − ρ∫ ∫ ∫
|Rn(f)| = |b
na
(f (x) L (x)) (x)dx− ρ∫ | ≤ b
na
| f (x) L (x) | (x)dx− ρ∫
Procedând ca mai înainte obţinem restul formulei generale de cuadratură:
|Rn(f)| ≤ ( )!1n
M
+
1n 2
0 1 n1
b a a b b at (t t )(t t ) (t t )dt
2 2 2
+
−
− + − ρ + − − − ∫ ,
unde M = x [a,b]sup∈
|f(n+1)(x)|.
Presupunem că ρ ≡ 1, punctele sunt echidistante şi că x0 = a, xn = b. Deci
xi = a + b a
n
−i, i = 0, 1, 2, …, n.
Aproximând sub integrală funcţia cu polinomul de interpolare Lagrange şi făcând
schimbarea de variabilă
x = a + b a
n
−t,
obţinem
( ) ( ) ( ) ( ) ( )b n n
n nii i
i 0 i 0a
b af (x) (x)dx b a H f x b a H f a i
n= =
− ρ ≈ − = − +
∑ ∑∫
unde
( ) ( )( )
( ) ( )( ) ( )
( )( )
( ) ( )
n inn
i 0
n in
0
11H t t 1 ... t i 1 t i 1 ... t n dt
n n i !i!
1 t t 1 ... t n1dt
n n i !i! t i
−
−
−= − − + − − −
−
− − −=
− −
∫
∫
Mădălina Roxana Buneci
212
Numerele ( )niH se numesc coeficienţii ˆNewton - Cotes iar formula se aproximare se
numeşte formula ˆNewton - Cotes . Au loc relaţiile
( )nn
ii 0
H 1=
=∑ şi ( ) ( )n ni n iH H −= , i = 0,1,…,n.
Dacă f este o aplicaţie de clasă Cn+1 are loc următoarea formulă de evaluare a
restului:
( ) ( )b n
ni
i 0a
b af (x) (x)dx b a H f a i
n=
− ρ − − +
∑∫ ≤
( )1
n 1 !+
nn 2
0
b at(t 1)(t 2) (t n)dt
n
+− − − − ∫
x [a,b]sup∈
|f(n+1)(x)|.
De reţinut că există funcţii continue pentru care şirul
( ) ( ) ( )n
nii
i 0 n
b a H f x=
−
∑ nu converge către ( )
b
af x dx∫ .
VIII.2. Formula dreptunghiurilor
Fie f : [a, b] → R o funcţie de clasă C1. Aplicăm formula generală de
cuadratură pentru ρ≡1, n=0, x0 = a b
2
+ (deci t0 = 0). Obţinem
b
a
f (x)dx∫ ≈ (b-a)a b
f2
+
cu o eroare ≤( )2b a
4
−
[ ]( )
x a,bsup f ' x∈
.
Considerăm o diviziune (x0, x1, …., xn) a intervalului [a, b] cu puncte
echidistante (xi = a + n
ab − i, i = 0, 1, 2, …, n.) şi aplicăm pe fiecare subinterval [xi,
xi+1] formula de aproximare
Metode Numerice
213
( )xi 1xi
f x dx+∫ ≈ (xi+1-xi) i i 1x xf
2++
Ţinând cont că ( ) ( )i
n 1b x 1a xii 0
f x dx f x dx−
+
=
=∑∫ ∫ , obţinem următoarea formulă de
cuadratură numită formula dreptunghiurilor:
b
a
f (x)dx∫ ≈b a
n
− n 1i i 1
i 0
x xf
2
−+
=
+
∑ .
Restul (eroarea) este dat de:
( )n 1b i i 1
ai 0
x xb af x dx f
n 2
−+
=
+− −
∑∫ =
= ( )i 1
i
n 1 n 1x i i 1x
i 0 i 0
x xb af x dx f
n 2+
− −+
= =
+− −
∑ ∑∫
= ( )i 1
i
n 1 x i i 1x
i 0
x xb af x dx f
n 2+
−+
=
+ − −
∑ ∫
≤ ( )i 1
i
n 1 x i i 1x
i 0
x xb af x dx f
n 2+
−+
=
+− −
∑ ∫
= ( ) ( )i 1
i
n 1 x i i 1i 1 ix
i 0
x xf x dx x x f
2+
−+
+=
+ − −
∑ ∫
≤( )
i i 1
2n 1i 1 i
x [x ,x ]i 0
x xsup | f (x) |
4+
−+
∈=
−′∑
≤x [a,b]sup | f (x) |∈
′( )2n 1
i 1 i
i 0
x x
4
−+
=
−∑
= x [a,b]
sup | f (x) |∈
′( )2n 1
2i 0
b a
4n
−
=
−∑
= x [a,b]sup | f (x) |∈
′( )2b a
4n
−
Mădălina Roxana Buneci
214
Ca urmare restul (eroarea) în formula dreptunghiurilor este
( )n 1b i i 1
ai 0
x xb af x dx f
n 2
−+
=
+− −
∑∫ ≤( )2b a
4n
−
[ ]( )
x a,bsup f ' x∈
Interpretarea geometrică a formulei dreptunghiurilor
Fie Di dreptunghiul cu o dimensiune dată intervalul [xi, xi+]] şi cu cealaltă
dimensiune dată de i i 1x xf
2++
Atunci aria dreptunghiului Di este
(xi+1-xi) i i 1x xf
2++
=b a
n
− i i 1x xf
2++
,
şi deci formula dreptunghiurilor presupune aproximarea b
a
f (x)dx∫ prin suma ariilor
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
i i 1x xf
2++
xi xi+1
Metode Numerice
215
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 + x7 ( )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
Mădălina Roxana Buneci
216
> 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));
:= g → x eeee( )−x2
> 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);
25
∑ = i 0
4
eeee
−
− + /4 5
2 i5
2
> evalf(middlesum(g(x),x=-1..1,5));
1.503548970
> middlebox(g(x),x=-1..1,5);
Metode Numerice
217
> middlesum(g(x),x=-1..1,10);
15
∑ = i 0
9
eeee
−
− + /9 10
i5
2
> 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
integraleib
a
g(x)dx∫ obţinută prin aplicarea formulei dreptunghiurilor utilizând n
subintervale. Comanda middlebox(g(x), x=a..b,n) reprezintă grafic dreptunghiurile
utilizate în formulei dreptunghiurilor.
Mădălina Roxana Buneci
218
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
a
f (x)dx∫ ≈1 1
1 1
b a (t 1) (t 1)f (a) dt f (b) dt
2 ( 1 1) (1 1)− −
− − + + − − +
∫ ∫ =
= 1 12 2
1 1
b a (t 1) (t 1)f (a) f (b)
2 4 4− −
− − + +
−
= b a
2
−(f(a) +f(b)).
Deci b
a
f (x)dx∫ ≈ b a
2
−(f(a) +f(b)).
Eroarea este
| b
a
f (x)dx∫ - b a
2
−(f(a) +f(b)) | ≤
1
2! [ ]( )
x a,bsup f " x∈
( )3b a
8
− 1
1
(t 1)(t 1)dt−
− +∫ =
= 1
2! [ ]( )
x a,bsup f " x∈
( )3b a
8
− 12
1
t 1dt−
−∫ = 1
2! [ ]( )
x a,bsup f " x∈
( )3b a
8
−2
12
0
t 1dt−∫
= [ ]
( )x a,bsup f " x∈
( )3b a
8
− 12
0
1 t dt−∫ =[ ]
( )x a,bsup f " x∈
( )3b a
8
−13
10
0
tt
3
−
=[ ]
( )x a,bsup f " x∈
( )3b a
12
−.
Deci
| b
a
f (x)dx∫ - b a
2
−(f(a) +f(b)) | ≤
( )3b a
12
−
[ ]( )
x a,bsup f " x∈
.
Metode Numerice
219
Considerăm o diviziune (x0, x1, …., xn) a intervalului [a, b] cu puncte
echidistante (xi = a + b a
n
−i, i = 0, 1, 2, …, n.) şi aplicăm pe fiecare subinterval [xi,
xi+1] formula de aproximare
( )xi 1xi
f x dx+∫ ≈ i 1 ix x
2+ −
( f(xi) + f(xi+1))
Ţinând cont că ( ) ( )i
n 1b x 1a xii 0
f x dx f x dx−
+
=
=∑∫ ∫ , obţinem următoarea formulă de
cuadratură numită formula trapezelor:
b
a
f (x)dx∫ ≈b a
n
− ( ) ( ) ( )n 1
ii 1
f a f bf x
2
−
=
++
∑ .
Restul (eroarea) este dat de:
( ) ( ) ( ) ( )n 1b
iai 1
f a f bb af x dx f x
n 2
−
=
+−− +
∑∫ =
= ( ) ( ) ( ) ( )i 1
i
n 1 n 1xix
i 0 i 1
f a f bb af x dx f x
n 2+
− −
= =
+−− +
∑ ∑∫
= ( ) ( ) ( )( )i 1
i
n 1 n 1x i 1 ii i 1x
i 0 i 0
x xf x dx f x f x
2+
− −+
+= =
−− +∑ ∑∫
= ( ) ( ) ( )( )i 1
i
n 1 x i 1 ii i 1x
i 0
x xf x dx f x f x
2+
−+
+=
−− +∑∫
≤ ( ) ( ) ( )( )i 1
i
n 1 x i 1 ii i 1x
i 0
x xf x dx f x f x
2+
−+
+=
−− +∑ ∫
≤( )
i i 1
3n 1i 1 i
x [x ,x ]i 0
x xsup | f (x) |
12+
−+
∈=
−′′∑
≤x [a,b]
sup | f (x) |∈
′′( )3n 1
i 1 i
i 0
x x
12
−+
=
−∑
Mădălina Roxana Buneci
220
=x [a,b]
sup | f (x) |∈
′′( )3n 1
3i 0
b a
12n
−
=
−∑
≤( )3
2
b a
12n
−
[ ]( )
x a,bsup f " x∈
.
Ca urmare restul (eroarea) în formula trapezelor este
( ) ( ) ( ) ( )n 1b
iai 1
f a f bb af x dx f x
n 2
−
=
+−− +
∑∫ ≤
( )3
2
b a
12n
−
[ ]( )
x a,bsup f " x∈
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).
Atunci aria trapezului Ti este
i 1 ix x
2+ −
( f(xi) + f(xi+1)) =b a
2n
−( f(xi) + f(xi+1)),
şi deci formula trapezelor arată că ( )b
af 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
f(xi+1)
f(xi)
xi xi+1
Metode Numerice
221
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 + x7 ( )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);
Mădălina Roxana Buneci
222
,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));
:= g → x eeee( )−x2
> 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);
+ 25
eeee( )-1 2
5
∑ = i 1
4
eeee
−
− + 1
2 i5
2
Metode Numerice
223
> evalf(trapezoid(g(x),x=-1..1,5));
1.473924388
> trapezoid(g(x),x=-1..1,10);
+ 15
eeee( )-1 1
5
∑ = i 1
9
eeee
−
− + 1
i5
2
> evalf(trapezoid(g(x),x=-1..1,10));
1.488736679
Comanda trapezoid(g(x), x=a..b,n) din pachetul student întoarce aproximaţia
integraleib
a
g(x)dx∫ obţinută prin aplicarea formulei trapezelor utilizând n
subintervale.
VIII.4. Formula lui Simpson
Fie f : [a, b] → R o funcţie de clasă C4. Aplicăm formula generală de
cuadratură pentru ρ≡1, n=2, x0 = a, x1 =a b
2
+, x2 =b (deci t0 = -1 şi t1 = 0, t2 =1).
Obţinem
( )b
af x dx∫ ≈
b a
6
−(f(a) +4 ( )a b
2f + + f(b))
Considerăm o diviziune (x0, x1, …., x2n) a intervalului [a, b] cu puncte
echidistante (xi = a + b a
2n
−i, i = 0, 1, 2, …, 2n.) şi aplicăm pe fiecare subinterval
[xi, xi+2] cu i par formula de aproximare
( )xi 2xi
f x dx+∫ ≈ i 2 ix x
6+ −
( f(xi) +4f(xi+1) + f(xi+2))
Ţinând cont că ( ) ( )2n 2b xi 2
a xii 0ipar
f x dx f x dx−
+
=
= ∑∫ ∫ , obţinem următoarea formulă de
cuadratură numită formula lui Simpson:
Mădălina Roxana Buneci
224
( )b
af x dx∫ ≈
b a
6n
− ( ) ( ) ( ) ( )n 1 n 1
2i 2i 1i 1 i 1
f a f b 2 f x 4 f x− −
−= =
+ + +
∑ ∑ .
Se poate arăta că restul (eroarea) este dat de:
( ) ( ) ( ) ( ) ( )n 1 n 1b
2i 2i 1ai 1 i 1
b af x dx f a f b 2 f x 4 f x
6n
− −
−= =
−− + + +
∑ ∑∫ ≤
( )5
4
b a
2880n
−
[ ]
( ) ( )4
x a,bsup f x∈
.
VIII.5. Algoritmul lui Romberg
Fie f : [a, b] → R o funcţie de clasă C2. Considerăm o diviziune (x0, x1, ….,
n2x ) a intervalului [a, b] cu puncte echidistante (xi = a + n
b a
2
−i, i = 0.. 2n).
Aplicând formula trapezelor:
b
a
f (x)dx∫ ≈n
b a
2
− ( ) ( )( )
n2 1
ii 1
f a f bf x
2
−
=
+ +
∑ .
Dacă notăm ϕ(n) = n
b a
2
− ( ) ( )( )
n2 1
ii 1
f a f bf x
2
−
=
+ +
∑ , atunci eroarea cu care ϕ(n)
aproximează ( )b
af x dx∫ este dată de
( ) ( )b
af x dx n−ϕ∫ ≤
( ) 2n
b ah
12
−
[ ]( )
x a,bsup f " x∈
unde hn = n
b a
2
−. Deci eroarea este de ordinul O( 2
nh ). Se poate arăta că
Metode Numerice
225
ϕ(n) = b
a
f (x)dx∫ + a22nh + a4
4nh + a6
6nh + a8
8nh +....
unde pentru orice i ai depinde doar de f(i). Pe de altă parte
ϕ(n+1) = b
a
f (x)dx∫ + a22n 1h + + a4
4n 1h + + a6
6n 1h + + a8
8n 1h + +....
= b
a
f (x)dx∫ + 1
4a2
2nh +
1
16a4
4nh +
1
64a6
6nh +
1
256a8
8nh +....
şi ca urmare
( ) ( )4 n 1 n
3
ϕ + − ϕ =
b
a
f (x)dx∫ - 1
4a4
4nh -
5
16 a6
6nh -
21
64a8
8nh +....
În cazul acestei formule de aproximare eroarea de trunchiere este de ordinul O( 4nh ).
Ca şi în cazul extrapolării Richardson formula poate fi înbunătăţită succesiv. Pentru
aceasta notăm
I (n,0) = ϕ(n)
şi definim
I(n,m) = ( ) ( )m
m
4 I n, m 1 I n 1, m 1
4 1
− − − −
−, 1 ≤ m ≤ n.
Pentru calculul recursiv al valorilor I(n,m) se poate folosi tabelul
triunghiular:
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.
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)
Mădălina Roxana Buneci
226
În situaţia în care h0 = b-a >1, alegem k astfel încât k
b a
2
− să fie suficient de
mic (de exemplu mai mic decât 1) şi facem calculul recursiv al valorilor I(k+l,m)
folosind tabelul triunghiular:
În final se ţine seama că I(k+n+j,n) este o aproximaţie bună a b
a
f (x)dx∫ când j → ∞.
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ă
I(n+1,0) = ϕ(n+1) = n 1
b a
2 +
− ( ) ( )( )
n 12 1
n 1i 1
f a f bf a ih
2
+ −
+=
+ + +
∑
= 1
2
n
b a
2
− ( ) ( )( ) ( )
n2 1
n 1 n 1i 1
f a f bf a (2i 1)h f a (2i)h
2
−
+ +=
+ + + − + +
∑
= 1
2
n
b a
2
− ( ) ( )( ) ( )
n n2 1 2 1
n n 1i 1 i 1
f a f bf a ih f a (2i 1)h
2
− −
+= =
+ + + + + −
∑ ∑
=1
2I(n,0) + hn+1 ( )
n2 1
n 1i 1
f a (2i 1)h−
+=
+ −∑ .
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.
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)
Metode Numerice
227
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
calcului lui b
a
f (x) (x)dxρ∫ dă integrala polinomului de interpolare asociat nodurilor
x0, x1, …, xn şi valorilor f(x0), f(x1), ..., f(xn):
( ) ( ) ( ) ( ) ( )b b bn n n
i i i i i ii 0 i 0 i 0a a a
f (x) (x)dx (x) f x l x dx f x (x)l x dx A f x= = =
ρ ≈ ρ = ρ =∑ ∑ ∑∫ ∫ ∫
unde Ai = ( )b
ia
(x)l x dxρ∫ pentru orice i. Dacă nu se impune nici o condiţie asupra
nodurilor x0, x1, …, xn formula de cuadratură
b
a
f (x) (x)dxρ∫ ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn)
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
că
bk
a
q(x)x (x)dxρ∫ = 0 pentru orice 0 ≤ k ≤n.
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
Ai = ( )b
ia
(x)l x dxρ∫
Mădălina Roxana Buneci
228
=( )( ) ( )( ) ( )
( )( ) ( )( ) ( )( )
b 0 1 i 1 i 1 na
i 0 i 1 i i 1 i i 1 i n
x x x x .... x x x x ... x xx dx
x x x x .... x x x x ... x x− +
− +
− − − − −ρ
− − − − −∫
Formula generală de cuadratură fiind exactă pentru orice polinom de grad ≤ n avem
b
a
f (x) (x)dxρ∫ = ( ) ( ) ( )( )b
a
p x q x r x (x)dx+ ρ∫
= ( ) ( )b
a
p x q x (x)dxρ∫ + ( )b
a
r x (x)dxρ∫
= ( )b
a
r x (x)dxρ∫
= ( )n
i ii 0
A r x=∑
Pe de altă parte avem
( )n
i ii 0
A f x=∑ = ( ) ( ) ( )( )
n
i i i ii 0
A p x q x r x=
+∑ = ( )n
i ii 0
A r x=∑ .
deoarece xi este rădăcină a lui q pentru orice i. În consecinţă,
b
a
f (x) (x)dxρ∫ = ( )n
i ii 0
A f x=∑ .
Teorema 8. (cuadratura Gauss) Fie ρ : [a, b]→R o pondere. Fie xii cele
n+1 noduri ale polinomului qn+1 de grad n+1 cu prorietatea că b
kn 1
a
q (x)x (x)dx+ ρ∫ =
0 pentru orice 0 ≤ k ≤n. Pentru orice i fie
Ai = ( )b
ia
(x)l x dxρ∫
= ( )( )( ) ( )( ) ( )
( )( ) ( )( ) ( )b 0 1 i 1 i 1 na
i 0 i 1 i i 1 i i 1 i n
x x x x .... x x x x ... x xx dx
x x x x .... x x x x ... x x− +
− +
− − − − −ρ
− − − − −∫ .
Atunci formula de cuadratură
Metode Numerice
229
b
a
f (x) (x)dxρ∫ ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn)
este exactă pentru orice polinom de grad ≤ 2n+1.
Restul (eroarea) este dat de
( )( ) ( )( )
( ) ( )2n 2b bn
2i i n 1
i 0a a
ff (x) (x)dx A f x q x x dx
2n 2 !
+
+=
ξρ − ≤ ρ
+∑∫ ∫
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
Ln(x) = ( )
( ) ( )n
n nn
n! dx a x b
2n ! dx − −
Restul (eroarea) formulei de cuadratură în situaţia în care se folosesc
ca noduri rădăcinile lui Ln este dat de ( ) ( ) ( ) ( )
( ) ( )
4 2n 1 2n
3
n! b a f
2n ! 2n 1
+− ξ
+
.
2. Dacă ρ(x) = 2
1
1 x− pe intervalul (-1,1), atunci polinomele qn care
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:
xi = 2i 1
cos2n 2
+ π + , 0 ≤ i ≤ n.
În acest caz Ai = n 1
π
+ pentru orice i = 0,..., n.
Mădălina Roxana Buneci
230
3. Dacă ρ(x) = 21 x− 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
≥ 0, sau pot fi definite prin Un(x) = ( )( )
( )sin n 1 arccos x
sin arccos x
+. Rădăcinile
polinomului Cebîşev Un+1 de grad n+1 sunt:
xi = i 1
cosn 2
+ π + , 0 ≤ i ≤ n.
În acest caz Ai = 2 i 1sin
n 2 n 2
π + π + + pentru orice i = 0,..., n.
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
schimbării de variabilă t = b a
2
−x -
b a
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 ( )D
f x, y dxdy∫∫ . D fiind un domeniu simplu
putem trece la integrale iterate:
( )D
f x, y dxdy∫∫ = ( )( )( )b x2
a x1f x, y dy dx
ϕ
ϕ
∫ ∫ = ( )b
aF x dx∫
Metode Numerice
231
unde F(x) = ( )( )( )x2x1
f x, y dyϕ
ϕ∫ . Considerăm o reţea de noduri (xi, yj), i = 0, 1, …, n şi
j = 0, 1, …, m. Aplicând integralei ( )b
aF x dx∫ o formulă de cuadratură se obţine:
( )D
f x, y dxdy∫∫ ≈ ( )n
i ii 0
A F x=∑
unde
F(xi) = ( )( )( )x2 i
ix1 i
f x , y dyϕ
ϕ∫ .
Aplicând şi acestei ultime integrale o formulă de cuadratură:
F(xi) ≈ ( )mi
ij i jj 0
B f x , y=∑
rezultă formula de aproximare
( )D
f x, y dxdy∫∫ ≈ ( )mn i
i ij i ji 0 j 0
A B f x , y= =∑∑ .
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
xi = a + ih, i = 0, 1, …, n, h = b a
n
−
yi = c + jk, j = 0, 1, …, m, k = d c
m
−
a xi xi+1 b X
Y
d
yi+1
yi
c
Mădălina Roxana Buneci
232
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:
Iij = ( )xi 1 yj 1
y jxi
f x, y dy dx+
+
∫ ∫ ≈ ( )( ) ( )xi 1j j 1xi
kf x, y f x, y dx
2+
+ +
∫
= ( ) ( )x xi 1 i 1j j 1x xi i
kf x, y dx f x, y dx
2+ +
+
+ ∫ ∫
≈ ( ) ( ) ( ) ( )( )i j i 1 j i j 1 i 1 j 1k h
f x, y f x, y f x , y f x , y2 2 + + + ++ + +
Astfel valoarea aproximativă a integralei
( )D
f x, y dxdy∫∫ =
=n 1m 1
iji 0 j 0
I− −
= =∑ ∑ ≈ ( ) ( ) ( ) ( )( )
n 1m 1
i j i 1 j i j 1 i 1 j 1i 0 j 0
khf x, y f x, y f x , y f x , y
4
− −
+ + + += =
+ + +∑ ∑ .
Presupunem că
xi = a + ih, i = 0, 1, …, 2n, h = b a
2n
−
yi = c + jk, j = 0, 1, …, 2m, k = d c
2m
−
Dacă pentru calculul integralei Iij cu i şi j pare se aplică formula Simpson repetată se
obţine
Iij = ( )xi 2 y j 2
y jxi
f x, y dy dx+
+
∫ ∫
≈ ( ) ( ) ( )( )xi 2j j 1 j 2xi
kf x, y 4f x, y f x, y dx
6+
+ + + +
∫
= ( ) ( ) ( )x x xi 2 i 2 i 2j j 1 j 2x x xi i i
kf x, y dx 4 f x, y dx f x, y dx
3+ + +
+ +
+ + ∫ ∫ ∫
Metode Numerice
233
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )( )( )
i j i 2 j i j 2 i 2 j 2
i 1 j i 1 j 1 i 2 j 1 i 1 j 2
i 1 j 1
hk(f x , y f x , y f x , y f x , y
9
4 f x , y f x y f x , y f x , y
16f x , y )
+ + + +
+ + + + + + +
+ +
≈ + + + +
+ + + + +
+
Notăm
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )( )( )
ij i j i 2 j i j 2 i 2 j 2
i 1 j i 1 j 1 i 2 j 1 i 1 j 2
i 1 j 1
hkF (f x , y f x , y f x , y f x , y
9
4 f x , y f x y f x , y f x , y
16f x , y )
+ + + +
+ + + + + + +
+ +
= + + + +
+ + + + +
+
Atunci
( )D
f x, y dxdy∫∫ = n 1m 1
2i,2 ji 0 j 0
I− −
= =∑ ∑ ≈
n 1m 1
2i,2 ji 0 j 0
F− −
= =∑ ∑
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));
Mădălina Roxana Buneci
234
:= f → ( ),x y + x7 ( )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
Metode Numerice
235
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.
Mădălina Roxana Buneci
236
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ă
Metode Numerice
237
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,...);
Mădălina Roxana Buneci
238
• 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
Metode Numerice
239
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
Mădălina Roxana Buneci
240
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);
Metode Numerice
241
-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;
+ − − 2 y 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ă
Mădălina Roxana Buneci
242
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;
Metode Numerice
243
, , , ,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
Mădălina Roxana Buneci
244
> 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
raţional n
m .
Exemple de constante raţionale:
> 2/3;
23
> 6/7;
67
> 4/6;
23
> 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);
Metode Numerice
245
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 1059
> 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 1059
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;
1715
> 1/3+8;
253
> 1/3+2/3;
1
Mădălina Roxana Buneci
246
Î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.
Metode Numerice
247
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
Mădălina Roxana Buneci
248
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ă
x
f
∂
∂
int(f(x),x) integrală indefinită ( )∫ dxxf
sum(f(n),n) suma seriei ( )∑
∞
=1n
nf
int(f(x),x=a..b) integrală definită ( )b
af x dx∫
sum(f(k),k=a..b) sumă de la a la b ( )∑
=
b
ak
kf
limit(f(x), x=a) limita funcţiei f în a; ( )x alim f x→
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
Metode Numerice
249
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);
1x
> Diff(ln(x),x);
ddx
( )ln x
> Diff(ln(x),x) = diff(ln(x),x);
= ddx
( )ln x1x
> Diff(sin(x)*tan(y),x,y)= diff(sin(x)*tan(y),x,y);
= ∂ ∂
∂2
y x( )( )sin x ( )tan y ( )cos x ( ) + 1 ( )tan y 2
> int( sin(x), x );
− ( )cos x
> Int( sin(x), x );
d⌠⌡
( )sin x x
> int( sin(x), x=0..Pi );
2
> Int( x^2*ln(x), x=1..3 )=int( x^2*ln(x), x=1..3 );
= d⌠⌡
1
3
x2 ( )ln x x − 9 ( )ln 3269
> 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);
Mădălina Roxana Buneci
250
= d⌠
⌡
0
∞
d⌠
⌡
0
∞
eeee( )− − x2 y2
x yπ4
> sum(k^2,k=1..4);
30
> Sum(k^2,k=1..4);
∑ = k 1
4
k2
> Sum(k^2,k=1..n)=sum(k^2,k=1..n);
= ∑ = k 1
n
k2 − + + ( ) + n 1 3
3( ) + n 1 2
2n6
16
> sum(1/k^2,k=1..infinity);
π2
6
> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);
= ∑ = k 0
∞ 1!k
eeee
> limit(sin(x)/x, x=0);
1
> Limit(sin(x)/x, x=0);
lim → x 0
( )sin xx
> Limit(sin(x)/x, x=0)=limit(sin(x)/x, x=0);
= lim → x 0
( )sin xx
1
> Limit((cos(2*x)-1)/x^2, x=0)=limit((cos(2*x)-1)/x^2, x=0);
= lim → x 0
− ( )cos 2 x 1
x2-2
> Limit(exp(x), x=infinity)=limit(exp(x), x=infinity);
= lim → x ∞
eeeex ∞
> Limit(exp(x), x=-infinity)=limit(exp(x), x=-infinity);
= lim → x ( )−∞
eeeex 0
Metode Numerice
251
> Limit(1/x, x=0)=limit(1/x, x=0);
= lim → x 0
1x
undefined
> Limit(1/x, x=0, left)=limit(1/x, x=0, left);
= lim → -x 0
1x
−∞
> Limit(1/x, x=0, right)=limit(1/x, x=0, right);
= lim → +x 0
1x
∞
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);
− + X8 2 X4 Y4 Y8
> factor(X^6-Y^6);
( ) − X Y ( ) + X Y ( ) + + X2 X Y Y2 ( ) − + X2 X Y Y2
> simplify((X^6-Y^6)/(X^2+X*Y+Y^2));
− + − X4 Y X3 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);
Mădălina Roxana Buneci
252
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]) ( )( )
[ ]b,attgy
tfx∈
=
=
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);
Metode Numerice
253
> 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);
Mădălina Roxana Buneci
254
>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..
d)
( )( )( )
=
=
=
v,uhz
v,ugy
v,ufx
Metode Numerice
255
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);
Mădălina Roxana Buneci
256
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);
Metode Numerice
257
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);
:= expr + u v( )cos u v
eeee( )−u2
> nops(expr);
2
> op(1,expr);
u v
> op(2,expr);
( )cos u v
eeee( )−u2
> subsop(2=u+v,expr);
Mădălina Roxana Buneci
258
+ + u v u v
> expr;
+ u v( )cos u v
eeee( )−u2
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);
:= f → x + + x3 ( )cos x x( )/1 3
eeee( )−x2
> nops(f);
1
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
Metode Numerice
259
:= g → ( ),x y + x2 eeee( )− − x2 y2
( )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 ( )cos 1 eeee( )-1
> f(1.);
1.908181747
> evalf(f(1));
1.908181747
> evalf(f(1),50);
1.9081817470395820389964603776044374711781215516497
> f(alpha);
+ + α3 ( )cos α α( )/1 3
eeee( )−α2
> g(Pi/2,3);
14
π2 eeee
− −
π2
49
> evalf(g(Pi/2,3));
0.00002582324018
> g(2,3);
+ 4 eeee( )-13
( )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);
Mădălina Roxana Buneci
260
+ 3 2
2π3
> evalf(h(Pi/3,2,Pi/4));
2.271942423
> h(alpha,beta,gamma);
+ ( )sin α ( )cos γ β α
> h(alpha,3,Pi/4);
+ 32
( )sin α 2 α
> expresie:=u*v^2+cos(Pi/u*v)/u^(1/2);
:= expresie + u v2
cos
π vu
u
> f1:=unapply(expresie,u);
:= f1 → u + u v2
cos
π vu
u
> f1(1);
+ v2 ( )cos π v
> f2:=unapply(expresie,u,v);
:= f2 → ( ),u v + u v2
cos
π vu
u
> f2(1,2/3);
-118
> f2(alpha, 2);
+ 4 α
cos
2 πα
α
> f3:=unapply(expresie,v);
:= f3 → v + u v2
cos
π vu
u
> f3(1);
Metode Numerice
261
+ u
cos
π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
Mădălina Roxana Buneci
262
> 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
Metode Numerice
263
• 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;
Mădălina Roxana Buneci
264
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;
:= A,1 2
x
> A[1,1];
A,1 1
> A[1,2];
x
Metode Numerice
265
> evalm(A);
A,1 1
x
A,2 1
A,2 2
> A := array(1..2,1..2, [ [1,x], [x,x^2] ] );
:= A
1 x
x x2
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]]);
:= M
1 2
3 4
5 6
> M[1,2];
2
Pachetul linalg conţine comenzi pentru operaţii cu vectori şi matrice.
Mădălina Roxana Buneci
266
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);
:= f → x + + x3 ( )cos x x( )/1 3
eeee( )−x2
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
:= g → ( ),x y + x2 eeee( )− − x2 y2
( )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 ( )cos 1 eeee( )-1
− + + 1 ( )cos 1 ( )-1( )/1 3
eeee( )-1
1
> map(g,x,Pi/3);
, , + eeee
− − 1
π2
9 12
( )cos 1 3 + eeee
− − 1
π2
9 12
( )cos 1 332
> map(h,x,2,Pi/2);
[ ], ,1 -1 0
> map(h,x,2,Pi/4);
Metode Numerice
267
[ ], , + ( )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);
, , ,π − − 32
π2
+ 32
π2
−π
> map2(g,Pi/3, x);
, , + 19
π2 eeee
− − 1
π2
9 12
( )sin 1 − 19
π2 eeee
− − 1
π2
9 12
( )sin 119
π2 eeee
−
π2
9
> map2(h,2, x,Pi/2);
[ ], ,2 2 2
> map(h,2, x,Pi/4);
+ 12
( )sin 2 2 x 2
> M:=Pi,-Pi,Pi/2,-Pi/2;
:= M , , ,ππ2
−π −π2
> map(h,3,M,Pi/3);
+ 12
( )sin 3 , , ,ππ2
−π −π2
3
> expr:=u*v+cos(u*v)/exp(-u^2);
:= expr + u v( )cos u v
eeee( )−u2
> applyop(f,1,expr);
+ + + u3 v3 ( )cos u v ( )u v( )/1 3
eeee( )−u2 v2 ( )cos u v
eeee( )−u2
> applyop(g,1,expr,Pi/3);
+ + u2 v2 eeee
− − u2 v2 π2
9 12
( )cos u v 3( )cos u v
eeee( )−u2
> applyop(g,2,expr,0);
Mădălina Roxana Buneci
268
+ u v( )cos u v 2 eeee
−( )cos u v 2
eeee
( )−u22
( )eeee( )−u2
2
> applyop(h,1,expr,0, Pi/2);
+ u v( )cos u v
eeee( )−u2
> 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 ( )cos 1 eeee( )-1
-1 1 2 3 -1 1 1
> op(3,L);
1
> applyop(f,3,L);
[ ], , , , , , ,1 -1 + + 1 ( )cos 1 eeee( )-1
2 3 -1 1 1
> applyop(g,3,L, Pi/2);
, , , , , , ,1 -1 + eeee
− − 1
π2
4( )cos 1 2 3 -1 1 1
> applyop(g,3,L, Pi);
[ ], , , , , , ,1 -1 eeee( )− − 1 π2
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
Metode Numerice
269
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ţ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ă:
condiţie
Instrucţiuni2 Instrucţiuni1
Mădălina Roxana Buneci
270
if condiţie then instrucţiuni fi;
Da
Nu
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
condiţie
instrucţiuni
Metode Numerice
271
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ă:
Pentru p < 0 comanda este echivalentă cu următoarea subschemă logică:
Construcţiile from ei şi by p pot lipsi, caz în care ei se ia 1 şi pasul se consideră egal
cu 1.
Nu
i ≤ ef instrucţiuni i: = i + p
i := ei
Da
Nu
i ≥ ef instrucţiuni i: = i + p
i := ei
Da
Mădălina Roxana Buneci
272
(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ă:
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
Nu
condiţie instrucţiuni i: = i + p
i := ei
Da
Metode Numerice
273
Î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:
Mădălina Roxana Buneci
274
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;
Nu
Da instrucţiuni condiţie
Metode Numerice
275
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.
Mădălina Roxana Buneci
276
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);
Metode Numerice
277
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
Mădălina Roxana Buneci
278
Metode Numerice
279
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.
Mădălina Roxana Buneci
280
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.
Metode Numerice
281
INDEX
A
adjunctul unui operator liniar şi
mărginit, 56
algebră Banach, 54
algoritm polinomial, 16
algoritm stabil, 14
algoritmul Romberg, 224
aplicaţie liniară, 54
aproximare a derivatei prin diferenţe
finite progresive, 192
aproximare a derivatei prin diferenţe
finite regresive, 194
aproximare a derivatelor prin
diferenţe finite centrale, 190
aritmetica în virgulă mobilă, 45
B
bază ortonormală, 55
bază, 17
bit ascuns, 39
bit de semn, 34
bitul cel mai puţin semnificativ, 30
bitul cel mai semnificativ, 30
C
calculul determinantului unei matrice
prin metoda de eliminare Gauss, 70
calculul inversei unei matrice prin
metoda de eliminare Gauss, 71
catastrophic cancellation, 47
cifră în baza b, 17
cifre semnificative, 36
cod complementar, 32
cod direct, 31
cod invers, 31
coeficienţi ˆNewton-Cotes , 212
complementul ortogonal, 56
conjugata unei matrice, 57
contracţie, 116
conversie, 19
cuadratură Gauss, 227
D
derivare numerică folosind diferenţe
finite, 189
derivare numerică folosind
interpolarea, 206
desfacere a standard a unei matrice,
82
desfacere a unei matrice, 81
diferenţă finită divizată, 171
diferenţă finită la dreapta, 161
diferenţă finită la stânga, 167
Mădălina Roxana Buneci
282
dimensiunea unui spaţiu Hilbert, 56
dualul unui spaţiu normat, 55
element de cea mai bună aproximare,
175
E
elemente ortogonale, 55
eroare a datelor, 11
eroare backward, 12
eroare de calcul, 10
eroare de interpolare în cazul
nodurilor Cebîşev, 143
eroare de interpolare în cazul
nodurilor echidistante, 142
eroare de interpolare, 140
eroare de metodă, 9
eroare de rotunjire, 9 , 11
eroare de trunchiere, 9, 11
eroare forward, 12
eroare inerentă, 9
eroarea absolută, 10
eroarea relativă , 10
extrapolare Richardson, 205
F
factor de condiţionare în cazul
rezolvării unei ecuaţii neliniare, 91
factor de condiţionare în cazul
rezolvării unui sistem neliniar, 105
factorul de condiţionare al unei
matrice, 74
factorul de condiţionare, 13
fl(x), 37
forma normalizată – exponentul, 35
forma normalizată – mantisa, 35
forma normalizată, 35
formula dreptunghiurilor, 212
formula generală de cuadratură, 210
formula lui Simpson, 223
formula trapezelor, 218
formula ˆNewton-Cotes , 212
funcţie pondere, 179
I
IEEE-754- dublă precizie (double-
precission), 41
IEEE-754-simplă precizie (single-
precission), 40
Inf, 39
integrarea numerică, 209
M
matrice diagonal dominantă, 84
matrice diagonală, 58
matrice hermitiană, 58
matrice inferior Hessenberg, 58
matrice inferior triunghiulară, 58
matrice inversabilă, 58
matrice nesingulară, 58
matrice ortogonală, 58
matrice simetrică, 58
matrice superior Hessenberg, 58
matrice superior triunghiulară, 58
matrice tridiagonală, 58
matrice unitară, 58
matricea unitate, 57
Metode Numerice
283
metoda bisecţiei (metoda înjumătăţirii
intervalului), 93
metoda celor mai mici pătrate, 178
metoda coardei, 96
metoda de eliminare Gauss, 62
metoda Gauss-Seidel, 87
metoda Jacobi, 83
metoda lui Newton, 127, 104
metoda Newton simplificată, 134
metoda Newton-Kantorovici, 138
metoda punctului fix, 116
metoda tangentei, 104
metode directe de rezolvare a
sistemelor liniare, 61
metode iterative de rezolvare a
sistemelor liniare, 80
minori principali, 60
N
NaN, 39
negativ definită, 60
negativ semidefinită, 60
noduri Cebîşev, 143
norma 1 ||⋅||1, 57
norma ∞ ||⋅||∞, 57
norma euclidiană ||⋅||2, 57
normă completă, 54
normă operatorială asociată unei
matrice, 59
normă, 53
norme echivalente, 54
numere denormalizate („denormalized
floating-point numbers”), 39
O
OFL (overflow level), 37
operator liniar şi mărginit, 55
ordine lexicografică, 17
overflow, 37
P
pivotare completă, 63
pivotare parţială, 63
polinoame Cebîşev de speţa a II-a,
230
polinoame Cebîşev de speţa I, 230
polinoame Jacobi, 230
polinoame Legendre,229
polinom de interpolare, 139
polinom generalizat, 179
polinom Lagrange de interpolare, 144
polinom Newton cu diferenţe
divizate, 171
polinom Newton de interpolare de
speţa a II-a (descendent), 166
polinom Newton de interpolare de
speţa I (ascendent), 161
pondere(integrare numerică), 209
pozitiv definită, 60
pozitiv semidefinită, 60
precizie a maşinii, 38
precizie, 36
problemă bine condiţionată, 13
problemă rău condiţionată, 13
Mădălina Roxana Buneci
284
produs scalar, 55
produsul scalar canonic, 57
punct fix, 116
R
rată de convergenţă, 92, 116
rată liniară de convergenţă, 92, 116
rată pătratică de convergenţă, 92, 116
rată superliniară de convergenţă, 92,
116
raza spectrală, 59
rădăcină a unei ecuaţii, 91
reprezentare complement faţă de 1,31
reprezentare complement faţă de 2, 32
reprezentare în virgulă mobilă
normalizată, 37
reprezentare în virgulă mobilă, 36
reprezentare periodică în baza b, 25
reprezentare semn şi valoare absolută,
31
reprezentarea internă a numerelor
întregi fără semn, 29
reprezentarea unui număr întreg în
baza b, 19
reprezentarea unui număr real în baza
b, 21
restul formulei generale de
cuadratură, 211
rezolvarea unui sistem liniar prin
metoda de eliminare Gauss , 67
rotunjire la cel mai apropiat număr în
virgulă mobilă (rotunjire la par), 38
rotunjire prin tăiere, 37
S
sistem de numeraţie, 17
sistem ortogonal, 55
sistem ortonormal, 55
sistemul normal al lui Gauss, 180
soluţie a unei ecuaţii, 91
soluţie a unui sistem neliniar, 105
spaţiu Banach, 54
spaţiu Hilbert, 55
spaţiu normat, 53
spaţiu pre-Hilbert, 55
spaţiul operatorilor liniari şi mărginiţi,
55
spectru, 59
standardul IEEE-754, 39
T
transpusa unei matrice, 57
trunchiere, 37
U
UFL (underflow level), 37
underflow, 37
V
valoare proprie, 59
vector propriu, 59
Z
zerou al funcţiei, 91