Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Numere aproximative
a − A ≤ ∆a (1.1)
A = a ± ∆a (1.2)
∆a
δa = (a ≠ 0) (1.3)
a
∆a
Uneori, eroarea relativa se defineste ca raportul A , cu A valoarea exacta insa
necunoscuta. Introducand ∆ a din (1.3) in (1.2), rezulta limite pentru numarul exact
A:
A = a(1 ± δ a ) (1.4)
Exemplu:
absoluta ∆ a =0.01.
Corespunzator avem eroarea relativa δa = 0.01/3.14 = 0.003 si deci putem
scrie π = 3.14(1 ± 0.003).
1
METODE NUMERICE
Erorile de rotunjire sunt cauzate de reprezentarea numerelor (date ini iale sau
rezultate ale unor calcule) cu un num r finit de cifre semnificative exacte.
De exemplu:
reprezentarea rezultatului opera iei 1/3 sub forma 0.333 implic o eroare de
trunchiere de aproximativ 3x10-4. Erorile de rotunjire depind de particularit ile
hardware ale calculatorului, de modul de reprezentare intern al diferitelor tipuri de
date utilizate în calcule. Erorile de rotunjire se acumuleaz prin cre terea num rului de
calcule, mai ales al celor care implic sc derea unor valori aproximativ egale.
Erorile de trunchiere (reziduale) provin din natura infinit a unor procese utilizate
în descrierea solutiei problemelor matematice. Faptul c , practic, aceste procese
trebuie întrerupte dup un num r finit de paji, introduce o eroare de trunchiere.
Considerand exemplul dezvolt rii func iilor în serie, însumarea trebuie întrerupt la un
anumit termen, trunchiind seria i introducand o anumit eroare de trunchiere.
Metodele numerice permit, în principiu, controlul erorilor de rotunjire i al celor
de trunchiere, cu condi ia transcrierii adecvate a algoritmului. Astfel, în cazul erorilor
de rotunjire, trebuie considerat acea form a expresiilor matematice, în care sunt
evitate operatiile care introduc acest tip de erori. In ceea ce prive te erorile de
trunchiere, acestea se afl sub controlul deplin al programatorului, care îns trebuie s
fie preocupat de construirea unor algoritmi fini i i eficien i. Dac finitudinea
algoritmului este obligatorie pentru convergenta rezultatelor, eficienta este o reflectare
direct a experien ei i stilului de programare.
2
METODE NUMERICE
De exemplu:
Situa iile concrete implic utilizarea unor numere aproximative cu un num r finit
de cifre. Toate cele n cifre zecimale re inute αi , i = m, m-1, . . ., m-n+1 , se numesc
cifre semnificative. Unele dintre cifrele semnificative pot fi egale cu zero, cu excep ia
primei cifre, α m .
De exemplu, în num rul 0.00208 = 0*10-3 + 0*10-4 + 8*10-5, primele trei
zerouri nu sunt cifre semnificative, deoarece ele servesc numai pentru fixarea pozi iei
punctului zecimal în scrierea zecimal a num rului.
1
∆a ≤ • 10 m − n +1 (1.6)
2
De exemplu, num rul a = 36.00 este în raport cu num rul exact A = 35.97 o
aproxima ie cu trei cifre semnificative exacte. Intr-adev r, avînd în vedere ca |a - A|=
0.03 < 1/2*10-1, rezult m-n+1 = -1, de unde n=3 (m=1).
Teorem . Dac un num r pozitiv a are n cifre exacte, eroarea relativ δa a acestui
num r satisface inegalitatea
1 (1.7)
δa ≤ • 10 − (n −1)
2 αm
3
METODE NUMERICE
Intr-adev r,
∆a (1 / 2) • 10m − n + 1 1
δa = ≤ ≤ • 10 − (n −1)
a m m − 1 2αm
αm • 10 + αm − 1 • 10 +Κ
Num rul de cifre semnificative exacte corespunz tor unei erori relative δa date
este conform relatiei (1.7).
De exemplu, num rul aproximativ a = 3.15, utilizat în locul num rului exact
A= π , are n <= 2.72 , adic dou cifre exacte.
Num rul aproximativ a = 3.14 va avea n <= 3.29, adic trei cifre exacte.
Acest criteriu poate fi utilizat în situa iile în care, cunoscîndu-se eroarea relativ
a unui num r, se impune estimarea rapid îns nu neap rat foarte precis a num rului
de cifre exacte ale acestuia.
4
METODE NUMERICE
∆*a = ∆ a1 + ∆ a2 + Κ + ∆ an (1.11)
Din aceast relatie rezult c eroarea absolut limit nu poate fi mai mic decat
eroarea absolut a celui mai pu in exact termen din sum
∆* a ≥ max(∆ a1 , ∆ a2 ,Κ , ∆ an ) (1.12)
In consecint , ceilal i termeni, cu grad de precizie mai mare (cu erori absolute
mai mici) nu pot ameliora precizia rezultatului.
Teorem . Dac toti termenii unei sume au acela i semn, eroarea relativ (limit ) a
sumei nu dep te cea mai mare eroare relativ a termenilor.
Conform rela iei (1.11), eroarea absolut limit a diferen ei este egal cu suma erorilor
absolute ale celor doi termeni
∆*a = ∆ a1 + ∆a2
∆*a ∆ a1 + ∆ a2
δ*a = =
A A1 − A2
unde A este valoarea exact a modulului diferen ei.
5
METODE NUMERICE
6
METODE NUMERICE
Este cea mai simpl metod de determinare a r cinii unei ecua ii f ( x ) = 0 care se
afl în intervalul [a , b ] . Pentru aplicarea acestei metode se verific dac :
Ø f : [a , b ] → R este o func ie continu i derivabil ;
Ø f (a )⋅ f (b )< 0
Metoda înjum irii intervalului sau a bisec iei se bazeaz pe urm torul algoritm:
1. se calculeaz valoarea func iei f(x) la capetele intervalului i într-un punct situat la mijlocul
a+b
intervalului: x = c =
2
1
METODE NUMERICE
2. Se verific semnele func iei în cele trei puncte ale intervalului (a, c, b) i subintervalul în
care func ia prezint schimbarea de semn; acest subinterval este noul interval în care afl
cina. Sunt posibile urm toarele variante prezentate în tabelul urm tor :
Tabelul 1
F(a) f(b) f(c) cina ξ
- + + ξ ∈ (a ,c )
- + - ξ ∈ (c ,b )
+ - + ξ ∈ (c ,b )
+ - - ξ ∈ (a ,c )
Pentru noul interval se procedeaz analog calculând valorile func iei la capele lui i la
mijloc, din semnele func iei în cele trei puncte rezultând subintervalul pentru care are loc
schimbarea de semn;
y a1 + b1
c2 =
2 y=f(x)
x=a
O x=b x
a +b
c1 =
2
Fig. 1
Procesul este iterativ i se încheie atunci când se ob ine o eroare mai mic decât
precizia impus r cinii : a − b < ε
Exemplu
se afle r cina ecua iei algebrice:
ln x + 3 x − 4 x − 1 = 0 ,
2
2
METODE NUMERICE
Implementare in C++:
/*
*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
float a,b,c,eps;
int i,n;
float functie(float x)
{
return ( log(x) + 3*x*x - 4*x - 1);
}
void bisectie(float a, float b)
{
if( ( functie(a) < 0 ) && ( functie(b) > 0) )
{
n=ceil(log((b-a)/eps)/log(2))+1;
// cout<<"Tabelul cu aproximarile succesive"<<endl;
// cout<<"| a | c | b | f(a) | f(c) | f(b) |"<<endl;
for(i=1;i<=n;i++)
{
c=(a+b)/2;
if( functie(c) < 0) a=c;
else b=c;
// cout<<"-------------------------------------------------------"<<endl;
//cout<<"|"<<a<<"|"<<c<<"|"<<b<<"|"<<functie(a)<<"|"<<functie(c)<<"|"<<functie(b)<<"|"<<e
ndl;
// getch();
}
cout<<"solutia : "<<c<<endl;
}
else
cout<<"Nu se incadreaza in ipoteza f(a)<0 si f(b)>0";
return;
}
void main(void)
{
clrscr();
cout<<" a = ";cin>>a;
cout<<" b = ";cin>>b;
cout<<"Dati precizia de calcul eps = ";cin>>eps;
bisectie(a,b);
getch();
}
3
METODE NUMERICE
Fie o func ie continu i derivabil f(x) având pe intervalul [a, b] o singur r cin
ξ ∈ (a , b ) . Deoarece f ( a ) ⋅ f ( b ) < 0 , se poate aproxima r cina cu abscisa punctului de
intersec ie a coardei (secantei) care trece prin punctele A(a, f(a)) i B(b, f(b)) cu axa Ox (fig.
1.2.1). Ecua ia acestei coarde este:
y − f(a) x−a y
=
f(b)− f(a) b − a
⇔
y=f(x B
f (b ) − f (a )
y − f ( a ) = (x − a) )
b−a
x=a ξ x=b
O x2 x1 x
Fig.1.2.1
4
METODE NUMERICE
Tabelul 3
Pas xn-1 xn xn+1 f(xn-1) f(xn) f(xn+1)
1. 1.000000 2.000000 1.351300 -2.000000 3.693147 -0.626100
2. 1.351300 2.000000 1.445332 -0.626100 3.693147 -0.146033
3. 1.445332 2.000000 1.466431 -0.146033 3.693147 -0.031635
4. 1.466431 2.000000 1.470962 -0.031635 3.693147 -0.006742
5. 1.470962 2.000000 1.471926 -0.006742 3.693147 -0.001432
6. 1.471926 2.000000 1.472131 -0.001432 3.693147 -0.000304
7 1.472131 2.000000 1.472174 -0.000304 3.693147 -0.000064
8 1.472174 2.000000 1.472184 -0.000064 3.693147 -0.000014
Implementare in C++:
/*
float a,b,cn,cn_1,eps,m1,m2;
int i;
float functie(float x)
{
return ( log(x) + 3*x*x - 4*x + 1 );
}
void coarda(float a, float b, float eps)
{
m1=4;m2=9.5;
i=1;
cn_1=a;
cn=(a*functie(b) - b*functie(a))/(functie(b)-functie(a));
while(fabs(cn-cn_1)*m2/m1 > eps)
{
cn_1=cn;
5
METODE NUMERICE
void main(void)
{
clrscr();
cout<<" a = ";cin>>a;
cout<<" b = ";cin>>b;
cout<<"Dati precizia de calcul eps = ";cin>>eps;
coarda(a,b,eps);
getch();
}
6
METODE NUMERICE
Fie o func ie continu i derivabil f(x) pe intervalul [a, b], care satisface
condi ia f ( a ) ⋅ f ( b ) < 0 i are o singur r cin pe intervalul [a, b].
Dac se dezvolt în serie Taylor func ia f(x) în jurul punctului x=a se ob ine:
f ( x ) = f (a ) +
x−a
f ′(a ) +
(x − a )2 f ′′(a ) + ... (3.1)
1! 2!
Re inând doar primii doi termeni ai dezvolt rii (3.1) se ob ine o rela ie aproximativ de
calcul a lui f(x) în func ie de f(a) i f’(a):
x−a x−b
f ( x ) ≅ f (a ) + f ′(a ) sau f ( x ) ≅ f (b ) + f ′(b ). (3.2)
1! 1!
Aceast func ie reprezint tangenta la graficul func iei f(x) în punctul A[a, f(a)]
respectiv în punctul B[b, f(b)], conform figurii 3.1. Punând condi ia f ( x ) = 0 se ob ine
intersec ia cu axa Ox i rezult o solu ie aproximativ de forma:
f (a ) f (a )
x−a = − ⇒ x1 = a −
f ′(a ) f ′(a )
(3.3)
f (b ) f (b )
sau : x − b = − ⇒ x2 = b −
f ′(b ) f ′(b )
B
y
y=f(x)
a
b x1
O x4 x3 x2 x
A
Fig.1.3.1
1
METODE NUMERICE
Exemplu
se afle r cina ecua iei algebrice: ln x + 3 x 2 − 4 x − 1 = 0 , cu o eroare mai mic de
0,00001 tiind c se afl în intervalul [1, 2] .
Dac not m f ( x ) = ln x + 3 x 2 − 4 x − 1 , atunci derivata func iei f ( x ) este:
1
f ′( x ) = + 6x − 4 (3.5)
x
Pentru determinarea solu iei aproximative prin metoda Newton Raphson se aplic
rela ia de recuren (3.4) i se ob in succesiv valorile din tabelul 3.1
Tabelul 3.1
Pas xn f(xn) f '(xn) xn+1 f(xn+1)
1. 2 3.693147 8.5 1.565512 0.538649
2. 1.565512 0.538649 6.031841 1.476211 0.022232
3. 1.476211 0.022232 5.534677 1.472194 4.47E-05
4. 1.472194 4.47E-05 5.512424 1.472186 1.82E-10
Aplicatie:
Implementare in C++
#include<stdio.h>
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
float x,dx;
float functie(float x)
{
return(x - sin(x) - 0.25);
}
float deriv(float x)
{
return(1 - cos(x));
}
2
METODE NUMERICE
Fie o func ie continu i derivabil f(x) pe intervalul [a, b]. Deoarece f ( a ) ⋅ f ( b ) < 0 ,
presupunem c ecua ia f(x)=0 are o singur r cin ξ ∈ (a ,b ) . O r cin aproximativ a
ecua iei f(x)=0 se poate ob ine dac aceasta se poate scrie o rela ie de recuren echivalent
x=g(x). Aceast metod nu conduce întotdeauna la rela ii iterative convergente.
xn+1=g(xn) (3.2.1)
Exemplul 1
se g seasc r cina ecua iei: 3 x 4 + 4 x − 1 = 0 , cu o precizie de 0,001 dac se afl
în intervalul (0, 1).
3x 4 + 4 x − 1 = 0 ⇔ x( 3 x 3 + 4 ) = 1 (3.2.2)
3
METODE NUMERICE
Exemplul 2
se g seasc r cina ecua iei: x 4 − x − 1 = 0 (1.6.5)
cu o precizie de 0,001 dac se afl în intervalul (1, 2).
Dac g ( x ) = 4 1 + x atunci ecua ia de mai sus se scrie: x = 4 1 + x
Se ob ine deci rela ia de recuren : xn +1 = 4 1 + x n (1.6.6)
Plecând de la x1=1 avem succesiv valorile din tabelul 1.6.2:
Aplicatie:
4
METODE NUMERICE
Implementare in C++
#include<stdio.h>
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
float x,dx;
int zero;
float functie(float x)
{
return(x - sin(x) - 0.25);
}
5
METODE NUMERICE
∆ x1 ∆x2 ∆ xn
x1 = x2 = ΚΚΚ xn =
∆ ∆ ∆
1
METODE NUMERICE
In continuare, daca a'22 este diferit de zero, putem, fara a afecta valoarea
a'
determinatului, sa inmultim linia a doua cu − 32 si sa adunam la a treia; vom obtine :
a'22
In, general, pentru calculul unui determinant de ordin n putem folosi metoda de
mai sus. Astfel, avem :
2
METODE NUMERICE
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
float a[10][10],b[10],x[10],save[10],dp;
int i,j,n;
3
METODE NUMERICE
}
void main(void)
{
clrscr();
cout<<"Dati numarul de ecuatii ";cin>>n;
cout<<"Dati matricea A "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Dati termenul liber"<<endl;
for(i=1;i<=n;i++)
{
cout<<"b["<<i<<"]= ";
cin>>b[i];
}
dp=determinant(a,n);
if(dp==0)
{
cout<<"Nu se poate rezolva cu regula lui Cramer"<<endl;
exit(0);
}
for(j=1;j<=n;j++)
{
for(i=1;i<=n;i++)
{
save[i]=a[i][j];
a[i][j]=b[i];
}
x[j]=determinant(a,n) / dp;
cout<<x[j]<<endl;
for(i=1;i<=n;i++)
a[i][j]=save[i];
}
}
Daca, iteram, procesul, eliminand necunoscutele xi, din ecuatiile i+1, …, n (unde
i = 2, …, n-1 ), vom obtine in final un sistem de forma :
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
float a[10][10],b[10],x[10],dp;
int i,j,n,iv,t,k,l;
float temp;
void main(void)
{
clrscr();
cout<<"Dati numarul de ecuatii ";cin>>n;
cout<<"Dati matricea A "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Dati termenul liber"<<endl;
for(i=1;i<=n;i++)
{
cout<<"b["<<i<<"]= ";
cin>>b[i];
}
5
METODE NUMERICE
for(j=1;j<=n-1;j++)
{
iv=j;
t=1;
while( (iv<=n) && (t==1) )
if(a[iv][j] == 0) iv=iv+1;
else t=0;
if(t==1)
{
cout<<"Determinantul pricipal este nul ";
exit(0);
}
if(j!=iv)
{
for(k=j;k<=n;k++)
{
temp=a[j][k];
a[j][k]=a[iv][k];
a[iv][k]=temp;
}
// schimbam si elementul corespunzator liniei k al termenului liber
temp=b[j];
b[j]=b[iv];
b[iv]=temp;
}
for(l=j+1;l<=n;l++)
{
for(k=j+1;k<=n;k++)
a[l][k]=a[l][k] - a[j][k] * a[l][j] / a[j][j];
// calcul pt. termenul liber
b[l]=b[l] - b[j] * a[l][j] / a[j][j];
}
}
if(a[n][n]==0)
{
cout<<"Deterninantul principal este nul";
exit(0);
}
// calculul lui xn
x[n]=b[n] / a[n][n];
for(i=n-1;i>=1;i--)
{
temp = b[i];
for(j=i+1;j<=n;j++) temp = temp - a[i][j] * x[j];
x[i] = temp / a[i][i];
}
for(i=1;i<=n;i++)
cout<<"x["<<i<<"]= "<<x[i]<<endl;
getch();
}
6
METODE NUMERICE
Definitie :
Numim norma unui vector x, pe care o notam cu ||x||, un numar real definit
astfel :
n
x = max x i
i =1
Numim norma unei matrice A cu n lini si m coloane, pe care o notam ||A||,
un numar real definit astfel :
n m
A = max
i =1
∑ aij
j =1
1
METODE NUMERICE
Teorema :
1 qm
xm − x ≤ x m +1 − x m ≤ b
1−q 1−q
Exemplu:
x1 + 0.3x 2 − 0.2 x 3 = 1
0.4 x1 + x 2 + x 3 = −0.9
− 0.1x − 0.6 x + x = 1.1
1 2 3
2
METODE NUMERICE
/*
rezolvarea sistemelor de ecuatii liniare
metoda JACOBI
*/
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
double a[10][10],x[10],b[10],temp[10];
// a este matricea sistemului
// x vectorul de necunoscute ale sistemului
// b vectorul de termeni liberi
// temp un vector pentru calcul al unor valori temporare
double q,eps,nb,s;
// q numar egal cu norma matricei I-A ( adica q = |I - A| )
// eps eroarea de calcul aproximativ al solutiilor sistemului
// nb numar egal cu norma vectorului B ( adica nb = |B| )
int n,m,j,i,iteratii;
void main(void)
{
clrscr();
cout<<"Intoduceti nr. de linii si de coloane ale matricei sistemului ";
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Introduceti elementele termenului liber "<<endl;
for(i=1;i<=n;i++)
{
cout<<"b["<<i<<"]= ";
cin>>b[i];
3
METODE NUMERICE
}
cout<<"Sistemul initial este :"<<endl;
for(i=1;i<=n;i++)
{
cout<<a[i][1]<<" x"<<1;
for(j=2;j<=n;j++)
cout<<" + "<<a[i][j]<<" x"<<j;
cout<<" = "<<b[i]<<endl;
}
cout<<"are solutiile :"<<endl;
eps=0.0001;
/*
caz particular pentru sistemul :
x1 + 0.3x2 - 0.2x3 = 1
0.4x1 + x2 + 0.1x3 =-0.9
-0.1x1 - 0.6x2 + x3 = 1.1
*/
nb=1.1;
q=0.7;
4
METODE NUMERICE
Definitie :
Un sistem liniar Ax=b se numeste normal daca matricea coeficientilor A este
simetrica, adica aij = aji, si daca forma patratica corespunzatoare
n n
Teorema :
Daca ambii membri ai sistemului liniar Ax=b, cu matricea A nesingulara, sunt
inmultiti la stanga cu transpusa AT, atunci sistemul rezultant ATA x = AT b este
normal.
/*
rezolvarea sistemelor de ecuatii liniare
metoda GAUSS-SEIDEL
x1 + 0.3x2 - 0.2x3 = 1
0.4x1 + x2 + 0.1x3 =-0.9
-0.1x1 - 0.6x2 + x3 = 1.1
*/
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
double a[10][10],x[10],b[10];
// a este matricea sistemului
// x vectorul de necunoscute ale sistemului
// b vectorul de termeni liberi
int n,m,j,i,eroare;
5
METODE NUMERICE
for(i=1;i<=n;i++)
{
t=-1.0/a[i][i];
tt[i]=b[i]/a[i][i];
for(j=1;j<=n;j++)
a[i][j]=a[i][j] * t;
}
k=0;
for(i=1;i<=n;i++) b[i]=tt[i];
do{
k++;
eroare=0.0;
for(i=1;i<=n;i++)
{
t = tt[i];
for(j=1;j<=n;j++) t = t + a[i][j] * b[j];
b[i] = b[i] + t;
if(b[i] != 0.0) t = t / b[i];
if(fabs(t)>eroare) eroare = fabs(t);
}
}while((eroare<eps) || (k==imax) );
return;
}
void main(void)
{
clrscr();
cout<<"Introduceti nr. de linii si de coloane ale matricei sistemului ";
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Introduceti elementele termenului liber "<<endl;
for(i=1;i<=n;i++)
{
cout<<"b["<<i<<"]= ";
cin>>b[i];
}
cout<<"Sistemul initial este :"<<endl;
for(i=1;i<=n;i++)
{
cout<<a[i][1]<<" x"<<1;
for(j=2;j<=n;j++)
cout<<" + "<<a[i][j]<<" x"<<j;
cout<<" = "<<b[i]<<endl;
}
cout<<"are solutiile :"<<endl;
gauss_seidel(a,b,n);
for(i=1;i<=n;i++)
cout<<"x["<<i<<"]= "<<b[i]<<endl;
cout<<"Eroarea relativa maxima este "<<eroare<<endl;
getch();
}
6
METODE NUMERICE
6. Evaluarea functiilor
P ( x ) = a0 x n + a1 x n −1 + Κ + a n −1 x + an
cu coeficienti reali ai, i=0,1,2,…,n.
P (ξ ) = (Κ (( a0ξ + a1 )ξ + a2 )ξ + Κ + a n −1 )ξ + a n
Algoritmul calculului lui P( ) conform schemi lui Horner revine la evaluarea
succesiva a numerelor
b0=a0
bi=bi-1 + ai, i=1,2,…,n
si avem P( ) = bn.
#include <iostream.h>
double a[100],x;
int n,i;
double polinom(double a[100], double x, int n)
{
double b;
1
METODE NUMERICE
int i;
b=a[0];
for(i=1;i<=n;i++)
b=b*x + a[i];
return b;
}
void main(void)
{
cout<<"dati gradul polinomului n = ";cin>>n;
for(i=0;i<=n;i++)
{
cout<<"a["<<i<<"]= ";
cin>>a[i];
}
cout<<"Dati valoarea pt. care se calculeaza x= ";cin>>x;
cout<<"Valoarea polinomului in pct. "<<x<<" este: "<<polinom(a,x,n)<<endl;
}
f ' (ξ ) f '' (ξ ) ∞
f ( i ) (ξ )
f ( x ) = f (ξ ) + (x −ξ ) + (x − ξ ) + Κ = ∑
2
( x − ξ )i
1! 2! i =0 i!
∞
f ( i ) ( 0) i
f ( x) = ∑ x
i =0 i!
Suma partiala de ordinal n a seriei Taylor se numeste polinom Taylor de ordinul
n.
n
f ( i ) (ξ ) n
Fn ( x) = ∑ ( x − ξ ) = ∑ ti ( x )
i
i =0 i! i =0
x2 n
xi
e =1+ x +
x
+Κ = ∑
2! i = 0 i!
2
METODE NUMERICE
in acest caz:
n
Fn ( x ) = ∑ ti ( x ), xi
ti ( x) =
i =0 i!
t0=1, F0=1
x
ti = t i −1 , Fi=F i-1+ti, i = 1,2,…, n,…
i
Procesul iterativ se continua pana cand eroarea relativa devine mai mica decat o
valoare prescrisa , adica
| tn / F n | .
double expn(double x)
{
double f=1,t=1;
int i=0;
while( fabs(t/f) > eps )
{
i++;
t = x/i * t;
f = f + t;
}
return f;
}
void main(void)
{
cout<<"dati x = ";cin>>x;
cout<<"expn("<<x<<")="<<expn(x)<<endl;
cout<<" exp("<<x<<")="<<exp(x);
}
3
METODE NUMERICE
f : R → R, f ( x ) = ax + b
f(1)=a*1+b=5 si f(3)=3*a+b=-1
a+b =5
⇒
3a + b = −1
Prin rezolvarea sistemului de doua ecuatii cu doua necunoscute, obtinem: a=-3
si b=8.
Asadar, am obtinut functia de gradul I: f(x) = -3x + 8
f : R → R, f ( x ) = ax 2 + bx + c
a − b + c = −1
⇒ 4 a + 2b + c = 5
9a + 3b + c = 11
Prin rezolvarea sistemului de trei ecuatii cu trei necunoscute (adica valorile a, b
4
METODE NUMERICE
5
METODE NUMERICE
7. Aproximarea functiilor
Polinoame de interpolare (I)
1. Polinomul LAGRANGE
Una dintre cele mai cunoscute formule de interpolare este construita de Lagrange sub
forma unui polinom de interpolare.
Sa presupunem ca in intervalul [a,b] sunt specificate n valori ale argumentului x1, x2, . . . ,
xn, si valorile corespunzatoare ale unei functii f(x)
f(xi)=yi, i=1,2,…,n
Se cere construirea unui polinom Lm(x) care ia in punctele specificate xi aceleasi valori ca si
functia f(x)
Deoarece polinomul cautat, pi(x), se anuleaza in cele (n-1) puncte x1, …, xi-1, xi+1, …, xn, el
are expresia
p i ( x ) = C i ( x − x 1 ) Κ ( x − x i −1 )( x − x i +1 ) Κ ( x − x n ) = C i ∏ i( x) unde Ci este un
coefficient constant, iar
∏i( x ) = ∏ ( x − x j )
j≠i
Luind x=xi si avand in vedere ca pi(xi)=1 obtinem C i = 1 / ∏ i( x i ) . Cu acestea, gasim
pentru polinomul pi(x) care satisface conditiile (2)
pi ( x ) =
∏i(x ) (3)
Revenind acum la
∏i problema initiala a construirii polinomului L (x) care
( x i )
m
satisface conditiile (1), acesta poate fi scris sub forma
n
Lm ( x ) = ∑ pi (x )yi (4)
i =1
1
METODE NUMERICE
Intr-adevar, deoarece polinoamele pi(x), sunt de ordinul (n-1), si Lm(x) este de ordinul (n-
1) si satisface conditiile (1)
n n
L n −1 ( x j ) = ∑ pi ( x j ) y i = ∑ δijyi = y j , j = 1,2,..., n
i =1 i =1
Inlocuind expresia (3) a polinoamelor pi(x) in (4) rezulta formula de interpolare a lui
Lagrange
∏ (x − x j )
n
∏i y = j ≠ i
(x ) n
L n −1 ( x ) = ∑ i ∑ yi
i =1 ∏ i i i =1 ∏ i
( x ) ( x − x j )
j≠i
Vom crea o fucntie numita Lagrange cu cinci parametri :
ni – numarul de punctelor de interpolare
xi si yi – tablouri care contin coordonatele punctelor de interpolare
x – argumentul pentru care se calculeaza valoarea polinomului Lagrange de interpolare
y – valoarea de iesire a functiei
/*
Polinomul de interpolare Lagrange
*/
#include<iostream.h>
float xi[20], yi[20], x, y;
int ni;
void main(void)
{
cout<<" n = ";cin>>ni;
cout<<" Vector x = "<<endl;
for(int i=1;i<=ni;i++)
{
cout<<"x["<<i<<"]= ";
2
METODE NUMERICE
cin>>xi[i];
}
cout<<" Vector y = "<<endl;
for(i=1;i<=ni;i++)
{
cout<<"y["<<i<<"]= ";
cin>>yi[i];
}
cout<<"Dati valoarea punctului pt. care se calculeaza polinomul =";
cin>>x;
y=lagrange(xi,yi,ni,x);
cout<<"Valoarea pentru "<<x<<" este "<<y<<endl;
}
Executia programului :
n=4
vector x = {-2, 1, 2, 4}
vector y = {25, -8, -15, -13}
valoarea punctului pt. care se calculeaza polinomul = 3
Valoarea pentru 3 este 17.22221
2. Polinomul AITKEN
Schema de interpolare Aitken porneste de la polinomul Lagrange in mai multe puncte : x0,
x1, x2, . . . , xn.
y0 x0 − x
Se considera expresia
y1 x1 − x
L 01 ( x ) =
x1 − x 0
y (x − x) − y1(x0 − x) x1 − x x − x0 x − x1 x − x0
L01(x) = 0 1 = y0 + y1 = y0 + y1.
x1 − x0 x1 − x0 x1 − x0 x0 − x1 x1 − x0
care este tocmai expresia polinomului Lagrange construit pe nodurile x0, x1.
L 01 ( x 0 ) = y 0 ; L 01 ( x1 ) = y1 ;
Deoarece polinomul de gradul intai in punctele x0 si x1 ; respectiv valorile y0 si y1 este unic,
3
METODE NUMERICE
acest lucru inseamna ca L01(x) rezolva problema interpolarii pentru nodurile x0, x1 (x0 < x1).
In mod analog se construiesc polinoamele de interpolare liniare :
y1 x1 − x y n −1 x n −1 − x
y2 x2 − x yn xn − x
L 12 ( x ) = L n −1,n ( x ) =
x 2 − x1 ;....; x n − x n −1
Putem considera acum
L 01 ( x ) x 0 − x
L 21 ( x ) x 2 − x
L 012 ( x ) =
x2 − x0
care este un polinom de gradul doi in x.
In general, avem :
L 01Κ n −1 ( x ) x 0 − x
L 21 Κ n( x ) x n − x
L 012Κ n ( x ) =
xn − x0
care va fi polinomul de interpolare Lagrange pentru nodurile x0 < x1 < . . . <xn, si care are
in aceste puncte valorile y0, y1, . . . , yn.
Se observa ca L012…n(x) se obtine din L012…n-1(x) si L12…n(x) la fel cum L01(x) s-a obtinut din
y0 si y1, dupa aceeasi schema.
4
METODE NUMERICE
Exemplu :
x -2 1 2 4
f 25 -8 -15 -13
L3(a)= . . . . = -17.22
Programul urmator prezinta implementarea in C++ a schemei Aitken intr-un punct dat x.
/*
Schema AITKEN
*/
#include<iostream.h>
float x[10], y[10], xa[10], d[10][20], a;
int n;
void citire(float z[])
{
for(int i=0;i<=n;i++) cin>>z[i];
return;
}
void tipar()
{
cout<<endl<<" Schema Aitken "<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<" x x-a y I II III "<<endl;
cout<<"-------------------------------------------"<<endl;
int n1=n,j,i;
for(i=0;i<=n;i++)
{
cout<<x[i]<<" "<<xa[i]<<" ";
for(j=0;j<=n1;j++)
cout<<d[i][j]<<" ";
n1--;
cout<<endl;
}
return;
}
void aitken()
{
int i;
5
METODE NUMERICE
for(i=0;i<=n;i++) xa[i]=x[i]-a;
for(i=0;i<=n;i++) d[i][0]=y[i];
int n1,k=1,j;
for(j=1;j<=n;j++)
{
n1=n-j;
for(i=0;i<=n1;i++)
d[i][j]=(d[i][j-1] * xa[i+k] - d[i+1][j-1] * xa[i]) / (x[i+k]-x[i]);
k++;
}
return;
}
void main(void)
{
cout<<" n = ";cin>>n;
cout<<" a = ";cin>>a;
cout<<" vector x = ";
citire(x);
cout<<" vector y = ";
citire(y);
aitken();
tipar();
cout<<"valoarea pentru a este "<<d[0][n]<<endl;
}
6
METODE NUMERICE
8. Aproximarea functiilor
Polinoame de interpolare (II)
3. Polinom CEBISEV
Polinoamele Cebisev, utilizate frecvent pentru dezvoltarea unor functii, satisfac urmatoarea
relatie de recurenta:
Ti +1 ( x ) − xTi ( x ) + Ti −1 ( x ) = 0
T0 ( x ) = 1, T1 ( x ) = x
Programul urmator prezinta implementarea in C++ a polinomului Cebisev intr-un punct dat
x.
/*
Polinomul CEBISEV
*/
#include<iostream.h>
#include<conio.h>
void main(void)
{
double t0,t1,tk,x;
int n,k;
clrscr();
cout<<"Introduceti datele polinomului:"<<endl;
cout<<" x = ";
cin>>x;
cout<<"Dati gradul polinomului CEBISEV n = ";
cin>>n;
t0 = 1.0;
t1 = x;
for(k=2; k<=n; k++)
{
tk =1.0/k * (2 * x * t1 - t0 );
t0 = t1;
t1 = tk;
}
cout<<"Polinomul Cebisev este :"<<endl;
cout<<"\t\t\t"<<tk;
getch();
}
4. Polinom LAGUERRE
P0 ( x ) = 1, P ( x) = 1 − x
1
METODE NUMERICE
Pk ( x ) =
1
[(2k − 1)Pk −1 ( x) − ( k − 1) Pk − 2 ( x )], pentru k = 2,3,..., n.
k
Programul urmator prezinta implementarea in C++ a polinomului Laguerre intr-un punct
dat x.
/*
Polinomul LAGUERRE
*/
#include<iostream.h>
#include<conio.h>
void main(void)
{
double p0,p1,pk,x;
int n,k;
clrscr();
cout<<"Introduceti datele polinomului:"<<endl;
cout<<" x = ";
cin>>x;
cout<<"Dati gradul polinomului n = ";
cin>>n;
p0 = 1.0;
p1 = 1 - x;
for(k=2; k<=n; k++)
{
pk =1.0/k * ( (k*2-1) * p1 - (k-1) * p0 );
p0 = p1;
p1 = pk;
}
cout<<"Valoarea polinomului LAGUERRE este : "<<endl;
cout<<"\t\t\t\t\t"<<pk<<endl;
getch();
}
/*
Polinoamele LAGUERRE in mai multe puncte
*/
#include<iostream.h>
#include<conio.h>
void main(void)
{
double x[100], y[100];
double p0,p1,pk;
int m,n,k,i;
clrscr();
cout<<"Introduceti datele polinomului:"<<endl;
cout<<"Dati gradul polinomului LAGUERRE n = ";
cin>>n;
cout<<" In cate puncte se face calculul m = ";
cin>>m;
for(i=1;i<=m;i++)
{
2
METODE NUMERICE
5. Polinom LEGENDRE
P0 ( x) = 1, P( x) = x
Pk ( x ) =
1
[(2k − 1)Pk −1 ( x) − ( k − 1) Pk −2 ( x)], pentru k = 2,3,..., n.
k
Programul urmator prezinta implementarea in C++ a polinomului Legendre intr-un punct
dat x.
/*
Polinomul LEGENDRE
*/
#include<iostream.h>
#include<conio.h>
void main(void)
{
double p0,p1,pk,x;
int n,k;
clrscr();
cout<<"Introduceti datele polinomului:"<<endl;
cout<<" x = ";
cin>>x;
cout<<"Dati gradul polinomului LEGENDRE n = ";
cin>>n;
p0 = 1.0;
p1 = x;
for(k=2; k<=n; k++)
3
METODE NUMERICE
{
pk =1.0/k * ((k * 2 - 1) * x * p1 - (k - 1) * p0 );
p0 = p1;
p1 = pk;
}
cout<<"Polinomul Legendre este :"<<endl;
cout<<"\t\t\t"<<pk;
getch();
}
6. Polinom HERMITE
P0 ( x) = 1, P( x) = 2 x
Pk ( x ) = 2 xPk −1 ( x ) − 2(k − 1) Pk − 2 ( x ), pentru k = 2,3,..., n.
Programul urmator prezinta implementarea in C++ a polinomului Hermite intr-un punct dat
x.
/*
Polinomul HERMITE
*/
#include<iostream.h>
#include<conio.h>
void main(void)
{
double p0,p1,pk,x;
int n,k;
clrscr();
cout<<"Introduceti datele polinomului:"<<endl;
cout<<" x = ";
cin>>x;
cout<<"Dati gradul polinomului HERMITE n = ";
cin>>n;
p0 = 1.0;
p1 = 2 * x;
for(k=2; k<=n; k++)
{
pk = 2 * x * p1 - (k - 1) * 2 * p0 ;
p0 = p1;
p1 = pk;
}
cout<<"Polinomul Hermite este :"<<endl;
cout<<"\t\t\t"<<pk;
getch();
}
4
METODE NUMERICE
Fie o func ie f : [a ,b] → R i F(x) o primitiv a sa. Atât f(x) cât i F(x) sunt func ii
continue. Conform formulei Newton-Leibnitz:
b b
∫ f ( x )dx = F ( x ) = F( b ) − F( a )
, (9.1)
a a
În cele mai multe cazuri este foarte greu uneori chiar imposibil de determinat forma
primitivei F(x). Integrala (9.1) se poate calcula cu aproxima ie folosind metodele
numerice prin care se aproximeaz func ia f(x) definit pe intervalul [a, b] cu o func ie
g(x) astfel încât:
b b
∫ g( x )dx = ∫ ∑ ak qk ( x ) dx = ∑ ∫ ak qk ( x ) dx = ∑ ak ∫ qk ( x ) dx
a a k =1 k =1 a k =1 a
b n b (9.5)
deci ∫ g( x )dx = ∑ ak I k , I k = ∫ q k ( x )dx
a k =1 a
b
1
METODE NUMERICE
y=f(x) Func ii
spline
yi+1
yi+1
yi
O
xi xi+1 xi+2 x
Fig.7.1.1
În general pentru aproximarea func iei f(x) se utilizeaz diferite polinoame de
interpolare (preferându-se polinoame de grad mic, de obicei func ii spline continue de
gradul I sau II - fig. 9.1) i un num r cât mai mare de subintervale.
Polinomul de interpolare Lagrange Ln(x) are expresia:
( −1 )n−i q [n+1]
n
g ( x ) = Ln ( x ) = ∑ yi (9.7)
i =0 i! ( n − i )! ( q − i )
b b b
∫ f ( x )dx ≈ ∫ g ( x )dx = ∫ Ln ( x ) dx
a a a
( −1 ) n−i q [n +1]
b n n (9.9)
∫ f ( x )dx ≅ ∫ ∑
y i hdq
a 0 i =0
i! ( n − i )! ( q − i )
2
METODE NUMERICE
1 ( − 1 ) n −i y i q [n+1]
b n n
Aplica iile formulei de integrare aproximativ Newton Cotes pentru diferite diviziuni
ale intervalului [a, b] sunt:
1 ⋅1!⋅0! ∫0 q − 1
H1 = dq = =
2 2
0
Înlocuind în rela ia (9.14) se ob ine formula trapezelor:
b
∫ f ( x )dx =
h
[y0 + y1 ] (9.16)
a
2
3
METODE NUMERICE
∫ f ( x )dx =
h
[y0 + 4 y1 + y2 ] (9.19)
a
3
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x)
{
return (x*x+5);
}
4
METODE NUMERICE
for(i=1;i<=n-1;i++) sum=sum+h*f(ls+i*h);
return sum;
}
void main()
{
double ls,ld;
int n;
clrscr();
cout<<"Dati limita stanga ls = ";cin>>ls;
cout<<"Dati limita dreapta ld = ";cin>>ld;
cout<<"Dati numarul de puncte n = ";cin>>n;
cout<<"Valoarea integralei prin formula trapezelor este
"<<i_trapez(ls,ld,n)<<endl;
getch();
}
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x)
{
return(x*x+5);
}
void main()
{
double ls,ld,h;
int n;
clrscr();
cout<<"Dati limita stanga ls = ";cin>>ls;
cout<<"Dati limita dreapta ld = ";cin>>ld;
cout<<"Dati numarul de puncte n = ";cin>>n;
cout<<"Valoarea integralei prin formula lui Simpson este
"<<i_simpson(ls,ld,n)<<endl;
getch();
}
5
Obiective curs.
• Crearea, analiza şi implementarea de algoritmi pentru rezolvarea problemelor din matematica
continuă
• Analiza complexităţii, analiza şi propagarea erorilor, condiţionarea problemelor şi stabilitatea
numerică a algoritmilor problemelor numerice
• Prezentarea metodelor numerice clasice şi a celor moderne de rezolvare a problemelor ştiinţifice
şi inginereşti
• Alegerea celor mai potrivite metode numerice pentru o problemă dată
Conţinut curs.
• Reprezentare în virgulă mobilă. Standardul IEEE 754 pentru numere reale.
Condiţionarea problemelor şi stabilitatea numerică a algoritmilor.
• Rezolvarea sistemelor de ecuaţii liniare prin metode gaussiene.
Pivotare parţială şi totală. Factorizare LU.
• Propagarea erorilor în rezolvarea sistemelor de ecuaţii liniare.
• Metode iterative de rezolvare a sistemelor de ecuaţii liniare
• Interpolare polinomială. Polinom de interpolare Lagrange.
• Diferenţe divizate. Polinom Newton. Eroarea interpolării.
• Interpolare cu funcţii spline. Interpolare trigonometrică.
• Aproximare uniformă. Polinoame Cebâşev. Algoritmii lui Remes.
• Aproximare continuă şi discretă în sensul celor mai mici pătrate.
• Rezolvarea sistemelor în sensul celor mai mici pătrate. Factorizare QR.
• Metodele Householder, Givens, Gram-Schmidt
• Integrare numerică. Metode Newton-Cotes. Metoda Romberg.
• Integrare gaussiană. Polinoame ortogonale. Integrale improprii.
• Integrarea ecuaţiilor diferenţiale ordinare. Metode Runge-Kutta.
• Metode multipas explicite şi implicite. Predictor-corector.
• Convergenţa metodelor multipas
• Valori proprii şi vectori proprii. Metodele puterii
• Algoritmul QR cu deplasare explicită. Descompunerea valorilor singulare
1
Aplicaţii ale calculului numeric.
Adică sistemul: M.p = p sau (I-M).p=0, care pentru soluţii nenule, conduce la o problemă de valori
şi vectori proprii.
Într-un model deschis de economie, unele sectoare îşi satisfac unele cerinţe din exterior, adică:
pi = mi1p1+mi2p2+…+minpn+di
care conduce la sistemul liniar de ecuaţii:
p = M.p + d
cu soluţia:
p = (I-M)-1.d
2
3. Coeficienţii care apar în reacţiile chimice se obţin aplicând legea conservării masei ecuaţiei de echilibru
chimic. Astfel arderea etanului:
xC2H6 + yO2 → zCO2 + tH2O
dă sistemul de ecuaţii liniare:
⎧2x = z
⎪
⎨6x = 2t
⎪2 y = 2z + t
⎩
care are o soluţie întreagă:
x=2, y=7, z= 4, t=6.
deci ecuaţia chimică este:
2C2H6 + 7O2 → 4CO2 + 6H2O.
O problemă având o natură fizică oarecare poate fi studiată experimental sau prin simulare. Aceasta
poate fi transformată, utilizând legile fundamentale ale fizicii într-o problemă de natură matematică PM .
Vom spune că problema este bine pusă dacă admite o soluţie unică.
τ A (t ) θ0 (M) τB (t)
3
Problema matematică corespunzătoare este:
PM : Să se determine funcţia:
θ : (x,t ) → θ(x,t)
[0, l ] × [0, t1] → R
care satisface următoarele condiţii:
∂ 2θ ∂θ
10 =K⋅ ecuaţia lui Fourier
∂x 2
∂t
20 θ(x, 0)= θ 0 (x) condiţiile iniţiale
3 0
θ(0, t)= τ A (t) condiţiile pe frontieră
40 θ(l, t)= τ B (t)
5 0
θ ∈S , S = spaţiul funcţiilor de 2 ori derivabile pe [0, l]× [0, t1]
În acest moment intervine analiza numerică şi furnizează metodele de calcul, care în urma unui număr
finit N(x, t, ε ) de operaţii elementare furnizează pentru soluţia θ(x, t) o aproximaţie θ′(x, t) efectiv
calculabilă, astfel că: θ(x,t) − θ′(x,t) < ε .
Prezintă interes metodele de calcul în timp finit, cu: 0 < t < t1 care furnizează aproximaţii uniforme:
N(x, t, ε ) = N(ε ) .
Problema continuă PM este transformată într-o problemă asemănătoare Ph prin discretizare.
În acest scop se selectează un număr finit de puncte (iΔx, nΔt) din domeniul compact [0, l]× [0, t1]
folosind o reţea de discretizare cu paşii:
l
Δx = ,
M
t1
Δt = .
N
θ in − θ in −1 θ n − 2 ⋅ θ in + θin − 1
10 = K ⋅ i +1
Δt (Δx)2
20 θi0 = θ0 (iΔx)
3 0 θ n0 = τ A (nΔt)
4 0 θ nM = τ B (nΔt)
4
Δt 1
50 ≤
(Δx) 2
2⋅K
lim Ph = PM .
h →0
O altă condiţie importantă o reprezintă stabilitatea; aceasta impune ca soluţia θ ′ a problemei perturbate
PM (manifestată prin perturbarea parametrilor θ ′ , τ′A , τ′B , K′ ) să fie apropiată de soluţia θ a
modelului matematic PM .
Pe baza modelului matematic discretizat se va proiecta un algoritm, care va fi analizat prin prisma:
- eficienţei (resurse folosite: timp de calcul şi memorie),
- convergenţei către soluţia modelului matematic continuu,
- efectului propagării erorilor.
Etapele enumerate evidenţiază urmatoarele tipuri de erori:
- erori deproblemă (inerente) care apar la trecere de la modelul fizic PF la cel matematic PM ,
- erori de metodă introduse prin discretizarea modelului matematic,
- erori de trunchere provin din natura infinită a unor procese care descriu soluţia problemei
- erori de rotunjire specifice rezolvării problemei pe calculatorul numeric, care utilizează aritmetica în
virgulă mobilă mobilă
5
Reprezentarea în virgulă mobilă.
fl(x) = ±0.a1a2...at × βe
reprezentare normalizată
1 ≤ a1 < β şi 0 ≤ ai < β, i=2:t
L ≤ e ≤ U
• Sistemul de reprezentare în virgulă mobilă F(β, t, L, U) cuprinde:
• baza β
• precizia reprezentării t
• limitele (superioară şi inferioară ale) exponentului L şi U
• reprezentarea lui zero
Exemplu: F(10, 1, 0, 1)={ ±0.a1×10e}∪{0} cu a1∈{1:9} şi e∈{0,1}, în total 37 de
numere.
• 2(β-1)βt-1(U-L+1) valori distincte
• a1 poate lua β-1 valori distincte,
• restul de t-1 cifre poate lua fiecare β valori diferite, deci βt-1,
• exponentul ia U-L+1, şi
• semnul două).
Cel mai mare număr reprezentabil Ω, (realmax) are forma:
Ω = 0.(β-1)(β-1)...(β-1)× βU =
= [(β-1)/β1+(β-1)/β2+...+(β-1)/βt] ×βU
6
= (β-1)/β(1-β-t)/(1-β-1)×βU = βU(1-β-t)
Ω = βU(1-β-t)
• Cel mai mic număr pozitiv reprezentabil ω numit şi realmin este:
ω = 0.10...0×βL=βL/β=βL-1
ω =βL-1
Surse de erori.
Un număr real x∈F se reprezintă exact, dacă suma se termină înainte de t termeni şi exponentul este
cuprins între limite. Altfel, numărul real x se aproximează printr-o valoare fl(x)∈F
Aproximarea numărului real
x=(0.a1a2... )βe=(a1β-1+a2β-2+...+atβ-t+at+1β-t-1 +...)βe
se poate face prin trunchiere sau prin rotunjire.
• Aproximarea prin trunchiere ignoră cifrele numărului real din dreapta poziţiei t.
fl(x)=(0.a1a2...at )βe=(a1β-1+a2β-2 +... +atβ-t)βe
• Aproximarea prin rotunjire consideră:
fl(x)=(0.a1a2...at+1 )βe dacă at+1 ≥ β/2
fl(x)=(0.a1a2...at )βe dacă at+1 < β/2
O depăşire superioară apare dacă e>U.
Ea declanşează o eroare la execuţie, care conduce la întreruperea calculelor.
O depăşire inferioară apare dacă e<L;
ea duce la înlocuirea numărului prin zero.
• Epsilon maşină (notat eps în Matlab sau μ) reprezintă cel mai mic număr pozitiv cu proprietatea că:
fl(1+μ) > 1
De exemplu în F(10, 4, -3, 3) cu rotunjire prin tăiere (trunchiere):
• fl(1+0.0009)=fl(1.0009)=1
• fl(1+0.0010)=fl(1.0010)=1.001 > 1
aşadar μtr=0.001=10-3 >ω=10-4.
• Dacă se foloseşte rotunjire, atunci:
fl(1+0.0004)=fl(1.0004)=1
fl(1+0.0005)=fl(1.0005)=1.001 > 1
cu μrot=0.0005=1/2.10-3 =1/2.μtr
• Eroarea absolută la rotunjirea prin trunchiere:
ex = x-fl(x)=(a1/β1+ a2/β2+...+ at/βt+at+1/βt+1+...)βe
– (a1/β1+ a2/β2+...+ at/βt)βe
ex = (at+1/β1+ at+2/β2+...)βe-t
|ex|≤|(β-1)/β1+(β-1)/β2+...|βe-t=
(β-1)βe-t (1/β1+1/β2+...) ≤ (β-1)βe-t/(β-1)= βe-t
|ex| ≤ βe-t
Dacă se foloseşte rotunjirea atunci eroarea absolută este şi mai mică:
|ex|≤ 1/2. βe-t
• Eroarea relativă este:
εx = |ex|/|x| = |x-fl(x)|/|x| ≤ βe-t/(0.a1...at...βe)
7
εx ≤ βe-t/(0.10...0βe)= β1-t
εx ≤ β1-t la trunchiere
εx ≤ 1/2. β1-t la rotunjire
În general:
|x-fl(x)|/|x| ≤ μ
de unde deducem:
fl(x) =x(1+ε), |ε| ≤ μ=K β-t
8
Rezultatul operaţiei este normalizat:
fl(x+y)=[x+(1+μ)y](1+μ)
Denormalizarea unuia dintre termeni poate fi evitată dacă se păstrează rezultatul intermediar într-un
acumulator cu lungimea 2t (acumulator dublu) În acest caz numai rezultatul final va fi afectat de
trunchiere la t cifre semnificative şi normalizare, deci:
fl2(x+y)=(x+y)(1+μ)
Anularea catastrofală.
• La scăderea a două numere apropiate ca ordin de mărime, cifrele semnificative se anulează reciproc,
rezultând o eroare relativă mare.
fl(x)=0.a1a2...ap-1ap...at× βe
fl(y)=0.a1a2...ap-1bp...bt× βe
fl(y)-fl(y)=0.0 0 ...0 cp...ct× βe =0.cp...ct× βe-p
•
Iniţial avem o singură cifră inexactă, în poziţia t, cu eroarea relativă β1-t
• După scădere, bitul inexact trece în poziţia t-p cu eroarea relativă β1-(t-p)adică amplificată de βp
ori.
Să considerăm scăderea numerelor x=0.120 şi y=-0.119 în sistemul F(10,2,-10,10):
fl(x)=-fl(y)=0.120
ε=|((x+y)-fl(x+y))/(x+y)|=(0.001-0)/0.001=1 !
eroarea este de 100% !
Se evită scăderea numerelor apropiate ca ordin de mărime prin:
•înmulţire cu conjugatul,
•dezvoltare în serie Taylor,
•rearanjarea termenilor etc .
Prin rearanjarea termenilor evităm adunarea numerelor foarte diferite ca ordin de mărime.
Astfel în sistemul F(10, 3,-10,10) cu rotunjire suma: 1+0.002+0.002+0.002 calculată
• fl(fl(fl(1+0.002)+0.002)+0.002)=1
în timp ce asocierea:
• fl(1+fl(0.002+fl(0.002+0.002)))=1.01.
În aritmetica în virgulă mobilă, asociativitatea nu se mai păstrează. Astfel:
fl(fl(x+y)+z)≠fl(x+fl(y+z)).
De exemplu:
fl(fl(1+μ/2)+ μ/2)= fl(1+μ/2)=1,
în timp ce:
fl(1+fl(μ/2+μ/2))= fl(1+μ) > 1
Reprezentarea numerelor reale (standardul IEEE 754).
Permite reprezentarea realilor în:
1) precizie simplă F(2, 24, -126, 127), folosind 32 biţi
2) precizie dublă F(2, 53, -1022, 1023); se folosesc 64 biţi:
3) precizie extinsă F(2, 65, -16382, 16382); se folosesc 80 biţi:
Întrucât a1=1, acesta nu se mai reprezintă (este ascuns), câştigându-se astfel precizie suplimentară. Bitul
ascuns este evidenţiat în reprezentarea: fl(x)=(-1)s2e.(1.+.f)
9
Precizie simplă
• reprezentare pe 32 biţi
• baza β= 2
• precizie t= 24 biţi (numerele normalizate păstrează numai 23 biţi)
• Numărul real este păstrat prin 3 componente:
– semnul: 1 bit
– exponentul: 8 biţi
– mantisa: 23 biţi (logic24)
8
• Cei 8 biţi permit: 2 = 256 valori diferite. Domeniul [0, 255] este transformat în [-127,
128]
• La exponentul (pozitiv sau negativ) se adaugă o valoare constantă care duce la un exponent
deplasat sau caracteristică pozitivă. Factorul de deplasare pentru precizie simplă este127.
• Domeniul deplasat [0-255] reprezintă exponenţi în domeniul [-127, 128]
exponent_deplasat = exponent + 127
Valoarea numărului este: V=(-1)s.2e.(1.+.f)
• 1=(-1)0.20.(1.+.0)
0+127
0 01111111 00000000000000000000000
S e(8) f(23)
0 011 1111 1000 0000 0000 0000 0000 0000
└────┘└───┘└───┘└───┘└───┘└───┘└───┘└───┘
3 F 8 0 0 0 0 0
• -6.5=(-1)1.22.(1.+0.625)
2+127
1 10000001 10100000000000000000000
S e(8) f(23)
1 100 0000 1 101 0000 0000 0000 0000 0000
└────┘└───┘└───┘ └───┘└───┘└───┘└───┘└───┘
C 0 D 0 0 0 0 0
Un număr mai mare decât cel mai mare număr reprezentabil M (cunoscut sub numele de modulul
reprezentării) se obţine în urma unei depăşiri superioare (de regulă o împărţire prin 0: 1/0 = ∞, -
1/0 = -∞) va fi desemnat prin infinit – Inf, iar nedeterminările 0/0, ∞/∞ etc, vor fi desemnate ca NaN
(Not a Number).
Pentru toate acestea se rezervă în reprezentare cel mai mare exponent posibil 128 (adică exponentul
deplasat 255).
Precizie simplă
S E (8biti) E-127 H F (23biti) Valoare
NaN 0 11111111 128 1 ≠0
+Inf 0 11111111 128 1 000 …000 (-1)02128 0x7F800000
Ω 0 11111110 127 1 111 …111 (-1)02127(2-2-23)≈3.4E38 0x7F7FFFFF
...
1+ε 0 01111111 0 1 000 …001 (-1)020(1+2-23) 0x3F800001
ε =2-23≈1.92E-7
10
1 0 01111111 0 1 000 …000 (-1)020=1 0x3F800000
ω 0 00000001 -126 1 000 …000 (-1)02-126=2-126≈1.175E-38 0x00FFFFFF
MaxD 0 00000001 -126 0 111 …111 (-1)02-126(1-2-23)=2-126-2-149
...
MinD 0 00000001 -126 0 000 …001 (-1)02-1262-23=2-149≈1.4E-45 0x00000001
+0 0 00000000 -127 1 000 …000 (-1)02-127=2-127 0x00000000
• Cel mai mic număr normalizat ω = 2-126 ≈1.175E-38
• Cel mai mic număr denormalizat este .00…1 * 2-126 = 2-149≈1.4E-45
• Infinit rezultă din calcule precum: 1/0 = ∞, -1/0 = -∞
Se reprezintă cu exponentul deplasat 255, (nedeplasat 128), şi fracţia 0. … 0
• Cel mai mare număr Ω = 1.111…1*2127 ≈ 3.4E38
• NaN (“not a number”) apare când se încearcă o operaţie nelegală (ca sqrt dintr-un număr
negativ)
• Orice expresie care conţine un termen NaN este evaluată ca NaN
– Există cazuri în care apariţia unui NaN nu declanşează nici o întrerupere (excepţie) NaN
este “liniştit” (QNaN)
– Un NaN semnalizat (SNaN)declanşează o excepţie (de exemplu o valoare neiniţializată)
• sqrt(număr negativ)
• 0 * ∞ 0 / 0 ∞ / ∞
• x % 0 ∞ % x ∞ - ∞
Precizie dublă
S E(11b) E-1023 H f(52biti) Valoare
NaN 0 11…11 1024 1 ≠0
+Inf 0 11…11 1024 1 000 …000 (-1)021024
Ω 0 11…10 1023 1 111 …111 (-1)021023(2-2-52)≈1.8E308
1+ε 0 01…01 0 1 000 …001 (-1)020(1+2-52) ε=2-52≈1.1E-16
1 0 01…01 0 1 000 …000 (-1)020=1
ω 0 00…01 -1022 1 000 …000 (-1)02-1022=2-1022≈2.2E-308
MaxD 0 00…01 -1022 0 111 …111 (-1)02-1022(1-2-52)=2-1022-2-1074
MinD 0 0…001 -1022 0 000 …001 (-1)02-10222-52=2-1074≈5E-324
+0 0 0…000 -1023 1 000 …000 (-1)02-1023=2-1023
Condiţionarea problemelor.
• Condiţionarea unei probleme caracterizează sensibilitatea soluţiei în raport cu erorile din datele de
intrare.
• O problemă este bine condiţionată dacă erori mici în date produc de asemeni erori mici în rezultate.
• Condiţionarea este o proprietate a problemei, independentă de soluţia aleasă.
• O problemă rău condiţionată este „aproape nerezolvabilă” în practică (chiar dacă problema este
rezolvată exact, soluţia poate fi lipsită de semnificaţie).
• De exemplu, la evaluarea funcţiei y=f(x), o perturbare a datelor x+Δx produce o perturbare a
soluţiei y+Δy = f(x+Δx), în care:
• eroarea absolută Δy ≈ f' (x ) ⋅ Δx
11
Δy f′(x ) Δx
• eroarea relativă ≈ ⋅ x ⋅
y f( x ) x
f' (x )
• Problema este rău condiţionată dacă factorul Lipschitz L = ⋅ x este mare.
f(x )
Stabilitatea numerică a algoritmilor
• Stabilitatea numerică caracterizează erorile numerice introduse de algoritm, în ipoteza unor date de
intrare exacte. Se referă la precizia algoritmului.
• Un algoritm este instabil dacă erorile de rotunjire produc erori mari în rezultate.
• Un algoritm numeric stabil nu introduce o sensibilitate suplimentară la perturbaţii.
• Un algoritm stabil dă rezultate apropiate de soluţia exactă pentru o problemă bine condiţionată.
• Un algoritm stabil nu poate rezolva o problemă rău condiţionată, dar un algoritm instabil poate da
soluţii slabe chiar pentru o problemă bine condiţionată.
Dacă f: X → Y este o problemă şi f∼: X → Y este un algoritm, atunci acesta este numeric stabil
dacă pentru ∀x∈X, ∃x∼∈X, astfel încât:
f − (x ) − f(x − ) = O (ε m ) şi x − x− = O(ε m )
∼
Algoritmul f destinat rezolvării problemei f este numeric stabil, dacă este îndeplinită una din condiţiile:
1. f∼(x)≅ f(x), adică soluţia calculată aproximează bine soluţia exactă∼
2. există x∼ apropiat de x astfel încât f∼(x)=f(x∼) – soluţia calculată de algoritm cu date de
intrare exacte este soluţia exactă cu date uşor perturbate.
Exemple de algoritmi instabili:
• inversarea de matrice folosind determinanţi
• rezolvarea sistemelor liniare prin factorizare LU fără pivotare
• utilizarea factorizării Cholesky în metoda celor mai mici pătrate (rezultate mult mai bune furnizează
factorizarea QR).
• calculul valorilor proprii ca rădăcini ale polinomului caracteristic
Bibliografie.
• V.Iorga, B.Jora “Metode Numerice”,Ed.Albastră,2005
• C.Popeea, B.Jora, B.Dumitrescu “Calcul Numeric – Algoritmi fundamentali”, Ed.ALL
• C.Moler “Numerical Computing with Matlab”
• V.Iorga, F.Pop “Metode Numerice –Îndrumar de laborator”
12
1
CURS 2
METODE NUMERICE PENTRU SISTEME DE ECUAŢII NELINIARE
------------------------------------------------------------------------------------------------------------
0. Preliminarii: Norma unui vector si norma unei matrici (rapel).
1. Sisteme de ecuaţii neliniare. Definiţii.
2. Metoda punctului fix.
3. Metoda Newton; metode cvasi-Newton.
2. || λ ⋅ x || = | λ | ⋅ || x || , ∀λ = scalar ( λ ∈ R sau λ ∈ C ).
3. || x + y || ≤ || x || + || y ||
n
|| x ||1 = ∑ | xi | … norma-1
i =1
1/ 2
n
|| x ||2 = ∑ | xi |2 … norma-2 (norma euclidiană)
i =1
■
Fie An este mulţimea matricilor n × n cu elemente scalare (reale, complexe).
Norma unei matrici A ∈ An este o aplicaţie || . ||: An → R + , care satisface axiomele
1 – 3, şi în plus, următoarele:
4. || A ⋅ B || ≤ || A || ⋅ || B ||
5. || A ⋅ x || ≤ || A || ⋅ || x ||
Observaţie
Definiţia normei unei matrici, indusă de norma vectorului, este:
|| A ⋅ x ||
|| A || = sup
x ≠0 || x ||
Pentru detalii privind norma unui vector şi norma unei matrici, vezi Capitolul 4-I ■
Exemple de norme ale unei matrici:
|| A || ∞ = max ∑ | a ij | - norma liniilor
i
j
[
|| A ||2 = ρ ( A ∗ ⋅ A ) ] 1/ 2
- norma euclidiană,
1 Definiţii
Fie sistemul de ecuaţii neliniare
f1 ( x1 , x 2 , ... , x n ) = 0
KK
f n ( x1 , x 2 , ... , x n ) = 0
f ( x) = 0 (1)
unde f : I → R n , I ⊂ R n . Explicit:
x1 0 f 1 ( x)
x 0 f ( x)
2 2
x = . , 0 = . , f ( x) = . ,
. . .
x n 0 f n (x)
Pentru rezolvarea prin metoda punctului fix, sistemul (1) se va considera pus sub
forma:
x = g (x ) (2)
în care g : I → R n , I ⊂ R n ,
|| x || ∞ = max | xi | ; || A || ∞ = max ∑ | a ij | .
i i
j
x ( n+1) = g(x ( n ) ), n ≥ 0
Observaţie
Dacă g : C → C şi C ⊂ R n este un compact (mulțime mărginită și închisă), atunci
Teorema 1
Presupunem:
|| x − α || ∞ ≤ ρ .
∂g i ( x)
max ∑ ≤ λ < 1 , ∀x ∈ I .
i
j ∂x j
Atunci, ∀x ( 0 ) ∈ I :
(a) Iteratele x (n ) ∈ I .
(b) Şirul x ( n ) → α .
x2
x
ξ
ρ y
α
x1
Sumarul demonstraţiei:
|| g(x) − g(y ) || ∞ ≤ λ ⋅ || x − y || ∞
Rezultă:
şi prin inducţie:
|| x ( n ) − α ||∞ ≤ λn ⋅ ρ
Observaţii
1) Matricea jacobian a funcţiei g:
∂g1 ∂g1 ∂g 1
∂x ...
∂x 2 ∂x n
∂g i 1
G ( x) = = . . . . . . . . . . . . . . . . . . . . .
∂x j x ∂g
n ∂g n ... ∂g n
∂x1 ∂x 2 ∂x n x
2) Convergenţa liniară:
|| x ( n +1) − α || ∞ ≤ λ ⋅ || x ( n ) − α || ∞ .
∂g i
G( α ) = O ⇔ = 0; i, j = 1, 2, …, n
∂x j
α
Atunci, ∃ρ > 0 astfel încât condiţia 3 sau 3' este satisfăcută. Dacă, în plus, derivatele
∂ 2 gi
max ≤ M1 ,
i , j ,k ∂x j ∂x k
1 2
unde M = ⋅ n ⋅ M1 ,
2
2
|| x ( n +1) − α ||∞ ≤ M ⋅ || x ( n ) − α ||∞
Considerăm sistemul dat sub forma f ( x) = 0 şi vrem să-l transformăm într-un sistem
echivalent de forma x = g (x) .
g( x ) = x − A (x ) ⋅ f (x )
x = g(x) ⇔ f (x) = 0 .
g(x) = x − A ⋅ f (x )
G (x) = I − A ⋅ F (x) ,
∂f j
F ( x) = .
∂x k x
Explicit:
∂f 1 ∂f 1 ∂f 1
∂x ∂x ... ∂x
∂f 1 2 n
F ( x) = i = . . . . . . . . . . . . . . . . . . . . .
∂x j x
∂f n ∂f n ... ∂f n
∂x1 ∂x 2 ∂x n x
G( α ) = O .
Rezultă A ⋅ F (α ) = I , sau
A = [F (α ) ] .
−1
(3)
[
A = F(x ( 0) ) ] −1
. (4)
Iteraţia va fi definită de
x ( n+1) = x ( n ) − A ⋅ f (x ( n ) ) , (5)
Procedeul practic, care evită inversarea matricii F(x ( 0) ) , este următorul. Punem:
δx ( n +1) = x ( n +1) − x ( n ) ,
şi rezultă:
Procedeul revine la determinarea corecţiei δx ( n +1) prin rezolvarea sistemului liniar din
prima ecuație (6). Iteraţia se opreşte prin testele
n +1 ≤ lnit (7b)
unde toleranţa eps şi numărul limită de iteraţii lnit, sunt alese dinainte. Procedeul este
util mai ales dacă actualizăm A după un număr de paşi, conform Observaţiei 1.
[
x ( n+1) = x ( n ) − F(x ( n ) ) ]
−1
⋅ f (x ( n ) ) .
3 Metoda Newton
Ecuaţii de forma f ( x) = 0 .
Metoda
Căutăm A(x) , astfel ca metoda punctului fix pentru g să aibă ordinul doi. Condiţia
este – v. mai sus, G( α ) = O , sau
∂g i
=0, i, k = 1, 2, .., n .
∂x k x =α
det( F (α )) ≠ 0 .
det( F ( x)) ≠ 0 .
Alegem atunci
A( x) = [F ( x)] ,
−1
|| x − α || ≤ ρ ,
g ( x ) = x − [F( x )] ⋅ f ( x )
−1
[
x ( n +1) = x ( n ) − F( x ( n ) ) ]
−1
⋅ f (x ( n ) ) (8)
Propoziţie
Dacă f are derivate parţiale de ordinul 2, mărginite pe || x − α || ≤ ρ , şi x ( 0 ) este
suficient de apropiat de α, atunci metoda Newton are convergenţă pătratică ■
Notă
Ipotezele de mai sus, în particular det( F (α )) ≠ 0 , se poate înlocui cu altele – v . Cap.
3-IV, 3.1, Teorema 3. Astfel, metoda se poate aplica şi în cazul det( F (α )) = 0 . În
acest caz, convergenţa este liniară. ■
F(x ( n ) ) ⋅ δx ( n+1) = −f (x ( n ) )
( n +1)
n≥0 (9)
x = x ( n ) + δx ( n +1)
Corecţia δx ( n +1) se calculează prin rezolvarea sistemului liniar din prima ecuație (9).
Iteraţia se opreşte prin testul
unde | h | este ‘mic’. Creşterea h poate constantă, sau poate fi variată de la un pas la
| h | ≤ C || f (x (k ) ) || ,
unde C este o constantă pozitivă, fixată dinainte (Ralston & Rabinowitz (1978)).
Metoda Newton este metoda descrisă de formula de iterare (6), care utilizează
jacobianul evaluat la fiecare pas x (n ) (analitic, sau numeric).
Dacă jacobianul F(x (n ) ) este înlocuit cu o aproximaţie a acestuia, metodele se zic
metode Newton-modificate sau metode cvasi-Newton.
A ( l ) = F(x ( k ) ) - pentru l = k , K , k + ( m − 1) .
Această schemă reduce viteza convergenţei, dar este economică la o rulare lungă.
x ( k +1) = x ( k ) − [ A ( k ) ] −1 ⋅ f (x ( k ) ) (9)
f i (x) = 0, i = 1, 2, K, n
jurul lui x ( 0 ) :
n
∂f i
f i ( x) = f i ( x ( 0 ) ) + ∑ ( x j − x (j0) ) + K
j =1 ∂x j
x( 0 )
unde termenii nescrişi sunt de ordin mai mare sau egal cu doi în ( x j − x (j0) ) .
n
∂f i
f i ( x) ≈ f i ( x ( 0 ) ) + ∑ ( x j − x (j0) )
j =1 ∂x j
x( 0 )
∂f i
Notăm F ji = elementele jacobianului F al lui f, adică
∂x j
∂f 1 / ∂x1 L ∂f 1 / ∂x n F1 L Fn
1 1
F (x) = L L L = L L L
∂f n / ∂x1 L ∂f n / ∂x n F1n L Fnn
Desvoltarea devine
n
f i (x) ≈ f i (x ( 0 ) ) + ∑ F ji (x ( 0) )( x j − x (j0) ) ,
j =1
Sau, matriceal,
x1 − x10
x 2 − x 20
f i (x) = f i (x ( 0) ) + [ F1i F2i K Fni ] x( 0 ) ⋅
M
0
x n − x n
Rezultă:
δx = x − x ( 0) .
Presupunând că aproximaţia x (1) este mai bună decât x ( 0 ) , atunci metoda constă în
aplicarea repetată a formulei (10), înlocuind, la pasul următor, x ( 0 ) cu x (1) .
acestea S1 şi S 2 .
intersecţia curbelor C1 şi C2 .
∂f i ( x ( 0) , y ( 0) ) ∂f ( x ( 0) , y ( 0 ) )
z ≈ f i ( x (0 ) , y (0) ) + ( x j − x (j0 ) ) + i ( y j − y (j0) )
∂x ∂y
Intersecţiile planelor tangente cu planul x-y vor fi două drepte – care aproximează
curbele C1 şi C2 . Intersecţia dreptelor este aproximaţia rădăcinii.
Exemplu
Fie sistemul de două ecuaţii neliniare:
f 1 ( x, y ) ≡ x 2 + y 2 − 5 = 0 , f 2 ( x, y ) ≡ y − e x − 1 = 0 .
x ( 0 ) = (−2, 1) , şi x ( 0) = (0.5, 2) .
x2 + y2 = 5 , y = e x + 1.
2 ⋅ x 2 ⋅ y
F ( x, y ) = x .
− e 1
Luăm eps = 1E-6. Calculul este efectuat în simplă precizie. Soluţia calculată (x, y),
numărul de iteraţii, şi valorile lui f în soluţie, sunt date în tabelele de mai jos.
Observaţii
Derivatele parţiale ale funcţiilor f i sunt calculate numeric , cu h = 0.001. Numărul
de iteraţii pentru a doua rădăcină este mai mare decât cel pentru prima rădăcină,
întrucât aproximaţia iniţială (0.5, 2) este mai îndepărtată de rădăcină. Cu aproximaţia
x ( 0 ) = (0.2, 2.2), se găseşte aceeaşi soluţie în 8 iteraţii.
2) Metoda Newton:
Exerciţiu
Să se rezolve sistemul:
xy − z 2 = 2
2 2
− xyz − x + y = 4
e x − e y − z = 7
Să se găsească rădăcinile din vecinătatea punctelor w0 = (2, 2, − 1) şi w0 = (1, 1, 1) .
■