Documente Academic
Documente Profesional
Documente Cultură
neliniare
Cap. 6. REZOLVAREA NUMERICĂ A ECUAȚIILOR ŞI
SISTEMELOR DE ECUAȚII ALGEBRICE NELINIARE
Se consideră o ecuație având forma generală:
f(x)=0 , (6.1)
cu f : I ⊂ R → R. În particular, f poate fi polinom sau poate fi adus la o
formă polinomială, dar de interes sunt şi ecuațiile transcendente.
Rezolvarea ecuației (6.1) înseamnă găsirea zerourilor funcției f,
adică a valorilor x = c care satisfac (6.1).
Metodele de rezolvare numerică a ecuațiilor algebrice
neliniare se împart în trei categorii:
a) metode de separare sau localizare a soluțiilor ecuației (6.1), adică
de izolare a unor subdomenii ale domeniului de definiție I, care să
conțină câte unul din zerourile funcției f (a se vedea şirul lui Rolle);
b) metode de determinare, cu o precizie a priori fixată, a unei soluții
care a fost izolată în prealabil, pornind de la o valoare aproximativă
a acesteia, în cele ce urmează vor fi prezentate două astfel de
metode, referite şi ca metode de partiționare a intervalului [L1],
[M3], [N1], [S1];
c) metode de determinare a tuturor soluțiilor, aplicabile, de regulă,
în cazul în care f este un polinom.
În continuare sunt prezentate elemente legate de noțiunea de
soluție aproximativă. Se presupune că c este valoarea exactă a unei
soluții a ecuației (6.1), iar c' o valoare aproximativă a acestei soluții.
Soluția aproximativă poate fi definită în două moduri:
1) o valoare x = c' cu proprietatea | c' − c| < ε x , cu ε x > 0 şi f(c) = 0;
2) o valoare x = c' cu proprietatea | f(c') | < ε f , cu ε f > 0 şi f(c) = 0.
Cele două moduri de definire sunt ilustrate în fig.6.1 şi respectiv fig.6.2.
90
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
Fig.6.1. Soluția aproximativă definită în primul mod.
Fig.6.2. Soluția aproximativă definită în cel de‐al doilea mod.
6.1. Metode de calcul al unei soluții reale a unei ecuații
algebrice neliniare
Într‐un număr mare de aplicații este necesară determinarea
unei soluții reale a ecuației (6.1), separată în prealabil în intervalul
[a,b]:
f(x) = 0, x ∈ [a, b] . (6.1.1)
În continuare vor fi prezentate două metode de partiționare
a intervalului.
91
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
A. Metoda bisecției (înjumătățirii intervalului) este destinată
rezolvării ecuației (6.1.1), pentru care a fost separată în prealabil o
singură soluție în intervalul [a, b], adică:
f(a) ⋅ f(b) < 0 . (6.1.2)
Se consideră că f este continuă pe intervalul [a, b], iar soluția
în cauză va fi determinată cu erorile admise ε x (pentru soluție) şi ε f
(pentru funcție).
Metoda se bazează pe faptul că, pornind de la intervalul [a,
b], la fiecare pas se restrânge domeniul în care se caută soluția prin
înjumătățirea intervalului de la pasul anterior, până la atingerea
preciziei dorite. Metoda bisecției este o metodă simplă, însă slab
convergentă (de exemplu, [L1]).
Algoritmul metodei bisecției este următorul:
I) Se inițializează limitele intervalului de căutare, “r” şi “s”, cu
valorile limitelor intervalului în care a fost separată soluția:
r0 = a , s0 = b (6.1.3)
(indicele superior corespunde iterației curente).
II) La pasul de calcul k, k = 1, 2, 3, …, este determinată noua
valoare a soluției:
r k −1 + s k −1
xk = . (6.1.4)
2
III) La acelaşi pas k este calculat produsul f(xk) şi f(rk−1), rezultând
noile limite ale intervalului de căutare:
‐ dacă f(x k) ⋅ f(r k−1) < 0, atunci:
r k = r k‐1 şi s k = x k ; (6.1.5)
k k−1
‐ dacă f(x ) şi f(r ) > 0, atunci:
r k = x k şi s k = s k−1 ; (6.1.6)
k k−1
‐ dacă f(x ) şi f(r ) = 0, atunci calculul este terminat şi:
c = x k . (6.1.7)
IV) Procesul de calcul este considerat terminat când sunt
îndeplinite condițiile (6.1.8) şi / sau (6.1.9):
|s k − r k| ≤ ε x ; (6.1.8)
|f(x )| ≤ ε f .
k
(6.1.9)
În fig.6.3 este ilustrată interpretarea geometrică a metodei
bisecției.
92
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
Fig.6.3. Interpretarea geometrică a metodei bisecției.
Exemplul 6.1: Se consideră ecuația:
f(x) = 0, în care f(x) = 2⋅tg x – 10⋅x + 3 ,
pentru care s‐a separat o soluție în intervalul [–1, 1]. Să se determine
soluția ecuației utilizând metoda bisecției, erorile admise fiind ε x =
10‐3 şi ε f = 10‐2.
Soluție: Se parcurg etapele metodei bisecției. Astfel:
I) Se fac inițializările:
r = –1 , s0 = 1 , |r0 – s0| = 2 .
0
Iterația k = 1:
r0 + s0
II) x1 = = 0 ;
2
III) f(x1) = f(0) = 3 ,
f(r0) = f(–1) = 9.885 ,
f(x1) ⋅ f(r0) > 0 ⇒ r1 = x1 = 0 , s1 = s0 = 1 .
IV) Se verifică dacă sunt îndeplinite condițiile de terminare
(6.1.8) şi (6.1.9):
|r1 – s1| = 1 > ε x şi |f(x1)| = 3 > ε f .
Condițiile de terminare nefiind îndeplinite, algoritmul se continuă cu:
Iterația k = 2:
93
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
r 1 + s1
II) x2 = = 0.5 ;
2
III) f(x2) = f(0.5) = –0.9074 ,
f(r1) = f(0) = 3 ,
f(x2) ⋅ f(r1) < 0 ⇒ r2 = r1 = 0 , s2 = x2 = 0.5 .
IV) |r2 – s2| = 0.5 > ε x şi |f(x2)| = 0.9074 > ε f .
Se trece la iterația următoare:
Iterația k = 3:
r2 + s2
II) x3 = = 0.25 ;
2
III) f(x3) = f(0.25) = 1.011 ,
f(r2) = f(0) = 3 ,
f(x3) ⋅ f(r2) > 0 ⇒ r3 = x3 = 0.25 , s3 = s2 = 0.5 .
IV) |r3 – s3| = 0.25 > ε x şi |f(x3)| = 1.011 > ε f .
Prin urmare, algoritmul se continuă.
Iterația k = 4:
r 3 + s3
II) x4 = = 0.375 ;
2
III) f(x4) = f(0.375) = 0.037 ,
f(r3) = f(0.25) = 1.011 ,
f(x4) ⋅ f(r3) > 0 ⇒ r4 = x4 = 0.375 , s4 = s3 = 0.5 .
IV) |r4 – s4| = 0.125 > ε x şi |f(x4)| = 0.375 > ε f .
Se poate observa că erorile au scăzut, însă nu suficient de
mult pentru ca să fie îndeplinite cele două condiții de terminare.
Lăsăm cititorului ca exercițiu continuarea algoritmului până la
îndeplinirea condițiilor (6.1.8) şi (6.1.9).
B. O altă metodă, de regulă mai rapid convergentă decât cea
anterioară, este metoda falsei poziții (cunoscută şi sub denumirile de
metoda coardei, metoda secantei sau metoda împărțirii intervalului
în părți proporționale).
Metoda se bazează pe faptul că, pornind de la intervalul [a,
b], la fiecare pas este restrâns domeniul de căutare a soluției, prin
împărțirea intervalului de la pasul anterior în raportul valorilor
94
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
funcției la capetele intervalului. Interpretarea geometrică a metodei
este dată în fig.6.4, în care coarda are ecuația:
x − a f ( x) − f (a )
= , (6.1.10)
b − a f (b) − f (a)
Fig.6.4. Interpretarea geometrică a metodei falsei poziții.
de unde rezultă abscisa punctului de intersecție cu axa Ox:
a ⋅ f (b) − b ⋅ f (a)
x1 = . (6.1.11)
f (b) − f (a)
Deci se obține următoarea formulare pentru algoritmul
metodei falsei poziții:
I) Se inițializează limitele intervalului curent de căutare, “r” şi
“s”:
r0 = a , s0 = b (6.1.12)
0 0
şi se calculează f(r ) şi f(s ).
II) La un pas oarecare k, k = 1, 2, 3, …, al procesului iterativ de
calcul, este calculată noua valoare a soluției:
r k −1 ⋅ f ( s k −1 ) − s k −1 ⋅ f (r k −1 )
x = k
. (6.1.13)
f ( s k −1 ) − f (r k −1 )
III) La acelaşi pas k este calculată valoarea f(x k), rezultând noile
limite ale intervalului de căutare, r k şi s k, conform relațiilor
(6.1.5) … (6.1.7), împreună cu valorile funcției f(r k) şi f(s k).
IV) Calculul este terminat când sunt îndeplinite condițiile (6.1.8)
şi / sau (6.1.9).
95
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
Exemplul 6.2: Se consideră ecuația de la exemplul 9.1. Să se
rezolve această ecuație utilizând metoda falsei poziții.
Soluție: Se aplică metoda falsei poziții parcurgând etapele
mai sus descrise:
I) Se fac inițializările:
r = –1 , s0 = 1
0
şi se calculează valorile funcției f în r0 şi s0:
f(r0) = f(–1) = 9.885 , f(s0) = f(1) = –3.885 .
Pentru k = 1, 2, 3, …, se repetă etapele II) … IV), până când
condițiile etapei IV) sunt îndeplinite:
Iterația k = 1:
II) Se determină x1 cu formula (6.1.13):
r 0 ⋅ f ( s 0 ) − s 0 ⋅ f (r 0 ) − (−3.885) − 9.885
x = 1
= = 0.4357 .
f ( s 0 ) − f (r 0 ) − 3.885 − 9.885
III) Se determină valoarea funcției f în x1:
f(x1) = f(0.4375) = –0.426 .
Întrucât f(x1) ⋅ f(r0) < 0, din (6.1.5) rezultă:
r1 = r0 = –1 , s1 = x1 = 0.4357
şi valorile corespunzătoare ale funcției f:
f(r1) = f(–1) = 9.855 , f(s1) = f(0.4357) = –0.426 .
IV) Sunt verificate condițiile de terminare a algoritmului:
|r – s | = 1.4357 > ε x , |f(x1)| = 0.426 > ε f .
1 1
Se observă că relațiile (6.1.8) şi (6.1.9) nu sunt satisfăcute, prin
urmare se trece la iterația următoare.
Iterația k = 2:
II) Se determină x2:
r 1 ⋅ f ( s 1 ) − s 1 ⋅ f (r 1 ) − (−0.426) − 0.4357 ⋅ 9.885
x2 = = =
f ( s 1 ) − f (r 1 ) − 0.426 − 9.885 .
= 0.3764.
III) Se determină f(x2):
f(x2) = f(0.3764) = 0.265 .
Deoarece f(x2) ⋅ f(r1) > 0, din (6.1.6) rezultă:
96
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
r2 = x2 = 0.3764 , s2 = s1 = 0.4357 .
f(r2) = f(0.3764) = 0.265 , f(s2) = f(0.4357) = –0.426 .
IV) Sunt verificate condițiile de terminare a calculelor:
|r – s | = 0.0587 > ε x , |f(x2)| = 0.265 > ε f .
2 2
Relațiile (6.1.8) şi (6.1.9) nefiind satisfăcute, se trece la iterația
următoare.
Se poate observa că erorile au scăzut semnificativ, scăderea
lor fiind mai rapidă decât în cazul metodei bisecției, însă încă nu s‐a
ajuns la îndeplinirea condițiilor de terminare a calculelor. Prin
urmare, algoritmul se continuă. Se lasă ca exercițiu pentru cititor
continuarea algoritmului până la obținerea soluției aproximative
dorite.
6.2. Generalități privind soluționarea numerică a sistemelor de
ecuații algebrice neliniare
Un sistem de ecuații algebrice neliniare de ordinul n poate fi
adus întodeauna la forma implicită:
⎧ f 1 ( x1 , x 2 , K , x n ) = 0
⎪ f (x , x ,K, x ) = 0
⎪ 2 1 2 n
⎨ , (6.2.1)
⎪ L
⎪⎩ f n ( x1 , x 2 , K , x n ) = 0
în care funcțiile reale f1, f2, …, fn, de variabile x1, x2, …, xn, sunt
continue pe domeniul de interes.
Prin introducerea notațiilor matriceale:
⎡ x1 ⎤ ⎡ f1 ⎤
⎢x ⎥ ⎢f ⎥
x= ⎢ 2⎥
, f = ⎢ ⎥ ,
2
(6.2.2)
⎢ ... ⎥ ⎢ ... ⎥
⎢ ⎥ ⎢ ⎥
⎣xn ⎦ ⎣ fn ⎦
sistemul poate fi exprimat sub următoarea formă compactă:
f (x) = 0 , f : D ⊂ R n → R n . (6.2.3)
Pot fi utilizate şi forme intermediare exprimate astfel:
f i (x) = 0, i = 1, n . (6.2.4)
97
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
valorile variabilelor) şi εf (pentru valorile funcțiilor).
Metodele se bazează pe înlocuirea exprimărilor implicite
(6.2.1) ale ecuațiilor sistemului cu exprimările explicite echivalente:
98
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
⎧ x1 = g 1 ( x1 , x 2 , K , x n )
⎪x = g (x , x ,K, x )
⎪ 2 2 1 2 n
⎨ , (6.3.1)
⎪ L
⎪⎩ x n = g n ( x1 , x 2 , K , x n )
în care funcțiile g i , i = 1, n , sunt continue în domeniul în care a fost
separată soluția.
Notând:
⎡ g1 ⎤
⎢g ⎥
g = ⎢ 2 ⎥ , (6.3.2)
⎢ ... ⎥
⎢ ⎥
⎣g n ⎦
se obține exprimarea matriceală:
x = g (x) , x ∈ D ⊂ R n , (6.3.3)
cu forma intermediară:
x i = g i (x), i = 1, n . (6.3.4)
Exprimările explicite sunt întotdeauna posibile şi, în plus,
uneori sunt posibile mai multe variante.
În cadrul acestor metode, este prezentat în continuare
algoritmul metodei aproximațiilor succesive în versiunea Jacobi:
I) Se inițializează x cu x0 ∈ D (indicele superior se referă la
iterația curentă):
⎡ x10 ⎤
⎢ 0⎥
x
x = ⎢ 2 ⎥ .
0
(6.3.5)
⎢ ... ⎥
⎢ 0⎥
⎢⎣ x n ⎥⎦
II) La un pas oarecare k, k = 1, 2, 3, …, al procesului iterativ de
calcul, sunt determinate noile valori ale variabilelor:
x ik = g i ( x1k −1 , x 2k −1 , K , x nk −1 ) , i = 1, n . (6.3.6)
III) Calculul este terminat atunci când sunt îndeplinite condițiile
(ambele sau una dintre acestea):
99
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
f i (x k ) ≤ ε f , i = 1, n . (6.3.8)
Condițiile de convergență sunt:
∂g i (x)
< 1 , i, j = 1, n . (6.3.9)
∂x j
Metoda aproximațiilor succesive în versiunea Gauss‐Seidel
diferă de cea anterioară prin relația (6.3.6), care devine:
x ik = g i ( x1k , x 2k , K , x ik−1 , x ik −1 , K , x nk −1 ) , i = 1, n , (6.3.10)
adică apar valorile “noi” ale variabilelor care au fost recalculate deja
la iterația k.
Exemplul 6.3 [P1]: Să se rezolve sistemul algebric neliniar:
⎧2 x12 − x 2 x 3 − 5 x1 + 1 = 0
⎪ 2
⎨ x 2 − 2 x1 − ln x 3 = 0 ,
⎪ 2
⎩ x 3 − x1 x 2 − 2 x 3 − 8 = 0
cu metoda Gauss‐Seidel, cu erorile maxime admise εx = 0,001 şi εf =
0,1, cunoscând că s‐a separat o soluție în domeniul D = [0; 10] × [0;
10] × [1; 10].
Soluție: Se începe cu rescrierea sistemului într‐o formă cu
exprimarea explicită a variabilelor, de forma (6.3.1):
⎧ x1 = 0.5 ⋅ ( x 2 x 3 + 5 x1 − 1)
⎪⎪
⎨ x 2 = 2 x1 + ln x 3 .
⎪
⎪⎩ x 3 = x1 x 2 + 2 x 3 + 8
Iterația k = 0:
⎡10⎤
I)
⎢ ⎥
Se inițializează x, de exemplu cu x = 10 . 0
⎢ ⎥
⎢⎣10⎥⎦
Valorile funcțiilor f1, f2 şi f3 pentru valorile inițiale ale variabilelor
sunt:
f1(x0) = 2⋅102 – 10⋅10 – 5⋅10 + 1 = 51 ,
100
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
f2(x0) = 102 – 2⋅10 – ln 10 = 77.7 ,
f3(x0) = 102 – 10⋅10 – 2⋅10 – 8 = –28 .
Observație: Inițializarea se poate face şi cu alte valori şi se pot
urmări efectele asupra evoluției convergenței procesului de calcul în
funcție de aceste valori inițiale.
Iterația k = 1:
II) Se utilizează formulele (6.3.10):
101
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
= 0.5 ⋅ (3.292 ⋅ 5.89 + 5 ⋅ 4.531 − 1) = 4.53 ,
2 =
x 13 2 ⋅ x113 + ln x 312 = 2 ⋅ 4.53 + ln 5.89 = 3.291 ,
2 − x2 | = |3.291 – 3.292| = 0.001 ≤ ε x ,
| x13 12
3 − x3 | = |5.89 – 5.89| = 0 ≤ ε x .
| x13 12
|f1(x13)| = 0.008 ≤ ε f ,
|f2(x13)| = 0.003 ≤ ε f ,
|f3(x13)| = 0.004 ≤ ε f .
Întrucât erorile calculate sunt mai mici sau cel mult egale cu
erorile maxim admisibile, algoritmul este oprit.
102
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
6.4. Metode de tip Newton
În versiunea clasică a metodei lui Newton sunt utilizate
explicit derivatele parțiale de ordinul I ale funcțiilor f i (x), i = 1, n .
Se presupune că s‐a ajuns la pasul k al procesului iterativ de
calcul, ultima valoare aproximativă a soluției fiind xk−1. Se doreşte
determinarea unei corecții hk −1 care, adăugată la xk−1, să conducă la
soluția exactă c:
c = xk−1 + hk −1 . (6.4.1)
Dezvoltând în serie Taylor funcțiile f i (x), i = 1, n , în
vecinătatea lui xk −1, rezultă:
f i (c) = 0 ⇔ f i (x k −1 + h k −1 ) = 0 ⇔
∂f i (x k −1 ) k −1 ∂f i (x k −1 ) k −1 ∂f (x k −1 ) k −1
f i (x k −1 ) + h1 + h2 + L + i hn +
∂x1 ∂x2 ∂xn
+ L = 0 , i = 1, n .
(6.4.2)
Dacă din această dezvoltare sunt reținuți doar termenii care
conțin derivatele de ordinul I (restul termenilor, cu derivatele de
ordin superior, sunt neglijați), atunci poate fi aproximată acea valoare
a lui hk −1 care nu va mai conduce la soluția exactă c, ci la noua valoare
aproximativă xk a soluției (evident, mai bună decât xk−1, în cazul
convergenței). Prin urmare, relațiile (6.4.2) conduc la sistemul liniar
de ordinul n în necunoscutele h1k −1 , h2k −1 , K , hnk −1 :
103
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
⎧ ∂f 1 k −1 ∂f 1 k −1 ∂f 1 k −1 k −1
⎪ ∂x h1 + ∂x h2 + L + ∂x hn = − f 1 (x )
⎪ 1 2 n
⎪ ∂f 2 k −1 ∂f 2 k −1 ∂f
⎪ h1 + h2 + L + 2 hnk −1 = − f 2 (x k −1 )
⎨ ∂x1 ∂x 2 ∂x n , (6.4.3)
⎪L
⎪
⎪ ∂f n k −1 ∂f n k −1 ∂f n k −1 k −1
⎪ ∂x h1 + ∂x h2 + L + ∂x hn = − f n (x )
⎩ 1 2 n
unde toate derivatele sunt calculate în xk−1.
Introducând matricea Jacobian:
⎡ ∂f 1 ∂f 1 ∂f 1 ⎤
⎢ ∂x L
∂x 2 ∂x n ⎥
⎢ 1 ⎥
⎢ ∂f 2 ∂f 2
L
∂f 2 ⎥
J k −1 = ⎢ ∂x ∂x 2 ∂x n ⎥ , (6.4.4)
⎢ L1 L L L⎥
⎢ ∂f ∂f n ∂f n ⎥
⎢ n L ⎥
⎢⎣ ∂x1 ∂x 2 ∂x n ⎥⎦
sistemul (6.4.3) poate fi rescris sub forma restrânsă:
J k −1 ⋅ h k −1 = −f k −1 . (6.4.5)
Prin urmare, algoritmul versiunii clasice a metodei lui
Newton este:
I) Se inițializează x cu x0 ∈ D (indicele superior corespunde
iterației curente).
II) La un pas oarecare k, k = 1, 2, …, al procesului iterativ de
calcul, se calculează elementele vectorului f k−1 şi matricea J
k−1
pentru x = xk−1.
III) La acelaşi pas se rezolvă sistemul (6.4.5) şi se determină noile
valori ale variabilelor:
x k = x k −1 + h k −1 . (6.4.6)
IV) Calculul este terminat când sunt îndeplinite condițiile (6.4.7)
şi / sau (6.4.8):
hik −1 ≤ ε x , i = 1, n , (6.4.7)
104
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
f i (x k ) ≤ ε f , i = 1, n . (6.4.8)
Exemplul 6.4: Să se rezolve sistemul de ecuații din exemplul
6.3 utilizând metoda clasică a lui Newton, cu erorile maxim admise εx
= 0.01 şi εf = 0.1, cunoscând că a fost separată o soluție în domeniul D
= [0; 10] × [0; 10] × [1; 10].
Soluție: Se parcurg etapele enumerate anterior:
⎡10⎤
I)
⎢ ⎥
Se face inițializarea: x = 10 .
0
⎢ ⎥
⎢⎣10⎥⎦
Iterația k = 1:
II) Se calculează elementele vectorului f 0 = f(x0):
⎡2( x10 ) 2 − x 20 x 30 − 5 x10 + 1⎤ ⎡ 51 ⎤
⎢ ⎥
f 0 = ⎢ ( x 20 ) 2 − 2 x10 − ln x 30 ⎥ = ⎢⎢77.697⎥⎥
⎢ ( x 30 ) 2 − x10 x 20 − 2 x 30 − 8 ⎥ ⎢⎣ − 28 ⎥⎦
⎣ ⎦
şi elementele matricei Jacobian:
⎡4 x10 − 5 − x 30 − x 20 ⎤ ⎡ 35 − 10 − 10 ⎤
⎢ 1 ⎥⎥ ⎢
J = ⎢ −2
0
2 x 20 − 0 = ⎢ − 2 20 − 0.1⎥⎥ .
⎢ x3 ⎥
⎢− 10 − 10 18 ⎥⎦
⎢ − x0
⎣ 2 − x10 2 x 3 − 2⎥⎦ ⎣
0
III) Sistemul (6.4.5) devine:
⎧35h10 − 10h20 − 10h30 = −51
⎪
⎨− 2h1 + 20h2 − 0,1h3 = −77.697 .
0 0 0
⎪
⎩− 10h1 − 10h2 + 18h3 = 28
0 0 0
⎡ − 3.445⎤
⎢ ⎥
Rezolvând sistemul de mai sus, se obține: h = − 4.243 . 0
⎢ ⎥
⎢⎣− 2.716⎥⎦
105
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
⎡6.555⎤
⎢ ⎥
Deci, noile valori ale lui x sunt: x 1 = x 0 + h 0 = 5.757 .
⎢ ⎥
⎢⎣7.284⎥⎦
IV) Întrucât | h10 | = |3.445| > εx , | h20 | = |4.243| > εx , | h30 | = |2.716| >
εx , rezultă că nu sunt îndeplinite condițiile de terminare a calculelor.
Prin urmare, algoritmul se continuă cu iterația următoare:
Iterația k = 2:
II) Se calculează elementele vectorului f 1 = f(x1) şi ale matricei
Jacobian:
⎡2( x11 ) 2 − x 12 x 31 − 5 x11 + 1⎤ ⎡ 12.227 ⎤
⎢ ⎥
f 1 = ⎢ ( x 12 ) 2 − 2 x11 − ln x 31 ⎥ = ⎢⎢ 18.047 ⎥⎥ ,
⎢ ( x 31 ) 2 − x11 x 12 − 2 x 31 − 8 ⎥ ⎢⎣− 7.248⎥⎦
⎣ ⎦
⎡4 x11 − 5 − x 31 − x 12 ⎤ ⎡ 21.22 − 7.284 − 5.757 ⎤
⎢ 1 ⎥
J1 = ⎢ − 2 2 x 12 − 1 ⎥ = ⎢⎢ − 2 11.514 − 0.137⎥⎥ .
⎢ x3 ⎥
⎢− 5.757 − 6.555 12.568 ⎥⎦
⎢ − x1
⎣ 2 − x11 2 x 3 − 2⎥⎦ ⎣
1
III) Sistemul (6.4.5) este particularizat sub forma:
⎧21.22h11 − 7.284h21 − 5.757 h31 = −12.227
⎪
⎨− 2h1 + 11.514h2 − 0.137 h3 = −18.047 .
1 1 1
⎪
⎩− 5.757 h1 − 6.555h2 + 12.568h3 = 7.248
1 1 1
⎡ − 1.498⎤
⎢ ⎥
Rezolvând sistemul rezultă: h 1 = − 1.84 .
⎢ ⎥
⎢⎣− 1.069⎥⎦
⎡5.057 ⎤
⎢ ⎥
Noile valori ale lui x sunt: x 2 = x 1 + h 1 = 3.917 .
⎢ ⎥
⎢⎣6.215⎥⎦
IV) Se poate observa că | h11 | = |1.498| > εx, | h21 | = |1.84| > εx, | h31 | =
|1.069| > εx, deci calculele se continuă cu iterația următoare.
106
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
6.5. Aplicații în Matlab
În Matlab este implementată o variantă a metodei bisecției
sub forma funcției fzero, cu sintaxa următoare (în forma cea mai
simplă):
x = fzero(’func’,x0)
unde func reprezintă numele unei funcții definite de utilizator şi
corespunzătoare membrului stâng al ecuației (6.1) sau sistemului
(6.2.1), x0 este o aproximare inițială a soluției şi x reprezintă soluția,
care poate fi scalar sau vector după cum se rezolvă o ecuație
respectiv un sistem.
Sintaxa funcției fzero poate fi complicată, prin introducerea
unor opțiuni (care controlează inclusiv precizia) conform [P2].
În cele ce urmează este ilustrată aplicarea funcției fzero.
Exemplul 6.5: Să se rezolve ecuația:
x
e – sin(πx) – 3 = 0,
utilizând funcția fzero.
Soluție: Pentru început este definită funcția Matlab f65
(fişierul f65.m):
function f=f65(x);
f=exp(x)-sin(pi*x)-3;
Apoi, este aplicată funcția fzero:
x=fzero(’f65’,0)
Zero found in the interval: [-1.28, 1.28].
x =
1.0476
A fost obținută, deci, soluția aproximativă: x = 1.0476.
În continuare va fi definită o funcție Matlab, denumită
newton (fişierul Matlab newton.m) pentru implementarea
algoritmului versiunii clasice a metodei lui Newton (a se vedea
subcapitolul 6.4):
function [sol,iter]=newton(func,dfunc,x0,eps)
107
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
% functie pentru rezolvarea ecuatiei f(x)=0 cu
% versiunea clasica a metodei Newton
% parametri:
% func - functie definita de utilizator f(x)
% dfunc - functie definita de utilizator
% df(x)/dx
% x0 - aproximatie initiala a solutiei
% eps - precizia
% sol - solutia
% iter - numarul de iteratii
%
% initializari:
iter=0;
x=x0;
aa=feval(func,x)/feval(dfunc,x);
% iteratii:
while abs(aa)>eps,
x1=x-aa;
iter=iter+1;
x=x1;
aa=feval(func,x)/feval(dfunc,x);
end;
% solutia:
sol=x;
În continuare este examplificată aplicarea funcției newton.
Exemplul 6.6: Să se găsească o soluție aproximativă a
următoarei ecuații:
2
⎛ y⎞
⎜ ⎟ − sin( y ) − 0.5 = 0 ,
⎝4⎠
situată în intervalul (–1, 1) , prin versiunea clasică a metodei lui
Newton.
Soluție: Rezolvarea începe cu definirea funcțiile Matlab f66
(fişierul f66.m) pentru membrul stâng al ecuației şi df66 (fişierul
df66.m) pentru derivata membrului stâng al ecuației:
function f=f66(x);
f=(x/4)^2-sin(x)-0.5;
function f=df66(x);
f=x/2-cos(x);
108
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
Urmează aplicarea funcţiei Matlab newton prezentate anterior:
[sol,iter]=newton('f66','df66',0.5,0.001)
sol =
-0.5059
iter =
5
Prin urmare, a fost obținută soluția aproximativă x = –0.5059,
după 5 iterații.
Pentru rezolvarea numerică a ecuațiilor şi sistemelor de
ecuații algebrice neliniare sunt disponibile şi alte funcții Matlab în
toolbox‐uri specifice diverselor aplicații. Spre exemplu, în
Optimization Toolbox este disponibilă funcția fsolve, care
implementează algoritimi bazați pe metoda celor mai mici pătrate.
6.6. Rezumat
Metodele de rezolvare numerică a ecuațiilor algebrice neliniare se
împart în trei categorii:
metode de separare (localizare) a soluțiilor, adică de izolare a
unor subdomenii ale domeniului de definiție care să conțină
câte unul din zerourile funcției;
metode de determinare, cu o precizie a priori fixată, a unei
soluții care a fost izolată în prealabil (metode de partiționare
a intervalului), pornind de la o valoare aproximativă a
acesteia;
metode de determinare a tuturor soluțiilor, aplicabile, de
regulă, în cazul în care funcția este un polinom.
Metoda bisecției se bazează pe faptul că, pornind de la intervalul în
care a fost separată în prealabil o soluție, la fiecare pas se restrânge
domeniul în care se caută soluția prin înjumătățirea intervalului de la
pasul anterior, până la atingerea preciziei dorite. Metoda este simplă,
însă slab convergentă.
Metoda falsei poziții (metoda coardei, metoda secantei, metoda
împărțirii intervalului în părți proporționale) se bazează pe faptul că,
pornind de la intervalul în care a fost separată în prealabil o soluție, la
fiecare pas este restrâns domeniul de căutare a soluției, prin
împărțirea intervalului de la pasul anterior în raportul valorilor
funcției la capetele intervalului. Metoda falsei poziții este de regulă
mai rapid convergentă decât metoda bisecției.
Metodele numerice utilizqte în soluționarea sistemelor de ecuații
algebrice neliniare se împart în două categorii:
109
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații algebrice
neliniare
metode de separare a unei / unor soluții de interes;
metode de determinare, cu o precizie fixată a priori, a unei
soluții separate în prealabil, împărțite în trei clase:
‐ metode bazate pe exprimarea explicită
echivalentă a ecuațiilor sistemului, numite metode
de aproximații succesive, exemple: variantele Jacobi
şi Gauss‐Seidel,
‐ metode care utilizează derivatele parțiale ale
funcțiilor, numite metode de tip Newton,
‐ metode de descreştere (de coborâre, de gradient).
6.7. Probleme propuse
1. Pentru următoarele ecuații să se efectueze câte trei iterații
în cazul a două metode de rezolvare numerică. Erorile admise sunt
ε x = 10 −3 şi ε f = 10 −2 . Să se compare rezultatele obținute:
x −1 x
a) x = 4 + 3 , x ∈ [4, 5] ; b) = 1 , x ∈ [3, 4] ;
x +1 2+4 x
c) x 3 − x − 2 = 0 , x ∈ [1, 2] ; d) x 2 = sin x , x ∈ [0.7, 1] ;
x +1
e) arcsin = x , x ∈ [0, 1.5] ; f) x 5 + 5 x + 1 = 0 , x ∈ [− 1, 0] ;
4
g) x 3 + x = 1000 , x ∈ [9, 10] ;
h) arctgx + acrtg10 x = 0.75 , x ∈ [0, 1] .
2. Să se efectueze câte două iterații ale metodei Newton în
cazul rezolvării următoarelor sisteme. Erorile admise sunt
ε x = 0.01, ε f = 0.1 .
110