Documente Academic
Documente Profesional
Documente Cultură
CALCUL NUMERIC
-NOTE DE CURS-
GRECU LUMINIȚA
I. CONCEPTE DE BAZĂ ȘI TIPURI DE ERORI
I.1. INTRODUCERE
1
y 0.x1x2 … xt be
t
y be xkbk
k
1
1 2 t k
k 1
, ,
0,1111 2 şi 0,001111 2 .
4 6
mantisele:
x y 0,250704 10 .
3
b1 x4
x3 0.0154 0.1768 10 3 0.1922 103
b2 b1 x2
0.1922 0.0031 10 0.195310
3 3
b3 b2
x 0.1953 0.0002 10 3 0.1955103
1
Concluzie: Adunarea numerelor în calculator nu mai are aceleaşi
proprietăţi ca operaţia cunoscută de adunare a numerelor reale.
Soluția finală a calculelor generate de modelarea numerică, ce
presupune efectuarea unor operaţii aritmetice, care se execută repetat
şi în număr finit, poate fi afectată de acestea.
Principalele clase de erori sunt următoarele: erori inerente,
erori de metodă, erori de rotunjire şi de trunchiere (sau reziduale).
Erorile inerente nu au legătură cu elaborarea modelului
numeric. Ele se pot produce fie când se obţine modelul fizic sau cel
matematic, fie când se fac măsuratori, sau chiar când se introduc
datele de intrare într-un program de calcul numeric.
Erorile de metodă sunt specifice folosirii metodelor numerice
şi algoritmilor de calcul.
1
xn
Exemplul I.3. Să se evalueze numeric 2x 9 dx , pentru n=7.
0
Soluţie:
Notând cu In integrala precedentă se demonstrează cu uşurinţă
Calculăm I 7 .
Avem:
1 1 11
I ln 2x 9 1 ln 0,10034
0 0
2 2 9
1 9
I 0,10034 0,04847
1
2 2
9
I 0,25 0,04847 0,031885
2
2
1 9
I
0,031885 0,023184
3
6 2
1 9
I 0,023184 0.020672
4
8 2
1 9
I 5 0,020672 0.006976
10 2
1 9
I 6 0.006976 0.051941
12 2
1 9
I 7 0.051941 0.162306 .
14 2
a) ex x x , sau b) ex
x (1)
x
Eroarea absolută nu ţine cont de ordinul mărimii studiate şi din
acest motiv nu este totdeauna suficientă doar cunoaşterea acesteia.
Definiţia I.2. Eroarea relativă se notează cu x şi este dată de
relaţia: a) ex
, sau b) ex x
x x
x
Uneori eroarea relativă se exprimă, în procente, prin relaţia:
x ex x
100 0 . (2)
0
ex x ex x
reale şi se obţin relaţiile:
a) ex
, sau b) sau x 100 , în procente. (3)
0
x
0
x
x
Exemplul I.5. Să considerăm o mărime, x 13 , a cărei
valoare calculată este
x 14 . Eroarea absolută ex 1 . Aceeaşi
este
eroare absolută, ey 1 , se obţine şi dacă de exemplu analizăm o altă
asta 1
0.0714 , 1
1387 7.2098 10 , şi deci .
4
: x
14
y
y x
II.1. INTRODUCERE
t11 x1
b1
t
21x1
t22 b2
x2
....
tn1 x1 tn2 x2 ... tnn xn bn
Metoda substituţiei directe presupune obţinerea
necunoscutelor succesiv, începând cu prima din ecuaţiile sistemului.
Astfel obţinem:
b1
x ,
1
t11
b2 t21x1
x2 ,
t
22
....
n1
bn tnk xk
xn k 1
tnn
Algoritmul de rezolvare a sistemelor inferior triunghiulare
Date de intrare: n, numărul de ecuaţii şi necunoscute;
matricea triunghiulară a sistemului, T, care îndeplineşte condiţia
3. Atribuie lui b1
x1 ;
t11
4. Pentru i de la 2 la n , cu pasul 1, execută
4.1. Iniţializează S cu 0 S 0 ;
4.2. Pentru k 1,i 1 , cu pasul 1, execută
s s tik xk ;
t
4.3. Atribuie valoare necunoscutei x ,
x bi S
i i ;
ii
5. Afişează valorile necunoscutelor;
6. Stop.
Analog se obţine şi algoritmul pentru rezolvarea sistemelor
superior triunghiulare, denumit substituţie inversă, sau înapoi. Prima
necunoscută care se află este xn , apoi se determină xn 1,..., x1 .
bn
x ,
n
t nn
b n
t ij
xj
j i 1
i
t , i n 1, n 2,L,1.
xi
ii
3. Atribuie lui x bn ;
n
tnn
4. Pentru i de la n-1 la 1 , cu pasul -1, execută
4.1.Iniţializează S cu 0, S 0 ;
Exemplul II.1.
1) Să se rezolve sistemul de ecuaţii de mai jos prin metoda
substituţiei inverse:
4x1 x2 x3 x4 5
3x2 x3 x4 3
5x3 x4 6
2x4 2
Soluţie:
Matricea coeficienţilor sistemului dat este superior
triunghiulară şi deci aplicăm substituţia înapoi. Se începe cu calculul
lui x4 , apoi se calculează şi celelalte necunoscute: x3 , x2 , x1.
Obținem astfel: x4 1, x3 1, x2 1, x1 1.
float s,x[30],T[30][30],B[30];
int i,k,j,n;
void main()
{
printf("Dati nr de ecuatii n:\n");
scanf("%d",&n);
printf("Dati coeficientii necunoscutelor\n");
for (i=1;i<=n;i++)
for (j=i;j<=n;j++)
{
printf("T[%d][%d]: ",i,j);
scanf("%f",&T[i][j]);
}
printf("Dati termenii liberi:\n");
for (i=1;i<=n;i++)
{
printf("B[%d]: ",i);
scanf("%f",&B[i]);
}
x[n]=B[n]/T[n][n];
for (i=n-1;i>=1;i--)
{ s=0;
for (k=n;k>=i-1;k--)
s=s+T[i][k]*x[k];
x[i]=(B[i]-s)/T[i][i];
}
printf("Solutia este: \n");
for (i=1;i<=n;i++)
printf("x[%d]=%f \n",i,x[i]);
getch();
}
Metoda lui Gauss este una din cele mai cunoscute metode de
rezolvare a sistemelor de ecuaţii liniare, de calcul al determinanţilor
şi de determinare a inversei unei matrici. Se poate utiliza inclusiv la
aflarea rangului unei matrici. Considerăm un sistem liniar de n
ecuaţii cu n necunoscute:
Ax B , A M n (R), B Mn1(R) .
unde
k
b ak 1
i
b k 1 i, k
b k 1 pentr
u ik 1
i k 1 k
ak ,k
Elementu k 1
l ak , poartă numele de pivot al transformării de la
detA
a a 1a 2 ...a n 1 .
11 22 33 nn
Exemplul II.2.
x 2 y z 2
2x y 4z 8
3x y z 2
Soluţie:
1 2 1 2
2 1 4 8
3 1 1 2
1 2 1 2
0 5 2 12
0 5 2 8
1 2 1 2
0 5 2 12
0 0 4 4
Exemplul II.3
Să se rezolve acelaşi sistem aplicând tehnica pivotării parţiale.
Soluţie:
În cadrul tehnicii de pivotare parţială, se permută între ele
liniile sistemului astfel încât la fiecare pas pivotul ales să fie maxim
în modul între elementele aflate pe coloana sa, sub linia pe care este
situat.
La primul pas se observă că max 1,2,3 3 .
Elementul maxim în modul de pe prima coloană, adică 3,
trebuie adus, printr-o permutare de linii, pe prima poziţie. Astfel
permutăm liniile 1 şi 3.
Obţinem:
3x y z 2
2x y 4z 8
x 2 y z 2
3 1 1 2
2 1 4 8
1 2 1 2
3 1 1 2
3 3 20
5 10
00 5 2 83
3 3 3
3 1 1 2
5 20
0 10 3
3 3
0 0 4 4
3x y z 2
5 y 10 z 20
3 3 3
4z 4 z 1
20 10 1
y 2
5
2 2 1
x 1
3
Obţinem astfel soluţia unică: 1,2,1 .
Exemplul II.4
Să se rezolve acelaşi sistem aplicând tehnica pivotării totale.
Soluţie:
La primul pas se caută elementul maxim în modul din toată
matricea sistemului. Se observă că elementul maxim în modul este 4.
Acesta trebuie adus pe linia 1 coloana 1. Astfel se permută liniile 1
şi 2, rezultând:
2x y 4z 8
3x y z 2
x 2 y z 2
Apoi se permută coloanele 1 şi 3. Reţinem această permutare
de coloane( C1 C3 ).
Sistemul devine:
4x1 x2 2x3 8
x x 3x 2
x 1 2x 2 x 3 2
1 2 3
4 1 2 8
1 1 3 2
1 2 1 2
4 1 2 8
0
5 4 10 4 0
0 9 2 4
4 4
La o aplicare a tehnicii de pivotare obişnuite, la pasul doi ar
42 1 8
0
10 4 54 0
0 24 9 4
4 8
42 1 0
0 10 54 4
4 2
00
Exemplul II.5.
Folosind tehnica pivotării să se rezolve sistemul :
2x 3y z t 4
x4yz 2
2x y 3z t 2
x t 4
Soluţie: 2y
2 3 1 1 4
1 4 1 0 2
2 1 3 1 2
1 2 0 1 4
2 3 1 1 4
0
11
2
3
2
1
2 0
0 4 4 2 2
0 12 12 12 2
2 3 1 1 4
0 11 3 1 0
0 0 3211 18
11
2211
0 0
7 5 22
11 11
2 3 1 111 4
0 11 3 1 0
0 0 32 1811 2211
0 0 11 143429
0 176176
Se obţine astfel următoarea formă echivalentă pentru sistem:
2x 3y z t 4
11y 3z t 0
32 z 18 t 2
11 11
143
176 t 429176
Prin substituţie inversă obţinem soluţia: 1,0,1,3.
Exemplul II.6.
Soluţie:
45
Teorema III.1. Dacă matricea A are toţi minorii diagonali
principali nenuli, atunci există o factorizare LR a lui A în care L este
nesingulară.
Pentru determinarea matricelor L şi R există două tipuri
importante de algoritmi asemănători, care diferă doar datorită
aspectului matricelor rezultate în urma descompunerii:
1) Metoda Crout – caz în care diagonala lui R este unitară.
2) Metoda Doolittle –caz în care diagonala lui L este unitară
1) Factorizarea Crout (metoda Crout)
În acest caz avem următoarea
A L R cu
descompunere
0 0 . . 0
l r1 r1 . . r1n
11 l22 0 . . 0
1 2
3
. . r2n
1
. . r3n
l32 l33 . . 0 r2
l21 0
0 3
L 31 R 1
l 0
. . . . . . . . . .
. l . . l
l l .
n1 n 2 n3 nn
0 0 . . 1
Soluţie:
Calculând minorii diagonali principali oservăm că ei respectă
condiţia din teoremă.
Fie cele două matrice L şi R.
l11 0 0 r13
L l 21 l 22 0 1 r12
1 r23
R
0 0
0
l31 l32 l33 1
Pasul 1:
-Se determină prima coloană a lui L. Avem relaţiile:
l11 a11 2 l11 2
1
1
r
l 21 0 0 0
22
L l 32 0 r r
R0
2n
23
l 31 1 0 r
r 3n
33
1
l n1 n
0 r nn
l 0
1 0 0
r 12 r 13
r 11 r 22 r 23
Fie L= l 21 1 0 0
31 32 1
R= 0 r 33
l l 0
Pasul 1:
Se determina prima linie a lui R
1 0 0 2 1 2
L 1/ 1 0 R 0 7 / 2 0 .
1/
2 2
3/ 7 1 0 0 2
}
getch();
}
Rularea programului anterior pentru factorizarea Doolittle a matricei
2 1 3
A 1 1 , conduce la rezultatele de mai jos.
1 2 1
1
x Ax 0 x R xt Ax 0 x 0 ,
t n
şi
l , ..., l i1
, i 2, n .
iia l
2
11 a11 ii jj
j1
a12 a1i
l l a l l
, i 2, n
11 21 12 21 i1
l11 l11
for (j=2;j<=n;j++)
{
s=0;
for (k=1;k<=j-1;k++)
s=s+L[j][k]*L[j][k];
L[j][j]=sqrt(A[j][j]-s);
for (i=j+1;i<=n; i++)
{
sum=0;
for (k=1;k<=j-1;k++)
sum=sum+L[i][k]*L[j][k];
L[i][j]=(A[i][j]-sum)/L[j][j];
}
}
printf(" Matricea L este: \n");
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++) printf("L[%d]
[%d]=%f ",i,j,L[i][j]); printf("\n");
}
getch();
}
III. 2. METODE NUMERICE PENTRU AFLAREA INVERSEI
UNEI MATRICI
să aiba pe linia a treia în loc de 1 valoarea .
1 0 0
E 0 1 0
0
0
Făcând produsul dintre E si A , în această ordine, obţinem
schimbarea propusă :
1 0
0 a12 a13 a11 a12 a13
a11
a23 a21 a23
0 1 0 a22 a22
a21
0 0 a31 a32 a33 31 a32 a33
a
Să construim acum o serie de matrice elementare care să inducă în
matricea data A următoarele schimbari :
E1 să înmulţească linia a doua cu 3 ;
E2 să adune linia a doua la linia a treia ;
E3 să permute linia a treia cu a doua.
1 0 0 1 0 0 1 0 0
E1 0 3 0 , E2 0 1 0 , E3 0 0 1
0 0 1 0 1 1 0 1 0
Aplicăm succesiv aceste transformări elementare matriciei A. Se
obţine următorul rezultat :
a11 a12 a13
E3 E2 E1 A = 3a21 3a22 a32
3a23 a33
a31
3 3a22
21 3a23
a
Pasul 1
Construim
1
0 0
a
a1121 1 … 0
E1 a11
… … ……
a
a n1 0 … 1
11
Apoi calculăm nota cu a1
i
j
A1 E1 A , matrice ale cărei elemente le vom
Deci:
1
…a
1
a12
1 1n
… a1
A E A
1
a22 2n
0
… …
1 1 … …
1
0 an 2 … a1nn
Pasul 2
Construim acum matricea elementară E2 .
1 a11
… 0
a2 22
1
0 1
E2
1 … 0
a22
… … ……
1
an2
0 1 … 1
a22
Calculăm
A2 E2 A1 E2 E1 A , matrice ale cărei elemente le
2
vom nota cu a
i
1
2
… a 0
1 … 2n2
1n
A E E A 0 a
2 2 1
… … … …
0 0 … 2ann
0
i
unde a i
0
11 a11 .
Exemplul III.3 Să se determine inversa matricei A, unde
3 4
A .
1 2
Soluţie:
1 3 0
Determinam E şi calculăm A A:
E
1 1
1 1 1
3
1 03
3 4 1 4 3
E A A
0
1 1 2
1
1 10 1
3
3
4
Determinăm E şi calculăm E A
1 10
2
0 3 2 1
10
1 4
1 4
10 3 1 0
A
E
0 3 0 10 0 1
2 1
10 3
1 2
A1 15 5
3
10 10
[1] -3 1 0
1 7 0 1
1 -3 1 0
0 [10] -1 1
1 0 7/10 3/10
0 1 -1/10 1/10
1 2 0 1 0 0
-1 3 1 0 1 0
2 0 1 0 0 1
1 2 0 1 0 0
0 5 1 -2 0 1
0 -4 1 -2 0 1
1 0 -2/5 3/5 -2/5 0
0 1 1/5 1/5 1/5 0
0 0 9/5 -6/5 4/5 1
1 0 0 1/3 -2/9 2/9
0 1 0 1/3 1/9 -1/9
0 0 1 -6/9 4/9 5/9
1 2 2
3 9 9
1 1 1
1
A .
3 9 9
2 4 5
3 9 9
/*Program Inversa -varianta G-J cu pivotare partiala*/
#include<stdio.h>
#include<conio.h>
#include<math.h>
float t,m;
int i,j,k,l,n;
float s, A[10][20], u[10][10];
void main()
{
printf ("Intoduceti nr. de linii si de coloane ale matricei");
scanf("%d",&n);
printf("Dati matricea\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("A[%d][%d]: ",i,j);
scanf("%f",&A[i][j]);
}
for (i=1;i<=n;i++)
for(j=n+1;j<=n+n;j++)
{
if (j==i+n) A[i][j]=1;
else A[i][j]=0;
}
for(k=1;k<=n;k++)
{
l=k;
for (i=k;i<=n;i++)
{u[i][k]=sqrt(A[i][k]*A[i][k]);
if (u[i][k]>u[k][k])
l=i;}
if(l!=k)
for(j=1;j<=n+n;j++)
{
t=A[k][j];A[k][j]=A[l][j];A[l][j]=t;
}
for(i=1;i<=n;i++)
{
m=A[i][k]/A[k][k];
A[i][k]=0;
for(j=k+1;j<=n+n;j++)
A[i][j]=A[i][j]-m*A[k][j];
}
A[k][k]=1;
}
printf("Matricea inversa este: \n");
for (i=1;i<=n;i++)
{
for (j=n+1;j<=n+n;j++)
printf("A[%d][%d]=%f",i,j-n,A[i][j]);
printf("\n");
}
getch();
}
0 3 1 0
3 7 0 0 4
2 2
1
8
1 0
Pasul 3: Determinăm E3 1 5 / 4
0 0 1/ 4
0
1
0
0 0 A1 E E E .
E A 0 2
1
3 3 2 1
0 0 1
o aplicaţie
f: X . Vom spune că x* este punct fix
X X
pentru f
dacă f x* x* .
Definiţia IV.3. Aplicaţia f se numeşte contracţie dacă
există
a R, 0 a 1, astfel d f x, f y ad x, y
încât
pentru oricare ar fi
x, y X . a se numeşte constanta
contracţiei.
Teorema IV.1. ( Teorema de punct fix a lui Banach) Fie
(X,d) un spaţiu metric complet şi
f :X o contracţie.
X
d x , x an d x0 , x1 , n, p N
n
n
1a
Relația precedentă spune că şirul xn este şir Cauchy.
Întrucât (X,d) este spaţiu metric complet, xn va fi şir
convergent. Notăm cu x* X limita sa. Avem:
lim d x , x* 0 x * f x *
și
n
n
x 1a
Această inegalitate ne arată cât de mare poate fi eroarea
pe care o obținem când aproximăm
pe x* cu xn .
2. d x , x* a
d xn , , n 1
n
1 1 xn
a
IV.2. METODE ITERATIVE PENTRU REZOLVAREA
SISTEMELOR DE ECUAŢII LINIARE
sistemului:
Ax b , unde A Run , b Rn .
1 n
y1 b1 a1 j x j
a
11 j2
1 n
y2 b2 a2 j x j a21 y1
a
22 j 3
⁝
1 i 1 n
yi bi aij y j aij x j
a
ii j 1 j i 1
⁝
1 n
1
yn bn anj y j
a
nn j 1
Sunt adevărate următoarele enunţuri:
1. Această aplicaţie se poate defini doar atunci când diagonala
principală a matricei A nu conţine elemente nule aii 0 .
2. Aplicaţia
d : Rn Rn d x, y max xi este o
R yi i
metrică pe R iar n
R , d reprezintă un spaţiu metric complet.
n
a
j 1
ij
ji
q max
i 1,n aii
De aici obținem un algoritm de soluționare a unui
sistem algebric caracterizat de o matrice ce satisface cerinţele
teoremei.
Algoritm. Alegem şi apoi construim şirul de
xn0
R
aproximaţii succesive (iteraţii successive) folosind relația:
x n 1 f x n n 0,1,2,...
Atunci x lim x este singurul punct fix al lui f.
n
n
Mai mult x f x x este soluţia sistemului Ax b .
x k , k 0,1,...
astfel:
x0 se alege arbitrar,
k 1 1 n
k i 1, n
x b a x ,
1 i ij j
aii j 1
j i
Observaţia IV.4. Se observă că la o iterație în formule
de calcul din membrul drept se folosesc toate componentele
iteraţiei precedente.
II. Metoda Seidel-Gauss (metoda iteraţiilor succesive )
k
Ea constă în construcţia şirului x , k 0,1,... după modelul de
Observaţia IV.6.
Condiția (*) din teorema IV.2 poate fi înlocuită cu
condiția:
A să fie diagonal dominantă pe coloane, adică
n
a jj
aij j 1, n .
,
i 1
i j
Observaţia IV.7.
În general iteraţiile se opresc atunci când, pentru un
dat, adică pentru o eroare admisibilă dată, este îndeplinită
condiţia:
bxn x1 x2 L an xn 1
n
ann ann
ann n
b1 a13 k a1n k 1
k a12 k1 1
x1 x x L xn
a11 a11 2 a11 3 a11
b a a a
x k 2 21 x k 11 233 x k 1 nL 2n x k 1
2
22 a22 a
22
a22
.........................................................................
k an1 k an 2 k an,n 1 k 1
1 1
bn
xn x1 x2 L
ann a n
ann n
xn 1
ann
x
a11 a11 a11 3 a11 n
b a a2n
x 2 -( 21 a23 ................... x )
n
x
2
x 3
a a a22 a22
1
22 22
⁝
bn an1 a2n-1
x -( an2 ................. x )
2
x
n 1
x n-1
ann a nn ann ann
1
În evaluarea lui x2 ținem cont că pentru x1 cunoaștem
două valori: x10 şi x11 (calculată anterior). Cum x11 reprezintă o
valoare mai recentă o vom prefera pentru accelerarea
convergenţei. Deci:
b a a a
x1 2 -( 21 x1 23 x0 ............................. 2n x0 ) , etc.
2 3 n22 22
a a
a22 a22
aii aii
aii
j 1 j i 1
altfel (dacă
D adm ), se compară k şi N max ; dacă
k N max
(metoda nu converge), se afiseaza mesajul
"Depasire nr. maxim iteratii" şi se trece la pasul 12;
altfel se trece la pasul următor;
9. Se actualizează vectorul aproximaţiilor din ultima
iteraţie:
xi yi , i 1, n
10. Se revine la pasul 5;
11. Se afişează soluţia yi ,i 1, şi numărul
aproximativă de iteraţii n
efectuate k;
12. Stop.
1 2 3
Pasul 1.
Considerăm ca soluţie iniţială : x0 x0 x0 0.
1 2 3
max x x 2,2
1 0
i i adm
i
Pasul 2
Valorile determinate în pasul x1; x1; x1 se introduc în
precedent
1 2 s
max x x 0,24
2 1
i adm
i
i
Pasul 3
Valorile determinate la pasul precedent x 2 ; x 2 ; x2 se introduc în
1 2 3
membrul drept al sistenului și se obține:
x 3 0,958 ; x x 0,002
3
2
1 1 1
x3 1,88 ; x 3 x 2 0,02
2 2 2
3x 2,198 ; x 3 x3 0,038
3 3
max x x 0,038
3 2
1 i adm
i
Pasul 4
Valorile determinate la pasul x3; x3; x3 se introduc în
precedent
1 2 3
membrul drept al sistemului de ecuaţii și se obține:
x 4 0,9484 ; x x 0,0096
4
3
1 1 1
4
x 1,8760 ; x 4 x 0,004
3 2 2 2
4
x 2,1964 ; x 0,0016
4
3
x
3 3 3
max x x 0,0096
4 3
i i i adm
Pasul 5
Valorile determinate la pasul x 4 ; x 4 ; x4 se introduc în
precedent
1 2 3
membrul drept al sistemului de ecuaţii și se obține:
x 5 0,9483 ; x x 0,0001
5
4
1 1 1
x5 1,8752 ; x x 0,0008
5
4
2 2 2
3x 2,1979 ; x x 3 0,0015
5 5
3
4
i i adm
i
Deoarece s-a obţinut precizia de calcul solicitată,
procesul de iteraţie se opreşte.
Soluţia sistemului este :
x x5 0,9483
1 1
3x 2 5x 32
1 2 3
într-un interval an ,bn , dacă este îndeplinită una din condiţiile:
f x n , (1)
bn an . (2)
Relațiile (1), respectiv (2), sunt folosite la oprirea
algoritmilor de determinare a rădăcinilor ecuațiilor neliniare.
Cele mai cunoscute metode numerice pentru aflarea rădăcinilor
ecuațiilor neliniare sunt: metoda bisecţiei, metoda coardei, metoda
secantei, metoda aproximaţiilor successive (sau a contracţiei),
metoda lui Newton (sau a tangentei), etc.
V.2. METODA BISECŢIEI
x0
b0 a0
< 2
Urmând acelaşi procedeu se obţin intervalele a1 ,b1 , a2 ,b2 ,
a3 ,b3 ,…, an ,bn şi mijloacele acestora:
an bn
x, n0 (3)
n
2
La fiecare pas selectarea intervalului următor se face astfel:
Dacă 0
f a f x
atunci: n
an 1 an , bn 1 xn ,
altfel
an1 = xn , bn1 = bn . (4)
Se observă că:
b -a
bn an b0 a0 (5)
n n1
= =….=
1 2 n1
2
bn1 an1 = b0 a0 (6)
şi n1
xn 2
Relaţia (6) ne arată că şirurile an şi bn sunt
convergente către .
2. Atâta timp
cât f x repetă:
daca f(a).f(x)<0 atunci
o b x altfel
o ax
x (a+b)/2.
3. Dacă f x 0 atunci
se afişează x precizându-se că este soluţia
exactă a ecuaţiei neliniare, altfel
se afişează x precizându-se că este valoarea
aproximativă a rădăcinii
4. Stop
Observaţia V.1. Oprirea algoritmului de mai sus se bazează pe
o condiţie de tip (1). Ea poate fi înlocuită de o condiţie de tip (2), caz
în care algoritmul devine:
1. Se iniţializează valoarea aproximativă a rădăcinii
(valoarea corespunzătoare mijlocului intervalului dat)
x (a+b)/2
2. Atâta timp cât b a repetă
daca f(a).f(x)<0 atunci
o b x altfel
o ax
x (a+b)/2.
3. Se afişează valoarea lui x
4. Stop
Se observă că în acest caz nu se mai precizează dacă este vorba
de soluţia exactă sau aproximativă a ecuaţiei.
Observaţia V.2. Se poate introduce o condiţie de oprire şi cu
ajutorul numărului maxim admis de iteraţii, respectiv cu ajutorul
unor combinaţii între condiţiile amintite.
27 7
a4 b4
Calculăm 16 4 55 1.71875
x 4
2 2 32
55 7 55 7 55 7
f f 0 [a ,b ] ,
3
5 5
32 4 32 4
32 4 a b
Astfel x 5 5
1.734375 , este valoarea aproximativă
5
cerută. 2
Programul următor, realizat în limbajul de programare C, se
Fie ecuaţia:
f (x) 0 (*), în f : R este o funcţie
care R
dată, căreia ne propunem să-i găsim rădăcina dintr-un anumit interval
[a,b].
Dacă rescriem ecuaţia sub forma echivalentă:
x (x)
cu :[a,b] [a,b] contracţie, cu coeficientul de contracţie q < 1,
putem s-o rezolvăm cu ajutorul metodei aproximațiilor succesive.
Rădăcina din intervalul [a,b] reprezintă unicul punct fix al
aplicației . Acesta se obține ca limită a șirului aproximaţiilor
succesive, date de:
xn ( xn1 ), n 1 , unde x0 [a,b] arbitrar.
Relaţiile:
xn x qn x1 x0 , n 0
1q
xn x
q xn xn1 , n 1
1q
ne indică cât de bună este valoarea aproximativă calculată la pasul n.
Cel mai des întâlnit caz în care putem aplica metoda
aproximațiilor succesive este:
1. Dacă :[a,b] [a,b] este continuă pe [a,b], derivabilă pe
(a, b), şi '(x) q oricare ar fi x (a,b) , atunci este o
contracţie. 1
/* Program Contractia 1 */
#include<conio.h>
#include<stdio.h>
#include <math.h>
float x,eps, A;
float F(float u)
{return 5/ (u*u)+2;}
void main ()
{
printf("introduceti aproximatia initiala \n");
printf("x=:");
scanf("%f",&x);
printf("introduceti eroarea admisibila eps:");
scanf("%f",&eps);
A=x-F(x);
while (fabs(A)>=eps)
{
x=F(x);
printf("\n%f",x); /*afiseaza valorile intermediare*/
A=x-F(x);
}
if (A==0)
printf ("\n%f este solutia exacta a ecuatiei", x);
else
printf ("\n%f este solutia aproximativa a ecuatiei", x);
getch();
}
Linia evidențiată din cadrul lui permite ca, după rularea sa, să
obținem și valorile intermediare calculate la fiecare iterație.
Rezultatele rulării codului sursă de mai sus sunt prezentate în
continuare.
/* Program Contractia 2 */
#include<conio.h>
#include<stdio.h>
#include <math.h>
float x,eps,A;
int Nmax, Nit;
float F(float u)
{return 5/ (u*u)+2;}
void main ()
{
printf("introduceti aproximatia initiala \n");
printf("x=:");
scanf("%f",&x);
printf("introduceti eroarea admisibila eps:");
scanf("%f",&eps);
printf("introducenumarul maxim de iteratii admis Nmax:");
scanf("%d",&Nmax);
A=x-F(x);
Nit=0;
while ((fabs(A)>=eps) && (Nit<=Nmax))
{
x=F(x);
printf("\n%f",x); /*afiseaza valorile intermediare*/
A=x-F(x);
Nit=Nit+1;
}
if (Nit>Nmax)
printf ("\nnu s-a atins precizia dorita in %d iteratii", Nmax);
else
{
if (A==0)
printf ("\n%f este solutia exacta a ecuatiei", x);
else
printf ("\n%f este solutia aproximativa a ecuatiei, obtinuta
dupa %d iteratii", x, Nit);
}
getch();
}
f g f g
q; q
x x y y
În aceste condiții este o contracţie, dacă ne raportăm la
/* Program Newton*/
#include<conio.h>
#include<stdio.h>
#include<math.h>
float x0, x, eps, A;
float f(float u)
{return f(u);}
float Df(float u)
{return fderivat(u);}
void main ()
{
printf("introduceti aproximatia initiala a radacinii cautate
x0:");
s roarea:"); scanf("%f",&eps);
c x=x0-f(x0)/Df(x0);
a
n
f
(
"
%
f
"
,
&
x
0
)
;
p
r
i
n
t
f
(
"
i
n
t
r
o
d
u
c
e
t
i
e
A=f(x);
while (fabs(A)>=eps)
{
x0=x;
x=x0-f(x0)/Df(x0);
A=f(x);
}
if (A==0)
printf ("%f este solutia exacta a ecuatiei", x);
else
printf ("%f este solutia aproximativa a ecuatiei", x);
getch();
}
/* Program Newton*/
#include<conio.h>
#include<stdio.h>
#include<math.h>
float x0,x,eps,A;
float f(float u)
{return u*u-2;}
float Df(float u)
{return 2*u;}
void main ()
{
printf("introduceti aproximatia initiala a radacinii cautate
x0:");
scanf("%f",&x0);
printf("introduceti eroarea:");
scanf("%f",&eps);
x=x0-f(x0)/Df(x0);
A=f(x);
while (fabs(A)>=eps)
{
x0=x;
x=x0-f(x0)/Df(x0);
A=f(x);
}
if (A==0)
printf ("%f este solutia exacta a ecuatiei", x);
else
printf ("%f este solutia aproximativa a ecuatiei", x);
getch();
}
din şirul
aroximațiilor. Indicele n așezat sus desemnează elementul calculat
la pasul n.
Observaţia V.8.
şi
Deoarec
e 1
f x 0 x 1, , f este strict crescătoare
2
pe intervalul considerat. Cum 1
f 1 f 0 atunci ecuația dată
2
are o singură rădăcină în intervalul
1 considrat.
Deoarece
x 1, avem: f x 0 , putem aplica
2
metoda Newton alegând o aproximaţie iniţială
x0 care satisface
condiţia: f x0 f x0 0 , deci alegem
x0 1.
Obţinem succesiv:
xx 1
f x 0 1 0.75 .
0
f x0
1
4
Evaluăm f x 1 0.171875 .
Cum f x 1 0.171875 , trecem la pasul următor
x2 x1 f x 0.171875
0.75 0.686047 .
2.6875
1
f x 1
Evaluăm f 2
0.008949 .
x 2
Cum f 0.008949 , trecem la pasul următor
x
x x
f x
0.686047 0.682340 .
2
0.008949
f x2
3 2
2.411994
Ave f x3 f 0.682340 0.000029 şi
m
f x 3 0.000029 0.0001 .
Cndiția (1) fiind îndeplinită algoritmul se oprește. Astfel
valoarea aproximativă a rădăcinii este: 0.682340
V.8. Metoda șirului Sturm pentru separarea rădăcinilor
reale ale unei ecuaţii algebrice
P Q
k 2 k 1 k 1 k
Soluţie:
Se f : R R, f x x 2x 1
5
consideră
Calculăm limitele funcţiei la şi obţinem:
lim f x lim f x .
x
,
x
este:
Deducem că funcţia este strict crescătoare pe R.
Calculăm valorile funcției în două puncte:
f 0 1 , f 1 2
Realizăm următorul tablou:
x 0 1
f x 1 2
f x + + + + + + +
Se observă astfel că ecuaţia admite o singură rădăcină reală
aii n
aij
ri , ri j 1 j i
,1in.
VI.2. METODE NUMERICE PENTRU CALCULUL
VALORILOR ŞI VECTORILOR PROPRII
1. Metoda minorilor diagonali
Dacă A M n R este de forma A a i
, 1 i, j n , atunci
PA se poate scrie astfel:
j
A 1 2 n
n
a ii
i 1
2 aii aij
a a
( 2 =suma minorilor diagonali de ordin 2)
1i j
n
ji jj …
…
n = det A
0 -1 2
1
1 -1 0 0 ;
A=
3 -1 2 1
1 1 2
2
1 = 1 -1 + 2 + 2 = 4
1
= 0 1 1 1 2 0 1
+ +
+ 1
0 2 =1
+
2
1 1 3 2 2 1 2 1 2 1 2
2
1 0 1 1 0 1 1 1 0 0
2 2
3 = 1 1 0 + 1 1 0 + 3 2 1 + 1 2 1 = -2
3 1 2 2 1 2 2 1 2 1 1 2
4 = det A =
-6
PA 4 2 6
4 3 2
-1 1 0
0
3 1 0 0
A=
1 -1 3 4 ;
1 1 2
3
1 = 0 + 1 + 3 + 2 = 6
0 1 0 1 0 0 1 0 1 0 3 4
= + + + + + =9
2
3 1 1 3 3 2 1 1 2 1 2
0
3= 1 1 0 1 0 0 1 0 1 0 0
3
1 0 + 3 1 0 + 1 4 + 1 4 = 23
1 3
1 3 2
1 2 3 1 3
3 2 1 1
4 = det A = 22
PA 6 9 23 22
4 3 2
2. Metoda Leverrier
Fie P ... 1 .
n 1 n
n n 2
A 1 2 n
1 1
1
1 2
A= 0 ;
0 0
1
1
1
s2= Tr (A2) = 2 + 1 +1 = 4
5 2
2 4 s 3 = Tr (A3) = 5+1+3 = 9
A 0
3 3
1
2
0
2) Determinăm coeficienţii k .
s
0; s1 1 s2 0 0 4
= = -2
1 1 2
2 2
s1 2 s21 s3 0 (2) 4 0 9
3 3
3 3
P A 3 2 3 .
Exemplul VI.4. Să se determine polinomul caracteristic al
matricei următoare folosind metoda Leverrier.
1 1 1
A = 1
2 1 ;
1 0 1
1 7 7
A3 3 4 3 s3 = Tr (A3) = 1+4+5 = 10
3 4 5
2) Determinăm coeficienţii k .
s 4; s1 1 s2 4 4 6
= =5
1 1 2
2 2
s1 2 s2 1 s3 4 5 6 4 10
3 2
3 3
3 42 5 2 . A 1 2
P
2
PA
Rădăcinile sale sunt: 1 2 1 , 3 2 .
Astfel au fost găsite două valori proprii distincte ale matricei
considerate, una având ordinul de multiplicitate doi iar cealaltă unu.
3. Metoda Krylov
Fie A M R P c
n 1
... c c
n
şi
n A 1 n 1 n
Deci:
A
n
A
n 1
.... n1 A 0n .
c c cn In
1
Fie y(0) R n , oarecare, nenul. Prin înmulţirea relaţiei
precedente la dreapta y0 obţinem relaţia:
cu
An y(0) c An1 y(0) ........ c A y(0) y(0) 0 .
1 x
c n
Relaţia de mai sus reprezintă un sistem de n ecuaţii liniare cu
n necunoscute c1, c2 ,..., cn .
Dacă alegerea lui y
( 0)
R conduce la obținerea unui
n
sistemul se poate
( n 1)
scrie astfel:
( n 2)
c y c y ... c y
(1)
c y ( 0) y( n ) .
1 2 n 1 n
0
1
Alege
m y0 0 .
0
Găsim:
1 1 1
y 1 2
3
1 , 2 , 1 .
y y
1 2 9
3 c1 c2 7
3 c
1 2c2 c3 4
c1 4
Soluţia unică a acestui sistem este:
c1 4, c2 5, c3 2
Astfel polinomul caracteristic ce se obţine este:
PA ( ) 4 5 2 .
3 2
PA 1 2
2
2 1 1
A 1 2 1
1
1 2
Soluţie:
0 1 3 7
Fie
y0
0
y 1 2
3
1, 5 , 19 .
y y
1 2 6 20
3 1 0
Cum 5 1 0 3 5 2 0 ,sistemul ce trebuie rezolvat
6 2 1
este:
3 1 0 7
c1 5 c2 1 c3 0 19
6 2 1 20
Soluția acestuia este: c1 6, c2 11, c3 6
Ecuaţia caracteristică a matricei A este:
3 6 2 11 6
0 2 2, 3 3 .
Rădăcinile ei, adică valorile proprii, sunt: 1 1,
Fiind distincte două câte două vom determina vectorii proprii.
Pentru 1 1 avem:
P
q A 56
2
1
1
3 1 0 1
2
y02 5 y 1 3 y 0 2 0
5 5
1 6 0
6 2 1 2 1
este un vector propriu corespunzător valorii proprii 1 1.
Pentru 2 PA
2 q 2 4 3 .
2
2
3 3
3
vector propriu corespunzător ei este:
0 0
y02 3 y 1
2y 2 2
1 .
2 1
4. Metoda Fadeev
Considerăm P n c n1 ... c c
A 1 n 1 n
cn
Soluţie:
Urmăm paşii din algoritm şi avem:
1 2 0 2 0
A1 A 1 1 2 c 4
1
4 2
B1
3 5, 1 2
1 3 1
3
2 6 4
1 6 4
A2 A B1 0 2 c2 B2 3 2
9 3, 9 7 1
13 4 4
4
17 0 0
A3 A B2 0 17 0 c3 B3 O3 .
0 0 17,
17
Fie o funcţie
f : a,b R , cunoscută numai într-un
număr limitat de puncte (sau noduri):
x0 , x1 ,…, xn , ce poarta
numele de suportul interpolarii, prin valorile:
f x0 , f x1 ,..., f xn , notate în general: f 0 , f1 ,..., f n .
De obicei aceste date sunt prezentate într-un tabel de
interpolare:
x x0 x1 .. xn
f x f x0 f x1 .. f xn
177
se pune problema determinării unei curbe, imaginea
geometrică a unei funcții reale, care trece prin acestea.
178
Vom aproxima comportarea funcţiei printr-un polinom
generalizat de interpolare, de forma:
Pn (x)= a0 u0 (x)+ a1 u1 (x)+…+ anun (x)
Pn xi f x , i 0, (*)
i
n
Relaţiile (*) sunt cunoscute sub numele de condiţii de
interpolare.
Se poate considera o abordare mai generală a aproximării
unei funcţii, impunând condiţii de interpolare de forma:
P x f x , Px f x ,…, P (k) ( x )= f (k) ( x ).
n i i n i i n i i
a u x k k i f xi ,i 0, n .
i 0
1.1. INTERPOLARE POLINOMIALĂ. POLINOMUL DE
INTERPOLARE LAGRANGE
a xk f xi .
i
k
k 0
l x n
x ce apar în formulă se numesc polinoame
k xi
i 0 j k xk xi
Px f (xk ) lk x .
k 0
Notăm x x x0 x x1 x x2 x x3 .
Obţinem deci:
xx 1x 3
l 0 x 8 ,
x 1x 1x 3
l x ,
1
3
x 1xx 3
l 2x 4 ,
x 1xx 1
l3x .
24
Deducem deci următoarea formă pentru polinomul de
interpolare Lagrange:
xx 1x 3 x 1x 1x 3 x 1xx 3 x 1xx 1
L 3 x 7 2
8 3 4 24
Se obţine apoi valoarea polinomului în punctul
2: L32 4 .
Exemplul 2.Considerând variaţia densităţii unui material
în intervalul de temperatura
t 60 C...120
o o
din tabelul
C
următor să se determine densitatea acestuia la 70o C, folosindu-
se un polinom Lagrange de gradul 2.
o
t C 60 80 100 120
Kg / m3 435,60 413,40 402,65 398.50
Soluţie:
Folosind toate datele din tebelul de interpolare dat s-ar
obţine un polinom Lagrange de grad 3. Polinomul cerut trebuie
să aibă gradul doi, deci selectăm un suport de interpolare mai
restrâns: ca suport de interpolare punctele t1 60 , t2 80 ,
t3
şi valorile corespuzătoare ale funcţiei densitate.
100
Se obţin polinoamele fundamentale Lagrange:
(t t2 )(t t3 )
l t (t 80)(t t 180t 8000
2
1 100)
(t t )(t t (60 80)(60 100) 800
)
1 2 1 3
(t t1 )(t t3 )
l t (t 60)(t t 160t 6000
2
2 100)
(t t )(t t ) (80 60)(80 100)
400
2 1 1 3
(t t1 )(t t2 )
l t (t 60)(t t 140t 4800
2
80)
3
(t 3 t )(t t (100 60)(100 800
) 80)
1 3 2
……..
Diferenţele divizate de ordinal p se definesc cu ajutorul
diferenţelor divizate de ordin p-1 prin relaţia:
F x , x ,..., Fp 1[x0 ,..., xp 1 ] Fp 1[x1,..., xp ]
x ;
p 0 1 p
x0 xp
..............
Există o singură diferenţă divizată de ordinul n dată de:
Fn 1[x0 ,..., xn 1 ] Fn 1[x1,..., xn ]
Fn x0 , x1 ,..., xn
x0 xn
xi F0 F1 F2 ... Fn
Fn x0 ,.., x n
x0 F0 x0 f 0 F1 x0 , x1 F2 x0 , x1 , x2
x2 F0 x2 f 2 F1 x2 , x3 F 2 x 2 , x 3 , x 4 -
... ... ... ... -
xn 2 F0 xn 2 f n F1 xn2 , xn1 F2 xn2 , xn1 , xn -
2
xn 1 F0 xn 1
F1 xn1 , x1 - -
f n1
xn F0 xn f n - - -
valabile relaţiile:
di 0 fi , i 0, n ,
di 1, j 1 di, j 1
d j 1, n;i 0, n j .
,
x j i xi
ij
1
Soluţie:
Construim tabelule diferenţelor divizate şi apoi cu
ajutorul elementelor de pe prima linie a tabelului polinomul
Newton de interpolare.
x F0 F1 F2 F3
-1 4 -1 0 -1/4
1 2 -1 -1
2 1 -3
3 -2
x 0 1 2 3
f -1 4 13 26
Soluţie:
Construim tabelule diferenţelor divizate şi apoi
polinomul Newton de interpolare.
x F0 F1 F2 F3
0 -1 5 2 0
1 4 9 2
2 13 13
3 26
Astfel obținem:
N 3 x 1 5x 2xx 1.
En x P M , unde
x f xn 4n 1 n
M sup f n 1
x .
a ,b
Exemplul 5.
Să se determine cât de mare este eroarea pe care o
introducem când aproximăm funcția
f x sin pe intervalul
x
-diferenţe progresive:
f (xi ) = f (xi h) f (xi ) f (xi1 ) f (xi )
= h
h
k k1 f (x i1 ) k1 f (x i )
f (x ) =
i
h
-diferenţe regresive:
f (xi ) = f (xi ) f (xi h) f (xi ) f (xi1 )
= h
h
k k1 f (x i ) k1 f (xi1 )
f (x ) = (15)
i
h
-diferenţe centrate:
h f (x 1 ) f (x 1 )
h
f (x ) f (xi 2 ) i i
f (xi ) = i 2 2 2
h
= h
)
k1 f (x i ) k1 f i 1
1
(x
k f (x ) = 2 2
.
i
h
k f (x
)
k! 0 se obţine:
hk
P1 (x) = P1 (x u h )= p1 (u) =
f (x0 ) x x0 f (x (x x0 ) (x x1 ) 2
) f ) ...
1!h
(x
0 2!h2
0
(x x0 ) (x x1 )...(x xn1 ) n
n!h n f (x 0)
de forma:
si ( x) ai x bi , i 0...n 1 ,
xi 1 f ( xi ) xi f ( xi 1 )
bi .
xi 1 xi
coordonate
x , f x și x , f x și astfel se realizează o
i i i 1 i
aproximare a curbei reale printr-o linie poligonală.
Funcția spline se poate prelungi și în afara intervalului
a, bastfel:
s x, x a
sx
x, x b
1
sn
1
Funcții spline
pătratice
Dacă în cazul funcțiilor spline liniare pe fiecare
subinterval format am construit practic segmente, în cazul
funcțiilor spline ptratice se vor construi arce de parabole prin
intermediul funcțiilor de gradul doi.. Astfel pe fiecare
subinterval x i, x i se alege
1
s ( x) a b ( x x ) c ( x x ) , cu a , b , c coeficienți ce
2
i i i i i i i i i
urmează a fi determinați.
Astfel funcțiile spline trebuie să îndeplinească relațiile:
s x f
i i
si i 1 f
i 1
sx di
i i
,
six i i 1
1
d
cu di construite recursiv cu ajutorul relației de ordinul
unu:
f x f x
di 1 d 2 i 1 i
, i 1, n 1, iar d1 arbitrar.
i
xi x
1 i
Se obțin relațiile:
s ( x) f x d ( x x ) di 1 (xx )
2
di
i
i i i i
i
i x
1
2x
1
4
1
2
26
s ( x) 4 6( x 1) ( x 1) 2x 10x 4
2 2
2
2
s3 ( x) 8 2( x 2) 2x 4 .
Astfel funcția spline corespunzătoare tabelului dat are
următoarea expresie:
1 3x 2 , x 0,1
S ( x)
2x 10x 4, x 1,2
2
2x 4, x 2,3
Se observă ca ea este nu numai continuă, ci și derivabilă,
iar derivata sa este continuă pe 0,3.
Funcții spline cubice
Prin alegerea unor funcţii de interpolare de gradul 3 se
poate realiza o interpolare care presupune şi fixarea valorii
derivatelor pe suportul interpolării:
f (x ), f (x ),..., f , (x )
0 1 n
Cei
4n coeficienţi ai , bi , ci , ai funcţiilor spline se
di
determină impunând 2n
condiţii de interpolare:
2
Si (xi )
f (xi ) , Si(xi ) f (xi ) cu i 0...n
şi 2n
condiţii de racordare, asigurând continuitatea şi
2
derivabilitatea funcţiilor de interpolare vecine în punctele
interioare:
.
2. APROXIMAREA ÎN SENSUL CELOR MAI MICI
PĂTRATE
Astfel se formează
E a, b b y căreia
suma: N
ax i
2
i 1
i
N N N
a xi2 x i xi yi 0
i i 1 i 1
1 b .
a N N
xi bN yi 0
i 1 i 1
i
i 1 i 1
bx a y ,
a
i i i
E 2 Ni 1cx 2 bx a y x ,
i i i i
i 1
b
EN cx 2
a y x .
2
2 bx
i 1
i i i i
c
Simplificând scrierea sumelor obținem sistemul
următor:
na b
c x y
2
xi
i i
a x i 2 b xi 3 c xi 4 ix i2y
2 3
a x b x c x x y
i i i i i
Exemple:
1. Să se determine curba care aproximează cel mai bine în sensul
celor mai mici pătrate datele din tabelul următor:
x 0 1 2 3 4
f 3,7 4,3 5,5 5,8 6,2
6.0000
5.0000
4.0000
3.0000
2.0000
1.0000
0.0000
0.0000 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000
Astfel vom determina o aproximantă de tipul unei funcții de
gradul
f x ax b , cu a și b dați de relațiile:
întâi:
N
N y N N x y N N
x
ya x
i i
i
i i i
i 1 N i 1 2 N i 1
a , b i 1
N
i 1
,
xi N x
2
i
i 1 i 1
unde
N=5.
Pentru ușurință calculele sunt trecute într-un tabel:
i x yi xi yi
i
x i2
1 0.0000 3.7000 0.0000 0.0000
2 1.0000 4.3000 4.3000 1.0000
3 2.0000 5.5000 11.0000 4.0000
4 3.0000 5.8000 17.4000 9.0000
5 4.0000 6.2000 24.8000 16.0000
10.0000 25.5000 57.5000 30.0000
Astfel funcția care aproximează cel mai bine datele din tabel
are expresia:
f x 0.75x 3.7 .
VIII. EVALUAREA NUMERICĂ A INTEGRALELOR
L x x x
b
ba
f(a)+ f = f (a) f (b)
1 ba a b f(b) (x)dx 2
b a
a
f(b)
f(a)
a b
x
Polinomul Lagrange de gradul 1, ne oferă o funcție care,
restricționată la [a,b], are ca imagine geometrică un segment de
dreaptă care aproximează curba pe acest interval. Aria subgraficului
acesteia este tocmai aria trapezului cu bazele f(a), f(b) şi înălţimea
b a . De aici rezultă şi denumirea metodei drept metoda trapezului.
12
Se observă că eroarea este mare dacă [a,b] este de lungime
mare. Pentru a micşora această eroare se consideră o diviziune a
intervalului [a,b] prin puncte echidistante. Se determină pasul h dat
de:
b și apoi nodurile echidistante: x =x +ih, i= 0, n , unde
ah n
i 0
x0 = a, xn=b.
x0 x1 x2 ... xn-1 xn
Impunând condiția:
(b b a 3 M
3
a) M ad n
2
12
2
12n m
b adm
a
3
putem determina n
* M
12 1.
adm
Putem evalua integrala pe baza formulei (*) considerând
n n și vom obține o eroare mai mică decât eroarea admisibilă dată.
*
/* Metoda Trapezelor */
#include<conio.h>
#include<stdio.h>
float a,b,x[1000],h, s;
float f(float);
int i,n;
void main()
{
printf("introduceti limita din stanga a:");
scanf("%f",&a);
printf("\nintroduceti limita din dreapta b:");
scanf("%f",&b);
printf("introduceti numarul de subintervale n:");
scanf("%d",&n);
h=(b-a)/n;
for(i=1;i<=n-1;i++)
x[i]=a+i*h;
s=f(a)+f(b);
for(i=1;i<=n-1;i++)
s=s+2*f(x[i]);
s=s*h/2;
printf(" valoarea aproximativa a integralei este I=%f",s);
}
float f(float x)
{return x*x+3*x;}
Valoarea exactă
110a integralei este:
4 36, 6
x
2
3x 3
dx
2
2880
Fiind o eroare mare, în cazul unui interval de lungime
supraunitară, se recurge și în acest caz la discretizarea intervalului
a 6
0
n
i 1 2
b
i
i 1
prin
Observaţia VIII.3. Aproximarea integralei f(
x)dx
a
4
formula lui Simpson generalizată, în cazul unei funcții de clasă C , se
face cu eroarea E f , cu
M
4
b 2880n
'
E( f ) M ,
a
5
unde .
max f xa ,b 4
( x) .
Utilizând limbajul de programare C s-a realizat următorul program de
calcul.
/* Metoda Simpson */
#include<conio.h>
#include<stdio.h>
float f(float);
float a,b,x[1000],y[1000], p, h, s;
int i,n;
void main ()
{
printf("introduceti limita din stanga a:");
scanf("%f",&a);
printf("\nintroduceti limita din dreapta b:");
scanf("%f",&b);
printf("introduceti numarul de subintervale n:");
scanf("%d",&n);
h=(b-a)/n;
for(i=0;i<=n;i++)
x[i]=a+i*h;
s=f(a)+f(b);
for(i=1;i<=n-1;i++)
s=s+2*f(x[i]);
p=0;
for(i=1;i<=n;i++)
y[i]=(x[i-1]+x[i])/2;
for(i=1;i<=n;i++)
p=p+4*f(y[i]);
s=(s+p)*h/6;
printf(" valoarea aproximativa a integralei este I=%f",s);
}
float f(float x)
{return x*x+3*x;}
a x1 ba
x2 b x a i ,i 1,2.
i
, 3
Folosind pentru aproximarea funcţiei un polinom de interpolare
construit pe baza suportului de interpolare corespunzător diviziunii
precedente se obţine, în mod analog, o nouă formulă de evaluare
numerică a unei integrale definite, ce poartă numele de formula lui
Newton: b
f ( x)dx b
a
f (a) 3 f ( x ) 3 f ( x ) f (b) E( f )
a 8 1 2
E f 1
(b a) f ( ), (a,b) .
5 ( 4)
6480
În cazul formulei generalizate se realizează o diviziune a
intervalului a, în n părţi egale prin nodurile echidistante
b
E( f ) (b a)5
6480n 4 M '' , unde M sup ( )
(4)
f
a,b
Observaţia VIII.4. M din formula lui Simpson generalizată şi
M din fomula lui Newton generalizată coincid.
Deoarece eroarea obţinută este mai mică atunci când se
utilizează formula lui Newton
b (b a)5
'
5 M ,
a
''
M 2880n4
6480n
4
pentru un acelaşi n, este preferabil să se folosească în aplicaţii formula
lui Newton. Programul în C corespunzător pentru cazul funcţiei
IX.1. INTRODUCERE
mulţime
U1 U de U x, y / x x , x h, y b
forma: y
1 0 0 0
funcţiei
yx în punctele xi , i=0,1,2,..., adică
y x y i 0,1,2,.... .
i
x
0
(t))dt
converge uniform pentru x x0, x0 h către soluţia problemei
(1).
Astfel yx lim y x este soluţia problemei (1).
n
n
P1: Funcţia 1
f x, y 3x yC
1
pentru orice D R 2 . Fie
D
2
U x, y \ x 1, y 1 1(a=1, b=1). Determinăm
M sup 1
x , y U f x, y sup 3x y 4,
f
x , y 2
U
y
şi L
sup x, y sup 1/ 2 1/ 2.
x,y x , y U
U
1 1
Alegem h min 1,2, .
4 4
P2: Aproximaţiile sunt:
1 3x
2
x
1
x
Y1 x 0 (3t
2
)dt 1
2
2
.
x 1 3t 2 x 13
2
x3
t .
Y2 x 1 (3t 1 )dt 1 x
0 2 2
2 2 8 4
1 t
3 3 4
13 2 x
2 13x 13x x
x t
Y )dx 1
x3 1 0 (3t 1 4 2 48 32
t 2 2 8 8
.
P3: Pentru x 0,0 1/ 4 0, 0.25 deducem că:
yx y3 x
1 4
1 1 12
3 (0.25)
5 4 4
4 8.138 10 0.8 10 10
2 4! 3 2
De exemplu pentru
3
10 4 yx y3 x 1 x2 13x 13x 32
x4 este soluţia
48
2 8
problemei date. Ea aproximează soluţia exactă cu o eroare de
10-4.
1 0
0 3 x3
y x x
t 2
3
2t dt x4 3 2x x4
2
3 3 4 3 6
0
3
t t dt
4
y x t 2
x
32
3 3 6
0
x 3 x 4 x5
3 6 15
Observăm că avem:
3
1 4 1 8 1 1
y y 62 0,00154
*
3 3 3
6 6 38 3 6
4!
1!
Coeficienţii se calculează consecutiv şi sunt valori
cunoscute:
y0 y x0 , yx0 f x0 , y x0 f 0 .
Ei se obţin prin derivări succesive. De exemplu,
y x f& yf f f f =>
x y x y
y x f xx 0 , y 0 fy x0 , y0 f x0 , y0
0
f x , y f x , y f .
x 0 0 y 0 0 0
apoi
yx0 , etc. Astfel se pot obţine valorile derivatelor de
orice ordin în
punctul x0 .
metoda Taylor, cu
n 3 . Pasul pe axa Ox se h 0.1 . Să
alege
se compare rezultatele cu cele date de soluția exactă:
yˆ x e
x
2x 2 .
Soluţie:
Din datele problemei avem: y0 1 y0 1 .
Derivând în raport cu x ecuaţia diferenţială din problemă
deducem că:
y 2 y 2 2x y
. x şi folosind
Considerând în relaţia precedentă 0
valorile anterior calculate obţinem:
y 0 2 1 1 .
Procedând analog şi în continuare obţinem;
y y 2 y 2 2x y , y0 1
Astfel soluţia aproximativă a problemei date obţinută cu
metoda Taylor este:
6
Procedând analog în celelalte puncte găsim datele din tabelul
următor. Sunt prezentate și erorile care apar între valorile
calulate și cele exacte.
x y Soluti exacta Eroarea absoluta
0.000000 -1.000000 -1.000000 0.000000
0.100000 -0.895163 -0.895167 0.000004
0.200000 -0.781269 -0.781277 0.000008
0.300000 -0.659182 -0.659192 0.000010
0.400000 -0.529680 -0.529692 0.000012
0.500000 -0.393469 -0.393483 0.000014
0.600000 -0.251188 -0.251203 0.000015
0.700000 -0.103415 -0.103430 0.000015
0.800000 0.049329 0.049313 0.000016
0.900000 0.206570 0.206553 0.000017
1.000000 0.367879 0.367863 0.000016
Eraoarea absolută maximă este deci 0.000017.
Fig. IX.1.
Astfel soluţia problemei (1) este aproximată prin funcţia
tabel:
xx0 x1xn
y(x)y0 y1yn
xi x0 ih, fi f (x , y )
i i
x h y h
1 , 1 fi , f 1 f (x
xi yi
1 ,y
1 ).
i2 2 2 i 2 i
2
i
2
i
2
yi1 yi 1
hf i
2
Exemplul IX.4. Fie problema Cauchy:
y 2x y
x [0,1] .
y(0) 1
Să se determine o soluţie aproximativă a ei folosind
metoda Euler cu pasul h 0.1 .
Să se compare valorile găsite cu cele ale soluției exacte
yˆ x e 2x 2 .
x
Soluţie:
Avem următoarele relaţii:
x0 0; x1 0,1; x2 0,2; x3 0,3; x4 0,4.., x10 1.
y 1 y y hf x , y 1 0,1(2 (1) 0.9 .
0 1 0 0 0
y y hf x , y 0.79 , etc.
2 1 1 1
Dar
f f f f
f x , yx x , yx x , yx yx x , yx x , yx f x , yx
i i i i i i i i i i i i i
x y x y
Astfel obținem:
h2 f
f
3
y xi1
y xi hf xi xxi , y xi , y f xi , y xi O h
2 xiy
x
i
(*)
Dezvoltând
funcția f h, y k în jurul lui x , y avem
x
i i 1 i i
relția:
f
f h, y k f x , y h k O h
2
x f
i i 1
y
i i 1
x
Da yi1 yi c1k1 și astfel obținem:
r c2k2
yx f yx hc c 2 f
f c h f O h , funcțiile
3
i1
2
i 1 2
y
x
din membrul drept fiind evaluate în x , yx .
i
c1 0, 1
1 , , conduce la obținerea formulei
c2 2
corespunzătoare metode Euler modificată:
y y h h
hf x , y f x , y , i 0,...N 1 .
i
i1 i i i
i
2 2
3. Dacă c1 1/
4 c2 3/ 2 / 3 , se obţine formula:
4
y h 2 2
f x , y 3 f x h, y hf x , y ,
i
i1
i
i i i i i
43 3
Pentru cazul formulei Runge-Kutta de ordinul 2 de mai
sus s-a realizat un program în C, pentru rezolvarea problemei
considerate în exemplul IX.4.
n
s-au obţinut datele din tabelul următor. Tot în acest tabel
5
se face o comparație între valorile numerice și cele exacte
evaluându-se erorile absolute ce apar.
yx h y x 1/ 4k2 k ,
6k
1
3
unde k 1 hf x, y , k 2 hf x h / 2, y k1 / 2,
k 3 hf x h, y k 1 2k 2
yx h y x 1/ 4k1 3k 3
unde k 1 hf x, y , k 2 hf x h / 3, y k1 / 3,
k 3 hf x 2h / 3, 1 / 3
y 2k2
În cazul folosirii acestor formule se obţine o eroare de
ordinul lui h4 .
n
s-au obţinut datele de mai sus. În tabelul următor sunt
5
comparate acetea cu soluția exactă și cu cea numerică obținută
cu metoda RK2.
x y(x) yˆ x eroarea y(x) RK2 eroarea
RK3 absolută absolută
1 0.5 0.5 0.000000 0.5 0.000000
1.2 0.508824 0.508918 0.000094 0.508939 0.000021
1.4 0.532569 0.532795 0.000226 0.532828 0.000033
1.6 0.569021 0.569412 0.000391 0.569453 0.000041
1.8 0.617607 0.618206 0.000599 0.618253 0.000047
2 0.678705 0.67957 0.000865 0.679623 0.000053