21.11.2016 Views

Metode_numerice

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

METODE NUMERICE<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

I. ERORI<br />

1. Introducere<br />

Rezolvarea unei probleme presupune:<br />

1) elaborarea algoritmului<br />

2) transpunerea într-un limbaj de programare<br />

3) verificarea rezultatelor (intermediare, finale)<br />

4) precizia rezultatului<br />

Din 4) i din faptul c în memorie reprezentarea informaiilor NU este exact deducem faptul c<br />

rezultatele sufer aproximri.<br />

Definiie. Fie x ∈ R<br />

e x = x − x se numete eroare absolut, iar<br />

ex<br />

ε<br />

x<br />

= se numete eroare relativ.<br />

x<br />

Obs. Se obinuiete i e x = x − x<br />

. Notm x valoarea aproximativ a lui x. Atunci:<br />

ε =<br />

2. Clasificarea erorilor<br />

1 1 1<br />

S = 1 2 + 2 3 + K<br />

⋅ ⋅ + n⋅ ( n + 1)<br />

+ K<br />

x<br />

ex<br />

x<br />

Erorile se pot clasifica astfel:<br />

- erori inerente (ale problemei) – acestea rezult din simplificarea modelului fizic pentru a<br />

putea fi cuprins într-un model matematic<br />

- erori de metod (de trunchiere) – aceste erori provin din metoda matematic utilizat<br />

- erori de rotunjire – acestea provin din datele de intrare/ieire sau la calcule (erori de<br />

operaie)<br />

Exemple:<br />

S se calculeze suma:<br />

Evident<br />

1 1 1<br />

S n<br />

= + + K + suma primilor n termeni,<br />

1⋅ 2 2⋅3 n⋅ ( n + 1)<br />

i evident<br />

Sn<br />

→ S , adic S n este ir convergent cu limita S.<br />

Problema este c în programare nu putem determina limita, ca noiune matematic.<br />

Se poate descrie calculul sumei printr-o formul de recuren:<br />

<br />

1<br />

S1<br />

=<br />

<br />

2<br />

<br />

<br />

1<br />

Sn<br />

= Sn−<br />

1<br />

+ , n ≥ 2<br />

n( n + 1)<br />

Atunci:<br />

Pagina 1din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

1<br />

2<br />

3<br />

4<br />

S<br />

1 2<br />

= S + =<br />

6 3<br />

2 1<br />

1 3<br />

S3 = S2<br />

+ =<br />

12 4<br />

M<br />

1 9<br />

S9 = S8<br />

+ =<br />

90 10<br />

Atunci se poate lua S ≅ S 9 = 0.9<br />

Dar<br />

i<br />

S<br />

n<br />

n<br />

=<br />

n + 1<br />

lim S = 1=<br />

S<br />

n→∞<br />

n<br />

deci eroarea este de 0.1.<br />

Cea mai utilizat metod de rotunjire este rotunjirea prin trunchiere (prin tiere).<br />

Exemplu:<br />

x = 12945.734<br />

Aceast valoare se poate trunchia la:<br />

x = 12940<br />

x = 12945<br />

x = 12945.7<br />

x = 12945.73<br />

dar evident i<br />

x<br />

5<br />

= 12900<br />

În ceea ce privete propagarea erorilor se poate demonstra c lucrând cu valori rotunjite (lucru<br />

obligatoriu când se lucreaz în virgul mobil) pot s apar erori semnificative la rezultate.<br />

Exemplu:<br />

S se calculeze<br />

x = sin(x 0 ) unde x 0 = 25.7 radiani cu eroare absolut de 10 -8<br />

Se poate calcula astfel:<br />

3 5 n 2n+ 1 2n+<br />

3<br />

x0 x0 ( −1)<br />

x0 x0<br />

x − x = sin x0 − ( x0<br />

− + + L + ) ≤ < 10<br />

3! 5! (2n<br />

+ 1)! (2n<br />

+ 3)!<br />

Folosindu-se, în calculul în virgul mobil, 6 cifre pentru mantis i 2 pentru exponent se ajunge la:<br />

sin x 0 ≅ 891.789 !!! evident eronat<br />

Explicaiile acestei aberaii:<br />

- viteza de convergen a seriei folosite<br />

- acumularea erorilor de rotunjire<br />

−8<br />

Pagina 2din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

II. REZOLVAREA ECUAIILOR ALGEBRICE<br />

1. Generaliti<br />

Fie ecuaia f(x) = 0, cu f continu pe intervalul ( a, b)<br />

⊂ R<br />

Un numr real α ∈R<br />

cu f() = 0 se numete rdcin a ecuaiei date.<br />

Definiie:<br />

O ecuaie de forma<br />

P(x) = 0, cu P(x) polinom se numete<br />

ECUAIE ALGEBRIC<br />

n 1 n−1<br />

P x = a ⋅ x + a ⋅ x + ... + a x + a = 0<br />

( )<br />

( x)<br />

n 0 1 n−1<br />

n<br />

P<br />

n<br />

= 0<br />

Dac ecuaia nu poate fi pus sub forma unui polinom se numete<br />

ECUAIE TRANSCENDENT<br />

Exemple de ecuaii transcendente:<br />

x −10 sin x = 0;<br />

x<br />

2 − 2cos x = 0;<br />

lg( x + 5) = cos x;<br />

x<br />

3<br />

+ cos x −1<br />

= 0;<br />

e x + 2 x − 5 = 0;<br />

Observaii:<br />

1. Este cunoscut faptul c pentru n=1 (ecuaie liniar) i n=2 (ecuaie ptratic) exist formule<br />

exacte de rezolvare. Pentru n=3 i n=4 exist formulele Cardano i Ferrari de determinare a<br />

soluiilor. Pentru n>4 nu exist formule de determinare a soluiilor (metode exacte), decât<br />

numai pentru anumite cazuri particulare. De obicei rezolvarea unei ecuaii algebrice pentru<br />

n>4 se face prin metode iterative de calcul.<br />

2. Mai este cunoscut faptul, c orice ecuaie algebric are cel puin o rdcin real sau<br />

complex.<br />

3. La scrierea unei ecuaii în form canonic vom avea aceleai rdcini ca i pentru ecuaia<br />

iniial, îns în acest caz pot s aprea i rdcini suplimentare.<br />

2<br />

2<br />

De exemplu, ecuaia algebric 2x<br />

−1<br />

+ x = 2x<br />

+ 1 −1, poate fi adus la forma canonic:<br />

4 3 2<br />

7x<br />

+ 12x<br />

+ 2x<br />

− 4x<br />

− 5 = 0.<br />

În general astfel de ecuaii nu au rdcini exacte. Din aceast cauz se determin o aproximaie a<br />

rdcinilor, procedând astfel:<br />

a) se separ rdcinile astfel încât un interval s<br />

conin o singur rdcin<br />

b) se îmbuntete aproximaia cât de mult se<br />

poate (sau cere problema)<br />

TEOREM<br />

Dac<br />

f :[ a, b] → R,<br />

continu pe [a, b], are semne<br />

contrare la capetele intervalului, adic<br />

f ( a) ⋅ f ( b) < 0 atunci<br />

∃α<br />

∈ ( a, b)cu f ( α) = 0<br />

adic ecuaia f(x) = 0 are soluie în acest interval.<br />

Pagina 3din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Obs.<br />

1. Dac funcia f este injectiv atunci ∃! α∈ ( a, b) cu f ( α) = 0 rdcin unic<br />

2. Separarea rdcinilor se face, de obicei, astfel:<br />

a. se împarte (a, b) în intervale<br />

a 1 < a 2 < ... < a n<br />

b. se calculeaz f(a 1 ), f(a 2 ), ..., f(a n )<br />

c. în general se utilizeaz metoda înjumtirii intervalului<br />

Izolarea soluiilor. Diverse metode de separare (reper matematic)<br />

Prima etap de rezolvare numeric a ecuaiei f(x)=0 const în separarea rdcinilor, (izolarea<br />

soluiilor), adic în stabilirea intervalelor ce conin o rdcin unic.<br />

Aceast etap poate fi realizat în câteva moduri: separarea grafic, separarea analitic sau<br />

separarea prin metoda încercrilor.<br />

Separarea grafic a rdcinilor<br />

S analizm mai întâi modalitatea grafic de separare a soluiilor.<br />

Luând în consideraie faptul c rdcinile reale ale ecuaiei f(x)=0, nu reprezint altceva decât<br />

abscisele punctelor de intersecie ale graficului funciei y=f(x) cu axa Ox, este destul s construim<br />

graficul funciei f(x) i apoi s separm intervalele care conin exact câte o rdcin. Dac ecuaia<br />

nu are soluii foarte apropiate una de alta, atunci prin aceast metod rdcinile se izoleaz foarte<br />

uor. În practic îns, de cele mai multe ori, întâlnim cazuri când funcia este de o form destul de<br />

complicat pentru a construi graficul ei. În astfel de cazuri, pentru simplificarea construirii<br />

graficului, ecuaia f(x)=0 se înlocuiete cu ecuaia echivalent ei<br />

f 1 (x)=f 2 (x),<br />

unde f 1 (x) i f 2 (x) sunt mai simple decât ecuaia iniial.<br />

Atunci construind graficele funciilor y=f 1 (x) i y=f 2 (x), putem foarte uor izola segmentele sau<br />

intervalele care conin rdcinile, deoarece ele reprezint abscisele punctelor de intersecie ale<br />

acestor grafice ( vezi fig.1).<br />

π/2<br />

ξ<br />

Fig. 1<br />

Exemplu: S se separe grafic rdcinile ecuaiei sin 2x<br />

− ln x = 0 . Construim separat graficele<br />

funciilor y=sin(2x) i y=ln(x). Din grafic rezult c ecuaia are o singur soluie, care aparine<br />

intervalului [1; 1.5].<br />

Pagina 4din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Separarea analitic<br />

În alte cazuri este bine ca separarea grafic s fie însoit de separarea analitic a rdcinilor, care<br />

poate fi realizat prin calcul direct sau aplicând una dintre metodele cunoscute.<br />

Una dintre metodele de separare analitic a rdcinilor se bazeaz pe urmtoarea consecin a<br />

teoremei lui Rolle: între dou rdcini reale consecutive ale ecuaiei f′(x)=0 exist cel mult o<br />

rdcin real a ecuaiei f(x)=0.<br />

Fie x 1


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Separarea prin metoda numeric aproximativ. Algoritmul metodei separrii rdcinilor<br />

S discutm în continuare despre modalitatea de separare a intervalelor ce conin rdcini,<br />

aplicabil atât pentru rezolvarea ecuaiilor algebrice cât i pentru cele transcendente.<br />

Problem: Fie este dat funcia f(x)=0 – o funcie continu, monoton cresctoare sau descresctoare<br />

pe un segment oarecare [a, b] i care are semne diferite la capete, adic f(a)⋅f(b)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

2. Rezultate generale privind ecuaiile algebrice<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Fie<br />

P(x) = a 0 x n + a 1 x n-1 + ... + a n-1 x + a n = 0 cu ai<br />

∈R, a0<br />

≠ 0<br />

Un numr real α se numete rdcin simpl dac P( α ) = 0 i P '( α) ≠ 0<br />

Un numr real α se numete rdcin multip de ordin k dac<br />

( k −1)<br />

( k<br />

P( α) = P '( α) = L = P ( α) = 0 i P ) ( α) ≠ 0<br />

TEOREMA fundamental a algebrei.<br />

Orice ecuaie algebric de grad n are exact n rdcini.<br />

TEOREM<br />

Dac<br />

α = α1 + i ⋅ α2 cu P( α) = 0atunci<br />

P( α ) = 0 undeα = α1 −i<br />

⋅ α2<br />

Concluzii:<br />

1. rdcinile complexe sunt în numr par<br />

2. o ecuaie algebric de grad impar are cel puin o rdcin real<br />

TEOREM<br />

Toate rdcinile x 1 , x 2 , ..., x n ale unei ecuaii algebrice se afl în interiorul cercului cu centrul în<br />

origine i de raz<br />

α<br />

R = 1+<br />

unde<br />

a<br />

α = max a1 , a2<br />

, L , an<br />

Demonstraie<br />

a 0 x n = P(x) - (a 1 x n-1 + ... + a n ), de unde rezult<br />

|a 0 x n | |P(x)| + | a 1 x n-1 |+ ... + |a n |, deci<br />

n<br />

x −1<br />

n<br />

|P(x)| |a 0 x n | - (| a 1 |•|x n-1 |+ ... + |a n |) |a 0 |•|x n | - • (|x n-1 |+ ... + 1) = a0<br />

x −α<br />

><br />

x −1<br />

><br />

α<br />

( a0<br />

− ) ⋅ x<br />

x −1<br />

Dac alegem x astfel ca<br />

0<br />

{ }<br />

n<br />

a<br />

0<br />

α<br />

≥<br />

x −1<br />

astfel încât paranteza s devin pozitiv, deducem<br />

0<br />

1 β<br />

= 1 +<br />

r an<br />

α<br />

x > 1+<br />

a<br />

va rezulta c P(x)>0 deci x NU mai poate fi rdcin. De aici rezult c toate posibilele rdcini<br />

îndeplinesc condiia:<br />

α<br />

x<br />

j<br />

≤ 1 + , ∀ j = 1, n<br />

a<br />

În mod similar se obine i urmtorul rezultat:<br />

Dac a n 0 i = max {|a 0 |, |a 1 |, ..., ||a n-1 }, toate rdcinile ecuaiei se afl în exteriorul cercului cu<br />

centrul în origine i de raz r dat de:<br />

0<br />

Pagina 7din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Demonstraie<br />

Notm<br />

1<br />

x = i prin înlocuire se obine:<br />

y<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

n−1<br />

n<br />

1 1 1 a0 + a1 y + L + an−<br />

1y + an<br />

y Q( y)<br />

P( x)<br />

= a0 + a<br />

n 1<br />

+ L + a<br />

n 1<br />

n−1<br />

+ an<br />

= =<br />

−<br />

n n<br />

y y y y y<br />

Rdacinile ecuaiei<br />

1 β<br />

Q(y) = 0 sunt y y<br />

j<br />

< 1 + , ∀ j = 1, n<br />

j<br />

= , j = 1, n iar din teorema anterioar tim c<br />

x<br />

an<br />

adic:<br />

1 1 , de unde x<br />

j<br />

r<br />

x < r<br />

<<br />

j<br />

j<br />

(-R, 0) (-r, 0) (0, r) (0, R)<br />

Exemplu<br />

Fie ecuaia algebric<br />

x 5 -5x 4 +15x 3 -25x 2 +26x-12 = 0<br />

Se calculeaz<br />

= max(5, 15, 25, 26, 12) = 26<br />

α 26<br />

R = 1+ = 1+ = 27<br />

a 1<br />

0<br />

= max(1, 5, 15, 25, 26) = 26<br />

1 β 26 19 6<br />

= 1+ = 1 + = ,deci r =<br />

r a 12 6 19<br />

n<br />

Rezolvând ecuaia cu metodele clasice rezult:<br />

x1 = 1, x2 = 1+ i 2, x3 = 1− i 2, x4 = 1+ i 3, x5<br />

= 1−<br />

i 3<br />

vom observa c toate rdcinile sunt în intervalul calculat.<br />

III. METODE DE APROXIMARE A RDCINILOR UNEI ECUAII ALGEBRICE SAU<br />

TRANSCENDENTE<br />

1. Generaliti<br />

Fie<br />

f(x) = 0, f:(a, b) R, continu pe intervalul (a, b)<br />

Vom presupune c pe intervalul respectiv exist o unic rdcin α ∈ ( a, b)<br />

În ceea ce privete aprecierea erorii de determinare a rdcinii se poate demonstra urmtoarea<br />

TEOREM<br />

Fie α ∈ ( a, b)cu f ( α) = 0 i fie α0 ∈ ( a, b)<br />

Dac f este derivabil pe (a, b) i ∃ µ > 0cu f '( x) > µ , ∀x ∈( a, b)<br />

rezult<br />

f ( α0)<br />

α −α0<br />

≤<br />

µ<br />

Demonstraie<br />

Fie α < α0<br />

. Din teorema lui Lagrange rezult<br />

Pagina 8din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

∃c ∈( α, α0)cu f ( α0) − f ( α) = ( α0<br />

−α) ⋅ f '( c)<br />

Dar f() = 0, deci<br />

f ( α ) = α −α<br />

⋅ f '( c)<br />

de unde<br />

0 0<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

f ( α0) f ( α0) α − α<br />

0<br />

= ≤ ,deoarece µ ≤ f '( x ) , ∀x ∈ ( a , b ) ceea ce arat c eroarea de<br />

f '( c)<br />

µ<br />

apreciere a soluiei poate fi oricât de mic.<br />

2. Metoda înjumtirii intervalului (metoda biseciei)<br />

Fie f:[a, b] R, continu pe intervalul (a, b), cu f(a)f(b)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Pseudocod<br />

citeste a, b, , f<br />

cât_timp (f((a+b)/2)0 i b-a>) execut<br />

{<br />

dac f(a)•f((a+b)/2)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

APLICAREA METODEI BISECIEI LA AFLAREA TUTUROR SOLUIILOR UNEI ECUAII NELINIARE<br />

Rezolvarea ecuaiilor neliniare cu ajutorul calculatorului prevede urmtorii pai:<br />

• Selectarea intervalelor ce conin soluii separate.<br />

• Aplicarea metodei respective de gsire a soluiei în fiecare interval, ce conine o soluie seperat<br />

Algoritmul separrii soluiilor poate fi urmtorul:<br />

Fie dat ecuaia f(x) = 0. Presupunem c funcia f(x) este continu i graficul ei este reprezentat în<br />

figura urmtoare:<br />

Vom începe cu un interval destul de mare [a,b]. Alegem un pas suficient de mic h i începând din<br />

captul a vom calcula valorile funciei la capetele tuturor segmentelor de lungime h. Dac funcia<br />

f(x) capt valori de semn opus la capetele segmentului, atunci înseamn c acest interval conine<br />

cel puin o soluie a ecuaiei f(x)=0. Din grafic observm c soluiile x 1 , x 2 , x 3 i x 4 aparin unor<br />

astfel de intervale de lungime h, iar la capetele fiecrui interval, funcia f(x) are valori de semn<br />

opus. Capetele acestor intervale le vom memora într-un tablou.<br />

În continuare vom aplica metoda biseciei pe fiecare interval ce conine o soluie separat a ecuaiei<br />

f(x) = 0.<br />

Exerciii: aplicai metoda biseciei pentru ecuaiile<br />

e -x + x 2 –2 = 0<br />

ln x – x +1.8 =0<br />

x cos(x) – sin(x) = 0<br />

3. Metoda coardei<br />

Fie f:[a, b] R, continu pe intervalul (a, b), cu f(a)f(b)0 i f(b)0<br />

0<br />

a<br />

ξ<br />

b<br />

f ''( x) > 0, ∀x ∈ ( a, b)<br />

"adun apa"<br />

f(b)<br />

B<br />

Pagina 11din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Ducem coarda AB.<br />

tiind c ecuaia dreptei care trece prin dou puncte A(x 1 , y 1 ) i B(x 2 , y 2 ) este<br />

y2 − y1<br />

y − y1 = ( x − x1<br />

) i c, în cazul nostru punctele sunt A(a, f(a)) i B(b, f(b)), obinem<br />

x2 − x1<br />

x − a y − f ( a)<br />

=<br />

b − a f ( b) − f ( a)<br />

Intersectând aceast dreapt cu dreapta y=0 vom obine<br />

f ( a)<br />

f ( a)<br />

x1<br />

= a − ( b − a)<br />

sau, notând h1<br />

= − ( b − a)<br />

f ( b) − f ( a)<br />

f ( b) − f ( a)<br />

x 1 =a+h 1<br />

Pseudocod<br />

citeste a, b, , f //expresia funciei f o dm explicit<br />

f(a)<br />

x1 execut<br />

{<br />

dac f(a)f(x1)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

writeln('<br />

METODA COARDEI');<br />

writeln(' a ':12,' b');<br />

writeln('======================================================');<br />

nr_pasi:=0;<br />

x1:=a-f1(a)/(f1(b)-f1(a))*(b-a);<br />

while f1(x1)>eps do<br />

begin<br />

nr_pasi:=nr_pasi+1;<br />

if f1(a)*f1(x1)0 i f ''( ) > 0 a fix<br />

2<br />

a + b<br />

dac f ( a) ⋅ f ''( ) < 0 bfix<br />

2<br />

Exemplu:<br />

S se determine soluia ecuaiei<br />

2x 3 -6x 2 -x+3 = 0 din intervalul [0, 1]<br />

Se observ, din calcul, faptul c<br />

f(0) = 3 i f(1) = -2, deci funcia are semne diferite la capetele intervalului.<br />

Pseudocod<br />

citeste a, b, , f<br />

dac f(a)f''((a+b)/2)>0 atunci<br />

{ fix


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Program coarda2;<br />

var a,b,eps,y,x0,x1,fix:real;<br />

nr_pasi:integer;<br />

function f5(x:real):real;<br />

begin<br />

f5:=x*x*x*x-x*x*x+x*x+2*x-6<br />

end;<br />

function f5secund(x:real):real;<br />

begin<br />

f5secund:=12*x*x-6*x+2<br />

end;<br />

function f2(x:real):real;<br />

begin<br />

f2:=x*ln(x)-1<br />

end;<br />

function f2secund(x:real):real;<br />

begin<br />

f2secund:=1/x<br />

end;<br />

function f3(x:real):real;<br />

begin<br />

f3:=x*x+ln(x)-4<br />

end;<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

function f3secund(x:real):real;<br />

begin<br />

f3secund:=2-1/(x*x)<br />

end;<br />

function f4(x:real):real;<br />

begin<br />

f4:=2/3*sqrt(x*x+9)-x<br />

end;<br />

function f4secund(x:real):real;<br />

begin<br />

f4secund:=6/((x*x+9)*sqrt(x*x+9))<br />

end;<br />

function f1(x:real):real;<br />

begin<br />

f1:=2*x*x*x-6*x*x-x+3<br />

end;<br />

function f1secund(x:real):real;<br />

begin<br />

f1secund:=12*x-12<br />

end;<br />

begin<br />

write('limita inferioara a=');readln(a);<br />

write('limita superioara b=');readln(b);<br />

write('precizia E=');readln(eps);<br />

write('f(x)=');readln(functia);<br />

clrscr;<br />

writeln('[a,b]=[',a:5:1,',',b:5:1,'] E=',eps:10:8);<br />

writeln('<br />

METODA COARDEI');<br />

writeln(' x0 ':12,' x1 fix');<br />

writeln('======================================================');<br />

nr_pasi:=0;<br />

if f1(a)*f1secund((a+b)/2)>0<br />

then<br />

begin<br />

fix:=a; x0:=b<br />

end<br />

else<br />

begin<br />

fix:=b; x0:=a<br />

end;<br />

x1:=x0-f1(x0)/(f1(x0)-f1(fix))*(x0-fix);<br />

while abs(x1-x0)>eps do<br />

begin<br />

nr_pasi:=nr_pasi+1;<br />

x0:=x1;<br />

x1:=x0-f1(x0)/(f1(x0)-f1(fix))*(x0-fix);<br />

writeln(x0:12:8,x1:12:8,'x0-x1=':8,abs(x0-x1):12:8,' ',fix:4:2)<br />

end;<br />

y:=x1;<br />

writeln('------------------------------------------------------');<br />

writeln('SOLUTIA APROXIMATIVA DUPA ',nr_pasi,' PASI ESTE y=',y:12:8);<br />

repeat until keypressed<br />

end.<br />

Pentru exemplul de mai sus se obin<br />

y 0.70710678 27 pai înjumtire<br />

y 0.70710678 6 pai coarda1<br />

y 0.70710678 7 pai coarda2<br />

y 0.70710678 4 pai tangenta<br />

Pagina 14din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

4. Metoda tangentei (NEWTON - RAPHSON)<br />

Fie f:[a, b] R, continu pe intervalul (a, b), cu f', f'' semn constant pe [a, b]<br />

y<br />

A(a, f(a))<br />

f(a)<br />

f(a)>0<br />

f''(x)>0, x din [a, b]<br />

0<br />

a=x 0 x 1 x 2 ξ<br />

f(b)<br />

x<br />

B(b, f(b))<br />

i fie x 0 = a astfel încât<br />

f(x 0 )•f"(x 0 )>0<br />

atunci, scriind ecuaia tangentei la curba în punctul x 0 , vom obine<br />

y - y 0 = f'(x 0 )(x - x 0 )<br />

i intersectând aceast dreapta cu dreapta<br />

y = 0<br />

vom avea<br />

f ( x0)<br />

x1 = x0<br />

−<br />

f '( x0)<br />

i procedând analog pentru punctul x 1 obinut, apoi în continuare:<br />

f ( x1<br />

)<br />

x2 = x1<br />

−<br />

f '( x1<br />

)<br />

f ( x2)<br />

x3 = x2<br />

−<br />

f '( x2)<br />

...<br />

f ( xn−<br />

1)<br />

xn<br />

= xn−<br />

1<br />

− (**)<br />

f '( x )<br />

n−1<br />

În mod analog se deduce modul de calcul i dac<br />

graficul funciei este<br />

y<br />

f(a)<br />

0<br />

B(b,f(b))<br />

f(b)<br />

a ξ x 2 x 1 b=x 0<br />

A(a, f(a))<br />

caz în care x 0 = b.<br />

Exemplu:<br />

S se determine soluia ecuaiei<br />

x 3 +x 2 -2x-2 = 0 din intervalul (1, 2)<br />

Se observ, din calcul, faptul c<br />

f(1) = -2 i f(2) = 6, deci funcia are semne diferite la capetele intervalului.<br />

Pagina 15din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Pseudocod<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

citeste a, b, , f //expresia funciei f o dm explicit<br />

a+b<br />

dac f(a)f(---)>0 atunci<br />

2<br />

x0


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

begin<br />

write('limita inferioara a=');readln(a);<br />

write('limita superioara b=');readln(b);<br />

write('precizia E=');readln(eps);<br />

writeln('[a,b]=[',a:5:1,',',b:5:1,'] E=',eps:10:8);<br />

writeln('<br />

METODA TANGENTEI');<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

writeln(' x0 ':12,' y');<br />

writeln('======================================================');<br />

nr_pasi:=0;<br />

if f1(a)*f1secund((a+b)/2)>0<br />

then x0:=a else x0:=b;<br />

repeat<br />

nr_pasi:=nr_pasi+1;<br />

y:=f1(x0)/f1prim(x0);<br />

x0:=x0-y;<br />

writeln(x0:12:8,abs(y):12:8)<br />

until abs(y) 0 => k a este rdcina ecuaiei x k − a = 0<br />

Conform metodei Newton-Raphson avem<br />

f '( x)<br />

= k ⋅ x<br />

k− 1 ><br />

0<br />

f ''( x)<br />

= k ⋅(<br />

k −1)<br />

⋅ x<br />

k−2<br />

> 0, ∀x<br />

∈(0,<br />

∞)<br />

Graficul funciei<br />

f ( x)<br />

= x<br />

k − a este<br />

y<br />

0<br />

Y( k a ,0)<br />

x<br />

deci ecuaia are soluie unic<br />

α ∈ R, α > 0<br />

A(0,-a)<br />

Pagina 17din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Aplicând formula tangentelor (**) se obine<br />

k<br />

xn−<br />

1<br />

− a<br />

xn<br />

= x<br />

n−1 − , n = 1,2,Κ<br />

k−1<br />

k ⋅ xn−<br />

1<br />

sau transformând<br />

1 <br />

a <br />

xn<br />

= (<br />

k −1)<br />

xn−<br />

1<br />

+ , = 1,2,Κ<br />

1 n<br />

k −<br />

k<br />

xn−<br />

1 <br />

Pentru k=2 se obine rdcina de ordinul 2<br />

x<br />

n<br />

iar pentru k=3<br />

x<br />

n<br />

=<br />

1<br />

2<br />

<br />

x<br />

n−<br />

1 <br />

= 2x<br />

3<br />

a <br />

1<br />

+ ,<br />

n = 1,2,Κ<br />

xn−<br />

1 <br />

n−<br />

a <br />

1<br />

+ , = 1,2,Κ<br />

2 n<br />

xn−<br />

1 <br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

numit i formula lui HERO<br />

Obs. Se poate demonstra c doar pentru x 0 > 0 procesul este convergent.<br />

Metoda mixt (aplicarea simultan a metodei coardelor i tangentelor). Reper matematic.<br />

Metoda corzilor i metoda tangentelor ne dau valorile aproximative ale rdcinii ξ din ambele pri<br />

(prin adaos i prin lips). De aceea ar fi mai raional s le folosim simultan, caz în care precizarea<br />

rdcinii are loc mai rapid.<br />

Fie dat ecuaia f(x)=0, rdcina ξ care este deja separat i se afl în segmentul [a,b]. În plus mai<br />

sunt îndeplinite condiiile urmtoare: f(a)⋅f(b)0; f''(x)>0 (fig.4)<br />

2) f'(x)0; f''(x)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

y<br />

B<br />

y<br />

A<br />

f(b)<br />

f(a)<br />

a=x 0 x 1<br />

⎺x 1 ⎺x 0=b<br />

0<br />

f(a)<br />

ξ ⎺x 1 ⎺x 0=b x<br />

0<br />

a=x 0 x 1 x 2 ξ<br />

x<br />

f(b)<br />

A<br />

B<br />

Fig. 6 Fig. 7<br />

Îns în toate cazurile, rdcina real ξ a funciei f(x) este cuprins între valorile aproximative ale<br />

rdcinilor aflate în urma aplicrii simultane a ambelor metode. Mai precis, se respect inegalitatea:<br />

a < x < ξ < x b ,<br />

i i<br />

<<br />

unde x i<br />

– aproximaia prin lips, iar x i<br />

– aproximaia prin adaos.<br />

Calculele pot fi efectuate în urmtoarea ordine.<br />

Cazul I:<br />

Dac f'(x)⋅f''(x)>0 i x∈[a, b], atunci la extremitatea stâng a se aplic metoda coardelor, iar la<br />

extremitatea dreapt b – metoda tangentelor i atunci vom avea:<br />

f ( a) ⋅( b − a)<br />

f ( b)<br />

a1 = a −<br />

, b1<br />

= b − (1)<br />

f ( b) − f ( a)<br />

f ′ ( b)<br />

Acum rdcina adevrat se gsete pe intervalul [a 1 , b 1 ]. Aplicând pe acest interval metoda mixt<br />

vom cpta aproximaiile urmtoare:<br />

f ( a1) ⋅ ( b1 − a1)<br />

f ( b1<br />

)<br />

a2 = a1<br />

−<br />

, b2 = b1<br />

−<br />

f ( b ) − f ( a )<br />

f ′ ( b )<br />

1 1<br />

iar în caz general:<br />

f ( ai ) ⋅ ( bi − ai<br />

)<br />

f ( bi<br />

)<br />

ai+ 1<br />

= ai<br />

−<br />

, bi<br />

+ 1<br />

= bi<br />

− . (2)<br />

f ( bi<br />

) − f ( ai<br />

)<br />

f ′ ( bi<br />

)<br />

Cazul II:<br />

Dac f'(x)⋅f''(x)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Metoda mixt este foarte comod pentru estimarea erorii de calcul. Procesul de calcul se încheie<br />

atunci când se îndeplinete inegalitatea: x − x<br />

1<br />

aproximativ a rdcinii se poate lua valoarea: ξ = ( − )<br />

aproximaiile prin lips i corespunztor prin adaos.<br />

Algoritmul realizrii metodei mixte<br />

i<br />

i<br />

< ε . În acest caz în calitate de valoarea<br />

2 x x i i<br />

, unde valorile x i<br />

i x i<br />

–<br />

1. Definirea funciei f(x), a intervalului de lucru [a, b], a preciziei ε i a<br />

numrului maxim de iteraii nmax.<br />

2. Proces de calcul:<br />

a) iniializarea procesului de calcul:<br />

fa:=f(a); fb:=f(b); niter:=0;<br />

x:=a-(b-a)*fa/(fb-fa); { calcul soluie iniial }<br />

fx:=f(x);<br />

b) Verificare semnelor la capetele intervalului cercetat cu alegerea<br />

aproximaiei iniiale:<br />

dac f(a)*f(x)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

if f(a)*f(x)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

end;<br />

end.<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

writeln('pe intervalul [',x1:0:prec(eps),'; ',x2:0:prec(eps),']');<br />

fa:=f(x1); fb:=f(x2); nit:=0;<br />

x:=x1-(x2-x1)*fa/(fb-fa); { calcul solutie initiala }<br />

fx:=f(x);<br />

if f(a)*f(x)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Dac irul (x k ) este convergent, adic<br />

y=x<br />

k→∞<br />

α = g(α) adic este rdcina cutat.<br />

Geometric se poate reprezenta astfel:<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

∃α<br />

= lim x , atunci, trecând la limit în (***) vom obine<br />

k<br />

y=g(x)<br />

y=x<br />

y<br />

y=g(x)<br />

y<br />

0<br />

x 2<br />

x 1<br />

x 0<br />

x<br />

0<br />

x 1 x 3 ... x 4 x 2<br />

x 0<br />

x<br />

Pseudocod<br />

citeste x0, nr_it, , f //expresia funciei f o dm explicit<br />

x(1)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Exemple:<br />

cox(x)-x = 0 (0, PI/2) =10 -8 y=0.73908514 47 pai<br />

2sin(x)-x = 0 (PI/2, PI) =10 -8 y=1.89549427 44 pai<br />

x 2 +ln(x)-4 = 0 (0.5, 2) =10 -8 y=1.84109706 12 pai<br />

Obs. Aceast ultim ecuaie pus sub forma<br />

x = 4 − ln x<br />

este convergent ctre soluie, dar pus sub forma<br />

2<br />

−<br />

4 x<br />

x = e , ceea ce se poate scrie (în Pascal) x=exp(4-x 2 )<br />

NU este convergent.<br />

Apare deci întrebarea: „cum alegem funcia g astfel încât s fie convergent”?<br />

TEOREM<br />

Fie ecuaia f(x) = 0 (funcia f(x) este continu pe intervalul (a, b) i f(a)f(b)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Nu trebuie uitat c la reprezentarea numerelor în calculator nu putem reine decât un numr finit de<br />

cifre, iar erorile de rotunjire se propag. Se poate ajunge în situaia ca din cauza acestor erori,<br />

determinantul s devin egal cu zero sau s aib o valoare foarte mic în modul. Complexitatea<br />

implementrilor prezente în bibliotecile matematice se datoreaz în mare parte tehnicilor de evitare<br />

a acestei situaii, dar totodat i eforturilor de minimizare a memoriei utilizate i a timpului de<br />

calcul.<br />

<strong>Metode</strong>le de rezolvare a sistemelor de ecuaii liniare sunt de dou tipuri:<br />

• metode directe (sau metode de eliminare sau metode exacte), în care soluia este obinut în<br />

urma unui numr de operaii dinainte cunoscut;<br />

• metode iterative, care se bazeaz pe folosirea unei aproximaii iniiale ce se îmbuntete de<br />

la o etap la alta.<br />

1. <strong>Metode</strong> exacte<br />

a) Metoda lui CRAMER<br />

Metoda este indicat pentru n ≤ 4.<br />

Sistemul este<br />

A⋅X = B cu det(A) ≠ 0, caz în care soluia este unic – sistemul este compatibil<br />

determinat.<br />

Dac det(A) ≠ 0, exist A -1 (inversa matricii), care are proprietatea<br />

A -1 ⋅A = A⋅A -1 = I (matricea unitate)<br />

Atunci, înmulind ecuaia la stânga cu A -1 se obine, pe rând<br />

A -1 |A⋅X = B<br />

A -1 ⋅A⋅X = A -1 ⋅B<br />

I⋅X = A -1 ⋅B<br />

Adic<br />

X = A -1 ⋅B soluia sistemului<br />

Dar<br />

A -1 = 1/∆⋅A * unde A * matricea cu complemeni algebrici<br />

rezult<br />

X = 1/∆⋅A * ⋅B<br />

adic<br />

x ∆<br />

x<br />

M<br />

x<br />

1 1<br />

1 ∆<br />

= ⋅<br />

∆ M<br />

2 2<br />

n<br />

∆<br />

n<br />

unde ∆ i sunt determinanii obinui prin înlocuirea coloanei i cu coloana termenilor liberi.<br />

Deci<br />

∆i<br />

xi<br />

= , ∀ i = 1, n<br />

∆<br />

Exemplu:<br />

2x 1 +x 2 - x 3 = 3 ∆ = –4 ≠ 0<br />

x 1 +x 2 + x 3 = 6 (1, 3, 2) - soluia<br />

-2x 1 +x 2 +3x 3 = 7<br />

uses crt;<br />

const n=3;<br />

type matrice=array[1..n,1..n] of real;<br />

var a, asav:array[1..n,1..n] of real;<br />

b, x:array[1..n] of real;<br />

Pagina 25din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

perm:array[1..n] of integer;<br />

i,j:integer;<br />

det,deta:real;<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

procedure change(var a,b:integer);<br />

var aux:integer;<br />

begin<br />

aux:=a; a:=b; b:=aux;<br />

end;<br />

procedure suma;<br />

var p:real;<br />

sign,i,j:integer;<br />

begin<br />

p:=1;<br />

sign:=0;<br />

for i:=1 to n do<br />

for j:=i to n do<br />

if perm[i]>perm[j] then<br />

sign:=sign+1;<br />

for i:=1 to n do<br />

p:=p*a[i,perm[i]];<br />

if sign mod 2=0 then<br />

det:=det+p<br />

else<br />

det:=det-p;<br />

end;<br />

procedure permuta(n:integer);<br />

var i:integer;<br />

begin<br />

if n=1 then<br />

suma<br />

else<br />

for i:=1 to n do<br />

begin<br />

change(perm[i],perm[n]);<br />

permuta(n-1);<br />

change(perm[i],perm[n]);<br />

end;<br />

end;<br />

procedure refacere;<br />

var i,j:integer;<br />

begin<br />

for i:=1 to n do<br />

for j:=1 to n do<br />

a[i,j]:=asav[i,j];<br />

end;<br />

begin<br />

clrscr;<br />

writeln('Intoduceti matricea A');<br />

for i:=1 to n do<br />

begin<br />

gotoxy(3,i+3); write(#186);<br />

gotoxy(6*n+4,i+3); write(#186);<br />

end;<br />

for i:=1 to n do<br />

for j:=1 to n do<br />

begin<br />

gotoxy(6*j-1,i+3); readln(a[i,j]);<br />

asav[i,j]:=a[i,j];<br />

end;<br />

gotoxy(6*n+10,1); writeln('Introduceti matricea B');<br />

for i:=1 to n do<br />

begin<br />

gotoxy(6*n+10,i+3); write(#186);<br />

gotoxy(6*n+17,i+3); write(#186);<br />

end;<br />

for i:=1 to n do<br />

Pagina 26din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

end.<br />

begin<br />

gotoxy(6*n+11,i+3); readln(b[i]);<br />

end;<br />

for i:=1 to n do<br />

perm[i]:=i;<br />

gotoxy(10,n+5); writeln('Rezultat:');<br />

det:=0;<br />

permuta(n);<br />

deta:=det;<br />

if deta=0 then<br />

writeln('Eroare-det(A)=0')<br />

else<br />

for i:=1 to n do<br />

begin<br />

refacere;<br />

for j:=1 to n do<br />

a[j,i]:=b[j];<br />

det:=0;<br />

permuta(n);<br />

x[i]:=det/deta;<br />

writeln('<br />

end;<br />

b) Metoda (de eliminare) lui GAUSS<br />

x[',i,']=',x[i]:5:2);<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Considerm sistemul:<br />

A⋅X = B cu det(A) ≠ 0<br />

Pentru a descrie mai uor metoda vom considera cazul n = 4. Deci sistemul nostru este:<br />

a 11 x 1 +a 12 x 2 +a 13 x 3 +a 14 x 4 = b 1<br />

a 21 x 1 +a 22 x 2 +a 23 x 3 +a 24 x 4 = b 2<br />

a 31 x 1 +a 32 x 2 +a 33 x 3 +a 34 x 4 = b 3<br />

a 41 x 1 +a 42 x 2 +a 43 x 3 +a 44 x 4 = b 4<br />

Presupunem a 11 ≠ 0, în caz contrar se schimb între ele ecuaiile – soluiile nu se schimb.<br />

(a) Împrim prima ecuaie cu a 11 i se obine:<br />

a12 a13<br />

a14 b1<br />

x1 + x2 + x3 + x4<br />

= adic<br />

a a a a<br />

11 11 11 11<br />

x + a x + a x + a x = b (*) unde<br />

(1) (1) (1) (1)<br />

1 12 2 13 3 14 4 1<br />

a b<br />

a = , b = , j > 1<br />

(1) 1 j (1) 1<br />

1 j<br />

1<br />

a11 a11<br />

(b) Se elimin x 1 din ecuaiile 2, 3, 4 înmulind pe rând ecuaia (*) cu a 21 , a 31 , a 41 i sczând-o din<br />

ecuaiile 2, 3, 4.<br />

Vom obine sistemul:<br />

a x + a x + a x = b<br />

Presupunem<br />

(1) (1) (1) (1)<br />

22 2 23 3 24 4 2<br />

a x + a x + a x = b<br />

(1) (1) (1) (1)<br />

32 2 33 3 34 4 3<br />

a x + a x + a x = b<br />

(1) (1) (1) (1)<br />

42 2 43 3 44 4 4<br />

unde<br />

a = a − a ⋅ a , b = b − a ⋅b i, j ≥ 2<br />

(1) (1) (1) (1)<br />

ij ij i1 1 j i i i1 1<br />

(1)<br />

a22 ≠ 0. Se repet etapele (a) i (b) pentru sistemul obinut. Se obine:<br />

x + a x + a x = b unde<br />

(2) (2) (2)<br />

2 23 3 24 4 2<br />

dup pasul (b) se obine sistemul<br />

(2) (2) (2)<br />

a33 x3 + a34 x4 = b3<br />

unde<br />

(2) (2) (2)<br />

a x + a x = b<br />

43 3 44 4 4<br />

a<br />

a = , b = , j > 2<br />

(1) (1)<br />

(2) 2 j (2) b2<br />

2 j (1) 2 (1)<br />

a22 a22<br />

a = a − a ⋅ a , b = b − a ⋅b i, j ≥ 3<br />

(2) (1) (1) (2) (2) (1) (1) (2)<br />

ij ij i2 2 j i i i2 2<br />

Pagina 27din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Analog se va obine:<br />

x + a x = b unde<br />

(3) (3)<br />

3 34 4 3<br />

apoi, eliminând x 3<br />

(3) (3)<br />

a x = b unde<br />

Acum:<br />

x<br />

44 4 4<br />

(3)<br />

4 (4)<br />

4<br />

b<br />

(3) 4<br />

a44<br />

a<br />

a = , b = , j > 3<br />

(2) (2)<br />

(3) 3 j (3) b3<br />

3 j (2) 3 (2)<br />

a33 a33<br />

a = a − a<br />

3<br />

⋅a3 i, j ≥ 4<br />

(3) (2) (2) (3)<br />

ij ij i j<br />

b<br />

= = apoi se calculeaz pe rând:<br />

x = b − a ⋅ x<br />

(3) (2)<br />

3 3 34 4<br />

x = b − a ⋅ x − a ⋅ x<br />

(2) (2) (2)<br />

2 2 24 4 23 3<br />

x = b − a ⋅ x − a ⋅ x − a ⋅ x<br />

(1) (1) (1) (1)<br />

1 1 14 4 13 3 12 2<br />

În general, pentru un sistem<br />

A⋅X = B cu det(A) ≠ 0<br />

dup k transformrise obine un sistem echivalent:<br />

A (k) ⋅X = B (k) , cu A (1) =A, B (1) =B<br />

iar pentru k ≥ 2 elementele se calculeaz astfel:<br />

<br />

<br />

( k −1)<br />

aij<br />

i ≤ k −1<br />

( k ) <br />

aij<br />

= 0 i ≥ k, j ≤ k −1<br />

<br />

( k −1)<br />

<br />

a<br />

( k −1) i, k −1<br />

( k −1)<br />

aij − ⋅ a<br />

( 1) k 1, j<br />

i,<br />

j k<br />

k − −<br />

≥<br />

<br />

ak<br />

−1, k −1<br />

( k −1)<br />

bi<br />

i ≤ k −1<br />

( k ) <br />

( k −1)<br />

bi<br />

= ( k −1) ai, k −1<br />

( k −1)<br />

bi<br />

− ⋅b ( k 1) k −1<br />

i ≥ k<br />

−<br />

ak<br />

−1, k −1<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Exemplu:<br />

x 1 +2x 2 -x 3 +2x 4 =2<br />

2x 1 -x 2 +3x 3 -x 4 =-1<br />

x 1 +3x 2 +x 3 +x 4 =4 care are soluia (1, 2, -1, -2)<br />

-x 1 +2x 2 +4x 3 +x 4 =-3<br />

Metoda eliminrii a lui Gauss const în a obine zerouri succesiv, întâi pe prima coloan (sub<br />

coeficientul a 11 ), apoi pe a doua coloan (sub coeficientul a 22 )¸ s.a.m.d., pe ultima linie a matricei A<br />

rmânând doar coeficientul a nn (evident modificat de operaiile de eliminare anterioare). Aceasta<br />

revine la a reduce matricea A la o matrice superior triunghiular, iar sistemul la forma<br />

a 11 a 12 . . . a 1n x 1 b 1<br />

0 a (1) 22 . . . a (1) 2n x 2 b (1) 2<br />

0 0 . . .<br />

0 0 0 . . .a (i-1) ij . . . a (i-1) in ⋅ x i = b (i-1) i<br />

0 0 0 0<br />

. . .<br />

0 0 0 0 0 . . . a (n-1) nn x n b (n-1) n<br />

Indicii superiori indic etapa în care a fost obinut elementul. Pentru a obine zerourile de sub<br />

diagonala principal, se folosesc operaii simple de înmulire a unei linii cu un multiplicator i de<br />

Pagina 28din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

scdere din alt linie. Spre exemplu, pentru a obine zerouri pe prima coloana, din linia i se scade<br />

prima linie înmulit cu multiplicatorul m i1 , obinându-se<br />

a i1 (1) = a i1 - m i1 a 11 = 0 de unde se deduce m i1 = a i1 /a 11<br />

Repetând procedeul pentru i = 2, n, se obin elemente nule pe coloana întâi în aceast prim etap.<br />

Evident, pentru a putea opera, trebuie ca a 11 ≠ 0. Mai mult, se recomand ca a 11 s fie în modul cât<br />

mai mare posibil, deoarece în acest mod, erorile de rotunjire sunt reduse. Elementul a ii plasat pe<br />

diagonala principal se numete pivot. Obinerea unui pivot cu modul cât mai mare este posibil<br />

prin schimbri de linii i coloane care nu afecteaz zerourile deja produse, adic pivotul se poate<br />

alege dintre elementele de sub i/sau la dreapta poziiei de pe diagonala principal a pivotului. În<br />

funcie de numrul de elemente dintre care este selectat, pivotul poate fi parial, când se alege cel<br />

mai mare în modul dintre elementele de pe coloana pivotului, sub diagonala principal, sau total,<br />

când se alege cel mai mare în modul dintre toate elementele coninute în linii i coloane care,<br />

interschimbate, nu modific zerourile deja obinute.<br />

Pseudocod<br />

citete n, a(i,j), i=1,n, j=1,n+1<br />

pentru i=1, n execut<br />

{<br />

schimb(i, cod)<br />

dac cod0 atunci scrie „sistem incompatibil sau nedetrminat”; exit<br />

redus(i)<br />

}<br />

rezolv<br />

scrie x(i), i=1,n<br />

procedura maxim(i, k0)<br />

//k0 – furnizeaz rangul ecuaiei cu coeficientul lui x i cel mai mare în<br />

// valoare absolut<br />

{<br />

m


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

}<br />

a(i, i)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

{ ecuatiile de Rang i+1,i+2,...,n }<br />

Var t:Real;<br />

Rang,j:Integer;<br />

Begin<br />

Maxim(i,Rang);<br />

If a[Rang,i]=0<br />

Then Cod:=1<br />

{ daca coeficientul Maxim este 0=>toti sint =0 deci }<br />

{ sistemul nu se poate rezolva (pivotul = 0) }<br />

else<br />

{ se face schimbarea ecuatiilor i cu Rang }<br />

Begin<br />

Cod:=0;<br />

For j:=i To n+1 Do<br />

Begin<br />

t:=a[Rang,j];<br />

a[Rang,j]:=a[i,j];<br />

a[i,j]:=t<br />

End<br />

End;<br />

End;<br />

Procedure Redus(i:Integer);<br />

Var j,k:Integer;<br />

Begin<br />

{ imparte ecuatia i cu a[i,i] }<br />

For j:=i+1 To n+1 Do a[i,j]:=a[i,j]/a[i,i];<br />

a[i,i]:=1;<br />

{ transforma toti coeficientii de deasupra diagonalei }<br />

For k:=i+1 To n Do<br />

Begin<br />

For j:=i+1 To n+1 Do a[k,j]:=a[k,j]-a[i,j]*a[k,i];<br />

{ si ii anuleaza pe cei de sub diagonala }<br />

a[k,i]:=0<br />

End<br />

End;<br />

Procedure Rezolv;<br />

{ calculeaza solutiile prin eliminare inversa }<br />

Var i,j:Integer;<br />

s:Real;<br />

Begin<br />

x[n]:=a[n,n+1];<br />

For i:=n-1 DownTo 1 Do<br />

Begin<br />

s:=0;<br />

For j:=i+1 To n Do s:=s+a[i,j]*x[j];<br />

x[i]:=a[i,n+1]-s<br />

End<br />

End;<br />

Begin<br />

ClrScr;<br />

Write('dimensiune sistem:');ReadLn(n);<br />

For i:=1 To n Do<br />

Begin<br />

For j:=1 To n Do<br />

Begin<br />

Write('a[',i,',',j,']='); ReadLn(a[i,j])<br />

End;<br />

Write('b[',i,']=');ReadLn(a[i,n+1])<br />

End;<br />

ClrScr;<br />

WriteLn('Sistemul initial');<br />

ScrieMat;<br />

Ch:=ReadKey;<br />

DetA:=1;<br />

For i:=1 To n Do<br />

Begin<br />

Schimb(i,Cod);<br />

If Cod0<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Pagina 31din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Then<br />

Begin<br />

WriteLn('!!!!!');<br />

WriteLn('sistem INCOMPATIBIL sau NEDERMINAT');<br />

Halt(1)<br />

End<br />

Else Redus(i);<br />

WriteLn('!!! PASUL:',i);<br />

ScrieMat;<br />

Ch:=ReadKey<br />

End;<br />

WriteLn;<br />

ClrScr;<br />

WriteLn('*** SOLUTIA ***');WriteLn;<br />

Rezolv;<br />

For i:=1 To n Do WriteLn('x[',i:1,']=',x[i]:8:3); WriteLn;<br />

End.<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Pentru a observa influena alegerii pivotului asupra preciziei rezultatelor, refacem calculele de mai<br />

sus fr a mai schimba liniile 2 cu 3 pentru a aduce valoarea 1.75 pe poziia pivotului în etapa a<br />

doua. Se va obine :<br />

i soluiile<br />

Pagina 32din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Se observ apariia unor valori diferite, comparativ cu valorile obinute în cazul anterior.<br />

Numrul de operaii necesare pentru obinerea soluiei prin procedeul de eliminare gaussian se<br />

calculeaz uor. Evident, nu lum în considerare i operaiile legate de permutarea elementelor în<br />

vederea gsirii pivotului parial sau total, deoarece acestea depind de fiecare matrice în parte. De<br />

regul, se consider c împrirea reprezint o singur “operaie”, în timp ce o adunare i o<br />

înmulire formeaz împreun tot o “operaie” (aproximativ acelai timp de calcul pe calculator).<br />

Amintindu-ne c operaiile se efectueaz cu elementele matricei extinse A0, de dimensiuni n · (n +<br />

1), vom avea de efectuat într-o etap s, n-s împriri pentru a obine multiplicatorii m i,s . Numrul de<br />

adunri i înmuliri este egal cu produsul numrului de valori luate de indicii i, j, adic (n-s)(n+1-s).<br />

Rezult numrul de operaii la eliminarea Gauss<br />

Acest numr este foarte mic (începând cu n >= 3) fa de n·n! operaii cerute de regula lui Cramer<br />

(cu determinanii calculai dup minori). La aceste operaii se adaug înc aproximativ<br />

1+(n-1)+n(n-1)/2 = n 2 /2+n/2<br />

operaii pentru retrosubstituire. Rezult numrul total de operaii pentru eliminarea gaussian<br />

2. <strong>Metode</strong> iterative<br />

Principiul general al metodelor iterative poate fi prezentat prin analogie cu metoda iteraiei simple<br />

de rezolvare a ecuaiei<br />

F(x) = 0<br />

în care ecuaia original este transcris ca<br />

x = f(x)<br />

ce conduce la procedeul iterativ<br />

x k+1 = f(x k )<br />

În cazul sistemelor liniare<br />

A⋅X = B<br />

vom fora o descompunere a matricei A<br />

a) Metoda lui JACOBI (metoda iteraiilor simultane)<br />

Vom considera, ca i pân acum, un sistem de forma<br />

n<br />

<br />

j=<br />

1<br />

a ⋅ x = b , i = 1, n<br />

ij j j<br />

adic A⋅X = B, cu det(A) ≠ 0 – matrice nesingular<br />

Vom presupune c<br />

a ii ≠ 0, i=1, n<br />

Form descompunerea matricei A sub forma<br />

A = D + (-T) + (-S)<br />

adic<br />

a11 a12 L a1<br />

n a 11<br />

0 L 0 0 0 L 0 0<br />

a12 L a1<br />

n <br />

<br />

a21 a22 a<br />

<br />

2n<br />

0 a22<br />

0<br />

<br />

a21 0 0<br />

<br />

0 0 a2n<br />

A <br />

L<br />

<br />

L<br />

<br />

L<br />

<br />

L<br />

= = + +<br />

<br />

M M M M<br />

<br />

<br />

an<br />

1<br />

an2<br />

L an<br />

n 0 0 L ann<br />

a n1 an2<br />

L 0<br />

0 0 L 0 <br />

Pagina 33din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

adic, sub form matricial<br />

(D-T-S)⋅X = B<br />

deci<br />

D⋅X=(T+S) ⋅X + B<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

În acest fel, pentru orice element a ii ≠ 0, i=1, n avem o metod iterativ<br />

n<br />

( k + 1) ( k )<br />

ii i ij j i<br />

j=<br />

1<br />

j≠i<br />

a ⋅ x = − a ⋅ x + b , i = 1, 2, L , n k ≥ 0<br />

cu x (0) i<br />

, i = 1, n aproximaiile iniiale<br />

Se obine metoda iterativ JACOBI<br />

a b<br />

x = − ( ) ⋅ x + , i = 1, 2, L , n k ≥ 0<br />

n<br />

( k + 1) ij ( k ) i<br />

i <br />

j<br />

j=<br />

1 aii aii<br />

j≠i<br />

Pseudocod<br />

citete n, a(i,j), i=1,n, j=1,n+1<br />

citete x(i), i=1,n<br />

pentru k=1, 7 execut //pentru 7 iteraii<br />

{<br />

pentru i=1,n execut<br />

{<br />

y(i)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

For j:=1 To n Do<br />

Begin<br />

Write('a[',i,',',j,']=');ReadLn(a[i,j]);<br />

End;<br />

Write('b[',i,']=');ReadLn(a[i,n+1])<br />

End;<br />

WriteLn('aproximatia initiala');<br />

For i:=1 To n Do<br />

Begin<br />

Write('x[',i,']=');ReadLn(x[i]);<br />

y[i]:=0<br />

End;<br />

WriteLn('SISTEMUL INITIAL SI APROXIMATIA INITIALA');<br />

ScrieMat;<br />

{ vom face 7 iteratii - se poate modifica }<br />

For k:=1 To Nr_Iteratii Do<br />

Begin<br />

{ pentru fiecare ecuatie se face calculul aproximatiei }<br />

For i:=1 To n Do<br />

Begin<br />

y[i]:=a[i,n+1]/a[i,i];<br />

For j:=1 To n Do<br />

If ji Then y[i]:=y[i]-a[i,j]/a[i,i]*x[j];<br />

End;<br />

WriteLn('!!! ITERATIA:',k);ScrieMat;<br />

{ noua aproximatie devine cea curenta }<br />

For i:=1 To n Do x[i]:=y[i];<br />

End;<br />

For i:=1 To n Do Write(x[i]:9:5);<br />

WriteLn;<br />

End.<br />

b) Metoda lui GAUSS-SEIDEL (metoda aproximaiilor succesive)<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Metoda reprezint o îmbuntire a metodei JACOBI în sensul c utilizeaz nu doar aproximaiile<br />

( k )<br />

( k 1)<br />

x pentru calculul lui x +<br />

( k 1)<br />

, ci i componentele x + cu i>j, adic acele componente care au fost<br />

i<br />

deja calculate în aproximaia curent.<br />

În aceste condiii se poate scrie<br />

i<br />

i−1<br />

n<br />

( k + 1) ( k + 1) ( k )<br />

ii i ij j ij j i<br />

j= 1 j= i+<br />

1<br />

L<br />

a ⋅ x = − a ⋅ x − a ⋅ x + b , i = 1, 2, , n k = 1, 2,..., n<br />

deci metoda iterativ GAUSS-SEIDEL se poate descrie prin<br />

a a b<br />

x = − ( ) ⋅ x − ( ) ⋅ x + , i = 1, 2, , n k = 1, 2,..., n<br />

i−1<br />

n<br />

( k + 1) ij ( k + 1) ij ( k ) i<br />

i j j<br />

j= 1 aii j= i+<br />

1 aii aii<br />

L<br />

Pseudocod<br />

citete n, a(i,j), i=1,n, j=1,n+1<br />

citete x(i), i=1,n<br />

pentru k=1, 7 execut //pentru 7 iteraii<br />

{<br />

pentru i=1,n execut<br />

{<br />

y(i)


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

Program GAUSS_SEIDEL;<br />

Const NMax=10;<br />

Nr_Iteratii=10;<br />

Type Matrice=Array[1..NMax,1..NMax+1] Of Real;<br />

Sir=Array[1..NMax] Of Real;<br />

Var a:Matrice;<br />

{ x[i] - aproximatia veche }<br />

{ y[i] - aproximatia noua care se calculeaza }<br />

x,y:Sir;<br />

i,j,k,n:Integer;<br />

Procedure ScrieMat;<br />

Var i,j:0..NMax+1;<br />

Begin<br />

For i:=1 To n Do<br />

Begin<br />

WriteLn;<br />

For j:=1 To n Do Write(a[i,j]:8:3);<br />

Write(a[i,n+1]:10:3);<br />

Write(x[i]:13:5,y[i]:10:5)<br />

End;<br />

WriteLn;WriteLn<br />

End;<br />

Begin<br />

Write('dimensiune sistem:');ReadLn(n);<br />

For i:=1 To n Do<br />

Begin<br />

For j:=1 To n Do<br />

Begin<br />

Write('a[',i,',',j,']=');ReadLn(a[i,j]);<br />

End;<br />

Write('b[',i,']=');ReadLn(a[i,n+1])<br />

End;<br />

WriteLn('aproximatia initiala');<br />

For i:=1 To n Do<br />

Begin<br />

Write('x[',i,']=');ReadLn(x[i]);<br />

y[i]:=0<br />

End;<br />

WriteLn('SISTEMUL INITIAL SI APROXIMATIA INITIALA');<br />

ScrieMat;<br />

{ vom face 7 iteratii - se poate modifica }<br />

For k:=1 To Nr_Iteratii Do<br />

Begin<br />

{ pentru fiecare ecuatie se face calculul aproximatiei }<br />

For i:=1 To n Do<br />

Begin<br />

y[i]:=a[i,n+1]/a[i,i];<br />

For j:=1 To i-1 Do<br />

y[i]:=y[i]-a[i,j]/a[i,i]*y[j];<br />

For j:=i+1 To n Do<br />

y[i]:=y[i]-a[i,j]/a[i,i]*x[j];<br />

End;<br />

WriteLn('!!! ITERATIA:',k);ScrieMat;<br />

{ noua aproximatie devine cea curenta }<br />

For j:=1 To n Do x[j]:=y[j];<br />

End;<br />

For i:=1 To n Do Write(x[i]:9:5); WriteLn;<br />

End.<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

Obs. Cele dou metode iterative dau rezultate (sunt convergente) doar pentru sisteme în care<br />

matricea coeficienilor (a ij ) este de un tip special i anume coeficienii diagonali sunt dominani.<br />

Exemplu:<br />

10x 1 + x 2 +2x 3 = 13<br />

5x 2 +3x 3 = 8<br />

-x 1 + x 2 +7x 3 = 7<br />

Pagina 36din 37 Data: 01.06.2009


Pregtire lot naional<br />

Alba Iulia, 18-25 mai 2006<br />

prof. Marinel erban<br />

Liceul de Informatic “Gr. C. Moisil” Iai<br />

(0)<br />

cu aproximaia iniial x<br />

(0) (0)<br />

= 2, x = 3, x = 5 furnizeaz<br />

1 2 3<br />

SISTEMUL INITIAL SI APROXIMATIA INITIALA<br />

10.000 1.000 2.000 13.000 2.00000 0.00000<br />

0.000 5.000 3.000 8.000 3.00000 0.00000<br />

-1.000 1.000 7.000 7.000 5.00000 0.00000<br />

!!! ITERATIA:1<br />

10.000 1.000 2.000 13.000 2.00000 -0.00000<br />

0.000 5.000 3.000 8.000 3.00000 -1.40000<br />

-1.000 1.000 7.000 7.000 5.00000 1.20000<br />

!!! ITERATIA:2<br />

10.000 1.000 2.000 13.000 -0.00000 1.20000<br />

0.000 5.000 3.000 8.000 -1.40000 0.88000<br />

-1.000 1.000 7.000 7.000 1.20000 1.04571<br />

!!! ITERATIA:3<br />

10.000 1.000 2.000 13.000 1.20000 1.00286<br />

0.000 5.000 3.000 8.000 0.88000 0.97257<br />

-1.000 1.000 7.000 7.000 1.04571 1.00433<br />

!!! ITERATIA:4<br />

10.000 1.000 2.000 13.000 1.00286 1.00188<br />

0.000 5.000 3.000 8.000 0.97257 0.99740<br />

-1.000 1.000 7.000 7.000 1.00433 1.00064<br />

!!! ITERATIA:5<br />

10.000 1.000 2.000 13.000 1.00188 1.00013<br />

0.000 5.000 3.000 8.000 0.99740 0.99962<br />

-1.000 1.000 7.000 7.000 1.00064 1.00007<br />

!!! ITERATIA:6<br />

10.000 1.000 2.000 13.000 1.00013 1.00002<br />

0.000 5.000 3.000 8.000 0.99962 0.99996<br />

-1.000 1.000 7.000 7.000 1.00007 1.00001<br />

!!! ITERATIA:7<br />

10.000 1.000 2.000 13.000 1.00002 1.00000<br />

0.000 5.000 3.000 8.000 0.99996 0.99999<br />

-1.000 1.000 7.000 7.000 1.00001 1.00000<br />

!!! ITERATIA:8<br />

10.000 1.000 2.000 13.000 1.00000 1.00000<br />

0.000 5.000 3.000 8.000 0.99999 1.00000<br />

-1.000 1.000 7.000 7.000 1.00000 1.00000<br />

!!! ITERATIA:9<br />

10.000 1.000 2.000 13.000 1.00000 1.00000<br />

0.000 5.000 3.000 8.000 1.00000 1.00000<br />

-1.000 1.000 7.000 7.000 1.00000 1.00000<br />

!!! ITERATIA:10<br />

10.000 1.000 2.000 13.000 1.00000 1.00000<br />

0.000 5.000 3.000 8.000 1.00000 1.00000<br />

-1.000 1.000 7.000 7.000 1.00000 1.00000<br />

1.00000 1.00000 1.00000<br />

Bibliografie<br />

1. MATEESCU G-D, MATEESCU I-C, Analiz numeric, Editura Petrion, 1995<br />

2. COMAN, FRENTIU – Analiz numeric, 1992<br />

3. BERBENTE C, MITRAN S, ZANCU S – <strong>Metode</strong> <strong>numerice</strong>, Editura Tehnic, 1997<br />

4. *** - Materiale preluate de pe Internet<br />

Pagina 37din 37 Data: 01.06.2009

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!