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