Documente Academic
Documente Profesional
Documente Cultură
Operaţia de eliminare este însoţită, dacă este necesar, de permutarea liniilor implicate, pentru a
aduce pivotul în poziţia (k,k). Transformările elementare de echivalenţă afectează şi termenul
liber al sistemului, în mod corespunzător.
II. Rezolvarea sistemului triunghiular obţinut prin substituţie inversă. Permutările de coloane în
etapa I afectează ordinea componentelor vectorului soluţie, deci, în final, este necesara o
reordonare a acestora. Uzual, calculele au loc "pe loc", matricea A şi termenul liber b - iniţiale
distrugându-se .
În realizarea programului se vor parcurge următoarele etape, descrise parţial în limbajul pseudocod:
4. Alocare spaţiu de memorie pentru termenul liber al sistemului, în variabila b, prin iniţializarea
acesteia cu un vector coloană nul, cu n componente. Introducerea elementelor termenului liber al
sistemului se face pe linii. Salvarea valorilor din vectorul b:
ATRIBUIE bb ← b
1
5. Faza I : eliminarea înainte cu pivotare totală:
* Pivotare parțială:
ATRIBUIE L ← eye(n)
┌ PENTRU k = 1, n-1 EXECUTĂ
│ ATRIBUIE [ml, ik] ← max( abs( a(k:n,k) ) )
│ ATRIBUIE ik ← ik + (k - 1)
│ ┌ DACĂ ( ik ~= k ) ATUNCI
│ │ ATRIBUIE wmx ← zeros(1,n)
│ │ ATRIBUIE wmx ← a(k,:)
│ │ ATRIBUIE a(k,:) ← a(ik,:)
│ │ ATRIBUIE a(ik,:) ← wmx
│ │ ATRIBUIE t ← b(k)
│ │ ATRIBUIE b(k) ← b(ik)
│ │ ATRIBUIE b(ik) ← t
│ └
│* Triangularizare
│
│ ┌ DACĂ ( abs(a(k,k)) > EPS ) ATUNCI
│ │ ATRIBUIE a(k+1:n, k) ← a(k+1:n, k) / a(k, k)
│ │ ATRIBUIE a(k+1:n,k+1:n) ← a(k+1:n, k+1:n) - a(k+1:n,k) * a(k,k+1:n)
│ │ ATRIBUIE temp ← eye(n)
│ │ ATRIBUIE temp (k+1:n, k)← a(k+1:n, k)
│ │ ATRIBUIE L ← L*temp
│ │ ATRIBUIE b(k+1:n) ← b(k+1:n) - a(k+1:n, k) * b(k)
│ │ ATRIBUIE a(k+1:n, k) ← zeros(n-k, 1)
│ │ALTFEL
│ │ SCRIE 'pivot nul sau foarte mic'
│ │ SCRIE 'STOP: algoritm'
│ │ * STOP program (funcţia MATLAB: return)
│ └
│SCRIE 'k = ', k
│SCRIE ‘inversa matricii Gauss de transformare = ‘, temp
│SCRIE ‘L = ‘, L
│SCRIE 'a = ', a
│SCRIE 'b = ', b
└
6. Faza a-II-a : calcul soluţie sistem
* Substituţia înapoi :
┌ PENTRU i = 1, n EXECUTĂ
│ ┌ DACĂ ( abs(a(i,i)) < EPS ) ATUNCI
│ │ SCRIE 'matrice prost conditionata'
└ └
ATRIBUIE b(n) ← b(n) / a(n,n)
┌ PENTRU i = n-1, -1 ,1 EXECUTĂ
│ ATRIBUIE sum ← a(i, i+1:n) * b(i+1:n)
│ ATRIBUIE b(i) ← (b(i) - sum) / a(i,i)
└
ATRIBUIE x ← b
7. Calcul soluţie folosind funcţiile MATLAB, pentru comparaţie :
2
ATRIBUIE x_bs ← aa \ bb
ATRIBUIE x_inv ← inv(aa) * bb
8. Afişare soluţii : x, x_bs, x_inv (mod de afişare MATLAB dat de funcţia : format long e;) .
9. Calcul reziduuri asociate soluţiilor calculate, precum şi norme euclidiene :
ATRIBUIE r ← bb-aa*x
ATRIBUIE nr ← norm(r,2)
ATRIBUIE r_bs ← bb - aa*x_bs
ATRIBUIE nr_bs ← norm(r_bs,2)
ATRIBUIE r_inv ← bb - aa*x_inv
ATRIBUIE nr_inv ← norm(r_inv,2)
Afişare nr, nr_bs, nr_inv (mod de afişare MATLAB dat de functia : format long e;) .
10. Reluare program, dacă se doreşte, cu alt termen liber (punctul 4). Dacă are loc reluarea, înainte
de aceasta se reface matricea a:
ATRIBUIE a ← aa
11. Reluare program, dacă se doreşte, cu alt sistem de acelaşi ordin, n (punctul 3).
12. Reluare program, dacă se doreşte, cu un sistem de alt ordin, n (punctul 2).
13. Reluare program, dacă se doreşte, cu alt parametru EPS (punctul 1) .
OBSERVAŢII :
1. Descrierea anterioară a programului de realizat foloseşte următoarele funcţii MATLAB: max,
zeros, abs, return, \, inv, norm.
2. Se recomandă următoarea modalitate generală de introducere a unei matrici, pe linii (n linii, m
coloane), în variabila a:
* secvenţa de comenzi MATLAB :
a = zeros(n,m);
for i=1:n,
fprintf('linia %g:',i);
a(i,:) = input(' ');
end;
linia 1:
[1 2 3] <ENTER>
linia 2:
[4 5 6] <ENTER>
linia 3:
[7 8 9] <ENTER>
S-au subliniat mesajele afişate de către program; <ENTER> semnifică apăsarea tastei respective.
3. Programul se va rula pentru următoarele date de intrare (rezultatele se vor nota şi comenta) :
EPS = 1.e-10
3
10 − 7 0 7
I.) n = 3; a = − 3 2.099 6; b = 3.901
5 − 1 5 6
3 2 100 105
II.) n = 3; a = − 1 3 100; b = 102
1 2 − 1 2
0.03 0.02 1 1.05
n = 3; a = − 0.01 0.03 1 ; b = 1.02 (acelaşi exemplu cu scalare pe linii)
0.5 1 − 0.5 1
1 −2 3 5
III.) n = 3; a = 2 4 − 1; b = 7 ;
− 1 − 14 11 2
0 2 0 1 7
2 2 3 2 − 2
IV.) n = 4; a = ;b =
4 − 3 0 1 − 7
6 1 − 6 − 5 6