Documente Academic
Documente Profesional
Documente Cultură
Lucrarea 07 - Rezolvarea Sistemelor de Ecuatii II
Lucrarea 07 - Rezolvarea Sistemelor de Ecuatii II
Lucrarea 07 - Rezolvarea Sistemelor de Ecuatii II
#07
LUCRAREA #07
CUPRINSUL LUCRRII
1. Metoda iterativa Jacobi
2. Metoda iterativ Gauss-Seidel
3. Rezolvarea sistemelor neliniare
4. Aplicaii de laborator
95
#07
D x C x b x D 1 C x D 1 b
(7.1)
De aici rezult relaia de iteraie care genereaz aproximaiile succesive ale soluiei
sistemului:
x ( k 1) B x ( k ) d
(7.2)
bi
xik 1
j 1, j i
aii
aij x kj
, i 1..n, k 0,1, 2,...
(7.3)
bi
, i 1, 2,...n
aii
(7.4)
aij
aii
, i, j 1, 2,...n si i j
(7.5)
x ( k 1) x ( k ) tol
#07
(7.6)
Folosind cele expuse, se va scrie o funcie care s rezolve un sistem prin aceast
metod.
Date de intrare:
A matricea sistemului
b vectorul termenilor liberi
n numrul de ecuaii
tol toleranta de calcul
x aproximaia iniiala a soluiei
Date de ieire:
x irul aproximaiilor succesive ale soluiei sistemului
nx - numarul de iteratii dupa care s-a obinut soluia sistemului
it=50 %se stabileste de la inceput un anumit nr. de iteratii
pentru k=1 pna la it %numarul de iteratii
pentru i=1 pn la n %parcurge matricea pe linii
n
s=0 %initializare
aij x kj
j 1, j i
bi
x(i)=
aij x kj
j 1, j i
aii
97
#07
for i=1:n
s=0;
for j=1:n
if (j~=i)
s=s+(A(i,j)*x0(j));
end
end
x(i)=(b(i)-s)/A(i,i); %calculare x(i)
end
if max(abs(x-x0))<tol %conditia de oprire a procesului iterativ
nx=k;break;
end
x0=x %afisare sir solutii intermediar la iteratia k
pause
end
ai ,i
ai , j , i 1..n
(7.7)
j 1, j i
Este bine de la nceput a se testa dac aceast convergen are loc sau nu.
O funcie care poate face acest lucru calculeaz suma elementelor de pe fiecare
linie, exceptnd elementul de pe poziia [i,i]. Dac pentru fiecare linie aceast sum (luat
n modul) este mai mic dect elementul de pe poziia [i,i] (de asemenea n modul)
nseamn ca are loc convergena. Acest lucru este foarte uor de realizat practic, prin
folosirea unui vector care are elementul de pe poziia i egal cu 0 dac condiia de mai sus
nu este ndeplinit i egal cu 1 dac condiia este ndeplinit. Cu alte cuvinte, convergena
are loc dac toate elementele vectorului creat sunt egal cu 1 (i implicit diferite de 0). n
MatLab exist funcia any care testeaz dac elementele unui vector sunt diferite de 0 sau
nu. Se poate scrie astfel funcia:
function test_convergenta(A)
% functie care testeaza daca are loc sau convergenta metodelor iterative
% de rezolvare a sistemelor liniare: Jacobi sau Gauss-Seidel
% Date de intrare
% A
Matricea sistemului
% Date de iesire
%
Se afiseaza mesajul de convergenta
[n,m]=size(A);
if n~=m
disp('Sistemul nu este liniar')
break
end
for i=1:n
suma1=0;
for j=1:n
if i~=j
suma1=suma1+abs(A(i,j));
end
end
if abs(A(i,i))>=suma1
conv(i)=1;
else
98
#07
conv(i)=0;
end
end
if all(conv)
disp('Convergenta are loc')
else
disp('Convergenta nu are loc')
end
n urma folosirii acestei funcii se poate decide dac metodele iterative pot fi sau
nu folosite.
O soluie pentru a putea folosi metodele iterative ar fi pivotarea liniilor matricei,
asemntor metodei Gauss. ns nici dup aceast operaie nu este obligatoriu ca matricea
s devin dominant diagonal
Pentru aceasta, se apeleaz funcia pivotare_partiala definit la metoda lui Gauss,
prin care ecuaiile sunt schimbate ntre ele, rezultnd o matrice a sistemului care are pe
diagonala principal unele din cele mai mari elemente ale sale, crendu-se condiiile
convergenei metodei.
Dup acest lucru se apeleaz din nou funcia de test convergen.
n final, dac n urma testului se obine un rspuns pozitiv, se apeleaz funcia
metoda_jacobi, care ntoarce soluia sistemului i numrul de iteraii dup care aceasta s-a
gsit.
Exemplul 7.1. S se rezolve urmtorul sistem folosind metoda iterativ Jacobi:
x1 x2 2 x3 3
3 x1 x3 10
x 2 x x 12
1
2
3
Se definesc elementele sistemului:
A=[1 1 -2;3 0 1;1 2 1]
b=[-3 10 12]
n=3
Determinantul matricei A este -16, deci diferit de 0; sistemul are soluie unic.
Testul de convergen:
test_convergenta(A)
Convergenta nu are loc
99
#07
-2
10
12
-3
3
1
1
0
2
1
1
1
-2
10
12
-3
b =
A =
b =
Testul de convergen:
test_convergenta(A)
Convergenta are loc
3.0000
4.0000
3.0000
4.0000
100
a21
L
an1
0
a22
an 2
0
0
0
0
U
ann
0
a12
0
a1n
a2 n
#07
(7.8)
i n acest caz este necesar ca matricea s fie diagonal dominant pentru a asigura
convergena metodei la soluia exact a sistemului.
Relaia de iteraie se obine astfel:
L U x b
L x U x b L x U x b
(7.9)
Se obine astfel:
L x ( k 1) U x ( k ) b
(7.10)
Sau explicit:
xi( k 1)
i 1
n
1
( k 1)
(k )
bi aij x j aij x j , i 1, 2,.., n; k 0,1, 2,...
aii
j 1
j i 1
(7.11)
101
#07
s1=0;
for j=1:i-1
s1=s1+(A(i,j)*x0(j));
end
s2=0;
for j=i+1:n
s2=s2+A(i,j)*x0(j);
end
x(i)=(b(i)-s1-s2)/A(i,i); %calculare x(i)
end
if max(abs(x-x0))<tol %conditia de oprire a procesului iterativ
nx=k;break;
end
x0=x %afisare sir solutii intermediar la iteratia k
pause
end
x1 2 x2 x3 12
x x 2 x 3
1 2
3
12
-3
3
1
1
0
2
1
1
1
2
A =
102
#07
b =
10
12
-3
Testul de convergen:
test_convergenta(A)
Convergenta are loc
7.0000
-8.0000
7.0000
-8.0000
f1 x1 , x2 ,..., xn 0
f 2 x1 , x2 ,..., xn 0
......
f x , x ,..., x 0
n
n 1 2
(7.13)
unde funciile reale f1, f2, , fn, de variabile reale x1, x2, , xn, sunt continue pe
domeniul de interes, iar cel puin una dintre ele este neliniar.
103
#07
104
#07
x
x1 2 x2 e 2
Se dorete gsirea soluiei plecnd de la aproximaia iniial x0=[-5 -5].
Primul pas, definirea unei funcii MatLab cu definiia sistemului n forma canonic:
function F = f_ex7_4(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
4. Aplicaii de laborator
Aplicaia 7.1. S se studieze sistemul:
8 x1 2 x 2 x3 15
10 x1 4 x2 x3 21
50 x 25 x 8 x 124
1
2
3
Folosindu-se programele iterative, se va observa c nu este asigurat convergena spre
soluia exact a sistemului. Nici dup pivotarea parial nu putem folosi metodele
iterative. Ar fi nevoie de o pivotare total. Rezolvarea a fost ncercata pentru un numr de
iteraii egal cu 500.
A=[8 2 1;10 4 1;50 25 8]
b=[15 21 124]
105
#07
test_convergenta(A)
Convergenta nu are loc
[A,b]=pivotare_partiala(A,b,n)
A =
50
10
8
25
4
2
8
1
1
21
15
25
4
2
8
1
1
21
15
25
4
2
8
1
1
21
15
50
10
8
25
4
2
8
1
1
b =
124
21
15
b =
124
A =
50
10
8
b =
124
A =
50
10
8
b =
124
A =
test_convergenta(A)
Convergenta nu are loc
x0=[3 4 6]
[x,nx]=metoda_jacobi(A,b,x0,0.00001,500)
x0 =
-0.4800
-3.7500 -17.0000
x0 =
7.0750
10.7000
26.3400
x0 =
-7.0844 -19.0225 -63.0000
...
x0 =
1.0e+149 *
-0.3881
-0.7859
-2.3568
x0 =
1.0e+149 *
0.7700
1.5594
4.6765
Warning: One or more output arguments
'metoda_jacobi'.
not
[x,nx]=metoda_gauss_seidel(A,b,x0,0.00001,500)
x0 =
-0.4800
-3.7500 -17.0000
x0 =
7.0750
10.7000
26.3400
x0 =
-7.0844 -19.0225 -63.0000
.....
106
assigned
during
call
to
arguments
not
#07
assigned
during
call
to
Acelai sistem a fost rezolvat cu metoda eliminrii Gauss n laboratorul precedent i s-a
observat c soluia sistemului este: x = 1.0000 2.0000 3.0000
Aplicaia 7.2. S se studieze sistemul: [W.7]
xy z 3 0
x
y2 0
y
yz x 6 0
n vecintatea punctului x0 = 1, y0 = 0, z0 = 1.
Pentru rezolvare se scrie sistemul de ecuaii neliniare sub forma canonic din MatLab:
function f=f_aplic7_2(x)
% x,y,z sunt reprezentate de x(1), x(2), x(3)
f(1)=x(1)*x(2)+x(3)+3;
f(2)=x(1)/x(2)-x(2)+2;
f(3)=x(2)*x(3)+x(1)-6;
Se rezolv sistemul:
sol=fsolve('f_aplic7_2',x0,optimset('fsolve'))
Se obine soluia:
Optimization terminated successfully:
First-order optimality is less than options.TolFun.
sol =
6.0000 -0.0000 -3.0000
Dac se dorete setarea anumitor parametri la alte valori dect cele implicite, se apeleaz
funcia optimset, nainte de a rezolva sistemul:
options=optimset('TolX',10^(-12),'TolFun',10^(-9));
107
#07
Se obine:
Optimization terminated successfully:
First-order optimality is less than options.TolFun.
so1m =
6.0000 -0.0000 -3.0000
feval =
1.0e-011 *
0.1147 -0.1851 -0.1671
exitflag = 1
output =
iterations: 9
funcCount: 36
algorithm: 'trust-region dogleg'
firstorderopt: 1.3746e-011
Interpretare: Metoda a convers ctre o soluie; soluia s-a obinut cu o eroare a funciei (f)
de ordinul 10-11, dup 9 iteraii, n care s-au efectuat 36 de evaluri ale funciei; algoritmul
utilizat este algoritmul trust-region dogleg (metoda este o mbuntire a metodei lui
Newton, pentru cazul n care aproximarea iniial este mai departe de soluie, respectiv
cazul n care Jacobianul sistemului este singular).
108