Professional Documents
Culture Documents
ISBN 978-973-144-289-1
2
Metode Numerice
CUPRINS
Prefaţă........................................................................................................................7
I. Noţiuni introductive...............................................................................................9
I.1. Elemente de teoria erorilor ......................................................................9
I.2. Condiţionarea numerică. Factor de condiţionare....................................11
I.3. Stabilitatea algoritmilor..........................................................................14
I.4. Complexitatea algoritmilor.....................................................................15
II. Aproximarea numerelor reale...............................................................................17
II.1. Reprezentarea numerelor întregi într-o bază.........................................21
II. 2. Reprezentarea numerelor reale într-o bază...........................................29
III. Reprezentarea informaţiei în sistemele de calcul................................................29
III.1. Reprezentarea internă a numerelor întregi...........................................29
III. 1.1. Reprezentarea internă a numerelor întregi fără semn
(pozitive)...........................................................................29
III.1.2. Reprezentarea internă a numerelor întregi (cu semn)...........30
III. 2. Reprezentarea internă a numerelor reale................................35
III.2.1. Forma normalizată................................................................35
III.2.2. Reprezentarea în virgulă mobilă...........................................36
III.2.3. Standardul IEEE-754............................................................39
III.2.4. Aritmetica în virgulă mobilă.................................................45
IV. Rezolvarea sistemelor liniare..............................................................................53
IV.1. Elemente de analiză matriceală...........................................................53
IV. 2. Metode directe de rezolvare a sistemelor liniare................................61
IV.2.1. Metoda de eliminare Gauss ..................................................62
IV.2.2. Rezolvarea sistemelor liniare prin metoda de eliminare
Gauss...................................................................................67
3
Mădălina Roxana Buneci
4
Metode Numerice
5
Mădălina Roxana Buneci
6
Metode Numerice
PREFAŢĂ
7
Mădălina Roxana Buneci
8
Metode Numerice
I. Noţiuni introductive
9
Mădălina Roxana Buneci
10
Metode Numerice
M 1 ε ε
Avem E ′(h ) = -2ε 2 şi deci E ′(h ) = 0 <=> h = 2 . În plus, E ′′ 2 >0,
2 h M M
ε
deci funcţia are punct de minim în h = 2 . Ca urmare, eroarea totală este
M
ε
minimă pentru h ≈ 2 . Pentru valori mai mici ale lui h eroarea totală creşte din
M
11
Mădălina Roxana Buneci
cauza creşterii erorii de rotunjire, iar pentru valori mai mari ale lui h eroarea totală
creşte din cauza creşterii erorii de trunchiere.
12
Metode Numerice
13
Mădălina Roxana Buneci
Acurateţea metodelor
14
Metode Numerice
Inacurateţea poate rezulta din aplicarea unui algoritm stabil unei probleme rău
condiţionate, ca şi din aplicarea unui algoritm instabil unei probleme bine
condiţionate.
Aplicarea (cu ajutorul calculatorului) unui algoritm stabil unei probleme
bine condiţionată garantează obţinerea soluţiei cu o precizie bună, în sensul că
eroarea relativă a soluţiei calculate faţă de soluţia exactă este de ordinul de mărime
al erorilor de reprezentare a datelor în calculator.
15
Mădălina Roxana Buneci
τ(n)
• τ(n) ~ f(n) dacă lim =1
n →∞ f ( n )
16
Metode Numerice
αk < βk şi αi = βi pentru i = k + 1, n .
17
Mădălina Roxana Buneci
Teorema 2.1. Fie b o bază (adică b ∈ N, b ≥ 2). Orice număr natural nenul x
poate fi scris în mod unic sub forma
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0, cu αn ≠ 0.
şi α0, α1, …., αn ∈ {0, 1, …, b-1 }.
Demonstraţie. Conform principiului multiplicativ al lui Arhimede, pentru
număr natural nenul x există un număr natural n ≥ 1 astfel încât:
bn ≤ x < bn+1.
De aici rezultă că există un singur număr natural n ≥ 1 astfel încât
x ∈ {0, 1, …, bn+1-1 } - {0, 1, …, bn-1 }.
Deoarece x∈{0, 1, …, bn+1-1 } şi fn : An → {0, 1, …, bn+1-1 } este bijectivă, există
un unic element α = (αn, αn-1, …, α0 ) în An astfel încât x = fn (α) sau echivalent
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0.
Dacă αn ar fi nul, atunci
x = αn-1bn-1 + … + α2b2 + α1b + α0
≤ (b -1)bn-1 + … + (b -1)b2 + (b -1)b + (b -1)
= (b -1) (bn-1 + …b2 + b + 1)
18
Metode Numerice
bn −1
= (b -1)
b −1
< bn,
ceea ce contrazice alegerea lui n. Deci αn ≠ 0.
Dacă ar exista două reprezentări
x = αnbn + αn-1bn-1 + … + α2b2 + α1b + α0, cu αn ≠ 0.
= βmbm + βm-1bm-1 + … + β2b2 + β1b + β0, cu βm ≠ 0.
cu α0, α1, …., αn, β0, β1, …., βm ∈ {0, 1, …, b-1 }, atunci
bn ≤ x < bn+1 şi bm ≤ x < bm+1
şi în consecinţă, n = m. Deoarece fn este injectivă şi
fn(αn, αn-1, …, α0 ) = fn(βn, βn-1, …β0),
avem (αn, αn-1, …, α0 ) = (βn, βn-1, …β0), şi ca urmare reprezentarea x lui este
unică.
19
Mădălina Roxana Buneci
47 = 23 ⋅ 2 + 1 47 2
23 = 11 ⋅ 2 + 1 46 23 2
11 = 5 ⋅ 2 + 1 sau 1 22 11 2
5= 2⋅2+1 1 10 5 2
2= 1⋅2+0 1 4 2 2
1= 0⋅2+1 1 2 1
0
Deci 4710 = 1011112.
Conversia de la baza b la baza 10 se face prin însumarea puterilor lui b
înmulţite cu cifrele din baza b corespunzătoare. De exemplu, numărul 1278 şi 1A816
se scriu în baza 10 astfel:
1278 = 7 × 80 + 2 × 81 + 1 × 82 = 8710
1A816 = 8 × 160 + A × 161 + 1 × 162 = 8 × 160 + 10 × 161 + 1 × 162 = 42410.
Conversia unui număr întreg dintr-o bază b1 într-o bază b2 se face prin
intermediul bazei 10. În cazul particular, în care baza b1 care este o putere a lui b2
sau invers, conversia se poate face şi direct.
Fie b1 = bk, cu k ≥ 1. Conversia de la baza b1 = bk la baza b corespunde
dezvoltării fiecărei cifre din reprezentare în echivalentul ei în baza b utilizând k
cifre (adăugând eventual zerouri în faţă). De exemplu,
1728 = 0011110102 = 11110102,
deoarece 8 = 23 şi 18 = 0012, 28 = 0102, 78 = 1112
4E16 = 010011102 = 10011102,
deoarece 16 = 24 şi 416 = 01002, E16 = 11102.
Conversia de la baza b la baza b1 = bk se realizează înlocuind de la dreapta
la stânga grupele de k cifre din baza b prin cifra în baza b1 corespunzătoare. Dacă
numărul de cifre nu este multiplu de k se completează configuraţia la stânga cu
zerouri. De exemplu,
1 011 110 2 = 1368
1 3 6
20
Metode Numerice
α αn 1 1
Seria ∑ b nn este convergentă, pentru că 0 ≤
b n
≤ (b-1) n şi
b
∑ bn este
n ≥1 n ≥1
1
convergentă (fiind o serie geometrică cu raţia pozitivă şi subunitară). Deci F
b
este corect definită.
Teorema 2.2. Fie b o bază şi F : C → [0, ∞) funcţia definită mai sus. Atunci
1. F este surjectivă
v
2. Pentru orice număr real x > 0 care nu este de forma cu v∈N şi
bn
n∈ N* există un unic α ∈ C astfel încât F(α) = x.
v
3. Dacă numărul real x > 0 este de forma cu v∈N şi n∈ N* , atunci
bn
există două elemente α, β ∈ C cu α ≠ β astfel încât F(α) = F(β) = x.
În plus, dacă γ∈ C are proprietatea că F(γ) = x, atunci γ = α sau γ =
β.
Demonstraţie. În cele ce urmează notăm cu [y] partea întreagă a numărului
real y, adică cel mai mare număr întreg mai mic sau egal cu y.
1. Considerăm x ∈ (0, ∞) şi construim α ∈ C astfel încât F(α) = x. Pentru
orice n ∈ N, notăm qn = [xbn]. Din definiţia părţii întregi rezultă qn ≤ xbn < qn + 1,
qn q 1 q 1 q
sau echivalent n
≤ x < nn + n , ceea ce implică 0 ≤ x - nn < n şi lim nn =
b b b b b n → ∞ b
x. Pe de altă parte, înmulţind inegalitatea qn ≤ xbn < qn + 1 cu b şi ţinând cont că
[xbn+1] = qn+1, obţinem
21
Mădălina Roxana Buneci
n
αk n
q k − bq k −1 n
q q k −1 q q q
sn = ∑ k
= α0 + ∑ bk
= α0 + ∑ b kk − k −1
= α0 + nn - 00 = nn .
k =0 b k =1 k =1 b b b b
qn
Din lim = x, rezultă că lim sn = x.
n →∞ bn n →∞
v
2. Fie x > 0 un număr real care nu este de forma n
cu v∈N şi n∈ N*.
b
Presupunem prin absurd că în afara elementului α ∈ C construit anterior mai există
∞
βn n
β
β ∈ C astfel încât F(β)= x, sau echivalent ∑ bn = x. Dacă notăm tn = ∑ b kk suma
n =0 k =0
∞
β n
β
parţială de ordin n a acestei serii, atunci tn ≤ x şi x = ∑ b nn = ∑ b kk +
n =0 k =0
∞
βk n βk ∞
1 1 b 1
∑ k ≤ ∑ b k + (b-1) ∑ k
= tn + (b-1) n +1
b −1
= tn + n . Deci
k = n +1 b k =0 k = n +1 b b b
1
tn ≤ x ≤ tn + .
bn
1 v
Dar x nu poate fi egal cu tn + n
pentru că x nu este de forma n cu v∈N şi n∈
b b
1
N*. În consecinţă tn ≤ x < tn + n
şi tnbn ≤ xbn < tnbn + 1. Ţinând cont şi de faptul
b
qn n
αk
că tnbn ∈ N, rezultă că [xbn] = tnbn. Ca urmare tn = n
= ∑ k
suma parţială a
b k =0 b
α α β
seriei ∑ b nn . Seriile ∑ b nn şi ∑ b nn având sumele parţiale egale au termenii
n ≥0 n ≥0 n≥0
22
Metode Numerice
v
3. Fie x > 0 un număr real de este de forma n
cu v∈N şi n∈ N*. Fie n0 cel
b
v0
mai mic număr natural cu proprietatea că există v0 natural astfel încât x = .
b n0
n0
α
Utilizând relaţiile stabilite la punctul 1, obţinem q n 0 = [x b n 0 ] = x b n 0 = v0 şi ∑ b kk =
k =0
q n0 v0
n0
= = x. Deci
b b n0
α = (α0, α1, …, α n 0 , 0,0, …).
obţinem
∞
β n n0 α k 1 ∞
b −1 1 ∞
1
∑ b n = ∑ b k - b n0 + ∑ k
= x - n + (b-1) ∑ k
n =0 k =0 k = n 0 +1 b b 0 k = n 0 +1 b
1 1 b
=x- n0
+ (b-1) n 0 +1 = x.
b b b −1
Deci F(β) = x şi α ≠ β. În continuare presupunem că există γ∈ C cu proprietatea că
F(γ) = x. Fie n un număr natural cu proprietatea că există m > n astfel încât γm < b-1.
Atunci avem
∞
γi ∞
1 1
∑ i
< (b-1) ∑ i
= n.
i = n +1 b i = n +1 b b
∞ γi
Ţinând cont de reprezentarea lui x sub forma x = ∑ i
, obţinem
i =0 b
n γi ∞ γ n ∞ γi
xbn = bn ∑ i
+ bn ∑ b ii = ∑ b n −i γ i + bn ∑ i
.
i =0 b i = n +1 i=0 i = n +1 b
23
Mădălina Roxana Buneci
n ∞ γi n
Numărul ∑ b n −i γ i este natural, iar bn ∑ i
∈ [0, 1). Deci ∑ b n −i γ i = [xbn]. Cu un
i=0 i = n +1 b i =0
k
raţionament similar, obţinem că ∑ b k −i γ i = [xbk] pentru orice k ≤ n. Din aproape în
i=0
aproape se obţine
α0 = [xb0] = γ0
α1 = [xb1] - b[xb0] = γ0b + γ1 - bγ0 => α1 = γ1
n n −1
αn = [xbn] - b[xbn-1] = ∑ b n −i γ i - b ∑ b n −i γ i = γn => αn = γn
i=0 i=0
γ n N < b-1).
Presupunem că are loc cazul (i) şi considerăm N0 cel mai mic număr natural
cu proprietatea indicată. Din cele demonstrate mai sus rezultă că αi = γi pentru orice
i ≤ N0 -1 (deoarece γ N 0 < (b-1)). Demonstrăm că γ = β. Avem
∞
γ n N0 γ k ∞
b − 1 N0 γ k ∞
1
x= ∑ n = ∑ bk + ∑ k = ∑ b k + (b-1) ∑ k
n =0 b k =0 k = N 0 +1 b k =0 k = N 0 +1 b
N0
γk 1 b N0
γk 1 w
=∑ k
+ (b-1) N 0 +1
= ∑ k
+ N = N .
k =0 b b b − 1 k =0 b b 0 b 0
şi deci n0 ≤ N0. Presupunând prin absurd că n0 < N0, se obţine următoarea
contradicţie
n0
α k n0 α k ∞ γ ∞ γ
x =∑ k
< ∑ k + ∑ kk = ∑ nn = x
k =0 b k =0 b k = n 0 +1 b n =0 b
∞ γ ∞ α
Utilizând în continuarea egalitatea x = ∑ b nn = ∑ b nn , se obţine γ N 0 = α N 0 -1, şi
n =0 n =0
deci α=β.
Dacă are loc cazul (ii), atunci evident αn = γn pentru orice n, şi deci γ = α.
24
Metode Numerice
∞ α
Definiţie 2.3. Reprezentarea x = ∑ b nn în baza b a numărului real x > 0 se
n =0
Teoremă 2.4. Fie b o bază (adică b ∈ N, b ≥ 2). Un număr real x > 0 este
raţional dacă şi numai dacă x admite o reprezentare periodică în baza b.
Demonstraţie. Presupunem că x admite reprezentarea periodică
x = α0, α1α2…αN-1(αNαN+1…αN+p).
Atunci
∞ α N −1 α N+p
α 1 1 1
x= ∑ b nn = ∑ b nn + ∑ b nn 1 + p +1 + 2( p+1) + ... + n ( p+1) + ...
n =0 n =0 n=N b b b
N −1 α n N+p α n ∞
1 N −1 α n N + p α n b p +1
=∑ n
+∑ n ∑ b (p+1)n =∑ n
+ ∑ n p +1 ,
n =0 b n=N b n =0 n =0 b n=N b b −1
de unde rezultă că x este un număr raţional.
i
Reciproc să considerăm un număr raţional x = , cu i şi j numere naturale, j
j
∞ α
≠ 0. Demonstrăm că reprezentarea x = ∑ b nn în baza b este periodică. Dacă x este
n =0
v
de forma cu v∈N ne vom referi la acea reprezentare care are proprietatea că
bn
oricare ar fi N există nN ≥ N+1 astfel încât α n N ≠ b-1. Atunci avem
Notăm
x0 = x, xn+1 = b(xn - αn), n ≥ 0.
Se observă că
α0 = [x] = [x0]
25
Mădălina Roxana Buneci
26
Metode Numerice
v
corespunde cazului x = n
cu v∈N şi n∈ N*).
b
2. {xn} ≠ 0, dar se observă o periodicitate, adică una sau un grup de cifre care
v
se repetă ( această situaţie corespunde cazului x raţional dar x ≠ pentru
bm
orice v∈N şi m∈ N*).
3. {xn} ≠ 0, iar cifrele obţinute se succed fără a respecta vreo regulă ( această
situaţie corespunde cazului x iraţional). În această situaţie 0,α1α2 …αn
n
αk
=∑ k
reprezintă doar o aproximaţie pentru {x} în baza b.
k =1 b
27
Mădălina Roxana Buneci
28
Metode Numerice
k-1 k-2 0 2k − 1
11 ...1 2 = 2 +2 +…+ 2 = = 2k – 1
k ori
2 −1
Exemple:
k Domeniul de valori
62 = 25 + 24 + 23 + 22 +2 = 1111102 = 001111102
29
Mădălina Roxana Buneci
7 0
00111110 → 3E (în hexazecimal)
3 E
În reprezentarea binară a numerelor, ponderile cifrelor binare cresc de la dreapta la
stânga, numerotarea lor corespunzând puterilor crescătoare ale bazei de numeraţie
2. Astfel, prima cifră binară din dreapta reprezintă ponderea 20 şi este bitul cel mai
puţin semnificativ. Primul bit din stânga este bitul cel mai semnificativ.
0 ≺ 1 ≺ … ≺ 2k - 1
30
Metode Numerice
Mulţimea numerelor întregi nenegative reprezentabile pe k biţi (prin oricare din cele
trei metode) este {0, 1, 2, ..., 2k-1-1} (deoarece primul bit este rezervat, iar
reprezentarea se face doar pe restul de k-1 biţi).
+0 ≺ 1 ≺ … ≺ 2k-1-1 ≺ -0 ≺ -1 ≺ … ≺ -(2k-1-1)
31
Mădălina Roxana Buneci
numerelor întregi cu semn care pot fi reprezentate prin această metodă este
k k
x + x = 11 .... 1 + 1 = 2 - 1 + 1 = 2
2
k
De exemplu, pentru k = 16, reprezentările pentru x = -72 prin cele trei metode se
obţin după cum urmează:
32
Metode Numerice
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(){
unsigned char x=72;
signed char y=-72;
clrscr();
printf("\n%u-->%04X\n%d-->%04X",x,x,y,y);
getch();
}
Programul afisează
33
Mădălina Roxana Buneci
72 --> 0048
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:
… … … …
… … … …
34
Metode Numerice
m = mantisa
E = exponentul
1
cu 0,1b ≤ |m|b < 1b ⇔ ≤ |m| < 1 (ceea ce înseamnă că mantisa este un număr
b
subunitar cu prima cifră după virgulă în reprezentarea în bază b diferită de zero).
35
Mădălina Roxana Buneci
Una dintre cele mai răspândite reprezentări internă (în PC-uri) a numerelor
reale este reprezentarea în virgulă mobilă. Reprezentarea în virgulă mobilă
presupune existenţa unei baze b (întotdeauna presupusă pară) şi a unei precizii p.
Un număr în virgulă mobilă este un număr de forma
α1 α 2 α p −1
±(α0 + + 2 +…+ p −1 )bE, αk ∈ {0, 1, ...b-1} pentru orice k = 0, p − 1 , E ∈Z.
b b b
Mai precis, denumirea de număr în virgulă mobilă va fi utilizată pentru numerele
reale care se reprezintă exact sub forma de mai sus. În această reprezentare α0, α1,
…, αp-1 se numesc cifre semnificative. Fiecărei reprezentări în virgulă mobilă i se
asociază două numere întregi, Emin şi Emax, ce reprezintă valorile limită permise
pentru exponentul E (Emin ≤ E ≤ Emax). Tabelul de mai jos exemplifică cei patru
parametri (baza, precizia, valorile limită ale exponentului) ce caracterizează
reprezentarea în virgulă mobilă în diverse sisteme
36
Metode Numerice
37
Mădălina Roxana Buneci
38
Metode Numerice
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.
39
Mădălina Roxana Buneci
s ed α1…αp-1
40
Metode Numerice
s e7e6e5e4e3e2e1e0 α1 α2 α23
α1 α 2 α 23
Fie ed = e0 + e12 + e222 + … + e727 şi m = + 2 +…+ 23 . Valoarea v
2 2 2
reprezentată se determină după cum urmează:
▹ dacă 0 < ed < 255, atunci v = (-1)s⋅(1 + m)⋅2ed - 127.
41
Mădălina Roxana Buneci
α1 α 2 α 52
Fie ed = e0 + e12 + e222 + … + e10210 şi m = + 2 +…+ 52 . Valoarea v
2 2 2
reprezentată se determină după cum urmează:
▹ dacă 0 < ed < 2047, atunci v = (-1)s⋅(1 + m)⋅2ed - 1023.
x = 11100100,00100110011001…
Forma normalizată:
x = 0,111001000010011001…⋅ 28 = 1,11001000010011001…⋅ 27
ed = 7 + 28-1 - 1 = 135, ed2 = 100001102
m = 11001000010011001100110 [011]
(am omis primul bit =1, iar cei trei biţi din paranteză sunt utilizaţi pentru rotunjire la
par)
42
Metode Numerice
fl(x) = 1, 11001000010011001100110⋅ 28
Reprezentare în virgulă mobilă, simplă precizie, (cu bit ascuns) pentru 228,15:
11000001110110100000000000000000
C 1 D A 0 0 0 0
Deci reprezentării cu bit ascuns a lui -27,25 îi corespunde C1DA0000 în
hexazecimal.
x = 0,1
0,1 ⋅ 2 = 0,2
0,2 ⋅ 2 = 0,4
0,4 ⋅ 2 = 0,8
0,8 ⋅ 2 = 1,6 = 1 + 0,6
0,6 ⋅ 2 = 1,2 = 1 + 0,2
0,2 ⋅2 = 0,4
0,110 = 0, 00011001100110011…
x = 0, 110011001100…⋅2-3 = 1,10011001100110011001100 110…⋅2-4
fl(x) =1, 10011001100110011001101 ⋅ 2-4
(după cei 23 de biţi ai mantisei urmează 110, şi deci rotunjirea se face prin
adăugarea unei unităţi).
43
Mădălina Roxana Buneci
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.
#include <stdio.h>
#include <conio.h>
void main(){
long int *i;
float f1=228.15,f2=-27.25, f3=0.1, f4=1.2;
clrscr();
i=(long int*) &f1;
44
Metode Numerice
Programul afişează
45
Mădălina Roxana Buneci
#include <stdio.h>
#include <conio.h>
void main(){
float f=1./10,z=10;
int i;
clrscr();
for(i=1;i<33;i*=2){
printf("\n0.1*10^%d-10^%d = %f ",i+1,i,f*(z*10)-z);
z=z*z;
}
46
Metode Numerice
getch();
}
Programul afişează
0.1*10^2 - 10^1 = 0.000000
0.1*10^3 - 10^2 = 0.000001
0.1*10^5 - 10^4 = 0.000149
0.1*10^9 - 10^8 = 1.490116
0.1*10^17 - 10^16 = 149011616.000000
0.1*10^33 - 10^32 = 1490116168828835360000000.000000
1
Membrul drept ar fi trebuit să fie 0, deoarece ⋅10i+1 - 10i =0.
10
În cazul scăderii a două numere reale x şi y, poate apărea următorul fenomen
(catastrophic cancellation)
(fl(x ) − fl(y )) − fl(x − y )
εmach,
fl(x − y )
dacă fl(x) este egal (sau foarte apropiat de) fl(y). În următorul program (în C)
aproximăm sin(x) printr-o sumă parţială a seriei
∞
(− 1)n
∑ (2n + 1)! x 2n +1
n =0
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(){
float x,s,t,eps,x2;
int i,n;
clrscr();
printf("x=");scanf("%f",&x);
printf("Eroarea=");scanf("%f",&eps);
t=x;s=0;i=1; x2=x*x;
47
Mădălina Roxana Buneci
while (fabs(t)>=eps){
s+=t;printf("\n%f",s);
t=-t*(x2/(4*i*i+2*i));
i++;
}
printf("\nsin(%f) = %f",x,s);
printf("\nsin(%f) = %f" ,x,sin(x));
getch();
}
Pentru x=2 şi eroare 10-7 se obţine aproximaţia 0.909297 corectă a lui sin(2).
Pentru x = 40 şi eroare 10-7 se obţine aproximaţia 523443136.0 a lui sin(40) !
Valoarea corectă este 0.745113…Acest rezultat se datorează fenomenului de
reducere (catastrophic cancellation). Pentru a evidenţia diferenţele între cazurile în
care se lucrează în aritmetica exactă şi cazurile în care se lucrează în aritmetica în
virgulă mobilă prezentăm implementarea calculul sumei de mai sus (care
aproximează sin(x)) în MAPLE.
> sinus:=proc(x,epsilon)
> local t, x2, i,s;
> s:=0; i:=1;t:=x;x2:=x*x;
> while evalf(abs(t))>=evalf(epsilon) do
> s:=s+t; t:=-t*x2/(4*i*i+2*i);i:=i+1
> od;
> RETURN(s)
> end;
141782
Pentru x=2 şi eroare 10-5 se obţine aproximaţia ≈ 0.9092961362 corectă a
155925
lui sin(2):
> evalf(sinus(2,10^(-5)));
0.9092961360
48
Metode Numerice
> evalf(sin(2));
0.9092974268
> sinus(2., 10^(-5));
0.9092961362
> sin(2.);
0.9092974268
Atunci când primul parametru al procedurii sinus este întreg (sau raţional)
toate calculele se execută simbolic, iar când parametru este în virgulă mobilă
calculele se execută în virgulă mobilă.
Pentru x = 30 şi eroare 10-5 se obţine:
> evalf(sinus(30,10^(-5)));
-0.9880298724
> evalf(sin(30));
-0.9880316241
> sinus(30., 10^(-5));
-13.41937809
> sin(30.);
-0.9880316241
> val:=proc(p,x)
> local n,i,v;
> n:=nops(p);v:=p[n];
49
Mădălina Roxana Buneci
Astfel
> val([1,2,1], 2);
9
calculează valoarea polinomului 1 + 2X + X2 în X = 2.
Să considerăm polinomul
(X-1)8 = 1 – 8X + 28X2 – 56X3 + 70X4 – 56X5 + 28X6 - 8X7 + X8).
9999
Reprezentarea grafică a acestui polinom pe intervalul [ ,1] este:
10000
0.1000000000 10 -31
50
Metode Numerice
0.4304672100 10 -32
0.1677721600 10 -32
0.5764801000 10 -33
0.1679616000 10 -33
0.3906250000 10 -34
0.6553600000 10 -35
0.6561000000 10 -36
0.2560000000 10 -37
0.1000000000 10 -39
0.
Aceeaşi procedură apelată cu aceeaşi parametrii, cu singura excepţie că
punctele în care se calculează valorile sunt reprezentate în virgulă mobilă dă
rezultatele:
> for i from 0 to 10 do evalf(val([1,-8,28,-56,70,-56,28,-8,1],
0.9999+i/100000)) od;
0.
-0.1 10 -8
0.84 10 -8
-0.14 10 -7
-0.8 10 -8
-0.2 10 -8
-0.8 10 -8
-0.14 10 -7
0.84 10 -8
-0.1 10 -8
0.
Erorile mari se datorează execuţiei calculelor în aritmetica virgulei mobile. Şi mai
sugestiv este graficul de mai jos:
51
Mădălina Roxana Buneci
52
Metode Numerice
2. Şirul (xn)n din V este şir Cauchy (fundamental) dacă şi numai dacă pentru orice
ε>0 există nε ∈ N astfel încât || xn - xm || < ε pentru orice m,n ≥ nε.
3. || ⋅ || : V → [0, ∞) este o aplicaţie continuă
53
Mădălina Roxana Buneci
5. sup ||f(x)||< ∞.
x =1
54
Metode Numerice
Dacă pentru orice f∈ L(V, W), definim || f || = sup ||f(x)||, atunci (L(V, W), ||⋅||)
x ≤1
devine un spaţiu normat. Spaţiul L(V, W) este denumit spaţiul operatorilor liniari
şi mărginiţi definiţi pe V cu valori în W, iar elementele din L(V, W) se mai numesc
operatori liniari mărginiţi. Spaţiul operatorilor liniari şi mărginiţi L(V, W) este
spaţiu Banach dacă şi numai dacă W este spaţiu Banach.
Dacă V este un spaţiu normat iar pe spaţiul L(V, V) introducem drept lege
de "înmulţire" compunerea operatorilor, atunci L(V, V) devine o algebră normată.
Dacă V este un spaţiu normat peste corpul K, atunci spaţiul normat L(V, K) se
numeşte dualul lui V şi se notează V'.
Fie H un spaţiu vectorial peste corpul K (K=R sau K=C). Se numeşte
produs scalar pe H o aplicaţie ϕ : H × H → K care are următoarele proprietăţi:
1. ϕ(x+y, z) = ϕ(x, z) + ϕ(y, z) pentru orice x, y, z ∈ H.
2. ϕ(λx, y) = λϕ(x, y) pentru orice λ∈K şi x ∈ H
normat (H, || ⋅ ||) provine dint-un produs scalar <⋅, ⋅> dacă ||x|| = x , x pentru
orice x din H. Un spaţiu pre-Hilbert este un spaţiu normat în care norma provine
dintr-un produs scalar, iar un spaţiu Hilbert este un spaţiu prehilbert complet (cu
normă completă).
Dacă H un spaţiu prehilbert, atunci:
1. Două elemente x şi y din H se numesc ortogonale dacă <x, y> =0.
2. Pentru A ⊂ H şi x∈H, x se spune ortogonal pe A şi se notează x⊥A, dacă
<x,y>=0 pentru orice y∈A.
3. O familie (xi)i de elemente ale lui H se numeşte sistem ortogonal sau familie
ortogonală dacă <xi, xj> =0 pentru orice i ≠ j.
4. Un sistem ortogonal (xi)i se numeşte ortonormal dacă ||xi|| = 1 pentru orice i.
5. Se numeşte bază ortonormală a spaţiului Hilbert H un sistem ortonormal
maximal (în raport cu relaţia de incluziune).
55
Mădălina Roxana Buneci
2
5. Dacă x∈H, atunci ||x|| = ∑ x, x i .
i
Orice două baze ortonormale ale unui spaţiu Hilbert au acelaşi cardinal.
Dimensiunea (hilbertiană) a unui spaţiu Hilbert este cardinalul unei baze
ortonormale.
Dacă F este un subspaţiu al spaţiului Hilbert H, atunci se notează cu
F⊥ = {x, x⊥F}
complementul ortogonal al lui F. Dacă F este un subspaţiu închis, atunci H = F +
F⊥ (orice element din H poate fi reprezentat în mod unic ca suma dintre un element
din F şi unul din F⊥).
Se numeşte adjunctul operatorului liniar şi mărginit A ∈ L(H1, H2) (unde
H1, H2 sunt spaţii Hilbert) operatorul liniar şi mărginit A*∈ L(H2, H1)care satisface
condiţia:
<A(x), y > =<x, A*(y) > pentru orice x∈H1, y∈H2.
Orice operator liniar şi mărginit admite un unic adjunct.
Dacă H este un spaţiu Hilbert şi A∈L(H, H), atunci
1. A se numeşte autoadjunct (sau hermitian) dacă A = A*.
2. A se numeşte unitar dacă AA* = A*A =I.
3. A se numeşte pozitiv dacă A este autodjunct şi <A(x), x> ≥ 0 pentru
orice x ∈H.
Considerăm spaţiul vectorial V = Kn(K=R sau K=C), n∈N*. Pe acest spaţiu
Banach orice două norme sunt echivalente. Vom nota cu ||⋅||∞, ||⋅||1, ||⋅||2 următoarele
norme uzuale pe Kn:
56
Metode Numerice
n
||x||1 = ∑ xj
j=1
1/ 2
n 2
||x||2 = ∑ x j
j=1
pentru orice x = (x1, x2, …, xn) ∈ Kn.
Norma ||⋅||2 se numeşte normă euclidiană şi provine din produsul scalar canonic
n
<x, y> = ∑xjyj pentru x = (x1, x2, …, xn) şi y = (y1, y2, …, yn)
j=1
n
(dacă K = R, atunci <x, y> = ∑ x j y j ).
j=1
Transpusa unei matrice A=(aij)i,j, este o matrice notată At = ( a it, j )i,j, ale cărei
Conjugata unei matrice A=(aij)i,j, este o matrice notată A* = ( a *i, j )i,j, ale cărei
elemente sunt: a *i , j = a j,i pentru orice 1≤i≤n, 1≤j≤m. Conjugata este caracterizată
prin :
<Ax, y> = <x, A*y> pentru orice x∈Kn şi orice y∈Km.
O matrice pentru care m=n se numeşte pătratică. Elementul neutru la înmulţire în
Mn,n(K) este matricea unitate In:
57
Mădălina Roxana Buneci
1 0 0 … 0
0 1 0 … 0
0 0 0 … 1
O matrice A∈ Mn,n(K) este inversabilă dacă există B∈ Mn,n(K) astfel încât
AB=BA=In. Inversa unei matrice A se notează A-1. Matricea A este inversabilă dacă
şi numai dacă det(A) ≠ 0 - în acest caz se zice nesingulară.
Matricele pentru care A=At se numesc matrice simetrice, iar cele pentru care A=A*
se numesc matrice hermitiene (evident, pentru matrice cu coeficienţi reali cele două
noţiuni coincid). O matrice A se zice ortogonală dacă A-1 =At şi unitară dacă A-1
=A*. Matricea A este
▹ diagonală dacă aij=0 pentru orice i≠j
a1 0 … 0
A= 0 a2 … 0 = diag(a1, a2,…, an)
0 0 … an
▹ tridiagonală dacă aij=0 pentru orice i,j cu |i-j|>1
a1 b1 0 … 0 0
A= c2 a2 b2 … 0 0
0 0 0 … cn an
▹ superior triunghiulară dacă ai,j = 0 pentru orice i > j.
▹ inferior triunghiulară dacă ai,j = 0 pentru orice i < j.
▹ superior Hessenberg dacă ai,j = 0 pentru orice i > j+1.
▹ inferior Hessenberg dacă ai,j = 0 pentru orice i < j-1.
58
Metode Numerice
În cele ce urmează vom identifica A cu S(A). Cele mai des utilizate norme de
matrice sunt normele operatoriale: astfel pentru o matrice A∈ Mm,n(K), dacă pe Km
se consideră norma ||⋅||α, iar pe Kn se consideră norma ||⋅||β, atunci se notează cu
||A||αβ norma de aplicaţie liniară:
sup ||Ax||α = sup ||Ax||α.
x β ≤1 x β =1
În cazul în care α=β se utilizează notaţia ||A||α = ||A||αα şi se spune că ||A||α este
norma operatorială a lui A subordonată normei vectoriale ||⋅||α.
Fie A∈ Mn,n(C). Scalarul λ din C se numeşte valoare proprie pentru A dacă
există vectorul nenul x ∈ Cn astfel încât:
Ax= λx
Vectorul x se numeşte vector propriu asociat valorii proprii λ. Mulţimea valorilor
proprii ale lui A formează spectrul lui A şi se notează cu σ(A). Raza spectrală a lui
A se defineşte prin:
ρ(A) = max λ
λ∈σ ( A )
||A||2 = (
ρ A*A . )
Pentru orice matrice A∈ Mn,n(C) şi orice norma operatorială ||A|| subordonată unei
normei vectoriale avem ρ(A) ≤ ||A||. Deşi norma ||A||2 este importantă din punct de
vedere teoretic (corespunde distanţei euclidiene), în general, în aplicaţiile numerice
59
Mădălina Roxana Buneci
60
Metode Numerice
∑ ( −1) (
ε σ)
det(C) = c1σ(1)c 2σ( 2 ) ...c nσ( n )
σ∈Sn
61
Mădălina Roxana Buneci
nn
Deoarece n!> n (pentru n ≥1), rezultă că Nop(n) > n
( n + 1)n +1 . De exemplu, dacă
e en +1
se utilizează un sistem de calcul ce execută 109 operaţii pe secundă, atunci pentru
rezolvarea unui sistem cu n ecuaţii şi n necunoscute timpii de execuţie sunt
prezentaţi în tabelul de mai jos
n Timp de execuţie
n=5 0.5782433079 ⋅ 10-6 s
n=10 0.04765190154 s
n = 15 31138.61350 s = 8.649614862 ore
n = 20 > 2809 ani
n = 25 >1011 ani
n= 30 >1018 ani
62
Metode Numerice
•
(k)
Se determină pivotul de la pasul k; acesta este primul element a k,i
de pe coloana k cu proprietatea
(k) (k)
| a k,i |=max{| a k, j |, k≤j≤n}
• Se permută liniile i cu k;
•
(k)
Se aplică regula dreptunghiului (pivotului) cu pivotul a k,k . Astfel:
63
Mădălina Roxana Buneci
k j
(k) (k)
k a k,k a k, j
(k) (k)
i a i,k a i, j
(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
64
Metode Numerice
> 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;
65
Mădălina Roxana Buneci
1 2 0
A := 2 1 1
1 -3 2
> elimpp(A);
1 2 0
2 1 1
1 -3 2
2 1 1
1 2 0
1 -3 2
1 1
1
2 2
3 -1
0
2 2
-7 3
0
2 2
1 1
1
2 2
-7 3
0
2 2
3 -1
0
2 2
1 1
1
2 2
-3
0 1
7
1
0 0
7
1 1 1
2 2
-3
0 1
7
0 0 1
> A1:=matrix(3,2,[3,2,-1,5,2,0]);
3 2
A1 := -1 5
2 0
> elimpp(A1);
66
Metode Numerice
3 2
-1 5
2 0
2
1
3
17
0
3
-4
0
3
1 2
3
0 1
0 0
> A2:=matrix(2,3,[1,-1,2,3,4,-2]);
1 -1 2
A2 :=
3 4 -2
> elimpp(A2);
1 -1 2
3 4 -2
3 4 -2
1 -1 2
4 -2
1
3 3
-7 8
0
3 3
4 -2
1
3 3
-8
0 1
7
67
Mădălina Roxana Buneci
n3
operaţii elementare. Deci Nop(n) ~ (sau Nop(n) ∈ O(n3) ).
3
Ca urmare a aplicării algoritmului se obţine sistemul echivalent:
⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
xn = a (nn,n) +1
Rezolvarea acestui sistem se poate face foarte uşor de la sfârşit spre început:
xn = a (nn,n) +1
n
x i = a i(i,n) +1 − ∑ a i(,i )j x j
j=i +1
Procedura rezsist de mai jos întoarce soluţia unui sistem liniar cu n ecuaţii şi
n necunoscute. Parametri procedurii sunt matricea sistemului şi vectorul termenilor
liberi
> with(linalg):
> rezlin:=proc(A,b)
> local a,x,n,i,j,k,aux;
68
Metode Numerice
> n:=rowdim(A);
> a:=matrix(n,n+1);
> for i to n do
> for j to n do a[i,j]:=A[i,j] od;
> a[i,n+1]:=b[i] od;
> for k to n do i:=k;aux:=abs(a[k,k]);
> for j from k+1 to n do
> if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od;
> if i>k then for j from k to n+1 do
> aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi;
> if a[k,k]=0 then print(`matrice singulara`);RETURN(NULL) fi;
> for j from k+1 to n+1 do a[k,j]:=a[k,j]/a[k,k] od;
> for i from k+1 to n do
> for j from k+1 to n+1 do a[i,j]:=a[i,j]-a[k,j]*a[i,k] > od od;
> od;
> x:=vector(n);x[n]:=a[n,n+1];
> for i from n-1 by -1 to 1 do x[i]:=a[i,n+1];
> for j from i+1 to n do x[i]:=x[i]-a[i,j]*x[j] od od;
> RETURN(evalm(x))
> end;
> a1:=matrix(3,3,[1,1,1,1,-1,2,-1,-1,3]);
1 1 1
a1 := 1 -1 2
-1 -1 3
> b1:=vector(3,[3,2,1]);
b1 := [ 3, 2, 1 ]
> rezlin(a1,b1);
[ 1, 1 , 1 ]
> linsolve(a1,b1);
[ 1, 1 , 1 ]
69
Mădălina Roxana Buneci
trebuie avut în vedere faptul că prin permutarea a două linii semnul determinantului
se schimbă. Procedura determinant de mai jos are drept parametru matricea şi
întoarce determinantul. Pentru transformarea matricei A într-o matrice superior
triunghiulară se foloseşte algoritmul de eliminare Gauss cu pivotare parţială.
>determinant:=proc(A)
>local a,n,i,j,k,d,aux;
>n:=rowdim(A);
>a:=matrix(n,n);
>for i to n do
>for j to n do a[i,j]:=A[i,j] od od;
>d:=1;
>for k to n do i:=k;aux:=abs(a[k,k]);
>for j from k+1 to n do
>if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od;
>if i>k then d:=-d; for j from k to n do
>aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi;
>if a[k,k]=0 then d:=0;RETURN(d) fi; d:=d*a[k,k];
>for j from k+1 to n do a[k,j]:=a[k,j]/a[k,k] od;
>for i from k+1 to n do
>for j from k+1 to n do a[i,j]:=a[i,j]-a[k,j]*a[i,k] od od;
>od;
>RETURN(d)
>end;
Exemplificăm utilizarea procedurii de mai sus
> a2:=matrix(3,3,[1,1,1,1,8,3,12,1,2]);
70
Metode Numerice
1 1 1
a2 := 1 8 3
12 1 2
> determinant(a2);
-48
> det(a2);
-48
Comanda det(A) din pachetul linalg calculează determinantul matricei
indicate drept parametru.
Fie A∈Mn,n (R). Matricea A este inversabilă dacă şi numai dacă există o
matrice B∈ Mn,n (R) astfel încât A⋅B=B⋅A=In, unde
1 0 0 ---------- 0
In= 0 1 0 ---------- 0
---------------------------------------
0 0 0 ---------- 1
Se ştie că A este inversabilă dacă şi numai dacă are determinantul nenul. Notăm:
ek = (0,…,0,1,0…0)t
vectorul k al bazei canonice din Rn.
Pentru fiecare k (k=1,2,…,n) considerăm sistemul Ax=ek. Soluţia acestui
sistem reprezintă chiar coloana k a matricei A-1. Astfel pentru aflarea lui A-1 este
necesar să rezolvăm n sisteme de ecuaţii liniare Ax=ek, k=1,2,…,n. Aceste sisteme
pot fi rezolvate utilizând algoritmul de eliminare al lui Gauss. Pentru a micşora
volumul de calcul vom aplica algoritmul asupra matricei obţinute prin concatenarea
la matricea A a coloanelor bazei canonice din Rn. Coeficienţii matricei
A = (A|e1|e2|------|en)
sunt
71
Mădălina Roxana Buneci
aij, dacă 1 ≤ i, j ≤ n
ai,n+k = δik, dacă 1 ≤ i, k≤ n
unde
1, i=k
δik= 0, i≠k.
unde A(0)= A, iar A(n) are următoarea formă superior triunghiulară:
bn,k= a (nn, n) + k , 1 ≤ k ≤ n
n
bi,k= a i(,in) + k - ∑ a i(,ij) bi, j , 1 ≤ i ≤ n-1, 1 ≤ k ≤ n
j= i +1
Procedura inversa de mai jos întoarce inversa matricei indicată drept parametru.
> inversa := proc(A)
> local n,a, b, i, j, k,aux;
> n:=rowdim(A);
> b := matrix(n, n); a := matrix(n, 2*n);
> for i to n do for j to n do a[i, j] := A[i, j] od od;
> for i to n do for j to n do a[i, j + n] := 0 od od;
> for i to n do a[i, i + n] := 1 od;
72
Metode Numerice
> for k to n do
> aux := abs(a[k, k]);i := k;
> for j from k + 1 to n do
> if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi
> od;
> for j from k to 2*n do
> aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od;
> if a[k, k] = 0 then print(`Matrice singulara`);
> RETURN(NULL) fi;
> for j from k + 1 to 2*n do a[k, j] := a[k, j]/a[k, k] od;
> for i from k + 1 to n do
> for j from k + 1 to 2*n do
> a[i, j] := a[i, j] - a[k, j]*a[i, k] od od;
> od;
> for i to n do b[n, i] := a[n, i + n] od;
> for k to n do
> for i from n - 1 by -1 to 1 do
> b[i, k] := a[i, n + k];
> for j from i + 1 to n do
> b[i, k] := b[i, k] - a[i, j]*b[j, k] od
> od
> od;
> RETURN(evalm(b))
> end;
Calculul inversei matricei
1 1 1
1 2 3
2 1 2
1 1 1
a3 := 1 2 3
2 1 2
> inversa(a3);
73
Mădălina Roxana Buneci
1 -1 1
2 2 2
2 0 -1
-3 1 1
2 2 2
Comanda inverse din pachetul linalg calculează de asemenea inversa unei matrice.
În exemplul următor presupunem că o aplicăm asupra aceleaşi matrice a3.
> inverse(a3);
1 -1 1
2 2 2
2 0 -1
-3 1 1
2 2 2
74
Metode Numerice
−1
• cond(D) = max αi min αi pentru orice matrice diagonală
1≤i≤n 1≤i≤n
D=diag(α1, α2, ..., αn).
Calcul valorii exacte a factorului de condiţionare al unei matrice A
presupune calculul ||A-1||. Cum numărul de operaţii necesare pentru calculul normei
inversei lui A (||A-1||) este mai mare decât cel pentru rezolvarea unui sistem liniar
Ax = b, de obicei în practică se foloseşte un estimator pentru ||A-1||. Determinarea
unei estimaţii pentru ||A-1|| pleacă de la observaţia că, dacă Ax = y, atunci
x
≤ ||A-1||,
y
75
Mădălina Roxana Buneci
x̂ − x * E
≤ cond(A) .
x̂ A
A x = b̂ ,
a cărui soluţie o notăm cu x̂ . Atunci
A x̂ = b̂ - b + b
A x̂ = b̂ - b + Ax*
A(x*- x̂ ) = b- b̂
x*- x̂ = A-1(b- b̂ )
Atunci
Ax *
||x*- x̂ || = || A-1(b- b̂ )|| ≤ || A-1|| ⋅|| (b- b̂ )|| =|| A-1|| ⋅|| (b- b̂ )|| ≤
b
-1
b − bˆ
≤ || A || ||A|| ||x*||,
b
de unde
x̂ − x * b − bˆ
≤ cond(A) .
x* b
76
Metode Numerice
Exemplu
Considerăm sistemul Ax = b, unde
A= 888.445 887.112
887.112 885.781
şi
b= 1
0
Considerăm următoarele comenzi MAPLE:
> with(linalg):
> A:=matrix(2,2,[888.445,887.112,887.112,885.781]);
888.445 887.112
A :=
887.112 885.781
> A1:=matrix(2,2,[888445/1000,887112/1000,887112/1000,
885781/1000]);
177689 110889
200 125
A1 :=
110889 885781
125 1000
> cond(A1);
3152602660249
77
Mădălina Roxana Buneci
> b:=vector([1,0]);
b := [ 1, 0 ]
> Digits:=6;
Digits := 6
> linsolve(A,b);
[ -499.248 , 500.000 ]
> Digits:=15;
Digits := 15
> linsolve(A,b);
[ 0.887555222890557 10 9, -0.888888888888889 10 9 ]
> Digits:=10;
Digits := 10
> linsolve(A,b);
[ 0.2496249066 10 7, -0.2500000000 10 7 ]
> linsolve(A1,b);
[ 885781000, -887112000 ]
Deşi matricele A şi A1 sunt egale - diferenţa este dată doar de reprezentarea
coeficienţilor: simbolic (ca numere raţionale) în cazul lui A1 şi în virgulă mobilă în
cazul lui A – comenzile linsolve(A,b) şi linsolve(A1,b) întorc rezultate diferite.
Soluţia corectă a sistemului este cea obţinută în varianta în care s-a lucrat simbolic:
x1 = 885781000
x2 = -887112000
Rezultatul eronat furnizat de comanda linsolve(A,b) se datorează relei condiţionări
a matricei A. Se observă că factorul de condiţionare este:
0.315260266024900 10 13
Revenim la sistemul
Ax = b, cu A nesingulară
notăm cu x* soluţia exactă şi cu x̂ soluţia aproximativă. Vectorul
r = b - A x̂
se numeşte reziduu. Avem
||x*- x̂ || = 0 ⇔ ||r|| = 0,
dar ||x*- x̂ || şi ||r|| nu sunt mici simultan. Avem
r = b - A x̂ = Ax* - A x̂ = A(x*- x̂ )
78
Metode Numerice
A-1r = x* - x̂
1
|| x* - x̂ || = ||A-1r|| ≤ ||A-1|| ||r|| =cond(A) ||r|| =
|| A ||
|| x* || || x* ||
= cond(A) ||r|| ≤ cond(A) ||r|| =
|| A |||| x* || || Ax* ||
|| x* ||
= cond(A) ||r||.
|| b ||
de unde rezultă
x * − xˆ r
≤ cond(A)
x* b
b = 2.001
2
Evident soluţia corectă a sistemului este
x1 = 1
x2 = 1
Dacă se consideră vectorul y
y1 2
y2 = 0
se observă că
b - Ay = 0.001
0
79
Mădălina Roxana Buneci
Deci y aparent verifică sistemul, deşi este diferit de x. Aceasta se datorează valorii
factorului de condiţionare al lui A pe care-l putem determina folosind următoarele
comenzi MAPLE:
> with(linalg):
> A:=matrix(2,2,[1,1.001,1,1]);
1 1.001
A :=
1 1
> cond(A);
4004.001000
Arătăm în continuare că dacă reziduu este mare atunci variaţia relativă a
coeficienţilor matricei de intrare A este mare. Să presupunem că x̂ este soluţia
sistemului (A+E) x = b. Atunci
(A+E) x̂ = b
E x̂ = b -A x̂
E x̂ = r
de unde
||r|| = ||E x̂ || ≤ ||E|| || x̂ ||,
şi ca urmare
|| r || || E ||
≤ .
ˆ
|| A |||| x || || A ||
IV.4.1. Generalităţi
80
Metode Numerice
lim x k = x* pentru orice termen iniţial x0 dacă şi numai dacă lim G k e0 =0 pentru
k →∞ k →∞
81
Mădălina Roxana Buneci
orice e0, sau echivalent lim G k =0. Este cunoscut că lim G k =0 dacă şi numai
k →∞ k →∞
0 0 0 …… 0 0
L = a2,1 0 0 …… 0 0
………………………..
an,1 an,2 an,3 …… an,n-1 0
82
Metode Numerice
1
0 0 …… 0 0
a11
1
N-1 = 0 0 ……0 0
a 22
……………………..
1
0 0 0 ……0
a nn
1
0 0 …… 0 0 0 -a1,2 -a1,3 …… -a1,n-1 -a1,n
a11
1 -a2,1 0 -a2,3 …… -a2,n-1 -a2,n
0 0 ……0
-1
N P= a 22
…………………….. :......................................................
0, i = j
a i, j
gi,j = − , i ≠ j.
a i ,i
83
Mădălina Roxana Buneci
ρ(G) ≤ min( G 1 , G ∞
), şi ca urmare pentru a asigura convergenţa şirului (xk)k este
suficient ca min( G 1 , G ∞
)<1.
Calculăm G 1 :
n
G 1 = max{ ∑g i =1
i, j ,1 ≤j≤n}
n a i, j
= max{ ∑ , 1 ≤j≤n}
i =1 a i ,i
i≠ j
Calculăm G ∞ :
n
G ∞
= max{ ∑ g i , j ,1 ≤i≤n}
j=1
n a i, j
= max{ ∑ ,1 ≤i≤n}.
j=1 a i ,i
j≠ i
Dacă G 1 < 1 sau G ∞ <1, atunci ρ(G) <1. Dar condiţia G ∞ <1 este echivalentă cu
n a i, j
∑a j=1
< 1 pentru orice i, 1 ≤i≤n
i ,i
j≠ i
n
| ai,i | > ∑ a i , j pentru orice i, 1 ≤i≤n
i =1
i≠ j
caz în care spunem că A este diagonal dominantă. Deci dacă ai,i ≠ 0 pentru orice i
= 1,2,…, n, şi dacă A este diagonal dominantă atunci şirul obţinut prin metoda
Jacobi converge la soluţia exactă a sistemului Ax = b. Dacă ek = x*- xk este eroarea
absolută cu care xk aproximează x*, soluţia exactă a sistemului Ax = b, atunci ek =
Gke0 pentru orice k ≥ 0. În consecinţă, pentru orice norme compatibile
k
ek ≤ G k e0 ≤ G k e0 ≤ G e0
84
Metode Numerice
85
Mădălina Roxana Buneci
> suma:=suma/abs(a[i,i]);
> if ni<suma then ni:=suma fi;
> od;
> n1:=0;
> for j to n do
> suma:=0;
> for i to j-1 do suma:=suma+abs(a[i,j]/a[i,i]) od;
> for i from j+1 to n do suma:=suma+abs(a[i,j]/a[i,i]) od;
> if n1<suma then n1:=suma fi;
> od;
> if ni>n1 then ni:=n1 fi;
> if ni>=1 then print (`Metoda nu se aplica`); RETURN fi;
> k:=floor(ln(epsilon)/ln(ni))+1;
> x1:=vector(n); x2:=vector(n);
> for i to n do x1[i]:=x0[i] od;
> for p to k do
> for i to n do
> x2[i]:=b[i];
> for j to i-1 do
> x2[i]:=x2[i]-a[i,j]*x1[j] od;
> for j from i+1 to n do
> x2[i]:=x2[i]-a[i,j]*x1[j] od;
> x2[i]:=x2[i]/a[i,i]; od;
> for i to n do x1[i]:=x2[i] od
> od;
> RETURN(evalm(x2))
> end;
Utilizăm această procedură pentru rezolvarea sistemului:
3 x1 + x2 + x3 = 4
x1 + 5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
3 1 1
a := 1 5 1
-1 1 8
86
Metode Numerice
> b:=vector([4,-2,14]);
b := [ 4, -2, 14 ]
> linsolve(a,b);
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mjacobi (a,b,x0,0.001);
[ 1.000000094 , -0.9999998188 , 1.999999921 ]
> x1:=vector(3,[0,1,2345]);
x1 := [ 0, 1, 2345 ]
> mjacobi (a,b,x1,10^(-3));
a1,1 0 0 … 0 0 x1k +1
a2,1 a2,2 0 … 0 0
x k2 +1
:..................................................
= Pxk + b
an,1 an,2 an,3 …… an,n-1 ann
x kn +1
Deci
1 1 n 1 n
x1k +1 = ((Pxk)1 + b1) = ( ∑ P1, jx kj + b1) = ( ∑ P1, jx kj + b1) =
a1,1 a1,1 j=1 a1,1 j=2
87
Mădălina Roxana Buneci
1 n 1 n
= ( ∑ −a1,jx kj + b1) = (b1 - ∑ a1,jx kj )
a1,1 j=2 a1,1 j= 2
i−1 n i−1
1 1
x ik +1 = ((Pxk)i + bi - ∑ a i, jx kj +1 ) = ( ∑ Pi, jx kj + bi - ∑ a i, jx kj +1 )
a i,i j=1 a i,i j=1 j=1
n i−1
1
= ( ∑ Pi, jx kj + bi - ∑ a i,jx kj +1 )
a i,i j=i +1 j=1
n i−1
1
= ( ∑ −a i, jx kj + bi - ∑ a i,jx kj +1 )
a i,i j=i +1 j=1
n i−1
1
= ( bi - ∑ a i, jx kj - ∑ a i, jx kj +1 )
a i,i j=i +1 j=1
n i−1
1
x ik +1 = ( bi - ∑ a i,jx kj - ∑ a i,jx kj +1 ), i =2,3,…,n
a i,i j=i +1 j=1
Ca şi în cazul metodei Jacobi dacă A este diagonal dominantă atunci şirul obţinut
prin metoda Gauss-Seidel converge la soluţia exactă a sistemului Ax=b. De
asemenea dacă A este o matrice simetrică şi are elementele de pe diagonala
principală pozitive, atunci metoda Gauss-Seidel converge dacă şi numai dacă
matricea A este pozitiv definită.
Procedura Maple de mai jos are drept parametri, matricea sistemului
presupusă diagonal dominantă, vectorul termenilor liberi, aproximaţia iniţială x0 a
soluţiei, şi eroarea epsilon. Procedura întoarce aproximaţia xk (dată de metoda
Gauss Seidel) a soluţiei cu
ln (epsilon )
k= +1 .
(
ln N −1 P
∞
)
88
Metode Numerice
> with(linalg):
> mgaussseidel := proc(a, b,x0, epsilon)
> local n, ni, x1, k, i, j, p, suma;
> n:=rowdim(a);
> ni := 0;
> for i to n do
> suma := 0;
> for j to i - 1 do suma := suma + abs(a[i, j])od;
> for j from i + 1 to n do suma := suma + abs(a[i, j])
> od;
> if a[i, i] = 0 then
> print(`Metoda nu se aplica`); RETURN(NULL) fi;
> suma := suma/abs(a[i, i]);
> if ni < suma then ni := suma fi
> od;
> if 1 <= ni then
> print(`Matricea nu este diagonal dominanta`);
> RETURN (NULL) fi;
> k := floor(ln(epsilon)/ln(ni)) + 1;
> x1 := vector(n);
> for i to n do x1[i]:=x0[i] od;
> for p to k do x1[1] := b[1];
> for j from 2 to n do
> x1[1] := x1[1] - a[1, j]*x1[j] od;
> x1[1] := x[1]/a[1, 1];
> for i from 2 to n do
> x1[i] := b[i];
> for j from i + 1 to n do
> x1[i] := x1[i] - a[i, j]*x1[j] od;
> for j to i - 1 do x1[i] := x1[i] - a[i, j]*x1[j] od;
> x1[i] := x1[i]/a[i, i]
> od;
> od;
> RETURN(evalm(x1))
> end;
89
Mădălina Roxana Buneci
3 x1 + x2 + x3 = 4
x1 + 5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
3 1 1
a := 1 5 1
-1 1 8
> linsolve(a,b);
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mgaussseidel(a,b,x0,10^(-3));
[ 1.000000000 , -1.000000000 , 2.000000000 ]
> x1:=vector(3,[0,1,2345]);
x1 := [ 0, 1, 2345 ]
1703893329976716088550034332273 , -170389332997668792871267240303 ,
1703893329976655609856000000000 170389332997665560985600000000
9087431093208860851748902245101
4543715546604414959616000000000
> map(evalf,mgaussseidel(a,b,x1,10^(-3)));
90
Metode Numerice
1
Deci factorul de condiţionare absolut al problemei f(x) = 0 este . Dacă ε > 0 şi
f ′(x)
x̂ este un număr real cu proprietatea că |f( x̂ )| ≤ ε atunci
91
Mădălina Roxana Buneci
1
| x̂ - x*| ≤ ε .
f ′(x*)
(unde x* este o rădăcină a ecuaţiei f(x) = 0). În general, | x̂ -x*| şi |f( x̂ )| nu sunt
simultan mici (| x̂ -x*| este eroarea absolută cu care x̂ aproximează x*, iar |f( x̂ )|
1
indică reziduu corespunzător lui x̂ ). Dacă problema este bine condiţionată (
f ′(x*)
mic), atunci reziduu mic implică eroare absolută | x̂ -x*| mică.
Dacă
• r = 1 şi 0 < C<1, rata convergenţei se spune liniară
• r = 1 şi C = 0 (sau r > 1), rata convergenţei se spune superliniară
• r = 2, rata convergenţei se spune pătratică
92
Metode Numerice
Se construieşte astfel un şir de intervale (In)n , In = [an, bn], cu lungimea lui In egală
cu jumătate din lungimea lui In-1. Fiecare din aceste intervale conţine o soluţie a
ecuaţiei f(x) = 0. Presupunem că se dă o precizie ε>0. Considerăm că cn mijlocul
intervalului In este o aproximaţie satisfăcătoare a soluţiei ecuaţiei f(x) = 0 dacă
lungimea lui In este mai mică decât ε. Dacă notăm Ln = |bn - an| lungimea
1 1 1
intervalului In, avem Ln = Ln-1 = ... = n L0 = n |b-a|. Ca urmare Ln < ε dacă şi
2 2 2
1 ln ( b − a ε )
numai dacă |b-a| < ε sau echivalent n > .
2 n
ln ( 2 )
Algoritm
Date de intrare:
f continuă, a, b cu f(a)f(b)<0
ε (precizie)
Date de ieşire:
c mijlocul intervalului In = [an, bn] cu | an-bn |<ε (c este o aproximaţie a unei
ε
rădăcini x* ∈(a,b) a ecuaţiei f(x) = 0 cu eroarea absolută |x*-c| < ).
2
93
Mădălina Roxana Buneci
ln ( b − a ε )
nmax:= +1;
ln ( 2 )
pentru j = 0, 1, ...., nmax execută
a+b
c: = ;
2
dacă f(c) = 0 atunci j : = nmax +1
altfel dacă f(c)f(a)<0 atunci b : = c;
altfel a : = c;
1
Rata convergenţei pentru metoda bisecţiei este liniară (r = 1, C = ).
2
Procedură MAPLE
> bisectie:=proc(f,A,B,epsilon)
> local c,a,b,nmax,j;
> a:=A; b:=B;
> nmax:=floor(ln(abs(b-a)/epsilon)/ln(2))+1;
> for j from 0 to nmax do
> c:=(a+b)/2;
> if f(c)=0 then a:=c;b:=c;else
> if evalf(f(c)*f(a))<0 then b:=c else a:=c fi fi
> od;
> c:=(a+b)/2;
> RETURN(c)
> end;
Utilizăm această procedură pentru determinarea rădăcinilor reale ecuaţiei:
x8 –3x-3 = 0.
Reprezentăm grafic funcţia
x->x8 –3x-3
pentru a localiza rădăcinile.
> with(plots):
> plot(x^8-3*x-3,x,color=black);
94
Metode Numerice
> plot(x^8-3*x-3,x=-5..5,color=black);
> plot(x^8-3*x-3,x=-2..2,color=black);
> plot(x^8-3*x-3,x=-1.5..1.5,color=black);
95
Mădălina Roxana Buneci
Se observă că ecuaţia are două rădăcini reale. Una în intervalul (-1.5, -0.5) şi alta în
intervalul (1,1.5).
> f:=(x-> x^8-3*x-3);
f := x → x 8 − 3 x − 3
> bisectie(f,1,3/2,10^(-3));
5207
4096
> evalf(bisectie(f,1,3/2,10^(-3)));
1.271240234
> bisectie(f,1,1.5,10^(-3));
1.271240234
> bisectie(f,-1.5,0,10^(-3));
-0.8801879883
> fsolve(f(x),x);
-0.8800582880 , 1.271068437
> evalf(bisectie(f,1,3/2,10^(-10)));
1.271068437
> evalf(bisectie(f,1,-3/2,10^(-10)));
-0.8800582880
Comanda MAPLE fsolve(f(x), x) întoarce rădăcinile ecuaţiei f(x) = 0.
96
Metode Numerice
a c1 c2 b
Dacă m1 > 0, M1 > 0 sunt astfel încât m1 ≤ |f’(x)| ≤ M1 şi dacă x* este unica soluţie
a ecuaţiei f(x) = 0, atunci eroarea absolută cu care termenul xn aproximează x*
satisface inegalităţile:
97
Mădălina Roxana Buneci
f (x n )
|x*-xn| ≤
m1
M 1 − m1
|x*-xn| ≤ x n − x n −1
m1
Deci şirul (xn)n este crescător şi mărginit (termenii şirului aparţin intervalului
(a,x*)). Fie x limita şirului (xn)n. Trecând la limită în
f (x n −1 )
xn = xn-1 - (xn-1-b)
f (x n −1 ) − f (b )
obţinem
f ( x )
x = x - ( x -b),
f ( x ) − f ( b )
98
Metode Numerice
atunci
f ( x n −1 ) − f ( b )
- f(xn-1) = (xn – xn-1),
x n −1 − b
şi ţinând cont că f(x*) = 0,
f ( x n −1 ) − f ( b )
f(x*) - f(xn-1) = - f(xn-1) = (xn – xn-1).
x n −1 − b
Conform teoremei lui Lagrange există ηn∈(xn-1, x*) şi ζn ∈ (xn-1, b) astfel încât:
f(x*) – f(xn-1) = (x* - xn-1) f ′ (ηn)
f(xn-1) – f(b) = (xn-1 - b) f ′ (ζn)
Ţinând cont de
f ( x n −1 ) − f ( b )
f(x*) - f(xn-1) = (xn – xn-1).
x n −1 − b
obţinem
(x* - xn-1) f ′ (ηn) = f ′ (ζn) (xn – xn-1)
şi deci
f ′ (ζn )
(x* - xn) = (x* - xn-1) + (xn-1 - xn) = (xn – xn-1) - (xn – xn-1)
f ′ ( ηn )
f ′ (ζn )
=( - 1) (xn – xn-1),
f ′ ( ηn )
99
Mădălina Roxana Buneci
|f ′ ( ζ n ) − f ′ ( ηn ) | M − m1
de unde | x* - xn | = | xn – xn-1| ≤ 1 | xn – xn-1|, deoarece
|f ′ ( ηn ) | m1
şi
f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a), dacă f(b)f”(b)<0
f (x n −1 ) − f (a )
x0 = a x1 x2 b
100
Metode Numerice
x0 = a x1 x2 b
Cazul 2. f(b)f”(b) < 0 (sau echivalent f(a)f”(a) > 0) : pentru orice n ≥1, xn
reprezintă abscisa punctului de intersecţie a axei Ox cu coarda ACn-1 unde A(a,f(a))
şi Cn-1(xn-1, f(xn-1)). Aşadar avem subcazurile
2.1. f ′ > 0 (f strict descrescătoare)
2.2. f ′ < 0 (f strict crescătoare)
2.3.
a x2 x1 x0 = b
101
Mădălina Roxana Buneci
a x2 x1 x0 = b
Algoritm
Date de intrare:
• f de două ori derivabilă pe [a,b], cu f ′ (x) ≠0, f”(x) ≠0 pentru orice x şi
f(a)f(b)<0
• ε (precizie)
Date de ieşire:
• xN aproximaţie a unicei rădăcini x* ∈(a,b) a ecuaţiei f(x) = 0, unde
f (x n −1 )
x0 = a, xn = xn-1 - (xn-1-b), dacă f(a)f”(a)<0
f (x n −1 ) − f (b )
f (x n −1 )
x0 = b, xn = xn-1 - (xn-1-a), dacă f(b)f”(b)<0
f (x n −1 ) − f (a )
iar N este cel mai mic număr natural cu proprietatea că |xN –xN-1| < ε
102
Metode Numerice
altfel
x1: = a ; x2: = b;
cât timp | x1-x2 | ≥ ε execută
x1: = x2;
f ( x1)
x2 : = x1 - (x1-a),
f ( x1) − f ( a )
103
Mădălina Roxana Buneci
f := x → x 8 − 3 x − 3
> mcoarda(f,1,1.5,10^(-3));
1.270281421
> mcoarda(f,-1.5,0,10^(-3));
-0.8741520730
> fsolve(f(x),x);
-0.8800582880 , 1.271068437
> mcoarda(f,1,1.5,10^(-10));
1.271068437
> mcoarda(f,-1.5,0,10^(-10));
xn xn-1
104
Metode Numerice
f ( x n −1 )
xn = xn-1 - .
f ′ ( x n −1 )
unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. În plus, oricare ar fi n ≥ 1
eroarea absolută cu care termenul xn aproximează x* verifică următoarele
inegalităţi:
f (x n )
|x* - xn| ≤
m1
M2
|x* - xn| ≤ (x n − x n −1 )2
2 m1
105
Mădălina Roxana Buneci
strict negativă, deci f este strict monotonă. Ţinând cont şi de faptul că f(a) < 0 şi f(b)
> 0, rezultă că f este strict crescătoare şi că f ′ este strict pozitivă. Deoarece
f(a)f(b)<0, rezultă că ecuaţia f(x) = 0 are o cel puţin soluţie x*, iar din faptul că f
este strict crescătoare rezultă că soluţia este unică. Deoarece f”(x) ≠ 0 pentru orice
x∈[a, b], f” este fie strict pozitivă, fie strict negativă. Să presupunem f”>0. Atunci
f(x0) > 0 şi deci x0 > x*. Arătăm prin inducţie după n că xn > x* pentru orice n ≥0.
Presupunem că xn > x* şi demonstrăm că xn+1 > x*. Aplicând formula lui Taylor
rezultă că există ζn între xn şi x* astfel încât
2
0 = f(x*) = f(xn) +
x * −x n
f ′ (xn) +
( x * − x n ) f”(ζ )
n
1! 2!
Din faptul că f”(ζn) > 0, rezultă că
x * −x n
0 > f(xn) + f ′ (xn)
1!
de unde
f ( xn )
xn+1 = xn - > xn + x* - xn = x*.
f ′( xn )
Aşadar şirul (xn)n este strict descrescător şi mărginit inferior, deci este convergent.
Fie x limita şirului (xn)n. Avem x0 > x ≥ x*. Trecând la limită în
f ( x n −1 )
xn = xn-1 -
f ′ ( x n −1 )
obţinem
f ( x )
x = x - ,
f ′ ( x )
106
Metode Numerice
Aplicând formula lui Taylor rezultă că există ηn între xn şi xn-1 astfel încât
2
x − x n −1
f(xn) = f(xn-1) + n
( x − x n −1 ) f”(η )
f ′ (xn-1) + n n
1! 2!
f ( x n −1 )
Ţinând cont şi de faptul că xn = xn-1 - sau echivalent
f ′ ( x n −1 )
f ( x n −1 )
xn - xn-1 = - ,
f ′ ( x n −1 )
obţinem
2
f ( x n −1 ) ( x − x n −1 ) f”(η )
f(xn) = f(xn-1) - f ′ (xn-1) + n n
f ′ ( x n −1 ) 2!
=
( x n − x n −1 )2 f”(η ).
n
2!
Ca urmare
2
f (x n ) 1 ( x n − x n −1 ) M2
|x* - xn| ≤ = |f”(ηn)| ≤ (xn – xn-1)2.
m1 m1 2! 2m1
■
Observaţie 5.3. Rata convergenţei pentru metoda tangentei este pătratică.
Într-adevăr, să presupunem că f : [a, b] → R o aplicaţie de două ori derivabilă cu
f’(x)≠0, f”(x) ≠ 0 oricare ar fi x∈[a, b], f(a)f(b)<0, şi că
f ( x n −1 )
xn = xn-1 - ,n≥1
f ′ ( x n −1 )
unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. Din teorema anterioară rezultă
că (xn)n converge la x* unica soluţie a ecuaţiei f(x) = 0. Aplicând formula lui
Taylor rezultă că există ζn între xn şi x* astfel încât
107
Mădălina Roxana Buneci
2
0 = f(x*) = f(xn) +
x * −x n
f ′ (xn) +
( x * − x n ) f”(ζ ),
n
1! 2!
de unde
f ( x n ) f ′′ ( ζ n ) 1
x* - xn = - - (x*-xn)2,
f ′( xn ) f ′( xn ) 2
sau echivalent
f (xn ) f ′′ ( ζ n ) 1
x* - xn + =- (x*-xn)2.
f ′( xn ) f ′(xn ) 2
Aşadar
f ′′ ( ζ n ) 1
x* - xn+1 = - (x*-xn)2,
f (xn ) 2
′
unde x0∈ [a, b] este ales astfel încât f(x0)f”(x0) > 0. Atunci şirul (xn)n converge la x*
unica soluţie a ecuaţiei f(x) = 0. Pentru orice n ≥1, xn reprezintă abscisa punctului
de intersecţie a axei Ox cu tangenta la graficul lui f în punctul de coordonate (xn-1,
f(xn-1)). Deoarece f’ şi f” nu se anulează pe [a, b], rezultă că sunt fie strict pozitive
fie strict negative. Aşadar avem
Cazul 1. f” > 0 (f strict convexă)
1.1. f ′ > 0 (f strict crescătoare)
1.2. f ′ < 0 (f strict descrescătoare)
108
Metode Numerice
x2 x1 x0
x0 x1 x2
109
Mădălina Roxana Buneci
x0 x1 x2
x2 x1 x0
110
Metode Numerice
Algoritm
Date de intrare:
f - în condiţiile 1.1,1.2,2.1 sau 2.2
x0 - f(x0)f”(x0)>0
ε >0 (precizia –determină condiţia de oprire a iteraţiilor)
Date de ieşire: xN cu proprietatea că N este cel mai mic număr natural pentru care
|xN – xN-1 |2 < ε.
unde (xn)n este şirul corespunzător metodei tangentei (xN este considerat o
aproximaţie satisfăcătoare a unicei soluţii a ecuaţiei f(x)=0)
x1 := x0;
f (x1)
x2 : = x1 - ;
f ′(x1)
cât timp | x2 – x1 |2 ≥ ε execută
x1 := x2;
f (x1)
x2 : = x1 - ;
f ′(x1)
Prezentăm în continuare o variantă a acestui algoritm pentru cazul în care f nu
verifică neapărat condiţiile suficiente de convergenţă. Introducem ca dată
suplimentară de intrare numărul maxim de termeni din şir ce urmează a fi calculaţi
(Nmax). Condiţia de oprire se transformă
x1 := x0;
f (x1)
x2 : = x1 - ;
f ′(x1)
n : = 1;
111
Mădălina Roxana Buneci
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;
> with(plots):
> plot(exp(x)+2*x+1,x,color=black);
112
Metode Numerice
> plot(exp(x)+2*x+1,x=-2..2,color=black);
> f1:=(x->exp(x)+2*x+1);
f1 := x → e x + 2 x + 1
> mtangenta(f1,0.1,10^(-5));
-0.7388349460
> fsolve(f1(x),x);
-0.7388350311
> plot(sin(x)+x-1,x,color=black);
> f2:=(x->sin(x)+x-1);
f2 := x → sin( x ) + x − 1
> mtangenta(f2,1.1,10^(-8));
113
Mădălina Roxana Buneci
0.5109734294
> fsolve(f2(x),x);
0.5109734294
> mtangentaN(f2,1.1,10^(-8),10);
0.5099954153
0.5109733047
0.5109734294
Numar de termeni calculati , 3
0.5109734294
> xN:=mtangentaN(f2,-10.1,10^(-8),10);
19.33165959
9.366076806
-4881.864603
-2422.713182
14288.93783
5139.034940
2315.137476
-96996.81022
0.1024903391 10 8
-0.5376704605 10 8
Numar de termeni calculati , 10
xN := -0.5376704605 10 8
> f2(xN);
-0.5376704787 10 8
114
Metode Numerice
Deci factorul de condiţionare absolut al problemei f(x) = 0 este|| Jf(x)-1||. Dacă ε >
0 şi x̂ este un număr real cu proprietatea că |f( x̂ )| ≤ ε atunci
| x̂ - x*| ≤ ε|| Jf(x*)-1||
≈
(unde x* este o soluţie a sistemului f(x) = 0). În general, || x̂ -x*|| şi ||f( x̂ )|| nu sunt
simultan mici (|| x̂ -x*|| este eroarea absolută cu care x̂ aproximează x*, iar ||f( x̂ )||
indică reziduu corespunzător lui x̂ ). Dacă problema este bine condiţionată (adică
115
Mădălina Roxana Buneci
dacă norma || Jf(x*)-1|| este mică), atunci reziduu mic implică faptul că eroarea
absolută cu care x̂ aproximează x*, || x̂ -x*||, este mică.
Metodele iterative de rezolvare a unui sistem de ecuaţii f(x)=0 presupun
construcţia unui şir (xk)k convergent către o rădăcină x* a ecuaţiei. Eroare absolută
cu care xk aproximează x* este ek = x* - xk. Se spune că şirul (xk)k converge cu rata
r dacă există o constantă C ∈ (0, ∞) astfel încât
|| ek +1 ||
lim = C.
k →∞ || ek ||r
Dacă
• r = 1 şi C<1, rata convergenţei se spune liniară
• r=1 şi C = 0 (sau dacă r > 1), rata convergenţei se spune superliniară
• r = 2, rata convergenţei se spune pătratică
Teoremă 5.6. (metoda punctului fix). Fie (X,d) un spaţiu metric complet
şi fie f : X → X o contracţie. Atunci există şi este unic x* punct fix pentru f. Punctul
x* este limita unui şir construit după cum urmează:
x0 ∈ X dat
xn = f(xn-1), n ≥ 1.
Mai mult, dacă numărul q ∈ (0,1) este astfel încât d(f(x), f(y)) ≤ qd(x,y)
pentru orice x,y ∈ X, atunci pentru orice n≥1 avem
116
Metode Numerice
q
1. d(x*, xn) ≤ d(xn, xn-1)
1− q
qn
2. d(x*, xn) ≤ d(x1, x0)
1− q
3. d(x*, xn) ≤ qd(x*, xn-1)
Demonstraţie. Deoarece f este contracţie, rezultă că există q ∈(0,1) astfel
încât d(f(x), f(y)) ≤ qd(x,y) pentru orice x,y ∈ X. Arătăm unicitatea punctului fix.
Presupunem prin absurd că x* şi y* sunt puncte fixe ale lui f şi că x* ≠ y*. Atunci
f(x*) = x* şi f(y*) = y* şi avem
d(x*, y*) = d(f(x*), f(y*)) ≤ q d(x*, y*) < d(x*, y*),
ceea ce este o contradicţie. În consecinţă, punctul fix (dacă există) este unic. Arătăm
că şirul (xn)n este convergent şi limita lui este punct fix pentru f. Pentru orice k≥0 şi
orice n ≥ 0, avem
d(xn+k, xn+k-1) = d(f(xn+k-1), f(xn+k-2)) ≤ q d(xn+k-1, xn+k-2) ≤ ...≤ qk-1d(xn+1, xn).
şi ţinând cont de aceasta
d(xn+k, xn) ≤ d(xn+k, xn-k-1) + d(xn+k-1, xn+k-2) +....+ d(xn+1, xn) ≤
≤ qk-1d(xn+1, xn) + qk-2d(xn+1, xn) + ...+ d(xn+1, xn)
= (qk-1 + qk-2 + ... + 1) d(xn+1, xn)
1 − qk
= d(xn+1, xn).
1− q
Deci
1 − qk
d(xn+k, xn) ≤ d(xn+1, xn) (1).
1− q
Din faptul că d(xn+1, xn) = d(f(xn), f(xn-1)) ≤ q d(xn, xn-1) ≤ ... ≤ qn d(x1, x0) şi din
relaţia (1) rezultă
1 − qk 1 − qk n 1 n
d(xn+k, xn) ≤ d(xn+1, xn) ≤ q d(x1, x0) ≤ q d(x1, x0).
1− q 1− q 1− q
Ca urmare
1 n
d(xn+k, xn) ≤ q d(x1, x0) (2).
1− q
117
Mădălina Roxana Buneci
1− q
încât qn < ε . Ţinând cont de relaţia (2) obţinem
d(x1, x 0 )
punct fix pentru f. Funcţia f fiind contracţie este funcţie continuă. Trecând la limită
cu n → ∞ în
xn = f(xn-1)
obţinem
lim x n = lim f (x n −1 ) = f ( lim x n −1 ) ,
n →∞ n →∞ n →∞
x* = f(x*),
adică x* este punct fix pentru f.
Din relaţia (1) rezultă
1 − qk 1 − qk
d(xn+k, xn) ≤ d(xn+1, xn) ≤. q d(xn, xn-1)
1− q 1− q
şi trecând la limită cu k → ∞, se obţine
q
d(x*, xn) ≤ d(xn, xn-1).
1− q
În continuare folosind şi faptul că d(xn, xn-1) ≤ qn-1d(x1, x0) se obţine
qn
d(x*, xn) ≤ d(x1, x0).
1− q
Pentru a arăta ultima afirmaţia din teoremă ţinem seama de
d(x*, xn) = d(f(x*), f(xn-1)) ≤ q d(x*, xn-1).
■
Corolar 5.7. Fie (E, ||⋅||) un spaţiu Banach (în particular, E = Rm) şi S o
submulţime închisă a lui E. Fie f : S → S o funcţie cu proprietatea că există un
118
Metode Numerice
număr q ∈ (0,1) este astfel încât ||f(x) - f(y)|| ≤ q||x -y|| pentru orice x,y ∈ S Atunci
există şi este unic x* punct fix pentru f şi pentru orice x0∈E, şirul definit recursiv
prin
xn = f(xn-1), n ≥ 1
converge la x*.
Mai mult, pentru orice n≥1 avem
q
1. ||x*- xn|| ≤ ||xn - xn-1||
1− q
qn
2. ||x*- xn|| ≤ ||x1- x0||
1− q
3. ||x*- xn|| ≤ q ||x*- xn-1||
Demonstraţie. Dacă (E, ||⋅||) un spaţiu Banach şi S o submulţime închisă a lui
E atunci (S,d) (unde d(x,y) = || x-y||) este spaţiu metric complet. În consecinţă,
afirmaţiile rezultă aplicând direct teorema precedentă.
■
Observaţie 5.8. În general, rata convergenţei pentru metoda punctului fix
este liniară.
Algoritm:
Date de intrare:
f (contracţie)
x0 (termenul iniţial al şirului)
ε (precizia ce determină condiţia de oprire: se calculează termenii şirului
până la xN cu proprietatea ||xN-xN-1|| < ε).
Date de ieşire:
xN (aproximaţie satisfăcătore (determinată de ε) pentru punctul fix).
x1:=x0;
x2:=f(x1);
cât timp x 2 − x1 ≥ε execută
x1:=x2;
x2:=f(x1);
119
Mădălina Roxana Buneci
La ieşire x2 este aproximaţie pentru x*, punctul fix al lui f. Faptul că f este
contracţie asigură terminarea programului într-un număr finit de paşi. Pentru a evita
ciclarea în situaţia în care s-ar încerca folosirea algoritmului pentru o funcţie care
nu este contracţie, se poate stabili de la început un număr maxim de paşi ce urmează
a fi executaţi. De asemenea se poate afişa la fiecare pas diferenţa dintre termenii
consecutivi curenţi. (pentru a observa că şirul nu converge dacă f nu e contracţie).
Astfel se poate folosi următoarea variantă a algoritmului:
Date de intrare:
f (contracţie)
x0 (termenul iniţial al şirului)
ε (precizia)
Nmax (număr maxim de termeni ai şirului ce urmează a fi calculaţi)
Condiţia de oprire: se calculează termenii şirului până la xN cu proprietatea
||xN-xN-1|| < ε sau N ≥ Nmax).
Date de ieşire:
xN (dacă f este contracţie, xN este aproximaţie satisfăcătore - determinată de
ε şi Nmax - pentru punctul fix al lui f).
x1:=x0;
x2:=f(x1);
n:=1;
x1:=x2;
x2:=f(x1);
n:=n+1;
Dacă f este contracţie şi Nmax suficient de mare, la ieşirea din ciclu, x2 este
aproximaţie pentru x*, punctul fix al lui f.
120
Metode Numerice
y = f(x)
y=x
x0 x2 x4 x3 x1
Propoziţie 5.9. Fie a, b două numere reale cu a < b şi fie f: [a, b] → [a,b] ⊂
R o funcţie derivabilă cu proprietatea că sup | f ′(x) | < 1. Atunci f este contracţie.
x∈(a,b)
Exemple.
1) Să se rezolve (în mulţimea numerelor reale) ecuaţia următoare aplicând
metoda punctului fix
x3 – x -1 = 0.
Se poate arăta că ecuaţia x3 – x -1 = 0 are o singură rădăcină reală, şi că această
rădăcină este în intervalul (1,2). Ecuaţia se poate scrie:
x3 = x+1
x = 3 x +1
121
Mădălina Roxana Buneci
1 1
Fie f: [1,2] → [1,2], definită prin f(x) = 3 x + 1 . Avem f ′ (x) = şi deci
3 3 (x + 1)2
1 1
sup | f ′(x) | = <1
x∈(1,2) 3 34
Ca urmare f este contracţie pe intervalul [1,2]. Deci soluţia ecuaţiei poate fi aflată ca
limita şirului (xn)n, cu
xn = f(xn-1) = 3 x n −1 + 1 , x0∈[1,2].
π
Ca urmare f este contracţie pe intervalul [0, ]. Deci soluţia ecuaţiei poate fi aflată
2
ca limita şirului (xn)n, cu
1 π
xn = f(xn-1) = ( xn-1 +cos(xn-1)), x0∈[0, ].
2 2
Procedura MAPLE de mai jos implementează metoda punctului fix pentru o
contracţie pe un interval închis al lui R.
122
Metode Numerice
123
Mădălina Roxana Buneci
> x1:=x0;
> x2:=[seq(f[i](op(x1)), i=1..m)];
> n:=1;
> norma:=0;
> for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od;
> while (evalf(norma) >= epsilon) and (n < Nmax) do
> x1:=x2;
> x2:=[seq(f[i](op(x1)), i=1..m)];
> n:=n+1;
> norma:=0;
> for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od;
> od;
> RETURN(x2)
> end;
mai arătăm şi că f(I) ⊂ I, rezultă că f|I este contracţie. Aplicând formula lui
Lagrange rezultă că pentru orice x ∈ I există ζx între x şi x* astfel încât
f(x) - f(x*) = f ′ (ζx)(x-x*)
f(x) - x* = f ′ (ζx)(x-x*)
ε
|f(x) – x*| =| f ′ (ζx)(x-x*)| =| f ′ (ζx)| | x-x*| < | x-x*| ≤ ,
2
ε ε
de unde rezultă că f(x) ∈ [x* - , x* + ] = I.
2 2
■
124
Metode Numerice
1
xn = xn-1 – f(xn-1), n ≥ 1,
f ′(x n −1 )
125
Mădălina Roxana Buneci
∂fi
∂x j
( x)
.
1≤i,j≤m
≤ q||x – y||.
■
Dacă mai arătăm şi că f(S) ⊂ S, rezultă că f|S este contracţie. Aplicând formula lui
Taylor rezultă că pentru orice x ∈ S există ζx = x* + θx(x-x*) ∈ S astfel încât
f(x) = f(x*) + Jf(ζx)(x-x*)
f(x) = x* + Jf(ζx)(x-x*)
126
Metode Numerice
f(x) - x* = Jf(ζx)(x-x*)
||f(x) – x*|| = ||fζx)(x-x*)|| ≤||Jfζx)|| || x-x*||< || x-x*||≤r
127
Mădălina Roxana Buneci
aplicând propoziţia precedentă rezultă că există r > 0 astfel încât astfel dacă notăm
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ă
adică şirul dat de relaţia (*) (corespunzător metodei lui Newton pentru f(x) = 0 cu
termenul iniţial x0 ∈S).
2) Amplificând relaţia (*) cu Jf(xn-1) rezultă
Jf(xn-1)(xn - xn-1) = –f(xn-1) (**)
sau echivalent
m (
∂fi x n −1 )
∑
j=1 ∂x j
( x nj − x nj −1 ) = − fi ( x n−1 ) , i = 1,2,…, m
Dacă se foloseşte relaţia (*) pentru determinarea lui xn este necesar să se calculeze
inversa matricei Jf(xn-1). Dacă se foloseşte relaţia (**), este necesar să se rezolve un
128
Metode Numerice
∂f i
(x ) ≈ 1 f i x + h ij e j − f i (x ) = ∆ ij (x )
( ( ) )
∂x j h ij
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
{y ∈ R m , y−x <r }
şi cu B ( x, r ) închiderea acestei mulţimi, adică
{y ∈ R m , y−x ≤r }
Teoremă 5.14. (Metoda Newton). Fie G ⊂ Rm o mulţime deschisă, f : G →
pentru orice x ∈G. Presupunem că ecuaţia f(x) = 0 admite o soluţie x* astfel încât
Jf(x*) să fie inversabil. Atunci pentru orice q ∈ (0, 1) există r, µ > 0 astfel încât
Jf(x) este inversabil pentru orice x ∈ B(x*,r), şirul (xn)n, definit prin
xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1
129
Mădălina Roxana Buneci
( )
1 M n 2
xn − x * ≤ f xn ≤ x − x n −1 .
µ 2µ
Comanda
>subs(expr1,expr2);
substituie subexpresia expr1 în expresia expr2. Comanda
>jacobian(f(x,y,...), [x, y, ...]);
calculează jacobianul lui f. Este o comnadă ce apaţine pachetului linalg. Comanda
>norm(a, t);
calculează norma t, unde t =1, 2, infinity a vectorului (sau matricei) a. Este de
asemenea o comanda ce aparţine pachetului linalg.
Procedură MAPLE
> mnewton := proc(f, x0, epsilon, Nmax)
> local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;
> m:=vectdim(x0);x1 := vector(m);x2:=vector(m);
> for i to m do x1[i] := x0[i] od;
> dx := vector(m);
> b := vector(m);
> fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[i],i=1..m)]);
> fx1 := matrix(m, m);
> ex := seq(x[i] = x1[i], i = 1 .. m);
> for i to m do
130
Metode Numerice
131
Mădălina Roxana Buneci
[ 5.000186603, 25.00140155 ]
[ 5.000000017, 25.00000013 ]
Numar de pasi , 6
Valoarea functiei , [ 0.00046451 , 0.0069879 ]
[ 5.000000017, 25.00000013 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) → [ x 2 + y 2 − 1, x 3 − y ]
> mnewton(f1,vector([0.9,0.5]),10^(-5),9);
[ 0.8316784870 , 0.5629787234 ]
[ 0.8260617824 , 0.5636079087 ]
[ 0.8260313586 , 0.5636241619 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000031943, 0.0000785347 ]
[ 0.8260313586 , 0.5636241619 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([1,1]),10^(-5),9);
[ 0.8750000000 , 0.6250000000 ]
[ 0.8290363483 , 0.5643491124 ]
[ 0.8260401080 , 0.5636197732 ]
Numar de pasi , 3
Valoarea functiei , [ 0.005791188, 0.0054486200 ]
[ 0.8260401080 , 0.5636197732 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([-1,1]),10^(-5),20);
[ -0.2500000001 , 1.250000000 ]
[ -81.50000065 , -15.25000014 ]
[ -54.33007595 , 64.91769907 ]
[ -36.21723980 , 24.89070061 ]
[ -24.14389039 , 3.68381152 ]
[ -16.10992954 , -24.48752262 ]
132
Metode Numerice
[ -10.75342471 , -10.48890844 ]
[ -7.178878965 , -3.444508772 ]
[ -4.781922755 , 0.617903126 ]
[ -3.270919075 , -5.691810662 ]
[ -2.260819460 , -2.574374564 ]
[ -1.578178423 , -1.088178100 ]
[ -1.121843867 , -0.5209805009 ]
[ -0.8857962879 , -0.5206567978 ]
[ -0.8296024170 , -0.5627517822 ]
[ -0.8260437059 , -0.5636179649 ]
[ -0.8260313579 , -0.5636241623 ]
Numar de pasi , 17
Valoarea functiei , [ 0.000013414, -0.0000314743 ]
[ -0.8260313579 , -0.5636241623 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ x = -0.8260313577 , y = -0.5636241622 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
f2 := ( x , y, z ) → [ x + x 2 − 2 y z − 0.1, y − y 2 + 3 x z + 0.2, z + z 2 + 2 x y − 0.3 ]
> mnewton(f2,vector([0,0,0]),10^(-5),10);
[ 0.1, -0.2, 0.3 ]
[ 0.02245322250 , -0.1743243244 , 0.2461538462 ]
[ 0.01287849239 , -0.1778109522 , 0.2447473526 ]
[ 0.01282415092 , -0.1778006638 , 0.2446880471 ]
Numar de pasi , 4
Valoarea functiei , [ 0.0000818676 , 0.0000282439 , 0.0000687452 ]
[ 0.01282415092 , -0.1778006638 , 0.2446880471 ]
> fsolve({f2(x,y,z)[1],f2(x,y,z)[2], f2(x,y,z)[3]},{x=0,y=0,z=0});
{ x = 0.01282414583 , y = -0.1778006680 , z = 0.2446880443 }
133
Mădălina Roxana Buneci
astfel încât Jf(x*) să fie inversabil. Atunci pentru orice q ∈ (0, 1) există r, µ, L > 0
astfel încât Jf(x) este inversabil pentru orice c∈ B(x*,r), şirul (xn)n, definit prin
xn = xn-1 – Jf(c)-1 f(xn-1), n ≥ 1
rămâne în B(x*,r) oricare ar fi x0 ∈ B(x*,r) şi converge la x*. În plus, au loc
următoarele relaţii
xn − x * ≤ qn x0 − x *
( )
1 L n +1 2
xn − x * ≤ f xn ≤ x − xn .
µ µ
Procedură MAPLE
> mnewtonsimplif := proc(f, x0,c,epsilon, Nmax)
> local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;
134
Metode Numerice
135
Mădălina Roxana Buneci
[ 5.106445312, 25.83984374 ]
[ 5.048619375, 25.38187247 ]
[ 5.022801923, 25.17874816 ]
[ 5.010817356, 25.08472436 ]
[ 5.005158912, 25.04038926 ]
[ 5.002466430, 25.01930594 ]
[ 5.001180563, 25.00923998 ]
[ 5.000565396, 25.00442502 ]
[ 5.000270852 , 25.00211976 ]
Numar de pasi , 10
Valoarea functiei , [ 0.00122926 , 0.0202844 ]
[ 5.000270852, 25.00211976 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) → [ x 2 + y 2 − 1, x 3 − y ]
> mnewtonsimplif(f1,vector([0.9,0.5]),vector([0.9,0.5]),10^(-5),9);
[ 0.8316784870 , 0.5629787234 ]
[ 0.8267332448 , 0.5632460104 ]
[ 0.8261303960 , 0.5635972122 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000733926, 0.0018161243 ]
[ 0.8261303960 , 0.5635972122 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([1,1]),vector([1,1]),10^(-5),9);
[ 0.8750000000 , 0.6250000000 ]
[ 0.8442382812 , 0.5776367188 ]
[ 0.8324169200 , 0.5662568530 ]
[ 0.8280863872 , 0.5638050098 ]
[ 0.8266269335 , 0.5634628865 ]
Numar de pasi , 5
Valoarea functiei , [ 0.003603154, 0.0040362378 ]
136
Metode Numerice
[ 0.8266269335 , 0.5634628865 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([-1,1]),vector([-1,1]),10^(-5),20);
[ -0.2500000000 , 1.250000000 ]
[ 0.2265625000 , 1.414062500 ]
[ 0.6650531295 , 1.327101470 ]
[ 0.8806553123 , 0.9409566642 ]
[ 0.8443975609 , 0.5742223014 ]
[ 0.8197933010 , 0.5282487956 ]
[ 0.8206651612 , 0.5535667326 ]
[ 0.8261112430 , 0.5690490973 ]
[ 0.8271727754 , 0.5669722992 ]
Numar de pasi , 9
Valoarea functiei , [ 0.006276661, -0.0052613953 ]
[ 0.8271727754 , 0.5669722992 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ y = -0.5636241622 , x = -0.8260313577 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
f2 := ( x , y, z ) → [ x + x 2 − 2 y z − 0.1, y − y 2 + 3 x z + 0.2, z + z 2 + 2 x y − 0.3 ]
> mnewtonsimplif(f2,vector([0,0,0]),vector([0,0,0]),10^(-5),20);
[ 0.1000000000 , -0.2000000000 , 0.3000000000 ]
[ -0.0300000000 , -0.2500000000 , 0.2500000000 ]
[ -0.02590000000 , -0.1150000000 , 0.2225000000 ]
[ 0.04815419000 , -0.1694867500 , 0.2445367500 ]
[ 0.01478969600 , -0.2066006490 , 0.2565247722 ]
[ -0.00621510390 , -0.1686979420 , 0.2403061628 ]
[ 0.01888306226 , -0.1670604211 , 0.2401559976 ]
[ 0.01940230578 , -0.1856954577 , 0.2486343215 ]
[ 0.00728302228 , -0.1799894344 , 0.2453868143 ]
[ 0.01161288975 , -0.1729652764 , 0.2424070455 ]
[ 0.01600913753 , -0.1785281521 , 0.2452560777 ]
[ 0.01217347883 , -0.1799067137 , 0.2455656198 ]
137
Mădălina Roxana Buneci
încât:
Jf(x0) este inversabilă şi ||Jf(x0)-1|| ≤ a, ||Jf(x0)-1f(x0)|| ≤ b,
1
abM <
2
1
( )
B x 0 , r ⊂ G, unde r = (1 − 1 − 2abM ) .
aM
Atunci f(x) = 0 are o unică soluţie x* în B(x 0 , r ), şirul (xn)n, este corect
definit prin
xn = xn-1 – Jf(xn-1)-1 f(xn-1), n ≥ 1,
rămâne în B(x0 , r) şi converge la x*. În plus, are loc următoarea relaţie
b
xn − x * ≤ , n ≥ 1.
2n −1
138
Metode Numerice
Definiţie. Fie x0, x1, …, xn n+1 puncte distincte două câte două din
intervalul [a, b] (numite noduri), şi fie yi = f(xi) pentru orice i = 0,1,…n. Se
numeşte polinom de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0=f(x0),
y1= f(x1), …, yn=f(xn) un polinom Pn care îndeplineşte următoarele condiţii
grad(Pn) ≤ n
Pn(xi) = yi, i = 0, 1, …, n .
Polinomul determinat de condiţiile anterioare există şi este unic. Într-adevăr,
deoarece grad(Pn) ≤ n, există an, an-1, ...a0 ∈R astfel încât
Pn(X) = anXn + an-1Xn-1 + … + a1X + a0
Relaţiile Pn(xi) = yi, i = 0, 1, …, n conduc la sistemul:
139
Mădălina Roxana Buneci
a0 + a1x0 + a2 x 20 + … + an x n0 = y0
a0 + a1x1 + a2 x 12 + … + an x 1n = y1
(*)
a0 + a1xn + a2 x 2n + … + an x nn = yn
∆ = 1 x1 x 12 … x 1n = ∏ (x
0 ≤ j<i ≤ n
i −xj )
1 xn x 2n … x nn
f (n +1) (ζ x )
f(x) – Pn(x) = (x – x0) (x – x1) … (x – xn).
( n + 1) !
În consecinţă, oricare ar fi x ∈ [a, b], avem:
140
Metode Numerice
sup f (
n +1)
(t)
t∈[ a,b ]
| f(x) – Pn(x) | ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !
Demonstraţie. Fie x ∈[a, b]. Dacă x ∈{ x0, x1, …, xn}, atunci
f( x ) = Pn( x )
şi
( x – x0) ( x – x1) … ( x – xn) = 0,
ca urmare
f (n +1) (ζ )
f( x ) - Pn( x ) = 0 = ( x – x0) ( x – x1) … ( x – xn)
( n + 1) !
pentru orice ζ ∈(a,b). Presupunem că x ∉ { x0, x1, …, xn} şi considerăm funcţia
g:[a, b] → R, definită prin
g(x) = f(x) – Pn(x) - c (x – x0) (x – x1) … (x – xn),
unde constanta c va fi determinata astfel încât g( x ) = 0 sau echivalent
0 = g( x ) = f( x ) – Pn( x ) - c( x – x0) ( x – x1) … ( x – xn)
f (x) − Pn (x)
c= .
(x − x 0 )(x − x1 )...(x − x n )
g(n+1)( ζ x ) = 0.
Pe de altă parte deoarece gradul lui Pn este cel mult n, rezultă că Pn(n +1) (x) = 0
141
Mădălina Roxana Buneci
de unde
f (n +1) (ζ x )
c= .
( n + 1) !
Cum pe de altă parte avem
f (x) − Pn (x)
c= .
(x − x 0 )(x − x1 )...(x − x n )
Rezultă că
f (n +1) (ζ x )
f( x ) – Pn( x ) = (x – x0) (x – x1) … (x – xn).
( n + 1) !
În plus,
sup f (
n +1)
(t)
t∈[ a,b ]
|f( x ) – Pn( x )| ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !
■
Fie f : [a, b] → R o funcţie şi fie x0, x1, …, xn n+1 noduri echidistante din
intervalul [a, b]:
b−a
xi = a + ih, i = 0, 1, ...n, h=
n
Fie Pn polinomul de asociat nodurilor x0, x1, …, xn şi valorilor y0=f(x0), y1= f(x1),
…, yn=f(xn). Atunci oricare ar fi x ∈ [a, b], avem:
142
Metode Numerice
sup f (
n +1)
(t)
t∈[ a,b ]
| f(x) – Pn(x) | ≤ |(x – x0) (x – x1) … (x – xn)|.
( n + 1) !
Pentru orice x ∈[a, b] există i astfel încât x ∈ [xi, xi+1] şi ca urmare
h h h2
|(x – xi) (x – xi+1)| ≤ = .
2 2 4
De asemenea se poate arăta că
|(x – xj)| ≤ (j – i + 1) h pentru i < j
|(x – xj)| ≤ (i – j ) h pentru j+1 < i
şi ţinând seama că (j+1)!(n-j)! ≤ n! se obţine
h n +1
|(x – x0) (x – x1) … (x – xn)| ≤ n!,
4
şi deci eroarea de interpolare satisface:
h n +1
sup f ( ) ( t ) .
n +1
| f(x) – Pn(x) | ≤
4(n + 1) t∈[a,b]
143
Mădălina Roxana Buneci
(b − a)n +1
sup f (
n +1)
| f(x) – Pn(x) | ≤ 2n +1
(t) .
2 (n + 1)! t∈[a,b]
Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din intervalul [a,
b], şi yi = f(xi) pentru orice i = 0,1,…n. Se numesc polinoame Lagrange cele n+1
polinoame li, i =0, 1, ...n cu proprietăţile
grad (li) = n
li(xj) = δij = 1, dacă i = j
0, dacă i≠ j
Pentru orice i = 0, 1, ...n, deoarece li are gradul n şi admite drept rădăcini pe x0, x1,
..., xi-1, xi+1, ..., xn, rezultă că
li(X) = Ai(X – x0) (X – x1) …(X – xi-1) (X – xi+1) ... (X – xn).
144
Metode Numerice
li(x) =
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )
( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
Forma Lagrange a polinomului de interpolare este:
Ln(x) = y0l0(x) + y1l1(x) + … + ynln(x)
Se observă uşor că
Ln(xi) = y0l0(xi) + y1l1(xi) + … + ynln(xi) = yili(xi) = yi
pentru orice i = 0, 1, …, n şi că grad(Ln) ≤ n. Aşadar Ln este polinomul de
interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0, y1, …, yn.
În consecinţă, polinomul de interpolare asociat nodurilor x0, x1, …, xn şi
valorilor y0, y1, …, yn poate fi scris sub forma
n
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ...( x − x n )
Ln(x) = ∑ yi ( x
i =0 i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i +1 ) ... ( x i − x n )
v : =0;
145
Mădălina Roxana Buneci
v : = v + t;
Exemple
> PLagrange([1,-1,3],[2,-5,-1],2);
7
4
> PLagrange([1,-1,3],[2,-5,-1],-1);
-5
> expand(PLagrange([1,-1,3],[2,-5,-1],X));
5 7 1
− X2 + X −
4 2 4
146
Metode Numerice
> plot([f1(a),PLagrange(x1,y1,a)],a=0..2*Pi);
> plot([f1(a),PLagrange(x1,y1,a)],a=-Pi..3*Pi);
147
Mădălina Roxana Buneci
h4 2π
interpolare este dominată de 2, unde h =
16 3
> f2:=x->sin(x)+cos(x);
f2 := x → sin( x ) + cos ( x )
> x2:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x2 := 0, , , 2 π
3 3
> y2:=[seq(f2(2*Pi/3*i),i=0..3)];
3 1 3 1
y2 := 1, − ,− − , 1
2 2 2 2
> expand(PLagrange(x2,y2,X));
27 X 2 27 X 27 X 3 3 81 X 2 3 27 X 3
− + 1 + − +
16 π 2 8π 16 π 3 16 π2 8π
> plot({f2(a),PLagrange(x2,y2,a)},a=0..2*Pi);
148
Metode Numerice
1
Considerăm funcţia f3: R → R definită prin f3(x) = . Vom reprezenta grafic
1 + x2
funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante,
respectiv nodurilor Cebîşev pentru n = 3 pe intervalul [-1, 1]:
> f3:=x->1/(1+x^2);
1
f3 := x →
1 + x2
> x4:=[seq(-1+2*i/3,i=0..3)];
-1 1
x4 := -1, , , 1
3 3
> y4:=[seq(evalf(f3(-1+2*i/3)),i=0..3)];
y4 := [ 0.5000000000 , 0.9000000000 , 0.9000000000 , 0.5000000000 ]
> plot([f3(a),PLagrange(x4,y4,a)],a=-1..1);
> x5:=[seq(evalf(cos((2*i+1)/(2*3+2)*Pi)),i=0..3)];
149
Mădălina Roxana Buneci
> plot([f3(a),PLagrange(x4,y4,a),PLagrange(x5,y5,a)],a=-1..1);
150
Metode Numerice
151
Mădălina Roxana Buneci
152
Metode Numerice
x_5 := [ -5, -3, -1, 1, 3, 5 ], [ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ],
-5, -13, -11, -3, -7, -5, -1, -1, 1, 1, 5, 7, 3, 11, 13, 5
3 3 3 3 3 3 3 3 3 3
> y_5:=[seq([seq(evalf(f3(-5+10*i/(5*j))),i=0..5*j)],j=1..3)];
y_5 := [ [ 0.03846153846 , 0.1000000000 , 0.5000000000 , 0.5000000000 , 0.1000000000 ,
0.03846153846 ], [ 0.03846153846 , 0.05882352941 , 0.1000000000 , 0.2000000000 ,
0.5000000000 , 1., 0.5000000000 , 0.2000000000 , 0.1000000000 , 0.05882352941 ,
0.03846153846 ], [ 0.03846153846 , 0.05056179775 , 0.06923076923 , 0.1000000000 ,
0.1551724138 , 0.2647058824 , 0.5000000000 , 0.9000000000 , 0.9000000000 ,
0.5000000000 , 0.2647058824, 0.1551724138 , 0.1000000000 , 0.06923076923 ,
0.05056179775 , 0.03846153846 ] ]
> plot([f3(a),seq(PLagrange(x_5[j],y_5[j],a), j=1..3)],a=-5..5);
153
Mădălina Roxana Buneci
154
Metode Numerice
(n) (n)
Fie f : [a, b] → R şi un şir de diviziuni ∆n = ( x 0 , x1 , …, x (n ) ) ale
n
( )
f x (n ) (cu exemplificări pentru f ∈ {f1, f2, f3}).
n
155
Mădălina Roxana Buneci
> grafic_polinoame:=proc(f,a,b,tip,n)
> local xn,yn,titlu,legenda;
> if tip=1 then xn:=[seq(noduri_echidistante(a,b,j),j=0..n)]
> else xn:=[seq(noduri_Cebisev(a,b,j),j=0..n)] fi;
> yn:=[seq(map(f,xn[j]),j=1..n+1)];
> titlu:=cat(f,`:=x->`,convert(f(x),string) ,`; x0, x1, ..., x`,
> convert(n,string),` noduri `);
> if tip=1 then titlu:=cat(titlu, `echidistante `)
> else titlu:=cat(titlu, `Cebisev `) fi;
> titlu:=cat(titlu, `in intervalul [`, convert(a,string), `,
`,convert(b,string),`]`);titlu:=cat(titlu,`\ny0=`,f,`(x0), y1=`,
f,`(x1), ... , y`,convert(n,string),`=`,f,`(x`,convert(n,string),
`)`);
> titlu:=cat(titlu, `\nL i = polinomul de interpolare asociat
nodurilor x0, x1, ...,x `,convert(i,string),` si valorilor y0,
y1, ...,y`,convert(i,string), `, i =0..`,convert(n,string));
> legenda:=f,seq(cat(`L `,convert(j,string)),j=0..n);
> plot([f(t),seq(polinom_Lagrange(xn[j],yn[j],t),j=1..n+1)],
> t=a..b,labels=[X,Y],color=[COLOR(RGB,1,0,0),seq(COLOR(RGB,(1-
> floor(log[5](j))/(floor(log[5](n))+1))*irem(irem(j,7)+1,2),(1-
> floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1,2),
2),(1-floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1,
4),2)),j=1..n+1)],thickness=[2,seq(1,j=0..n)],legend=[legenda],
title=titlu,xtickmarks=map(evalf,xn[n]),ytickmarks=map(evalf,yn[n])
);
> end;
Aplicăm procedura pentru funcţia f1 pe intervalele [0, 2π], [-π, 3π] , funcţia f3 pe
intervalul [-3, 3] şi funcţia f4 pe intervalul [-1, 1]. În toate cazurile n = 10 şi se
consideră două variante: noduri echidistante şi noduri Cebîşev.
> grafic_polinoame(f1,0,2*Pi,1,10);
156
Metode Numerice
> grafic_polinoame(f1,0,2*Pi,2,10);
> grafic_polinoame(f1,-Pi,3*Pi,1,10);
157
Mădălina Roxana Buneci
> grafic_polinoame(f1,-Pi,3*Pi,2,10);
> grafic_polinoame(f3,-3,3,1,10);
158
Metode Numerice
> grafic_polinoame(f3,-3,3,2,10);
> grafic_polinoame(f4,-1,1,1,10);
159
Mădălina Roxana Buneci
> grafic_polinoame(f4,-1,1,2,10);
160
Metode Numerice
Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Punctele x0, x1, …, xn se
presupun echidistante, adică
xi = x0 + ih, i = 0,1, …, n
h ≠0 fiind pasul reţelei. Se construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel
încât pentru fiecare i, Pi să fie polinomul de interpolare asociat nodurilor x0, x1, …,
xi şi valorilor y0, y1, …, yi. Construcţia se face după cum urmează
P0(x) = y0
Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xi+1) = yi+1.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-x0) + c2(x-x0)(x-x1) + .... + cn(x-x0)(x-x1)...(x-xn-1)
Pentru exprimarea coeficienţilor c0, c1, …, cn este necesară cunoaşterea
noţiunilor de putere generalizată şi diferenţă finită.
Fie f : [a, b] → R o funcţie, şi fie reţeaua cu nodurile echidistante x0, x1, …,
xn, având pasul h > 0. Produsul
x[n] = x(x-h)…(x-(n-1)h)
se numeşte putere generalizată a lui x. Dacă h ar fi 0, atunci puterea generalizată ar
coincide cu puterea obişnuită. Expresia
∆f(x) = f(x+h) - f(x)
se numeşte diferenţă finită (la dreapta) de ordinul întâi. Diferenţele finite de
ordin superior se definesc cu ajutorul relaţiei:
∆nf(x) = ∆(∆n-1f(x))
Se verifică cu uşurinţă relaţiile
∆(f+g) = ∆(f) +∆(g)
∆(cf) = c∆(f)
∆(m+n)(f) = ∆m(∆nf).
161
Mădălina Roxana Buneci
Pentru aplicaţii, calculul diferenţelor finite este comod dacă se construieşte tabelul
triunghiular următor:
f(x0) f(x1) f(x2) f(x3) f(xn-3) f(xn-2) f(xn-1) f(xn)
∆f(x0) ∆f(x1) ∆f(x2) ∆f(xn-3) ∆f(xn-2) ∆f(xn-1)
∆2f(x0) ∆2f(x1) ∆2f(xn-3) ∆2f(xn-2)
∆3f(x0) ∆3f(xn-3)
∆nf(x0)
Astfel
∆f (x 0 ) = f (x1 ) − f (x 0 )
∆ 2f (x 0 ) = ∆f (x1 ) − ∆f (x 0 )
= f (x 2 ) − f (x1 ) − (f (x1 ) − f (x 0 ))
= f (x 2 ) − 2f (x1 ) + f (x 0 )
∆ 3f (x 0 ) = ∆ 2f (x1 ) − ∆ 2f (x 0 )
= f (x 3 ) − 3f (x 2 ) + 3f (x1 ) + f (x 0 )
Se poate demonstra uşor prin inducţie că
n
i
∆ n f ( x ) = ∑ ( −1) Cin f ( x + ( n − i ) h )
i=0
∆ i +1f (x 0 )
ci+1 = , i = 0, 1, ..., n-1.
(i + 1)!h i +1
162
Metode Numerice
Aşadar
2 3
∆f (x 0 ) [1] + ∆ f (x 0 ) x − x [ 2] + ∆ f (x 0 ) x − x [3] + .... +
Pn (x) = f (x 0 ) + ( x − x 0) ( 0) ( 0)
1!h 2!h 2 3!h 3
∆ n f (x 0 )
+ ... + n
( x − x 0 )[ n ]
n!h
Expresia polinomului de interpolare de mai sus poartă denumirea de polinom
Newton de speţa I (sau ascendent ). Expresia polinomului Newton se poate pune
sub o formă mai comodă pentru aplicaţii, dacă se face schimbarea de variabilă
x − x0
t=
h
şi se ţine seama că
163
Mădălina Roxana Buneci
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x1 := 0, , , 2 π
3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
π 2π
y1 := 0, − , − , 2 π
3 3
164
Metode Numerice
> PNewton1(0,2*Pi/3,y1,X);
3X 3X
3 X − 1 − 2
X 2π 2π
− +
2 4
> sort(expand(PNewton1(0,2*Pi/3,y1,X)));
27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):
> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=0..2*Pi);
> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=-Pi..3*Pi);
165
Mădălina Roxana Buneci
Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Punctele x0, x1, …, xn se
presupun echidistante, adică
xi = x0 + ih, i = 0,1, …, n
h fiind pasul reţelei. Se construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel încât
pentru fiecare i, Pi să fie polinomul de interpolare asociat nodurilor xn, xn-1, …, xn-
i+1 şi valorilor yn, yn-1, …, yn-i+1. Construcţia se face după cum urmează
P0(x) = yn
Pi+1(x) = Pi(x) + ci+1(x-xn)(x-xn-1)...(x-xn-i+1), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xn-i) = yn-i.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-xn) + c2(x-xn)(x-xn-1) + .... + cn(x-xn)(x-xn-1)...(x-x1)
166
Metode Numerice
∇nf(xn)
Pentru determinarea unui coeficient ci al polinomului de interpolare Pn se utilizează
diferenţa finită de ordinul i a lui Pn în xn. Se obţine:
∇f (x 0 ) ∇ 2f (x n ) 3
[ 2] + ∇ f (x n ) x − x
Pn (x) = f (x n ) + ( x − x n )[1] + 2
( x − x n −1 ) 3
( [3]
n −2 ) +
1!h 2!h 3!h
∇ n f (x n )
+ .... + n
( x − x1 )[ n ]
n!h
167
Mădălina Roxana Buneci
Pn (x) = Pn (x n + th)
∇f (x n ) ∇ 2f (x n ) ∇3f (x n )
= f (x n ) + t+ t(t + 1) + t(t + 1)(t + 2) +
1! 2! 3!
∇ n f (x n )
+ .... + t(t + 1)...(t + n − 1)
n!
Dacă se efectuează calculele în aritmetica virgulei mobile, aproximarea
funcţiei f prin polinomul Newton descendent este avantajoasă pentru valorile x din
vecinătatea lui xn, eroarea fiind mică pentru t în modul mic.
168
Metode Numerice
> u := 1;
> for i from 1 to n-1 do
> for j from n-1 by -1 to i do
> yl[j+1] := yl[j+1] - yl[j]
> od;
> u := u*(t + i - 1)/i;
> px := px + u*yl[n] od;
> RETURN(px)
> end;
Exemple
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x1 := 0, , , 2 π
3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
π 2π
y1 := 0, − , − , 2 π
3 3
> PNewton2(2*Pi,2*Pi/3,y1,X);
3 (X − 2 π)
9 ( X − 2 π ) + 1
2 π
−6 π + 4 X +
4
3 (X − 2 π) 3 (X − 2 π)
3 ( X − 2 π ) + 1 + 2
2π 2π
+
4
> sort(expand(PNewton2(2*Pi,2*Pi/3,y1,X)));
27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):
> plot([f1(a),pnewton2(2*Pi,2*Pi/3,y1,a)],a=0..2*Pi);
169
Mădălina Roxana Buneci
> plot([f1(a),PNewton2(2*Pi,2*Pi/3,y1,a)],a=-Pi..3*Pi);
170
Metode Numerice
Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte (nu
neapărat echidistante) din intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Se
construiesc iterativ polinoamele Pi, i= 0, 1, ..., n astfel încât pentru fiecare i, Pi să
fie polinomul de interpolare asociat nodurilor x0, x1, …, xi şi valorilor y0, y1, …, yi.
Construcţia se face după cum urmează
P0(x) = y0
Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1,
unde ci+1 se determină din condiţia Pi+1(xi+1) = yi+1.
Ca urmare polinomul de interpolare asociat nodurilor x0, x1, …, xn şi valorilor y0,y1,
…, yn poate fi scris sub forma
Pn(x) = c0 + c1(x-x0) + c2(x-x0)(x-x1) + .... + cn(x-x0)(x-x1)...(x-xn-1)
Pentru exprimarea coeficienţilor c0, c1, …, cn este necesară cunoaşterea noţiunii de
diferenţă divizată.
Expresia
f (x j ) − f (x i )
f (x i , x j ) = , i≠ j
x j − xi
171
Mădălina Roxana Buneci
f(x0,x1,....,xn)
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 ;
172
Metode Numerice
> y1 := [seq(y[i],i=1..n)];
> v := y1[1];
> u := 1;
> for i from 0 to n-2 do
> for j from 0 to n-2-i do
> y1[j+1]:=(y1[j+2]-y1[j+1])/(x[j+i+2]-x[j+1]) ;
> od;
> u := u*(a-x[i+1]); v := v + u*y1[1];
> od;
> RETURN(v)
> end;
Exemple
> f1:=x->x*cos(x);
f1 := x → x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2π 4π
x1 := 0, , , 2 π
3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
π 2π
y1 := 0, − , − , 2 π
3 3
> PNewtond(x1,y1,X);
2π 4π
27 X X − X −
X 3 3
− +
2 16 π 2
> sort(expand(PNewtond(x1,y1,X)));
27 X 3 27 X 2
− +X
16 π 2 8π
> with(plots):
> plot([f1(a),PNewtond(x1,y1,a)],a=0..2*Pi);
173
Mădălina Roxana Buneci
> plot([f1(a),PNewtond(x1,y1,a)],a=-Pi..3*Pi);
174
Metode Numerice
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.
caz dacă X o submulţime a lui H şi x0∈H, atunci un element p0∈X este element de
cea mai bună aproximare pentru x0 pe X dacă
p0 − x 0 = inf x − x 0 = inf x − x0 , x − x0
x∈X x∈X
175
Mădălina Roxana Buneci
1
= (|| p1 – x0 ||2 + || p2 – x0||2)
2
≤|| p1 – x0 ||2.
Deci p ∈ H0 şi ||p-x0|| < || p1 – x0 ||, contradicţie cu faptul că p1 este element de cea
mai bună aproximare a lui x0 pe H0. Rezultă că presupunerea este falsă, şi în
consecinţă elementul de cea mai bună aproximare este unic.
■
176
Metode Numerice
|| p0 -x0|| > 0,
obţinem
||p0-x0|| ≤ || x- x0|| pentru orice x∈H0,
adică p0 ∈ X este element de cea mai bună aproximare a lui x0 pe H0.
Presupunem că p0 ∈ H0 este element de cea mai bună aproximare a lui x0 pe
H0 şi demonstrăm că <p0-x0, x> = 0 pentru orice x∈H0. Presupunem prin absurd că
există y0∈H0 astfel încât
<p0-x0, y0> ≠ 0.
Scriind <p0-x0, y0> = r (cosθ + isinθ)= reiθ cu r>0 şi θ∈[0, 2π], rezultă că înlocuind
y0 cu eiθy0 ∈ H0, putem presupune că există y0∈H0 astfel încât
<p0-x0, y0> > 0.
Pentru orice λ > 0, avem p0 - λy0 ∈ H0, deoarece H0 este subspaţiu vectorial. În
plus avem
||p0 - λy0– x0||2 = < p0 - λy0 – x0, p0 - λy0 – x0>
= < (p0– x0) - λy0, (p0 – x0) - λy0>
= || p0 – x0||2 - λ<y0, p0-x0> -λ< p0-x0, y0> + λ2|| y0||2
=|| p0 – x0||2 + λ(λ|| y0||2 – 2 < p0-x0, y0>)
În consecinţă pentru orice scalar λ cu proprietatea că
p 0 − x 0 , y0
0<λ< 2
2
y0
avem ||p0 - λy0– x0||2 < || p0 – x0||2 şi p0 - λy0 ∈ H0. Am obţinut astfel o contradicţie
cu faptul că p0 este element de cea mai bună aproximare a lui x0 pe H0. În
consecinţă, presupunerea este falsă şi deci
<p0 -x0, x> = 0
pentru orice x∈H0.
177
Mădălina Roxana Buneci
VI. 2.2. Aproximarea în medie prin metoda celor mai mici pătrate
178
Metode Numerice
Dacă f1 ~ f2 şi g1 ~ g2 atunci
n n
∑ p ( xi ) f1 ( xi )g1 ( xi ) = ∑ p ( xi ) f2 ( xi )g 2 ( xi ) .
i=0 i=0
Funcţia p(x) este o funcţie pondere introdusă în ipoteza că aproximările f(xi) sunt
diferite ca ordin de mărime. Relativ la produsul scalar introdus, norma lui [f] este
definită prin
n
2
[f ] = ∑ p(x i )f 2 (x i ) .
i =0
Aproximarea în medie prin metoda celor mai mici pătrate a unui element f∈H
presupune determinarea elementului de cea mai bună aproximare F0 a lui f pe Hm.
Conform definiţiei elementul F0 de cea mai bună aproximare a lui f pe Hm trebuie să
satisfacă condiţia
n n
179
Mădălina Roxana Buneci
ceea ce revine la
<f, ϕj> = c0<ϕ0, ϕj> + c1<ϕ1, ϕj> + … + cm<ϕm, ϕj>, j = 0, 1,…,m.
Notăm
n
aij = <ϕi, ϕj> = ∑ p(x k )ϕ i (x k )ϕ j (x k )
k =0
n
bj = <f, ϕj> = ∑ p(x k )f (x k )ϕ j (x k )
k =0
m m m m
c0 ∑ x i + c1 ∑ x i2 + … + cm ∑ x im +1 = ∑ x i f (x i )
i=0 i =0 i =0 i =0
m m m m
c0 ∑ x im + c1 ∑ x im +1 + … + cm ∑ x i2m = ∑ x im f (x i )
i=0 i =0 i=0 i =0
180
Metode Numerice
181
Mădălina Roxana Buneci
> ei:=ei-phi[j+1](x[i+1])*c[j+1]
> od;
> ei:=ei^2*p[i+1]; ep:=ep+ei
> od;
> print(`Suma patratelor erorilor (ponderate)`,evalf(ep));
> RETURN([seq(c[i],i=1..m+1)])
> end;
În exemplele ce urmează vom folosi şi procedurile desen_puncte, baza_normal,
evalueaza şi desen. Procedura desen_puncte reprezintă grafic cele n+1 puncte date
iniţial: (x0, y0), (x1, y1), ..., (xn, yn). Procedura baza_normal primeşte drept
paramentru un număr natural m şi construieşte lista funcţiilor ϕ0, ϕ1, …ϕm unde
ϕj(x) = xj pentru orice x şi orice j=0..m. Procedura evalueaza primeşte drept
parametri lista funcţiilor liniar independente ϕ0, ϕ1, …ϕm, lista coeficienţilor
polinomului generalizat ce aproximează f şi un punct a. Procedura returnează
valoarea polinomului generalizat în a. Procedura desen reprezintă grafic în acelaşi
sistem de axe de coordonate polinomul generalizat ce aproximează funcţia şi cele
n+1 puncte date iniţial. Punctele sunt reprezentate prin elipse. Parametrii procedurii
sunt funcţia determinată de polinomul generalizat, lista x ce conţine punctele x0, x1,
…, xn, şi şi lista y ce conţine valorile funcţiei. Înainte de a folosi aceste proceduri
trebuie încărcate pachetele linalg, plots şi plottools.
> desen_puncte:=proc(xn,yn)
> local n, d;
> n:=nops(xn);
> d:=pointplot([seq([xn[i],yn[i]],i=1..n)],symbol=CIRCLE,
labels=[X,Y],color=COLOR(RGB,0,0,0),thickness=15);display(d)
> end;
> baza_normal:=proc(n,t)
> RETURN([unapply(1,t),seq(unapply(t^j,t),j=1..n)])
> end;
> evalueaza:=proc(phi,c,a)
> local i,m,fx;
> m:=nops(phi);fx:=0;
> for i from 1 to m do
182
Metode Numerice
> desen:=proc(f,x,y)
> local n,i,d1,d2,d3,x1,x2;
> n:=nops(x);
> x1:=min(seq(x[i],i=1..n));x2:=max(seq(x[i],i=1..n));
> d1:=pointplot([seq([x[i],y[i]],i=1..n)],symbol=CIRCLE,
color=black,thickness=15);
> d2:=plot(f(t),t=x1..x2,labels=[X,Y],xtickmarks=map(evalf,x),
ytickmarks=map(evalf,y));
> d3:=d1,d2;
> display(d3);
> end;
Exemple
> x1:=[1,2,3,4,5,6];
x1 := [ 1, 2, 3, 4, 5, 6 ]
> y1:=[0.9,0.98,1.02,1.04,1.10,1.12];
y1 := [ 0.9, 0.98, 1.02, 1.04, 1.10, 1.12 ]
> p1:=[seq(1/6,i=1..6)];
1 1 1 1 1 1
p1 := , , , , ,
6 6 6 6 6 6
> desen_puncte(x1,y1);
183
Mădălina Roxana Buneci
> phi1:=baza_normal(1,x);
φ1 := [ 1, x → x ]
> c1:=patrate_mici(x1,y1,p1,phi1);
Factorul de conditionare, 119.4666666
Suma patratelor erorilor (ponderate) , 0.0002069841270
c1 := [ 0.8786666680 , 0.0422857140 ]
> evalueaza(phi1,c1,x);
0.8786666680 + 0.0422857140 x
> desen((t->evalueaza(phi1,c1,t)),x1,y);
> phi2:=baza_normal(2,x);
φ2 := [ 1, x → x, x → x2 ]
> c2:=patrate_mici(x1,y1,p1,phi2);
184
Metode Numerice
> phi3:=baza_normal(3,x);
φ3 := [ 1, x → x, x → x 2, x → x3 ]
> c3:=patrate_mici(x1,y1,p1,phi3);
185
Mădălina Roxana Buneci
Iar
186
Metode Numerice
p(x 0 ) f(x0)
p(x1 ) f(x1)
Y=
p(x n ) f(xn)
Dacă funcţiile ϕ0, ϕ1, …ϕm sunt liniar independente, atunci rang(X) = m+1
şi matricea A este pozitiv definită. Ca urmare există şi este unică o matrice inferior
triunghiulară L cu elementele de pe diagonala principală pozitive astfel încât A =
LLt (matricea L se numeşte factor Cholesky). Rezolvarea sistemului Ax=b revine la
rezolvarea a două sisteme cu matrice triunghiulare: Lz =b, Ltx=z. O variantă mai
lentă (volum de calcul mai mare), dar numeric mai stabilă, de rezolvare a sistemului
Ax = b este dată de descompunerea QR a matricei A, adică de reprezentarea
matricei A sub forma A = QR unde Q este o matrice ortogonală (QtQ = Im+1) iar R o
matrice superior triunghiulară. Atunci rezolvarea sistemului Ax=b este echivalentă
cu rezolvarea sistemului Rx =Qtb.
Dacă A=XtX nu este bine condiţionată, atunci gradul de acurateţe al soluţiei
furnizate de metoda celor mai mici pătrate poate fi foarte scăzut.
187
Mădălina Roxana Buneci
188
Metode Numerice
189
Mădălina Roxana Buneci
există u strict cuprins între a şi x (sau echivalent există θ ∈ (0, 1) astfel încât u = a+
θ(x – a)) cu proprietatea că
f (n +1) (u )
Ra,n(x) = (x - a)n+1.
(n + 1)!
Ne propunem să aproximăm valorile derivatelor de ordinul întâi şi doi ale
funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în punctele
xi-1, xi, xi+1
care nu sunt neapărat echidistante, adică:
xi-1 = xi –h, xi+1 = xi + αh.
dar că α variază într-un interval fixat.
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de
ordinul 2 pentru f în xi:
f ′(x i ) f ′′(x i ) f ′′′(w x )
f (x) = f (x i ) + (x − x i ) + (x − x i ) 2 + (x − x i )3 .
1! 2! 3!
cu wx stric cuprins între x şi xi. Înlocuim în această formulă x = xi-1, respectiv x =
xi+1 şi obţinem relaţiile:
f ′(x i ) ≈
( )
f (x i+1 ) + f ( x i ) α 2 − 1 − α 2f (x i−1 )
hα ( α + 1)
cu eroarea:
α 2 f ′′′(v) α f ′′′(u) 2
ε = + h
α + 1 3! α + 1 3!
190
Metode Numerice
cu eroarea
h f ′′′(v) 2 f ′′′(u)
ε= α −
( α + 1) 3 3
f ( ) (v) 4 f ( ) (u) 4
4 4
f (x i +1 ) + 2f (x i ) + f (x i−1 ) + h + h
f ′′(x i ) = 4! 4!
h2
astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
191
Mădălina Roxana Buneci
f (x i +1 ) − 2f (x i ) + f (x i−1 )
f ′′(x i ) ≈
h2
cu eroarea
f ( 4 ) (v) f ( 4 ) (u)
ε= + h2
4! 4!
de ordinul lui h2: O(h2).
Ne propunem acum să aproximăm valorile derivatelor de ordinul întâi şi doi
ale funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în punctele
xi, xi+1, xi+2
care nu sunt neapărat echidistante, adică:
xi = xi+1 –h, xi+2 = xi+1 + αh.
cu α
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de ordinul 2
ataşată lui f în xi:
f ′(x i ) f ′′(x i ) f ′′′(w x )
f (x) = f (x i ) + (x − x i ) + (x − x i )2 + (x − x i )3 .
1! 2! 3!
cu wx stric cuprins între x şi xi. Înlocuim în această formulă x = xi+1, respectiv x =
xi+2 şi obţinem relaţiile:
f ′(x i ) =
( )
f (x i+ 2 ) + f ( x i ) α 2 + 2α − (1 + α ) 2 f (x i+1 )
+
− hα ( α + 1)
f ′′′(v) f ′′′(u) 3
− (α + 1)3 h 3 + h (1 + α ) 2
+ 3! 3!
− hα ( α + 1)
192
Metode Numerice
f ′(x i ) ≈
(
−f (x i+ 2 ) − (1 + α) 2 f (x i +1 ) − α 2 + 2α f ( x i ) )
hα ( α + 1)
cu eroarea:
f ′′′(v) (α + 1) 2 f ′′′(u) (α + 1) 2
ε= − h
3! α 3! α
Adunând la relaţia (7.6) relaţia (7.5) înmulţită cu -(1+α) obţinem:
f (x i+ 2 ) + αf (x i ) − (α + 1)f (x i +1 )
f ′′(x i ) = 2
h 2 ( α + 1) α
f ′′′(v) f ′′′(u) .
− (α + 1)3 h 3 + (α + 1)h 3
+2 3! 3!
2
h ( α + 1) α
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
f (x i+ 2 ) − (α + 1)f (x i+1 ) + αf (x i )
f ′′(x i ) ≈ 2
h 2 α ( α + 1)
cu eroarea
f ′′′(v) (α + 1) 2 f ′′′(u) 1
ε = − + h
3! α 3! α
Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
−f (x i+ 2 ) + 4f ( x i+1 ) − 3f (x i )
f ′(x i ) ≈
2h
cu eroare de ordinul O(h2)
f (x i + 2 ) − 2f (x i+1 ) + f (x i )
f ′′(x i ) ≈ .
h2
cu eroare de ordinul O(h).
Similar ne propunem să aproximăm valorile derivatelor de ordinul întâi şi
doi ale funcţiei f în punctul xi ∈ [a, b] când sunt cunoscute valorile funcţiei în
punctele
193
Mădălina Roxana Buneci
xi-2, xi-1, xi
care nu sunt neapărat echidistante, adică:
xi = xi-1 + h, xi-2 = xi-1 –αh
Presupunem că f este de 3 ori derivabilă şi scriem formula lui Taylor de ordinul 2
pentru f în xi:
f ′(x i ) =
( )
f (x i−2 ) + f ( x i ) α 2 + 2α − (1 + α )2 f (x i −1 )
+
hα ( α + 1)
f ′′′(u) 3 f ′′′(v)
− h (1 + α )2 + (α + 1)3 h 3
+ 3! 3!
hα ( α + 1)
f ′(x ) ≈
( α 2 + 2α ) f ( x i ) − (1 + α )2 f (x i−1 ) + f (x i− 2 )
i
hα ( α + 1)
cu eroarea:
f ′′′(u) (α + 1) f ′′′(v) (α + 1)2 2
ε = − + h
3! α 3! α
Adunând la relaţia (7.8) relaţia (7.7) înmulţită cu -(1+α) obţinem:
f (x i−2 ) + αf (x i ) − (α + 1)f (x i −1 )
f ′′(x i ) = 2
h 2 ( α + 1) α
f ′′′(v) f ′′′(u) .
− (α + 1)3 h 3 + (α + 1)h 3
+2 3! 3!
2
h ( α + 1) α
Putem astfel aproxima valoarea derivatei de ordinul doi al lui f în xi prin
194
Metode Numerice
cu eroarea
f ′′′(u) 1 f ′′′(v) (α + 1)2
ε= − h
3! α 3! α
Dacă nodurile sunt echidistante (adică dacă α = 1) se obţin următoarele
formule de aproximare:
3f (x i ) − 4f (x i −1 ) + f ( x i− 2 )
f ′(x i ) ≈
2h
2
cu eroare de ordinul O(h ), şi
f (x i −2 ) − 2f (x i −1 ) + f (x i )
f ′′(x i ) ≈ .
h2
cu eroare de ordinul O(h).
Folosind acest tip de tehnici, se poate obţine o mare varietate de formule
aproximative pentru valorile derivatelor de orice ordin în xi. Prezentăm mai jos
câteva astfel de formule pentru cazul nodurilor echidistante.
Formulă de aproximare a derivatei prin diferenţe finite centrale Eroare
f (x i +1 ) − f (x i −1 ) O(h2)
f ′(x i ) ≈
2h
−f (x i+1 ) + 8f (x i+1 ) − 8f (x i−1 ) + f (x i− 2 ) O(h4)
f ′(x i ) ≈
12h
f (x i +1 ) − 2f (x i ) + f (x i−1 ) O(h2)
f ′′(x i ) ≈
h2
−f (x i+ 2 ) + 16f (x i +1 ) − 30f (x i ) + 16f (x i−1 ) − f (x i− 2 ) O(h4)
f ′′(x i ) ≈
12h 2
f (x i+ 2 ) − 2f (x i +1 ) + 2f (x i−1 ) − f (x i − 2 ) O(h2)
f ′′′(x i ) ≈
2h 3
−f (x i +3 ) + 8f (x i + 2 ) − 13f (x i+1 ) + 13f (x i −1 ) − 8f (x i −2 ) + f (x i−3 ) O(h4)
f ′′′(x i ) ≈
8h 3
195
Mădălina Roxana Buneci
196
Metode Numerice
> d1:=proc(x,y)
> local df,h,alpha,i,n;
> n:=nops(x);df:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do
> h:=x[i]-x[i-1];
> alpha:=(x[i+1]-x[i])/h;
> df[i-1]:=(y[i+1]+y[i]*(alpha^2-1)-alpha^2*y[i-1])/
(h*alpha*(alpha+1))
> od;
> RETURN(df);
> end;
Procedură MAPLE pentru determinarea valorilor aproximative ale
derivatei de ordinul 2
Procedura d2 admite drept parametri lista x ce conţine punctele x1, x2, …., xn şi
lista y ce conţine valorile y1 = f(x1), y2 = f(x2), …., yn= f(xn). Procedura întoarce
lista aproximaţiilor derivatei de ordinul al II-lea a lui f în punctele x2, x3, ..., xn-1.
> d2:=proc(x,y)
> local d2f,h,alpha,i,n;
> n:=nops(x);d2f:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do h:=x[i]-x[i-1];
> alpha:=(x[i+1]-x[i])/h;
> d2f[i-1]:=2*(y[i+1]-(alpha+1)*y[i]+alpha*y[i-
1])/(h^2*alpha*(alpha+1))
> od;
> RETURN(d2f);
> end;
Exemple
> x1:=[seq(-1+2*i/5,i=0..5)];
197
Mădălina Roxana Buneci
-3 -1 1 3
x1 := -1, , , , , 1
5 5 5 5
> f1:=t->ln(1+t^2);
f1 := t → ln( 1 + t 2 )
> y1:=[seq(evalf(f1(-1+2*i/5)),i=0..5)];
y1 := [ 0.6931471806 , 0.3074846997 , 0.03922071315 , 0.03922071315 , 0.3074846997 ,
0.6931471806 ]
> d1(x1,y1);
[ -0.8174080840 , -0.3353299832 , 0.3353299832 , 0.8174080840 ]
> d2(x1,y1);
[ 0.7337405900 , 1.676649916, 1.676649916, 0.7337405900 ]
> z1:=[seq(D(f1)(-1+2*i/5),i=1..4)];
-15 -5 5 15
z1 := , , ,
17 13 13 17
> z2:=[seq((D@@2)(f1)(-1+2*i/5),i=1..4)];
200 300 300 200
z2 := , , ,
289 169 169 289
> map(evalf,d1(x1,y1));
[ -0.8174080840 , -0.3353299832 , 0.3353299832 , 0.8174080840 ]
> map(evalf,z1);-.8174080840
[ -0.8823529412 , -0.3846153846 , 0.3846153846 , 0.8823529412 ]
> map(evalf,d2(x1,y1));
[ 0.7337405900 , 1.676649916, 1.676649916, 0.7337405900 ]
> map(evalf,z2);
[ 0.6920415225 , 1.775147929 , 1.775147929 , 0.6920415225 ]
198
Metode Numerice
> n:=nops(y);df:=[seq(1,i=1..n-2)];
> for i from 2 to n-1 do
> df[i-1]:=(y[i+1]-y[i-1])/(2*h)
> od;
> RETURN(df);
> end;
199
Mădălina Roxana Buneci
200
Metode Numerice
> plot([(D@@2)(f2),t->de2(2/5,[f2(t-2/5),f2(t),f2(t+2/5)])[1]],
1..3);
> plot([D(f2),t->de1(10^(-8),[f2(t-10^(-8)),f2(t),f2(t+10^(-
8))])[1]],1..3);
201
Mădălina Roxana Buneci
> plot([(D@@2)(f2),t->de2(10^(-4),[f2(t-10^(-4)),f2(t),f2(t+10^(-
4))])[1]],1..3);
202
Metode Numerice
> map(evalf,[seq(eroare1(f2,3/2,10^(-i)),i=1..6)]);
> eroare2:=proc(f,x,h)
> RETURN((D@@2)(f)(x)-de2(h,[f(x-h),f(x),f(x+h)])[1])
> end;
203
Mădălina Roxana Buneci
> map(evalf,[seq(eroare2(f2,3/2,10^(-i)),i=1..5)]);
204
Metode Numerice
4m D ( n, m − 1) − D ( n − 1, m − 1)
D(n,m) = , 1 ≤ m ≤ n.
4m − 1
Se poate arăta utilizând inducţia că
Teorema 7.9 (Extrapolare Richardson). Cu notaţiile de mai sus există
constantele ak,m astfel încât
∞ 2k
h
D(n,m) = L + ∑ a k,m 2n .
k = m +1
D(0,0)
D(1,0) D(1,1)
D(2,0) D(2,1) D(2,2)
205
Mădălina Roxana Buneci
h
Prima coloană a acestui tabel poate fi calculată direct cu definiţia: D(n,0) = ϕ .
2n
În cazul elementelor de pe celelalte coloane se observă că fiecare dintre ele depinde
de elementul din stânga de pe aceeaşi linie şi de pe linia de deasupra din stânga.
Să exemplificăm aplicarea acestui procedeu pentru îmbunătăţirea formulei
de aproximare a derivatei de ordinul 1:
f (x + h) − f (x − h)
f ′(x) ≈ ϕ ( h ) = .
2h
Dacă f este analitică avem:
f(
∞ 2k +1)
ϕ(h) = f ′(x) + ∑ ( x ) h 2k .
k =1 ( 2k + 1) !
h
4ϕ − ϕ ( h )
4D (1, 0 ) − D ( 0, 0 ) 2
D(1,1) = = .
3 3
h
4ϕ − ϕ ( h )
Ca urmare 2 reprezintă o aproximaţie a lui f ′(x) cu eroare de
3
f (x + h) − f (x − h)
ordinul O(h4), unde ϕ ( h ) = .
2h
Fie f : [a, b] → R o funcţie, fie x0, x1, …, xn n+1 puncte distincte din
intervalul [a, b], şi yi = f(xi) pentru orice i = 0,1,…n. Aproximăm f(k) prin derivata
de ordinul k a polinomului de interpolare asociat lui f şi x0, x1, …, xn.
Să presupunem că n = 4 şi că punctele x0, x1, x2, x3, x4 sunt echidistante şi să
construim polinomul Newton ascendent.
206
Metode Numerice
P4 (x) = P4 (x 0 + th)
∆f (x 0 ) ∆ 2f (x 0 ) ∆3f (x 0 )
= f (x 0 ) + t+ t(t − 1) + t(t − 1)(t − 2) +
1! 2! 3!
∆ 4f (x 0 )
+ t(t − 1)(t − 2)(t − 3)
4!
∆f (x 0 ) ∆ 2f (x 0 ) 2 ∆3f (x 0 ) 3
= f (x 0 ) + t+ (t − t) + (t − 3t 2 + 2t) +
1! 2! 3!
∆ 4f (x 0 ) 4
+ (t − 6t 3 + 11t 2 − 6t)
4!
Notăm g(t) = P4(x0 +th). Avem
∆ 2f (x 0 ) ∆3f (x 0 ) 2
g′ ( t ) = ∆f (x 0 ) + (2t − 1) + (3t − 6t + 2) +
2 6
∆ 4f (x 0 ) 3
+ (4t − 18t 2 + 22t − 6)
24
(2t − 1) (3t 2 − 6t + 2)
= ∆f (x 0 ) + ∆ 2f (x 0 ) + ∆3f (x 0 ) +
2 6
(2t 3 − 9t 2 + 11t − 3)
+ ∆ 4f (x 0 )
12
iar
∆ 2f (x 0 ) ∆3f (x 0 )
g′′ ( t ) = 2+ (6t − 6) +
2 6
∆ 4f (x 0 ) 2
+ (6t − 18t + 11)
12
1 (2t − 1) (3t 2 − 6t + 2)
f ′ (x)= f ′ (x0+ht) ≈ ( ∆f (x 0 ) + ∆ 2f (x 0 ) + ∆3f (x 0 ) +
h 2 6
207
Mădălina Roxana Buneci
(2t 3 − 9t 2 + 11t − 3)
+ ∆ 4f (x 0 ) )
12
208
Metode Numerice
continuă strict pozitivă numită pondere. Considerăm x0, x1, …, xn n+1 puncte
distincte din intervalul [a, b], şi notăm yi = f(xi) pentru orice i = 0,1,…n.
b
O formulă de cuadratură presupune aproximarea integralei ∫ f (x)ρ(x)dx
a
printr-o combinaţie liniară de valori ale funcţiei f în punctele x0, x1, …, xn, i.e
b
∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn).
a
209
Mădălina Roxana Buneci
b b
Deci notăm dacă Ai = ∫ ρ(x)li ( x ) dx , atunci ∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) +
a a
... + Anf(xn).
În cele ce urmează ne propunem să calculăm eroarea cu care
b b
∫ Ln (x)ρ(x)dx aproximeză ∫ f (x)ρ(x)dx . Reprezentând punctele sub forma
a a
a +b b−a
xi = + t i , ti ∈[-1, 1], i ∈{0, 1, ..., n},
2 2
avem
b
∫ Ln (x)ρ(x)dx =
a
b n
ρ ( x ) ∑ f ( xi )
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n ) dx
= ∫a ( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
i=0
n
= ∑ f ( xi )∫ ρ ( x )
b ( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n ) dx
i =0
a ( x i − x 0 ) ( x i − x1 ) .... ( x i − x i−1 )( x i − x i+1 ) ... ( x i − x n )
Facem schimbarea de variabilă
a +b b−a
x= + t
2 2
şi obţinem
b
∫ Ln (x)ρ(x)dx =
a
1
b−a n a +b b−a (t − t 0 ) (t − t i −1 )(t − t i +1 ) (t − t n )
∑
2 i =0
f (x i ) ∫ ρ(
2
+
2
t)
(t i − t 0 ) (t i − t i −1 )(t i − t i+1 ) (t i − t n )
dt
−1
Formula
b
∫ f (x)ρ(x)dx ≈
a
1
b−a n a +b b−a (t − t 0 ) (t − t i−1 )(t − t i+1 ) (t − t n )
∑
2 i =0
f (x i ) ∫ ρ(
2
+
2
t)
(t i − t 0 ) (t i − t i−1 )(t i − t i+1 ) (t i − t n )
dt.
−1
se numeşte formula generală de cuadratură.
210
Metode Numerice
|f(x) − Ln(x)| ≤
M
(x − x 0 )(x − x1 ) (x − x n ) ,
(n + 1)!
unde M = sup |f(n+1)(x)|
x∈[a,b]
b b b
Rn(f) = ∫ f (x)ρ(x)dx − ∫ ρ(x)L n (x)dx = ∫ (f (x) − L n (x))ρ(x)dx
a a a
b b
|Rn(f)| = | ∫ (f (x) − L n (x))ρ(x)dx | ≤ ∫ | f (x) − Ln (x) | ρ(x)dx
a a
unde
n −i
( n ) 1 ( −1) n
t ( t − 1) ... ( t − i + 1)( t − i − 1) ... ( t − n )dt
Hi = ∫
n ( n − i ) !i! 0
n −i
1 ( −1) n t ( t − 1) ... ( t − n )
= ∫
n ( n − i ) !i! 0 t −i
dt
211
Mădălina Roxana Buneci
ˆ . Au loc relaţiile
numeşte formula Newton - Cotes
n
(n) (n)
∑ Hi(
n)
= 1 şi Hi = H n −i , i = 0,1,…,n.
i =0
Dacă f este o aplicaţie de clasă Cn+1 are loc următoarea formulă de evaluare a
restului:
b n
(n) b−a
∫ f (x)ρ(x)dx − ( b − a ) ∑ Hi f a + i n ≤
a i =0
n +2 n
1 b−a
∫ t(t − 1)(t − 2) (t − n)dt x∈sup
n+1)
|f( (x)|.
( n + 1)! n 0 [a,b]
cu o eroare ≤
( b − a )2 sup f ' ( x ) .
4 x∈[ a,b ]
212
Metode Numerice
x x i + x i+1
∫xii+1 f ( x )dx ≈ (xi+1-xi) f 2
b x n −1
Ţinând cont că ∫a f ( x )dx = ∑ ∫ i +1 f ( x )dx , obţinem următoarea formulă de
x
i =0 i
b
b − a n −1 x i + x i +1
∫ f (x)dx ≈ ∑ f 2 .
n i =0
a
b b − a n −1 x i + x i+1
∫a f ( x ) dx − ∑ f 2 =
n i =0
n −1 x
b − a n −1 x i + x i+1
= ∑ ∫x i +1
i
f ( x ) dx − ∑ f 2
n i=0
i =0
n −1
x i +1 b − a x i + x i +1
= ∑ ∫x i
f ( x ) dx −
n
f
2
i =0
n −1 x
b − a x i + x i+1
≤∑ ∫x
i +1
f ( x ) dx − f
i =0 i n 2
n −1 x
x + x i +1
= ∑ ∫x i +1
i
f ( x ) dx − ( x i+1 − x i ) f i
2
i =0
≤∑
n −1
( xi+1 − x i )2 sup | f ′(x) |
i =0 4 x∈[x i ,x i +1 ]
n −1
( x i+1 − x i )2
≤ sup | f ′(x) | ∑ 4
x∈[a,b] i =0
n −1
( b − a )2
= sup | f ′(x) | ∑ 4n 2
x∈[a,b] i =0
= sup | f ′(x) |
( b − a )2
x∈[a,b] 4n
213
Mădălina Roxana Buneci
x + x i+1
f i
2
xi xi+1
214
Metode Numerice
> dreptunghiuri1:=proc(f,a,b,n)
> local i,iab,h,h0;
> iab:=0;h:=(b-a)/n;h0:=a+1/2*h;
> for i from 0 to n-1 do
> iab:=iab+evalf(f(h0+i*h))
> od;
> iab:=iab*h;
> RETURN(evalf(iab))
> end;
> dreptunghiuri2:=proc(f,a,b,eps)
> local i,iab,h,h0,n;n:=floor(1/4*(b-a)^2/eps)+1;
> print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0;h0:=a+1/2*h;
> for i from 0 to n-1 do
> iab:=iab+evalf(f(h0+i*h))
> od;
> iab:=iab*h;
> RETURN(evalf(iab))
> end;
Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x → x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> dreptunghiuri1(f,2,3,5);
768.4434052
> dreptunghiuri1(f,2,3,50);
778.2346340
> dreptunghiuri1(f,2,3,500);
778.3329936
> dreptunghiuri2(f,2,3,0.01);
Numar de pasi , 26
777.9666004
215
Mădălina Roxana Buneci
> dreptunghiuri2(f,2,3,0.001);
Numar de pasi , 251
778.3300446
> dreptunghiuri2(f,2,3,0.0001);
Numar de pasi , 2501
778.3339476
> g:=(x->exp(-x^2));
( −x 2 )
g := x → e
> evalf(int(g(x),x=-1..1));
1.493648266
> dreptunghiuri1(g,-1,1,5);
1.503548970
> dreptunghiuri1(g,-1,1,10);
1.496106505
> dreptunghiuri1(g,-1,1,500);
1.493649246
> dreptunghiuri2(g,-1,1,0.01);
Numar de pasi , 101
1.493672307
> dreptunghiuri2(g,-1,1,0.001);
Numar de pasi , 1001
1.493648512
> dreptunghiuri2(g,-1,1,0.0001);
Numar de pasi , 10001
1.493648267
> with(student):
> middlesum(g(x),x=-1..1,5);
2
4 − − 4/5 + 2 i
2
5
∑ e
5 i = 0
> evalf(middlesum(g(x),x=-1..1,5));
1.503548970
> middlebox(g(x),x=-1..1,5);
216
Metode Numerice
> middlesum(g(x),x=-1..1,10);
2
9 − − 9/10 + i
1
5
∑ e
5 i = 0
> evalf(middlesum(g(x),x=-1..1,10));
1.496106505
> middlebox(g(x),x=-1..1,10);
217
Mădălina Roxana Buneci
b−a
= (f(a) +f(b)).
2
b
b−a
Deci ∫ f (x)dx ≈ (f(a) +f(b)).
2
a
Eroarea este
b 3
b−a 1 ( b − a) 1
| ∫ f (x)dx - (f(a) +f(b)) | ≤ sup f " ( x ) ∫ (t − 1)(t + 1)dt =
2 2! x∈[ a,b] 8
a −1
3 3
1 ( b − a) 1 2 1 ( b − a) 1 2
= sup f " ( x ) ∫ t − 1dt = 2! x∈sup f "( x ) 2 ∫ t − 1dt
2! x∈[ a,b] 8 [ a,b] 8
−1 0
31
= sup f " ( x )
( b − a )3 1
2
dt = sup f " ( x )
( b − a )3 t1 − t
x∈[ a,b ] 8 ∫1 − t x∈[ a,b ] 8 0 3
0 0
= sup f " ( x )
( b − a )3 .
x∈[ a,b ] 12
Deci
b
| ∫ f (x)dx -
b−a
(f(a) +f(b)) | ≤
( b − a )3 sup f " ( x ) .
2 12 x∈[ a,b ]
a
218
Metode Numerice
b x n −1
Ţinând cont că ∫a f ( x )dx = ∑ ∫ i +1 f ( x )dx , obţinem următoarea formulă de
x
i =0 i
b f ( a ) + f ( b ) n −1
b−a
∫ f (x)dx ≈ + ∑ f ( xi ) .
n 2
a i=1
Restul (eroarea) este dat de:
b b − a f ( a ) + f ( b ) n −1
∫a f ( x ) dx − + ∑ f ( xi ) =
n 2
i=1
n −1 x
b − a f ( a ) + f ( b ) n −1
= ∑ ∫x i +1
f ( x ) dx −
n
2
+ ∑ f ( xi )
i =0 i
i=1
n −1 x n −1
x −x
∑ ∫x f ( x ) dx − ∑ i +1 i ( f ( x i ) + f ( x i +1 ) )
i +1
=
i =0 i
i =0 2
n −1 x
x −x
∑ ∫x f ( x ) dx − i+1 i ( f ( x i ) + f ( x i+1 ) )
i +1
=
i =0 i 2
n −1 x
x i +1 − x i
≤ ∑ ∫x i +1
i
f ( x ) dx −
2
( f ( x i ) + f ( xi+1 ) )
i =0
≤∑
n −1
( xi+1 − x i )3 sup | f ′′(x) |
i =0 12 x∈[x i ,x i +1 ]
n −1
( x i+1 − x i )3
≤ sup | f ′′(x) | ∑ 12
x∈[a,b] i =0
219
Mădălina Roxana Buneci
n −1
( b − a )3
= sup | f ′′(x) | ∑ 12n 3
x∈[a,b] i =0
≤
( b − a )3 sup f " ( x ) .
12n 2 x∈[ a,b ]
b b − a f ( a ) + f ( b ) n −1 ( b − a )3
∫a f ( x ) dx − n + ∑ f ( xi ) ≤ sup f " ( x )
2 12n 2 x∈[ a,b]
i =1
f(xi+1)
f(xi)
xi xi+1
220
Metode Numerice
> trapeze1:=proc(f,a,b,n)
> local i,iab,h;
> iab:=0;h:=(b-a)/n;;
> for i from 1 to n-1 do
> iab:=iab+evalf(f(a+i*h))
> od;
> iab:=iab+(f(a)+f(b))/2;iab:=iab*h;
> RETURN(evalf(iab))
> end;
> trapeze2:=proc(f,a,b,eps)
> local i,iab,h,n;n:=floor(abs((b-a)^3/(12*eps))^(1/2))+1;
> print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0;
> for i from 1 to n-1 do
> iab:=iab+evalf(f(a+i*h))
> od;
> iab:=iab+(f(a)+f(b))/2;iab:=iab*h;
> RETURN(evalf(iab))
> end;
Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x → x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> trapeze1(f,2,3,5);
798.1539466
> trapeze1(f,2,3,50);
778.5326999
> trapeze1(f,2,3,500);
778.3359754
> trapeze2(f,2,3,0.01);
221
Mădălina Roxana Buneci
Numar de pasi , 3
833.1348363
> trapeze2(f,2,3,0.001);
Numar de pasi , 10
783.2986759
> trapeze2(f,2,3,0.0001);
Numar de pasi , 29
778.9246586
> g:=(x->exp(-x^2));
( −x 2 )
g := x → e
> evalf(int(g(x),x=0..1));
0.7468241330
> trapeze1(g,0,1,5);
0.7443683397
> trapeze1(g,0,1,50);
0.7467996064
> trapeze1(g,0,1,500);
0.7468238866
> trapeze2(g,0,1,0.01);
Numar de pasi , 3
0.7399864752
> trapeze2(g,0,1,0.001);
Numar de pasi , 10
0.7462107961
> trapeze2(g,0,1,0.0001);
Numar de pasi , 29
0.7467512252
> trapeze2(g,0,1,10^(-8));
Numar de pasi , 2887
0.7468241295
> with(student):
> trapezoid(g(x),x=-1..1,5);
2
4 − −1 + 2 i
2 ( -1 ) 2
5
+ ∑ e
e
5 5 i=1
222
Metode Numerice
> evalf(trapezoid(g(x),x=-1..1,5));
1.473924388
> trapezoid(g(x),x=-1..1,10);
2
9 − −1 + i
1 ( -1 ) 1
5
+ ∑ e
e
5 5 i=1
> evalf(trapezoid(g(x),x=-1..1,10));
1.488736679
Comanda trapezoid(g(x), x=a..b,n) din pachetul student întoarce aproximaţia
b
integralei ∫ g(x)dx obţinută prin aplicarea formulei trapezelor utilizând n
a
subintervale.
b 2n −2 x
Ţinând cont că ∫a f ( x )dx = ∑ ∫x i+2 f ( x )dx , obţinem următoarea formulă de
i=0 i
i par
223
Mădălina Roxana Buneci
b b−a n −1 n −1
∫a f ( x )dx ≈ ( ) ( ) ∑ ( 2i ) ∑ f ( x 2i−1 ) .
f a + f b + 2 f x + 4
6n i =1 i =1
Se poate arăta că restul (eroarea) este dat de:
b b−a n −1 n −1
∫a f ( x ) dx −
6n
f ( a ) + f ( b ) + 2 ∑ f ( x 2i ) + 4 ∑ f ( x 2i −1 )
≤
i=1 i=1
( b − a )5 sup f ( ) ( x ) .
4
4
2880n x∈[ a,b]
Fie f : [a, b] → R o funcţie de clasă C2. Considerăm o diviziune (x0, x1, ….,
b−a
x 2n ) a intervalului [a, b] cu puncte echidistante (xi = a + i, i = 0.. 2n).
n
2
Aplicând formula trapezelor:
b n
b − a f ( a ) + f ( b ) 2 −1
∫ f (x)dx ≈ 2n + ∑ f ( xi ) .
2 i=1
a
n
b − a f ( a ) + f ( b ) 2 −1
Dacă notăm ϕ(n) = + ∑ f ( x i ) , atunci eroarea cu care ϕ(n)
2n 2 i=1
b
aproximează ∫a f ( x )dx este dată de
b (b − a)
∫a f ( x ) dx − ϕ ( n ) ≤ h 2n sup f " ( x )
12 x∈[ a,b ]
b−a
unde hn = . Deci eroarea este de ordinul O( h 2n ). Se poate arăta că
n
2
224
Metode Numerice
b
ϕ(n) = ∫ f (x)dx + a2 h 2n + a4 h 4n + a6 h 6n + a8 h 8n +....
a
b
1 1 1 1
= ∫ f (x)dx + a2 h 2n + a4 h 4n + a6 h 6n + a8 h 8n +....
4 16 64 256
a
şi ca urmare
b
4ϕ ( n + 1) − ϕ ( n ) 1 5 21
= ∫ f (x)dx - a4 h 4n - a6 h 6n - a8 h 8n +....
3 4 16 64
a
4m I ( n, m − 1) − I ( n − 1, m − 1)
I(n,m) = , 1 ≤ m ≤ n.
4m − 1
Pentru calculul recursiv al valorilor I(n,m) se poate folosi tabelul
triunghiular:
I(0,0)
I(1,0) I(1,1)
I(2,0) I(2,1) I(2,2)
Prima coloană a acestui tabel poate fi calculată direct cu definiţia: I(n,0) =ϕ(n). În
cazul elementelor de pe celelalte coloane se observă că fiecare dintre ele depinde de
elementul din stânga de pe aceeaşi linie şi de pe linia de deasupra din stânga.
225
Mădălina Roxana Buneci
b−a
În situaţia în care h0 = b-a >1, alegem k astfel încât să fie suficient de
2k
mic (de exemplu mai mic decât 1) şi facem calculul recursiv al valorilor I(k+l,m)
folosind tabelul triunghiular:
I(k,0)
I(k+1,0) I(k+1,1)
I(k+2,0) I(k+2,1) I(k+2,2)
b
În final se ţine seama că I(k+n+j,n) este o aproximaţie bună a ∫ f (x)dx când j → ∞.
a
n +1
b − a f ( a ) + f ( b ) 2 −1
I(n+1,0) = ϕ(n+1) = + ∑ f ( a + ih n +1 )
2n +1 2 i=1
n
1 b − a f ( a ) + f ( b ) 2 −1
= + ∑ f ( a + (2i − 1)h n +1 ) + f ( a + (2i)h n +1 )
2 2n 2 i =1
n 2n −1
1 b − a f ( a ) + f ( b ) 2 −1
= + ∑ f ( a + ih n ) + ∑ f ( a + (2i − 1)h n +1 )
2 2n 2 i=1 i =1
2 −1 n
1
= I(n,0) + hn+1 ∑ f ( a + (2i − 1)h n +1 ) .
2 i =1
Astfel utilizând această formulă recursivă calculul lui I(n+1,0) necesită doar 2n – 1
evaluri ale lui f în loc de 2n+1 + 1 câte ar necesita dacă s-ar aplica definiţia.
226
Metode Numerice
b
unde Ai = ∫ ρ(x)li ( x ) dx pentru orice i. Dacă nu se impune nici o condiţie asupra
a
227
Mădălina Roxana Buneci
Formula generală de cuadratură fiind exactă pentru orice polinom de grad ≤ n avem
b b
∫ f (x)ρ(x)dx = ∫ ( p ( x ) q ( x ) + r ( x ) ) ρ(x)dx
a a
b b
= ∫ p ( x ) q ( x ) ρ(x)dx + ∫ r ( x ) ρ(x)dx
a a
b
= ∫ r ( x ) ρ(x)dx
a
n
= ∑ Ai r ( x i )
i =0
Teorema 8. (cuadratura Gauss) Fie ρ : [a, b]→R o pondere. Fie {xi}i cele
b
n+1 noduri ale polinomului qn+1 de grad n+1 cu prorietatea că ∫ q n +1 (x)x k ρ(x)dx =
a
b
= ∫ ρ(x)
( x − x 0 ) ( x − x1 ) .... ( x − x i−1 )( x − x i+1 ) ... ( x − x n )
dx .
a ( xi − x 0 ) ( x i − x1 ) .... ( x i − xi−1 )( x i − x i+1 ) ... ( x i − x n )
Atunci formula de cuadratură
228
Metode Numerice
b
∫ f (x)ρ(x)dx ≈ A0 f(x0) + A1 f(x1) + ... + Anf(xn)
a
f(
b 2n + 2 )
n (ξ) b 2
∫ f (x)ρ(x)dx − ∑ Ai f ( x i ) ≤ q ( x )ρ ( x ) dx
( 2n + 2 )! ∫a n +1
a i=0
n! d n
x − a ) ( x − b )
n n
Ln(x) = (
( 2n )! dx
n
( n!)4 ( b − a )2n +1 f ( 2n ) ( ξ )
ca noduri rădăcinile lui Ln este dat de .
3
( 2n ) ! ( 2n + 1)
1
2. Dacă ρ(x) = pe intervalul (-1,1), atunci polinomele qn care
1 − x2
satisfac condiţiile din teorema precedentă sunt polinoamele Cebîşev
de speţa I Tn. Polinoamele Cebîşev de prima speţă pot fi definite
recursiv prin : T0(x) = 1, T1(x) = x, Tn+2(x) = 2xTn+1(x) – Tn(x), n ≥ 0,
sau pot fi definite prin Tn(x) = cos(n arccos(x)). Rădăcinile
polinomului Cebîşev de grad n+1 sunt:
2i + 1
xi = cos π , 0 ≤ i ≤ n.
2n + 2
π
În acest caz Ai = pentru orice i = 0,..., n.
n +1
229
Mădălina Roxana Buneci
b ϕ (x) b
∫∫ f ( x, y ) dxdy = ∫a ∫ϕ12( x ) f ( x, y )dy dx = ∫a F ( x ) dx
D
230
Metode Numerice
ϕ (x)
unde F(x) = ∫ϕ12( x ) f ( x, y )dy . Considerăm o reţea de noduri (xi, yj), i = 0, 1, …, n şi
b
j = 0, 1, …, m. Aplicând integralei ∫a F ( x ) dx o formulă de cuadratură se obţine:
n
∫∫ f ( x, y ) dxdy ≈ ∑ Ai F ( x i )
D i =0
unde
ϕ (x )
F(xi) = ∫ϕ 2( x i) f ( x i , y )dy .
1 i
Y
d
yi+1
yi
c
a xi xi+1 b X
231
Mădălina Roxana Buneci
x
i +1 y x k
Iij = ∫ ∫
yj
j+1
x
(( )) (
f ( x, y ) dy dx ≈ ∫ i+1 f x, y j + f x, y j+1 ) dx
x i 2
i
k x x
( )
= ∫ i +1 f x, y j dx + ∫ i+1 f x, y j+1 dx
2 xi x
( )
i
kh
≈
22
(( ) ( ) (
f x,i y j + f x,i+1 y j + f x i , y j+1 + f x i +1, y j+1 ) ( ))
Astfel valoarea aproximativă a integralei
∫∫ f ( x, y ) dxdy =
D
n −1m −1 n −1m −1
=∑ ∑ Iij ≈ ∑
kh
∑ (( ) ( ) (
f x,i y j + f x,i +1 y j + f x i , y j+1 + f x i+1, y j+1 . ) ( ))
i =0 j=0 i =0 j=0 4
Presupunem că
b−a
xi = a + ih, i = 0, 1, …, 2n, h =
2n
d−c
yi = c + jk, j = 0, 1, …, 2m, k =
2m
Dacă pentru calculul integralei Iij cu i şi j pare se aplică formula Simpson repetată se
obţine
x
i+2 y
j+ 2
Iij = ∫ ∫y j f ( x, y ) dy dx
x
i
k
x
(( ) (
≈ ∫ i+ 2 f x, y j + 4f x, y j+1 + f x, y j+ 2 dx
x
i 6
) ( ))
k x x x
( ) ( )
= ∫ i + 2 f x, y j dx + 4 ∫ i + 2 f x, y j+1 dx + ∫ i + 2 f x, y j+ 2 dx
3 xi x x
( )
i i
232
Metode Numerice
hk
≈
9
( ) ( ) ( ) (
(f x i , y j + f x i + 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + )
+ 4 ( f ( x i +1, y j ) + f ( x i +1y j+1 ) + f ( x i+ 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) +
Notăm
hk
Fij =
9
( ) ( ) ( ) (
(f x i , y j + f x i+ 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + )
+ 4 ( f ( x i +1, y j ) + f ( x i+1y j+1 ) + f ( x i + 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) +
Atunci
n −1m −1 n −1m −1
∫∫ f ( x, y ) dxdy = ∑ ∑ I2i,2 j ≈ ∑ ∑ F2i,2 j
D i =0 j=0 i =0 j=0
233
Mădălina Roxana Buneci
f := ( x, y ) → x 7 ln( x + y ) + x y cos( x )
> evalf(int(int(f(x,y),y=1..3),x=2..3));
2418.125737
> evalf(dtrapeze(f,2,3,1,3,5,10));
2470.913760
> dtrapeze(f,2.,3.,1.,3.,5,10);
2470.913767
234
Metode Numerice
235
Mădălina Roxana Buneci
236
Metode Numerice
după apăsarea tastei ENTER. Dacă s-a utilizat : pentru încheierea comenzii,
comanda este executată fără a se afişa rezultatele, iar în cazul utilizării ; se afişează
şi rezultatele.
MAPLE dispune de peste 2000 de funcţii predefinite şi comenzi. Fiecare
comandă este introdusă, în zona input, în felul următor:
> nume_comanda(param1,param2,...);
Numele comenzilor a fost ales astfel încât pe de o parte să fie apropiat de
funcţionalitatea comenzii şi pe de altă parte să fie cât mai scurt posibil. MAPLE
este un mediu “case-sensitive” (se face distincţie între literele mari şi literele mici).
Cele mai multe comenzi încep cu literă mică şi au în corespondenţă o aceeaşi
comandă care începe cu literă mare. Aceasta din urmă poartă denumirea de
comandă inertă şi rolul ei este doar de afişare matematică a unei expresii. Cele mai
multe comenzi MAPLE necesită o listă de parametri la intrare. Această listă poate
conţine de exemplu, numere, expresii, mulţimi, etc., sau poate să nu conţină nici un
parametru. Indiferent de numărul de parametri specificaţi, ei trebuie incluşi între
paranteze rotunde (). Toate comenzile au număr minim de parametri de tip precizat,
de cele mai multe ori într-o ordine precizată. Multe comenzi pot fi utilizate cu un
număr de parametri mai mare strict decât acest număr minim de parametri. Aceşti
“extra” parametri reprezintă de obicei opţiuni de control al funcţionării comenzii
respective. Comenzile MAPLE pot fi folosite ca parametri. Acestea sunt evaluate şi
rezultatele lor sunt inserate în lista de parametri.
Comenzile MAPLE se pot clasifica în trei categorii:
1. Comenzi care se încarcă automat la deschiderea unei sesiuni
MAPLE. Acestea pot fi apelate direct aşa cum s-a precizat mai sus.
2. Comenzi din biblioteca extinsă. Înainte de a le folosi acestea trebuie
mai întâi încărcate în memorie cu ajutorul comenzii readlib sub forma
> readlib(nume_comanda);
3. Comenzi care aparţin unor pachete specializate. Există două
modalităţi de utilizare a acestor comenzi:
• prin specificarea pachetului sub forma:
> nume_pachet[nume_comanda](param1,param2,...);
237
Mădălina Roxana Buneci
238
Metode Numerice
Scădere - x-y
Opus - -x
Înmulţire * x*y
Împărţire / x/y
Ridicare la putere (xy) ** sau ^ x**y sau x^y
Tabelul precedent conţine operatorii aritmetici de bază din MAPLE.
Precedenţa operatorilor este aceeaşi ca în majoritatea limbajelor de programare. Mai
întâi sunt evaluate expresiile din paranteze. În lista următoare prioritatea cade de sus
în jos:
1. – (operator unar)
2. **, ^
3. *, /
4. +, -(scădere)
De remarcat faptul că exponenţierea succesivă nu e validă. Astfel MAPLE nu poate
evalua x^y^z. O expresie de acest fel trebuie introdusă sub forma x^(y^z). Ori de
câte ori există ambiguităţi trebuie utilizate ( ).
Următorul tabel prezintă funcţiile de bază din MAPLE ce pot interveni în
expresiile aritmetice.
Notaţie MAPLE Semnificaţie
abs(x) |x| (modulul)
iquo(x,y) partea întreagă a împărţirii x/y
irem(x,y) restul împărţirii lui x la y
trunc(x) cel mai mare număr întreg ≤ x,
dacă x ≥ 0, sau cel mai mic
număr întreg ≥ x, dacă x < 0
frac(x) x-trunc(x)
round(x) rotunjeşte pe x la cel mai
apropiat întreg
floor(x) cel mai mare număr întreg ≤ x
ceil(x) cel mai mic număr întreg ≥ x
239
Mădălina Roxana Buneci
240
Metode Numerice
-7
> iquo(-29,-4);
7
Funcţiile rem şi quo se aplică polinoamelor şi reprezintă analoagele
funcţiilor irem şi iquo. Acestea cer obligatoriu al treilea parametru ce indică
nedeterminata în raport cu care se consideră polinomul. Opţional admit al patrulea
parametru, cu acelaşi rol ca parametru 3 din funcţiile irem şi iquo. Asfel dacă a şi b
sunt două polinoame, b este nenul, r restul returnat de rem şi q este câtul returnat de
quo, atunci este satisfăcută relaţia:
a = b*q + r, grad(r) < grad(n)
Exemple:
> rem(x^5+2*x+1, x^2+x+1, x, 'q');
x
> q;
x3 − x2 + 1
> quo(x^5+2*x+1, x^2+x+1, x);
x3 − x2 + 1
> quo(x^5+2*y+z, x^2+x+1, x,'r');
x3 − x2 + 1
> r;
2y+z−1−x
Funcţia factorial(k) calculează k! (k factorial, 12…k). Acelaşi efect în are şi k!,
după cum rezultă din exemplele de mai jos:
> factorial(4);
24
> 4!;
24
> 6!;
720
> factorial(factorial(3))=3!!;
720 = 720
Tabelul de mai jos conţine câteva constante MAPLE:
Constantă Notaţia matematică
241
Mădălina Roxana Buneci
Pi π
infinity ∞
gamma constanta lui Euler
true adevăr, în cazul evaluării booleene
false fals, în cazul evaluării booleene
242
Metode Numerice
1, 2 , 3, 4 , 5
> a=1,b=a+2,c+2;
a = 1, b = a + 2 , c + 2
Alternativ, există alte două moduri de a crea secvenţe de instrucţiuni în
MAPLE: cu ajutorul operatorului $ sau cu ajutorul comenzii seq. Următoarele
exemple sunt edificatoare:
> a$5;
a, a , a, a , a
> $2..7;
2, 3 , 4, 5, 6 , 7
> i^2$i=1..4;
1, 4, 9, 16
> seq(i!,i=1..4);
1, 2, 6, 24
> seq(i!!,i=1..4);
1, 2, 720, 620448401733239439360000
243
Mădălina Roxana Buneci
> 123;
123
> -6789;
-6789
> 123456789123456789012;
123456789123456789012
Constantele raţionale utilizează operatorul de împărţire / pentru a separa
numărătorul de numitor. Astfel m/n cu m şi n constante întregi reprezintă numărul
m
raţional .
n
244
Metode Numerice
0.67896 10 -6
> .1234;
0.1234
> 123E56;
0.123 10 59
> 1.;
1.
0.123 10 59
Expresiile aritmetice cu operanzi constante întregi sau raţionale sunt evaluate exact
în MAPLE (rezultatul este o constantă raţională sau o constantă întreagă).
Exemple:
> 1/3+4/5;
17
15
> 1/3+8;
25
3
> 1/3+2/3;
1
245
Mădălina Roxana Buneci
246
Metode Numerice
evalf(expresie,n)
determină evaluarea expresiei la o valoare în virgulă mobilă, utilizând n de cifre
semnificative (valoarea variabilei Digits nu este afectată).
Exemple:
> evalf(1/7);
0.1428571429
> evalf(1/7,20);
0.14285714285714285714
> evalf(Pi);
3.141592654
> evalf(Pi,30);
3.14159265358979323846264338328
Există o întreagă familie de funcţii de evaluare numerică şi algebrică a expresiilor:
• eval – evaluează în întregime o expresie
• evala– evaluează algebric o expresie
• evalf– evaluează numeric o expresie
• evalb– evaluează boolean o expresie
• evalm– evaluează matriceal o expresie
• evalc– evaluează în mulţimea numerelor complexe o expresie
În MAPLE un şir de caractere (string) constă dintr-o succesiune de
caractere cuprinse între apostrofuri întoarse (backquote) (`) sau între ghilimele (“).
Operatorul de concatenare pentru şirurile de caractere în MAPLE este || (de
asemenea se poate utiliza comanda cat).
Exemple:
> `Acesta este un string in MAPLE`;
Acesta este un string in MAPLE
> `1+2=?`;
1+2=?
> `acesta este`||` un string`;
acesta este un string
Un identificator în MAPLE este un şir de caractere alfabetice (A-Z, a-z),
cifre (0-9) şi caracterul _ (liniuţa de subliniere, underline), şir în care primul
247
Mădălina Roxana Buneci
caracter este un caracter alfabetic (A-Z, a-z). Lungimea maximă a unui identificator
este dependentă de sistem . MAPLE este case-sensitive, ceea ce însemnă că
identificatorul nume este diferit de identificatorul Nume. MAPLE conţine un număr
de identificatori predefiniţi (identificatori rezervaţi). O listă a acestora poate fi
obţinută cu comanda
> ?ininame
sau
> help(`ininame`);
248
Metode Numerice
Exemple:
> diff(sin(x),x);
cos( x )
> diff(cox(x),y);
0
> diff(x*sin(cos(x)),x);
sin( cos( x ) ) − x cos( cos( x ) ) sin( x )
> diff(ln(x),x);
1
x
> Diff(ln(x),x);
d
ln( x )
dx
> Diff(ln(x),x) = diff(ln(x),x);
d 1
ln( x ) =
dx x
> Diff(sin(x)*tan(y),x,y)= diff(sin(x)*tan(y),x,y);
∂2
( sin( x ) tan( y ) ) = cos( x ) ( 1 + tan( y ) 2 )
∂y ∂ x
> int( sin(x), x );
−cos( x )
> Int( sin(x), x );
⌠
sin( x ) dx
⌡
> int( sin(x), x=0..Pi );
2
> Int( x^2*ln(x), x=1..3 )=int( x^2*ln(x), x=1..3 );
3
⌠ x 2 ln( x ) dx = 9 ln( 3 ) − 26
9
⌡1
249
Mădălina Roxana Buneci
∞ ∞
⌠ ⌠ ( −x 2 − y 2 ) π
e dx d y =
4
⌡0 ⌡0
> sum(k^2,k=1..4);
30
> Sum(k^2,k=1..4);
4
∑ k2
k=1
> Sum(k^2,k=1..n)=sum(k^2,k=1..n);
n
( n + 1 )3 ( n + 1 )2 n 1
∑ k2 =
3
−
2
+ +
6 6
k=1
> sum(1/k^2,k=1..infinity);
π2
6
> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);
∞
1
∑ k!
=e
k=0
lim e x = ∞
x→∞
lim ex = 0
x → ( −∞ )
250
Metode Numerice
X 8 − 2 X 4 Y 4 + Y8
> factor(X^6-Y^6);
( X − Y ) ( X + Y ) ( X 2 + X Y + Y2 ) ( X 2 − X Y + Y2 )
> simplify((X^6-Y^6)/(X^2+X*Y+Y^2));
X 4 − Y X 3 + Y3 X − Y4
251
Mădălina Roxana Buneci
252
Metode Numerice
>plot([sin(t),cos(t),t=0..2*Pi],title=`cerc`,color=black);
253
Mădălina Roxana Buneci
>plot(sin(x)/x, x=-3*Pi..3*Pi,discont=true,color=black);
254
Metode Numerice
Exemple
>plot3d(cos(x)*sin(y),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi);
>plot3d([v*cos(u),v*sin(u),v*ln(u)],u=Pi..4*Pi,v=0..1);
255
Mădălina Roxana Buneci
256
Metode Numerice
257
Mădălina Roxana Buneci
uv+u+v
> expr;
cos( u v )
uv+ 2
( −u )
e
Definirea unei legături fucţionale în MAPLE se face sub forma
>nume_functie: (lista variabile) -> expresie;
Comanda
>nume_functie(lista argumente curente);
întoarce valoarea funcţiei nume_funcţie pentru argumentele precizate.
Operatorii pentru adunarea, înmulţirea, compunerea funcţiilor sunt +, *, respectiv,
@.
Operatorul pentru compunere repetată este @@. Astfel dacă f este o funcţie şi n un
număr natural, atunci
• dacă n > 0, f @@ n reprezintă compunerea de n ori a funcţiei f cu ea
însăşi.
• dacă n = 0, f @@ 0 reprezintă funcţia identică
• dacă n < 0 şi f este inversabilă, atunci f @@ n reprezintă
compunerea de -n ori a inversei funcţiei f cu ea însăşi (inversa
funcţie este dată de invfunc[f]).
Comanda
>unapply(expr, x);
întoarce funcţia x -> expr, iar comanda
>unapply(expr, x, y, ...);
întoarce funcţia (x,y, ...) -> expr
Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
2
( 1 /3 ) ( −x )
f := x → x3 + cos( x ) x +e
> nops(f);
1
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
258
Metode Numerice
2 2
( −x − y )
g := ( x, y ) → x2 e + cos( x ) sin( y )
> nops(g);
1
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) → sin( u ) cos( w ) v + u
> f(1);
( -1 )
1 + cos( 1 ) + e
> f(1.);
1.908181747
> evalf(f(1));
1.908181747
> evalf(f(1),50);
1.9081817470395820389964603776044374711781215516497
> f(alpha);
2
( 1 /3 ) ( −α )
α3 + cos( α ) α +e
> g(Pi/2,3);
π2
− − 9
1 2 4
π e
4
> evalf(g(Pi/2,3));
0.00002582324018
> g(2,3);
( -13 )
4e + cos( 2 ) sin( 3 )
> g(2,3.);
259
Mădălina Roxana Buneci
3 2 π
+
2 3
> evalf(h(Pi/3,2,Pi/4));
2.271942423
> h(alpha,beta,gamma);
sin( α ) cos( γ ) β + α
> h(alpha,3,Pi/4);
3
sin( α ) 2 + α
2
> expresie:=u*v^2+cos(Pi/u*v)/u^(1/2);
πv
cos
2 u
expresie := u v +
u
> f1:=unapply(expresie,u);
πv
cos
f1 := u → u v2 + u
u
> f1(1);
v 2 + cos( π v )
> f2:=unapply(expresie,u,v);
πv
cos
2 u
f2 := ( u, v ) → u v +
u
> f2(1,2/3);
-1
18
> f2(alpha, 2);
2π
cos
4α+ α
α
> f3:=unapply(expresie,v);
πv
cos
f3 := v → u v2 + u
u
> f3(1);
260
Metode Numerice
π
cos
u+ u
u
A.6.2. Liste
Listele (lists) în MAPLE sunt şiruri ordonate de expresii, separate între ele
prin virgulă şi incluse între paranteze drepte []. Ordinea expresiilor este dată de
poziţia în care apar în listă. Dacă L este o listă L[i] desemnează elementul de pe
poziţia i. Lista vidă este desemnată prin []. Se pot efectua următoarele operaţii cu
liste:
• extragerea din lista L a elementelor de poziţia i până la poziţia j: L(i..j)
sau op(i..j,L).;
• adăugarea unui element x la lista L: [x,op(L)] (adaugă elementul pe
prima poziţie), [op(L),x] (adaugă elementul pe ultima poziţie);
• modificarea elementului de pe poziţia i: subsop(i=x,L) sau L[i]:=x;
• eliminarea elementului de pe poziţia i: subsop(i=NULL,L);
Exemple:
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> nops(L);
8
> L[2];
-1
> op(2,L);
-1
> op(3..6,L);
1, 2, 3, -1
> L[3..6];
[ 1, 2, 3, -1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
261
Mădălina Roxana Buneci
> L1:=[5,op(L)];
L1 := [ 5, 1, -1, 1, 2, 3, -1, 1, 1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L2:=[op(L),5];
L2 := [ 1, -1, 1, 2, 3, -1, 1, 1, 5 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L[3]:=8;
L3 := 8
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> subsop(4=10,L);
[ 1, -1, 8, 10, 3, -1, 1, 1 ]
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> L3:=subsop(6=NULL,L);
L3 := [ 1, -1, 8, 2, 3, 1, 1 ]
> L3;
[ 1, -1, 8, 2, 3, 1, 1 ]
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> op(-3,L);
-1
A.6.3. Mulţimi
262
Metode Numerice
263
Mădălina Roxana Buneci
A.6.4. Tablouri
> v[2]:=3;
v2 := 3
> evalm(v);
[ v1, 3, v3, v4 ]
> A := array(1..2,1..2);
A := array( 1 .. 2, 1 .. 2, [ ] )
> A[1,2] := x;
A1, 2 := x
> A[1,1];
A1 , 1
> A[1,2];
x
264
Metode Numerice
> evalm(A);
A1, 1 x
A A2, 2
2, 1
> A := array(1..2,1..2, [ [1,x], [x,x^2] ] );
1 x
A :=
x
x 2
> M:=matrix(3,2,[[1,2],[3,4],[5,6]]);
1 2
M := 3 4
5 6
> M[1,2];
2
Pachetul linalg conţine comenzi pentru operaţii cu vectori şi matrice.
265
Mădălina Roxana Buneci
Comanda
> map(fcn, expr, arg2, arg3, ..., argn);
aplică o funcţie sau o procedură fiecărui operand al unei expresii. Se înlocuieşte
fiecare operand i al expresiei expr cu fcn(operand_i, arg2, ..., argn).
Comanda
> map2(fcn, arg1, expr, arg3, ..., argn);
este similară comenzii map, cu deosebirea că se înlocuieşte operandul i al expresiei
expr cu fcn(arg1, operand_i, arg3, ..., argn).
Comanda
> applyop(f, i, expr, arg2, arg3, ..., argn);
înlocuieşte operandul desemnat de i (dacă i > 0, se înlocuieşte cel de al i-lea
operand iar dacă i < 0, se înlocuieşte cel de al nops(expr) +i +1 operand) al
expresiei expr cu f(operand_i, arg2, ..., argn) (f este o funcţie).
Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
2
( 1 /3 ) ( −x )
f := x → x 3 + cos( x ) x +e
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
2 2
( −x − y )
g := ( x, y ) → x2 e + cos( x ) sin( y )
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) → sin( u ) cos( w ) v + u
> with(linalg):
> x:=vector(3,[1,-1,0]);
x := [ 1, -1, 0 ]
> map(f,x);
( -1 ) ( 1/ 3 ) ( -1 )
[ 1 + cos( 1 ) + e , −1 + cos( 1 ) ( -1 ) +e , 1]
> map(g,x,Pi/3);
−1 − π2 2
−1 − π
1
1 3
e 9
+ cos( 1 ) 3 , e
9
+ cos( 1 ) 3 ,
2 2 2
> map(h,x,2,Pi/2);
[ 1, -1, 0 ]
> map(h,x,2,Pi/4);
266
Metode Numerice
[ sin( 1 ) 2 + 1, −sin( 1 ) 2 − 1, 0 ]
> M:={Pi,-Pi,Pi/2,-Pi/2};
π π
M := { π, , −π, − }
2 2
> map(h,M,3,Pi/3);
3 π 3 π
{ π, − − , + , −π }
2 2 2 2
> map2(g,Pi/3, x);
π2 2
−1 − π
π2
1 2 −1 − 9 1 1 2
1
1 2 − 9
π e + sin( 1 ), π e
9
− sin( 1 ), π e
9 2 9 2 9
> map2(h,2, x,Pi/2);
[ 2, 2 , 2 ]
> map(h,2, x,Pi/4);
1
sin( 2 ) 2 x + 2
2
> M:={Pi,-Pi,Pi/2,-Pi/2};
π π
M := { π, , −π, − }
2 2
> map(h,3,M,Pi/3);
1 π π
sin( 3 ) { π, , −π, − } + 3
2 2 2
> expr:=u*v+cos(u*v)/exp(-u^2);
cos( u v )
expr := u v + 2
( −u )
e
> applyop(f,1,expr);
2 2
( 1/3 ) ( −u v ) cos( u v )
u 3 v3 + cos( u v ) ( u v ) +e + 2
( −u )
e
> applyop(g,1,expr,Pi/3);
2 2 π2
−u v −
9 1 cos( u v )
u 2 v2 e + cos( u v ) 3 +
2 2
( −u )
e
> applyop(g,2,expr,0);
267
Mădălina Roxana Buneci
2
− cos ( u v )
2
( −u )
2
e
cos( u v ) 2 e
uv+ 2
2
( −u )
(e )
> applyop(h,1,expr,0, Pi/2);
cos( u v )
uv+ 2
( −u )
e
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> op(1,L);
1
> applyop(f,1,L);
( -1 )
[ 1 + cos( 1 ) + e , -1, 1, 2, 3, -1, 1, 1 ]
> op(3,L);
1
> applyop(f,3,L);
( -1 )
[ 1, -1, 1 + cos( 1 ) + e , 2, 3, -1, 1, 1 ]
> applyop(g,3,L, Pi/2);
2
−1 − π
1, -1, e 4
+ cos( 1 ), 2, 3, -1, 1, 1
> applyop(g,3,L, Pi);
2
( −1 − π )
[ 1, -1, e , 2, 3, -1, 1, 1 ]
> applyop(h,3,L, 2,Pi/3);
[ 1, -1, sin( 1 ) + 1, 2, 3, -1, 1, 1 ]
> applyop(h,3,L, 2,Pi/2);
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> applyop(h,-1,L, 2,Pi/3);
[ 1, -1, 1, 2, 3, -1, 1, sin( 1 ) + 1 ]
268
Metode Numerice
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ă.
Da Nu
condiţie
Instrucţiuni1 Instrucţiuni2
Condiţia este o expresie logică (formată cu operatori logici sau relaţionali). Modul
de execuţie al deciziei (precum rezultă din subschema logică de mai sus) este
următorul:
1. se evaluează condiţia
2. dacă rezultatul este adevărat se execută instrucţiuni1, în caz contrar se
execută instrucţiuni2.
3. se trece la comanda care urmează după decizie
În cazul în care else lipseşte se foloseşte forma simplificată:
269
Mădălina Roxana Buneci
Da
condiţie
Nu
instrucţiuni
1. se evaluează condiţia
2. dacă rezultatul este adevărat se execută instrucţiuni
3. se trece la comanda care urmează după decizie
Un extra element elif (ţinând loc de else+if) poate fi adăugat în decizie, obţinând:
if/then/elif/then…/else/fi
Exemple:
> a := 3; b := 7;
a := 3
b := 7
> if (a > b) then a else b fi;
7
> if (a > b) then c:=7 fi;
> c;
c
> if (a > b) then c:=7 elif (a<b) then c:=9 fi;
c := 9
Există două instrucţiuni repetitive în MAPLE: for şi while. For are mai
multe forme:
(1) for i from ei by p to ef do instrucţiuni od;
for i from ei by p to ef do instrucţiuni end do;
unde i este variabila de contorizare, p este pasul cu care se face incrementarea
(decrementarea), iar ei (respectiv ef ) este o expresie care determină valoarea
270
Metode Numerice
i := ei
Da
i ≤ ef instrucţiuni i: = i + p
Nu
i := ei
Da
i ≥ ef instrucţiuni i: = i + p
Nu
271
Mădălina Roxana Buneci
i := ei
Da
condiţie instrucţiuni i: = i + p
Nu
272
Metode Numerice
În cazul următoarei instrucţiuni for contorul i parcurge toate elementele unei liste
sau unei mulţimi (expr):
(4) for i in expr while condiţie do instrucţiuni od;
for i in expr while condiţie do instrucţiuni end do;
Exemple:
> for i from 6 by 2 to 10 do print(i) od;
6
8
10
> suma := 0;
suma := 0
> for i from 11 by 2 while i < 15 do suma := suma + i od;
suma := 11
suma := 24
> L:=[1,5,3];
L := [ 1, 5, 3 ]
> suma:=0;
suma := 0
> for z in L do suma:=suma+z od;
suma := 1
suma := 6
suma := 9
Ciclu cu test iniţial are forma:
while condiţie do instrucţiuni od;
while condiţie do instrucţiuni end do;
Testul pentru repetarea calculelor se face înaintea execuţiei grupului de comenzi
care trebuie repetate. Dacă este îndeplinită condiţia, se execută instrucţiunile după
care se reevaluează condiţia. În caz contrar, se trece la comanda care urmează după
ciclul cu test iniţial. Subschema logică echivalentă este următoarea:
273
Mădălina Roxana Buneci
Da
condiţie instrucţiuni
Nu
274
Metode Numerice
275
Mădălina Roxana Buneci
Exemplu:
Să presupunem că se dă un număr întreg pozitiv x, şi se cere lista cifrelor
corespunzând reprezentării binare a lui x. Procedura următoare rezolvă această
problemă.
> lbinar:=proc(x)
local y,L;
y:=x; L:=[];
while y>0 do
L:=[irem(y,2,'c'),op(L)];y:=c;
od;
RETURN(L)
end;
> lbinar(27);
[ 1, 1, 0 , 1, 1 ]
> lbinar(32);
[ 1, 0, 0 , 0 , 0, 0 ]
Procedura lbinarfr de mai jos întoarce lista primelor n cifre ale reprezentării
binare a unui număr x, cu proprietatea 0≤x<1.
> lbinarfr:=proc(x,n)
local y,i,L;
y:=x;L:=[];
for i from 1 to n do y:=y*2;
L:=[op(L),floor(y)];y:=frac(y)od;
RETURN(L)
end;
> lbinarfr(0.15,10);
[ 0, 0 , 1, 0, 0, 1, 1 , 0, 0 , 1 ]
Procedura lbin întoarce lista cifrelor binare corespunzătoare unui număr real
x. Pentru partea fracţionară a numărului se reţin n cifre. Procedura lbin apelează
procedurile precedente.
> lbin:=proc(x,n)
local y,L1,L2,L;
y:=abs(x);
276
Metode Numerice
L1:=lbinar(floor(y));
L2:=lbinarfr(frac(y),n);
L:=[L1,L2];
RETURN(L)
end;
> lbin(23.15,10);
[ [ 1, 0, 1, 1, 1 ], [ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1 ] ]
277
Mădălina Roxana Buneci
278
Metode Numerice
BIBLIOGRAFIE
279
Mădălina Roxana Buneci
280
Metode Numerice
INDEX
281
Mădălina Roxana Buneci
282
Metode Numerice
normă, 53 precizie, 36
283
Mădălina Roxana Buneci
284