Documente Academic
Documente Profesional
Documente Cultură
METODE NUMERICE
ALGORITMI N LIMBAJ C
2006
Cuprins VII
CUPRINS
1. ERORI ............................................................................................................................ 1
1.1. Erori absolute i relative ............................................................................................... 1
1.2. Clasificarea erorilor ..................................................................................................... 2
1.2.1. Erori iniiale ............................................................................................................... 2
1.2.2. Erori de trunchiere ...................................................................................................... 3
1.2.3. Erori de metoda ........................................................................................................... 4
1.2.4. Erori de calcul ............................................................................................................. 4
1.3. Propagarea erorilor......................................................................................................... 7
1.4. Grafuri de procedur ...................................................................................................... 9
1.5. Reguli pentru mrirea preciziei calculelor ................................................................... 11
1.6. Aplicaii ....................................................................................................................... 11
Rezolvarea problemelor moderne de o mare complexitate din tiinele aplicate, cum ar fi:
astronomia, geodezia, electronica etc., nu se poate realiza fr calculator asistat de un pachet
de metode numerice matematice.
Rezultatele numerice obinute n acest gen de aplicaii, cu ajutorul calculatorului, necesit
o analiz a erorii, datorit faptului c datele iniiale pentru determinarea numeric a rezultatului
sunt obinute de obicei prin observaii sau msurtori afectate de erori i operaiile numerice
efectuate de calculator sunt aproximative atunci cnd numerele nu au o reprezentare intern
exact. Msurtorile experimentale nu pot fi realizate exact, prin repetarea lor obinndu-se
rezultate diferite. Ca urmare, datele obinute prin msurtori conin erori care se reflect n
rezultatul final. Calculatoarele numerice au o reprezentare intern exact a numerelor ntregi
pentru care realizeaz calcule exacte i o reprezentare intern aproximativ a numerelor reale
care influeneaz exactitatea rezultatului.
Determinarea unor mrimi n problemele tehnice se face de obicei cu finalitate practic.
Aici apar erorile inevitabile ale procesului de execuie sau fabricaie; pentru fiecare
component exist tolerane, adic limite ale erorilor ntre care componenta poate fi utilizat.
Studiul acestui capitol se refer la erorile ce apar n operaiile aritmetice realizate de
calculator. Se definesc tipurile de erori ce apar n procesele electronice i se expliciteaz
funciile eroare.
______________________________
*) Bibliografie: [6],[7],[12],[21],[22]
2 Metode numerice n electronic
Din cele trei valori care intervin n definiia erorii cunoatem numai valoarea
aproximativ. Valoarea adevrat nu o cunoatem, deoarece dac am cunoate-o nu s-ar mai
pune problema existenei erorii. Pentru ca ecuaia (1.1) s fie rezolvabil se face o estimare
asupra erorii, adic se precizeaz o margine superioar a acesteia. n acest caz se poate
determina valoarea adevrat cu ajutorul valorii aproximative, pentru o margine a erorii dat.
Deoarece unii autori definesc eroarea ca diferena:
ex x x , (1.2)
pentru a reuni cele dou definiii ale erorii ntr-una singur s-a trecut la definirea erorii
absolute, astfel:
| ex | | x x | . (1.3)
Dac se cunoate un minorant m i un majorant M al mrimii x atunci orice element
ex* al mulimii { | ex |, M m } se numete eroare absolut la limit.
Definiia 1.2. Numim eroare relativ raportul dintre eroarea absolut i valoarea
aproximativ absolut x |ex /x | (1.4)
n cazul erorii relative se poate defini eroarea relativ la limit. Din aplicarea proprietilor
modulului rezult:
| x|| x | |x x| |e x| e*x (1.5)
|x| e x |x| |x| e x
Definiia 1.3 Numim eroare relativ la limit raportul:
ex*
x* (1.6)
| x | x*
Pentru numerele apropiate de 1, eroarea absolut i eroarea aproximativ sunt aproape
egale, deoarece eroarea absolut se mparte la un numr aproximativ egal cu 1. Pentru numere
diferite mult de 1, cele dou erori absolut i relativ difer foarte mult. Din acest motiv, atunci
cnd nu se poate deduce tipul erorii este necesar s se specifice dac aceasta este relativ sau
absolut. Erorile absolute pentru mrimi care au uniti de msur sunt exprimate n unitile
de msur ale mrimilor, iar erorile relative nu au uniti de msur i sunt exprimate n
procente.
sunt caracterizate de funcia de repartiie normal sau gaussian din expresia (1.7), a crei
reprezentare este dat n fig.1.1.
1
exp( 0.5.( / ) 2 ) , (1.7)
2
Calculul probabilitii ca eroarea de observaie a unui procedeu de msur s fie cuprins
ntre dou valori date x1 i x 2 se realizeaz ca o sumare pe intervalul dat a funciei de
repartiie, prezentat n expresia (1.8):
x2
P x1 e x2 ( )d (1.8)
x1
Multe numere nu pot fi reprezentate exact printr-un numr finit de cifre. Dintre aceste
numere amintim: =3.141592654,
2 =1.414213562, e =2.73Aceste
numere cu o infinitate de cifre sunt des
utilizate n calcule, dar cu diferite
aproximaii care dau erori inerente.
Numerele transcendente i iraionale sunt
reprezentate printr-o infinitate de cifre n
orice sistem de numeraie. Unele numere,
reprezentate cu un numr finit de cifre ntr-
un sistem de numeraie, sunt reprezentate
cu un numr infinit de cifre n alt sistem de
Fig1.1.Funcia de repartiie gaussian numeraie. Ca exemplu poate fi dat
-eroarea de observaie;-dispersia
numrul 0.1 n sistemul de numeraie
zecimal, care n sistemul de numeraie binar este dat de numrul cu o infinitate de cifre
0.0001100110011...
Aceste erori sunt introduse de procedura numeric aplicat .Ca exemplu putem da
procedura numeric de calcul a valorii funciei trigonometrice cos x .Cea mai utilizat
procedur numeric de calcul este dezvoltarea n serie Taylor , n jurul punctului 0 a funciei
cos x
x2 x4 x6
cos x =1- ... , (1.9)
2 ! 4 ! 6!
unde argumentul x este dat n radiani. Un calcul exact al funciei cos( x ) este imposibil,
programul de calcul oprindu-se la un anumit termen al seriei, obinndu-se n acest mod o
valoare a funciei cu o anumit eroare.
Pentru cazul general al unei funcii f ( x ) dezvoltat n serie Taylor, n jurul punctului
x 0 , oprirea la termenul de rang n d o eroare ce poate fi calculat cu ajutorul formulei restului
lui Lagrange:
( x x0 )n ( n 1)
Rn ( x ) f ( ) ( x0 , x ) (1.10)
( n 1)!
4 Metode numerice n electronic
Procedurile utilizate n calculele numerice sunt finite, iar erorile datorate acestor proceduri
care ntrerup un calcul infinit teoretic, poart numele de erori de trunchiere. Aceste erori n
multe cazuri nu se pot calcula exact, dar se pot estima sau li se pot stabili limitele.
Pentru rezolvarea unei probleme se pot aplica mai multe metode care au erori
specifice lor. Prin alegerea celei mai adecvate metode n rezolvarea problemei, eroarea poate fi
micorat. Acest lucru se poate realiza dac cel implicat n rezolvarea problemei cunoate
metodele numerice. Deoarece metodele numerice sunt aproximaii ale metodelor analogice de
calcul este necesar s se cunoasc precizia aproximaiilor. n toate capitolele care urmeaz sunt
tratate metodele numerice mpreun cu erorile lor de calcul, iar unde este necesar se face i o
comparaie ntre metode.
eq g q 10 x-t 10 x-t
q 10 10 - t 101 t (1.16) Se
q f q 10 x 10 1 10 x
observ c limita maxim a erorii relative de rotunjire depinde numai de numrul de cifre al
mantisei numrului. Acest tip de rotunjire introduce o eroare mare, dar timpul de calcul al
calculatorului scade.
Un alt tip de rotunjire n cazul existenei cifrelor de gard este rotunjirea simetric sau
obinuit. n acest caz valoarea aproximativ prin rotunjire a numrului q este dat de
expresia :
| f q |10 x pentru |g q| 1/ 2
| q| (1.17)
x t
| f q |10 10 pentru |g q| 1/ 2
x
i n acest caz limita maxim a erorii relative de rotunjire simetric depinde numai de
numrul de cifre al mantisei mrimilor care intr n calcul, pe care l-am considerat acelai
pentru toate mrimile i l-am notat cu t. Se observ c eroarea simetric (1.21) este cu un ordin
de mrime mai mic dect eroarea de tiere (1.16). Pentru o precizie mai mare a calculelor se
utilizeaz rotunjirea simetric.
Aceleai limite maxime ale erorii relative le obinem i pentru cazul reprezentrii
sistematizate a numrului q n baza b :
q a1b n a 2 b n-1 a 3b n-2 ... a m b n-m+1 ... (1.22)
Considerm m cifre semnificative ale numrului:
q a1b n a 2 b n-1 ... a m b n-m+1 ... b n-m a m+1 a m+2 b -1 ... (1.23)
Notm cu c = am+1 a m+2 b ... -1
(1.24)
Dac c < (1 / 2)q atunci c = 0 i valoarea aproximativ prin rotunjire a lui q este
q = a1b n a2 b n-1 a3b n- 2 ... a mb n-m1 (1.25) Dac c > (1 / 2)q atunci c q i
valoarea aproximativ a lui q este
q = a1bn a2 bn-m ... a m 1 bn-m+1 (1.26) n
ambele cazuri eroarea absolut eq (1 / 2)b n-m+1
(1.27)
O limit maxim a erorii relative se calculeaz astfel:
eq (1 / 2 ) b n-m+1
q (1 / 2 ) b1 m , (1.28)
q 1 bn
unde m este numrul de cifre semnificative ale numrului .Pentru baza b =10 se obine
acelai rezultat ca la scrierea n virgul mobil (1.21).
ex y = x y - x y e y+ex ex y = e y+ex (1.29)
Scderea: x y = x ex y-e y x y+ex -e y
ex y = x y - x y ex -e y ex y = ex -e y (1.30)
nmulirea:
x y= x ex y+e y x y ex y e y x ex ey
Considernd ex e y 0 rezult:
exy xy-x y ex y e y x exy ex y e y x (1.31)
8 Metode numerice n electronic
x x ex x ex x+ex e y e2
1 2 ...
mprirea:
y y+e y y 1 e y /y y y y
x ex ey x e xe y ex e y
1 x 2 2 .
y y y y y y
ey ey
n calcul s-a utilizat dezvoltarea n serie geometric a factorului 1 / 1 , 1 i s-
y y
au reinut primii doi termeni. Considernd e x e y 0 rezult:
ex/y ex /y x.e y /y 2 (1.32)
Rdcina ptrat:
x x ex x 1 ex / x x 1 (1 / 2 )( ex / x )...
n calcul s-a utilizat dezvoltarea n serie binomial a factorului 1 ex / x
e x
x- x = (1 / 2)( ex / x ) x (1.33)
Propagarea erorilor relative prin operaiile realizate de calculator se deduce din formulele
de propagare a erorilor absolute .
Adunarea:
ex+y x e y ey x y
x+y x x y
x y x y x x y y x y x y
x y
x+y x y (1.34)
x y x y
Scderea:
ex y x e y ey x y
x-y x x y
x y x y x x y y x y x y
x y
x-y x y (1.35)
x y x y
nmulirea:
exy x e y y ex e y ex
xy x y
xy xy xy y x
xy x y (1.36)
mprirea:
x / y x / y / ( x / y ) (1 / y ). ex ( x / y 2 ). e y / ( x / y ) ex / x e y / y x y
x / y x y (1.37)
Rdcina ptrat:
x
(1 / 2 ). x ( ex / x ) / x (1 / 2).( ex / x ) (1 / 2). e x
x
(1 / 2) x (1.38)
Erori 9
x y
x- y x y r
xy xy
(1.40)Marca grafului pentru operaia de
nmulire este totdeauna constant egal cu
x unitatea att pentru nmulitor ct i pentru
denmulit. Graful pentru aceast operaie
este prezentat n figura 1.5. Eroarea la
ieirea grafului este dat de expresia
urmtoare: xy x y r
(1.41)
Marca grafului pentru operaia de
mprire este totdeauna constant,
Fig.1.6. Graful operaiei de mprire
avnd valoarea 1 pentru demprit i -1
pentru mpritor. n figura 1.6 este
1 prezentat graful pentru operaia
aritmetic de mprire. Eroarea la
ieirea grafului este
x / y x y r (1.42)
Fig.1.7. Graful operaiei de extragere de
rdcin ptrat Operaia de extragere a rdcinii ptrate
are marca grafului constant egala cu 1 / 2 i
este prezentat n figura 1.7. Eroarea mrimii la ieirea grafului este
x (1 / 2) x r (1.43)
Se observ c expresia erorilor relative obinute la ieirea grafurilor sunt chiar formulele
de calcul ale erorilor relative propagate prin operaiile aritmetice obinute n paragraful 1.3, iar
mrcile grafului sunt identice cu expresiile cu care se nmulesc erorile relative ale
componentelor care intervin n operaia de calcul. Pentru uurina calculului mrcilor grafului
se ine seama de modul de calcul prezentat anterior pentru fiecare operaie aritmetic.
Cunoscnd erorile relative ale mrimilor care intr ntr-o expresie n care avem operaiile de
baz ale aritmeticii, putem s determin eroarea final a expresiei cu ajutorul grafurilor de
procedur.
1.6. APLICAII
1. S se determine o limit superioar a erorii relative pentru expresia :
E( x ) = ( ax 2 bx c ) / ( dx f )
n punctul x0 tiind c a , b, c, d , f , x0 sunt pozitive i au respectiv erorile relative a , b
, c , d , f , x 0
.
Se cunosc erorile relative ale tuturor elementelor funciei date. Pentru calculul limitei
superioare a erorii relative, se realizeaz graful de procedur al expresiei date, care este
prezentat n figura 1.8. innd cont de grafurile operaiilor aritmetice, se ncepe realizarea
grafului expresiei E cu graful pentru numrtor i dup aceea cu graful pentru numitor
realiznd n final un graf pentru operaia de mprire.
Mrcile grafurilor operaiilor care intervin n expresie se calculeaz conform expresiilor
(1.39 ), (1.40), (1.41), (1.42) i (1.43). Pentru fiecare operaie de calcul se d eroarea de
rotunjire notat cu ri , i=1,2,,8.
Erorile din fiecare punct al grafului se nmulesc cu marca grafului corespunztor iar la
ieire, n punctul n care are loc o operaie aritmetic, se nsumeaz, indiferent de operaia
aritmetic care are loc n nod.
eE x 0 x0 r1 a r2
ax02
ax0 bx0 c
2
b x 0 r3 bx0
ax0 bx0
2
r4
ax 02 bx 0
ax 02 bx 0 c
c
c
ax 02 bx 0 c
r5 d x0 6
dx
dx 0
0 f
( 1)
f r7 ( 1) r8
f
dx0 f
Dac considerm c erorile lui a , b, c, d , f , x0 sunt obinute ca erori de rotunjire, atunci
toate erorile din expresie pot fi majorate cu 5 10 t , unde t este numrul de cifre al variabilelor
a , b, c, d , f , x0 admis de calculator. Ca urmare, expresia limitei erorii relative devine:
5ax 02 3bx 0 2dx 0
E 5 10 t 5
ax 0
2
bx 0 c dx 0 f
12 Metode numerice n electronic
Considernd c x 0 [0,1], atunci expresia erorii relative se poate simplifica fcnd o nou
majorare i anume nlocuim pe x 0 n expresiile de la numrtor cu 1, iar n cele de la numitor
cu zero. Marginea erorii relative pentru expresia dat n condiiile impuse devine:
5a 3b 2d
E 5 10 t 5
c f
foarte mare marginile erorii relative a lui u i v devin aproximativ egale iar pentru a foarte
mic marginea erorii relative a lui u devine aproximativ de cinci ori mai mic dect marginea
erorii relative a lui v . Numrul maxim de cifre al mantisei admise de calculator este t. S se
calculeze marginile erorii relative ale expresiilor date i pentru cazul cnd a este exact.
Construcia grafurilor de procedur pentru cele dou expresii, precum i calculul limitelor
superioare rmne ca un exerciiu pentru cititor.
a u 4010 . t ; v 4010
. t
R:
a 0 u 510
. t ; v 2510. t
A Rc h11 r Rc h11 r
. t 0,1
0,05 0,05 0,510
Amplificarea n tensiune a circuitului
electronic poate avea o limit maxim a
erorii de 10%.
Analog, se pot calcula erorile maxime
pe care le au diferii parametrii ai circuitelor
electronice, funcie de erorile elementelor de
care depind.
Fig.1.10. Graful de procedur a amplificrii n
tensiune
. t 3bx 2a / bx a , v 510
R: u 510 . t 3bx 2a / bx a
u 10 t 1 ( 3bx 2a)/(bx a ) , v 10 t 1 ( 3bx 2a)/(bx a)
Aceast metod se bazeaz pe o consecin a teoremei lui Rolle care afirm c: ntre
dou rdcini consecutive ale derivatei f '( x ) 0 exist cel mult o rdcin real a
ecuaiei f ( x ) 0 . Exist cu siguran o soluie ntre rdcinile consecutive ale
derivatei f '( x ) 0 , dac produsul valorilor funciei pentru cele dou rdcini
consecutive ale derivatei este negativ .
Considerm x1 x2 x3 ... xn , rdcinile ecuaiei f ' ( x ) 0 . Se construiete irul
lui Rolle:
f ( a ), f ( x1 ), f ( x2 ),..., f ( xn ), f ( b) (2.2)
Numrul de variaii de semn din irul lui Rolle reprezint numrul de rdcini reale ale
ecuaiei f ( x ) 0 , iar rdcinile consecutive ale derivatei pentru care avem variaia de
semn a irului reprezint intervalele n care exist o rdcin real a ecuaiei (2.1).
Dac f ( x ) este definit pe ntreaga ax real, R , irul lui Rolle conine
_____________________________
*) Bibliografie: [3],[6],[7],[11],[21].
i termenii cu valorile funciei la + i - :
16 Metode numerice n electronic
f - ,f x1 ,f x2 , ... , f x n , f + . (2.3)
0..Pentru aplicarea acestei metode trebuie s determinm soluiile ecuaiei f ' x 0 .
Pentru ecuaii de grad mai mic metoda este avantajoas, dar pentru ecuaii de grad
mare rezolvarea ecuaiei derivatei poate deveni tot att de dificil ca i rezolvarea
ecuaiei date f ( x ) 0 .
{Variabile
grad:gradul polinomului, ntreg);
P1:vectorul coeficienilor polinomului;
P2:vectorul coeficienilor derivatei polinomului;
Rez:vectorul coeficienilor restului;
C1,C2:coeficienii pentru calculul coeficienilor restului, reali;
{
pentru i=grad-1 pn la 0 calculeaz P2[i]=(i+1)P1[i+1];
N a , b N a N b
sau difer de acesta cu un numr par
N ( a, b) N ( a ) N ( b) 2m ,
unde N a este numrul inferior de schimbri de semn al irului derivatelor pentru
x a i N b este numrul superior de schimbri de semn al irului derivatelor pentru
x b.
Numrul inferior de schimbri de semn al irului este numrul de schimbri de semn
al subirului termenilor diferii de zero, iar numrul superior de schimbri de semn al
irului este numrul de schimbri al irului unde termenii nuli
Pb Pb Pb
g g 1
g k 1
0 Pb 0 ; Pb 0 ,
g 1 gk
lim bn (2.12)
n
lim a n (2.13)
n
Algoritmul de calcul se oprete atunci cnd
este ndeplinit condiia | bn an | unde
este eroarea impus pentru calculul soluiei
ecuaiei date. Soluia ecuaiei este aproximat
cu valoarea mijlocului intervalului [a n , bn ] .
xm Lungimea intervalului tinde la zero cnd n
tinde la infinit, limita capetelor intervalelor
Fig.2.1. Graficul funciei y f ( x ) pe fiind un punct a crui abscis este soluia
intervalul [a,b] ecuaiei.
{Variabile
n: gradul polinomului, intreg;
A: coeficienii polinomului, vector;
ls,ld: limitele intervalului, real;
er: eroarea de calcul, real;
rad:rdcina, real;
x m : jumtatea intervalului [ l s , l d ], real;
// se utilizeaz funcia Valpol din ANEXA 1//
{
dac Valpol(n,A,ls)*Valpol(n,A,ld)>0 atunci
{scrie ecuaia nu are rdcin;
Rezolvarea numeric a ecuaiilor algebrice 21
stop;
}
/* Funcia ntoarce:
0 n caz de eec
1 n cazul unui rezultat corect */
{ Variabile
(F ecuaia, funcie real de variabil real)
ls,ld: limitele intervalului, real;
er:eroarea de calcul, real;
xm: mijlocul intervalului, real;
rad:rdcina, real;
{
dac F(ls)*F(ld)>0 atunci { soluia nu exista ,
stop }
altfel
dac F(ls)=0 atunci {soluia este rad=ls;
stop
}
dac F(ld)=0 atunci {soluia este rad=ld;
stop
}
xm=(ls+ld)/2;
ct timp (abs(ld-ls)>er) i (F(xm)<>0) executa
{ xm=(ls+ld)/2;
dac F(xm)*F(ls)<0 atunci ld=xm;
altfel ls=xm;
}
soluia este rad=xm;
}
/* Funcia ntoarce:
0 n caz de eec
1 n cazul unui rezultat corect
*/
int BisecieFuncie(double (*f)(double),
double ls,
Rezolvarea numeric a ecuaiilor algebrice 23
double ld,
double err,
double *soluie)
{
double xm;
if ( f(ls)*f(ld)>0) return 0;
if ( f(ls)==0)
{ *soluie=ls;
return 1;
}
if ( f(ld)==0)
{
*soluie=ld;
return 1;
}
xm=0.5*(ls+ld);
while( ( fabs(ld-ls)>err) && ( f(xm)!=0) )
{
xm=0.5*(ls+ld);
if ( f(ls)*f(xm)<0 ) ld=xm;
else ls=xm;
}
*soluie=xm;
return 1 ;
}
y y
yx
y ( x)
yx
y ( x)
a x
x
x0 x1 x3 x0 x2 a x3 x1
Fig.2.2. Convergena pentru cazul Fig.2.3. Convergena pentru cazul
0< ' ( x ) <1 -1< ' ( x ) <0
y ( x) y y ( x)
yx
y=x
a x
x
x2 x1 xo x0 a x1
Fig.2.4. Divergena pentru cazul Fig 2.5. Divergena pentru cazul
'(x) 1 ' ( x ) 1
{Variabile
(F funcie real de variabil real, ecuaia se aduce la x=F(x))
x0: punctul de start, real;
pc: punctul de derivare, real;
xn: valoarea curenta a rdcinii, real;
xn_1: valoarea precedent a rdcinii, real;
h: pasul de derivare, real;
der:derivata funciei, real;
ls,ld: limitele intervalului, real;
rad:rdcina ecuaiei, real;
{
h=0.0001;
pc=ls;
repeta
der=(F(pc+h)-F(xc))/h;
pc=pc+h;
pn cnd (pc>ld) sau der>=1;
dac der>=1 atunci
{scrie nu se poate rezolva;
stop }
xn=x0;
repet
Rezolvarea numeric a ecuaiilor algebrice 27
xn_1=xn;
xn=F(xn_1);
pan cnd abs(xn-xn_1)<er;
rad=xn;
soluia este rad;
}
/* Funcia ntoarce:
0 cnd se gsete rdcina cu aproximaia dorit
1 cnd nu se ndeplinete condiia de convergen
2 cnd nu se atinge precizia n numrul de pai impus
*/
int AproxSuc( double (*fi)(double), /* ecuaia */
double ls, /* limita stng */
double ld, /* limita dreapt */
double x0, /* valoarea de start */
double err, /* precizia de aflare a soluiei */
int NMax, /* nr. maxim de iteraii */
double *sol /* soluia */
)
{
double xn,xn_1,pct,pas=0.001;
int iter,sem=1;
pct=ls;
do
{
if( Derf(fi,pct)>=1) sem=0;
else pct+=pas;
}
while( (sem==1) && (pct<=ld) );
if(sem==0) return 1;
else
xn=x0;
iter=1;
do
{
xn_1=xn;
xn=fi(xn_1);
iter++;
}
while ( ( fabs(xn-xn_1)>err ) && (iter<=NMax) );
*sol=xn;
28 Metodenumericenelectronic
if (iter<NMax) return 0;
else return 2;
}
Din figura 2.1 se observ c o nou valoare xn 1 se obine din valoarea calculat xn
(iniial fiind x0 ) la care se adaug o valoare x corespunztor fig. 2.5
x n+1 x n x (2.23)
unde x f xn xn (2.24)
Pentru mrirea vitezei de convergen a metodei se pune problema adugrii la xn a
termenului k x cu k >1, astfel ca valoarea xn 1 s fie foarte aproape de soluie i dac
este posibil s fie chiar a . Deci :
x n+1 x n k x (2.25)
Valoarea lui k se determin cu ajutorul unghiului prezentat n fig 2.5 i a
segmentului x , k x , (1-k) x . Deoarece y x (bisectoarea nti) formeaz cu axele
de coordonate unghiuri de 450, ABC este un triunghi dreptunghic isoscel, deci
AB=BC=(1-k) x . Din triunghiul dreptunghic TBC rezult:
Dac inem seama de formulele (2.30) , (2.29) i (2.25) putem exprima formula de
calcul a lui xn 1 astfel :
x n 1 x n k ( f ( x n ) x n ) (2.31)
Influenele lui k pentru cele patru cazuri ale valorilor derivatei sunt:
1. 0 < ' ( x ) <1. Din (2.28) rezult k 1 , , adic o valoare a lui k mai mare ca 1
mrete viteza de convergen a metodei prin mrirea pasului;
2. -1 < ' x <0. Rezult (1 / 2) k < 1 , adic n acest caz pasul trebuie micorat
pentru a obine o mrire a vitezei de convergen a metodei;
3. ' x > 1. Rezult k - , 0 , dei metoda n acest caz este divergent pentru un
k < 0 se poate obine o mbuntire a metodei;
4. ' x < 1. Rezult k 0, 1 / 2 , adic o micorare a pasului dar fr a ne
pronuna asupra convergenei irului n acest caz.
x n 1 xn
1
1 ' xn
xn xn (2.32)
x n +1
xn xn ' xn (2.33)
1 ' xn
Formula de iteraie (2.33) poate fi reprezentat sub forma :
x x ' x
x n+1 g x n unde g x (2.34)
1 ' x
Condiia de convergen a irului, spre soluia ecuaiei, este dat de relaia g' x 1 .
Calculm derivata funciei g ( x )
'' x x x
'
g x (2.35)
1 x
' 2
y= f (x)
y
y=x
y ( x)
x0 a x
x1
x
x0 a x2 x1
Fig.2.8. Determinarea grafic a soluiei
Fig.2.7. Determinarea grafic a soluiei prin
prin metoda tangentei.
metoda Newton-Raphson
f xn
x n+1 x n (2.36)
f ' xn
unde f ( x ) = x x = 0 . n acest caz formula (2.35) se scrie sub forma :
f '' x f x
g' x (2.37)
f x
' 2
{Variabile
(F ecuaia, funcie real de variabil real)
x0:valoarea punctului de start, real;
nmax:numrul maxim de iteraii, ntreg;
i:contor, ntreg;
xn:valoarea curent a rdcinii, real;
xn_1:valoarea precedent a rdcinii, real;
h,er:pasul de derivare, eroarea,reale;
der:valoarea derivatei in xn_1, real;
rad:rdcina ecuaiei, real;
{
i=0;
xn=x0;
h=0.0001;
repet
xn-1=xn;
der=(F(xn-1+h)-F(xn-1))/h;
dac der=0 atunci
{ scrie ecuaia nu se poate rezolva;
stop;
}
xn=xn_1-F(xn_1)/der;
i=i+1;
pn cnd (abs(xn-xn_1)<er) sau (i>nmax);
dac i>nmax atunci
{
scrie soluia nu poate avea precizia dat;
stop;
}
rad=xn;
scrie soluia este rad;
}
}
/* Funcia ntoarce:
2 cnd derivata este nul
1 cnd nu pot afla rdcina cu precizia dorit
0 n caz de succes
*/
int NewtonRaphsonF( double (*f)(double),
double x0,
int niter,
double err,
double *soluie)
{
double xn,xn_1,aux;
int cont=1;
xn=x0;
do
{
xn_1=xn;
if( (aux=Derf(f,xn_1))==0) return 2;
xn=xn_1-f(xn_1)/aux;
cont++;
}
while( ( fabs(xn-xn_1)>err) && (cont<=niter));
if (cont>=niter) return 1;
*soluie=xn;
return 0;
}
{Variabile
n:gradul polinomului, ntreg;
A: coeficienii polinomului, vector;
x0:valoarea de start, real;
er: eroarea de calcul, real;
xn:valoarea curent a rdcinii, real;
xn_1:valoarea precedent a rdcinii, real;
nmax:numrul maxim de iteraii, ntreg;
i:contor, ntreg;
rad:rdcina ecuaiei, real;
{
i=0;
xn:=x0;
34 Metodenumericenelectronic
repet
xn_1=xn;
dac Derpol(n,A,xn_1)=0 atunci
{
ecuaia nu se poate rezolva;
stop;
}
xn=xn_1-Valpol(n,A,xn_1)/Derpol(n,A,xn_1);
i=i+1;
pn cnd (abs(xn-xn_1)<er) sau (i>nmax);
dac i>nmax atunci
{
Nu avem precizia cerut;
stop;
}
rad=xn;
scrie soluia este rad;
/* Funcia ntoarce:
2 cnd derivata este nul
1 cnd nu pot afla rdcina cu precizia dorit
0 n caz de succes
*/
int NewtonRaphsonP( int grad,
double coef[],
double x0,
int niter,
double err,
double *soluie)
{
double xn,xn_1,aux;
int cont=1;
xn=x0;
do
{
xn_1=xn;
if(( aux=ValDerPol(grad,coef,xn_1))==0) return 2;
xn=xn_1-ValPol(grad,coef,xn_1)/aux;
cont++;
}
Rezolvarea numeric a ecuaiilor algebrice 35
Dac dou rdcini ale ecuaiei sunt foarte apropiate atunci este foarte greu s gsim
intervalul n care ecuaia are o singur rdcin, sau rdcinile apropiate . Cum funcia
n cele dou rdcini apropiate ia aceeai
valoare egal cu zero, conform teoremei lui
y Rolle exist cel puin un punct x a1 , a 2
astfel ca derivata funciei s se anuleze (fig
2.8).
yx f x x x
f a1 a1 a1 0
f a2 a2 a2 0
Rezult c exist un x a1 , a2 pentru care
c x
a1 a2 f ' ( x ) 0 . Rezult c f ' x ' x 1 adic
' x 1 . Vom calcula soluia ecuaiei
Fig.2.9. Graficul funciei cu dou x 1 , aplicnd aceeai metod Newton -
'
d=
2 c- c (2.44)
c
Cu ajutorul formulei obinute (2.44) se poate determina valoarea lui d dac se cunoate
soluia ecuaiei (2.42) i se pot calcula valorile de start c d i c d pentru cele dou
soluii a1 respectiv a2 .
Aceast metod determin toate rdcinile att reale ct si complexe ale unei ecuaii
polinomiale cu coeficieni reali. Fie ecuaia:
Pn ( x ) x n an 1x n 1 an 2 x n 2 ... a1x a0 0 (2.45)
care admite soluiile x1, x2 , x3,..., x n (2.46), care pot fi reale si complexe. Rdcinile
complexe sunt conjugate dou cte dou. Principiul metodei const n scrierea
polinomului sub forma unui produs de dou polinoame unul de gradul doi i celalalt
de gradul n-2. Deci va rezulta o ecuaie de gradul doi pe care o vom rezolva uor
aplicnd formulele de calcul ale soluiilor i o ecuaie de gradul n-2 pentru care vom
proceda la fel pentru descompunere. n acest mod, din aproape n aproape, vom obine
toate soluiile ecuaiei polinomiale iniiale. Problema principal a metodei este
determinarea coeficienilor polinomului de gradul doi i a celui de gradul n-2. Ecuaia
(2.45) poate fi scris astfel:
Pn ( x ) ( x 2 sx p )( x n 2 bn 1x n 3 bn 2 x n 4 ... b3x b2 ) Rs S (2.47)
Prin identificarea coeficienilor de acelai grad a ecuaiilor (2.45) si (2.47) se obin
expresiile recursive dintre coeficienii celor dou polinoame pentru determinarea
coeficienilor bi , i n 1, n 2,...,2, R i S funcie de s i p . Determinarea valorilor
lui s i p se face astfel ca R i S s se anuleze. n acest caz soluiile polinomului de
gradul doi sunt soluii i pentru ecuaia dat.
an 1 bn 1 s
an 2 bn 2 sbn 1 p
an 3 bn 3 sbn 2 pbn 1
(2.48)
a2 b2 sb3 pb4
a1 R sb2 pb3
a0 S pb2
Din relaiile (2.48) se pot deduce relaiile recursive pentru calculul coeficienilor celor
dou polinoame n care s-a descompus polinomul iniial:
Rezolvarea numeric a ecuaiilor algebrice 37
bn 1 an 1 s
bn 2 an 2 sbn 1 p
bn 3 an 3 sbn 2 pbn 1
(2.49)
b2 a2 sb3 pb4
R a1 sb2 pb3
S a0 pb2
Pentru uniformizarea formulelor de calcul (2.49) se face substituia formal :
R b1 a1 sb2 pb3
(2.50)
S b0 sb1
rezultnd sistemul neliniar:
bn 1 an 1 s
bn 2 an 2 sbn 1 p
(2.51)
bk ak sbk 1 pbk 2
k n 3, n 4,...,2,1,0
R( s k , p k ) R( s k , p k )
s k p k R ( s k , p k )
s p
(2.53)
S ( sk , p k ) S (sk , pk )
s k p k S ( s k , p k )
s p
R( s, p) b1
s s
R( s, p) b1
p p
(2.55)
S ( s, p ) b0 b1
b1
s s s
S ( s, p) b0 b1
.s
p p p
qn 1 0
qn 2 1
(2.57)
qk s. qk 1 p. qk 2 bk 2
k n 3, n 4,...,1,0.
R ( s0 , p 0 ) b1 ( s0 , p 0 )
S ( s0 , p 0 ) b0 ( s0 , p 0 ) b1 ( s0 , p0 ) s0
S ( s0 , p 0 )
t 1 ( s0 , p 0 )
s
R ( s0 , p 0 )
q1 ( s0 , p 0 ) (2.58)
p
S ( s0 , p 0 )
t 0 ( s0 , p0 ) t 1 ( s0 , p0 ) s0 b1 ( s0 , p 0 )
s
S ( s0 , p 0 )
q 0 ( s0 , p 0 ) s0 q1 ( s0 , p 0 )
p
Se rezolv sistemul pentru soluia de start, iar din expresiile (2.54) se determin
soluiile sistemului pentru iteraia ntia s1 i p1 . Se continu procesul de iteraie pn
cnd | | sk 1 sk | i | pk 1 pk | unde este eroarea impus. Pentru aceste valori
ale soluiilor sistemului se consider S ( sk 1, pk 1 ) 0 i R( sk 1, pk 1 ) 0 . n aceste
Rezolvarea numeric a ecuaiilor algebrice 39
condiii, prin rezolvarea ecuaiei de gradul doi, se obin dou soluii reale sau
complexe ale ecuaiei iniiale (2.45). Continund la fel cu ecuaia de gradul n-2 se
obine n final un polinom de gradul doi dac n este par i un polinom de gradul nti
dac n este impar.
{Variabile
a:vectorul coeficienilor ecuaiei de rezolvat;
b:vectorul coeficienilor polinomului obinut prin descompunere;
s, p :variaiile lui s i p;
s,p:coeficienii polinomului de gradul doi, reali;
R,S:coeficienii restului, reali;
R R
, :derivatele pariale ale lui R n raport cu s i p, reale;
s p
S S
, :derivatele pariale ale lui S n raport cu s i p, reale;
s p
s0 , p0 :soluiile de start pentru calculul lui s i p, reale;
: eroarea de calcul, real;
n,i,k:ntregi;
{
ak
dac a n 1 atunci pentru k=n-1 pn la 0 a k : ;
an
i:=n;
j:=-1;
repet
i:=i-2;
repet
j:=j+1;
bi1(s j ,p j ) a i1 s j
bi (s j ,p j ) a i s j .bi1 p j
pentru k: i 1 pn la 0 bk (s j ,p j ) a k s j .bk 1 p j .bk 2
t i1 1
t i s j . t i1 bi1
pentru k: i 1 pn la 0 t k s j . t k 1 p j . t k 2 bk 1
40 Metodenumericenelectronic
qi1 0
qi 1
pentru k: i 1 pn la 0 q k s j . q k 1 p j . q k 2 bk 2
R( s j , p j ) b1( s j , p j )
S ( s j , p j ) b0 ( s j , p j ) b1( s j , p j )s j
S ( s j , p j )
t1( s j , p j )
s
R( s j , p j )
q1( s j , p j )
p
S ( s j , p j )
t0 ( s j , p j ) t1( s j , p j )s j b1( s j , p j )
s
S ( s j , p j )
q 0 ( s j , p j ) s j q1( s j , p j )
p
rezolv sistemul
R( s j , p j ) R( s j , p j )
s j p j R( s j , p j )
s p
S ( s j , p j ) S ( s j , p j )
s j p j S ( s j , p j )
s p
s j 1 s j s j ;
p j 1 p j p j
pn cnd (| s j 1 s j | ) (| p j 1 p j | )
rezolv ecuaia x 2 s j 1 x p j 1 0
pn cnd (i-2<2)
{
if (x>0) return 1;
if (x<0) return -1;
return 0;
}
/* Funcia Sign */
/* Funcia pentru rezolvarea ecuaiei de gradul doi */
void ECGR2( double a,
double b,
double c, /* coeficienii ecuaiei */
double *xr1,
double *xi1,
double *xr2,
double *xi2 /* partea real i imag. a soluiilor */
)
{
double d; /* determinantul ecuaiei */
d=b*b-4*a*c;
switch ( Sign(d) )
{
case 1: {
*xr1=(-b+sqrt(d))/(2*a);
*xi1=0;
*xr2=(-b-sqrt(d))/(2*a);
*xi2=0;
break;
}
case 0: {
*xr1=-b/(2*a);
*xi1=0;
*xr2=*xr1;
*xi2=0;
break;
}
case -1:{
*xr1=-b/(2*a);
*xi1=sqrt(-d)/(2*a);
*xr2=*xr1;
*xi2=-(*xi1);
break;
}
} /* switch */
}; /* ECGR2 /*
/* Funcie care implementeaz efectiv metoda Bairstow pentru
rezolvarea ecuaiilor polinomiale furniznd att soluiile reale, ct i
complexe, simple sau multiple. Ea ntoarce urmtoarele coduri:
42 Metodenumericenelectronic
m=grad
switch (Sign(m-2))
{
case -1:{ /* a rmas ec. de gr 1 */
alfar[j]=-coef[m-1];
alfai[j]=0;
sem1=1;
break;
};
case 0:{ /* a rmas ecuaie de gr 2 */
ECGR2(1.0,coef[m-1],coef[m-2],
&alfar[j],&alfai[j],
&alfar[j+1],&alfai[j+1]);
sem1=1;
break;
};
case 1:{ /* ecuaie de grad mai mare ca doi */
s0=rzero;
p0=szero;
i=1;
sem2=0;
do
{
b[m-2]=1;
b[m-3]=coef[m-1]-r0;
t[m-2]=0;
t[m-3]=-1;
q[m-2]=q[m-3]=0;
if(m>3)for(k=m-4;k>=0;k--)
{
b[k]=coef[k+2]-b[k+1]*s0-b[k+2]*p0;
t[k]=-b[k+1]-t[k+1]*s0-t[k+2]*p0;
q[k]=-q[k+1]*s0-q[k+2]*p0-b[k+2];
}
R=coef[1]-s0*b[0]-p0*b[1];
S=coef[0]-p0*b[0];
RS= -b[0]-s0*t[0]-p0*t1];
RP= -q[0]*s0-b[1]-p0*q[1];
SS= -p0*t[0];
SP= -b[0]-p0*q[0];
D=RR*SS-SR*RS;
if(D!=0)
{
DS=(-R*SS+S*RS)/D;
DP=(-S*RR+R*SR)/D;
s1=s0+DS;
44 Metodenumericenelectronic
p1=p0+DP;
if((fabs(DS)<=eps)&&(fabs(DP)<=eps) )
{
ECGR2(1,r1,s1,&alfar[j],&alfai[j],
&alfar[j+1],&alfai[j+1]);
j+=2;
sem2=1;
for(k=0;k<=m-2;k++)coef[k]=b[k];
}
else
{
i++;
if(i>nmax) return 3;
else
{
s0=s1;
p0=p1;
}
}
}
else return 2;
} while (sem2!=1);
break;
}
}; /* Case */
} while (sem1!=1);
return 1;
} /* end Bairstow */
2.3. APLICAII
Pentru rezolvare, mai nti determinm numrul de rdcini reale ale polinomului de la
numitorul fraciei aplicnd irul lui turm. Cu ajutorul funciei ce implementeaz irul
lui turm se obine urmtorul ir:
Rezolvarea numeric a ecuaiilor algebrice 45
Tabelul 2.1
s f1 f2 f3 f4 n
- - + - + 3
+ + + + 0
Se determin soluiile ecuaiilor din irul derivatelor i se ine seama c ntre dou
rdcini consecutive ale derivatei unei funcii poate exista cel mult o rdcin a
funciei. Soluiile se determin cu eroarea 10 5 suficient pentru determinarea
intervalelor n care se gsesc soluiile. Pentru derivata de ordinul doi se consider
intervalul (-5,+5) i se determin soluia s1'' 0.17613 cu ajutorul metodei biseciei.
Pentru derivata nti se determin o soluie n intervalul (-5,0.17613) i cealalt n
intervalul (0.17613,5). Se obin soluiile:
2. Se consider funcia de transfer a unui filtru analogic de tip Cebev dat sub forma:
0.04381
H ( s)
s 4 0.6192s 3 0.61401692s 2 0.20379268s 0.0491588
Filtrul admite poli compleci i pentru determinarea lor aplicm metoda lui
Bairstow. Se obin urmtorii poli ca soluii ale polinomului de la numitorul funciei de
transfer:
3. Se d ecuaia
ex 1 / x 0
care are o soluie n intervalul (0.1, 1). S se calculeze soluia ecuaiei aplicnd metoda
bisectiei pentru ecuaii transcendente, metoda Newton-Raphson i metoda
aproximaiilor succesive. Eroarea de calcul se consider 0.0000000001 pentru toate
metodele. S se compare rezultatele.
3
REZOLVAREA NUMERIC A SISTEMELOR
DE ECUAII*
implic un numr infinit de operaii. n realitate nici o metod nu poate avea un numr
infinit de operaii.Metoda indirect necesit un numr infinit de operaii pentru
obinerea soluiei exacte i din acest motiv operaiile se trunchiaz rezultnd o eroare
de trunchiere. Metodele directe determin, printr-un numr finit de operaii soluia
exact a sistemului dac aceasta exist.
a11 x1 b1
a 21 x1 a 22 x 2 b2
a 31 x1 a 32 x 2 a 33 x 3 b3 (3.6)
..........................................
a n1 x1 a n 2 x 2 a n 3 x 3 ...... a nn x n bn
{ Variabile
A: matricea necunoscutelor sistemului;
B: vectorul termenilor liberi;
X: vectorul soluiilor;
{
b1 ;
calculeaz x1
a11
pentru i=2 ,, n
i 1
bi a ij x j
j 1
calculeaz xi ;
a ii
Rezolvarea numeric a sistemelor de ecuaii 49
pentru i= 1, , n tiprete x i }
{ Variabile
A: matricea necunoscutelor sistemului;
B: vectorul termenilor liberi;
X: vectorul soluiilor;
n,i,j:ntregi;
{
bn ;
calculeaz xn
a nn
n
bi a ij x j
j i 1
pentru i=n-1,, 1 calculeaz xi ;
a ii
pentru i= 1 ,, n tiprete x i
}
{
int i; /* indice de linie */
int j; /* indice de coloan */
double d=1; /* determinant */
/*retrosubstituia */
for (i=or_mat;i>=1;i--)
{
XX[i]=TL[i];
for(j=or_mat;j>=i+1;j--) XX[i]=XX[i]- MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;
Rezolvarea numeric a sistemelor de ecuaii 51
ak 1
mk 1 , k=2,...,n (3.10)
a11
i se scade din ecuaia de pe poziia k , obinnd pe coloana 1 toi termenii zero n
afar de a11 . Sistemul devine :
1 1 1
x3 ... a1n xn b1
1 1
a11 x1 a12 x2 a13
2 2 2
xn b2
2
a22 x2 a23 x3 ... a2n
a x a x ... a x b
2 2 2 2 (3.11)
32 2 33 3 3n n 3
a x a x ... a x b
2 2 2 2
n2 2 n3 3 nn n n
Procedeul se continu cu aducerea pe locul lui a22 a celui mai mare termen din
coloana doi i se nmulete linia a doua cu :
ak2
mk 2 k=3,4,...,n (3.12)
a 22
i se scade din ecuaia de pe pozitia k. Pentru coloana i dup aducerea celui mai mare
coeficient n locul lui aii se nmulete aceast coloan cu :
a ki
mki k=i+1,...,n (3.13)
a 22
i se scade din linia de pe poziia k .
Pentru i = n-1 se obine sistemul :
a 1 x a 1 x a 1 x ... a 1 x b1
11 1 12 2 13 3 1n n 1
{Variabile
A:matricea sistemului;
B:vectorul termenilor liberi;
X:vectorul soluiilor ;
n,i :ordinul sistemului, indicele liniei, ntregi;
k : indice suplimentar al liniei, ntreg;
j : indice coloan, ntreg;
m: multiplicator, real;
d: determinantul sistemului, real;
max: elementul maxim de pe coloana, real;
lp: indicele liniei cu element maxim, ntreg;
{
i=1; det=1;
repet
max= abs(A[i,i]);
lp=1;
pemtru k=i+1 n execut
dac max<abs(A[k,i]) atunci
{ max<A[k,i];
lp=k;}
dac max=0 atunci
{ GAUSS=0;
exit; }
dac lp<>i atunci
{ pentru j=i,..,,n execut
sc=A[i,j];A[i,j]=A[lp,j];A[lp,j]=sc;
sc=B[i];B[i]=B[lp];B[lp]=sc;
d= -d;
}
k=i+1;
repet
m=A[k,i]/A[i,i];
pentru j =i ,,n execut A[k,j]=A[k,j]-m*A[i,j];
B[k]=B[k]-m*B[I];
k=k+1;
pna cnd k>n;
i=i+1;
Rezolvarea numeric a sistemelor de ecuaii 53
pn cnd i>=n;
pentru i=1,,n execut d:=d*A[i,i];
dac d=0 atunci
{ GAUSS=0;
exit; }
X[n]=B[n]/A[n,n];
pentru i=n-1,,1 execut
{ X[I]=B[I];
pentru j=n,,i+1 execut X[I]=X[I]-A[I,j]*X[j];
X[i]=X[i]/A[i,i]; }
GAUSS=d;
}
do
{
max=fabs( MAT[i][i]);lp=i;
for(k=i+1;k<=or_mat;k++)
if( max< fabs(MAT[k][i]) )
{
max=MAT[k][i];
lp=k;
}
if (max==0) return 0;
if(lp!=i)
54 Metode numerice n electronic
{
for(j=i;j<=or_mat;j++)
SCHIMB(MAT[i][j],MAT[lp][j],sc);
SCHIMB(TL[i],TL[lp],sc);
d*=-1;
}
k=i+1;
do
{
m=MAT[k][i]/MAT[i][i];
for (j=i;j<=or_mat;j++)
MAT[k][j]=MAT[k][j]-m*MAT[i][j];
TL[k]=TL[k]-m*TL[i];
k++;
}
while (k<=or_mat);
i++;
}while (i<or_mat) ;
for (i=1;i<=or_mat;i++) d*=MAT[i][i];
if ( d==0 ) return 0;
/*retrosubstituia */
for (i=or_mat;i>=1;i--)
{
XX[i]=TL[i];
for(j=or_mat;j>=i+1;j--) XX[i]=XX[i]-MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;
}
l11 0 0 0 0 d1 b1
l21 l22 0 0 0 d2 b2
l31 l32 l33 0 0 d3 b3 (3.17)
ln1 ln 2 ln 3 ln 4 1 dn bn
{Variabile
MAT:matricea coeficienilor necunoscutelor sistemului;
TL:vectorul termenilor liberi;
X:vectorul soluiilor sistemului;
U:matricea superior triunghiular cu diagonala principal unitar;
L:matricea inferior triunghiular ;
n:ordinul sistemului, ntreg;
i,j :indice de linie respectiv de coloan, ntreg;
k:indice suplimentar, ntreg;
{
dac a11 1 atunci scrie -sistem nerezolvabil
altfel
{ pentru i=1 ,, n
56 Metode numerice n electronic
pentru j=1 ,, n
{calculeaz
li1 ai1 ;
a1 j
u1 j ;
a11
b
d1 1 ; a11 0 ;
a11
}
dac ij atunci
{ calculeaz
j 1
lij aij lik ukj ;
k 1
1 i 1
uij aij lik ukj ;
lii k 1
1 i 1
di b1 lik d k
lii k 1
}
dac i<j atunci
{ calculeaz
1 i 1
uij aij lik ukj ;
lii k 1
}
}
calculeaz
{ xn dn ;
pentru i=n-1 ,, 1
n
di aij x j
j i 1
calculeaz xi ;
uii
}
Tiprete soluiile
}
/* Funcia ntoarce
0 dac nu se poate face descompunerea matricei
1 dac descompunerea matricei are loc */
int Crout( int or_mat,
double MAT[][NrMax],
double X[],
double TL[],
Rezolvarea numeric a sistemelor de ecuaii 57
double L[][NrMax],
double U[][NrMax])
{
int i,j,k;
double s;
static double Y[NrMax];
/* Pentru fiecare coloan - i - */
for(i=1;i<=or_mat;i++)
{
/* Se calculeaz elementele matricei L */
/* Pentru fiecare linie - j - */
for(j=i;j<=or_mat;j++)
{
s=0;
for(k=1;k<=i-1;k++)s+=L[j][k]*U[k][i];
L[j][i]=MAT[j][i]-s;
}
for(k=1;k<=i-1;k++)L[k][i]=0;
for(j=1;j<=i-1;j++)U[i][j]=0;
U[i][i]=1;
}
if( TRIUNGHIINF(or_mat,L,TL,Y)==0 )return 2;
If( TRIUNGHISUP(or_mat,U,Y,X)==0 )return 2;
return 1;}
Algoritmul pentru metoda lui Cholesky este identic cu algoritmul Crout, dar
se ine cont c a ij a ji ; i, j 1,..., n
/* Funcia ntoarce
0 dac nu se poate face descompunerea matricei
1 dac descompunerea matricei are loc
2 dac matricea nu e simetric
3 dac sistemul nu se poate rezolva
*/
int Choleski( int or_mat,
double MAT[][NrMax],
double L[][NrMax],
double X[],
double TL[])
{
int i,j,k;
double s;
static double U[NrMax][NrMax],Y[NrMax];
/* Verificarea simetriei */
for(i=1;i<=or_mat;i++)
for(j=i+1;j<=or_mat;j++)
if( MAT[i][j]!=MAT[j][i] )return 2;
/* Pentru fiecare linie */
for(i=1;i<=or_mat;i++)
{
/* Calculm elementele de pe linie cu j<i */
for(j=1;j<=i-1;j++)
{ s=0;
for(k=1;k<=j-1;k++)s+=L[i][k]*L[j][k];
if( L[j][j]==0 ) return 0; else L[i][j]=(MAT[i][j]-s)/L[j][j];
}
/* Aflm elementul diagonal */
s=0;
for(k=1;k<=i-1;k++)s+=L[i][k]*L[i][k];
if( (MAT[i][i]-s)<0)return 0;else L[i][i]=sqrt(MAT[i][i]-s);
unde
C= E n E n 1 ...E 1 B (3.25)
k 1
k k 1 a i , k 1 k 1
a ij a ij a k 1
k 1 pentru ik-1 , j k-1
a k 1,k 1
k k 1
a k 1, j a k 1, j
pentru j k-1
1
bi bi
k 1
k k 1 a i ,k 1 k 1
bi bi bk 1 pentru i k 1
k 1
a k 1, k 1
k k 1
bk 1 bk 1 pentru k = 2,3,... , n
60 Metode numerice n electronic
{Variabile
A : matricea sistemului;
B : vectorul termenilor liberi;
X: vectorul soluiilor;
n : numrul necunoscutelor (ordinul matricei), ntreg;
lin : indicele liniei, ntreg;
k : indice suplimentar al liniei, ntreg;
j : indice coloan, ntreg;
er1: indic dac e false c algoritmul poate continua ( s-a gsit pivot );
ok: indic dac e true succesul interschimbrii liniilor, boolean;
det : variabila n care se calculeaz determinantul sistemului, real ;
{
lin = 1;
er1 =false;
det = 1;
repet
dac A[lin,lin] = 0 atunci
{ ok = false;
k = lin+1;
repet
dac A[k,lin] 0 atunci {
INTERSCHIMBA LINIA lin cu LINIA k ;
ok = true;
}
altfe k = k+1;
dac k = n+1 atunci er1 = true ;
pn cnd (er1 = true) sau (ok = true)
}
dac er1 = false atunci {
k = lin+1;
repet
A k, lin
calculeaz m= ;
A lin, lin
pentru j = lin ... n calculeaz A[k,j]= A[k,j]-m A[lin,j]
B[k] = B[k]- m B[lin];
k= k+1;
pn cnd k = n+1;
}
lin = lin+1;
pn cnd (lin = n+1) sau (er1 = true );
Rezolvarea numeric a sistemelor de ecuaii 61
Aceast metod face posibil rezolvarea sistemelor AX=B pentru cazul cnd
A Rmxn i B R , m>n caz n care nu au soluie n general. Soluionarea se face cu
m
a 'pp s p (3.39)
Elementele de sub diagonal se fac zero iar cele situate n dreapta coloanei p se
calculeaz astfel:
2
H p . j j m .( v Tp . j ). v p (j>p) (3.40)
vip2
i p
{Variabile
A:matricea sistemului;
B:vectorul termenilor liberi;
Xvectorul soluiilor;
Q:matricea ortogonal de ordinul mxm;
R:matricea superior triunghiular de ordinul mxn;
k,i,n,m:indici, ntregi;
{
Construiete matricea Q ca matrice unitate de ordinul m;
pentru k=1 ,, m
{calculeaz
pentru i=k ,, m
{calculeaz s= aik2 ;
dac akk 0 atunci s= -s;
pentru i=1 ,, k-1 vi 0 ;
v k a kk s
a kk s ;
}
pentru i= k+1,, n
calculeaz vi aik ;
aik 0 ;
p=s* v k ;
}
calculeaz Ak 1 Qk * Ak ;
Rezolvarea numeric a sistemelor de ecuaii 65
bk 1 Qk * bk ;
Q ( K ) Qk * q ( 1) ;
}
rezolv sistenul Am * x bm ;
calculeaz R A T ;
calculeaz Q (Q ( m) ) T ;
Scrie soluiile;
}
s=0;
for(i=k;i<=m;i++)s+=pow(A[i][k],2);
s=sqrt(s);
if(A[k][k]<0) s=-s;
for(i=1;i<=k-1;i++)v[i]=0;
v[k]=A[k][k]+s;
for(i=k+1;i<=m;i++)v[i]=A[i][k];
/* Se transform matricea A */
A[k][k]=-s;
for(i=k+1;i<=m;i++)A[i][k]=0;
66 Metode numerice n electronic
p=s*v[k];
for(j=k+1;j<=n;j++)
{
t=0;
for(i=k;i<=m;i++)t+=v[i]*A[i][j]/p;
for(i=k;i<=m;i++)A[i][j]=A[i][j]-t*v[i];
}
/* Se transform termenul liber */
t=0;
for(i=k;i<=m;i++) t+=v[i]*b[i]/p;
for(i=k;i<=m;i++) b[i]=b[i]-t*v[i];
/* Se transform matricea Q */
for(j=1;j<=m;j++)
{
t=0;
for(i=k;i<=m;i++)t+=v[i]*Q[i][j]/p;
for(i=k;i<=m;i++)Q[i][j]=Q[i][j]-t*v[i];
}
}
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
s=Q[i][j];
Q[i][j]=Q[j][i];
Q[j][i]=s;
}
}
Rezolvarea numeric a sistemelor de ecuaii 67
b1 c1 0 0 ... 0 0 0 x1 d 1
a2 b2 c2 0 ... 0 0 0 x2 d 2
0 a3 b3 c3 ... 0 0 0 x3 d 3
(3.42)
0 0 0 0 ... a n 1 bn 1 c n 1 x n-1 d n-1
0 0 0 0 ... 0 an bn x n d n
l1 0 0 ... 0 0 0 y1 d 1
a2 l2 0 ... 0 0 0 y2 d 2
0 a3 l3 ... 0 0 0 y3 d 3
(3.48)
0 0 0 ... a n-1 l n-1 0 y n-1 d n-1
0 0 0 ... 0 an ln y n d n
Prin identificarea n (3.48) se deduc urmtoarele relaii recursive de calcul :
d1
y1 l
1
d i a i y i-1
(3.49)
yi , i=2 ,3,...n
ti
Din sistemul UX=Y scris detaliat :
1 u1 0 0 ... 0 0 0 x1 y1
0 1 u2 0 ... 0 0 0 x2 y2
0 0 1 u3 ... 0 0 0 x3 y3
(3.50)
0 0 0 0 ... 1 u n-1 0 x y
n-1 n-1
0 0 0 0 ... 0 1 un xn yn
rezult relaiile recursive de calcul ale rdcinilor. Prin retrosubtituie se obin :
xn yn
(3.51)
x i y i si x i 1 , i=n-1,...,1
{Variabile
a: vectorul elementelor subdiagonle din matricea sistemului(vezi
3.42);
b: vectorul elementelor diagonale din matricea sistemului(vezi 3.42);
c :vectorul elementelor supradiagonale din matricea sistemului
(vezi 3.42);
l: vectorul elementelor diagonale din matricea L (vezi 3.44);
p: vectorul elementelor subdiagonale din matricea L (vezi 3.44);
u :vectorul elementelor supradiagonale din matricea U (vezi 3.44);
y vectorul UX;
x vectorul soluiilor;
i :indice, ntreg;
eroare: semafor, boolean;
Rezolvarea numeric a sistemelor de ecuaii 69
calculeaz xn = y n
{
int i,j;
for(i=1;i<=or_mat;i++)
for(j=1;j<=or_mat;j++)
if( (abs(i-j)>1) && (MAT[i][j]!=0))return 0;
return 1;
}
/* Funcia care implementeaz metoda de rezolvare a sistemelor
liniare tridiagonale
Funcia ntoarce :
1 dac se gsesc soluiile
0 n caz de eec
*/
{
int i;
static double p[NrMax],t[NrMax],s[NrMax],teta[NrMax];
for(i=2;i<=or_mat;i++)p[i]=a[i];
t[1]=b[1];if( t[1]==0 )return 0 ;
s[1]=c[1]/t[1];
teta[1]=TL[1]/t[1];
for(i=2;i<=or_mat-1;i++)
{
t[i]=b[i]-a[i]*s[i-1];
if(t[i]==0) return 0;
s[i]=c[i]/t[i];
teta[i]=( TL[i]-a[i]*teta[i-1])/t[i];
}
t[or_mat]=b[or_mat]-a[or_mat]*s[or_mat-1];
if (t[or_mat]==0) return 0;
teta[or_mat]=(TL[or_mat]-a[or_mat]*teta[or_mat-1])/t[or_mat];
sol[or_mat]=teta[or_mat];
for(i=or_mat-1;i>=1;i--)sol[i]=teta[i]-s[i]*sol[i+1];
return 1;
}
Dintre metodele indirecte sau metodele iterative care rezolv un sistem de ecuaii
liniare amintim: metoda lui Jacobi, metoda Gauss-Seidel.
X ( 1 ) CX ( 0 ) D (3.54)
X ( 2 ) CX ( 1 ) D C 2 X ( 0 ) CD D
(3.56)
X (k)
C X k (0)
(C k-1
C k-2
...... C I)D
Seria matriceal geometric S=I+C 1 C 2+....+C K-1 ... este convergent atunci cnd
norma sau toate valorile proprii ale matricei C sunt subunitare i are suma S=(I-C) -1 .
72 Metode numerice n electronic
Aceast condiie trebuie ndeplinit de sisteme pentru a putea fi rezolvate prin metoda
lui Jacobi.
dac i 1 atunci er = 0 ;
i = i+1;
pn cnd (i = n+1) sau (er = 1);
dac er = 1 atunci {
scrie Sistemul nu se poate rezolva cu aceast metod ;
STOP;
}
altfel { k = 0;
repet
i =1;
repet
Rezolvarea numeric a sistemelor de ecuaii 73
bi
calculeaz xi k
a i,i
pentru j= 1... n
a i,j
calculeaz xi k xi k x jk-1 ;
a i,i
i =i+1;
pn cnd i = n+1;
k = k+1;
pn cnd x i k x i k-1 i = 1...n
k
scrie soluiile xi = x i i = 1... n
STOP
}}
}
for(i=1;i<=or_mat;i++)
{
sum=0;
for(j=1;j<=or_mat;j++)sum+=fabs(MAT[i][j]);
if ( 2*fabs(MAT[i][i])<=sum )return 0; }
return 1;
}
Funcia ntoarce
0 n caz de reuit;
1 dac matricea nu e dominant diagonal
*/
double MAT[][NrMax],
double TL[],
double x0[],
double err)
{
int i,j,k,sem;
static double x1[NrMax];
do
{
sem=1;
for(i=1;i<=or_mat;i++)
{
x1[i]=TL[i]/MAT[i][i];
for(j=1;j<=or_mat;j++)if(j!=i) x1[i]-
=(MAT[i][j]*x0[j])/MAT[i][i];
}
for(i=1;i<=or_mat;i++)
{
if( fabs(x1[i]-x0[i])>err)sem=0;
x0[i]=x1[i];
}
}while(sem==0);
return 0;
}
Aceast metod difer de metoda lui Jacobi prin faptul c la fiecare iteraie se
utilizeaz valorile calculate la pasul anterior pentru variabilele ale cror valori nu sunt
cunoscute la pasul curent i valorile de la pasul curent pentru variabilele calculate.
Astfel formula de calcul (3.53) devine :
bi i-1 a n a
xj
ij (k) ij (k-1 )
xi k xj (3.58)
a ii j=1 a ii j=i+1 a ii
i = 1,2,...,n
k =1,2,...,n,...
n rest, metoda se identific cu metoda lui Jacobi.
Pentru acelai grad de precizie, viteza de convergen a metodei lui Gauss-Seidel este
de dou ori mai mare dect viteza de convergen a metodei lui Iacobi .
Rezolvarea numeric a sistemelor de ecuaii 75
{ Variabile
A: matricea sistemului;
B: matricea termenilor liberi;
S: matricea rezultat prin eliminaea elementului diagonal;
p: variabila care ine produsul elementelor de pe diagonal; real;
n,er:ordinul sistemului,er=1,A, er=0, F:ntregi;
i,k: indici, ntregi;
: ine suma, real (3.57);
X: vectorul soluiilor;
{
p=1;
pentru k = 1...n calculeaz p= p a k,k ;
dac p= 0 atunci scrie Sistemul nu se poate rezolva cu aceast
metod
STOP.
i =1;
er =1
repet
n a ij
calculeaz i ;
j=1 a ii
j i
dac i 1 atunci er = 0 ;
i = i+1;
pn cnd (i = n+1) sau (er = 1);
dac er = 1 atunci {
scrie Sistemul nu se poate rezolva cu aceast metod ;
STOP;
}
altfel {
k = 0;
repet
i =1;
repet
bi
calculeaz xi k
a i,i
pentru j= 1... n
{
dac j < i atunci
ai,j k
calculeaz xi k xi k xj ;
ai,i
76 Metode numerice n electronic
for(i=1;i<=or_mat;i++)
{
sum=0;
for(j=1;j<=or_mat;j++)sum+=fabs(MAT[i][j]);
if ( 2*fabs(MAT[i][i])<=sum )return 0;
}
return 1;
}
Funcia ntoarce
0 n caz de reuit;
1 dac matricea nu e dominant diagonal
Rezolvarea numeric a sistemelor de ecuaii 77
*/
for(j=1;j<=or_mat;j++)
if( DD(or_mat,MAT)==0) return 1;
do
{
sem=1;
for(i=1;i<=or_mat;i++)
{
x1[i]=TL[i]/MAT[i][i];
{
if (j<i) x1[i]-=(MAT[i][j]*x1[j])/MAT[i][i];
if (j>i) x1[i]-=(MAT[i][j]*x0[j])/MAT[i][i];
}
}
for(i=1;i<=or_mat;i++)
{
if( fabs(x1[i]-x0[i])>err)sem=0;
x0[i]=x1[i];
}
}
while(sem==0);
return 0;
}
f1
x ,x ,...,x 0
1 2 n
f2
x ,x ,...,x 0
1 2 n
(3.60)
---------------
f
n x ,x ,...,x 0
1 2 n
Dac cel puin una din funciile f 1 , f 2 , f 3 ... f n sunt neliniare n variabilele x1 ,x 2 ,...,x n
sistemul de ecuaii (3.59) sau (3.60) se numete sistem de ecuaii neliniare.
f1 f1 f1
x ...
1
x2 x n
F( x ) = ---------------- (3.62)
f n fn
...
fn
x1 x 2 x n
f i (x k )
n
x j k+1 x j k f i ( x k ) , i = 1,2,...,n , k = 0,1,2,.... (3.64)
j=1 x j
ordinul doi, exclusiv. Dac notm x j k+1 x j k = j,k j = 1,2,...,n sistemul (3.64) se
poate scrie matriceal asfel :
f1 f1 f1
...
x1 x 2 xn X 1K f 1 x
f2 f2 f2
x X 2 K f 2 x
xn
... (3.65)
x2
1
f n f n f n X nK f n x
...
x1 x 2 x n
x=x k
x=x k
h0 = 2nA0 B0 C 1
Atunci pentru punctul de start x0 , irul iterativ :
1
x k+1 x k F x k f ( xk ) k = 0,1,2,...
k-1
1 p
1
xk h02 B0 .
2
Demonstraia teoremei nu o prezentm, ea putnd fi gsit n literatura de specialitate.
80 Metode numerice n electronic
{ Variabile
X : valorile soluiilor iterative , vector ;
X : valorile de modificare a soluiilor iterative , vector ;
X0 : soluia de start a sistemului , vector ;
det F : determinanatul matricei F(x) ;
{
k = 0;
Dac det F = det F( xk ) = 0 atunci scrie Alege alt soluie de start
STOP
altfel
{ repet
k = k+1;
calculeaz F ( xk-1 ) ;
f i ( x k-1 )
n
x j,k x j ,k-1 f i ( x k-1 ) i = 1,2,...,n
j=1 xj
calculeaz
x j,k x j,k-1 x j,k-1 , j = 1,2,...,n
}
pn cnd
x j,k x j,k-1 , j = 1,2,...,n sau F(xk-1 ) = 0
}
Soluiile sistemului sunt
}
}
int i ;
double deltax,deltay,det,detx,dety,xn_1,xn,yn_1,yn;
i=0;
xn=*startx;
yn=*starty;
do
{
xn_1=xn;
yn_1=yn;
det=dec1x(xn_1,yn_1)*dec2y(xn_1,yn_1)-
dec2x(xn_1,yn_1)*dec1y(xn_1,yn_1);
detx=-
ec1(xn_1,yn_1)*dec2y(xn_1,yn_1)+ec2(xn_1,yn_1)*dec1y(xn_1,yn_1);
dety=-
dec1x(xn_1,yn_1)*ec2(xn_1,yn_1)+dec2x(xn_1,yn_1)*ec1(xn_1,yn_1);
if (det==0) return 0;
deltax=detx/det;
deltay=dety/det;
xn=xn_1+deltax;
yn=yn_1+deltay;
}
while(((fabs(xn-xn_1)>eroare) || (fabs(yn-yn_1)>eroare) &&
i<=NITER));
if(i>=NITER) return 0;
*startx=xn;
*starty=yn;
return 1;
}
82 Metode numerice n electronic
3.3. APLICAII
1. Se d circuitul electric din figura 3.1 ce are urmtoarele componente:
Aplicnd teoremele lui Kirchhoff pentru N-1 noduri deci 3 i pentru O=L-N+1 ochiuri
fundamentale deci O=4, unde N reprezint numrul total de noduri ale circuitului, iar
L numrul total de laturi ale circuitului, rezult urmtorul sistem liniar de apte ecuaii
cu apte necunoscute. Necunoscutele sunt curenii din cele apte laturi ale circuitului,
matricea necunoscutelor sistemului este format din valorile rezistoarelor din circuit,
iar termenii liberi ai sistemului sunt valorile surselor de alimentare.
R1 R5
E3
R2
E1 R3 R6 R8
E2 R7
R4
Fig.3.1.Circuitelectriccusursedeccirezistoare
R1 I 1 R2 I 2 0 I 3 0 I 4 0 I 5 0 I 6 0 I 7 E1
0 I R I R I R I 0 I 0 I 0 I 0
1 2 2 3 3 4 4 5 6 7
0 I 1 0 I 2 R3 I 3 0 I 4 0 I 5 R6 I 6 R7 I 7 E 2
0 I 1 0 I 2 0 I 3 0 I 4 R5 I 5 R6 I 6 0 I 7 E 3
I I I 0 I I I 0 I 0
1 2 3 4 5 6 7
I1 I 2 0 I 3 I 4 0 I 5 0 I 6 0 I 7 0
0 I 0 I 0 I 0 I I I I 0
1 2 3 4 5 6 7
Introducnd valorile numerice ale rezistenelor i ale surselor se obine sistemul:
2,4 I 1 3,6 I 2 0 I 3 0 I 4 0 I 5 0 I 6 0 I 7 10
0 I 3,6 I 1,5 I I 0 I 0 I 0 I 0
1 2 3 4 5 6 7
0 I 1 0 I 2 1,5 I 3 0 I 4 0 I 5 2,7 I 6 1,2 I 7 12
0 I 1 0 I 2 0 I 3 0 I 4 4,8 I 5 2,7 I 6 0 I 7 15
I I I 0 I I I 0 I 0
1 2 3 4 5 6 7
I1 I 2 0 I 3 I 4 0 I 5 0 I 6 0 I 7 0
0 I 0 I 0 I 0 I I I I 0
1 2 3 4 5 6 7
Rezolvarea numeric a sistemelor de ecuaii 83
n multe probleme tehnice este necesar s se cunoasc derivata ntr-un punct a unui
semnal eantionat. Rezultatele multor experimentri electronice sunt date sub form
de funcii tabelate: u f ( i ) , i g( u) etc. Calculul derivatelor acestor funcii ntr-un
anumit punct ne poate da informaii asupra unui parametru al circuitului cum ar fi
rezistena dinamic, inversul ei etc. Pentru determinarea derivatei funciilor tabelate
suntem nevoii s utilizm metodele numerice .
Metodele numerice de calcul al derivatei ntr-un punct dat, se pot aplica i
funciilor a cror expresie analitic este cunoscut, obinnd n acest mod tangenta la
curb n punctul de calcul.
h h
f x0 f x0
2 2
f ' x0 (4.5)
h
Deoarece n formula de calcul a derivatei numerice intervin numai dou puncte
x0 h / 2 i x0 h / 2 , numim aceast formul derivata prin dou puncte a funciei
f (x) .
Pentru calculul derivatelor de ordin superior se aplic formula (4.5) pentru funcia
f ' ( x ). Pentru o mai bun nelegere se face un calcul complet al derivatei de ordinul
doi i trei a metodei de calcul a
y derivatelor de ordin superior.
P h h
f ' x0 f ' x0
2 2
f x0
''
h
Q
R f x0 h f x0 f x0 f x0 h
h2
f x0 h 2 f x0 f x0 h
(4.6)
y f ( x) h2
h h
x f '' x0 f '' x0
2 2
f ''' x0
h
3 h h h h 3
f x0 h 2 f x0 f x0 f x0 2 f x0 f x0 h
2 2 2 2 2 2
3
h
3 h h 3
h 3 f x0 3 f x0 f x0 h
f xFig.4.1.GraficulderivateinpunctulQ
0 2 2 2 2
3
(4.7)
h
n acest mod se poate obine orice derivat de ordin superior .
f x0
x-x0 2
x-x0
3
x0
x-x0 '
f ( x ) f ( x0 ) + f ''
f ''' ( ) (4.8)
1! 2! 3!
86 Metode numerice n electronic
x , x0 . Substituim
h
unde x x0 n dezvoltarea lui f ( x ) , (4.8).
2
h h 2 '' h3 '''
f 1
h
f x0 f x0 f ' x 0 f x0 (4.9)
2 2 8 48
h
unde 1 x0 ,x0 .
2
h
Substituim x x 0 n dezvoltarea lui f ( x ) , (4.8)
2
h h 2 '' h 3 '''
f x0 f x0 f ' x0 f 2
h
f x0 (4.10)
2 2 8 48
h
unde 2 x0 ,x0 . Scznd membru cu membru relaiile (4.9) i (4.10) rezult:
2
h h
f x0 f x0
h2 f 1 f 2
''' '''
f ' x0
2 2
h 24 2 (4.11)
h h
f x0 f x0
2 2 h
2
= f '''
h 24
h h
unde x0 ,x0 ,
2 2
rezult c eroarea de trunchiere a derivatei prin dou puncte este :
h 2 '''
eT = f (4.12)
24
h h h2
Dac f ''' M pentru orice x x0 ,x0 atunci eT < M
2 2 24
{Variabile
x0 : punctul n care se calculeaz derivata , real;
h : pasul, real ;
der : variabila derivatei, real;
{
f x0 0 .5h f x0 0 .5h
calculeaz der = ;
h
}
Derivata este der ;
}
Derivarea numeric 87
h2 h22 h12 h1
a , b , c (4.17)
h1 h1 h2 h1h2 (h1 h2 ) h2 h1 h2
f ( x0 )
'
h12 f x0 h2 h22 h12 f x0 h22 f x0 h1
(4.18)
h1h2 h1 h2
care d o eroare de trunchiere nul pentru funciile constante, liniare i ptratice.
Pentru h1 h2 h / 2 se obine formula derivatei numerice prin dou puncte.
PUNCTE
Pentru funciile de grad mai mare ca doi, eroarea de trunchiere o determinm din
dezvoltarea n serie Taylor a funciei f ( x ) :
( x x0 ) ' ( x x0 )2 ' ( x x0 )3 '
f ( x ) f ( x0 ) f ( x0 ) f ( x0 ) f ( ) (4.19)
1! 2! 3!
unde [x , x0 ] .
Substituim x x 0 h1 i rezult:
h1 ' h2 h3
f ( x0 h1 ) f ( x0 ) f x0 1 f '' x0 1 f ''' 1 (4.20)
1! 2! 3!
unde 1 x0 -h1,x0 .
h2 h3
f x0 2 f '' x0 2 f ''' 2
h2 '
f ( x0 h2 ) f ( x0 ) (4.21)
1! 2! 3!
unde 2 x 0 ,x 0+h2 .
Se nmulete egalitatea (4.20) cu - h22 i egalitatea (4.21) cu h12 i se adun. Rezult :
h12 f x0 h2 h22 h12 f x0 h22 f x0 h1
f ' ( x0 )
h1h2 h1 h2
h1h2
6 h1 h2
h2 f ''' 1 h1 f ''' 2 (4.22)
Dac f ''' x M
pentru orice x x0 -h ,x0 h2 atunci
h1h2
eT M (4.24)
6
{Variabile
x0 : punctul n care se calculeaz derivata , real ;
h1 : distana punctului din stnga fa de x0 , real ;
h2 : distana punctului din dreapta fa de x0 , real ;
der : variabila derivatei , real;
{
calculeaz der =
h12 f x0 h2 h22 h12 f x0 h22 f x0 h1
;
h1h2 h1 h2
}
Derivarea numeric 89
Pentru formula acestei derivate se utilizeaz cinci puncte, dou cte dou egal
distanate de punctul central, n care se calculeaz derivata :
x 0 2h, x 0 h, x 0 , x 0 h, x 0 2h (4.25)
Formula derivatei numerice prin cinci puncte se caut sub forma :
f ' x0 af x0 2h bf x0 h cf x0 df x0+h+ef x0 2h (4.26)
Pentru determinarea necunoscutelor a , b, c, d, e, particularizm funcia f ( x )
cu funcie: constant, liniar, ptratic, de gradul trei i de gradul patru .
Pentru f ( x) c f ' ( x ) 0, f ' ( x 0 ) 0 i ecuaia (4.26) devine:
0 abc d e (4.27)
Pentru f ( x ) x x0 f ' ( x ) 1, f ' ( x0 ) 1 i
1 2ha hb 0c hd 2he (4.28)
Pentru f ( x ) ( x x0 )2 f ' ( x ) 2( x x0 ), f ' ( x0 ) 0 i
0 4 h 2 a h 2 b 0 c h 2 d 4h 2 e (4.29)
Pentru f ( x ) ( x x0 )3 f ' ( x ) 3( x x0 )2 , f ' ( x0 ) 0 i
0 8h3a h3b 0c h3d 8h3e (4.30)
Pentru f ( x ) ( x x0 ) f ( x ) 4( x x0 ), f ' ( x0 ) 0 i
4 '
{Variabile
x0 : punctul n care se calculeaz derivata, real ;
h : pasul, real ;
der : variabila derivatei, real;
{
calculeaz der =
1
12h
f x0 2 h 8 f x0 h 8 f x0 h f x0 2 h ;
}
Derivata este der ;
}
Se tie c numai funciile continue au derivat. n practic ntlnim des cazuri cnd
o funcie continu este dat sub form de eantioane, fr a cunoate expresia analitic
a funciei. n acest caz, se poate calcula derivata funciei date sub form de tabel cu
ajutorul programului prezentat n paragraful 4.4.1. Deoarece eantioanele pot fi luate
la pai diferii, se utilizeaz metoda derivrii n trei puncte. Pentru ca derivata s fie
Derivarea numeric 91
ct mai exact este necesar ca pasul de eantionare s fie ct mai mic. In caz contrar,
derivata se va calcula cu eroare mare.
#include <stdio.h>
#include <conio.h>
#include <math.h>
{
double Derfcnr( double h1,
double h2,
double f1,
double f0,
double f2)
{
return (h1*h1*f2+(h2*h2-h1*h1)*f0-h2*h2*f1)/(h1*h2*(h1+h2);
}
void main(void)
{
double pas1,pas2,fc1,fco,fc2;
clrscr( );
printf(Dai pasul1) ; scanf(%lf,&pas1);
printf (Dai pasul2); scanf(%lf,&pas2);
printf (dai funcia in x0-h1);scanf(%lf,&fc1);
printf (Dai funcia in x0);scanf(%lf,&f0);
printf (Dai funcia in x0+h2);scanf(%lf,&fc2);
printf(derivata este %lf\n,Derfcnr(pas1,pas2,fc1,fc0,fc2));
getche( );
/
4.5. APLICAII
1. Se d caracteristica I-U a unei diode tunel n figura 4.2. Se cere rezistena dinamic
a diodei n punctele A,B,C,D,E,F,G,H,I,J,K,L.
Tabelul 4.1.
h1 h2 f1 f0 f2 Derivata
A 0.2 0.3 0.7 0.1 0.2 0.223333
B 0.2 0.3 2.3 27 40 29.33333
C 0.2 0.2 40 50 77 92.53333
D 0.01 0.01 60 65 68 400.3333
E 70
F 0.2 0.3 130 150 170 86.66667
G 0.2 0.3 190 200 240 83.33333
H 0.25 0.2 220 250 295 38.33333
I 0.1 0.1 250 275 300 500.8922
J 300
K 0.2 0.3 380 400 430 100.4356
L 0.2 0.3 440 450 470 56.34012
2. Se consider funcia
f(x) 2 x 2 exp( x ) sin( 3 x 1.2)
i se cere derivata funciei n punctul x 1 .
Derivata s-a calculat prin toate metodele i s-au obinut urmtoarele rezultate:
-derivata prin dou puncte h= 10 6 ; f ' (1) 15.628085
-derivata prin trei puncte h1 10 6 ; h2 15
. 6 ; f( 1 ) 15.628085
-dervata prin cinci puncte h 10 ; 6
f 1 15.628085.
5
INTEGRAREA NUMERIC*
Metodele numerice de integrare se clasific dup tipul funciei de integrat i
valoarea limitelor de integrare.
I. Prima grup de metode se refer la funciile continue i cu limite finite de
integrare. Aceste metode se mpart la rndul lor n dou subgrupe n funcie de modul
de divizare a intervalului de integrare:
a) Metode ce mpart intervalul de integrare n subintervale de aceeai lungime,
numrul subintervalelor fiind impus de operator. Dintre aceste metode amintim:
metoda dreptunghiului, metoda trapezului, metoda lui Simpson i metoda lui
Richardson;
b) Metode ce mpart intervalul de integrare n aa fel nct eroarea de calcul s fie
minim. Dintre aceste metode amintim i studiem metoda cuadraturii a lui Gauss.
II. A doua grup de metode se refer la integralele improprii, adic la integrarea
funciilor cu discontinuiti de spea nti i a doua pe intervale de integrare finite sau
integrarea funciilor continue pe intervale de integrare infinite.
III. A treia grup de metode numerice de integrare se ocup cu integrarea dubl
a funciilor de dou variabile. Amintim n acest sens formulele de cubatur a
trapezului i a lui Simpson.
Aceast metod are erori de calcul mari pentru funcii diferite de o constant. n
cazul cnd se dorete o evaluare grosier a unei integrale, se poate aplica aceast
metod, iar dac numrul subintervalelor pentru intervalul de integrare crete, eroarea
*)Bibliografie: [6],[7],[15],[22]
de calcul scade. Aceast cretere a numrului de subintervale se face n detrimentul
Fig.5.1.ReprezentareagraficaintegraleiI
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
sum: valoarea integralei, real;
{
Integrarea numeric 95
sum=0;
ld ls
calculeaz h ;
n
pentru i=0, , n-1 calculeaz sum =sum +h* f (i )
tiprete valoarea integralei sum;
}
}
f ( x i ) f ( x i 1 )
Ii h (5.5)
2
h n 1
I f ( x i ) f ( x i 1 ) f ( x 0 ) 2 f ( x1 ) ... 2( x n 1 ) f ( x n )
h
(5.6)
2 i0 2
Aceast expresie prezint formula de integrare numeric prin metoda trapezului i are
eroare de trunchiere nul pentru funcii pn la gradul nti inclusiv.
Metoda de integrare a
y
trapezului este superioar din
punct de vedere al erorilor de
trunchiere fa de metoda
f ( x i 1 ) dreptunghiului, dar ca timp de
f ( xi ) calcul este comparabil cu
aceasta, pentru un acelai
numr de pai de integrare.
Simplitatea ei o face
utilizabil n numeroase cazuri,
precizia ei depinznd de
numrul de subintervale ales.
b Cu ct acest numr este mai
mare cu att precizia este mai
bun, dar timpul de calcul
a xi x i1 x al integralei crete. Aceast in-
Fig.5.2.Reprezentareagraficametodeideintegrare tegral st la baza metodei lui
atrapezului Richardson.
Vom calcula eroarea de trunchiere pentru Ii (5.5). Pentru aceasta vom dezvolta funcia
f ( x ) n jurul punctelor x i i x i 1 :
( x xi ) ( x-x i ) 2
f ( x )=( x i ) f ( x i )+ f ( x i ) ... (5.7)
1! 2!
( x x i 1 ) ( x x i 1 ) 2
f(x) f ( x i 1 ) f ( x i 1 ) f ( x i 1 ) ... (5.8)
1! 2!
Cu ajutorul celor dou dezvoltri (5.7) i (5.8) vom construi o nou funcie, media
acestor funcii care aproximeaz cel mai bine funcia n intervalul ( x i , x i 1 ) .
Considernd x i 1 x i h putem scrie noua funcie astfel:
f ( x i+1 ) f ( x i ) f ( x i ) f ( x i 1 )
f ( x )= ( x xi ) h f ( x i 1 )
2 2
(5.9)
f ( x i ) f ( x i 1 ) f ( x i 1 ) h 2
( x xi )2 h ( x xi ) f ( x i 1 ) ...
4 2 4
f ( x i+1 ) f ( x i ) 3 f ( x i 1 ) 3 f ( x i 1 ) 3
h h h ...
12 4 4
Integrarea numeric 97
f ( x i 1 ) f ( x i ) f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) f ( x i ) 3
h h h ... (5.10)
2 4 12
Observm c eroarea de trunchiere este
f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) f ( x i ) 3
eTi h h ... (5.11)
4 12
Considerm c eroarea de trunchiere este de forma:
eTi k h 2 f ( x i 1 ) f ( x i ) (5.12)
unde k se determin astfel ca formulele (5.11) i (5.12) s fie egale. Considerm o
funcie pentru care avem eroare de trunchiere prin metoda trapezului. Aceasta este
funcia ptratic f ( x ) x 2 . innd cont c x i 1 x i h rezult :
x i3 3 x i3
xi 1
x3 xi 1 h3
x 2 dx 3 xi
3
x i2 h h 2 x i
3
(5.13)
xi
Formula de calcul a integralei numerice prin metoda trapezului este dat n expresia
(5.6). Construim graful de procedur a formulei de calcul considernd c f ( x i ) au
erorile relative i , i = 0,1,...,n , nodurile n care se realizeaz operaiile ri , i
=1,2,...,n+3.
f ( x1 ) f ( x2 ) f ( x1 ) f ( x 2 )
E I ((( ...(((1 2 r1 )
f ( x1 ) f ( x 2 ) f ( x1 ) f ( x 2 ) f ( x1 ) f ( x 2 ) f ( x 3 )
f ( x3 ) f ( x1 ) f ( x 2 ) ... f ( x n 2 )
+ 3 r2 )... rn 3 )
f ( x1 ) f ( x 2 ) f ( x 3 ) f ( x1 ) f(x 2 ) ... f(x n 2 ) f ( x n 1 )
f ( x n1 ) 2 f ( x1 ) 2 f ( x 2 ) ... 2( x n1 )
n1 rn2 rn1 )
f ( x1 ) f ( x 2 ) ... f ( x n1 ) f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n1 ) f ( x n )
f ( x0 ) f (xn ) f ( x0 ) f ( x n )
( 0 n rn )
f ( x 0 ) f ( x1 ) f ( x0 ) f ( x n ) f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )
f ( x0 ) f ( xn )
rn 1 h rn 2 rn 1 h rn 2 rn
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )
f ( x0 ) f ( xn )
0
f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn ) n f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn )
2 f ( x1 )
1 (5.19)
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )
eI
innd cont c eroarea relativ este I , unde eI este eroarea absolut, putem
I
calcula eroarea absolut:
h f ( x 0 ) f ( x n ) h f ( x0 )
e I ( rn 1 h n 2 ) I rn 0
2 2
n-1 h f ( x n 1 ) ( rn 1 rn 2 ) h f ( x1 ) f ( x 2 ) .... f ( x n 1 )
n 2 h f ( x n 2 ) rn 3 h f ( x1 ) f ( x 2 ) .... f ( x n 2 )
n 3 h f ( x n 3 ) rn 4 h f ( x1 ) f ( x 2 ) .... f ( x n 3 ) ....
2 h f ( x 2 ) 1 h f ( x1 ) r1 h [ f ( x1 ) f ( x 2 )] (5.20)
Integrarea numeric 99
Fig.5.3.Grafuldeprocedurpentrumetodatrapezului
Dac considerm c toate erorile relative ce intervin n calcul se obin tot prin rotunjire
i sunt mai mici ca 5.10-t unde t este mantisa calculatorului i f ( x i ) pentru i =
0, 1, 2,...., n , atunci rezult urmtoarea margine a erorii absolute:
e I 5 10 t [3 I h ( 2 ( n 1) ( n 2 )
2
( n 3) ( n 4) ... 2 )]
5 10 t [ 3nh 5 h / 2 h ( n 2 3 n 8 ) / 2 ]
5 10 t h. ( n 2 9 n 3) / 2
e I 5 10 t h ( n 2 9 n 3) / 2 (5.21)
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
{
ld ls
calculeaz h ;
n
f (ls ) f (ld )
calculeaz sum h ;
2
pentru i=1 pn la n-1 calculeaz sum =sum +h* f (ls+i*h);
tiprete valoarea integralei sum;
}
eT=Ck2 (5.22)
Ca urmare
I=Ih+Ch2
I=Ik+Ck2 (5.23)
I h -I k
Prin scdere se calculeaz C= i nlocuind n formula integralei I rezult:
k 2 h2
Ih Ik
I Ih 2 (5.24)
k
1
h
expresie ce poart denumirea de formula lui Richardson i are o precizie mai mare
dect metoda trapezului.
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
m: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sumh: valoarea integralei cu diviziunea h, real;
sumk: valoarea integralei cu diviziunea k, real;
sum: valoarea integralei, real;
ld ls
{ calculeaz h ;
n
ld ls
calculeaz k ;
m
f (l s ) f (ld )
calculeaz sumh h ;
2
f (l s ) f (ld )
calculeaz sumk k ;
2
pentru i=1 pn la n-1 calculeaz sumh =sumh
+h* f (ls+i*h);
pentru i=1 pn la m-1 calculeaz sumk=sumk+k*
f (ls+i*k);
calculeaz sum=sumh+(sumh-sumk)/((k/h)*(k/h)-1);
tiprete valoarea integralei sum;
}
*/
double RichardsonF(double (*f)(double),
double ls,
double ld,
int nrpash,
int nrpask)
{
int i;
double suma,sumah,sumak,h,k;
h=(ld-ls)/nrpash;
k=(ld-ls)/nrpask;
sumah=0.5*h*(f(ls)+f(ld));
sumak=0.5*k*(f(ls)+f(ld));
for(i=1;i<=nrpash-1;i++)sumah+=h*f(ls+i*h);
for(i=1;i<=nrpask-1;i++)sumak+=k*f(ls+i*k);
suma=sumah+(sumah-sumak)/(((k*k)/(h*h)-1));
return suma;
}
f ( x 0 ) 2 f ( x1 ) 2 f ( x 2 )+2 f ( x 3 )+... 2 f ( x n 1 ) f ( x n )
h
Ih (5.26)
2
f ( x0 ) f ( xn )
I h f ( x1 ) f ( x 2 )+f ( x 3 )+f ( x 4 )+... f ( x n 1 )
2 2
f ( x0 ) 1 1 1 1 1 f ( xn )
h f ( x1 ) f ( x 2 )+ f ( x 3 )+ f ( x 4 )+... f ( x n 1 )
6 3 3 3 3 3 6
1 2 2 2 1
h - f ( x 0 )- f ( x 2 )- f ( x 4 ) -... f ( x n 2 ) f ( x n )
3 3 3 3 3
f ( x 0 ) 4 f ( x1 ) 2 f ( x 2 )+4 f ( x 3 )+... 4 f ( x n 1 ) f ( x n )
h
I (5.28)
3
Expresia reprezint formula de calcul numeric al integralei pentru metoda lui Simpson.
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
suma: valoarea integralei, real;
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
suma: valoarea integralei, real;
{
ld ls
calculeaz h ;
n
f (ls ) f (ld )
calculeaz sum h. ;
3
pentru i=1 pn la n-1
dac i = par atunci calculeaz sum =sum
+(2/3)*h* f (ls+i*h);
altfel calculeaz sum=sum+(4/3)*h* f (ls+i*h);
tiprete valoarea integralei sum;
}
}
int nrpas)
{
int i;
double suma,h;
h=(ld-ls)/nrpas;
suma=h*(f(ls)+f(ld))/3.0;
for(i=0;i<=nrpas-1;i++)suma+=2*(1+i%2)*h*f(ls+i*h)/3.0;
return suma }
z z a 0 a1 y
z ( y)
y0 y1 y
Fig.5.4.Reprezentareagraficafunciei z ( y ) iapunctelordedivizare
1
Calculm valoarea exact a integralei I ( y )dy innd cont de formula (5.33)
1
+1 +1
I= ( y )dy= (a 0 a1 y )dy (5.34)
-1 -1
unde z a 0 a1 y reprezint ecuaia dreptei care trece prin punctele ( y 0 , ( y 0 )) i
( y1 , ( y1 )) .
Considerm funcia ( y ) de gradul trei, pentru care integrala se calculeaz cu eroarea
zero:
( y )=b0+b1 y+b2 y 2+b3 y 3 (5.35)
Aceast funcie o putem scrie i sub forma urmtoare:
( y ) = a 0+a1 y+( y-y 0 )( y-y1 )( 0 1 y ) (5.36)
( y y 0 )( y y1 )dy 0 (5.38)
1
+1
i y( y y 0 )( y y1 )dy 0 (5.39)
1
Din aceste dou ecuaii se obine sistemul:
+1
y 2 ( y 0 y 1 ) y y 0 y 1 dy 0
1
+1 (5.40)
y 3 ( y y ) y 2 y y y dy 0
0 1 0 1
1
sau
1
y 0 y1 0
3 (5.41)
y 0 y1 0
1 1
cu soluiile y0 i y1 (5.42)
3 3
Pentru calculul ponderilor k0 , k1 utilizm egalitatea
+1 +1
1 1
I = ( y ) dy = ( a 0 a1 y )dy k 0 ( ) k 1 ( ) (5.43)
-1 -1 3 3
+1 +1
a1 2
(a 0 a1 y)dy (a 0 y 2
y )
1
2a 0 (5.44)
1
nlocuind n (5.43) rezult:
1 1
k 0 (a 0 a1 ) k 1 (a 0 a 1 ) 2a 0 (5.45)
3 3
Prin identificare se obine sistemul:
k 0 k1 2
(5.46)
k 0 k1 0
cu soluiile: k 0 1 , k1 0 (5.47)
Formula de calcul a integralei prin metoda cuadraturii gaussiene cnd utilizm dou
puncte de divizare este:
b 1
1 1
I f ( x ) dx ( y)dy ( ) ( ) (5.48)
a 1 3 3
1
unde: ( y) (b a ) f ( y ) (5.49)
2
Integrala dintr-un polinom pn la gradul trei are eroarea de trunchiere nul. Pentru
polinoame de grad mai mare ca trei este:
eT k (IV) ( ) , -1 1 (5.50)
Pentru determinarea lui k lum ( y ) y 4
1 1 1
y5 2
( y ) dy y 4 dy 5 1
5
(5.51)
1 1
1 1
1 1 2
( y ) dy y 4 dy ( 3
) (
3
) eT e
9 T
(5.52)
1 1
8 1
k 24 de unde rezult k
45 135
Eroarea de trunchiere pentru formula cuadraturii gaussiene prin dou puncte este:
1 ( IV )
eT ( ) , -11 (5.53)
135
n acest caz
b 1 n 1
f ( x)dx (u)du k i ( yi ) (5.54)
a 1 i0
P0 ( y ) 1 , P1 ( y ) y
Pn ( y ) (2n 1) yPn 1 ( y ) (n 1) Pn 2 ( y )
1
(5.55)
n
iar ponderile sunt date de formula:
2
ki 2
(5.56)
(1 y i2 ) Pn ( y i )
1 1 n 1
( y )dy y 2n dy k i yi 2n eT (5.59)
1 1 i 0
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: gradul polinomului lui Legendre;
A[n, i]:matricea ponderilor, reali;
/* n=0 */
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=1 */
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=2 */
{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=3 */
{ 5.0/9.0,8.0/9.0,5.0/9.0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=4 */
{0.347854854137454 0.652145145862564
0.652145145862564 0.347854854137454
0 0
0 0
0 0
0 0
0 0
0 0}
/* n=5 */
{0.236926885056189, 0.478628670499366
0.568888888888889, 0.478628670499366,
0.236926885056189 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0}
/* n=6 */
{ 0.17132449237917, 0.360761573048139,
0.467913934572691, 0.467913934572691,
0.360761573048139, 0.17132449237917,
0, 0,
0, 0,
0, 0,
0. 0,
0, 0}
/* n=7 */
{0.12948496616887, 0.279705391489277,
0.381830050505119, 0.417959183673469,
0.381830050505119, 0.279705391489277,
0.12948496616887, 0,
0, 0,
0, 0,
0, 0,
0, 0}
/* n=8 */
{0.101228536290376, 0.222381034453374,
0.313706645877887, 0.362684783378362,
0.362684783378362, 0.313706645877887,
0.222381034453374, 0.101228536290376,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=9 */
{ 0.08127438361574, 0.180648160694857
0.260610696402935 0.312347077040003,
0.33023935500126 0.312347077040003,
0.260610696402935, 0.180648160694857,
0.08127438361574, 0,
0, 0,
0, 0,
0, 0},
/* n=10 */
{0.066671344308688, 0.14945134915058
0.219086362515982, 0.269266719309996,
0.295524224714753, 0.295524224714753,
0.269266719309996, 0.219086362515982,
0.14945134915058, 0.066671344308688,
0, 0,
0, 0,
0, 0},
/* n=11 */
{0.055668567116, 0.125580369465,
0.186290210928, 0.233193764592,
0.26280454451, 0.272925086778,
0.26280454451, 0.233193764592,
0.186290210928, 0.125580369465,
0.055668567116, 0,
0, 0,
0, 0},
/* n=12 */
{0.047175336387, 0.106939325995,
0.160078328542, 0.203167426723,
0.233492536538, 0.249147045813,
0.249147045813, 0.233492536538,
0.203167426723, 0.160078328542,
0.106939325995, 0.047175336387,
0, 0,
0, 0},
/* n=13 */
{0.040484004765, 0.092121499838,
0.13887351022, 0.178145980762,
0.207816047537, 0.226283180263
0.232551553231, 0.226283180263,
0.207816047537 0.178145980762,
0.13887351022, 0.092121499838
0.040484004765, 0,
0, 0},
0,
/* n=14 */
{0.035119460332, 0.08015808716,
0.121518570688, 0.157203167158,
0.185538397478, 0.205198463721,
0.215263853463, 0.215263853463,
0.205198463721, 0.185538397478,
0.157203167158, 0.121518570688,
0.08015808716, 0.035119460332,
0, 0},
/* n=15 */
{0.030753241996, 0.070366047488,
0.107159220467, 0.139570677926,
0.166269205817, 0.186161000016,
0.198431485327, 0.202578241926,
0.198431485327, 0.186161000016,
0.166269205817, 0.139570677926,
0.107159220467, 0.070366047488,
0.030753241996, 0},
/* n=16 */
{0.027152459412, 0.062253523939,
0.095158511682, 0.124628971256,
0.149595988817, 0.169156519395,
0.182603415045, 0.189450610455,
0.189450610455, 0.182603415045,
0.169156519395, 0.149595988817,
0.124628971256, 0.095158511682,
0.062253523939, 0.027152459412};
0, 0},
/* n=4 */
{0.861136311594053, 0.339981043584856,
-0.339981043584856, -0.861136311594053,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0}
/* n=5 */
{0.906179845938664, 0.538469310105683,
0, -0.538469310105683,
-0.906179845938664, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=6 */
{0.932469514203152, 0.661209386466265,
0.238619186083197, -0.238619186083197,
-0.661209386466265, -0.932469514203152,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=7 */
{0.949107912342759, 0.741531185599394,
0.405845151377397, 0,
-0.405845151377397, -0.741531185599394,
-0.949107912342759, 0,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=8 */
{0.96269856497336, 0.796666477413627,
0.525532409916329, 0.18343464249565,
-0.18343464249565, -0.525532409916329,
-0.796666477413627, -0.96269856497336,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=9 */
{0.968160239507626, 0.836031107326636,
0.613371432700591, 0.324253423403809,
0, -0.324253423403809,
-0.613371432700591, -0.836031107326636,
-0.968160239507626, 0,
0, 0,
0, 0,
0, 0},
/* n=10 */
{0.973906528517172, 0.865063366688985,
0.679409568299024, 0.433395394129247,
0.148874338981631, -0.148874338981631,
-0.433395394129247, -0.679409568299024,
-0.865063366688985, -0.973906528517172,
0, 0,
0, 0,
0, 0},
/* n=11 */
{0.978228658146, 0.887062599768,
0.730152005574, 0.519096129207,
0.269543155952, 0,
-0.269543155952, -0.519096129207,
-0.730152005574, -0.887062599768,
-0.978228658146, 0,
0, 0,
0, 0},
/* n=12 */
{0.981560634247, 0.90411725637,
0.769902671494, 0.587317954287,
0.367831498998, 0.125233408511,
-0.125233408511, -0.367831498998,
-0.587317954287, -0.769902671494,
-0.90411725637, -0.981560634247,
0, 0,
0, 0},
/* n=13 */
{0.984183054719, 0.917598399223,
0.801578090733, 0.64234933944,
0.448492751036, 0.230458315955,
0, -0.230458315955,
-0.448492751036, -0.64234933944,
-0.801578090733, -0.917598399223,
-0.984183054719, 0,
0, 0},
/* n=14 */
{0.986283808697, 0.928434883664,
0.82720131507, 0.687292904812,
0.515248636358, 0.319112368928,
0.108054948707, -0.108054948707,
-0.319112368928, -0.515248636358,
-0.687292904812, -0.82720131507,
-0.928434883664, -0.986283808697,
0, 0},
/* n=15 */
{0.98799251802, 0.937273392401,
0.84820658341, 0.72441773136,
0.570972172609, 0.394151347078,
0.201194093997, 0,
-0.201194093997, -0.394151347078,
-0.570972172609, -0.72441773136,
-0.84820658341, -0.937273392401,
-0.98799251802, 0},
/* n=16 */
{0.989400934992, 0.944575023075,
0.865631202388, 0.755404408355,
0.617876244403, 0.458016777657,
0.281603550779, 0.095012509838,
-0.095012509838, -0.281603550779,
-0.458016777657, -0.617876244403,
-0.755404408355, -0.865631202388,
-0.944575023075, -0.989400934992}};
int i;
double suma=0;
for(i=1;i<=ord_pol;i++)
suma+=0.5*(ld-ls)*A[ord_pol][i-1]*f(0.5*(ld-ls)*
U[ord_pol][i-1]+0.5*(ls+ld));
return suma;
}
Pentru aceeai precizie de calcul a integralei numerice, eficiena crete sau timpul
de calcul al calculatorului scade dup cum utilizm n ordine metoda trapezului,
metoda lui Simpson i metoda cuadraturii gaussiene.
f ( x)dx (5.64)
a
Ca atare, se va studia integrala improprie de aceast form.
Dac funcia de integrat definit pe intervalul a, este integrabil pe acest interval i
exist limita:
A
A
f ( x )dx k
lim (5.65)
a
+
atunci f ( x)dx k (5.66)
a
n acest caz integrala improprie este convergent. Cnd limita nu exist sau este
infinit, atunci integrala improprie este divergent.Valoarea lui A se poate lua suficient
de mare pentru ca
f ( x)dx (5.67)
A
unde este o constant pozitiv suficient de mic. n acest caz integrala improprie
f ( x ) dx f ( x ) dx (5.68)
a a
integral ce poate fi calculat cu una dintre metodele studiate n paragraful 5.1.
Funciile care pe intervalul de integrare a , b au un punct de discontinuitate de spea
nti c a,b au proprietatea c:
f ( x) pentru c x b
f 2 ( x)
f ( x c) pentru x c
Dac integrala (5.70) exist, spunem c integrala improprie este convergent i
valoarea ei poate fi calculat cu ajutorul unei metode studiat n paragraful 5.1.
Funcia f ( x ) are un punct de discontinuitate de spea a doua c a,b dac cel puin
una din limitele (5.69) are valoarea infinit. n acest caz
b ce b
c
unde poate fi luat suficient de mic astfel ca f ( x)dx 1 , 1 0
c
de valoare foarte mic, care reprezint i eroarea de calcul a integralei. Integrala (5.71)
poate fi rezolvat cu una dintre metodele studiate n paragraful 5.1. (metoda
dreptunghiului, metoda trapezului, metoda lui Richardson, metoda lui Simpson sau
metoda cuadraturii).
bd
y
f ( x,y)dx f ( x,y)dxdy
D a c
d (5.72)
reprezint integrala
dubl din funcia de
j dou variabile f ( x , y ) .
Pentru calculul valorii
acestei integrale vom
utiliza formula de
c cubatur a trapezului sau
formula de cubatur a
lui Simpson care sunt
a i b x prezentate n continuare.
Fig.5.5.Reprezentareagraficadreptunghiuluide
integrare
xi 1 y j 1 xi 1
k
I ij dx f ( x,y )dxdy f ( x,y j ) f ( x,y j 1 ) dx
2
xi yj xi
k i 1
x xi 1
f ( x , y j )dx f ( x , y j 1 )dx
2x
i xi
k h
4
f ( x i ,y j ) f ( x i ,y j 1 ) f ( x i 1 ,y j ) f ( x i 1 ,y j 1 ) (5.74)
Integrala pe ntreg dreptunghiul a , b, c, d este:
n1m1
kh n1m1
I Iij f (xi,yj ) f (xi ,yj1) f (xi1,yj ) f (xi1,yj1) (5.75)
i 0 j 0 4 i 0 j 0
expresie cunoscut sub numele de formula de cubatur a trapezului.
{Variabile
a: limita stng a intervalului de integrare pe axa Ox, real;
b: limita dreapt a intervalului de integrare pe axa Ox, real;
c: limita stng a intervalului de integrare pe axa Oy, real;
d: limita dreapt a intervalului de integrare pe axa Oy, real;
n: numrul de subintervale pe axa Ox, ntreg;
m: numrul de subintervale pe axa Oy, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sum: valoarea integralei, real;
{
b a
calculeaz h ;
n
dc
calculeaz k ;
m
sum=0;
pentru i=1 pn la n-1
pentru j=1 pn la m-1
calculeaz
sum=sum+((h*k)/4)*(f(a+i*h,c+j*k)+f(a+i*h,c+(j+1)*k) +
+f(a+(i+1)h,c+j*k)+f(a+(i+1)h,(j+1)*k))
tiprete valoarea integralei sum;
}
}
k=(dy-sy)/ny;
for(i=0;i<=nx-1;i++)
for(j=0;j<=ny-1;j++)
suma+=0.25*h*k*( f(sx+i*h,sy+j*k)+f(sx+i*h,sy+(j+1)*k)+
f(sx+(i+1)*h,sy+j*k)+f(sx+(i+1)*h,sy+(j+1)*k));
return suma;
}
Pentru acelai dreptunghi a , b, c, d reprezentat n fig. 5.5 vom aplica formula lui
Simpson de integrare. Vom considera dreptunghiul de integrare cu vrfurile
xi , yi , xi 1 , yi , xi 1 , yi 1 , xi , yi 1 i cu punctul central xi , yi
xi 1 y j 1 xi 1
k
I ij f ( x,y ) dxdy 3
f ( x,y j 1 ) 4 f ( x,y j ) f ( x,y j 1 ) dx
xi 1 y j 1 xi 1
kh
9
f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 )
4 f ( x i ,y j 1 ) f ( x i ,y j 1 ) f ( x i 1 ,y j ) f ( x i 1 ,y j ) 16 f ( x i ,y i )
( 5.76)
Integrala pe ntreg dreptunghiul a , b, c, d este dat de formula de cubatur a lui
Simpson:
n1m1
kh n1m1
I Iij f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1)
i 0 j 0 9 i 0 j 0
4 f ( xi ,y j 1 ) f ( xi ,y j 1 ) f ( xi 1,y j ) f ( xi 1,y j ) 16 f ( xi ,y j ) (5.77)
{ Variabile
a: limita stng a intervalului de integrare pe axa Ox, real;
b: limita dreapt a intervalului de integrare pe axa Ox, real;
c: limita stng a intervalului de integrare pe axa Oy, real;
d: limita dreapt a intervalului de integrare pe axa Oy, real;
n: numrul de subintervale pe axa Ox, ntreg;
m: numrul de subintervale pe axa Oy, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sum: valoarea integralei, real;
b a
{ calculeaz h ;
n
dc
calculeaz k ;
m
sum=0; i=1;
repet
j=1;
repet
sum=sum+((h*k)/9)*(f(a+(i-1)*h,c+(j-1)*k)+f(a+(i+1)*h,c+(j-1)*k) +
+f(a+(i-1)h,c+(j+1)*k)+4*(f(a+ih,(j+1)*k))+
+f(a+i*h,c+(j-1)*k)+f(a+(i-1)*h,c+j*k)+f(a+(i+1)*h,j*k)+
+ 16*f(a+i*h,c+j*k))
j=j+2;
pn cnd j>m-1;
i=i+2;
pn cnd i>n-1;
4*f(sx+i*h,sy+(j+1)*k)+4*f(sx+i*h,sy+(j-1)*k)+
4*f(sx+(i-1)*h,sy+j*k)+4*f(sx+(i+1)*h,sy+j*k)+
16*f(sx+i*h,sy+j*k))/9;
return suma;
}
5.6. APLICAII
x3 2
1.Se d funcia f ( x) .e x .(1 sin x 2 )
1 cos(1 x )
pentru care se cere integrala de la 0 la 3.
Valoarea integralei este dat n tabelul 5.1
Tabelul 5.1.
Metoda Numrul de Valoarea integralei
subintervale
Dreptunghiului 10000 1394.642843
Trapezului 10000 1395.704297
Richardson 5000 i 10000 1395.703984
Simpson 10000 1395.703984
Cuadratura Gauss Grad pol Legendre 1395.7031
n=15
6
INTERPOLAREA*
Cunoatem valoarea funciei n n+1 puncte. Prin n+1 puncte se poate duce un polinom
de gradul n, unic determinat.
Fie polinomul:
Pn ( x) a n x n a n 1 x n 1 ... a1 x a 0
Conform tabelului 6.1 avem sistemul:
a n x 0 n a n 1 x 0 n 1 a1 x 0 a 0 y 0
n 1
a n x1 a n 1 x1 a1 x1 a 0 y1
n
a n x nn a n 1 x nn 1 a1 x n a 0 y n
________________________________
*) Bibliografie: [1],[6],[7],[15],[21],[22]
Acest sistem are n+1 ecuaii cu n+1 necunoscute, a 0 , a1 , a 2 ,..., a n 2 , a n 1 , a n .
Considerm sistemul omogen:
124 Metode numerice n electronic
a n x 0 n a n 1 x 0 n 1 a1 x 0 a 0 0
a n x1 n a n 1 x1 n 1 a1 x1 a 0 0 (6.3)
a n x nn a n 1 x nn 1 a1 x n a 0 0
Determinantul sistemului omogen este diferit de zero. Dac determinantul sistemului
ar fi zero, ar nsemna c polinomul de gradul n ar avea n+1 soluii x 0 , x1 , x 2 ,..., x n
ceea ce este imposibil. Acest sistem omogen admite numai soluii banale, ca urmare,
determinantul sistemului este diferit de zero. Acest determinant este i determinantul
sistemului (6.2) rezultnd c acest sistem este un sistem Cramer cu soluii unic
determinate. Deci, polinomul de grad n este unic determinat. Pentru simplificarea
calculului scriem polinomul sub forma urmtoare:
Pn ( x ) x n a n 1 x n 1 ... a1 x a 0 . (6.4)
El este obinut din polinomul (6.1) prin mprire cu a n lsnd notaia neschimbat a
coeficienilor dup mprire.
Considerm urmtoarele polinoame:
0 ( x ) ( x x1 )( x x 2 )...( x x n )
1 ( x ) ( x x 0 )( x x 2 )...( x x n )
(6.5)
n ( x ) ( x x 0 )( x x1 )...( x x n 1 )
Formm polinomul Pn ( x ) sub forma:
Pn ( x ) b0 0 ( x ) b11 ( x )... bk k ... bn n ( x ) (6.6)
Trebuie s determinm coeficienii b0 , b1 ,..., bn .
Pn ( x0 ) P (x ) P (x ) Pn ( x n )
b0 , b1 n 1 ,...,bk n k ,..., bn (6.7)
0 ( x0 ) 1 ( x1 ) k ( xk ) n ( xn )
Ca urmare,
x x
n
n
i (x) n j n n x xj
Pn (x) Pn (xi ) yi yi
j 0, j i
i (xi ) i 0 xi x j
x x
n
i 0 i 0 j 0, j i
i j
j 0, j i
Polinomul de gradul n care trece prin n+1 puncte date, numit i polinomul de
interpolare al lui Lagrange, are forma:
n n x xj
Pn x y i . (6.8)
i 0 j 0, j i i x j
x
Expresia polinomului lui Lagrange este funcie de coordonatele punctelor cunoscute i
de variabila x . Cu ajutorul formulei determinate (6.8) a polinomului, care
aproximeaz o funcie, se poate calcula valoarea funciei n orice punct necunoscut
cuprins ntre x0 i x n .
6.1.1. EROAREA DE TRUNCHIERE N INTERPOLAREA
LAGRANJIAN
Interpolarea 125
Construim funcia
G ( x ) ( x x 0 )( x x1 )...( x x n ) (6.10)
Cu funciile F ( x ) , (6.9) i G( x ) , (6.10) formm urmtoarea funcie :
H ( t ) F ( x )G( t ) F ( t )G( x ) (6.11)
care are proprietile :
1. H ( x j ) 0 pentru j = 0, . . . ,n, deoarece nlocuind x x j n formula (6.9)
rezult F ( x j ) 0 ; j = 0, 2, . . . ,n i G( x j ) 0 ; j=0, 2, . . . ,n;
2. H ( x ) 0
Pe baza teoremei valorii medii rezult c exist n+2 puncte 0 , 1 , 2 ,..., n1 pentru
care derivata H'(t)=0, H ' (0 ), H ' (1 ), H ' (2 ),..., H ' (n ), H ' (n 1 ) i [ x0 , x n ] , i = 0,..,n+1.
Continund aplicarea teoremei valorii medii, se ajunge n final la egalitatea :
H ( n 1) ( ) 0 unde x0 xn
Din (6.11) rezult:
H
n 1
t F x G n1 t F n1 t G x ( n 1)! F x f n1 t G x
(6.12)
H ( n 1) 0 ( n 1)! F x f G x
n 1
sau
f
n 1
eT F x
G
x x0 xn (6.13)
( n 1)!
formul ce reprezint eroarea de trunchiere pentru interpolarea lagranjian.
Considerm polinomul lui Lagrange dat de relaia (6.8) pe care o scriem sub forma:
n 1 n 1 x xj i
P( x ) yi zi unde zi i pi yk z k , P( x ) pn (6.14)
i0 j 0 ,j i xi x j k0
x 1
-
1 3 4
1
x .
j 2
:
-1
-1
-
xi
z j1 zj
1i 12i 22
i
32
i
42
i
0i (6.15)
ni 1 1i, n 1 2i , n 1 3i , n 1 4i , n 1 ni 2
n expresia (6.15) lipsete termenul ii . Din (6.15) rezult:
n 1
ni 1 1 j 2 j 3 j 4 j
j 0
(6.16)
i j
zi 1
zi yi
pi
. +
1
pi 1
yi pi
pi-1 pi
n 1
Fig.6.2. Graful de procedur al expresiei pi y k zk
k0
Se consider eroarea iniial n punctul pi nul, erorile de rotunjire n nodurile 5,6 le
notm cu 5i , 6i , i 0,1,.., n 1 i notm cu i , i 0,1,... n 1 erorile termenilor sumei.
z0 y0
0 0 e0 50 60
p0
1 1 e1 31
z1 y1 p
1 1 61 (6.19)
p1 p2
n 1 n 1 en 1 5, n 1
z n y n 1 p
n 1 n 2 6,n 1
pn 1 pn 1
tim c i 4 n 1 pentru i=0,1,..,n-1 i considerm c ei e pentru i=0.1.,n-1.
n aceste condiii avem : kj
n 1 n 1 n 1 n 1
n 1| pn1| 4n 3 e zi yi pi 4n 3 e pi pi
i 0 i 0 i 0 i 0
n 1
Se mai poate face majorarea | pi | npn 1 i rezult:
i0
n 1 2n 2n 1 en (6.20)
expresie care reprezint eroarea de rotunjire pentru interpolarea lagranjian.
i eroarea de rotunjire:
2 12 2e (6.23)
unde i e sunt date n paragraful 6.1.2.
Pentru trei puncte, interpolarea devine ptratic.
{Variabile
n : numrul de puncte cunoscute, ntreg ;
x : abscisele punctelor cunoscute, vector ;
y : ordonatele punctelor cunoscute, vector ;
x : punctul n care se calculeaz interpolarea, real ;
i,j : contori, ntregi ;
sum : variabil ce reine suma, real ;
prod : variabil ce reine produsul, real ;
{ sum=0;
pentru i=0..n
{ prod=1;
pentru j=0..n dac j i atunci
x xj
calculeaz prod prod ;
xi x j
sum sum y i prod ;
}
}.
prod=1;
for(j=0;j<=n;j++)if(j!=i)prod*=(point-x[j])/(x[i]-x[j]);
sum+=y[i]*prod;
}
return sum;
}
x0 y0 y0
x1 y1 y1 2 y 0 3 y 0
x2 y2 y 2 2 y1 3 y1 4 y 0 5 y 0
x3 y3 y3 2 y2 3 y 2 4 y1 5 y1 6 y 0
x4 y4 y 4 2 y3 3 y3 4 y 2
x5 y5 y5 2 y 4
x6 y6
{Variabile
n:numrul de puncte cunoscute, ntreg;
h:pasul constant ntre abscisele cunoscute, real;
y:ordonatele punctelor, vector;
xp:abscisa punctului n care se face interpolarea;
x0:abscisa primului punct cunoscut, real ;
sum:variabila ce reine sumele pariale, real;
prod:variabila ce reine produsele, real;
i, j:contoare, ntregi;
{ sum=y0 ;
prod=1 ;
pentru i=1...n
{pentru j=0...n-i
Interpolarea 131
calculeaz yj=yj+1-yj
prod prod * x p x0 i 1 * h * * ;
1 1
h i
sum=sum+y0*prod; }
valoarea interpolat este sum ;
} }.
y n 1
Pn ( x n 1 ) y n 1 C11!h pentru x xn 1 i rezult C1 .
1! h
Continund calculele diferenelor finite n punctele xn 2 , xn 3 ,..., xn k , pentru rangul k
rezult formula de calcul al coeficientului Ck :
k y n k
Ck (6.41)
k !h k
Substituind k 0,1,2,.., n n formula (6.41) se obin coeficienii polinomului. innd
cont de formula (6.41) polinomul de gradul n (6.38) poate fi scris sub forma :
y 1 y n 2
Pn x y n n 1 x x n x xn1 2 yn0 x x1 n (6.42)
2 n
2
1!h 2!h n!h
Acest polinom este numit polinomul lui Newton de interpolare de spea a doua
deoarece s-au utilizat diferenele finite la stnga (tabelul 6.2). Dac punctul de
aproximare a funciei se gsete n apropierea lui xn , se recomand utilizarea metodei
se spea a doua deoarece d erori mai mici.
{Variabile
n:numrul de puncte cunoscute, ntreg;
h:pasul constant ntre abscisele cunoscute, real;
y:ordonatele punctelor, vector;
xp:abscisa punctului n care se face interpolarea;
xn :abscisa maxim a punctelor cunoscute, real ;
sum:variabila ce reine sumele pariale, real;
prod:variabila ce reine produsele, real;
i, j:contoare, ntregi;
{ sum=yn ;
prod=1 ;
pentru i=1...n
{pentru j=n...i
calculeaz yj=yj-yj-1
prod prod * x p x n i 1 * h * 1 1
* ;
h i
sum=sum+yn*prod;
}
valoarea interpolat este sum ;
}
}.
de spea a doua.
Funcia ntoarce valoarea interpolat
*/
double Newton2(int n,
double vi,
double pas,
double y[],
double point)
{
double sum,prod,vf;
int i,j;
vf=vi+n*pas;
sum=y[n];prod=1;
for(i=1;i<=n;i++)
{
for(j=n;j>=i;j--)y[j]=y[j]-y[j-1];
prod*=(point-(vf-(i-1)*pas))/(i*pas);
sum+=y[n]*prod;
}
return sum;
}
Pn ( x ) y0 Pn ( x0 , x1 )( x x0 ) Pn ( x0 , x1, x2 )( x x0 )( x x1 )...
(6.46)
Pn ( x0 ,..., x n )( x x0 )( x x1 )...( x x n 1 )
unde fiecare diferen divizat se calculeaz cu ajutorul formulei (6.43). Polinomul
obinut (6.46) poart numele de polinomul lui Newton de interpolare cu diferene
divizate.
{Variabile
n : numrul de puncte date ale funciei, ntreg ;
x : abscisele punctelor date, vector ;
y : ordonatele punctelor date, vector ;
x : punctul n care se interpoleaz funcia, real ;
i,j : contoare, ntregi ;
sum : variabil ce reine sumele pariale, real ;
prod : variabil ce reine produsele pariale, real ;
{ sum=y0;
prod=1;
pentru i=1...n
y j 1 y j
pentru j=0...n-i calculeaz y j ;
x j i x j
prod= prod*( x -xi-1);
sum=sum+y0*prod;
}
valoarea interpolat este sum;
{
for(j=0;j<=n-i;j++)y[j]=(y[j+1]-y[j])/(x[j+i]-x[j]);
prod*=(point-x[i-1]);
sum+=y[0]*prod;
}
return sum;
}
xj x x x0
y0 j y0 yj j=1, 2, 3, ..., n
x j x0 x j x0
xj x x x1
y 01 j y 01 y0 j j=2, 3, ..., n (6.47)
x j x1 x j x1
- - - - - - - - - - - - - - - ----------------
x x x x n 1
y 012...n n y 012...n 2 n 1 y 012...n 2 n (6.48)
x n x n 1 x n x n 1
{Variabile
136 Metode numerice n electronic
Pentru ntreg intervalul [a, b] rezult un sistem liniar punnd condiia ca Si(xi)=yi ,
i=1,2,..,n i continuitatea celor (m-1) ecuaii n toate punctele xi . n extremele x1 i
x2 se scrie polinomul lui Lagrange, l derivm pn la m-1 i aflm corespunztor
valorile derivatelor n x1 i xn . Rezult necunoscutele:
Di , Di+1 , C1i ,..., Cm-1,i pentru fiecare interval. n acest caz sunt n+(m-1)+ (n-1)
necunoscute i n+(m-1)+(n-1) ecuaii. Sistemul fiind liniar se rezolv cu una din
metodele de la capitolul 3.
Algoritmul i programul s-au realizat pentru restriciile Si polinoame de gradul 3.
n acest caz:
Si(x)=Aix3 + Bix2 + Cix + Ei (6.57)
138 Metode numerice n electronic
Di 1 ( x xi ) Di ( xi 1 x)
S i ( x)
hi
Di 1 ( x xi ) 2 Di ( xi 1 x) 2
S i( x) C1i
2hi
Di 1 ( x x i ) 3 Di ( x i 1 x ) 3
Si (x) C1i x C2i (6.58)
6 hi
Din S ( x i ) y i i S ( x i 1 ) y i 1 rezult:
y i 1 y i Di 1 Di
C1i hi
hi 6
x i 1 y i x i y i 1 Di x i1 Di1 x i
C2 i hi
hi 6
Din identificarea relaiilor (6.57) i (6.58) rezult :
D Di D x Di 1 x i
Ai i 1 ; Bi i i 1 (6.59)
6hi 2hi
Di 1 x i2 Di x i21 y i 1 y i Di 1 Di
Ci hi
2hi hi 6
x i31 Di x i3 D i 1 y i x i 1 y i 1 x i Di x i 1 D i 1 x i
Ei hi (6.60)
6 hi hi 6
Din continuitatea primei derivate n punctul xi , S i' 1( xi ) Si' ( xi ) rezult:
y y i y i y i 1
hi 1 Di 1 2( hi hi 1 ) Di hi Di 1 i 1 6 (6.61)
hi hi 1
Considernd derivatele de ordinul nti n punctele x1 i x2 egale cu:
y 2 y1 y 3 y 2 y 3 y1
y1 (6.62)
x 2 x1 x 3 x 2 x 3 x1
respectiv
y n 1 y n 2 y n y n 1 y n y n 2
y n (6.63)
x n 1 x n 2 x n x n 1 x n x n 2
rezult sistemul tridiagonal n Di i 1,2,3,..., n
Interpolarea 139
y2 y1
2h1 D1 h1 D2 6 y1
h 1
y 4 y3 y3 y 2
h1D1 2 (h1 h2 )D2 h2 D3 6
h3 h3
........................................................................................
yi1 yi yi yi1
hi1 Di1 2 (hi1 hi )Di hi Di1 6 (6.64)
hi hi
.........................................................................................
yn y n1 y n1 yn2
hn2 Dn2 2 (hn2 hn1 )Dn1 hn1 Dn 6
hn1 hn1
y n y n1
hn1 Dn1 2hn1 Dn 6 y n
hi
unde y1 i yn sunt date de expresiile (6.62), respectiv (6.63) .
Din sistemul (6.64) rezult valorile lui Di , i =1,2,...,n. Din (6.59) rezult
coeficienii restriciilor pe fiecare interval, restricii care aproximeaz funcia dat.
Dac se d x n care trebuie calculat funcia, se stabilete intervalul n care se
gsete x i se calculeaz valoarea restriciei funciei pe acest interval n punctul x .
{ Variabile
n : numrul de puncte date ale funciei, ntreg ;
x :abscisele punctelor date, vector ;
y : ordonatele punctelor date, vector ;
xp: punctul n care se interpoleaz funcia, real ;
A,B,C: vectorii elementelor diagonale ale sistemului tridiagonal;
TL:vectorul termenilor liberi al sistemului tridiagonal;
h:vectorul pailor punctelor pe abscis;
S:vectorul soluiilor sistemului tridiagonal;
derx1:derivata n punctul x1, real;
derx2:derivata n punctul x2, real;
num:variabila ce d numrul intervalului n care se gsete xp, ntreg;
valint:variabil ce reine valoarea polinomului de gradul trei n punctul
xp, real;
i,j : contoare, ntregi;
{ pentru i = 1 pn la n-1
calculeaz hi x i 1 x i ;
y 2 y1 y 3 y 2 y 3 y1
calculeaz derx1 ;
x 2 x1 x3 x 2 x 3 x1
140 Metode numerice n electronic
y n 1 y n 2 y y n 1 y n y n 2
calculeaz derxn n ;
x n 1 x n 2 x n x n 1 x n x n2
construiete sistemul tridiagonal
y2 y1
2.h1.D1 h1.D2 0.D3 0.Dn 6( h derx1 )
1
y3 y2 y2 y1
0.D1 h1.D2 2(h1 h2 )D2 h2 D3 0.D4 0.Dn 6( )
h2 hi 1
y n y n 1
0.D1 0.D2 0.D3 hn 1Dn 1 2.hn 1.Dn 6(derxn h )
n 1
tiprete valint
int i,cod,loc;
double d1,d2;
if( (point<xi[1])||(point>xi[ord]) )return 2;
/*Pregtesc sistemul tridiagonal pentru aflarea derivatei a doua */
/*Calculez prima derivat n capete */
d1=(yi[2]-yi[1])/(xi[2]-xi[1])-(yi[3]-yi[2])/(xi[3]-xi[2])+(yi[3]-yi[1])
/(xi[3]-xi[1]);
d2=-(yi[ord-1]-yi[ord-2])/(xi[ord-1]-xi[ord-2])+(yi[ord]-yi[ord-1])
/(xi[ord]-xi[ord-1])+(yi[ord]-yi[ord-2])/(xi[ord]-xi[ord-2]);
/*Calculez coeficienii primei linii */
a[1]=0;
b[1]=2*(xi[2]-xi[1]);
c[1]=xi[2]-xi[1];
d[1]=6*( (yi[2]-yi[1])/(xi[2]-xi[1])-d1);
/*Calculez coeficienii liniilor 2...ord-1*/
for(i=2;i<=ord-1;i++)
{
a[i]=xi[i]-xi[i-1];
b[i]=2*(xi[i+1]-xi[i-1]);
c[i]=xi[i+1]-xi[i];
d[i]=6*( (yi[i+1]-yi[i])/(xi[i+1]-xi[i])-(yi[i]-yi[i-1])
/(xi[i]-xi[i-1]) );
}
{Variabile
Interpolarea 143
for(i=0;i<=n;i++)
{
prod=1;
for(j=0;j<=n;j++)
if(j!=i)prod*=sin( pi*(point-x[j])/T )/sin (pi*(x[i]-x[j])/T);
sum+=y[i]*prod;
144 Metode numerice n electronic
}
return sum;
}
a 00 a 01 a 02 a 03 ... a 0( n 1 ) a 0 n
a10 a11 a12 a13 ... a1( n 1) 0
(6.69)
a( n 2 )0 a( n 2 )1 a( n 2 )2 0 . .. 0 0
a( n 1)0 a( n 1)1 0 0 ... 0 0
a n0 0 0 0 ... 0 0
( n 1)( n 2)
Pentru determinarea acestor coeficieni avem nevoie de ecuaii.
2
Aceste ecuaii le putem obine numai din punctele date x i , y i , f ( x i , y i ) care trebuie
( n 1)( n 2)
s fie tot n numr de .
2
Ca urmare, punctele n care se cunoate funcia este necesar s se dea sub form
triunghiular:
( x0 , y0 )
( x 0 , y1 ) x 0 , y 2 ... x 0 , y n
( x1 , y 0 ) x1 , y1 x1 , y 2 ... 0
(6.70)
(x , y ) x n1 , y1 0 ... 0
n 1 0
(x , y )
n 0 0 0 ... 0
Interpolarea 145
Pn ( x , y ) a 00 a10 ( x x 0 )1 a 01 ( y y 0 )1 a 20 ( x x 0 ) 2
a11 ( x x 0 ) 1 ( y y 0 ) 1 a 02 ( y y 0 ) 2 ... a 0 n ( y y 0 ) n (6.71)
ixi yj j f ( x 0 , y 0 )
a ij
h i k j i! j !
i i j j f ( x 0 , y 0 )
( x x 0 ) ( y y 0 )
n
Pn ( x , y )
x y i j
(6.73)
i, j 0 hi k j i! j !
i jn
{Variabile
n,m:intregi,numrul de puncte pe Ox i Oy ;
x:vectorul coordonatelor punctelor pe Ox;
y:vectorul coordonatelor punctelor pe y;
146 Metode numerice n electronic
{
int i,j,k;
double prodx,prody,valoare;
valoare=0;
for(i=0;i<=n;i++)
{
prodx=1;
for(k=0;k<=n;k++)if(k!=i)
prodx*=(pcx-x[k])/(x[i]-x[k]);
for(j=0;j<=m;j++)
{
Interpolarea 147
prody=1;
for(k=0;k<=m;k++)
if(k!=j)
prody*=(pcy-y[k])/(y[j]-y[k]);
valoare+=z[i][j]*prodx*prody;
}
}
return valoare;
}
6.9. APLICAII
S-a determinat valoarea funciei pentru l=0.45 inch. S-au obinut pentru rezistena
termic jonciune terminal urmtoarele valori:
cu metoda lui Lagrange 238.3757 C / W ;
cu metoda lui Newton de spea nti 238.3770 C / W ;
cu metoda lui Newton de spea a doua 238.3783 C / W ;
cu metoda lui Aitken 238.3757 C / W ;
7
METODE DE OPTIMIZARE*
________________
*)
Bibliografie: [7], [14],[15],[20]
m
e = yi yi (7.2)
i=1
Metode de optimizare 149
s fie minim.
n cazul unei drepte dat prin dou puncte, abaterea (7.2) este nul pentru toate
dreptele ce trec prin mijlocul segmentului format de cele dou puncte. Ca urmare
problema nu este unic determinat. Aceast problem se elimin dac considerm
valoarea absolut a erorilor:
m
e yi y i (7.2a)
i=1
Inconvenientul n cazul formulei (7.2a) l prezint funcia valoare absolut care nu are
derivat n punctele n care se anuleaz funcia. Pentru eliminarea acestor
inconveniente s-a trecut la suma ptratelor erorilor, pe care o notm cu E.
2
m
E yi yi (7.3)
i=1
Metoda de optimizare a primit denumirea de metoda celor mai mici ptrate, conform
formulei (7.3) pentru c determin funcia y f x pentru eroarea maxim i mai
poart denumirea i de regresie deoarece problema este de deducere a funciei
cunoscnd valorile ei ntr-un anumit numr de puncte.
E axi b y i (7.5)
i=1
a 2axi b y i 1 0
i=1
(7.6)
E m
2axi b y i xi 0
a i=1
Rezult sistemul n necunoscutele a i b :
150 Metode n electronic
m m
m b+ x i a= y i
i=1 i=1
m m m
x i b+ x i2 a= x i y i (7.7)
i=1 i=1 i=1
Numitorii expresiilor lui a i b se anuleaz numai dac x i sunt identice, caz exclus.
nlocuind valorile lui a i b n ecuaia (7.4) avem funcia liniar care aproximeaz cel
mai bine funcia tabelat dat (7.1).
{Variabile
x:abscisele funciei,vector;
y:ordonatele funciei,vector;
m: numrul experienelor, ntreg;
sx: variabila pentru suma absciselor, real;
sy: variabila pentru suma ordonatelor, real;
sxx:variabila pentru sumele de forma x2, real;
sxy: variabila pentru sumele de forma xy, real;
a:coeficientul lui x, real;
b: termenul liber, real;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;
calculeaz sy = sy+yi;
calculeaz sxy= sxy+xi*yi;
calculeaz sxx = sxx+xi*xi;
}
Metode de optimizare 151
m s xy -s x s y
calculeaz a= ;
m s xx -s x s x
s xx s y -s x s xy
calculeaz b = ;
m s xx -s x s x
}
m 2
E = yi a n xin -a n-1 xin-1 ... a1 xi a 0 (7.12)
i=1
unde m reprezint numrul de valori ale funciei tabelate.
Necunoscutele sunt: a n, a n-1,..., a 0. (7.13)
Se deriveaz n raport cu necunoscutele (7.13) i se obine sistemul:
m m m m
ma 0 x i a1 x i2 a 2 x ik a k x in a n y i
i=1 i=1 i=1 i=1
m m m m m
x i a 0 x i2 a1 x i3 a 2 x ik+1 a k x in+1 a n x i y i
i=1 i=1 i=1 i=1 i=1
m
x p a x p+1 a x p+2 a x p+k a x p+n a x p y
m m m m
i=1 i
0
i=1 i
1
i=1 i
2
i=1 i
k
i=1 i n i i
_____________________________________________________
m
x n a x n+1 a x n+2 a x n+k a x 2 n a x n y
m m m m
i=1 i
0
i=1 i
1
i=1 i
2
i=1 i
k
i=1 i n i i
(7.14)
{Variabile
X: abscisele funciei, vector;
Y: ordonatele funciei, vector;
m: numrul de puncte cunoscute ale funciei, ntreg;
n: gradul polinomului, ntreg;
{
pentru i = 1. ... n+1
{
B[i] = 0;
pentru j = 1,....,n+1 A[i] = 0
}
pentru i = 1. ... n+1
{
pentru k = 1. ... m calculeaz B[i] = B[i]+ yk *pow(xk, i-1);
pentru j = 1,....,n+1
pentru k = 1. ... m calculeaz A[i,j] = A[i,j]+ pow(xk, i+j-2);
}
Metoda_Rez_Sist.(n+1,A,B,Sol); (*se rezolv sistemul*)
}
coeficienii polinomului sunt Sol;
}
Metode de optimizare 153
/* Funcia ntoarce:
0 dac gradul polinomului este mai mare ca numrul de puncte
1 n caz de succes
*/
int RegPol(int nrp,
double xx[],
double yy[],
int grdp,
double coef[])
{
static double mat[NrMax][NrMax],b[NrMax];
int i,j,k,putere;
if (nrp<=grdp) return 0;
for(i=1;i<=grdp+1;i++)
for(j=1;j<=grdp+1;j++)
{
mat[i][j]=0;
putere=i+j-2;
for(k=1;k<=nrp;k++)mat[i][j]+=pow(xx[k],putere);
}
for(i=1;i<=grdp+1;i++)
{
b[i]=0;
putere=i-1;
for(k=1;k<=nrp;k++)b[i]=b[i]+yy[k]*pow(xx[k],putere);
}
GAUSS(grdp+1,mat,b,coef);
return 1;
}
Fie funcia numeric dat n tabelul 7.1. Reprezentarea grafic prin puncte a
acestei funcii se aseamn foarte bine cu o funcie hiperbolic. Se pune problema
determinrii funciei hiperbolice
1
y (7.15)
ax+b
care aproximeaz cel mai bine funcia numeric. Pentru comoditatea calculului se
inverseaz funcia hiperbolic i se construiete funcia eroare:
154 Metode n electronic
2
m 1
E ax i b (7.16)
i=1 y i
Prin derivare n raport cu a i dup aceea cu b se obine sistemul liniar:
m m 1
mb+ xi a=
i=1 i=1 yi
m (7.17)
x b+ x 2 a= xi
m m
{Variabile
x:abscisele funciei numerice, real;
y:ordonatele funciei numerice, real;
m: numrul experienelor, ntreg;
sx: variabila ce conine sumele absciselor, real;
sy: variabila ce conine suma inverselor ordonatelor, real;
sxx:variabila ce conine ptratul absciselor, real;
sxy: variabila ce conine suma raportului dintre abscise i ordonate, real;
a,b:coeficienii funciei hiperbolice, real;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;
1
calculeaz sy = sy+ ;
yi
xi
calculeaz sxy= sxy+ ;
yi
calculeaz sxx = sxx+xi*xi;
Metode de optimizare 155
}
s x s y -m s xy
calculeaz a = ;
m s xx -s x s x
s xx s y -s xy s x
calculeaz b= ;
m s xx -s x s x
1
Funcia este y ;
ax+b
}
/* Regresia hiperbolic */
Programul principal poate fi realizat
de ctre cititor ca un exerciiu. n continuare este dat funcia:
/* Funcia ce implementeaz regresia hiperbolic */
void RegHip(int nrp,
double *x,
double *y,
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<=nrp;i++)
{
sx+=x[i];
sy+=1/y[i];
sxy+=x[i]/y[i];
sxx+=x[i]*x[i];
}
*coef1=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef2=(sy*sxx-sx*sxy)/(nrp*sxx-sx*sx);
E ln a+xi ln b ln y i (7.22)
i=1
s fie minim.
Prin derivarea parial a funciei E n raport cu a i b se obine urmtorul
sistem:
m m
m ln a+ xi ln b= ln y i
i=1 (7.23)
m
i=1
m
m
xi ln a+ xi ln b= xi ln y i
2
i=1 i=1 i=1
{Variabile
x:abscisele funciei numerice, real;
y:ordonatele funciei numerice, real;
m: numrul absciselor funciei, ntreg;
sx:variabil a sumei absciselor, real;
sxx: variabil a sumei ptratelor absciselor, real;
sln y: variabil a sumei logaritmilor din ordonate, real;
sxln y:variabil a sumei absciselor nmulite cu logaritmul ordonatelor,
real;
{
sx= 0; sln y = 0; sxln y = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;
Metode de optimizare 157
Dac funcia numeric din tabelul 7.1 se aseamn cu o funcie de tip geometric,
vom cuta s determinm funcia de forma:
y ax b (7.26)
care s aproximeze cel mai bine funcia numeric.
Se logaritmeaz cel mai bine funcia (7.26) i se construiete funcia:
158 Metode n electronic
m 2
E ln a+b ln xi ln y i (7.27)
i=1
{ Variabile
x:abscisele funciei numerice, vector;
y:ordonatele funciei numerice, vector;
m: numrul de abscise, ntreg;
slnx: variabil a sumei logaritmilor absciselor, real;
sln y: variabil a sumei logaritmilor ordonatelor, real;
slnxlny: variabil sumei produsului logaritmilor absciselor i a
logaritmilor ordonatelor, real;
slnxlnx: variabila sumei ptratelor logaritmilor absciselor, real;
a,b: coeficienii, real;
i: contor, ntreg;
{
slnx = 0; sln y = 0; slnxlny = 0; slnxlnx= 0;
pentru i = 1... m
{
calculeaz slnx= slnx+ln(xi );
calculeaz slnxlnx = slnxlnx+ln(xi)*ln(xi);
calculeaz slny = slny+ln yi;
Metode de optimizare 159
m s ln x ln y -s ln x s ln y
calculeaz b= ;
m s ln x ln x -s ln x s ln x
i=1 i
i=1 i
i=1 i i
{ Variabile
x:abscisele funciei numerice, vector;
y:ordonatele funciei numerice, vector;
m: numrul absciselor funciei numerice, ntreg;
: pulsaia, real;
s y: suma ordonatelor funciei numerice, real;
scos 2x: suma ptratelor cosinusurilor din abscise, real;
scos x: suma cosinusurilor din abscise, real;
sycosx:suma produsului ordonatelor cu cosinusul absciselor
corespunztoare, real;
a,b: coeficienii funciei, real;
i: contor, ntreg;
{
s y = 0; scos 2x = 0; scos x = 0; sycos x = 0;
pentru i = 1... m
{
calculeaz s y = s y + yi ;
calculeaz scos 2x = scos 2x + cos x i * cos x i ;
calculeaz scos x = scos x + cos x i ;
Metode de optimizare 161
y
z1n z2n z3n z4n znm
yn
x
O x1 x2 x3 x4 xm
Fig.7.1.Reprezentarea funciei multiple.
m n 2
E zij Ax i By j C (7.37)
i=1 j=1
Utiliznd una dintre metodele numerice de rezolvare a sistemelor liniare din capitolul
3 se determin A, B, C, deci planul cutat.
{Variabile
x: argumentele pe axa Ox a funciei numerice, vector;
y: argumentele pe axa Oy a funciei numerice, vector;
z: valorile funciei numerice, matrice;
m: numrul de argumente pe Ox, ntreg ;
n: numrul de argumente pe Oy, ntreg;
sx : sumele argumentelor de pe Ox, real;
sy: suma parial a argumentelor de pe Oy, real;
sxx: suma parial a ptratelor argumentelor x, real;
sxy: suma parial a produselor argumentelor, real;
syy: suma parial a ptratelor argumentelor y, real;
sz,sxz,syz: sume pariale ale termenilor liberi ai sistemului;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0; syy = 0; sxz=0; syz=0 ;sz=0;
pentru i = 1,..., m
pentru j=1,..,m
calculeaz sx= sx+xi;
calculeaz sxx = sxx+xi*xi;
calculeaz sy = sy+ yi;
calculeaz syy = syy + yi * yi;
calculeaz sxy= sxy+ xi*yi;
calculeaz sz=sz+zij; calculeaz sxz=sxz+xi*zij;
calculeaz syz=syz+yj*zij;
}
{ METODA (n,m, sx; sy; sxy; sxx; syy, SOL ); // rezolv sistemul
}
Planul este z = Ax + By + C
}
7.1.7.2. Implementarea algoritmului 7.7
tl[i]=0;
for(j=1;j<=3;j++) mat[i][j]=0;
}
mat[1][1]=n*m;
for(i=1;i<=m;i++)
{
mat[1][2]+=n*x[i];
mat[2][2]+=n*x[i]*x[i];
}
for(j=1;j<=n;j++)
{
mat[1][3]+=m*y[j];
mat[3][3]+=m*y[j]*y[j];
}
for (i=1;i<=m;i++ )
for(j=1;j<=n;j++)
{
mat[2][3]+=x[i]*y[j];
tl[1]+=z[i][j];
tl[2]+=x[i]*z[i][j];
tl[3]+=y[j]*z[i][j];
}
mat[2][1]=mat[1][2];
mat[3][1]=mat[1][3];
mat[3][2]=mat[2][3];
det=mat[1][1]*mat[2][2]*mat[3][3]+mat[2][1]*mat[3][2]*mat[1][3
]+
mat[1][2]*mat[2][3]*mat[3][1]-mat[3][1]*mat[2][2]*mat[1][3]-
mat[1][1]*mat[3][2]*mat[2][3]-mat[2][1]*mat[1][2]*mat[3][3];
if (det==0 ) return -1;
det1=tl[1]*mat[2][2]*mat[3][3]+tl[2]*mat[3][2]*mat[1][3]+
mat[1][2]*mat[2][3]*tl[3]-tl[3]*mat[2][2]*mat[1][3]-
tl[1]*mat[3][2]*mat[2][3]-tl[2]*mat[1][2]*mat[3][3];
det2=mat[1][1]*tl[2]*mat[3][3]+mat[2][1]*tl[3]*mat[1][3]+
tl[1]*mat[2][3]*mat[3][1]-mat[3][1]*tl[2]*mat[1][3]-
mat[1][1]*tl[3]*mat[2][3]-mat[2][1]*tl[1]*mat[3][3];
det3=mat[1][1]*mat[2][2]*tl[3]+mat[2][1]*mat[3][2]*tl[1]+
mat[1][2]*tl[2]*mat[3][1]-mat[3][1]*mat[2][2]*tl[1]-
mat[1][1]*mat[3][2]*tl[2]-mat[2][1]*mat[1][2]*tl[3];
*coef1=det1/det;
*coef2=det2/det;
*coef3=det3/det;
return 0;
}
Metode de optimizare 165
n cadrul acestui paragraf vor fi studiate dou metode pentru aflarea minimului
unei funcii de n variabile n lipsa relaiilor de restricie. In general, problemele de
minimizare sunt cu relaii de restricie, dar aceste probleme pot fi reduse la probleme
de optimizare fr restricii ntr-o serie de aplicaii.
n condiiile n care nu sunt restricii, funcia int
F ( X ) F ( x1 , x 2 ,..., x n ) (7.39)
care are derivatele pariale continue, are un minim local ntr-un punct X k dac este
ndeplinit inegalitatea:
F( X k ) F( X ) (7.40)
pentru orice vector X din vecintatea lui X k .
Din analiza matematic cunoatem condiia necesar pentru ca o funcie F ( X ) s aib
un minim ntr-un punct X din domeniul de definiie al funciei:
-existena i rezolvabilitatea sistemului
F(x)
0 , i 1,2 ,...,n; (7.41)
xi
-matricea
2 F ( x) 2 F ( x) 2 F ( x)
...
x1 x1 x 2 x1 x n
2
(7.42)
J
2
F ( x) F ( x) F ( x )
2 2
x x x x ...
n 1 n 2 x n2
s fie pozitiv definit.
Dintre metodele de optimizare neliniar fr restricii amintim: metode aleatoare de
cutare, metode de cutare unidirecional i metode de gradient.
Metodele aleatoare de cutare au la baz o schimbare aleatoare a
componentelor vectorului X, pentru care se calculeaz valoarea funciei F(X) i se
compar cu valoarea precedent a funciei.
Metodele de cutare unidimensional constau n modificarea succesiv a
componentelor vectorului i compararea valorilor funciei n punctele respective.
Metodele de gradient efectueaz modificarea simultan a componentelor
vectorului X, n aa fel nct s rezulte o evoluie a funciei F(X) opus gradientului.
Aceste metode se bazeaz pe generarea aleatoare a unor numere ntr-un domeniu
prestabilit.
Metoda drumului aleator, una dintre metodele des utilizate, const n modificarea
vectorului de poziie pentru noul punct astfel:
X k 1 X k r (7.43)
unde r este vectorul unitate care are direcia aleatoare, X k este vectorul de poziie al
punctului anterior i un scalar. Se calculeaz valoarea funciei n noul punct i se
compar cu valoarea funciei n vechiul punct. Dac, dup un anumit numr de iteraii
valoarea lui F nu se micoreaz, se reduce scalarul pn ce valoarea lui devine mai
mic dect o eroare de calcul dat, er > 0.
{ Variabile
X:vectorul de poziie al punctului curent;
alfa:scalarul, real;
er:eroarea de calcul, real;
sol:souia optimizrii, real;
i:contor, ntreg;
minim:minimul dintre valorile funciilor, real;
valcurent:valoarea minim curent a funciei, real;
xcurent[2];valoarea anterioar i curent a abscisei punctului, real;
maxiter:numrul maxim de iteraii, ntreg;
{
maxiter=1000;
atta timp ct ( alfa0>eps )
{contor=0
minim=F(x0[0],x0[1]);
calculeaz
xcurent[0]=x0[0]+alfa0*r;
xcurent[1]=x0[1]+alfa0*r;
val_curenta=F(xcurent[0],xcurent[1]);
ii+1;
}atta timp ct ((contor<=maxiter) i (valcurenta>minim) );
dac (valcurenta<minim)
{
minim=valcurenta;
x0[0]=xcurent[0];
x0[1]=xcurent[1];
}
dac (contor>maxiter)alfa0-=0.001;
}
sol[0]=x0[0];
sol[1]=x0[1];
stop
}
Metode de optimizare 167
ncepe un nou ciclu lund ca punct iniial minimul obinut. La fiecare iteraie se
determin un nou punct funcie de precedentul asfel:
X k 1 X k pas E k (7.44)
unde E k reprezint vectorul E k =(0,0, ,1,,0), cifra 1 fiind pe locul k, k=0,1,,n,
iar pas reprezint pasul cu care se modific componentele. Dup un ciclu ncheiat se
trece la un nou ciclu cu vectorul iniial cel pentru care s-a obinut minimul n ciclul
ncheiat (precedent), lund un nou pas mai mic, obinut din pasul precedent nmulit cu
o raie subunitar. Se continu iteraia pn cnd pas< sau numrul de iteraii
depete un numr maxim dat. reprezint eroarea de calcul a punctului de minim.
{Variabile
X:vectorul coordonetelor punctelor;
pas:pasul de modificare al cooronatelor, real;
E: maticea unitate de ordinul n ce are pe orizontal vectorii E k ;
k:contor, ntreg;
minimcurent:minimul obinut pn la pasul respectiv, real;
Maxiter:numrul maxim de iteraii, ntreg;
t:valoare subunitar cu care se multiplic pasul, real;
p:valoarea iniial a pasului, real;
{Maxiter=1000;
t=0.1;
repet
pas=p;
minimcurent=F(X[0],X[1]);
pentru k=1 pn la n calculeaz
X[1]=X[0]+pas* E k ;
valcurent=minimcurent;
p=p*t;
pn cnd pas< er;
}
minimul este valcurent;
}
{
double min_prec,min_curent,min_ant;
int i,nrp,st,dr;
min_curent=f(x0[0],x0[1]);
do
{
min_ant=min_curent;
for(i=0;i<2;i++)
{
nrp=0;
st=0;
dr=1;
do
{
nrp++;
x0[i]+=-st*pas+dr*pas;
min_prec=min_curent;
min_curent=f(x0[0],x0[1]);
if ( (nrp==1) && (min_curent>min_prec) )
{
x0[i]-=2*pas;
nrp++;
min_curent=f(x0[0],x0[1]);
st=1;
dr=0;
}
}
while ( (min_curent<min_prec) );
x0[i]+=st*pas-dr*pas;
min_curent=f(x0[0],x0[1]);
}
if (min_curent<-1e10) {
rez[0]=x0[0];
rez[1]=x0[1];
return 1;
}
}
while( fabs(min_ant-min_curent)>eps);
rez[0]=x0[0];
rez[1]=x0[1];
return 0;
}
7.3. APLICAII
170 Metode n electronic
2.Se d funcia:
z x 2 y 2 2x 4 y 3
S se determine minimul funciei cu metoda drumului aleator, lund punctul de start
(15,34) i = 0.000001 i cu metoda cutrii unidimensionale lund punctul se start
(10,10) i = 0.001.
Cu metoda drumului aleator s-a obinut minimul n punctul (0.99518, 1,99978), iar
minimul funciei z min =-1.99977.
Aplicnd metoda cutrii unidimensionale s-a obinut minimul n punctul (1, 2), iar
minimul funciei z min =-2.
8
REZOLVAREA NUMERIC A ECUAIILOR
I SISTEMELOR DIFERENIALE*
Aceast metod asigur soluia oricrei ecuaii difereniale, dar are o aplicabilitate
redus din cauza dificultilor de rezolvare. Totui, aceast metod servete pentru
compararea cu metodele practice pentru a le stabili ordinul metodei.
Dezvoltm pe y(x) n vecintatea lui x x m ,
y m y m
j j+1
y ''m
y x y m y 'm x-x m m m x-x m j+1
2 j
x-x x-x (8.5)
2! j! j+1!
unde y m( j ) este derivata de ordinul j a lui y ( x ) n punctul x x m , iar x m x
Utilznd relaia x x m h obinem:
y y m j+1
j j+1
h 2 ''
y m+1 y m hy 'm y m m h j h (8.6)
2 j! j+1!
Ultimul termen al relaiei (8.6) reprezint eroarea de trunchiere. Aproximaia va fi cu
att mai bun cu ct j este mai mare.
y 'm f x m ,y m (8.7)
Derivnd funcia y ' f ( x, y ) obinem:
f x,y f x,y d y
y '' fx fy f (8.8)
x y dx
f f
unde fx i fy (8.9)
x y
Pentru x x m rezult:
y ''m f x f y f (8.10)
Pentru j = 2 rezult:
h 2 '' y ''' 3
y m+1 y m hy 'm ym h (8.11)
2 6
sau
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 173
h
y m+1 y m h f+ f x f f y
2
(8.12)
cu eroarea de trunchiere
y '''
eT h3 , xm x
6
(8.13)
Punnd m = 0 n ecuaia (8.12) se obine pentru x1 x 0 h valoarea soluiei y1
deci punctul ( x1, y1 ). Pentru m = 1 rezult punctul ( x 2 , y 2 ). Continund, se obin
punctele soluiei ecuaiei difereniale, cu erorile de trunchiere corespunztoare, care se
mresc n timp. Aceast metod este direct deoarece pentru calculul lui y m1 sunt
necesare numai valorile lui y m i x m . Pentru o eroare mai mic trebuie s mrim
ordinul termenilor utilizai n dezvoltarea Taylor. Dac dorim y '''m acesta are expresia:
y '''m f xx 2 f f xy f 2 f yy f x f y f f y2 (8.14)
x xy y 2
Complexitatea acestor derivate face practic inutilizabil aceast metod.
ym
xm x m1
{Variabile
x0: abscisa punctului de start, real;
y0: ordonata punctului de start, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real;
y: ordonatele soluiei numerice, vector;
x: abscisele soluiei numerice, vector;
n: numrul de puncte n care se calculez soluia, intreg;
{
x[0]= xo; y[0]= y0; h=const;
pentru i = 1,2,...n
calculeaz x[i]= x0+i*h;
calculez
y[i+1]= y[i]+ h*f( x[i-1],y[i-1]);
}
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 175
}
Aceast metod face parte din acest grup de metode i utilizeaz media pantelor din
punctele ( x m , y m ) i ( x m1 , y m1 ) unde x m1 x m h iar y m1 y m hy 'm ordonat
obinut din ecuaia tangentei n punctul M la curb cu panta y m' f ( x m , y m ) . Grafic
metoda este prezentat n figura 8.2. n acest punct H de coordonate ( x m1 , y m hy m' )
se calculeaz panta la curb care este:
y ' m+1 f x m+h,y m hy 'm (8.22)
Se face media dintre panta n punctul M (dreapta ML1)i panta n punctul H (dreapta
HL2)i o notm cu
zm
1
2
f x m ,y m f x m+h,y m hy m
'
(8.23)
176 Metode numerice n electronic
xm x m1
Fig.8.2.Calculul grafic al soluiei prin metoda lui Euler mbuntit.
(8.26)
x - x m 2 f xx 0 ,0 2 x - x m y-y m f xy 0 ,0 y-y m 2 f yy 0 ,0
1
2
unde 0 x ,x m i 0 y ,y m
Dac notm x x m h iar y y m h y m
'
y m+1 y m h f 0.5h f x ff y (8.31)
reprezint formula de calcul din dezvoltarea Taylor de ordinul doi care este
echivalent cu formula de calcul a lui Runge-Kutta (8.25) i are eroarea de trunchiere:
y ''' ( ) 1
eT h 3
6
4
f xy (0 , 0 ) 2 ff xy (0 , 0 ) f 2 f yy (0 , 0 ) (8.32)
{
x0: abscisa punctului prin care trece graficul soluiei, real;
y0: ordonata punctului prin care trece graficul soluiei, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real;
y: ordonatele solutiei numerice, vector;
x: abscisele solutiei numerice, vector;
n: numrul de puncte n care se calculez soluia, ntreg;
{
x[0]= xo; y[0]= y0; h=const;
pentru i = 1,...n
{
calculeaz x[i]= x[i -1]+i*h;
calculez
y[i]= y[i-1]+ 0.5*h*(f[ x[i-1],y[i-1])+ f( x[i-1]+h, y[i-1]+h*f(x[i-
1],y[i-
1])));
}
Soluiile numerice sunt x[i], y[i] , i=0,1,2,...n;
}
}
xm x m2 x m1
Fig.8.3.Calculul grafic al soluiei ecuaiei difereniale prin metoda lui Euler modificat.
Aceast metod d aceleai soluii ca i metoda lui Taylor pn la h2, deci este o
metod Runge-Kutta de ordinul doi.
xm+h/2
{Variabile
x0: abscisa punctului prin care trece graficul soluiei, real;
y0: ordonata punctului prin care trece graficul soluiei, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real
y: ordonatele soluiei numerice, vector;
x: abscisele soluiei numerice, vector;
n: numrul de puncte ale soluiei, ntreg;
{
x[0]= xo; y[0]= y0;
pentru i = 1,...n
{
calculeaz x[i]= x[i -1]+i*h;
calculez
y[ i ]= y[i-1]+ h*f( x[i-1]+0.5*h, y[ i-1]+0.5*h*f(x[i-1],y[i-1])) ;
}
Soluiile numerice ale ecuaiei sunt x[ i ], y[ i ] , i=0,...n;
}
}
Formula de calcul numeric a soluiei ecuaiei difereniale (8.1) este dat de expresia
(8.49)
x m1 x m h
y m1 y m
h
k 2k 2 2k 3 k 4
6 1
(8.49)
unde
k1 f ( xm , ym )
h h
k 2 =f x m , y m k 1 (8.50)
2 2
h h
k 3=f x m , y m k 2
2 2
k 4 =f x m h, y m hk 3
Eroarea de trunchiere a metodei este:
eT k h 5 (8.51)
{ Variabile
x0 :abscisa punctului prin care trece soluia, real;
y0 : ordonata punctului prin care trece soluia, real;
h : pasul ntre abscisele punctelor de calcul ale soluiei, real;
y : ordonatele soluiei numerice, vector;
x : abscisele soluiei numerice, vector;
n : numrul de puncte n care se calculeaz soluia, ntreg;
182 Metode numerice n electronic
{
x[0]= xo; y[0]= y0 ;
pentru i = 1,,n
{
calculeaz x[ i-1 ]=x0+i*h;
calculez
k1 = f(x[ i-1 ], y[ i-1 ]);
calculeaz
k2 = f(x[ i-1 ]+0.5*h, y[ i-1 ]+ 0.5*h*k1);
calculeaz
k3 = f(x[ i-1 ]+0.5*h, y[ i-1 ]+ 0.5*h*k2);
calculeaz
k4 = f(x[ i-1 ]+h, y[ i-1 ]+ h*k4);
calculeaz
y [i ] yi 1 k1 2k 2 2k 3 k 4 ;
h
6
}
Soluiile numerice ale ecuaiei sunt x[ i ], y[ i ] , i=1,2,...n;
}
}
x m1 , y m1
y y( x)
Punctul prezis de prima estimare se calculeaz astfel: se duce tangenta ET, n punctul
E ( x m , y m ) dup care se duce coarda FR paralel cu tangenta ET prin punctul
F ( x m1 , y m1 ) i intersecteaz dreapta x x m1 n punctul P( x m+1 ,y m+
0
1 ) obinndu-se
0
prima valoare prezis la estimarea zero. Se poate mbunti valoarea y m+1 dac se
1 ) i se face media cu panta n ( x m ,y m ). Prin
0
consider panta n punctul ( x m+1 ,y m+
punctul ( x m ,y m ) ducem o coard cu aceast pant care intersecteaz dreapta x x m1
1 1
n punctul ( x m+1 ,y m+ 1 ) unde y m+1 este estimarea de ordinul 1. Continund acest
k
procedeu se poate estima valoarea lui y m+ 1 pn la o valoare k, pn cnd
y mk1 y m0 1 (8.58)
unde este o eroare impus.
Cu panta f ( x m , y m ) din punctul E se duce coarda prin F
y y m1 f ( x m , y m )( x x m1 ) (8.59)
Punctul de abscis x m1 pe aceast coard are ordonata
0
y m+1 y m1 2hf ( x m , y m ) care reprezint prima estimare a soluiei.
Ducem prin E coarda de pant
zm
1
2
0
f x m ,y m f x m+1 ,y m+ 1 (8.60)
Punctul de abscis x m1 pe aceast coard are ordonata
1
y m+ 1 ym
h
2 0
f x m ,y m f x m+1 ,y m+ 1 (8.61)
Procednd n mod analog pentru a k-a estimare avem
k
y m+ 1 ym
h
2 k-1
f x m ,y m f x m+1 ,y m+ 1 (8.62)
k k-1
Dac y m+ 1 -y m+1 < unde > 0, (8.63)
orict de mic, iteraiile se opresc. Relaia (8.63) este satisfcut cnd metoda
predictor-corector este convergent.
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 185
k k-1
y m+1 - y m+ 1 =
h
2
k-1
f x m+1 ,y m+
k-2
1 f x m+1 ,y m+1 (8.64)
Aplicnd teorema valorii medii obinem
h f k 1
y mk1 y mk11 y
2 y m1
y mk12
(8.65)
unde
f
y
este evaluat n x x m1 i y y m+
k-1 k
1 ,y m+1 .
f
Dac este mrginit de M >0 astfel ca:
y
f
M (8.66)
y
M h k-1 k-2
rezult k
y m+ k-1
1 -y m+1 y m+1 y m+1 . (8.67)
2
Analog
h M k-2 k-3
1 y m+1 y m+1 y m+
k-1 k-2
y m+ 1 (8.68)
2
2
h M
1 y m+1 .
k k-1 k-2 k-3
sau y m+ 1 -y m+1 y m+ (8.69)
2
Continund calculul prin acest procedeu se ajunge la rezultatul:
k-1
h M
1 y m+1
k k-1 1 0
y m+ 1 -y m+1 y m+ (8.70)
2
2
Dac dimensiunea intervalului h este bine aleas adic h (8.71)
M
atunci metoda este convergent. Viteza de convergen este cu att mai mare cu ct h
este mai mic.
{Variabile
x0 :abscisa punctului prin care trece soluia, real;
y0 : ordonata punctului prin care trece soluia, real;
h : pasul ntre abscisele punctelor de calcul ale soluiei, real;
y : ordonatele soluiei numerice, vector;
x : abscisele soluiei numerice, vector;
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 187
n : numrul de puncte n care se calculeaz soluia, ntreg;
yi k yi-1 0.5* f xi-1,yi-1 f xi ,yi k-1
k = k+1;
pn cnd
k k-1
yi y i e
}
Soluiile numerice ale ecuaiei sunt x[ i ], y i , i=0,1,2,...n;
k
}
}
{Variabile
x0 :abscisa punctului iniial al soluiei, real;
y0 : ordonata punctului iniial al soluiei, real;
h : pasul dintre punctele soluiei, real;
n : numrul de puncte n care se calculeaz soluia, ntreg;
{x[0]= xo; y[0]= y0;
pentru k = 1, . .. 3
h
{ calculeaz y k y k-1 f x m ,y m f x m h,y m hy m' ;
2
i = 3;
repet
4h
0
calculeaz y i+ 1 y i-3 3
2 y i-'2 y i-'1 2 y i' ;
j = 1;
repet
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 189
j h '
j-1
calculeaz yi+1 yi-1 yi-'1 yi' yi+1 ;
3
j = j+1;
pn cnd
j j-1
y i+1 y i+1 e 0 ;
i = i +1;
pn cnd i = n;
}
valorile unice ale soluiei sunt yi , i = 1, 2, . .., n
}
}
k ( n 1) hf x , y , y ( i ) , y ( i ) ,..., y ( i )
1 i i 1 2 m
(1) ( n 1)
k 2( n 1) hf x i h , y i( i ) k1 , y1( i ) k1 ,..., y n( i ) k1
2
2 2 2
(8.90)
( n 1) h k k (1) k ( n 1)
k 3 hf x i , y i 2 , y1( i ) 2 ,..., y n( i ) 2
2 2 2 2
( n 1)
k 4
hf x i h, y i k3 , y1( i ) k3(1) , y 2( i ) k 3( 2 ) ,..., y m( i ) k 3( n 1)
k1( n 2 ) hy n( i)1
n- 2 i n-1
k1
k 2 h y n-
1
2
n-1 (8.91)
k n- 2 h y i k 2
3 n- 1
2
n- 2
k 4
h y n- i
1 k3
n-1
y1i+1 y1i
1 1
k 2 k 21 2 k 31 k 41
6 1
(8.94)
yi+1 yi
1
k 2k 2 2k 3 k 4
6 1
unde
k1' hf ( x i , y i , y1i )
' h k1 i k11
2
k h f x
i 2+ , y i + , y1+
2 2
1
(8.95)
'
k h f x i+ h , y i + k 2 , y1i+ k 2
3 2 2 2
'
k 4 hf ( x i h, y i k3 , y1 k 3 )
i 1
k1 hy1i
k h y i k1
2 1
2
(8.96)
k h y i k 2
3 1
2
k 4 h( y1i k3 )
nlocuind (8.95 ) n (8.94 ) rezult formulele de calcul:
yi+1 yi
1
6
k1 k 2 k 3 i = 0,1,2,. .., n
unde
y i+1 y i 1 k 2k k k
1 1
6
1 2 3 4
k1 h f x i , y i , y1 i
h h i i k1
k 2 h f x i+ , y i y1 , y1 (8.97)
2 2 2
h h i h i k
k 3 h f x i+ , y i y1 k1 , y1 2
2 2 4 2
k 4 h f x i+h , y i h y1 k 2 , y1 k3
i h i
2
2u 2u
0 (8.105)
x2 y2
Aplicnd relaiile 8.101, ecuaia lui Laplace se scrie funcie de diferenele finite astfel:
u x , y
1
4
u x+h , y u x-h , y u x , y+h u x , y-h (8.106)
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 195
Considerm reeaua din fig.8.6 i notm cu u11, u12, u13, u21, u22, u23, u31, u32, u33
y
u (x, 0,4)=0
0,4
u (x,0)=1
Fig.8.6 Reeaua domeniului funciei i condiiile la limit pentru ecuaia lui Laplace.
u11 4 0 u12 0 0 0 0 0 0 0 1
1
u 1 u 0 u 0 u 0 0 0 0 1
12 4 11 13 22
u13 0 u12 0 0 0 u23 0 0 0 1
1
4
1
u21 u11 0 0 0 u22 0 u31 0 0 0
4
u22 4 0 u12 0 u21 0 u23 0 u32 0
1
u23 1 0 0 u13 0 u22 0 0 0 u33 0
4
u31 0 0 0 u21 0 0 0 u32 0 0
1
4
u32 0 0 0 0 u22 0 u31 0 u33 0
1
4
u32 4 0 0 0 0 u22 0 u31 0 u33 0
1
u 1 0 0 0 0 0 u 0 u 0 0
33 4 23 32
(8.107)
196 Metode numerice n electronic
{ Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lsy:limita stng a domeniului pe axa Oy, real;
ldy:limita dreapt a domeniului pe axa Oy, real;
nrx:numrul de subintervale pe Ox, ntreg;
nry:numrul de subintervale pe Oy, ntreg;
h:pasul pe Ox, real;
k:pasul pe Oy, real;
{calculeaz h=(ldx-lsx)/nrx;
k=h;
pentru i=0 pn la nrx
{
u( lsx ih,0) 1 ;
u(lsx ih, ldy ) 0
}
pentru j=1 pn la nrt
u( 0, lsy jk ) 0 ;
u( ldx , lsy jk ) 0 ;
}
pentru i=1 pn la nrx
pentru j=1 pn la nrt
{
calculeaz
1
u( x i , y j ) ( u( lsx ( i 1)h, lsy jh ) u( lsx ( i 1)h, lsy jh )
4
u( x ih, lsy ( i 1)h ) u( lsx ih, lsy ( j 1)h )
}
construiete sistemul iterativ i -l rezolv cu metoda Iacobi sau
Gauss-Seidel
tiprete uij pentru i=0 pn la nrx
j=0 pn la nrt;
}
/*
Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale de tip eliptic
*/
void ELIPTIC( int ord,
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 197
double Domeniu[][NrMax]
)
{
int i,j,nrp,lung;
double mat[NrMax][NrMax];
lung=ord-2;
for(nrp=1;nrp<=ord*ord-4*ord+4;nrp++)
{
for(i=1;i<=ord-2;i++)
for(j=1;j<=ord-2;j++)
{
if ( (nrp/lung==(i-1)) && (nrp%lung==j) )
{
mat[i][j]=-1;
mat[i-1][j]=mat[i+1][j]=mat[i][j+1]=mat[i][j-1]=0.25;
}
else mat[i][j]=0;
}
}
i=20;
}
k
h
0 x
{Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lst:limita stng a domeniului pe axa Ot, real;
ldt:limita dreapt a domeniului pe axa Ot, real;
nrx:numrul de subintervale pe Ox, ntreg;
nrt:numrul de subintervale pe Ot, ntreg;
h:pasul pe Ox, real;
k:pasul pe Ot, real;
{pentru i=0 pn la nrx
calculeaz ui 0 f (lsx i * h) ;
calculeaz k=(1/6)*h;
pentru j=1 pn la nrt
{
calculeaz u0 j s(lst j * k ) ;
calculeaz ulj z(lst j * k ) ;
}
pentru i=1 pn la nrx
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 199
pentru j=1 pn la nrt
1
calculeaz uij (ui 1, j 1 4ui , j 1 ui 1, j 1 ) ;
6
tiprete uij pentru i=0 pn la nrx
j=0 pn la nrt;
}
O ecuaie de acest tip este ecuaia oscilaiilor libere ale unei bare omogene finite:
2u 2 u
2
a 0 (8.112)
t2 x2
200 Metode numerice n electronic
care are condiiile la iniiale: u( x ,0) f ( x ) u t' (x,0 ) g(x), 0 x l i condiiile la
limit: u(0, t ) s(t ), u(1, t ) z(t ),0 t . Se poate lua acelai domeniu de integrare dat
n figura 8.7. Ecuaia cu derivate pariale (8.112) poate fi transcris cu ajutorul
diferenelor finite, aplicate pe o reea dreptunghiular de pas hl/n pe axa Ox i de pas
k ntreg oarecare astfel:
ui , j 1 ui 1, j ui , j 1 ui 1, j . (8.114)
Cu ajutorul formulei de calcul (8.114) se obin valorile funciei u(x,t) n punctele
domeniului dat astfel ca funcia s verifice ecuaia (8.112).
{Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lst:limita stng a domeniului pe axa Ot, real;
ldt:limita dreapt a domeniului pe axa Ot, real;
nrx:numrul de subintervale pe Ox, ntreg;
nrt:numrul de subintervale pe Ot, ntreg;
h:pasul pe Ox, real;
k:pasul pe Ot, real;
{
l
calculeaz h= ;
nrx
h
calculeaz k ;
a
pentru i=0 pn la nrx
{
calculeaz ui 0 f ( lsx i * h ) ;
calculeaz ui , 1 k * g ( lsx i * h ) ui 0
}
pentru j=1 pn la nrt
{
calculeaz u0 j s( lst j * k ) ;
calculeaz ulj z ( lst j * k ) ;
}
pentru i=1 pn la nrx
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 201
pentru j=1 pn la nrt
calculeaz uij ( ui 1, j 1 ui , j 2 ui 1, j 1 ) ;
pentru i=0 pn la nrx
/*
Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale cu derivate pariale de tip hiperbolic
*/
{
int i,j,k1;
double h,k;
h=(limd-lims)/nrx;
k=k1;
for(i=0;i<=nrx;i++)sol[i][0]=f(lims+i*h); /*pe orizontala de jos */
for(j=1;j<=nry;j++)
{
sol[0][j]=s(j*k); /* verticala stnga */
sol[nrx][j]=z(j*k); /*verticala dreapta */
}
for(i=1;i<=nrx-1;i++)
sol[i][1]=sol[i+1][0]+sol[i-1][0]-sol[i][0]+k*g(lims+i*h);
for(j=2;j<=nry;j++)
for(i=1;i<=nrx-1;i++)
sol[i][j]=(sol[i+1][j-1]-sol[i][j-2]+sol[i-1][j-1]);
}
202 Metode numerice n electronic
8.4. APLICAIE
Se consider un circuit R,L n serie alimentat de o surs de curent alternativ
e 10 cos(100 t ) V,f =50Hz, prezentat n fig.(8.8).
Rezultatele obinute prin metoda lui Euller modificat sunt prezentate n tabelul (8.1)
Tabelul 8.1
t[s] i[A]
0.0000 0.00000
0.00100 0.48770
0.00200 0.65941
0.00300 0.63249
0.00400 0.447665
0.00500 0.24065
0.00600 - 0.03564
0.00700 -0.31683
0.00800 -0.57124
0.00900 -0.77188
0.001000 -0.89808
9
REZOLVAREA NUMERICA A ECUAIILOR
INTEGRALE*
Ecuaiile integrale sunt ecuaii n care funcia necunoscut se gsete sub semnul
integralei. Ecuaiile integrale liniare se clasific n funcie de tipul limitelor de
integrare i modul de apariie n ecuaie a funciei necunoscute astfel :
1 - ecuaii integrale la care limitele de integrare sunt constante i se numesc ecuaii
de tip Fredholm ;
2 - ecuaii integrale la care o limit de integrare este variabil i se numesc ecuaii
de tip Volterra.
n ambele cazuri, dac funcia necunoscut este numai sub integral, spunem c
ecuaiile sunt de spea ntia, iar dac funcia necunoscut este i n afara integralei,
spunem c ecuaiile sunt de spea a doua.
Ecuatii de tip Fredholm
spea I
spea II
integrale
de tip Volterra spea I
liniare spea II
x f ( x ) S ( x , y ) ( y )dy (9.1)
a
unde f i S sunt funcii date , este funcia necunoscut pe care o determinm i
un parametru numeric suficient de mic, astfel c pentru nceput poate fi aproximat
soluia :
1 ( x ) f ( x ) (9.2)
Se obine formula de recuren
_______________________
*Bibliografie [12], [17], [18], [22]
Rezolvarea numeric a ecuaiilor integrale 205
{Variabile
l : constanta ecuaiei ;
x : vectorul punctelor de pe 0x, real ;
y : vectorul punctelor de pe 0y, real ;
M : matricea punctelor format de vectorul x i y ;
Cij : valorile funciei cunoscute S(x,y) n punctele matricei M reale
nmulit cu ponderile din metoda cuadraturii, real ;
a : limita stng de integrare, real ;
b : limita dreapt de integrare, real ;
206 Metode numerice n electronic
i = i + 1;
pn cnd i = n;
tiprete soluia i( k 1) i=1 pn la n;
}
Fie ecuaia
x
( x ) f ( x ) S ( x , y ) ( y )dy . (9.10)
a
Diferena finit pentru ecuaia (9.10) este dat de relaia :
x
( x ) x-h f ( x ) f ( x h ) S ( s, y ) ( y ) d y (9.11)
x-h
Aplicnd o formul de cuadratur pentru integral pe intervalul h rezult :
208 Metode numerice n electronic
Aceast valoare este utilizat ca valoare de start pentru ecuaia de recuren (9.13 ) .
{Variabile
n : numrul de puncte n care se calculeaz soluia , ntreg ;
x : vectorul punctelor de pe 0x , real ;
y : vectorul punctelor de pe 0y , real ;
M : matricea punctelor format de vectorul x i y ;
Cij : valorile funciei cunoscute S(x , y) n punctele n care se
calculeaz prin metoda cuadraturii mulit cu ponderile, real ;
fi : valorile funciei f(xi ) , real ;
h :intervalul de integrare , real ;
i :valoarile funciei soluie , real ;
: eroarea de calcul , real ;
sum : suma parial , real ;
{
sum = 0 ;
calculeaz f1 , f0 ;
f 1 C10 f 0
calculeaz 1 ;
1-C11
i = 1;
repet
pentru j = 0 la i -2
{calculeaz sum = sum + Cij j ;
calculeaza i
1
f f i-1 ( 1 Ci,i-1 ) i-1 sum ;
1 Cii i
}
i = i + 1;
pn cnd i = n;
Valorile funciei soluie sunt i pentru i = 1 , ... , n;
Rezolvarea numeric a ecuaiilor integrale 209
9.3. APLICAIE
S se rezolve ecuaia integral de tip Fredholm
1
. ( x 2 y 2 ) ydy
( x ) x 0.05 x 0.025 01
2
0
pentru care lims=0,limd=1,lambda=0.1, nr=5.
Rezultatele obinute sunt :
( 0.0) 0.001038, ( 0.2) 0.201042, ( 0.4) 0.401055,
( 0.6) 0.601076 ( 0.8) 0.801106., (1.0) 1.001145.
Aceste rezultate sunt valorile funciei soluiei n punctele de diviziune ale
intervalului
[0 1].
10
VECTORI I VALORI PROPRII*
Teorema 2: Valorile proprii ale unei matrice simetrice A M Rnn sunt reale .
Corolar 1: Dac A M Rn n este simetric, atunci exist o transformare similar
P A P-1 = unde P M Rn n este o matrice ortogonal i M n n este diagonal .
Sunt matricele cu toate elementele nule sub diagonala principal. Pentru aceste
matrice valorile proprii sunt elementele de pe diagonal .
Prin definiie spectrul radial S(A) al unei matrice A M n n este dat de este valoarea
| i | unde i este valoarea absolut maxim dintre valorile proprii .
n
j c j a ij j = 1,2, ... ,n (10.16)
i=1
i j
Li z , z-a ii li i i = 1,2, ... ,n (10.17)
sau n reuniunea cercurilor :
C j z , z-a jj c j j j=1,2,...,n (10.18)
Dintre aceste metode se prezint metoda puterii, metoda lui Krlov, metoda
Hauseholder, metoda RT i metoda LR.
dac valoarea lui 1 este cea mai mare valoare proprie i k este mare.
Se poate face aceeai aproximare i pentru ecuaia:
k 1 k 1
A Y (1 x1 2 2
k 1 k 1
x 2 ... n n x n ) 1k 11 x1 (10.23)
1
1 1
Din mprirea ecuaiei (10.22) la (10.23) rezult valoarea proprie maxim pentru
matricea A. Vectorul Y este un vector coloan i prin mprirea vectorilor
corespunztori ecuaiilor (10.22) i (10.23) vom realiza mprirea componentelor
vectorilor a cror valoare este aproximativ egal cu valoarea proprie maxim.
Dac maticea A este nesingular atunci ecuaia (10.3) mai pate fi scris i asfel:
A 1 X 1 X (10.24)
{Variabile
n,k:rangul matricei,contor, ntregi;
A:matrice;
y:vector;
p:vectorul produs;
:vectorul valorilor proprii;
{
p[0]=y
pentru i=1,, k
/* presupunem valoarea maxim a valorilor proprii 1 */
calculeaz p[i]=A*p[i-1] ;
calculeaz [1]=p[k]/p[k-1];
/* mprirea vectorilor const n mprirea componrntelor*/
}
}
/* Funcia ntoarce :
0 dac s-a gsit valoarea proprie cu precizia dorit,
1 daca s-a gsit o valoare proprie, algoritmul terminndu-se
dup numrul de iteraii specificat.
*/
int PowerDirVP(int or_mat, /*ordinul matricei */
double MAT[][NrMax], /*matricea */
double VECS[NrMax], /*vectorul de start */
double eps, /* precizia */
int maxiter, /* numrul maxim de iteraii */
double *valpr /* valorile propri */
)
{
int i,j,k,sem;
static double XN[NrMax],XN_1[NrMax];
k=0;
for(i=1;i<=or_mat;i++)XN[i]=VECS[i];
do
{sem=1;
k++;
for(i=1;i<=or_mat;i++)XN_1[i]=XN[i];
for(i=1;i<=or_mat;i++)
{ XN[i]=0;
for(j=1;j<=or_mat;j++)XN[i]+=MAT[i][j]*XN_1[j];
}
216 Metode numerice n electronic
for(i=1;i<=or_mat;i++)if(XN_1[i]==0)sem=0;
if(sem!=0)for(i=2;i<=or_mat;i++)
if( fabs( XN[1]/XN_1[1]-XN[i]/XN_1[i]) >eps)sem=0;
}while( (sem==0) && (k<maxiter) );
for(i=1;i<=or_mat;i++)VECS[i]=XN[i];
if(k>=maxiter)return 1;
*valpr=XN[1]/XN_1[1];
return 0;
}
{Variabile
Vectori i valori proprii 217
getche();
for(i=1;i<=ord;i++) printf("%5.3lf\n",TL[i]);
getche();
if(GAUSS(ord,A,TL,V)==0) return 0;
for(i=1;i<=ord;i++)pol[i]=V[i];
return 1;
}
expresia (10.33).
1 0 0 ... 0 0 0 ... 0
0 1 0 ... 0 0 0 ... 0
0 0 0 ... 1 2(wk 1 ) 2.wk 1.wk 2 2.wk 1.wk 3 ... 2 wk 1.wn
(k) 2 (k) (k) (k) (k) (k) (k)
B(k) (k)
0 0 0 ... 2.wk 2 .wk 1 1 2.(wk 2 ) 2.wk 2 .wk 3... 2wk 2 .wn
(k) (k) (k) 2 (k) (k)
k=1,2,,n-2. (10.33)
( k 1) (k )
Din produsul A . B , punnd condiia ca matricea pe linia k i coloana k s aib
numai primii doi termeni rezult formulele de calcul ale elementelor wi(k) ; i k,..,n. Se
ine seama c suma ptratelor elementelor unei linii a unei matrice A este invariant la
transformarea similar ortogonal (B (k) )T A B (k) . n aceste condiii, se obin
urmtoarele formule de calcul:
pentru k1,2,,n-2
Vectori i valori proprii 219
1 a .sign(a k,k 1 )
wk(k)1 ( 1 k,k 1 ); (10.34)
2 sum
a ki .sign(a k,k 1 )
wi(k) ; i k 2,...,n;
2.wk(k)1. sum
n
ti a ij .w(k)
j , i k 1,...,n;
j k 1
n
s wi(k).t i ;
i k 1
ri t i s.wi(k) ; i k 1,...,n;
k a kk ;
k sign(a k,k 1 ). sum ;
Cnd se ajunge la pasul n-2, tridiagonalizarea ia sfrit i se consider:
a n 1 a n 1,n 1 ; a n a nn ; n 1 a n 1,n ;
Matricea A (n 2 ) este tridiagonal iar matricea W se prezint astfel:
0 0 0 0 ... 0
(1)
w2 0 0 0 ... 0
(1) (2)
(n 2 ) w3 w3 0 0 ... 0
W (W ,W ,...,W
(1) (2)
) (10.35)
(1) (2) 3
w 4 w4 w4 0 ... 0
( 1 )
wn wn
(2)
wn(3 ) wn(4 ) ... wn(n 2 )
Valorile proprii ale matricei A se calculeaz ca soluiile ecuaiei:
1 1 0 0 ... 0
1 2 2 0 ... 0
0 3 3 3 ... 0 0 (10.36)
0 0 0 0 ... n
Numrul de variaii de semn ale irului lui turm d numrul de valori proprii reale ale
matricei tridiagonale. Se calculeaz :
L max{|1| |1|,| i 1| |1| | i| i 2 ,3,...n 1, | n 1| | n|} (10.38)
Valorile caracteristice sunt cuprinse n intervalul (-L,L). Ca urmare pentru n valori
caracteristice reale, numrul de variaii de semn ale irului lui turm n puncul -L este
n, iar n L este zero. Dac se consider intervalul ( I i , S i ) n care este situat soluia
i se pornete cu I i L ; S i l pentru toate soluile. Se aplic metoda biseciei
pn cnd |S i I i| , fiind eroarea dat.
Vectorii proprii ai matricei tridiagonale se calculeaz prin rezolvarea sistemului
A .V V unde ia valorile calculate.
n 2
v1(j) 1;
1
v 2(j) ( 1 1 ); j 1,...,n ; k 2 ,...,n 1; (10.39)
1
1
(l i k ).v kj k 1.v k(j)1 );
v k(j)1
k
Pentru calculul vectorilor proprii ai matricei iniiale A se ine seama de relaia de
calcul a matricei tridiagonale:
A(n 2 ) B(n2 ) B( 2 ) B( 1 ) A B( 1 ) B( 2 ) B(n 2 ) (10.40)
Din ecuaia
A(n 2 ) V (j) B(n 2 ) B( 2 ) B( 1 ) A.B( 1 ) B( 2 ) B(n 2 ) V (j) j V (j) (10.41)
rezult: A B( 1 ) B( 2 ) B(n 2 ) V (j) j B( 1 ) B( 2 ) B(n 2 ) V (j) (10.42)
Ecuaia (10.42) se reduce la ecuaia : A X (j) j X (j) (10.43)
unde X (j) reprezint vectorii proprii ai matricei A .
Fcnd produsul iterativ se obine:
V (j) B(n 2 ) V (j) ; V (j) B(n 3 ) V (j) V (j) B( 1 ) V (j) (10.44)
Pentru prima ecuaie din (10.44) rezult:
v (j) 1 1
1 0
(j)
v (j) v (j) v2
2 2 0
(j) (j) 2 0 . 0 0
v n2 v n2 (j)
... 0 wn 1 wn(j)
0 . (10.45)
(j)
(j) (j) v n(j)1
v n 1 v n 1 wn 1
(j) (j)
(j) (j) wn vn
vn vn
n
Dac notm suma wi(k) v i(j) , atunci vectorii proprii sunt:
i k 1
{Variabile
n:ordinul matricei, ntreg;
A:matrice simetric;
V:vectorul ;
X:vectorii proprii;
W:matrice cu coloane vectori;
i,j,k:contori, ntregi;
:vectorul valorilor proprii;
:vectorul elementelor de pe diagonala principal a matricei
tridiagonale;
:vectorul elementelor de pe prima i a doua diagonal;
t,r:vectori;
p,sum,suma:variabile, reale;
:eroare de calcul, real;
{
pentru k=1,, n-2
wi(k) 0,
n
{calculeaz sum a kj2 , pentru i 1,...,k ;
j k 1
n
calculeaz
t i a ij .w (k)
j ,
j k 1
calculeaz n
s wi(k) .t i ;
i k 1
calculeaz
ri t i s.wi(k) ;
}
calculeaz
a k a kk ;
calculeaz
bk sign(a k,k 1 ). sum ;
}
calculeaz n1 a n 1,n 1 ;
222 Metode numerice n electronic
calculeaz n a nn ;
calculeaz n1 a n1,n ;
pentru i = 2 ,, n-1
calculeaz
f 1(l) l a1 ;
f 2 (l) (l a2 ).f 1(l) b12 ;
f i (l) (l ai ).f i 1(l) bi21.f i 2 (l);
pentru i=2 ,, n-1
calculeaz
pentru i=1 , , n
{
I i L;
S i L;
}
determin numrul de varaii de semn al irului;
pentru k=i pn la m compar k cu nv i modific
I k sau S k
Aplic metoda biseciei i calculeaz li , i=1, , n;
pentru j=1, , n
{
calculeaz
(j)
v1 1;
(j) 1
v2 (l a1 );
b1 1
(j) 1 j (j)
v k 1 ((l a k ).v k bk 1 .v k 1 );
bk i
}
pentru k=n-2, ,1
pentru j=1, , n
{
calculeaz
n
suma wi(k) .v i
(j)
;
i k 1
v i( j ) v ( j)
i 2. suma. wi( k ) ;
}
}
}
}
Vectori i valori proprii 223
Funcia signatur
*/
int SGN(double x)
{
if(x>0) return 1;
if(x<0) return -1;
return 0;
}
/*
Funcia care ntoarce numrul de variaii de semn al polinoamelor
turm ntr-un punct dat
*/
int Nr_var(int ord, /* ordinul matricei*/
double valfa[],
double vbeta[],
/* Coeficienii alfa si beta ai matricei tridiagonale */
double Med)
{
int i,nv;
double q;
double eps=0.00001;
nv=0;
q=valfa[1]-Med;
if(q<=0)nv++;
for(i=2;i<=ord;i++)
{
if(q!=0)q=valfa[i]-Med-vbeta[i-1]*vbeta[i-1]/q;
else q=valfa[i]-Med-fabs(vbeta[i-1])/eps;
if(q<0) nv++;
}
return nv;
}
/*
Funcia care implementeaz metoda Householder pentru aflarea
valorilor proprii.
*/
void HOW( int n,
double mat[][NrMax],
/* matricea simetric */
double Lambda[])
/* vectorul valorilor proprii */
{
int i,j,k,VB1,VB2,nv,r;
224 Metode numerice n electronic
double spat,c;
double static W[NrMax][NrMax];
static double p[NrMax];
static double q[NrMax];
static double alfa[NrMax];
static double beta[NrMax];
double N0,T,M,LAM,suma;
static double S[NrMax];
static double D[NrMax];
double eps=0.000001;
static double v[NrMax][NrMax];
for(k=1;k<=n-2;k++) /* ciclul mare */
{
spat=0;
for(j=k+1;j<=n;j++)spat=spat+mat[k][j]*mat[k][j];
for(i=1;i<=n;i++)W[i][k]=0;
W[k+1][k]=sqrt( 0.5*(1+mat[k][k+1]*SGN(mat[k][k+1])/sqrt(spat) )
);
for(i=k+2;i<=n;i++)
W[i][k]=mat[k][i]*SGN(mat[k][k+1])/(2*W[k+1][k]*sqrt(spat));
for(i=k+1;i<=n;i++)
{
p[i]=0;
for(j=k+1;j<=n;j++)p[i]+=mat[i][j]*W[j][k];
}
c=0;
for(i=k+1;i<=n;i++)c=c+W[i][k]*p[i];
for(i=k+1;i<=n;i++)q[i]=p[i]-c*W[i][k];
alfa[k]=mat[k][k];
beta[k]=-SGN(mat[k][k+1])*sqrt(spat);
mat[k][k+1]=mat[k+1][k]=beta[k];
for(j=k+2;j<=n;j++)
{ mat[k][j]=0;
mat[j][k]=0;
}
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n;j++)
mat[i][j]=mat[i][j]-2*W[i][k]*q[j]-2*q[i]*W[j][k];
}
alfa[n-1]=mat[n-1][n-1];
alfa[n]=mat[n][n];
beta[n-1]=mat[n-1][n];
/*.........................................................................*/
/* Se calculeaz intervalul (-N0 , N0) n care se afl valorile proprii */
N0=fabs(alfa[1])+fabs(beta[1]);
for(i=2;i<=n-1;i++)
Vectori i valori proprii 225
{
T=fabs(beta[i-1])+fabs(alfa[i])+fabs(beta[i]);
if(N0<T) N0=T;
}
T=fabs(beta[n-1])+fabs(alfa[n]);
if(N0<T) N0=T;
/*........................................................................*/
/*Iniializarea limitei stng si dreapt a intervalului n care se
gsesc valorile proprii */
for(i=1;i<=n;i++)
{
S[i]=-N0;
D[i]=N0;
}
/* M mijlocul intervalului - Se va aplica bisecia */
for(i=1;i<=n;i++)
{ while( fabs(D[i]-S[i])>eps )
{ M=(D[i]+S[i])/2;
nv=Nr_var(n,alfa,beta,M);
if(nv>=i) D[i]=M;
else S[i]=M;
}
}
for(j=1;j<=n;j++) Lambda[j]=D[j];
}
10.3.4. METODA RT
(10.47)
{Variabile
n:ordinul matricei, ntreg;
A:matricea simetric;
:vectorul elementelor de pe diagonala principal,tridiagonal;
:vectorul elementelor de pe diagonalele simetrice,tridiagonale;
i,j:contori, ntregi;
C:matricea de calcul a coeficienilor polinomului caracteristic;
{pentru i=1, , n
C i 0 1;
pentru j=1, , n
Cij 0;
C11 1 ;
C22 2 . 1 12 ;
pentru i=3 , , n
calculeaz Cii i . Ci 1, i 1 i21 . Ci 2, i 2 ;
pentru i=2 , , n
calculeaz C i1 Ci 1,1 i ;
pentru i=3 , , n
calculeaz Ci 2 i . Ci 1,1 Ci 1, 2 i21 ;
pentru j=3 , , n
pentru i=j+1, , n
calculeaz
C ij i . C i 1, j 1 C i 1, j i21 . C i 2, j 2 ;
coeficienii polinomului caracteristic sunt
i Cn ,n i ; i 1,2,..., n;
}
}
/*
Funcia care implementeaz metoda Householder pentru
aflarea vectorilor i valorilor proprii ale unei matrice simetrice
*/
void HOW2( int n,
double mat[][NrMax],
double Lambda[])
{
Vectori i valori proprii 227
int i,j,k,VB1,VB2,nv,r;
double spat,c;
double static W[NrMax][NrMax];
static double p[NrMax];
static double q[NrMax];
static double alfa[NrMax];
static double beta[NrMax];
double N0,T,M,LAM,suma;
static double S[NrMax];
static double D[NrMax];
double eps=0.000001;
static double v[NrMax][NrMax];
static double Coef[NrMax][NrMax];
static double Pol[NrMax];
for(k=1;k<=n-2;k++) /* ciclul mare */
{
spat=0;
for(j=k+1;j<=n;j++)spat=spat+mat[k][j]*mat[k][j];
for(i=1;i<=n;i++)W[i][k]=0;
W[k+1][k]=sqrt( 0.5*(1+mat[k][k+1]*SGN(mat[k][k+1])/sqrt(spat) )
);
for(i=k+2;i<=n;i++)
W[i][k]=mat[k][i]*SGN(mat[k][k+1])/(2*W[k+1][k]*sqrt(spat));
for(i=k+1;i<=n;i++)
{
p[i]=0;
for(j=k+1;j<=n;j++)p[i]+=mat[i][j]*W[j][k];
}
c=0;
for(i=k+1;i<=n;i++)c=c+W[i][k]*p[i];
for(i=k+1;i<=n;i++)q[i]=p[i]-c*W[i][k];
alfa[k]=mat[k][k];
beta[k]=-SGN(mat[k][k+1])*sqrt(spat);
mat[k][k+1]=mat[k+1][k]=beta[k];
for(j=k+2;j<=n;j++)
{ mat[k][j]=0;
mat[j][k]=0;
}
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n;j++)
mat[i][j]=mat[i][j]-2*W[i][k]*q[j]-2*q[i]*W[j][k];
}
alfa[n-1]=mat[n-1][n-1];
alfa[n]=mat[n][n];
beta[n-1]=mat[n-1][n];
for(i=1;i<=n;i++)
228 Metode numerice n electronic
for(i=k+1;i<=n;i++)
suma=suma+W[i][k]*v[i][j];
for(i=k+1;i<=n;i++)
v[i][j]=v[i][j]-2*suma*W[i][k];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) printf("%5.3lf ",v[i][j]);
printf("\n");
}
getche();
}
10.3.5.METODA LR (LEFT-RIGHT)
Ai (Ri 1 .Ri 2 . ... .R2 .R1 ).A1 .(Ri 1 .. ... .R2 .R1 ) 1 (L1 .L2 . ... Li 1 ) 1 A1 .(L1 .L2 . ...Li 1 )
(10.55)
ca urmare toate matricele irului (10.52) au aceleai valori caracteristice.
Produsul matricelor inferior triunghiulare L este tot o matrice inferior triunghiular cu
elementele diagonalei principale egale cu unitatea:
230 Metode numerice n electronic
n
L Li (10.56)
i 1
iar produsul matricelor superior triunghiulare R, este o matrice superior triunghiular
n
R Ri (10.57)
i 1
Dac n irul matricelor An , n , elementele diagonale ale matricei Rn tind la
valorile proprii ale matricei A1 .
n cadrul metodei se pune problema descompunerii matricei Ai n matricele Li i Ri
i calculul produsului Ri Li .
Calculul elementelor matricelor Li i Ri se realizeaz dup expresiile (10.58) iar
elementele produsului Ri Li dup expresiile (10.59).
l ii 1; i 1,2,...,n;
l ij 0; pentru i j;
a i1
l i1 ; i 2,3,...,n; a11 0;
a11
i 1
rij a ij l ik rkj ; i j;
k 1
1 i 1
l ij (a ij l ik rkj ); rii 0; i j;
rii k 1
n
a ij rij rik .l kj ; i j; j n;
k j 1
a ij rij ; i j ;j n ; (10.59)
n
a ij rik .l kj ; i j ;
k i
Valorile proprii ale matricei A1 sunt elementele diagonale ale matricei Rn1 dac se
ndeplinete condiia
|a ii(n) a ii(n 1 )| ; i 1,2 ,...,n ; (10.60)
unde este eroarea de calcul.
Vectori i valori proprii 231
{Variabile
A:matrice;
L:matrice inferior triunghiular;
R:matrice superior triunghiular;
i,j,k:contori, ntregi;
:vectorul valorilor proprii;
:eroarea de calcul, real;
sum:sum parial, real;
{pentru i=1, , n
pentru j=1, , n
bij a ij ;
repet
a ij bij ;
pentru i=1, , n
pentru j=1, , n
{dac i>j atunci rij 0;
dac i<j atunci l ij 0 ;
}
pentru i=1, , n
pentru j=i , , n
{
sum=0;
pentru k=1, , i-1
calculeaz sum sum l ik . rkj ;
calculeaz rij a ij sum ;
}
pentru j=i+1, , n
{
sum=0;
pentru k=1, , i-1
calculeaz sum sum l jk rki ;
a ji sum
calculeaz l ji ;
rii
l ii 1 ;
232 Metode numerice n electronic
}
pentru i=1, , n
pentru j-1, , n
dac ((i<j) i (j<n)) atunci
{
sum=0;
pentru k=j+1, , n
int LR(int n,
double A[][NrMax],
double L[][NrMax],
double R[][NrMax])
{int i,j,k;
double sum;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i>j)R[i][j]=0;
if(i<j)L[i][j]=0;
}
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
{
sum=0;
Vectori i valori proprii 233
for(k=1;k<=i-1;k++)sum+=L[i][k]*R[k][j];
R[i][j]=A[i][j]-sum;
}
}
if (R[i][i]==0) return 0;
for(j=i+1;j<=n;j++)
{
sum=0;
for(k=1;k<=i-1;k++)sum+=L[j][k]*R[k][i];
L[j][i]=(A[j][i]-sum)/R[i][i];
}
L[i][i]=1;
}
return 1;
}
void ProdRL(int n,
double R[][NrMax],
double L[][NrMax],
double A[][NrMax])
{
int i,j,k;
double sum;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if ( ( i<=j ) && (j<n) )
{
sum=0;
for(k=j+1;k<=n;k++) sum+=R[i][k]*L[k][j];
A[i][j]=R[i][j]+sum;
}
if ( ( i<=j ) && (j==n) ) A[i][j]=R[i][j];
if ( i>j )
{
A[i][j]=0;
for(k=i;k<=n;k++) A[i][j]+=R[i][k]*L[k][j];
}
}
}
/* Funcia care implementeaz metoda descompunerii LR
pentru aflarea valorilor proprii
*/
int VPLR(int n,
double A[][NrMax],
double VP[])
{
234 Metode numerice n electronic
double static
r[NrMax][NrMax],l[NrMax][NrMax],A_1[NrMax][NrMax];
int i,j,sem;
double eps=0.00000001;
do
{
sem=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
A_1[i][j]=A[i][j];
if( LR(n,A,l,r)==0) return 0;
ProdRL(n,r,l,A);
for(i=1;i<=n;i++)if( fabs(A[i][i]-A_1[i][i])>eps)sem=0;
}
while(sem==0);
for(i=1;i<=n;i++)VP[i]=A[i][i];
return 1;
}
10.4. APLICAII
1. Se consider matricea:
1 2 3 5
1 2 4 3
A=
3 2 1 2
3 5 2 1
S se determine valorile i vectorii proprii ai matricei date.
Prin metoda puterii se obine cea mai mare valoare caracteristic:
max 7.225565 ;
2. Se d matricea simetric:
Vectori i valori proprii 235
1 2 3 4
2 3 2 5
A=
3 2 4 3
4 5 3 5
Prin metoda LR i TR s-au obinut aceleai valori proprii ca i n cazul metodei lui
Householder.
11
FUNCII SPECIALE *
Acest capitol cuprinde cteva funcii utilizate mai mult n aplicaii, i ale cror
valori este necesar s le cunoatem n diferite puncte ale domeniului de definiie. Ca
funcii speciale considerm funciile transcendentale (funcii definite prin integrale
improprii) sau funcii care reprezint soluii pentru diferite ecuaii difereniale de
ordinul doi. Deoarece n calculul acestor funcii se utilizeaz funcii mai simple,se
prezint i aceste funcii.
( x ) t x 1e t dt (11.1)
0
Pentru x N funcia gamma se calculeaz cu ajutorul formulei:
( n 1) n! (11.2)
Ca urmare a acestei relaii, funcia factorial se poate calcula i cu ajutorul funciei
gamma. Argumentul funciei gamma poate fi i complex, deci x z C (mulimea
numerelor complexe) . Funcia gamma satisface urmtoarea relaie de recuren:
( z 1) z ( z ) (11.3)
Dac funcia gamma este cunoscut pentru Re(z)>1, ea poate fi calculat i pentru
Re(z)<1 cu ajutorul expresiei :
z
(1 z ) (11.4)
( z ) sin z (1 z ) sin z
Calculul numeric al funciei gamma se poate face cu o formul aproximativ, funcie
de constantele ntregi r , k i de un ir de constante c1,c2 ,...,c k , cu condiia z > 0.
1
(z )
1
1
2 (z r ) c c c
( z 1) z r e 2
2 c0 1 2 k (11.5)
2 z 1 z 2 zk
Pentru r = 5 i k = 6 se determin setul de coeficieni astfel ca eroarea || 2 10 10 .
{Variabile
x: punctul n care se calculeaz funcia, real ;
coef:vectorul coeficienilor ;
j:contor, ntreg;
t,s:variabile pentru sume, real;
z,y:variabile pentru punctul de calcul, reale;
gamma:valoarea funciei gamma n x, real;
{coef[0]= 76.18009172947146;
coef[1]=-86.50532032941677C;
coef[2]=24.01409824083091;
coef[3]=-1.231739572450155;
coef[4]=0.1208650973866179e-2;
coef [5]=-0.5395239384953e-5
y:=x;
z:=x;
t=x+5.5;
t:=(x+0.2)*log(t)-t;
s:=1.000000000190015;
pentru j=1 pn la 5
{
calculeaz s:=s+coef[j]/(y+j+1);
}
calculeaz gamma=exp(-t+log(2.5066282746310005*s/x));
}
}
#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
238 Metode numerice n electronic
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
int main(void)
{
float punct;
clrscr();
printf("Punctul de calcul : ");
scanf("%f",&punct);
printf(" Valoare funciei Gamma n punctul %.5f este
%.5f",punct,exp(gammln(punct)));
getche();
return 0;
}
{Variabile
x: punctul n care se calculeaz funcia gamma, real ;
coef:vectorul coeficienilor ;
j:contor, ntreg;
t,s:variabile pentru sume, real;
z,y:variabile pentru punctul de calcul, real;
n:punctul n care se calculeaz funcia factorial, ntreg;
fact:valoarea factorialului, ntreg;
Funcii speciale 239
{
gamma(x): funcia gamma
}
{f[1]=1.0;
f[2]=2.0;
f[3]=6.0;
f[4]=24.0;
dac n<0 atunci scrie eroare Stop;
dac (n>32) atunci f[n] = exp(gammaln(n+1.0);
atta timp ct (ntop<n )
{
j=ntop+1;
f[ntop]=f[j]*ntop;
}
fact=a[n];
}
}
{Variabile
#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
/* ntoarce factorialul unui ntreg pozitiv utiliznd funcia Gamma */
float factrl(int n)
{
240 Metode numerice n electronic
{Variabile
x: punctul n care se calculeaz funcia gamma ;
Funcii speciale 241
#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
float factln(int n)
{
static float a[101];
if( n<0 ) {
printf("Eroare. Argument negativ");
return -1;
242 Metode numerice n electronic
getche();
}
if(n<=1) return 0;
else return gammln(n+1.0);
}
/* Funcia ntoarce coeficienii binomial Combinri de n luate cte k */
float coef_bin(int n, int k)
{
return floor(0.5+exp(factln(n)-factln(k)-factln(n-k)));
}
int main(void)
{
int nn,kk;
clrscr();
printf("n : ");scanf("%d",&nn);
printf("k : ");scanf("%d",&kk);
printf(" Valoare funciei coef_bin de %d luate cte %d este
%f",nn,kk,coef_bin(nn,kk));
getche();
return 0;
}
{ Variabile
z:argumentul funciei, real;
w:argumentul funciei, real;
sol:valoarea funciei beta, real;
{calculeaz gamma(z);
calculeaz gamma(w);
calculeaz gamma(z+w);
calculeaz sol=gamma(z)*gamma(w)/gamma(z+w);
}
scrie valoarea funciei sol;
Funcii speciale 243
#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
/* Funcia ntoarce valoarea funciei beta(z,w) */
float beta( float z, float w)
{
return exp(gammln(z)+gammln(w)-gammln(z+w));
}
int main(void)
{
float zz,ww;
clrscr();
printf("z : ");
scanf("%f",&zz);
printf("w : ");
scanf("%f",&ww);
printf(" Valoarea funciei Beta( %.5f ,%.5f) este
%.5f",zz,ww,beta(zz,ww));
getche();
return 0;
}
244 Metode numerice n electronic
reprezint soluii ale ecuiei lui Bessel (11.11) i se numesc funcii Bessel de spea a
doua. i aceste funcii la limit pot fi date pentru ntreg. Pentru 0 x se fac
aproximrile:
1 x
J ( x ) ;
( 1) 2
2
Y0 ( x ) ln x; (11.16)
( x ) x
Y ( x ) ;
2
Pentru x v se fac aproximrile:
Funcii speciale 245
2 1 1
J cos x
x 2 4
(11.17)
2 1 1
Y sin x
x 2 4
Pentru x se fac aproximrile:
3
2 1 0.4473
J .
2 3
3
3
9
3
(11.18)
3
2 1 0.7748
Y .
2 3
3
6
3
3
Relaiile de recuren pentru calculul funciilor Bessel sunt:
2n
J n 1 ( x ) J ( x ) J n 1 ( x )
x n
(11.19)
2n
Yn1 ( x ) Y ( x ) Yn 1 ( x )
x n
Pentru 0< x< 8 se aproximeaz J 0 ( x ) i J 1 ( x ) prin funcii raionale n x .
Aceste aproximaii pentru Y0 ( x ) i Y1 ( x ) sunt:
2 2 1
Y0 ( x ) J 0 ( x ) ln x i Y1 ( x ) J1 ( x ) ln x
x
Pentru 8<x< se utilizeaz aproximaiile (n=0,1):
2 8 8
Jn (x) Pn cos X n Qn sin X n
x x x
2 8 8
Yn ( x ) Pn sin X n Qn cos X n
x x x (11.20)
unde
2n 1 8
Xn x ; 0 1 ;
4 x
Calculul funciilor Bessel ntregi ncepe cu calculul funciilor J 0 ,J 1 ,Y0 ,Y1 , dup care
se aplic formulele de recuren.
1 1
Coeficienii polinoamelor Pn , Qn ,[24], sunt dai n cadrul programelor.
x x
n continuare, se dau integral programele de calcul pentru funciile Bessel de spea
nti i de ordinul zero,de spea a doua i de ordinul zero, de spea nti i de ordinul
nti, i de spea a doua i ordinul nti notate respectiv J 0 , Y0 , J1 , Y1 .
#include <math.h>
/* Funcia ntoarce valoarea lui Jo(x) pentru x real */
float bessj0(float x)
{
float ax,z;
double xx,y, ans,ans1,ans2;
if ((ax=fabs(x)) <8.0
{
y=x*x;
ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7
+y*(-11214424.18+y*(77392.33017+y*(-184.9052456)))));
ans2=57568490411.0+y*(-1029532985.0+y*(9494680.718
+y*(59272.64853+y*(267.8532712+y*(1.0)))));
ans=ans1/ans2;
}
else
{
z=8.0/ax;
y=z*z;
xx=ax-0.785398164;
ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4+
y*(-0.2073370639e-5+y*0.2093887211e-6)));
ans2=-0.1562499995e-1+y*(0.1430488765e-3+
y*(0.6911147651e-5+y*0.7621095161e-6-
y*0.934935152e-7)));
ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2);
}
return ans;
}
int main (void)
{
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessj0(punct));
getche();
return 0;
}
#include <math.h>
/* Funcia ntoarce valoarea lui J1(x) pentru x real */
float bessj1(float x)
{
float ax,z;
248 Metode numerice n electronic
#include <math.h>
/* Funcia ntoarce valoarea lui J1(x) pentru x real */
float bessj1(float x)
{
float ax,z;
double xx,y, ansj,ans1,ans2;
if ((ax=fabs(x)) <8.0 )
{y=x*x;
Funcii speciale 249
ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1
+y*(-2972611.439+y*(15704.48260+y*(-30.16036606))))));
ans2=144725228442.0+y*(-2300535178.0+y*(18583304.74
+y*(99447.43394+y*(376.9991397+y*(1.0)))));
ansj=ans1/ans2;
}
else
{
z=8.0/ax;
y=z*z;
xx=ax-2.356194491;
ans1=1.0+y*(-0.183105e-2+y*(0.3516396496e-4+
y*(-0.2457520174e-5+y*(-0.240337019e-6))));
ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5+
y*(-0.88228987e-6+y*0.105787412e-6)));
ansj=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2);
if (x<0.0) ansj=-ansj;
}
return ansj;
}
/* Funcia ntoarce valoarea lui Y1(x) pentru x pozitiv */
float bessy1(float x)
{
float z;
double xx,y, ans,ans1,ans2,ansj;
if (x <8.0 )
{
y=x*x;
ans1=x*(-0.4900604943e13+y*(0.1275274390e13
+y*(-0.5153438139e11+y*(0.7349264551e9+y*(-0.4237922726e7
+y*0.8511937935e4)))));
ans2=0.2499580570e14+y*(0.4244419664e12+y*(0.3733650367e10
+y*(0.2245904002e8+y*(0.1020426050e6+y*(0.3549632885e3
+y)))));
ans=(ans1/ans2)+0.636619772*(ansj*log(x)-1.0/x);
}
else
{
z=8.0/x;
y=z*z;
xx=x-2.356194491;
ans1=1.0+y*(0.183105e-2+y*(0.3516396496e-4
+y*(-0.2457520174e-5+y*(-0.240337019e-6))));
ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5
+y*(-0.88228987e-6-y*0.105787412e-6)));
250 Metode numerice n electronic
ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2);
}
return ans;
}
int main (void)
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessy1(punct));
getche();
return 0;
}
11.6. APLICAII
n tabelul (11.1) sunt prezentate valorile funciilor J 0,Y0 ,J 1 ,Y1 pentru diferite
valori ale argumentului x .
Tabelul 11.1
x Jo J1 Yo Y1
0 1.00000 0.00000 -1.144e+308 -1.245+340
0.1 0.99750 0.04995 -1.53424 -6.38575
0,2 0.99002 0.09963 -1.08111 -3.22188
0.5 0,93847 0.24420 -0.44452 -1.36457
0.9 0.80752 0.41654 0.00563 -0.84590
1.0 0.76520 0.45426 0.08826 -0.78121
1.2 0.67113 0.52163 0.22808 -0.67897
1.5 0.51183 0.59930 0.38245 -0.55633
1.9 0.28182 0.65179 0.49682 -0.40188
2.0 0.22389 0.65487 0.51038 -0.36152
2.4 0.00251 0.62454 0.51041 -0.18943
3.0 -0.26005 0.45084 0.37685 0.08754
3.5 -0.38013 0.20216 0.18902 0.30063
4.0 -0.39715 -0.10903 -0.01694 0.45621
4.5 -0.32054 -0.43292 -0,19471 0.52224
5.0 -0,17760 -0.70237 -0.30852 0.48350
5.5 -0.00684 -0.84045 -0.33948 0.34680
6.0 0.15065 -0.77852 -0.28819 0.14059
6.5 0.26009 -0.48785 -0.17324 -0.09077
7.0 0.30008 -0.01631 -0.02595 -0.29687
7.5 0.26634 0.49928 0.11731 -0.43262
Funcii speciale 251
Calculnd mai multe valori ale funciilor date n intervalul (0,10) s-au obinut graficele
funciilor Bessel din fig.11.1.
Funcia Bessel
Un semnal discret este definit prin valorile acestuia la momente discrete de timp. n general,
timpul t este discretizat uniform dac t=nT cu n Z . Semnalele n timp discret sunt
reprezentate matematic prin secvene de numere notate astfel:
{x[nT ]}, n [ N 1 , N 2 ]
{x[n]}, n [ N 1 , N 2 ] (12.1)
x[ n], n [ N 1 , N 2 ]
0, pentru n 0;
[ n] (12.2)
1, pentru n 0 ;
2. Secvena treapt unitate, prezentat n figura (12.2) i definit prin relaia (12.3).
1, pentru n 0;
u[ n] (12.3)
0 pentru n 0 ;
Fig.12.1.Impulsulunitate
Fig.12.2.Impulsultreaptunitate
n acest paragraf frecvena i pulsaia sunt normate i nu apar apar relaii cu mrimi
nenormate. Intervalele de studiu sunt -0.5< f < 0.5 i - < < .
Majoritatea secvenelor utilizate n tehnic pot fi reprezentate n domeniul frecven cu ajutorul
transformatei Fourier (12.15):
F {x[n]} X ( e j ) x[n]e jn (12.15)
n
unde X (e j ) poart numele de funcie densitate spectral sau spectrul secvenei x[n]. Relaia
(12.15) se refer la transformata Fourier a semnalelor n timp discret (notat i DTFT= Discrete
Time Fourier Transform).
Reprezentarea secvenelor prin formula (12.15) necesit existena transformatei deci:
| X ( e j )| pentru R (12.16)
Aceast condiie se poate simplifica astfel:
Transformata Fourier discret 255
| X ( e j )| | x[n]e jn | | x[ n]|.| e jn | (12.17)
n n
unde | e jn | 1 . Ca urmare, condiia devine | x[n]| (12.18)
n
Dac secvena x[n] este absolut sumabil, transformata Fourier exist i, de aici rezult c
intrrile i rspunsurile sistemelor stabile n timp discret sunt totdeauna reprezentabile n
domeniul frecven cu ajutorul transformatei Fourier. Condiia (12.16) se mai poate exprima i
prin urmtoarea limit:
M
j j
lim | X ( e ) X M ( e )| 0 unde X M ( e j ) x[n]e jn (12.19)
M n M
Dac x[n] este absolut sumabil, convergena seriei (12.15) este asigurat pentru orice . Teoria
dezvoltrii n serie exponenial [MA] asigur convergena n sensul erorii ptratice minime
pentru secvene de ptrat sumabil (de energie finit), adic satisfac condiia:
| x[n]|2 (12.20)
n
Mai general, relaia (12.19) poate fi scris sub forma (12.21):
j j 2
lim | x( e ) X M ( e )| d 0
M
Algoritmul este ales pentru secvene reale. Secvenele x[n] reale au proprietile:
X [ k ] X * [ N k ], sau Re X [ k ] Re X [n k ], Im X [ k ] Im X [ N k } (12.27)
iar X[0] [i X[N/2] au valori reale. Ca urmare, este suficient s se calculeze urmtoarele N valori:
X[0],Re X[1],Re X[2],,Re X[N/2-1],
X[N/2],Im X[1],Im X[2], Im X[N/2-1]
Algoritmul este:
N N
1 N 1
N 2 k2 2
n .k nk
X [ k1 k 2 ] x[2n1 ].W N1 1 WN .WN .
k 2
x[2. n1 1].W N1 1 . (12.28)
2 n1 0 n1 0
2 2
Pentru k 2 0 rezult:
X [ k1 ] X ' [ k1 ] WN1 . X "[ k1 ]
k
(12.29)
unde X [ k1 ] i X [ k 1 ] reprezint cele dou DTFT de ordinul doi. Pentru a pune n eviden
'
0 Re X [k1 ]
Re X [k1 ]
TFD
N /2
Im X [k1 ]
Re X [k1 ]
-1
-1
0
Re X * [k1 ] cos( ) Re X [ N / 2 k1 ]
sin( )
TFD
sin( ) -1
N /2
Re X * [k1 ]
cos( ) Im X [ N / 2 k1 ]
-1
13
numrul de nmuliri reale(NMR), NMR[ N ] N log 2 N N 4 (12.33)
4
3 5
numrul de adunri reale (NAR), NAR[ N ] N log 2 N N 4 (12.34)
2 2
unde N= 2 n reprezint numrul total de eantioane. Numrul de operaii se micoreaz, prin
acest algoritm rezultnd o reducere a memoriei necesare ca urmare a utilizrii unor numere reale
n loc de numere complexe.
#include <math.h>
#include <graphics.h>
#define PI 3.141592653
/* Transformata Fourier rapid cu decimare n timp
pentru secvene de tipul 2^m
m ordinul secvenei
x vector cu dimensiunea 2^m care conine la intrare
partea real a semnalului n timp, iar la ieire
partea real a semnalului n frecven
y vector cu dimensiunea 2^m care conine la intrare
partea imaginar a semnalului n timp, iar la ieire
partea imaginar a semnalului n frecven
*/
void FFT_DT(int m, double x[],double y[])
{
int i,j,k,l,n1,n2,n;
double a,c,s,xt,yt,w;
n=pow(2,m);
j=1;
for(i=1;i<=n-1;i++)
{
if(i<j)
{
xt=x[j];
x[j]=x[i];
x[i]=xt;
xt=y[j];
y[j]=y[i];
y[i]=xt;
}
k=n/2;
while (k<j)
{
j-=k;
Transformata Fourier discret 259
k=k/2;
}
j+=k;
}
n1=1;
for(k=1;k<=m;k++)
{
n2=n1;
n1=n2*2;
w=PI/n2;
a=0;
for(j=1;j<=n2;j++)
{
c=cos(a);
s=sin(a);
a=j*w;
for(i=j;i<=n;i+=n1)
{
l=i+n2;
xt=c*x[l]+s*y[l];
yt=c*y[l]-s*x[l];
x[l]=x[i]-xt;
x[i]=x[i]+xt;
y[l]=y[i]-yt;
y[i]=y[i]+yt;
}
}
}
}
void main(void)
{
int i;
int gdriver = DETECT, gmode, errorcode;
double re[128],im[128], modul[128];
for(i=0;i<=127;i++)
{
re[i]=0;
im[i]=0;
}
/* impuls */
for(i=0;i<=10;i++) re[i]=1;
/*sinus */
/* for(i=0;i<=127;i++) re[i]=0.2*sin(PI/4*i)+0.1*sin(PI/8*i);*/
260 Metode numerice in electronic
/* triunghi
for(i=0;i<10;i++) re[i]=i;
for(i=10;i<20;i++) re[i]=20-i; */
FFT_DT(7,re,im);
for(i=0;i<=127;i++)modul[i]=sqrt( pow(re[i],2)+pow(im[i],2) );
N
1
2 N N
{x[n1 ] x[n1
nk
X [2 k1 ] ]}W N1 1 TFD N {x[n1 ] x[n1 ]}
n1 0 2 2
2 2
N
(12.37)
1
2 N N
X [ 2 k1 1] {x[n1 ] x[ n1 ]}W N1 W N1 1 TFD N {( x[ n1 ] x[n1 ])Wnn1 }
n nk
n1 0 2 2
2 2 2
( a b)WN1
n
-1
b
#include <math.h>
#include <graphics.h>
#define PI 3.141592653
/* Transformata Fourier rapid cu decimare n frecven
pentru secvene de tipul 2^m
262 Metode numerice in electronic
m ordinul secvenei
x vector cu dimensiunea 2^m care conine la intrare
partea real a semnalului n timp, iar la ieire
partea real a semnalului n frecven
y vector cu dimensiunea 2^m care conine la intrare
partea imaginar a semnalului n timp , iar la ieire
partea imaginar a semnalului n frecven
*/
void FFT_DF(int m, double x[],double y[])
{
int i,j,k,l,n1,n2,n;
double a,c,s,xt,yt,w;
n=pow(2,m);
n2=n;
for(k=1;k<=m;k++)
{
n1=n2;
n2=n2/2;
w=PI/n2;
a=0;
for(j=1;j<=n2;j++)
{
c=cos(a);
s=sin(a);
a=j*w;
for(i=j;i<=n;i+=n1)
{
l=i+n2;
xt=x[i]-x[l];
x[i]=x[i]+x[l];
xt=y[i]-y[l];
y[i]=y[i]+y[l];
x[l]=c*xt+s*yt;
y[l]=c*yt-s*xt;
}
}
}
j=1;
for(i=1;i<=n-1;i++)
{
if(i<j)
{
xt=x[j];
x[j]=x[i];
x[i]=xt;
xt=y[j];
Transformata Fourier discret 263
y[j]=y[i];
y[i]=xt;
}
k=n/2;
while(k<j)
{
j-=k;
k=k/2;
}
j+=k;
}
}
void main(void)
{
int i;
int gdriver = DETECT, gmode, errorcode;
double re[128],im[128], modul[128];
for(i=0;i<=127;i++)
{
re[i]=0;
im[i]=0;
}
/* impuls */
for(i=0;i<=10;i++) re[i]=1;
/*sinus */
/* for(i=0;i<=127;i++) re[i]=0.2*sin(PI/4*i)+0.1*sin(PI/8*i);*/
/* triunghi
for(i=0;i<10;i++) re[i]=i;
for(i=10;i<20;i++) re[i]=20-i; */
FFT_DF(7,re,im);
for(i=0;i<=127;i++)modul[i]=sqrt( pow(re[i],2)+pow(im[i],2) );
{
lineto(8*i,300-30*modul[i]);
}
getche();
closegraph();
}
Acest algoritm are viteza de calcul inferioar algoritmilor FFT prezentai, dar superioar
vitezei de calcul a transformatei DTFT. Codul algoritmului este simplu, ceea ce-l face util n
unele aplicaii.
Utiliznd egalitatea WNNk 1 , expresia transformatei Fourier discrete (12.23) devine:
N 1
X [ k ] x[n]WN k ( N n ) (12.40)
n0
Relaia (12.40) poate fi interpretat ca o convoluie discret a secvenei x[n] cu secvena
WN kn ,care reprezint funcia de transfer a unui filtru. Notnd rspunsul filtrului cu y k [n ]
pentru intrarea x[n] se obine:
N 1
y k [ n] x[ m]WN k ( n m) (12.41)
m 0
2. . k
v k [n] 2 cos . v [n 1] v k [n 2] x[n] ;
N k (12.48)
y k [ n] v k [n] WNk v k [n 1];
Secvena y k [n ] reprezint spectrul semnalului x[n].Ecuaiile (12.48) pot fi
implementate prin schema filtrului numeric de ordinul doi din figura (12.5)
Vk [n] +
z 1
X [n ] + - Y [n ]
+ +
WNk
z 1
-
2 cos( 2k / N ) V k [ n 2]
vi1=2*c*vi1vi2+I[j];
vi2=temp;
}
yfr=c*vr1-vr2-s*vi1;
yfi=c*vi1-vi2+s*vr1;
REAL[k]=yfr;
IMAG[k]=yfi;
}
//Calculeaz magnitudinea semnalului de ieire
for(k=1;k<=K,k++)MAG[k]=sqrt(real[k]*REAL[k]+IMAG[k]*IMAG[k]);
AXE1(k,Mag);//reprezentarea grafic a magnitudinii
getche();
}
1 2 B
E{en,i [k ]} 0 ; E{en2,i [k ]} .2 n2,i ; E{en [k ]} 0 ;
12
E{| en [k ]| 2 } E{en2,1 [k ]} E{en2,2 [k ]} E{en2,3 [k ]} E{en2,4 [k ]} 2 E{en,1 [k ]en,2 [k ]}
1 2 B
E{en,3 [k ]en,4 [k ]} 2 B2 ,
3
N 1
F[ k ] en [ k ], E {F[ k ]} 0 ,
n0
N 1 N 1 N 1 N 1 N 2 N
E {| F[ k ]|2 } E | en ,k [ k ]|2 E en2, R [ n] en2, I [n] E {| en [ k ]|2 } 2
n0 n0 n0 n0 3
12.2. APLICAII
1. Se consider semnalul EEG din figura 12.6 i eantioanele urmtoare :
119,128,126,131,131,126,136,128,128,129,117,125,125,125,129,122,
119,119,122,120,131,129,134,140,132,136,132,126,131,120,122,121,
131,129,128,134,123,129,131,126,131,126,130,133,128,134,128,127,
129,121,128,124,123,130,121,128,127,126,133,125,128,129,126,132,
123,127,131,124,131,128,131,134,127,134,129,128,133,125,132,130,
126,133,125,130,129,120,126,122,128,132,123,129,123,124,131,124,
130,125,124,133,126,131,131,128,133,126,129,131,124,130,127,130,
134,125,131,129,127,135,129,132,126,118,126,121,130,133,129,135
U [V ]
140
t [s]
119
Prin algoritmul decimrii n timp s-a obinut rezultatul din figura (12.7 ) iar cu algoritmul
Goertzel rezultatul din figura (12.8)
U / U0
1
f / f0
0
0.5 1
U / U0
1
f / f0
0
0.5 1
Fig. 12.8. Modulul semnalului EEG n frecven normat prin algoritmul Goert
Transformata Fourier discret 269
0.5
n
0
100 200 300 400 500
Fig.12.9.Impulsul treapt.
U [n ]
32
16
250 500
Fig.12.10.Transformata Fourier a impulsului treapt
Prin analiza figurilor, transformatelor Fourier, a semnalelor se pot trage concluzii asupra
comportrii n frecven a semnalelor, ceea ce n medicin nseamn diagnosticarea unor
afeciuni, iar n tehnic realizarea unor sisteme cu diferite proprieti.
Anexa 1 279
ANEXA 1
{int i;
double aux;
aux=Coef[grad];
for (i=grad-1; i>=0;i-- )
aux=Coef[i]+point*aux;
return aux;
}
int main(void)
{
int n,i;
double A[NrMax],pct;
clrscr();
printf( Dai gradul polinomului);
scanf( %d,&n);
printf( Dai coeficienii polinomului \n);
for (i=n;i>=0;i--)
{printf(A[%d]=,i );
scanf (%lf,&A[i]);
}
printf(Dai punctul de calcul);
scanf(%lf,&pct);
clrscr();
printf(Valoarea polinomului este
%6,5lf,VALPOL(n,A,pct));
getche();
return0;
}
280 Metode numerice n electronic
2. Programul pentru calculul valorii derivatei unui polinom ntr-un punct dat.
DERPOL
#include <conio.h>
#include <stdio.h>
#incude <math.h>
#define NrMax 10
{int i;
double aux;
static double B[NrMax];
B[grad]=aux=Coef[grad];
for (i=grad-1; i>=0;i-- )
{B[i]=Coef[i]+point*auxB[i+1];
aux=B[i]+point*aux;
}
return aux;
}
int main(void)
{
int n,i;
double A[NrMax],pct;
clrscr();
printf( Dai gradul polinomului);
scanf( %d,&n);
printf( Dai coeficienii polinomului \n);
for (i=n;i>=0;i--)
{printf(A[%d]=,i );
scanf (%lf,&A[i]);
}
printf(Dai punctul de calcul);
scanf(%lf,&pct);
clrscr();
printf(Valoarea derivatei polinomului este
%6,5lf,DERPOL(n,A,pct));
getche();
return0;
}