Metode Numerice
Metode Numerice
∑a x
j =1
ij j = bi , i = 1, 2,..n (1.2)
Vom numi matrice superior triunghiulara o matrice care are toate elementele
de sub diagonala principala nule, deci avand urmatoarea proprietate:
⎪⎧aij = 0, pentru i > j
⎨ ; i, j = 1, 2,..n (1.6)
⎪⎩aij ≠ 0, pentru i ≤ j
si urmatoarea forma
⎛ a11 a12 … a1n ⎞
⎜ ⎟
⎜ 0 a22 ... a2 n ⎟
A=⎜ ⎟ (1.7)
⎜ ⎟
⎜ 0 0 ann ⎟
⎜ ⎟
⎝ ⎠
Un sistem caracterizat de o matrice a coeficientilor superior triunghiulara este
rezolvabil usor prin procedeul denumit substitutie inversa. Denumirea este data de
faptul ca se incepe de la ultima ecuatie si se calculeaza pe rand substituind variabilele
deja calculate catre primele ecuatii.
Intr-adevar, din ultima ecuatie, avand in vedere ca toti coeficientii primelor
n − 1 variabile sunt nuli, rezulta:
b
xn = n (1.8)
ann
In penultima ecuatie, numai ultimele doua necunoscute au coeficienti nenuli.
Dar deoarece xn este deja cunoscut, se poate determina xn −1 :
b −a x
xn −1 = n −1 n −1,n n (1.9)
an −1, n −1
Continuind in acest mod, pentru ecuatia i , coeficientii primelor i − 1
necunoscute sunt nuli iar necunoscutele xi +1 , xi + 2 ,..., xn au fost deja determinate.
Ecuatia se scrie deci
aii xi + ai ,i +1 xi +1 + ... + ain xn = bi (1.10)
de unde se obtine necunoscuta xi :
n
bi − ∑a x
j = i +1
ij j
xi = (1.11)
aii
Procedeul se va repeta pana la obtinerea tuturor necunoscutelor folosind
formula generala (1.11).
1H
sistemului:
1. Inmultirea unei ecuatii cu o constanta, echivalenta cu inmultirea unei linii din
matricea coeficientilor si a elementului corespunzator din matricea termenilor
liberi cu constanta respectiva.
2. Adunarea sau scaderea a doua ecuatii, echivalenta cu adunarea sau scaderea a
doua linii din matricea coeficientilor si a elementelor corespunzatoare din
matricea termenilor liberi.
3. Schimbarea ordinii de sumare in membrul stang (echivalenta cu permutarea a
doua coloane din matricea coeficientilor ) sau a ordinii ecuatiilor (echivalenta
cu permutarea a doua linii din matricea coeficientilor si a elementelor
corespunzatoare din matricea termenilor liberi ).
Transformarile de acest tip se fac de regula in scopul obtinerii de elemente nule
sub diagonala principala, astfel ca matricea sa devina inferior triunghiulara iar
sistemul sa fie rezolvat apoi prin substitutie inversa.
Sa consideram ca, folosind transformari de tipul celor mentionate, dorim sa facem
0 toate elementele de sub diagonala din prima coloana. Pentru aceasta, va trebui sa
inmultim prima linie cu o constanta corespunzatoare m2 si sa o scadem din a doua,
apoi sa inmultim prima linie cu o alta constanta m3 si sa o scadem din a treia, s.a.m.d.
Pentru anularea elementului de pe prima coloana din lina i , va trebui satisfacuta
conditia:
ai1 − a11mi = 0 (1.12)
de unde rezulta constanta cu care trebuie inmultita prima linie pentru anularea
elementului din prima coloana a liniei i :
a
mi = 1i (1.13)
a11
Elementul a11 folosit pentru determinarea constantei de multiplicare a primei
linii il vom numi in continuare element pivot, desi denumirea nu este in intregime
corecta, dupa cum se va vedea mai tarziu.
Facand operatia:
aij' = aij − a1 j mi ; i = 2,3..., n; j = 1, 2..., n
pentru liniile 2,3,..., n si coloanele 1, 2,..., n , se va obtine o matrice echivalenta, dar
cu elementele aflate in prima coloana sub diagonala nule. Prima coloana a unei
matrici superior triunghiulare a fost formata.
⎛ a11 a12 … a1n ⎞
⎜ ' ' ⎟
⎜ 0 a22 ... a2 n ⎟
⎜ 0 a ' ... a ' ⎟
⎜ 32 3n
⎟
A=⎜ ⎟ (1.14)
⎜ ' ' ⎟
⎜ 0 an 2 ann ⎟
⎜ ⎟
⎜ ⎟
⎜ ⎟
⎝ ⎠
In continuare, pentru a forma a doua coloana, trebuiesc anulate elementele
a32 , a42 ,..., an' 2 . Aceasta se va face in mod similar, dar folosindu-se ca pivot elementul
' '
'
de pe diagonala celei de a doua linii, a22 . Conditia de anulare a unui element din linia
i a celei de a doua coloane este:
ai' 2 − a22
'
mi = 0 (1.15)
For@j = k, j ≤ n + 1, j++,
a@@i, jDD = a@@i, jDD − m a@@k, jDD; H∗ Noile elemente din linia k ∗L
D;
E;
E;
Print@x@@jDD D;
E H∗ Afisarea solutiilor ∗L
ai = 880, 1, 0, 4<, 82, 3, 0, −3<, 85, 0, 2, −5<, 81, 0, 0, 3<<; H∗ Matricea sistemului ∗L
b = 82, −1, 1, 3<; H∗ Matricea termenilor liberi ∗L
n = Length@bD; H∗Dimensiunea matricii ∗L
a = Table@0, 8n<, 8n + 1<D;
x = Table@0, 8n<D;
H∗ Formarea directa a matricii extinse ∗L
For@i = 1, i ≤ n, i++, a@@iDD = Flatten@Join@ai@@iDD, 8b@@iDD<DD D;
Print@MatrixForm@aDD;
ForAk = 1, k ≤ n − 1, k++,
H∗ Pivotare partiala Hintre liniiL, cautare element maxim din coloana ∗L
For@r = k + 1, r <= n, r++, If@a@@k, kDD < a@@r, kDD, a@@8k, r<DD = a@@8r, k<DD; D;D;
ForAi = k + 1, i ≤ n, i++,
a@@i, kDD
; H∗ Constanta pentru linia k ∗L
a@@k, kDD
m=
For@j = k, j ≤ n + 1, j++,
a@@i, jDD = a@@i, jDD − m a@@k, jDD; H∗ Noile elemente din linia k ∗L
D;
E;
E;
Print@MatrixForm@aDD; H∗ Matricea extinsa, superior triunghiulara∗L
H∗ Rezolvarea prin substitutie inversa ∗L
a@@n, n + 1DD
x@@nDD =
a@@n, nDD
ForAj = n − 1, j ≥ 1, j−−,
a@@j, n + 1DD − ⁄kn=j+1 a@@j, kDD x@@kDD
x@@jDD =
a@@j, jDD
;
Print@x@@jDD D;
E H∗ Afisarea solutiilor ∗L
ai.x H∗ Verificarea solutiilor ∗L
b
Din aceste considerente, de cele mai multe ori programele care folosesc
metoda Gauss se completeaza cu instructiuni care fac alegerea cea mai buna a
pivotului inainte de prelucrarea fiecarei coloane, folosind posibilitatea de permutare a
liniilor si coloanelor matricii (extinse), procedeu denumit in general pivotare. Prin
permutare intre coloane si/sau linii se aduce in pozitia de pivot elementul cel mai
mare in valoare absoluta din restul liniei si/sau coloanei repective. In acest mod,
impartirea (1.19) se va face cu erorile de rotunjire cele mai mici posibile.
4H
Daca pivotarea se face numai intre linii sau numai intre coloane, avem o
pivotare partiala, iar daca se folosesc si pivotari de linii si de coloane avem pivotare
totala. Programul 1.2 este realizat prin completarea programului 1.1 cu unele
instructiuni de pivotare partiala si pot rezolva sisteme care nu ar putea fi rezolvate de
acesta, de exemplu daca primul element al primei linii este 0.
Se observa ca in linia referitoare la pivotare s-a folosit sintaxa specifica
programului Mathematica pentru inversarea a doua elemente dintr-o lista
{x, y} = {y, x}
Aceasta este echivalenta cu secventa
t = a@@kDD; a@@kDD = a@@rDD; a@@rDD = t
in care a[[ k ]] desemneaza toate elementele liniei k.
Evident, intr-un limbaj obisnuit de programare (de exemplu C++) care nu
poate lucra simultan cu toate elementele unei linii se va folosi secventa mai detaliata:
For@s = 1, s ≤ n + 1, s++, t = a@@k, sDD; a@@k, sDD = a@@r, sDD; a@@r, sDD = tD
Print@ MatrixForm@aDD;
For@s = 1, s ≤ n, s++,
If@s ≠ i, a@@sDD = a@@sDD − a@@iDD a@@s, iDDD;
D;E;
Print@ MatrixForm@aDD;
Print@"Det@aD=", dD
x = Table@a@@j, n + 1DD, 8j, n<D;
Print@"x=", MatrixForm@xDD;
Ai = Table@a@@i, jDD, 8i, n<, 8j, n + 2, 2 n + 1<D;
PrintA"A−1=", MatrixForm@ AiDE;
Aceste transformari trebuiesc facute in asa fel incat sa se obtina elemente nule
atat dedesubtul cat si deasupra diagonalei. In plus, fiecare element pivot trebuie sa se
imparta la el insusi pentru ca in final sa se obtina numai valori 1 pe diagonala
primelor n coloane.
De mentionat ca se poate obtine chiar si determinantul matricei coeficientilor
prin inmultirea elementelor matricii diagonalizate (inainte de a fi facute 1) si tinand
seama ca fiecare permutare schimba semnul determinantului.
Practic, mai intai se imparte fiecare linie cu elementul sau de diagonala, astfel
ca el sa devina 1. In continuare, relatiile care vor alcatui algoritmul sunt aceleasi ca si
la metoda Gauss, doar ca se aplica la fiecare linie atat pentru liniile de dedesubtul ei
cat si pentru cele de deasupra, ceea ce face ca limitele de variatie ale indicilor sa se
modifice:
a'
mi = ik' ; k = 1, 2, n; k ≠ i (1.26)
akk
aij'' = aij' − akj' mi ; i = 1, 2,..., n; k = 1, 2..., n; k ≠ i; j = 1, 2..., 2n + 1 (1.27)
Un exemplu de implementare a acestui algoritm este ilustrat de programul 1.3.
S-a facut o mica simplificare fata de programele anterioare folosind posibilitatea
mediului Mathematica de a opera cu o intreaga linie a unei matrici, astfel ca se poate
elimina bucla care opereaza succesiv asupra elementelor unei linii. Astfel, a[[i,j]]
reprezinta elementul din linia i si coloana j, iar a[[i]] reprezinta intreaga linie i.
Programul furnizeaza matricea solutiilor, matricea inversa si valoarea determinantului
matricii coeficientilor.
n
aij = ∑ lik ukj ; i, j = 1, 2,..., n (1.31)
k =1
si tinand cont de proprietatile (1.30), rezulta relatiile:
7H
j j −1
aij = ∑ lik ukj = ∑ lik ukj + lij u jj ; i, j = 1, 2,..., n (1.32)
k =1 k =1
i i −1
aij = ∑ lik ukj = ∑ lik ukj + uij ; i, j = 1, 2,..., n (1.33)
k =1 k =1
In prima relatie s-a tinut cont ca primul indice al lui ukj , care este chiar indice
de sumare, poate fi doar mai mic sau egal cu al doilea. In a doua relatie s-a tinut cont
ca al doilea indice al lui lik , care este chiar indice de sumare, poate fi doar mai mic
sau egal cu primul si in plus lii = 1 .
Rezulta urmatoarele relatii care permit determinarea succesiva a tuturor
elementelor matricilor L si U:
j −1
aij − ∑ lik ukj
lij = k =1
; i, j = 1, 2,..., n (1.34)
u jj
i −1
uij = aij − ∑ lik ukj ; i, j = 1, 2,..., n (1.35)
k =1
Astfel, pentru i = 1 se obtin:
l11 = 1; u11 = a11
u12 = a12
(1.36)
.............
u1n = a1n
Pentru i = 2 obtinem:
a21
l21 = ; u22 = a22 − l21u12
u11
l22 = 1; u23 = a22 − l21u12 (1.37)
.............
u2 n = a2 n − l21u1n
Pentru i = 3 obtinem:
a
l31 = 31 ; u33 = a33 − l31u13 − l32u23
u11
a32 − l11u12
l22 = ; u34 = a34 − l31u13 − l32u24
u22
l33 = 1; (1.38)
.............
u3n = a3n − l31u1n − l32u2 n
Se continua astfel pana la n si se poate observa ca elementele necesare intr-o
etapa sunt deja cunoscute dintr-o etapa anterioara, astfel ca se pot determina toate
elementele celor doua matrici.
Programul 1.4 Rezolvarea sistemului prin factorizare Doolittle
dim = 10;
A = Table@ Random@ Real, 10D, 8dim<, 8dim<D; H∗ Numere aleatoare intre 1 si 10∗L
B = Table@Random@Complex, 10 + 10 ID, 8dim<D;
Print@MatrixForm@ADD;
Print@MatrixForm@ BDD;
n = Length@BD;
H∗ U@@m,jDD se cunosc, deoarece suma este cu m<k deci s−au calculat anterior∗L
H∗ L@@k,mDD se calculasera anterior din bucla urmatoare ∗L
ForAi = k + 1, i ≤ n, i++,
i y
LPi,kT = j
j
j
z
z ì UP k,kT; H∗ Pentru linia i, se calculeaza elementele lui L ∗L
jAPi,kT − ‚ LPi,m T UP m,kTz
z
k−1
k m=1 {
H∗ pentru k=1, rezulta L@@2,1DD=A@@2,1DDêU@@1,1DD= A@@2,1DDêA@@1,1DD∗L
H∗ U@@m,kDD si L@@i,mDD sunt deja calculate, deoarece suma este pentru m<k ∗L
E;E;E
Print@MatrixForm@ LDD;
Print@MatrixForm@ UDD;
Y = Table@0, 8n<D;
H∗ Forward Substitution pentru a afla Y ∗L
BP nT
YP nT =
LP n,nT
;
ForAi = 1, i ≤ n, i++,
i
j y
z
YPiT = j
j z ì LP i,iT;E;
j BPiT − ‚ LPi,jT YPjTz
z
i−1
k j=1 {
H∗ Back substitution pentru a afla X ∗L
X = Table@0, 8n<D;
YP nT
XP nT =
UP n,nT
;
ForAi = n − 1, i ≥ 1, i−−,
i
j y
z
XPiT = j
j z ì UPi,iT;E;
j YPiT − ‚ UPi,jT XPjTz
z
n
k j=i+1 {
Print@MatrixForm@XDD;
A.X H∗ Verificari solutie ∗L
B
Max@Abs@A.X − BDD
scrie
i i −1
aii = ∑ lij u ji = ∑ lij u ji + lii uii (1.44)
j =1 j =1 1
de unde se poate obtine termenul diagonal al matricei U
i −1
lii = aii − ∑ lij u ji (1.45)
j =1
i i −1
aij = ∑ lik ukj =∑ lik ukj + lii uij (1.46)
k =1 k =1
j j −1
aij = ∑ lik ukj =∑ lik ukj + lij u jj (1.48)
k =1 k =1
Programul 1.5 Rezolvarea unui sistem de ecuatii liniare prin metoda Crout
dim = 20;
A = Table@Random@Real, 10D, 8dim<, 8dim<D;
B = Table@ Random@Complex, 10 + 10 ID, 8dim<D;
Print@MatrixForm@ADD;
Print@MatrixForm@BDD;
n = dim;
ForAj = k, j ≤ n, j++,
m=1
i y
UP k,jT = j
j
j
z
z ì LP k,kT;
jAP k,jT − ‚ LP k,m T UP m,jTz
z
k−1
k m=1 {
H∗ Se observa ca pentru j=k,
U@@k,kDD=1 deoarece numitorul L@@ k,kDD stabilit anterior este exact numaratorul∗L
ForAi = k + 1, i ≤ n, i++,
i y
LPi,kT = j
j
j
z
z;
jAPi,kT − ‚ LPi,m T UP m,kTz
z
k−1
k m=1 {
E;E;E
Print@MatrixForm@LDD;
Print@MatrixForm@UDD;
MatrixForm@A − [Link]
Max@Abs@A − [Link]
Y = Table@0, 8n<D;
BP nT
YP nT =
LP n,nT
;
ForAi = 1, i ≤ n, i++,
i
j y
z
YP iT = j z ì LPi,iT;E;
j BP iT − ‚ LPi,jT YPjTz
j z
i−1
k j=1 {
X = Table@0, 8n<D;
YP nT
XP nT =
UP n,nT
;
ForAi = n − 1, i ≥ 1, i−−,
i
j y
z
XP iT = j z ì UPi,iT;E
j YP iT − ‚ UP i,jT XPjTz
j z
n
k j=i+1 {
Print@MatrixForm@XDD;
Max@Abs@A.X − BDD
1.6 Factorizarea Cholesky
A=U.L (1.50)
uij = l ji (1.51)
Din relatiile (1.50) si (1.51), pentru un element diagonal, prin separarea
13H 14H
dim = 10;
A = Table@0, 8dim<, 8dim<D; H∗ Se initializeaza matricea ∗L
H∗ Se construieste matricea ca matrice simetrica ∗L
For@i = 1, i ≤ dim, i++,
For@j = 1, j ≤ i, j++,
A@@i, jDD = Random@ Real, 10D;
A@@j, iDD = A@@i, jDD;D;D;
B = Table@ Random@Complex, 10 + 10 ID, 8dim<D;
Print@ MatrixForm@ADD;
Print@ MatrixForm@BDD;
n = dim;
L = Table@0, 8n<, 8n<D;
U = L;
H∗ Aici este algoritmul Cholesky ∗L
ForAk = 1, k ≤ n, k++,
LP k,kT = $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AP k,kT − ⁄ HLP k,m TL2% ;
k−1
m=1
ForAi = k + 1, i ≤ n, i++,
i y
LPi,kT = j
j
j
z
z ì LP k,kT;
jAPi,kT − ‚ LPi,m T LP k,m Tz
z
k−1
k m=1 {
E;
E;
U = Transpose@ LD;
Print@ MatrixForm@LDD;
Print@ MatrixForm@UDD;
Y = Table@0, 8n<D;
H∗ Forward substitution ∗L
BP nT
YP nT = ;
LP n,nT
ForAi = 1, i ≤ n, i++,
i
j y
z
YPiT = j
j z ì LP i,iT;E;
jBP iT − ‚ LPi,jT YP jTz
z
i−1
k j=1 {
H∗ Back substitution ∗L
X = Table@0, 8n<D;
YP nT
XP nT = ;
UP n,nT
ForAi = n − 1, i ≥ 1, i−−,
i
j y
z
XPiT = j
j z ì UPi,iT;E
jYP iT − ‚ UPi,jT XPjTz
z
n
k j=i+1 {
Print@ MatrixForm@XDD;
Max@Abs@A.X − BDD
H∗ Verificarea solutiei ∗L
matriceala
D.X=B-L.X-U.X (1.59)
Prin inmultire la stanga in ambii membrii cu inversa matricii diagonale se
poate exprima matricea necunoscutelor la iteratia k + 1 in functie de matricea
necunoscutelor la iteratia anterioara k
X(k +1) = - D-1 .(L+U).X(k ) +D-1 .B (1.60)
Relatia (1.59) scrisa pe componente este
17H
n i −1 n
1 ⎛ i −1 n ⎞
xi( k +1) = ⎜ bi − ∑ aij x (jk ) − ∑ aij x (jk ) ⎟ (1.63)
aii ⎝ j =1 j = i +1 ⎠
Implementarea acestei metode este mai simpla decat la metodele anterioare
deoarece nu este necesara factorizarea matricii ci doar descompunerea ei. Din pacate
metoda este de multe ori slab convergenta, in special cand gradul de independenta
linaiara ala ecuatiilor este redus (numarul de conditionare este mare). Aceasta poate
conduce la erori si timp de calcul mai mari decat in cazul celorlalte metode.
Pentru accelerarea calculelor este preferata in practica metoda Gauss-Siedel
care este foarte apropiata de aceasta.
Tinand seama tot de relatiile (1.56) si (1.57) se poate scrie urmatoarea ecuatie
19H 20H
matriceala
(D+L).X=B-U.X (1.64)
Prin inmultire la stanga in ambii membrii cu inversa matricii (D+L) diagonale
se poate exprima matricea necunoscutelor la iteratia k + 1 in functie de matricea
necunoscutelor la iteratia anterioara k
X( k +1) = -(D+L)-1 .U.X(k ) + (D+L)-1 .B (1.65)
Relatia (1.64) scrisa pe componente este
21H
i n
unde s-a tinut cont ca (D+L)ij = 0 pentru j > i si (U)ij =0 pentru j ≤ i . Aceasta se
poate scrie si sub forma
i −1 n
aii xi( k +1) + ∑ aij x (jk +1) = bi − ∑a x ij
(k )
j (1.67)
j =1 j = i +1
unde s-a tinut cont de definitiile (1.58) ale elementelor matricii diagonale si ale
22H
matricilor triunghilare.
Rezulta ecuatia metodei iterative Gauss-Siedel scrisa pe componente
1 ⎛ i −1 n
⎞
xi( k +1) = ⎜ bi − ∑ aij x (jk +1) − ∑ aij x (jk ) ⎟ (1.68)
aii ⎝ j =1 j = i +1 ⎠
Programul 1.7 Rezolvarea unui sistem de ecuatii liniare prin metoda Gauss-
Siedel
Clear@"`∗"D;
A = 886, 3, 2<, 83, 1.51, 1<, 82, −1, 3<<;
B = 81.2, −3.1, 2<;
Print@ MatrixForm@ADD;
Print@ MatrixForm@ BDD;
n = Length@BD;
Xo = Table@100., 8n<D; H∗ Valorile ghicite, initiale ∗L
X = Xo; H∗ Noile valori produse dupa iteratie ∗L
Nk = 2500; H∗ Numar maxim de iteratii ∗L
k = 0;
WhileAk ≤ Nk,
ForAi = 1, i ≤ n, i++,
i
j y
z
XPiT = j
j z ì APi,iT ;
j BPiT − ‚ APi,jT XPjT − ‚ APi,jT XoP jTz
z
i−1 n
k j=1 j=i+1 {
E; H∗ Gasirea noilor aproximatii ∗L
Xo = X; H∗ Pentru iteratia urmatoare ele devin valori vechi ∗L
k++E;
Print@ MatrixForm@ XDD;
Max@Abs@A.X − BDD
Programul 1.8 Rezolvarea unui sistem de ecuatii liniare prin iteratie Gauss-
Siedel cu suprarelaxare
Clear@"`∗"D;
A = 886, 3, 2<, 83, 1.5001, 1<, 82, −1, 3<<;
B = 81.2, −3.1, 2<;
Print@MatrixForm@ADD;
Print@MatrixForm@BDD;
n = Length@ BD;
Xo = Table@100., 8n<D; H∗ Valorile ghicite, initiale ∗L
X = Xo; H∗ Noile valori produse dupa iteratie ∗L
Nk = 2000; H∗ Numar maxim de iteratii ∗L
k = 0;
WhileAk ≤ Nk,
ForAi = 1, i ≤ n, i++,
i
j y
z
XPiT = XoPiT + 1.633 j
j z ì APi,iT ;
j BPiT − ‚ AP i,jT XPjT − ‚ APi,jT XoPjTz
z
i−1 n
k j=1 j=i {
E; H∗ Gasirea noilor aproximatii ∗L
Xo = X; H∗ Pentru iteratia urmatoare ele devin valori vechi ∗L
k++E;
Print@MatrixForm@XDD;
Max@Abs@A.X − BDD
b@@nDD
x@@nDD =
d@nD
;
E;
x H∗ Afisarea solutiilor ∗L
A.x − B
H∗ Verificarea ∗L
⎧lij / .i = j , i = j + 1 ⎧uij / .i = j , i = j − 1
lij = ⎨ ; uij = ⎨ (1.87)
⎩0 / .i < j , i > j + 1 ⎩0 / .i > j , i < j − 1
Din relatia (1.85) rezulta pentru elementele de deasupra diagonalei
28H
n
ak ,k +1 = ∑ lkm , um ,k +1 = lkk uk ,k +1 (1.88)
m =1 1
unde s-a tinut cont de (1.87) din care rezulta ca m ∈ {k − 1, k} ∩ {k + 1, k} = {k} .
29H
n
ak ,k −1 = ∑ lkmum ,k −1 = lk ,k −1uk −1,k −1 (1.90)
m =1
unde s-a tinut cont de (1.87) din care rezulta ca m ∈ {k − 1, k} ∩ {k − 2, k − 1} = {k − 1} .
31H
si deci
ukk = akk − lk , k −1 ⋅ ak −1, k (1.95)
Relatiile de factorizare (1.89), (1.91), (1.92) si (1.95) implica mult mai putine
34H 35H 36H 37H
calcule decat in cazul matricilor dense, deoarece bu implica sumari dupa n termeni.
De asemenea, ca si in cazul metodei Gauss pentru matrici tridiagonale, determinarea
necunoscutelor prin substitutie inversa si similar prin substitutie directa implica un
volum mult mai mic de calcule.
Capitolul II
Interpolarea si aproximarea functiilor
Desi din punct de vedere semantic interpolarea are un sens diferit de
aproximare, in practica analizei numerice ele se bazeaza pe aceleasi procedee
matematice, astfel ca in cele ce urmeaza vor fi tratate unitar.
Dupa cum arata si nuantarea denumirilor, exista doua categorii importante de
aplicatii ale acestor procedee.
O prima categorie este intalnita in aplicatii de natura experimentala, atunci
cand se colecteaza o lista de date numerice, reprezentand valorile determinate
experimental ale unei functii Y = { f ( x1 ) , f ( x2 ) ,..., f ( xn )} , pentru anumite valori
(alese sau impuse) ale argumentului X = { x1 , x2 ,..., xn } , ca in figura 2.1. Daca dorim
sa determinam prin calcul valoarea functiei intr-un punct xi care nu apartine multimii
de valori experimentale, xi ∉ X , trebuie sa recurgem la un procedeu de interpolare.
Astfel de procedee sunt recomandate in special pentru cazul unor functii cu variatii
rapide si cu un numar redus de valori cunoscute, deoarece o simpla unire a punctelor
cunoscute prin segmente de dreapta poate furniza, dupa cum se observa in figura 2.1,
o valoare destul de departata de cea reala.
f(x)
Functia exacta
Functie aproximata
f(xi )
fa(x i)
xi x
x1 x2 x3 x4 x5 x6
Figura 2.1 Interpolarea unei functii intr-un punct
1.2
1.15
1.1
1.05
0.9
Figura 2.2 Aproximarea functiei hypergeometrice 2 F1 (1/ 3,1/ 3, 2 / 3; x) (linie
continua) printr-un polinom de grad 9 (linie punctata)
devine:
n +1
DD( xn +1 , xn ,...., x1 , x)∏ ( x − xi )
i =1
(2.7)
DD( xn +1 , xn ,...., x1 ) − DD( xn , xn −1 ,...., x1 , x) n
= ( x − xn +1 )∏ ( x − xi )
xn +1 − x i =1
Separand si ultimul termenul cu indice k = n + 1 din suma din relatia (2.6) si 41H
n k −1 n+ 1 − 1
f ( x) = f ( x1 ) + ∑ DD( xk , xk −1 ,..., x1 )∏ ( x − xi ) + DD( xn +1 , xn ,..., x1 ) ∏ (x − x ) i
k =2 i =1 i =1
(2.8)
− DD( xn +1 , xn ,...., x1 ) + DD( xn , xn −1 ,...., x1 , x) n
+ (− xn +1 + x) ∏ ( x − x1 )
− xn +1 + x i =1
t = x; Q (t ) = 0;
(2.12)
t = xi ; Q ( xi ) = 0; i = 1, 2,..., n
Daca Q (t ) are n + 1 radacini, inseamna ca derivata de ordinul intai Q '(t ) are
n radacini, derivata de ordinul doi Q ''(t ) are n − 1 radacini, si asa mai departe, iar
derivata de ordinul n are o radacina. Fie ξ ∈ [ a, b] aceasta radacina
Q ( n ) (ξ ) = 0 (2.13)
Luad t = ξ in relatia (2.11) si tiand cont ca derivata de ordinul n in raport cu
47H
f ( n ) (ξ ) n
Rn ( x) =
n ! i =1
∏ ( x − xi ) (2.16)
ForAi = 1, i ≤ n,
f@r@i + 1DD − f@r@iDD
DD@i + 1, iD = ; H∗ diferentele finite directe ∗L
r@i + 1D − r@iD
i++E;
ForAj = 3, j <= n,
ForAi = 1, i < j − 1,
DD@j, j − iD − DD@j − 1, j − i − 1D
DD@j, j − i − 1D = ; H∗diferente finite recursive∗L
r@jD − r@j − i − 1D
i++E;
j++E;
k=2 l=1
1 2 3 4 5 6
-1
i++E;
ForAj = 3, j <= n,
ForAi = 1, i < j − 1,
DD@j, j − iD − DD@j − 1, j − i − 1D
DD@j, j − i − 1D =
r@@jDD − r@@j − i − 1DD
;
H∗Print@"DD@",j,",",j−i−1,"D=",DD@j,j−i−1DD;∗L
i++E;
j++E;
k=2 l=1
2 4 6 8 10 12 14
diferenta cat mai mica, reprezentata de acelasi rest dat de relatia (2.16). 51H
n
f ( xi ) = ∑ f ( xi )Li ( xi ) (2.21)
i =1
n
f ( x) = ∑ f ( xi )Li ( x) + Rn ( x) (2.22)
i =1
Pentru demonstarea formulei, scriem mai intai forma desfasurata a
polinoamelor Lagrange
( x − x1 )( x − x2 )...( x − xk )...( x − xi −1 )( x − xi +1 )...( x − xn )
Li ( x) = (2.23)
( xi − x1 )( xi − x2 )...( xi − xk )...( xi − xi −1 )( x − xi +1 )...( xi − xn )
Se observa ca pentru x = xi rezulta Li ( xi ) = 1 , deoarece fiecare factor de la
numarator se simplifica cu unul de la numitor.
Pentru x = xk unde k ≠ i , exista la numarator un factor ( xk − xk ) = 0 , astfel ca
Li ( xk ) = 0 .
Rezulta urmatoarea proprietate a polinoamelor Lagrange:
Li ( xk ) = δ ik (2.24)
Calculand cu relatia (2.18) valoarea functiei polinomiale intr-un punct x j ,
52H
rezulta:
n
Pn −1 ( x j ) = ∑ f ( xi )δ ij = f ( x j ) (2.25)
i =1
astfel ca este demonstrata relatia (2.21). 53H
@@ DD @@ DD j
i=1 kj=1 r i − r j { kj=i+1 r@@iDD − r@@jDD {
g2 = Plot@p@xD, 8x, a, b<, PlotStyle → RedD;
Show@g1, g2D;
Print@"PHxL=", Expand@ p@xDDD;
ForAi = 1, i ≤ n,
f@r@i + 1DD − f@r@iDD
DD@i + 1, iD = ; H∗ diferentele finite directe ∗L
r@i + 1D − r@iD
i++E;
ForAj = 3, j <= n,
ForAi = 1, i < j − 1,
DD@j, j − iD − DD@j − 1, j − i − 1D
DD@j, j − i − 1D = ; H∗diferente finite recursive∗L
r@jD − r@j − i − 1D
i++E;
j++E;
k=2 l=1
1.5
0.5
-3 -2 -1 1 2 3
0.5
-3 -2 -1 1 2 3
-0.5
-1
f ( n ) (ξ ) n
Rn ( x) =
n ! i =1
∏ ( x − xi )
Deoarece, asa cum s-a aratat nu se cunoaste punctul ξ si valoarea derivatei de
ordinul n in acest punct, singura cale de a se minimiza restul este sa se aleaga
corespunzator punctele de esantionare xi astfel incat produsul
n
pn ( x) = ∏ ( x − xi ) (2.28)
i =1
sa fie minim.
Acesta este un polinom monic (polinom cu coeficientul termenului de gradul
cel mai inalt egal cu 1) de gradul n . In legatura cu acest tip de polinoame exista
urmatoarea teorema:
Teorema mini-max: dintre toate polinoamele monice de grad n ,
polinoamele monice Chebyshev au cea mai mica valoare absoluta maxima pe
intervalul [ −1,1] .
Rezulta ca daca punctele de esantionare xi sunt chiar radacinile unui polinom
monic Chebyshev de grad n , produsul (2.28) este un astfel de polinom si deci restul
55H
interpolarii polinomiale va avea cea mai mica valoare maxima posibila pe intervalul
[ −1,1] . Printr-o schimbare convenabila de variabila, acest procedeu poate fi extins
pentru orice interval finit [ a, b ] si teoretic chiar si pentru intervale cu una din limite
infinita.
Demonstratia acestei teoreme se va face dupa ce se trec in revista anumite
proprietati utile ale polinoamelor Chebyshev.
Polinoamele Chebyshev se definesc pe intervalul [ −1,1] prin urmatoarea
relatie:
Tn ( z ) = cos(n arccos( z )) (2.29)
Notand
θ = arccos z; z ∈ [ −1,1] (2.30)
rezulta forma echivalenta:
Tn ( z ) = cos nθ (2.31)
unde
z = cos θ (2.32)
Pornind de la aceasta definitie rezulta ca primele doua polinoame Chebyshev
sunt:
T0 ( z ) = cos 0θ = 1
(2.33)
T1 ( z ) = cos θ = z
Restul polinoamelor Chebyshev se pot calcula si prin relatia de recurenta:
Tn ( z ) = 2 zTn −1 ( z ) − Tn − 2 ( z ); n ≥ 2 (2.34)
Relatia (2.34) se poate demonstra pe baza urmatoarei identitati
56H
trigonometrice:
1
cos(α ) cos( β ) = [cos(α + β ) + cos(α − β )] (2.35)
2
Luand in aceasta relatie α = θ si β = (n − 1)θ se obtine:
1
cos θ cos(n − 1)θ = [cos nθ + cos(n − 2)θ ] (2.36)
z
T (z)
2 Tn ( z ) T (z)
n−1 n− 2
⎛ 1 ⎞π
θk = ⎜ k − ⎟ ; (2.40)
⎠ ⎝ 2 n
⎛ 1 ⎞π
zk = cos ⎜ k − ⎟ (2.41)
⎝ 2⎠ n
Extremele polinomului au valoarea 1 sau -1:
Tn ( z ) = cos nθ ∈[−1,1] (2.42)
Ele se pot obtine simplu punand conditia de extrem in definitia (2.31): 60H
π
| cos nθ k |= 1 ⇒ nθ k = kπ ; θ k = k (2.43)
n
⎛ π⎞
zk = cos ⎜ k ⎟ ; k = 0,1, 2,..., n (2.44)
⎝ n⎠ n +1 extreme
De remarcat ca cele n + 1 valori ale lui zk date de acesta relatie sunt ordonate
descrescator, functia cosinus fiind descrescatoare de la 1 la -1 pe intervalul [ 0, π ] .
Astfel, pentru k = 0 avem z0 = 1 iar pentru k = n avem zn = −1 .
Inlocuind θ k in (2.42) rezulta valorile in extreme:
61H
Tn ( zk ) = (−1) k (2.45)
Conform celor precizate in alineatul precedent, rezulta ca la extrema dreapta a
domeniului de definitie avem extremul z0 = 1 , pentru care valoarea polinomului este
intotdeauna (−1)0 = 1 , in timp ce la extrema stanga avem extremul zn = −1 , pentru
care valoarea polinomului este 1 daca gradul este par si -1 daca gradul este impar.
Programul 2.6 calculeaza prin recurenta primele 7 polinoame Chebyshev si
afiseaza graficele si expresiile lor individuale, precum si graficele suprapuse. Din
aceste reprezentari grafice se pot observa pozitiile celor n radacinilor si ale celor
n + 1 extreme.
0.5
-1 -0.5 0.5 1
-0.5
-1
1.5
0.5
-1 -0.5 0.5 1
x
1
0.5
-1 -0.5 0.5 1
-0.5
-1
−1 + 2 x2
1
0.5
-1 -0.5 0.5 1
-0.5
-1
3
−3 x + 4 x
1
0.5
-1 -0.5 0.5 1
-0.5
-1
1 − 8 x2 + 8 x4
1
0.5
-1 -0.5 0.5 1
-0.5
-1
5 x − 20 x3 + 16 x5
1
0.5
-1 -0.5 0.5 1
-0.5
-1
2 4 6
−1 + 18 x − 48 x + 32 x
1
0.5
-1 -0.5 0.5 1
-0.5
-1
Numim polinoame monice acele polinoame care au coeficientul termenului de
gradul cel mai inalt egal cu 1. Din relatia (2.37) se observa ca se poate obtine simplu
62H
Tn ( z ) ≤ 1 (2.47)
deci polinomul monic Chebyshev are proprietatea
1
Tn ( z ) ≤ n −1 = 21− n (2.48)
2
Demonstratia teoremei mini-max.
Aceasta demonstratie se va face prin reducere la absurd. Sa presupunem ca ar
exista un polinom monic f n ( z ) cu proprietatea
f n ( z ) < Tn ( z ) ≤ 21− n (2.49)
Daca f n ( z ) este un polinom monic se poate scrie
f n ( z ) = z n + Fn −1 ( z ) (2.50)
cu Fn −1 ( z ) ∈ {1n −1 ( z )}
Sa formam functia ajutatoare
Q( z ) = Tn ( z ) − f n ( z ) (2.51)
Tinand seama de relatiile (2.46) si (2.50) se observa ca avem
64H 65H
Q( z ) = 21− n Rn −1 ( z ) − Fn −1 ( z )
Q( z ) ∈ {1n −1 ( z )} (2.52)
deci functia Q( z ) este un polinom de grad cel mult n − 1 .
Sa studiem comportarea acestei functii intre doua extreme consecutive ale
polinomului monic Chebyshev. Evisent, acest polinom monic are tot n + 1 extreme ca
si polinomul Chebyshev normal.
Orice interval este intre doaua extreme consecutive are la un capat un extrem
cu numar par 2k si la celalalt un extrem cu numar impar 2k ± 1 .
In extremul cu numar par, conform relatiei (2.45), rezulta ca polinomul monic
66H
este pozitiv
(−1) 2 k
Tn (ξ 2 k ) = n −1 > 0 (2.53)
2
deci
Tn (ξ 2 k ) = Tn (ξ 2 k ) (2.54)
iar functia ajutatoare este pozitiva
Q(ξ 2 k ) = Tn (ξ 2 k ) − f n (ξ 2 k ) = Tn (ξ 2 k ) ∓ f n (ξ 2 k ) > 0 (2.55)
deoarece conform ipotezei modulul lui f n ( z ) este mai mic decat al polinomului
monic Chebyshev.
Pe de alta parte, in extremul cu numar impar, conform relatiei (2.45), rezulta 67H
ForAi = 1, i ≤ n,
f@r@i + 1DD − f@r@iDD
DD@i + 1, iD = ; H∗ diferentele finite directe ∗L
r@i + 1D − r@iD
i++E;
ForAj = 3, j <= n,
ForAi = 1, i < j − 1,
DD@j, j − iD − DD@j − 1, j − i − 1D
DD@j, j − i − 1D = ; H∗diferente finite recursive∗L
r@jD − r@j − i − 1D
i++E;
j++E;
k=2 l=1
0.8
0.6
0.4
0.2
-3 -2 -1 1 2 3
0.8
0.6
0.4
0.2
-3 -2 -1 1 2 3
Se observa ca erorile scad foarte mult pe tot intervalul atunci cand se mareste
gradul polinomului de interpolare, ceea ce arata ca, spre deosebire de cazul
interpolarii echidistante, procesul este convergent.
2 4 6 8
-1
-2
In schimb, daca functia are o variatie rapida iar numarul de puncte in care ea
este cunoscuta este mic erorile pot creste foarte mult. In figura urmatoare este
reprezentata o aproximare prin segmente de dreapta a unei functii sinusoidale
cunoscuta doar in 6 puncte. Se observa ca la anumite valori ale argumentului (de
exemplu la 0,5 sau 2,5) erorile care apar la o interpolare liniara sunt foarte mari, de
ordinul zecilor de procente.
1
0.5
1 2 3 4 5
-0.5
-1
Chiar si prin marirea numarului de puncte la 12 erorile sunt in cele mai multe
cazuri inacceptabile, dupa cum se poate observa in figura urmatoare:
1
0.5
2 4 6 8 10
-0.5
-1
Desigur, daca s-ar folosi pentru aproximarea intre doua puncte a unui polinom
de grad superior, rezultatele ar fi mult mai bune, dar procedeul ar putea fi prea
complicat din punct de vedere numeric.
In practica, cea mai avantajoasa metoda o constituie folosirea unor polinoame
de gradul 3, ceea ce conduce la un compromis optim intre precizie si complexitate.
Aceasta este metoda interpolarii spline cubice, denumire provenita de la forma
functiei pe fiecare portiune portiune a domeniului si de la gradul polinomului folosit.
Metoda presupune mai intai impartirea domeniului [ x0 , xn ] in mai multe
subintervale:
[ x0 , xn ] = [ x0 , x1 ] ∪ [ x1 , x2 ] ∪ ... ∪ [ xi , xi +1 ] ∪ ... ∪ [ xn −1 , xn ] (2.62)
Pe fiecare subinterval [ xi , xi +1 ] , functia este aproximata printr-un polinom de
gradul trei Si ( x) de forma
⎧⎪a ( x − xi )3 + bi ( x − xi ) 2 + ci ( x − xi ) + di , x ∈ [ xi , xi +1 ]
Si ( x ) = ⎨ i (2.63)
⎪⎩0, x ∉ [ xi , xi +1 ]
i = 0,1,..., n − 1
Pe ansamblu functia este aproximata printr-o suma S ( x) de astfel de functii cu
domenii de definitie disjuncte
n −1
f ( x ) ≈ S ( x ) = ∑ Si ( x ) (2.64)
i =0
Pentru a se putea calcula cei 4n coeficienti din relatiile (2.63) se vor impune
70H
Capitolul 3
Rezolvarea ecuatiilor neliniare
Problema gasirii acelor valori ale argumentului unei functii reale de argument
real care anuleaza functia, adica a gasirii punctelor de intersectie a functiei cu abscisa
(fig 3.1), este echivalenta cu rezolvarea ecuatiei:
F ( x) = 0 , F : → (3.1)
Valorile respective sunt numite radacinile ecuatiei (3.1). 71H
Problema admite solutii analitice pentru toate cazurile in care functia este un
polinom de grad cel mult 4, pentru anumite functii elementare sau speciale, si anumite
combinatii ale acestora. In foarte multe cazuri insa, nu este posibila gasirea unor
solutii analitice si este necesar sa se utilizeze metode numerice pentru obtinerea
radacinilor.
Exista o mare varietate de metode generale pentru rezolvarea numerica a
acestei probleme, caracterizate prin diverse grade de complexitate, eficienta si viteza.
Sunt de asemenea cunoscute o serie de metode speciale, recomandabile pentru cazuri
in care se pot exploata favorabil o serie de particularitati ale functiei in cauza.
Pentru optimizarea numarului de operatii necesare pentru obtinerea cu precizie
ridicata a tuturor radacinilor, se procedeaza de cele mai multe ori in doua etape, in
special atunci cand se presupune ca exista mai multe radacini distincte. Este
recomandabil de asemenea ca, daca mediul de programare folosit permite usor acest
lucru, sa se vizualizeze mai intai graficul functiei respective pe intervalul de interes,
ceea ce ofera o imagine asupra pozitiei radacinilor si numarului lor.
Intr-o prima etapa, se vor stabili subintervalele in care sunt plasate radacinile,
pentru a restrange procesul de cautare a valorilor exacte in domenii cat mai inguste, in
care gasirea valorilor cu o precizie mare sa se faca printr-un numar cat mai redus de
iteratii. De exemplu, in figura 3.1 se observa ca radacina x3 este in intervalul
[4h,5h].Vom numi in continuare acest proces etapa gasirii intervalelor (engl.
braketing).
In a doua etapa, se va considera fiecare interval in parte, si prin metode
numerice cat mai eficiente se va gasi radacina din intervalul respectiv cu precizia
dorita. Vom numi in continuare acest proces etapa gasirii radacinilor (engl.
refining).
Dat fiind ca unele metode considerate foarte eficiente in majoritatea cazurilor
pot da rezultate eronate pentru anumite cazuri particulare, este obligatoriu ca dupa
gasirea radacinilor sa se faca verificarea acestora, introducand valorile respective in
ecuatia (3.1) si observand abaterea fata de 0.
72H
f(x)
-h h 2h 3h 4h 5h 6h 7h 8h 9h
X1 0 X2 X3 X4
x
Figura 3.1 – Esantionarea abscisei pentru gasirea intervalelor care contin radacini
Programul 3.1 pentru gasirea intervalelor cu radacini prin esantionare este
scris in Mathematica si are:
• intrari: functia, intervalul si pasul de esantionare
• iesiri: graficul functiei (figura 3.2) si lista intervalelor pe care se afla radacini
Este exemplificata gasirea intervalelor care contin radainile ecuatiei transcendente
3x − 5 x 2 + 2 = 0
Clear@"`∗"D;
f@x_D = 3x − 5 x2 + 2.; H∗ Definirea functiei ∗L
a = −2.;
b = 5; H∗ Stabilirea intervalului global∗L
Plot@f@xD, 8x, a, b<D; H∗ Vizualizarea graficului ∗L
20
10
-2 -1 1 2 3 4 5
-10
{{-0.71,-0.7},{0.99,1.},{3.93,3.94}}
iar noul intervat este [ xk +1 , a ] daca F (a) F ( xk +1 ) < 0 si [b, xk +1 ] in caz contrar.
Rezulta ca dupa n bisectii, intervalul se micsoreaza de 2n ori, deci si eroarea se
micsoreaza in aceeasi proportie:
1 1
ε = xn − x0 = n x1 − x0 ≤ n b − a (3.3)
2 2
unde xn este valoarea obtinuta pentru radacina dupa n bisectii x0 este valoarea reala iar
x1 este valoarea initiala aleasa pentru radacina (in intervalul respectiv, de regula a sau
b).
Numarul de pasi necesari obtinerii unei anumite erori se obtine prin
logaritmarea relatiei (3.3):
73H
b − a 10 b−a
n ≥ Log 2 ≈ Log10 , n∈ (3.4)
ε 3 ε
Convergenta gasirii radacinii poate fi evaluata din relatia intre erorile obtinute
in doi pasi consecutivi. Deoarece la fiecare pas intervalul se injumatateste, se poate
scrie:
1
ε n +1 = ε n = Const × ε n (3.5)
2
O astfel de relatie caracterizata printr-o proportionalitate intre erorile
consecutive defineste o convergenta liniara a metodei. Exista, dupa cum se va arata,
si metode care au o convergenta supraliniara, definita printr-o relatie de tipul:
ε n +1 = Const × ε nα , α > 1, α ∈ (3.6)
Evident, un procedeu este cu atat mai eficient cu cat α este mai mare, in
practica existand metode cu exponent cuprins intre 1 si 2.
Clear@"`∗"D;
f@x_D = Sin@xD − Log@xD; H∗ Ecuatia neliniara de rezolvat ∗L
a = 0; b = 3; H∗ Intervalul pe care se afla o radacina reala ∗L
h = 10−15; H∗ Precizia dorita ∗L
WhileAAbs@b − aD > h, H∗Ciclul repetat pana la atingerea preciziei∗L
; H∗ Noua valoare a solutiei ∗L
a+ b
c=
If@f@aD f@cD > 0, a = c, b = cDE; H∗Decizia de alegere a intervalului ∗L
2.
x − f ( x) = 0 (3.9)
O solutie α pentru ecuatia (3.9) se numeste punct fix, care este si solutie a
76H
α = f (α ) (3.10)
si conform (3.8) F (α ) = α − f (α ) = 0 .
79H
xk +1 = xk − F [ xk ] (3.14)
Aceasta poate fi interpretata in felul urmator: valoarea necunoscutei dupa
iteratie este egala cu valoarea de la iteratia precedenta, corectata cu valoarea
functiei chiar in punctul de la iteratia precedenta.
De subliniat insa ca nu intotdeauna convergenta acestei metode este asigurata,
fiind necesara indeplinirea conditiei (3.13), care insa nu se poate verifica apriori,
86H
nefiind cunoscuta valoarea ξ . Convergenta se poate verifica prin scaderea lui ε sub o
anumita limita impusa, si obligatoriu prin verificarea solutiei in ecuatia (3.7). Metoda
87H
xk +1 = xk − β F [ xk ] (3.15)
Aceasta ar insemna ca prin inmultirea corectorului F [ xk ] cu un factor
corespunzator β se poate obtine in urma iteratiei (3.15) o valoare mult mai apropiata
89H
xk +1 = xk + β [ f ( xk ) − xk ] (3.16)
Factorul β poate fi determinat punand conditia ca eroarea la iteratia k + 1 sa
fie minima. Rezulta succesiv:
f ( xk ) − xk
ε k +1 = xk +1 − α = xk − α + β [ f ( xk ) − xk ] = xk − α 1 + β
xk − α
Adunand si scazand f (α ) la numaratorul fractiei din relatia precedenta si
aplicand din nou teorema mediei obtinem:
ε k +1 = ε k 1 + β [ f '(ξ k ) − 1] (3.17)
Daca am cunoaste valoarea ξ am putea alege coeficientul β astfel ca eroarea
sa se anuleze:
1
β= (3.18)
1 − f '(ξ k )
In practica insa nu cunoastem pe ξ , deci trebuie sa ii atribuim una din valorile
cunoscute. Considerand ca cea mai apropiata valoare este xk , vom scrie
f (ξ k ) = f ( xk ) iar relatia (3.16) devine:
92H
1
xk +1 = xk + [ f ( xk ) − xk ] (3.19)
1 − f '( xk )
Daca tinem seama de relatia (3.8) si de derivata acesteia, relatia (3.19) poate
93H 94H
(3.22), daca neglijam termenii care cuprind derivata de ordinul doi si cei superiori
96H
si (3.23), rezulta:
99H
F ( xk ) 1 F ''(α )
xk +1 − α = xk − α − = ε k − ε k − ε k2 (3.24)
F '( xk ) 2 F '(α )
ε k +1 εk
definitia ecuatiei, intervalul, precizia dorita si numarul maxim de iteratii. Acesta din
urma este necesar pentru eventualitatea ca metoda nu converge, caz in care programul
nu ramane in bucla ci iese dupa terminarea numarului maxim de iteratii. Alegerea
initiala este un capat al intervalului pe care se presupune ca exista o radacina, iar
celalalt capat este folosit ca valoare initiala de comparatie.
Programul 3.3. Rezolvarea unei ecuatii neliniare prin metoda Newton-
Raphson
Clear@"`∗"D;
f@x_D = Sin@xD − Log@xD;
a = 0; b = 3.0;
ε = 10−12; imax = 100; H∗Precizia si numarul maxim de iteratii∗L
c = a; H∗Valoare initiala pentru radacina∗L
cv = b; H∗Valoare initiala pentru comparatie∗L
f@cvD
DoAc = cv − ; H∗ Calcul valoare noua ∗L
f'@cvD
If@Abs@c − cvD < ε, Break@D D; H∗Iese din ciclu daca s−a atins precizia∗L
cv = c, 8imax<E; H∗Ciclul Do se repeta de maxim imax ori ∗L
sol = c;
Print@sol, " ", f@solDD;
Null
ΔF ( xn ) F ( xn ) − F ( xn −1 )
F '( xn ) ≈ = (3.26)
Δxn xn − xn −1
daca iteratia n se face intre punctele xn −1 si xn .
In metoda secantei, fiecare punct nou gasit devine inceput de interval pentru
urmatoarea iteratie, indiferent daca derivata astfel calculata intersecteaza abscisa in
interiorul sau in exteriorul intervalului curent. Deoarece este posibil ca intersectia sa
apara in exteriorul intervalului, si acest lucru sa se mentina si la iteratiile urmatoare,
metoda poate deveni, ca si cea Newton-Raphson, divergenta.
Inlocuind (3.26) in ecuatia (3.20), si daca aproximatia radacinii la iteratia n
103H 104H
Clear@"`∗"D;
f@x_D = Sin@xD − Log@xD;
a = 1; b = 3.0; H∗ Intervalul care contine radacinile ∗L
ε = 10−7; Nmax = 20; H∗ Conditii de oprire ∗L
cv = a; H∗Valoare initiala a radacinii, pentru comparatie∗L
ForAn = 1, n < Nmax, n++,
a f@bD − b f@aD
; H∗Valoarea noua a radacinii∗L
f@bD − f@aD
c=
F ''(ξ n )
ε n +1 = ε nε n −1 (3.29)
F '(η n )
S-a aplicat teorema mediei, ξn [
si η n fiind doua valori cuprinse in intervalul xn −1 , xn . ]
Rescriind ecuatia (3.29) pentru
108H ε n + 2 , si logaritmand-o obtinem:
⎛ F ''(ξ n ) ⎞
log(ε n + 2 ) = log(ε n +1 ) + log(ε n ) + log ⎜ ⎟
⎝ F '(η n ) ⎠
Notand
⎛ F ''(ξ n ) ⎞
log(ε n + 2 ) = ν n + 2 , log(ε n +1 ) = ν n +1 , log(ε n ) = ν n , log ⎜ ⎟ = cn (3.30)
⎝ F '(η n ) ⎠
se obtine:
ν n + 2 −ν n +1 −ν n = cn (3.31)
Definim operatorul de deplasare care face trecerea de la eroarea in iteratia n la eroarea din
iteratia n + 1 sub forma:
Eν n = ν n +1
care introdus in ecuatia (3.31) conduce la:
109H
( E 2 − E − 1)ν n = cn
1+ 5 1− 5
sau ( E − q )( E − p )ν n = cn unde am notat p = ,q =
2 2
Notand
( E − p)ν n = un (3.32)
rezulta ( E − q )un = cn si schimband indicele ( E − q )un −1 = cn −1 . Tinand cont de actiunea
operatorului E, aceasta relatie devine
un = cn −1 + qun −1 (3.33)
Rescriind (3.33) cu schimbarea indicelui n → n − 1 obtinem
110H
un −1 = cn − 2 + qun − 2 (3.34)
care introdusa in (3.33) duce la:
111H
un = cn −1 + qcn − 2 + q 2un − 2
Repetand procedeul prin inlocuirea lui un − 2 printr-o relatie analoaga cu (3.34), obtinem in 112H
final:
un = cn −1 + qcn − 2 + q 2 cn −3 + ... + q n −1c0 + q nu0 (3.35)
Tinand cont de actiunea operatorului E, si de definitia (3.32), membrul stang al ecuatiei
113H
(3.35) devine: un = ( E − p )ν n = ν n +1 − pν n .
114H
relatie devine:
ν n +1 − pν n = L (3.36)
si tinand cont de notatia (3.30) rezulta
116H log(ε n +1 ) − log(ε np ) = L , de unde se deduce relatia care da
ordinul de convergenta al metodei secantei:
1+ 5
ε n +1 = e Lε n 2
(3.37)
3.6 Metoda Muller de interpolare cu parabola
Dupa cum s-a aratat, metoda secantei foloseste ultimele doua puncte
cunoscute, printre care se traseaza o dreapta a carei intersectie cu abscisa determina
noul punct.
Metoda Muller este o varianta a metodei secantei, folosind ultimele trei puncte
cunoscute, prin care se traseaza o parabola, a carei intersectie cu abscisa determina
noul punct. Este de asteptat sa se obtina o convergenta mai buna decat in metoda
secantei, dar formulele care iau in consideratie trei puncte pot fi mai complicate.
Fie xk , xk −1 si xk − 2 , k ≥ 2 cele trei valori consecutive pentru radacina, obtinute
pana la iteratia precedenta k-1, sau alese in intervalul stabilit pentru radacina inaintea
primei iteratii, ca in figura 3.2. O parabola p( x) care trece prin punctele
[ xk −2 , F ( xk −2 )] , [ xk −1 , F ( xk −1 )] si [ xk , F ( xk )] va avea ecuatia:
aν 2 + bν + c = p ( x) (3.38)
F(x)
h1
ν
x k-2 x k-1 xk x
0
h2
−b ± b 2 − 4ac 2c
ν 1,2 = =
2a −b ∓ b 2 − 4ac
Tinand cont de notatia ν = x − xk −1 , noua valoare pentru radacina va fi deci:
2c
xk +1 = xk −1 − (3.43)
b ± b 2 − 4ac
Semnul de la numitor se ia in asa fel incat sa se obtina valoarea maxima a
modulului acestuia, astfel incat sa se inainteze catre cea mai apropiata radacina fata de
punctele anterioare (deci plus daca b este pozitiv si minus daca b este negativ).
Se poate demonstra ca ordinul de convergenta al metodei Muller este 1,84,
foarte apropiat de metoda Newton, fara a fi necesara insa cunoasterea derivatei. De
asemenea, este de remarcat ca functia poate fi reala sau complexa si se pot obtine
atat radacinile reale cat si cele complexe, lucru care nu era posibil cu metodele
anterioare. Alegerea initiala necesita in schimb trei puncte pe abscisa, care trebuie sa
fie suficient de apropiate de radacina.
Programul 8.5, pentru calculul radacinilor unei ecuatii prin metoda Muller
foloseste relatiile (3.40) - (3.43), si esantioneaza aleator planul complex intr-un
120H 121H
x1 = x0;
H∗ Pentru reactualizarea lui x0 se calculeaza pasul h= ∗L
b+"################# b+"#################
2c sau h= 2c
è!!!!!!!!!!!!!!!!!
b2−4 a c b2−4 a c
è!!!!!!!!!!!!!!!!!
d1 = b + b2 − 4 a c ;
d2 = b − b2 − 4 a c ;
IfAAbs@d1D > Abs@d2D, h = E;
2c 2c
,h=
x0 = x2 − h; H∗x2 a capatat mai sus valoarea x1, fata de care am scris pe h ∗L
d1 d2
IfAAbs@f@x0DD < ε ,
IfAAbs@Im@x0DD > 10−7, AppendTo@X, x0D,
AppendTo@X, Re@x0DDE; Break@D E;
H∗ Daca x0 da o valoare suficient de mica a functiei
k++, 8Nmax<E;
E;
Y = Sort@XD;
For@n = 1, n ≤ Length@YD, n++, Print@Y@@nDD, " ", f@Y@@nDDDDD;
H∗ Afiseaza radacinile; unele se repeta, fara a fi a se sti daca sunt multiple ∗L
3.7 Metoda Lobacevski-Graeffe de calculare a radacinilor reale
ale polinoamelor
a0
............................................
an
x1 x2 ...xn = (−1) n
a0
Daca una dintre radacini, s-o numim x1 ar fi dominanta, adica:
x1 x2 , x1 x3 ,...., x1 xn (3.46)
folosind prima relatie Viete in care neglijam toate celelalte radacini, putem sa obtinem
valoarea radacinii dominante:
a
x1 = − 1 (3.47)
a0
Evident, in general nu avem aceasta situatie foarte favorabila, dar ea se poate
obtine prin prelucrari algebrice.
Sa consideram radacina cu cea mai mare valoare absoluta si sa o notam cu x1 ,
ea avand proprietatea:
x1 > x2 , x1 > x3 ,...., x1 > xn (3.48)
Daca am reusi sa ridicam toate radacinile la o putere suficient de mare, relatia (3.48) 123H
j =1 j =0
∏ ( x 2 − x2j ) = ∑ A(j s ) x2
s −1 s −1
Pn( s ) ( x 2 ) = (−1) n Pn( s −1) ( x 2 ) Pn( s −1) (− x 2 ) = a02
s s s s s
j
(3.51)
j =1 j =0
1
A( s ) m
x2 = ± 2( s ) (3.55)
A1
Analog se obtin si celelalte radacini
1
(s) m
A
xj = ±
j
(s)
(3.56)
A j −1
j =0 ⎝ j =0 ⎠ ⎝ j =0 ⎠
Se poate deci deduce o relatie de recurenta intre coeficientul A(j s +1) al
polinomului din etapa s + 1 si coeficientii Ak( s ) polinoamelor din etapa s prin
identificarea termenilor cu aceeasi putere a lui x din primul si ultimul membru al
acestei relatii. Pentru aceasta se tine cont de urmatoarele:
• Termenul la puterea 2s j dintr-un polinom initial poate fi inmultit doar cu
termenul de aceleasi putere 2s j din cel de al doilea polinom initial pentru a
obtine termenul cu puterea 2 s +1 j din polinomul final;
• Termenul cu puterea 2 s +1 j din polinomul final mai poate fi obtinut si din
inmultirea termenului la puterea 2s ( j − k ) dintr-un polinom initial poate fi
inmultit doar cu termenul de aceleasi putere 2s ( j + k ) , k = 1,.., j − 1 din cel de
al doilea polinom initial (cazurile k = 0 si k = j au fost deja tratate la punctul
anterior) ;
• Datorita simetriei, termenii de la punctul 2 apar de doua ori, deci suma lor
trebuie dublata;
• Termenii de forma 2 s ( j − k ) din unul din polinoame au semnul (−1) .
j
Rezulta deci relatia de recurenta pentru calculul coeficientilor A(j s +1) sub
forma:
j −1
A(j s +1) = ⎡⎣ A(j s ) ⎤⎦ + 2∑ (−1) k A(j −s )k A(j +s )k
2
(3.58)
k =1
Alternativ, aceasta relatie se poate scrie si sub o alta forma, echivalenta. Intr-
adevar, se poate scrie:
Pn( s ) ( x m ) = (−1) n Pn( s −1) ( x m ) Pn( s −1) (− x m ) (3.59)
⎡ n ( s −1) m 2l ⎤ ⎡ n ( s −1) m k2 ⎤ n ⎡ n ( s −1) ( s −1) m⎛⎜⎝ 2 + 2 ⎞⎟⎠ ⎤
n l k
∑ A x = ⎢ ∑ An −l x ⎥ ⎢ ∑ An − k x ⎥ = ∑ ⎢∑ An −l An − k x
(s)
n− j
mj
⎥ (3.60)
j =0 ⎣ l =0 ⎦ ⎣ k =0 ⎦ l = 0 ⎢⎣ k = 0 ⎥⎦
Se observa ca termenul in x mj din primul membru trebuie identificat cu
⎛l k⎞
m⎜ + ⎟
⎝2 2⎠
termenul in x din ultimul membru ceea ce conduce la conditia:
⎛l k⎞
m ⎜ + ⎟ = mj (3.61)
⎝2 2⎠
deci
l = 2j−k (3.62)
iar relatia (3.60) se poate scrie:
129H
n n
⎡ n ⎤
∑A
j =0
(s)
n− j x mj =∑ x mj ⎢∑ An( s−−l 1) An( s−−k1) ⎥
l =0 ⎣ k =0 ⎦
(3.63)
ceea ce inseamna ca
n
An( −s )j = ∑ An( −s −l 1) An( −s −k1) , j = 1, 2,..., n − 1 (3.64)
k =0
Multimea de valori a lui j s-a stabilit tinand cont ca deja se cunoaste
A0( s ) = A02 iar termenii An( s ) sunt termini liberi si deci nu pot ridica gradul monomului
s
cu care se face produsul. Acelasi lucru se poate spune si despre indicii coeficientilor
din membrul drept al realtiei (3.64), deci: 130H
n − l ≤ n −1 (3.65)
Tinand cont de (3.62) rezulta:
131H
n − (2 j − k ) ≤ n − 1 ⇒ k ≤ 2 j − 1 (3.66)
De asemena pentru indicile celui de al doilea coeficient se poate scrie:
n − k ≤ n −1 ⇒ k ≥ 1 (3.67)
Inlocuind pe l dat de (3.62) si tinand cont de limitele de variatie a lui k dat de
132H
2 j −1
An( s−)j = ∑A
k =1
( s −1)
n − (2 j − k ) An( −s −k1) , j = 1, 2,..., n − 1 (3.68)
Programul 8.6. Calculul radacinilor reale ale unui polinom prin metoda
Lobacevski-Graeffe
f@x_D = −13824 + 27648 x + 11808 x2 − 44560 x3 − 3392 x4 + 30632 x5 + 1746 x6 −
10869 x7 − 1215 x8 + 1911 x9 + 297 x10 − 159 x11 − 29 x12 + 5 x13 + x14;
H∗ Polinomul ale carui radacini se cauta ∗L
a = N@CoefficientList@f@xD, xDD; H∗ Lista coeficientilor ∗L
n = Length@aD; H∗ Gradul polinomului +1 ∗L
A = Flatten@Append@a, Table@0, 8n<DDD;
H∗ Se completeaza lista coeficientilor cu n zerouri ∗L
B = A; H∗ Lista auxiliara ∗L
X = Table@0, 8n − 1<D; H∗ Lista radacinilor ∗L
ForAm = 1, m < 25, m ++, H∗ Iteratiile ∗L
ForAj = 1, j ≤ n, j++,
E;
ForAj = 1, j <= n − 1, j++,
B@@jDD y
r= i
j
jAbsA Ez
z 2m−1 ; H∗ calculul radacinilor ∗L
1
k B@@j + 1DD {
If@Abs@f@rDD <= Abs@f@−rDD, X@@jDD = r, X@@jDD = −rD; H∗ Alegerea semnului ∗L
E;
Print@Sort@XDD; H∗ Ordonarea radacinilor si afisarea ∗L
2
⎡ A(j s −1) ⎤
( x ) = ( x ) = ⎢− A( s−1) ⎥ s −1 2
j
m/2 2
j
⎣⎢ j ⎦⎥
(s)
A
Pe de alta parte aceasta este egala cu x sj = (js ) deci:
Aj −1
2
⎡ A(j s −1) ⎤ A(j s )
⎢ − ( s −1) ⎥ = s
⎣⎢ Aj −1 ⎦⎥ Aj −1
2 2
⎡⎣ A(j s −1) ⎤⎦ ⎡⎣ A(j s−−11) ⎤⎦
Deci: = care poate fi scrisa si pentru j − 1, j − 2,..., 0
A(j s ) Asj −1
2 2 2 2 2
⎡⎣ A(j s −1) ⎤⎦ ⎡⎣ A(j −s −11) ⎤⎦ ⎡⎣ A(j −s −21) ⎤⎦ ⎡⎣ A1( s −1) ⎤⎦ ⎡⎣ A0( s −1) ⎤⎦
= = = ... = = =1 (3.73)
A(j s ) Asj −1 A(j −s )2 A1s A0s
2
unde s-a tinut cont ca A0( s ) = ⎡⎣ A0( s −1) ⎤⎦
Rezulta :
2
⎡⎣ A(j s −1) ⎤⎦
rj = ≈1.
A(j s )
Deci, daca prin calculul acestui raport pentru radacina j se obtine o valoare
apropiata de 1, radacina este simpla.
• Pentru radacini de ordin de multiplicitate M aceste rapoarte tind spre M.
2
⎡⎣ A(j s −1) ⎤⎦
rj = ≈M
A(j s )
Demonstratia este identica, dar in locul relatiei (3.52), se pleaca de la relatia 140H
(3.69). Deci, daca prin calculul acestui raport pentru radacina j se obtine o
141H
A( s )
x1m + x2m = 2 ρ m cos mϕ = 1( s ) ; ⇒ A1( s ) = 2 A0( s ) ρ m cos mϕ (3.74)
A0
(x )
2
m m 2
m ⎡ A( s −1) ⎤ 2 2 m
1
2
+ x2 2
= 4 ρ cos ϕ = ⎢ 1( s −1) ⎥ ; ⇒ ⎡⎣ A1( s −1) ⎤⎦ = 4 ⎡⎣ A0( s −1) ⎤⎦ ρ m cos 2 ϕ
m 2
2 ⎣ A0 ⎦ 2
Deci, acest raport este:
m
⎡⎣ A(j s −1) ⎤⎦
2
2 cos 2 ϕ
rj = = 2 .
A(j s ) cos mϕ
Deci, daca prin calculul acestui raport pentru radacina j se obtine o valoare
oscilanta in functie de s, exista doua radacini compex conjugate.
In literatura sunt mentionate numeroase alte reguli de aplicare a metodei
Lobacevski-Graeffe pentru radacini multiple si complex conjugate. Aplicarea acestora
in algoritm poate imbunatati substantial performantele metodei.
Importanta metodei este data in principal de posibilitatea de determinare a
ordinului de multiplicitate a radacinilor. Cum s-a specificat anterior, dezavantajul
principal consta in posibilitatea aparitiei unor numere foarte mari prin ridicari
succesive la patrat, conducand la depasire de registru, ceea ce limiteaza precizia.
Pn ( z ) = ( z 2 − p0 z − q0 )Qn − 2 ( z ) + r1 ( p0 − z ) + r0 (3.77)
unde Qn − 2 ( z ) este un polinom de grad n − 2 reprezentand catul impartirii
Qn − 2 ( z ) = rn z n − 2 + rn −1 z n −3 + rn − 2 z n − 4 + ... + rk z k − 2 + ...r4 z 2 + r3 z + r2 (3.78)
iar r1 ( p0 − z ) + r0 este un polinom de gadul intai reprezentand restul impartirii. Daca
p0 si q0 ar avea valorile corecte, impartirea s-ar face exact, restul fiind nul. Prin
urmare, problema se reduce la minimizarea (anularea) coeficientilor restului, r1 si r0 .
Deoarece acesti coeficienti depind de valorile coeficientilor p si q
r0 = r0 ( p, q )
r1 = r1 ( p, q )
ei se pot dezvolta in serie Taylor in jurul unui punct ales initial ( p0 , q0 ) , urmarindu-se
ca in punctul final sa aiba valori cat mai mici, apropiate de zero. Daca alegerea initiala
este suficient de corecta, termenii de ordin superior din serie se pot neglija si se poate
scrie:
∂r ∂r
r0 ( p, q) = r0 ( p0 , q0 ) + 0 ( p − p0 ) + 0 (q − q0 ) = 0
∂p ∂q
(3.79)
∂r1 ∂r1
r1 ( p, q ) = r1 ( p0 , q0 ) + ( p − p0 ) + (q − q0 ) = 0
∂p ∂q
Prin urmare, se pot calcula valorile corecte p si q din sistemul de ecuatii
(3.79) in functie de valorile initiale p0 si q0 si de elementele matricii Jacobiene:
143H
⎡ ∂r0 ∂r0 ⎤
⎢ ∂p ∂q ⎥
J =⎢ ⎥ (3.80)
⎢ ∂r1 ∂r1 ⎥
⎢ ∂p ∂q ⎥
⎣ ⎦
calculate in punctele initiale p0 si q0 .
Intr-adevar, ecuatia (3.79) se poate scrie matricial sub forma:
144H
⎡ ∂r0 ∂r0 ⎤
⎢ ∂p ∂q ⎥ ⎡ p − p ⎤ ⎡ −r ( p , q ) ⎤
⎢ ⎥⋅⎢ 0
⎥ =⎢ 0 0 0 ⎥ (3.81)
⎢ ∂r1 ∂r1 ⎥ ⎣ − 0 ⎦ ⎣ −r1 ( p0 , q0 ) ⎦
q q
⎢ ∂p ∂q ⎥
⎣ ⎦
de unde rezulta noile valori ale lui p si q :
⎡ p ⎤ ⎡ p0 ⎤ −1 ⎡
−r0 ( p0 , q0 ) ⎤
⎢ q ⎥ = ⎢ q ⎥ + J ⋅ ⎢ −r ( p , q ) ⎥ (3.82)
⎣ ⎦ ⎣ 0⎦ ⎣ 1 0 0 ⎦
Deoarece in general nu se pot obtine dintr-un singur pas chiar valorile corecte
ale lui p si q , relatia (3.79) fiind doar aproximativa, procedeul se reia si se obtin prin
145H
1
Uneori se foloseste forma mai simpla si mai naturala r1 z + r0 pentru restul impartirii, dar aceasta
conduce la calcule ceva mai complicate si la relatii de recurenta mai complexe. In unele cazuri ea este
preferabila, dar pentru simplitatea programului am ales forma prezentata.
iteratii valori din ce in ce mai apropiate de cele corecte. Relatia (3.82) este deci 146H
Rezulta:
Pn ( z ) = z n rn + z n −1 (rn −1 − prn ) + z n − 2 (rn − 2 − prn −1 − qrn ) + ...
(3.85)
+ z k (rk − prk +1 − qrk + 2 ) + ... + z (r1 − pr2 − qr3 ) + (r0 − pr1 − qr2 )
Prin identificare relatiei (3.85) cu (3.75) se obtin relatiile de recurenta prin
149H 150H
∂rn ∂an
= =0
∂p ∂p
∂r ∂r
cn ≡ n −1 = p n + rn (3.88)
∂p ∂p
∂r ∂r ∂r
ck +1 ≡ k = rk +1 + p k +1 + q k + 2 , k = 0...n − 2 (3.89)
∂p ∂p ∂p
ck + 2 ck +3
relatiile:
∂r
d 2 ≡ 0 = c2
∂q
(3.91)
∂r1
d3 ≡ = c3
∂q
Intr-adevar, daca derivam relatiile (3.86) in raport cu q si tinem seama de
158H
∂rn ∂an
= =0
∂q ∂q
∂rn −1 ∂an −1
= =0
∂q ∂q
∂rn − 2 ∂r ∂r
dn ≡ = p n −1 + q n + rn (3.92)
∂q ∂q ∂q
∂r ∂r ∂r
dk +2 ≡ k = p k +1 + rk + 2 + q k + 2 , k = 0...n − 2 (3.93)
∂p ∂q ∂q
d k +3 d k +4
d n = an
(3.94)
d k = rk + pd k +1 + qd k + 2 , k = 2...n − 2
Se observa ca relatiile (3.94) si (3.90) sunt similare, astfel ca ck si d k avand
162H 163H
acelasi punct de plecare ( an ) si aceleasi relatii de recurenta, vor avea valori egale,
pentru k = 2...n , ceea ce demonstreaza relatiile (3.91). 164H
radacinile cele mai apropiate de cele determinate de valorile alese initial p0 si q0 , iar
din coeficientii rk se poate determina polinomul cat Qn − 2 ( z ) . Acestuia i se va aplica
din nou procedeul Bairstow daca are grad mai mare de 2, sau se vor calcula prin
formulele analitice radacinile daca gradul sau este 2 sau 1. De remarcat insa ca la
fiecare deflatie a polinomului, deoarece restul impartirii nu este totusi exact zero,
informatia despre radacini din polinomul initial este intr-o oarecare masura alterata in
polinomul cat Qn − 2 ( z ) , astfel ca ultimele radacini gasite pot fi destul de departate de
cele reale. Fenomenul este mai frecvent in cazul radacinilor cu ordin de multiplicitate
peste 3. Aceasta face ca deflatia sa nu fie recomandabila decat pentru un numar redus
de radacini si cu ordin de multiplicitate mic.
O varianta mai corecta de determinare a tuturor radacinilor ar fi deteminarea
intr-o prima faza a intervalelor pe care se afla radacini (prin metoda Lobacevski-
Graffe de exemplu) si apoi aplicarea cate o singura data pe fiecare interval a metodei
Bairstow. In felul acesta erorile aparute la determinare catului Qn − 2 ( z ) nu se propaga
prin folosirea repetata a metodei Bairstow, in schimb este necesara o procedura in doi
pasi, care complica programul.
Programul 8.6 pentru calculul radacinilor reale ale unui polinom prin metoda
Bairstow foloseste relatiile (3.86), (3.90), (3.95)- (3.97) si (3.76). Dupa calculul
169H 170H 171H 172H 173H
j = j + 1;
If@Abs@εpD < ε && Abs@εqD < ε, Break@DD; H∗ Oprirea daca ambii corectori sunt suficient de mici ∗L
p0 = p1; H∗ Noile valori ale sumei si produsului radacinilor devin valori anterioare∗L
q0 = q1; E;
è!!!!!!!!!!!!!!!!!! è!!!!!!!!!!!!!!!!!!
; H∗ Cele 2 radacini ∗L
p1 + p12 + 4 q1 p1 − p12 + 4 q1
x1 = ; x2 =
Una dintre metodele cele mai raspandite si sigure pentru calculul radacinilor
reale sau complexe ale polinoamelor cu coeficienti reali sau complecsi este metoda
Laguerre, care foloseste un singur punct de plecare in planul complex si poate gasi
radacina cea mai apropiata de acesta . Prin alegerea unui numar sufficient de mare de
puncte de start se pot gasi toate radacinile reale sau complexe ale ecuatiei
polinomiale.
Pentru stabilirea relatiilor de aplicare a acestei metode sa pornim de la
expresia scrisa sub forma de produs a polinomului:
n
Pn ( x) = ∏ ( x − xk ) (3.98)
k =1
in care s-a impartit cu coeficientul nenul al termenului cu cea mai mare putere, ceea
ce nu modifica ecuatia Pn ( x) = 0 .
Logaritmul natural al polinomului este:
n
ln Pn ( x) = ∑ ln( x − xk ) (3.99)
k =1
Derivata intai a acestui logaritm o notam cu G si este, conform relatiei precedente
d 1 1 1
ln Pn ( x) = + + ... + ≡G (3.100)
dx x − x1 x − x2 x − xn
iar derivate a doua a logaritmului o notam cu H si este
d2 1 1 1
ln Pn ( x) = + + ... + ≡H (3.101)
( x − x1 ) ( x − x2 ) ( x − xn )
2 2 2 2
dx
Tinand cont de membrul stang al relatiilor (3.100) si (3.101) putem scrie pe
174H 175H
G si pe H sub formele:
P' ( x)
G= n (3.102)
Pn ( x)
P' ( x) Pn' ( x) − Pn ( x) Pn'' ( x)
H= n (3.103)
Pn2 ( x)
Se pot face acum unele aproximari, care chiar daca par fortate intr-o prima
instanta conduc spre un punct mai apropiat de solutie decat punctul ales initiala. Prin
urmare, daca se repeta iterativ procesul, se ajunge din ce in ce mai aproape de solutia
corecta.
Vom presupune ca punctul ales initial se afla la distanta a fata de una din
radacini, sa spunem x1 , si la distante egale b fata de toate celelalte radacini, deci
x − x1 = a, x − xi = b, i = 2,3,..., n (3.104)
Evident aceasta ultima aproximatie este foarte grosiera, ea ar fi adevarata doar
in cazuri exeptionale (celelalte radacini sunt multiple sau plasate pe un cerc in planul
complex), dar va conduce la o aproximare mai buna decat alegerea initiala care nu se
bazeaza pe nici o presupunere.
Introducand relatiile (3.104) in (3.100) si (3.101) rezulta sistemul de ecuatii
176H 177H 178H
⎧ 1 n −1
⎪⎪G = a + b
⎨ (3.105)
⎪H = + 1 n − 1
⎪⎩ a2 b2
Rezolvand acest sistem in raport cu a si b , rezulta corectorul
n
a= (3.106)
G ± (n − 1)(nH − G 2 )
Evident, acesta nu este exact, dar adunat cu vechiul punct ne da o valoare mai
apropiata de radacina decat acesta. Procedeul se repeta iterativ, deci daca la iteratia k ,
aveam valoarea xk aproximand radacini x1 , la iteratia urmatoare avem o valoare mai
apropiata, corectata cu valoarea ak . Considerand xk +1 ≈ x1 , conform relatiei (3.104)
179H
avem
xk +1 = xk − ak (3.107)
Semnul din ecuatia (3.106) se alege astfel incat numitorul sa aiba valoarea cea
180H
intrari:
• Polinomul ale carui radacini se cauta;
• Valoarea maxima a functiei intr-o radacina, ε ;
• Numarul maxim de puncte de start, Nr ;
• Numarul maxim de iteratii admise, Ni ;
Rezulta radacinile reale si complexe, valorea maxima a functiei in aceste
puncte, numarul de puncte de start si numarul total de iteratii folosite.
In acest program s-au exemplificat in plus unele metode care pot fi folosite si
la programele prezentate anterior pentru a asigura gasirea tuturor radacinilor:
• Punctul de plecare se alege aleator intr-un patrat in planul complex cu centrul
in originea axelor si de latura 10. S-a folosit instructiunea Random[ ] care
genereaza un numar aleator intre 0 si 1;
• Dupa o oprire a iteratiilor, se testeaza daca radacina respectiva a mai fost
gasita anterior, cu negatul functiei MemberQ[Xa,x2] care da valoarea logica
True in cazul in care x 2 ∈ X . Deoarece pentru diverse puncte de plecare se
pot obtine valori usor diferite pentru aceeasi radacina (de exemplu 1.1112223
si 1.1112224), se formeaza variabila auxiliara x 2 care trunchiaza radacina x
luandu-se numai trei cifre exacte, si cu ea se formeaza multimea radacinilor
trunchiate Xa . Daca se constata ca radacina trunchiata nu a mai fost gasita, se
introduce in X radacina netrunchiata, taindu-se eventual partea imaginara daca
aceasta este prea mica (insemnand ca radacina este de fapt reala).
• Inainte de afisare, radacinile au fost ordonate crescator folosind functia Sort.
• Intregul proces se reia cu un nou punct de plecare aleator, pana cand numarul
radacinilor gasite este egal cu gradul polinomului.
Programul 8.8. Calculul radacinilor unui polinom prin metoda Laguerre
f@x_D = 4 x10 − 5 x8 − 4 x7 − H6 − 2 IL x5 + 3 x2 + H2 + 3 IL x + 1;
H∗ Polinomul ale carui radacini se cauta ∗L
ε = 10−9; H∗ Eroarea maxima admisa in functie ∗L
Nr = 200; H∗ Nr maxim de puncte de start pentru iteratii ∗L
Ni = 200; H∗ Nr maxim de iteratii la fiecare punct ∗L
A = N@CoefficientList@f@xD, xDD; H∗ Coeficientii polinomului initial ∗L
X = 8<; H∗ Multimea radacinilor ∗L
Xa = 8<; H∗ Multimea radacinilor rotunjite cu 2 cifre ∗L
n = Length@AD − 1; H∗ Gradul polinomului ∗L
j = 0; H∗ Nr de puncte de start ∗L
i = 0; H∗ Nr total de iteratii ∗L
WhileALength@ XD < n, H∗Repeta pana cand nr radacinilor este egal cu gradul polinomului∗L
j++;
If@j > Nr, Print@"Peste ", Nr, " de incercari"D; Break@DD;
H∗Daca sunt prea multe incercari iese∗L
x1 = 10 HH Random@D − 0.5L + I H Random@D − 0.5LL; H∗ Puncte de start complexe aleatoare ∗L
ForAk = 1, k ≤ Ni, k++, H∗ Iteratiile pentru fiecare punct de start ∗L
i++;
If@Abs@f@x1DD < ε, Break@DD; H∗ Se intrerup daca functia e suficient de mica ∗L
k=1
fd@x1D
k=1
f@x1D
G= ;
i fd@x1D z
ij y2 fdd@x1D z y
H= jjj z − z;
kk f@x1 D { f@x1D {
è!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
n
G − Hn − 1L Hn H − G2L
a1 = ;
è!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
; H∗ cele 2 posibilitati de alegere a corectorului ∗L
n
G + Hn − 1L Hn H − G2L
a2 =
If@Abs@a1D <= Abs@a2D, a = a1, a = a2D; H∗ Se alege cel care are numitorul mai mare ∗L
x1 = x1 − a; H∗ Noua valoare a radacinii dupa corectie ∗L
E;
x2 = AbsA NA10−2 RoundA102 x1EEE; H∗ Radacina rotunjita cu doua cifre ∗L
If@! MemberQ@ Xa, x2D, H∗ Testare daca radacina trunchiata a mai fost gasita ∗L
AppendTo@ Xa, x2D; If@Abs@Im@x1DD > ε, AppendTo@X, x1D, AppendTo@ X, Re@x1DDD;D;E;
H∗ Daca radacina rotunjita nu este in lista Xa,
Taylor a functiei din membrul stang in jurul unui punct intr-un spatiu n-dimensional.
n
∂Fi (x)
Fi (x + δ x) = Fi (x) + ∑ δ x + 0 (δ x) 2 , i = 1, 2,..., n (4.3)
j =1 ∂x j
δ x = −J −1 ⋅ F(x) (4.6)
Metoda se aplica iterativ, astfel ca la iteratia k+1 se obtine noul vector
radacina:
x k +1 = x k + δ x k (4.7)
Convergenta este foarte rapida, ordinul de convergenta fiind 2, dar numai daca
alegerea initiala este suficient de apropiata de solutia corecta, in caz contrar metoda
fiind sau slab convergenta sau chiar divergenta. Deoarece alegerea initiala presupune
atatea valori cate ecuatii sunt in sistem, ea este uneori mult mai dificila decat in cazul
unidimensional. Aceasta limiteaza utilizarea metodei Newton–Raphson in cazul
sistemelor de ecuatii neliniare, existand o serie de metode alternative care pot fi
aplicate cu succes in diverse situatii.
Capitolul 5
Derivarea numerica
5.1 Derivarea directa
⎧π , k = 0 (5.5)
⎪
α k = ⎨π
⎪⎩ 2 , k ≠ 0
Aceasta relatie nu este insa practica deoarece necesita o integrare numerica,
introducand erori suplimentare si consumand timp de calcul. Coeficientii dezvoltarii
(5.3) se pot calcula insa si fara a fi necesara integrarea, tinand seama de relatia de
190H
1 N ⎡ i ( n + m )⎛⎜ k − 12 ⎞⎟ πN ⎤ 1 N ⎡ i ( n − m )⎛⎜ k − 12 ⎞⎟ πN ⎤
∑ Re ⎢e
2 k =1 ⎢⎣
⎝ ⎠
⎥ + ∑ Re ⎢ e
2
⎝ ⎠
⎥
⎥⎦ k =1 ⎢⎣ ⎥⎦
S1 S2
1 ⎡⎢ i ( n + m ) 2πN 1 − ei ( n + m )π ⎤
⎥
S1 = Re e π
2 ⎢ i ( n+m) ⎥
⎣ 1− e N
⎦
π
i(n+m)
Impartind la e 2N
se poate obtine la numitor un sinus, si tinand cont ca
i ( n + m )π
e = (−1) n + m , rezulta:
⎡ ⎤
1 ⎢ i 1 − (−1) n + m ⎥
S1 = Re ⎢ ⎥ (5.9)
2 ⎢ 2 sin(n + m) π ⎥
⎣ 2N ⎦
Similar se obtine si celalalt termen:
⎡ ⎤
1 ⎢ i 1 − (−1) n − m ⎥
S 2 = Re ⎢ ⎥ (5.10)
2 ⎢ 2 sin(n − m) π ⎥
⎣ 2N ⎦
paranteza dreapta avem un numar pur imaginar iar a doua suma se poate
calcula din termenul final al relatiei (5.8) in care exponentul e nul, suma totala
194H
N
fiind deci ;
2
c) Daca n ≠ m , si prima si a doua suma sunt nule conform relatiilor (5.9) si 195H
(5.10), in care in parantezele dreapte avem numere pur imaginare, deci suma
196H
N −1
f ( xk ) = ∑ cnTn ( xk ) (5.11)
n =0
∑
k =1
f ( xk )Tm ( xk ) = ∑∑ cnTn ( xk )Tm ( xk ) =
k =1 n = 0
N −1 ⎧ Nc0 , m = 0
N
⎪
∑ cn ∑ Tn ( xk )Tm ( xk ) = ⎨ N
n=0 k =1 ⎪⎩ 2 cm , m ≠ 0
Coeficientii dezvoltarii vor fi deci:
1 N
c0 =
N
∑ f ( x )T ( x )
k =1
k 0 k (5.12)
2 N
cm = ∑ f ( xk )Tm ( xk ), m = 1, 2,..., N − 1
N k =1
(5.13)
2 N ⎧ ⎡⎛ 1 ⎞ π ⎤⎫ ⎡ ⎛ 1⎞π ⎤
cm = ∑ f ⎨cos ⎢⎜ k − ⎟ ⎥ ⎬ cos ⎢ m ⎜ k − ⎟ ⎥, m = 1, 2,..., N − 1 (5.14)
N k =1 ⎩ ⎣⎝ 2 ⎠ N ⎦⎭ ⎣ ⎝ 2⎠ N⎦
Aceasta relatie defineste asa-numita transformare cosinus discreta si pentru
calculul sau exista si metode rapide bazate pe transformata Fourier rapida (FFT).
Pentru a nu fi necesare doua formule (adica (5.12) si (5.13)) pentru calculul 202H 203H
N −1
1
f ( x) ≈ ∑ cnTn ( x) + c0 (5.15)
n =1 2
in care toti coeficientii, inclusiv c0 , se calculeaza cu aceeasi relatie (5.13), dar se tine 205H
seama ca din aceasta relatie c0 rezulta de doua ori mai mare decat din (5.12); de 206H
N −1
1
f '( x) = ∑ cnTn' ( x) + c0 (5.17)
n =1 2
Aceste forme au dezavantajul ca trebuiesc cunoscute si derivatele
polinoamelor Chebyshev, ceea ce consuma timp suplimentar. Exista insa posibilitatea
ca aceste derivate ale polinoamelor sa se exprime prin relatii de recurenta in functie de
polinoamele Chebashev nederivate, de care se presupune ca se dispune deja pentru
calculul coeficientilor cn .
Se pot demonstra urmatoarele relatii:
d
Tn ( x) = nU n −1 ( x) (5.18)
dx
1
Tn ( x) = [U n ( x) − U n − 2 ( x) ] (5.19)
2
Prima relatie se demonstreaza prin calcul direct:
d n sin( n arccos x)
cos(n arccos x ) = =
dx 1 − x2
sin(n arccos x) sin( n arccos x)
=n =n = nU n −1 ( x)
1 − [cos(arccos x)]2 sin(arccos x )
A doua relatie se demonstreaza pe baza identitatii trigonometrice:
1
cos a sin b = [sin(a + b) − sin(a − b) ]
2
Notand θ = arccos x si alegand a = nθ , b = (n − 1)θ se obtine succesiv:
1
cos nθ sin θ = [sin(n + 1)θ − sin(n − 1)θ ]
2
1 ⎧ sin [ (n + 1)θ ] sin [ (n − 1)θ ] ⎫
cos( n arccos x ) = ⎨ − ⎬=
2⎩ sin θ θ ⎭
1 ⎧ sin [ ( n + 1) arccos x ] sin [ (n − 1) arccos x ] ⎫
= ⎨ − ⎬
2 ⎩ sin(arccos x) sin(arccos x) ⎭
obtinandu-se relatia (5.19). 213H
d
Tn +1 ( x) = (n + 1)U n ( x)
dx
d
Tn −1 ( x) = (n − 1)U n − 2 ( x)
dx
Tn'+1 ( x) Tn'−1 ( x)
2Tn ( x) = − (5.20)
n +1 n −1
Aceasta relatie este fundamentala pentru metodele spectrale, permitand
calculul prin recurenta al coeficientilor seriilor derivate.
Astfel, se pot exprima derivatele polinoamelor Chebyshev din relatia (5.16) in 216H
Din (5.22)si (5.23) se observa ca la termenul in Tn' ( x) din suma din stanga
220H 221H
1 1
Tn −1 ( x) si Tn' ( x) , respectiv Tn +1 ( x) si Tn' ( x) sunt , respectiv − , deci inlocuind in
2n 2n
(5.24) obtinem:
225H
b b
cnTn' ( x) = n −1 Tn' ( x) − n −1 Tn' ( x)
2n 2n
Rezulta relatia de recurenta pentru calculul coeficientilor dezvoltarii derivatei:
bn −1 = bn +1 + 2ncn (5.25)
Ei se calculeaza cu conditiile de start cn +1 = 0 si cn = 0 , iar deoarece b0 se
calculeaza din c1 , el rezulta cu o valoare dubla fata de cea normala si trebuie
injumatatit. Se obtine deci formula de interpolare pentru derivata functiei:
N −1
1
f '( x) ≈ ∑ bnTn ( x) + b0 (5.26)
n =1 2
coeficientii fiind calculati prin recurenta cu relatia (5.25). Egalitatea este exacta
226H
2 N x −x x + xmin
cm = ∑ f ( xk max min + max )Tm ( xk ), m = 0, 2,..., N − 1
N k =1 2 2
La calculul functiei de interpolare trebuie facuta trecerea inversa in variabila
polinoamelor Chebyshev, astfel incat formula (5.15) devine: 228H
N −1
x − xmin 1
f ( x) ≈ ∑ cnTn (2 − 1) + c0
n =1 xmax − xmin 2
De asemenea, la calculul functiei de interpolare a derivatei trebuie tinut cont
de factorul care apare la derivarea relatiei de schimbare de variabila (5.27), astfel ca
229H
2 N −1
x − xmin 1
f '( x) ≈
xmax − xmin n =1
∑ bnTn (2
xmax − xmin
− 1) + b0
2
In[1]:= Needs@"Graphics`Colors`"D;
f@x_D = + CosAx2E;H∗Cuprinde functia Runge − interpolarea echidistanta nu converge! ∗L
1
z
2. 2
k { k {
+
Na Na 2 2 Na
j=1
H∗ S−a facut schimbarea de variabila x=y xM−xm + xM+xm pentru extinderea intervalului ∗L
Genereaza p HxL in forma polinomiala dar cu erori mai mari pentru Na mare∗L
n=1 xM−xm 2
‚ Abs@df@r@kDD − dp@r@kDDD;
1 Nm−1
e=
Nm k=0
Print@"Eroare=", eD;
3.5
2.5
1.5
-4 -2 2 4
4
3.5
2.5
1.5
-4 -2 2 4
Figura 5.1 Graficul functiei f ( x) si al polinomului de aproximare p( x)
10
-4 -2 2 4
-5
-10
10
-4 -2 2 4
-5
-10
Figura 5.2 Graficul derivatei analitice a functiei, f '( x) , si al polinomului de
aproximare numerica a derivatei, dp ( x) .
Capitolul 6
Integrarea numerica
b
∫ f ( x)dx
a
(6.1)
∫ f ( x)dx
a
(6.2)
x − xi
b n b n
∫a f ( x ) dx ∑
i =1
f ( xi ∫∏
)
x j − xi
dx (6.5)
a j =1
j ≠i
∫ P ( x) P ( x)w( x)dx = c δ
2
n m n nm (6.8)
a
b b b
∫a
f 2 n −1 ( x) w( x)dx = ∫ Pn ( x)qn −1 ( x) w( x)dx + ∫ rn −1 ( x) w( x)dx
a a
(6.9)
⎡ n −1 ⎤
b b
∫a n n−1
P ( x ) q ( x ) w( x ) dx = ∫a n ⎢⎣∑
P ( x )
k =1
ak Pk ( x) ⎥ w( x)dx =
⎦
n −1 b
= ∑ ak ∫ Pn ( x)Pk ( x)w( x)dx = cn2δ nk = 0
k =1 a
deoarece k ≤ n − 1 , deci k ≠ n .
Relatia (6.9) devine:
238H
b b
∫
a
f 2 n −1 ( x) w( x)dx = ∫ rn −1 ( x) w( x)dx
a
(6.11)
f 2 n −1 ( xi ) = rn −1 ( xi ) (6.13)
Restul rn −1 ( x ) poate fi interpolat Lagrange printr-o relatie de tipul (6.3) si 240H
n n
rn −1 ( x) ∑ rn−1 ( xi ) Li ( x) = ∑ f 2n−1 ( xi ) Li ( x)
i =1 i =1
(6.14)
b n b
b n
∫ f ( x) w( x)dx ∑ f (x ) W
i =1
i i (6.16)
a
unde marimile
b
Wi = ∫ Li ( x) w( x)dx , i = 1, 2,..., n (6.17)
a
f ( n ) (ξ ) n
Rn −1 ( x) = ∏ ( x − xi )
(2n − 1)! i =1
(6.18)
find deci de (2n − 1)!/ n ! = (n + 1)(n + 2)...(2n − 1) ori mai mic. De exemplu, pentru
n = 10 , restul poate fi de 1.4 ×1012 ori mai mic, ceea ce indica o metoda
hipereficienta.
Relatia (6.16) defineste metoda de quadratura Gauss in mod general. Se
248H
g ( x)
f ( x) = (6.20)
w( x)
iar relatia (6.16) devine
249H
b
g ( xi ) n
a
∫ g ( x)dx = ∑
i =1 w ( xi )
Wi
sau se pot lua din tabele. De asemenea, exista tabele si pentru aceste functii pondere.
Se mai poate folosi de asemenea si formula:
P ( x), Pn −1 ( x) An
Wi = n −1 (6.24)
Pn −1 ( xi ) Pn'−1 ( xi ) An −1
unde An si An −1 sunt coeficientii termenilor de grad maxim din polinoamele Pn ( x) ,
respectiv Pn −1 ( x) .
O problema care apare in practica este datorata faptului ca domeniul de
ortogonalitate al polinoamelor Legendre este [ −1,1] . Daca integrala este definita pe
un domeniu oarecare, dar finit, [ a, b ] , trebuie facuta schimbarea de variabila:
b−a b+a
x+ z= (6.25)
2 2
astfel ca formula de cuadratura Gauss Legendre devine:
∫ f ( x)dx = ∑
2 i =1
f⎜
⎝ 2
xi + ⎟Wi
2 ⎠
(6.26)
a
cuadratura Gauss este cea mai eficienta din cate se cunose. Totusi, in anumite cazuri
exista si argumente in favoarea unor alte metode, cum ar fi Clenshaw-Curtis. Astfel,
se pot mentiona urmatoarele:
• Cuadratura Clenshaw-Curtis are formule mult mai simple de calcul a nodurilor
si ponderilor decat Gauss-Legendre si deci erorile introduse de acestea sunt
mai mici la un numar de puncte de esantionare mare;
• In varianta de esantionare Gauss-Lobatto metodele adaptive pot reutiliza
jumatate din punctele anterior calculate la trecerea de la n puncte la 2n puncte
de esantionare.
Aceste argumente sunt importante in special atunci cand trebuiesc efectuate
numeroase cuadraturi pentru rezolvarea unei probleme, cum ar fi in cazul ecuatiilor
integrale si integro-diferentiale, asa cum se va arata mai tarziu.
Pentru prezentarea algoritmului Clenshaw-Curtis se porneste de la exprimarea
functiei de integrat ca o dezvoltare in serie dupa polinoame Chebyshev Tr ( x) de ordin
cel mult n , conform relatiei (5.11) prezentata in capitolul anterior, unde semnul prim
252H
2 n
ar = ∑ f ( xk )Tr ( xk ), r = 0,1,..., n
n k =1
(6.28)
Vom considera in continuare ca esantionarea se face in punctele xk date de
radacinile polinomului Chebyshev de ordinul n , deci
Tn ( xk ) = cos n arccos xk = 0, n arccos xk = (2k − 1)π / 2, k = 1, 2,..n
(2k − 1)π / 2
xk = cos . (6.29)
n
In anumite cazuri se poate considera si esantionarea de tip Lobatto care se face
kπ
in extremele polinomului Chebyshev de ordinul n adica xk = cos . Aceasta
n
metoda are avantajul ca, daca se dubleaza numarul de puncte de esantionare (in cadrul
asa-numitelor metode adaptive de cuadratura), jumatate din punctele obtinute coincid
cu cele vechi si deci valorile respective pot fi reutilizate. Totusi se constata in calcule
ca erorile introduse in schema de cuadratura cu esantionarea in extreme sunt mai mari
decat cele introduse de esantionarea in zerouri astfel ca daca nu se folosesc algoritmi
adaptivi varianta data de relatia (6.29) este mai buna.
254H
1 1 1 1 1
' a T ( x)dx = ' a T ( x)dx = a T ( x)dx + 1 a T ( x)dx (6.30)
n n n
deci problema se reduce la calculul coeficientilor dezvoltarii prin relatia (6.28) si al 257H
∫ T ( x)dx
−1
r cu r = 0,1,..., n se pot calcula analitic cu ajutorul relatiei (5.20). Rezulta
258H
t t
t t
⎡ Tr'+1 ( x) Tr'−1 ( x) ⎤ Tr +1 ( x) Tr −1 ( x) Tr +1 (t ) Tr −1 (t ) (−1)r +1
∫−1Tr (x)dx = −∫1 ⎢⎣ 2(r +1) − 2(r −1) ⎥⎦ dx = 2(r +1) − 2(r −1) = 2(r +1) − 2(r −1) + r2 −1 (6.31)
−1 −1
unde s-a tinut cont ca Tr −1 (−1) = (−1) = (−1) (−1) = (−1) r +1 = Tr +1 (−1) .
r −1 2 r −1
∫−1 f ( x ) dx = − + ∑ ar 2 + ∑ Tr (t ) r −1 r +1 (6.33)
2 4 r =2 r − 1 r =1 2r
in care coeficientii dezvoltarii se cacluleaza cu relatia (6.28) care poate fi explicitata
263H
∫a ⎜ − + ∑ ar 2
f ( x)dx = + ∑ Tr (t ) r −1 r +1 ⎟ (6.35)
2 ⎝ 2 4 r =2 r − 1 r =1 2r ⎠
iar relatia de calcul pentru coeficienti va fi
2 n ⎛ (2k − 1)π / 2 t − a t + a ⎞ r (2k − 1)π / 2
ar = ∑ f ⎜ cos + ⎟ cos , r = 0,1,..., n (6.36)
n k =1 ⎝ n 2 2 ⎠ n
[ −1,1] . In acest caz, tinand cont ca Tr (1) = 1 pentru orice r , pornind direct de la
relatia (6.31) si facand observatia ca termenii cu r impar devin nuli, se obtine
266H
i Na
j y
z
j
j z
z
j
j ‚ A@2 rD + A@0Dz
z
−1
j z
b− a 2
j 1 − H2 rL z
2
j r=1 z
Icc = ;
k {
2 2
Capitolul 7
Ecuatii diferentiale ordinare
7.1 Metoda Euler de ordinul I
k1 = f ( xn , yn ) (7.4)
yn +1 = yn + h k1 (7.5)
k1 = f ( x0 , y0 ) (7.6)
Pasul este dat de
b−a
h= (7.7)
N
unde N este numarul de diviziuni ale intervalului, iar relatiile sunt cu atat mai exacte
cu cat acest numar este mai mare. Intr-adevar, conform relatiei (7.2), eroarea la
272H
⎛ (b − a ) 2 ⎞
fiecare interval este 0 (h 2 ) = 0 ⎜ 2 ⎟ si deoarece erorile se cumuleaza la fiecare
⎝ N ⎠
interval si avem N intervale, eroarea totala este
⎛ (b − a ) 2 ⎞ 1
ε t = N 0 (h 2 ) = 0 ⎜ ⎟ ∼ 0 (h) ∼ (7.8)
⎝ N ⎠ N
serie in punctul xn .
Sa dezvoltam mai intai pe y :
h 2 ''
yn +1 = yn + hy ( xn ) +
'
y ( xn ) + 0 (h3 ) (7.13)
2!
Conform relatiilor (7.1) si (7.4), avem y ' ( xn ) = f ( xn , yn ) = k1 , iar derivata a
276H 277H
b−a
eroarea pe fiecare interval, astfel ca eroarea totala pe N = intervale va fi:
h
1
ε t ∼ h2 ∼ (7.25)
N2
deci mult mai mica (de N ori) decat la metoda de ordinul I.
Clear@"`∗"D;
H∗ Problema Cauchy: y'@xD=f@x,yD ∗L
f@x_, y_D = −y Hx + 1L − Cos@xD;
yi = 1; H∗ Conditia initiala ∗L
xi = 0.2; xf = 4.; H∗ Intervalul ∗L
Np = 100; H∗ Numar de puncte de evaluare ∗L
;H∗ Pasul∗L
xf − xi
h=
Np
y@0D = yi;
Y = 88xi, yi<<; H∗ Lista de interpolare a solutiei ∗L
H∗ membrul drept al ecuatiei ∗L
ForAm = 0, m ≤ Np − 1, m ++,
xm = xi + m h; H∗ Punctul curent pe abscisa ∗L
K1 = f@xm, y@mDD;
K2 = f@xm + h, y@mD + h K1D;
y@m + 1D = y@mD + HK1 + K2L; H∗ Formula Euler cu panta medie ∗L
h
E;
g1 = ListPlot@Y, PlotJoined → True, PlotStyle → BlueD;
Print@YD;
k = w1k1 + w2 k2 .
Daca s-ar folosi mai multe pante, s-ar obtine metode de ordin superior, m ,
printr-o generalizare de tipul:
m
k = ∑ wi ki (7.26)
i =1
b) Fiecare panta se determina din cea precedenta, fiind o aproximare din ce in ce
mai buna a pantei corecte. Astfel, la metoda de ordinul 2, prima panta se
determina direct conform metodei Euler de ordinul 1, prin relatia (7.4) 285H
⎡ i −1 ⎤
ki = f ⎢ xn + α i h, yn + ∑ β ij hki −1 ⎥ (7.27)
⎣ j =1 ⎦
unde i = 1, m, j = 1, i − 1, α1 = β10 = 0 .
In functie de valoarea lui m se obtin metode de diverse ordine, denumite
metode de tip Runge-Kutta. Desigur, pot exista multe metode de acest tip, dar in
practica s-au impus pe scara larga metodele de ordinul 4, abreviate de obicei ca
RK4.
Trebuie observat ca pe masura ce ordinul creste, dezvoltarile in serie Taylor
(7.13) si (7.17) folosite in paragraful precedent pentru gasirea
287H 288H
K4 = f ê. 8x → xm + h, y → y@ mD + h K3<;
2 2
y@ m + 1D = y@ mD + H K1 + 2 K2 + 2 K3 + K4L;
h
ii−1
j x − Y@@j, 1DD yj
z i Np+1 x − Y@@j, 1DD y
z
p@x_D := „ Y@@i, 2DD j
j
j‰
z
z j
j‰ z
z
Np+1
kj=1
z
Y@@i, 1DD − Y@@j, 1DD { j
kj=i+1 Y@@i, 1 DD − Y@@j, 1DD z;
{
i=1
z@x_D = sol;
For@n = 1, n ≤ nl, n++, AppendTo@ert, 8 p@x0 + h1 nD − z@x0 + h1 nD<D;D;
Print@Max@Abs@ertDDD;
H∗ Se afiseaza eroarea absoluta maxima ∗L
Metoda RK4 este inca dominanta in rezolvarea ecuatiilor diferentiale cu
conditii initiale, fiind uneori combinata cu alte metode in cazul problemelor mai
dificile sau care solicita o precizie foarte mare.