Sunteți pe pagina 1din 12

Laborator 6 – Calcul numeric

Manipularea matricelor

Matlab oferă următoarele funcții pentru manipularea matricelor:


• diag - Creează sau extrage diagonalele matricei;
• fliplr - Rotește matricea în jurul axei verticale (inversează ordinea coloanelor);
• flipud - Rotește matricea în jurul axei orizontale (inversează ordinea liniilor);
• reshape - Schimbă dimensiunile matricei (redimensionează matricea);
• rot90 - Rotește matricea cu un multiplu de 90 de grade;
• tril - Extrage matricea inferior triunghiulară dintr-o matrice;
• triu - Extrage matricea superior triunghiulară dintr-o matrice;
• : - Specifică indicii, rearanjează sau decupează o submatrice.
• reshape - Redimensionează o matrice A cu dimensiunea l×p într-o altă matrice B, cu
dimensiunea m × n. Se apelează cu sintaxa B = reshape(A, m, n).

Analiza matriceală
• det - Calculează determinantul unei matrice;
• inv - Calculează inversa unei matrice;
• rank - Calculează rangul unei matrice;
• trace - Calculează urma unei matrice;
• cond, condest, rcond - Estimează numărul de condiționare al matricei;
• norm - Calculează norma unui vector sau a unei matrice; Se apelează cu una dintre sintaxele:
• norm(X) - returnează cea mai mare valoare singulară a lui X;
• norm(X,1) - returnează norma 1 a lui X (cea mai mare sumă a elementelor de pe
coloană);
• norm(X,inf ) - returnează norma infinită a lul X (cea mai mare sumă a elementelor de pe
linie;
• norm(X,-inf ) - returnează valoarea minimă în modul.
Valori și vectori proprii
În determinarea soluțiilor nebanale ale ecuației:
Ax = λx
unde: A - este o matrice pătratică de ordinul n;
x - este vector coloană de ordinul n;
λ - este un scalar.
valorile x, respectiv λ , care satisfac ecuația de mai sus se numesc vectori proprii, respectiv valori
proprii.
Funcția eig calculează valorile și vectorii proprii ai unei matrice pătrate. Se apelează cu una dintre
sintaxele:
• V=eig(A)-returnează un vector care conține valorile proprii ale matricei A;
• [V,D]=eig(A)-returnează o matrice diagonală D care conține valorile proprii ale matricei A și o
matrice V ale cărei coloane sunt vectorii proprii corespunzători valorilor proprii.

Calculul valorilor singulare


Funcția svd returnează valorile singulare ale unei matrice. Funcția svd se apelează cu una dintre
sintaxele:
• d=svd(X) - returnează un vector care conține valorile singulare;
• [U,S,V]=svd(X) - returnează o matrice diagonală S cu aceleași dimensiuni ca X, având
elementele diagonale nenegative (care sunt și valorile singulare) în ordine descrescătoare și
matricele U și V care satisfac relația: X=U*S*V’
• [U,S,V]=svd(X,0) - efectuează un calcul mai rapid al valorilor singulare.

Descompunerea și factorizarea matricelor


Funcțiile Matlab folosite pentru descompunerea și factorizarea matricelor sunt:
• chol - Calculează factorizarea Cholesky. Se apelează cu una dintre sintaxele: R=chol(A),
respectiv [R,p]=chol(X), unde A este o matrice pozitiv definită, R este o matrice superior
triunghiulară, iar p este un scalar de test, egal cu zero dacă matricea A este pozitiv definită și un
întreg pozitiv în caz contrar;
• lu - Calculează descompunerea LU a matricei;
• qr - Efectuează descompunerea ortogonal-triunghiulară a matricei;
• qz - Calculează descompunerea QZ a matricei;
• pinv - Calculează pseudo-inversa matricei;

Factorizarea Cholesky
Factorizarea Cholesky se calculează cu funcția MATLAB chol și se apelează cu una dintre
sintaxele:
• R=chol(A)
• [R,p]=chol(X)
unde: A - este o matrice pozitiv definită; R - este o matrice superior triunghiulară, astfel încât R’*R=A;
p - este un scalar de test, egal cu zero dacă matricea a este pozitiv definită și un întreg pozitiv în caz
contrar.

Factorizare LU (lower-upper)
Prin factorizarea LU, o matrice pătratică este descompusă sub forma produsului a două matrice
triunghiulare: una inferior triunghiulară, cu elemente 1 pe diagonala principală (matricea L) și cealaltă
superior triunghiulară (matricea U). În Matlab, factorizarea LU este utilizată pentru obținerea inversei
unei matrice cu funcția ’inv’ și pentru calculul determinantului cu funcția ’det’.
Factorizarea LU a unei matrice se face cu funcția lu și se apelează cu una dintre sintaxele:
• [L,U]=lu(X) - returnează o matrice superior triunghiulară U şi o matrice inferior triunghiulară
permutată L, astfel încât X=L*U;
• [L,U,P]=lu(X) - returnează o matrice superior triunghiulară în U,inferior triunghiulară în L şi
permutare matriceală în P, astfel încât L*U=P*X.

Factorizarea QR
Factorizarea QR este o descompunere a unei matrice ca produs al unei matrice ortonormale, Q,
cu o matrice superior triunghiulară, R.
Descompunerea ortogonal-triunghiulară (factorizarea QR) se realizează cu funcția qr și se
apelează cu una dintre sintaxele:
• [Q,R]=qr(X) - returnează matricea triunghiular superioară R de aceeași dimensiune cu X și
matricea Q, astfel încât X=Q*R;
• [Q,R,E]=qr(X) - returnează matricea permutată E a matricei superior triunghiulare R, cu
elementele diagonalei descrescătoare și matricea Q, astfel încât X*E=Q*R. triu(qr(X))=R.
Exemplu: Se consideră matricea pătratică de ordinul 3:

( )
13 −10 12
A= −11 14 10
0 12 −13
Să se determine:
a) valorile proprii ale matricei A;
b) pentru fiecare valoare proprie a lui A câte un vector propriu unitar;
c) valorile singulare ale matricei A;
d) numărul de condiționare în raport cu inversarea al matricei A.
Soluție: Se execută următoarea secvență de program Matlab:
clear, clc
A=[13 -10 12; -11 14 10; 0 12 -13];

disp('valorile proprii ale lui A:')


lambda=eig(A)

% determinarea vectorilor proprii unitari


[vec,val]=eig(A);
for i=1:3
disp(['vectorul propriu unitar corespunzator valorii
proprii '...
num2str(lambda(i)) ': '])
disp(vec(:,i))
end

% calculul valorilor singulare


disp(blanks(1)')
disp('Valorile singulare ale lui A:')
val_sing=svd(A)

% calculul numarului de conditioanare


disp(blanks(1)')
disp('Numarul de conditionare in raport cu inversarea al
lui A')
nr=cond(A)

Observații:
1. Funcția Matlab num2str convertește un număr în șirul de caractere format din cifrele și punctul
zecimal al numărului respectiv.
2. Apelul disp(blanks(n)’) unde n este un număr natural nenul, determină afișarea a n linii goale.

Rezolvarea ecuațiilor algebrice

Se numește ecuație algebrică (în necunoscuta x) o ecuație de forma:


f(x) = 0
unde f este un polinom nenul, sau o ecuație reductibilă (prin operații algebrice) la aceasta. Dacă
polinomul f este de grad n, se spune că gradul ecuației algebrice este n. Rădăcinile polinomului f se
numesc soluțiile ecuației algebrice f(x)=0. De obicei interesează determinarea soluțiilor reale ale unei
ecuații algebrice.
A rezolva ecuația de mai sus înseamnă a determina rădăcinile polinomului, În Matlab se folosește
funcția roots, care folosește ca argument vectorul coeficienților polinomului. Funcția roots returnează
soluțiile în mulțimea numerelor complexe ale ecuațiilor algebrice (respectiv, toate rădăcinile
polinoamelor).

Exemplu 1: Să se rezolve ecuația algebrică:


x3−3 x2− x+3=0
Soluție: Se execută următoarea secvență de program Matlab:
c=[1 -3 -1 3]; % vectorul coeficientilor
disp('Solutiile ecuatiei: '), sol=roots(c)

Soluțiile ecuației: x1=3, x2=-1 şi x3=1. Se observă că această ecuație are doar soluții reale.

Exemplu 2: Să se rezolve ecuația algebrică:


2x+3=6+ √ x −1 în mulțimea numerelor reale.
Soluție: Rezolvarea problemei constă din parcurgerea următoarelor etape:
1. Se separă într-un membru al ecuației radicalul, ceilalți termeni grupându-se în celălalt membru.
Ecuația devine:
2x−3=√ x−1
Examinând ecuația de mai sus, rezultă următoarele observații:
• condiția de existență a radicalului este: x ≥1;
• radicalul unui număr real este pozitiv, în particular, membrul drept este pozitiv; prin urmare și
membrul stâng trebuie să fie pozitiv, adică: x ≥1.5.
Concluzia: soluțiile trebuie să aibă valori mai mari sau egale cu 1.5.
2. Se aduce ecuația la forma f(x) = 0, cu f – polinom, prin ridicare la putere și mutarea tuturor
termenilor în membrul stâng. Se obține:
4x2−13x+10=0
3. Se rezolvă ecuația de mai sus în mediul Matlab și se extrag acele rezultate care îndeplinesc condiția
obținută la etapa 1. În acest scop se execută următoarea secvență de cod Matlab:
rad=roots([4 -13 10]);
sol=[];
fori=1:length(rad)
ifimag(rad(i))==0 & rad(i)>=1.5
sol=[sol rad(i)];
end
end
disp('Solutiile ecuatiei algebrice:')
format short g
sol

Soluțiile ecuației algebrice: sol = 2. Adică, ecuația are o singură soluție reală, și anume: x = 2.

Exemplu 3: Să se determine soluțiile real strict pozitive (Re xi>0) ale ecuației algebrice:
−45x2+x7+11x3+x6+4x4−50x−2x5=0

Soluție: Se execută următoarea secvență de program Matlab (de exemplu, fișier M):
% vectorul coeficienților ecuației
c=[1 1 -2 4 11 -45 -50 0];

% rezolvarea ecuatiei in C
rad=roots(c);

% extragerea soluțiilor cu partea reala >0


j=1;
for i=1:length(rad)
if real(rad(i))>0
sol(j)=rad(i); j=j+1;
end
end

disp('Solutiile care au partea reala strict


pozitiva: ')
sol

Exerciții rezolvate:

1. Să se selecteze elementele de pe pozițiile 3-5 și 2,4,6 ale vectorului A =[2; 4; 7; 3; 5; 1; 0].

A=[2;4;7;3;5;1;0];
disp(A);
disp('Afisare de la 3-5:');
disp(A(3:5));
disp('Afisare 2,4,6:');
disp(A(2));
disp(A(4));
disp(A(6));
2. Fie matricea

( )
1 2 3 4 5 6
2 3 4 5 6 1
A= 3 4 5 6 1 2
4 5 6 1 2 3
5 6 1 2 3 4

Să se scrie instrucțiunile care permit selectarea din matricea A a:


• liniei a 2-a; coloanei a 3-a;
• submatricei formată din liniile 1-2 și coloanele 4-6;
• submatricei formată din liniile 1,2 și coloanele 2,4,5;

A=[1 2 3 4 5 6; 2 3 4 5 6 1; 3 4 5 6 1 2; 4 5 6 1 2 3; 5 6 1 2 3 4];
disp('Linia a 2-a');
disp(A(2,1:6));
disp('Coloana a 3-a');
disp(A(1:5,3));
disp('Submatricea formata din liniile 1-2 si coloanele 4-6');
disp(A(1:2,4:6));
disp('Submatricea formata din liniile 1-2 si coloanele 2,4,6');
disp(A(1:2,[2,4,6]));
3. Fie matricea:
1 4 7 10
𝐴 = (2 5 8 11)
3 6 9 12

Să se redimensioneze matricea A cu dimensiunea 3 × 4 într-o matrice B cu dimensiunea 2 × 6. Să se rotească


matricea A:
• în jurul unei linii;
• în jurul unei coloane;
• cu 90 de grade în sens trigonometric;
• cu 180 de grade în sens orar;
• să se aplice funcțiile diag, tril și triu matricei de mai sus.

A=[1 4 7 10;2 5 8 11;3 6 9 12];


disp('A=');
disp(A);
B=reshape(A,2,6)
C=fliplr(A);%inverseaza ordinea coloanelor
disp('C=');
disp(C);
D=flipud(A);%inverseaza ordinea liniilor
disp('D=');
disp(D);
E=rot90(A); % roteste matricea un 90 de grade in sens trigonometric
disp('E=');
disp(E);
% rotirea matricii cu 180 de grade in sens orar
D=rot90(A);
F=rot90(D);
disp('F=');
disp(F);
% functia diag
disp('functia diag: G=');
G=diag(A);
disp(G);
% functia tril
disp('functia tril: H=');
H=tril(A);
disp(H);
% functia triu
disp('functia triu: I=');
I=triu(A);
disp(I);
4. Calculați determinanții următoarelor matrice:

1 2 3
1 4
𝐴=( )și 𝐵 = (4 5 6)
3 4
7 8 9

Calculați inversa matricei A și urma matricei B. Aplicați funcțiile norm, norm(X,1), norm(X, inf ),
norm(X, -inf ) matricei B. Calculați rangul matricei B.
A=[1 4;3 4]
B=[1 2 3;4 5 6;7 8 9]
C=det(A);
disp('Determinentaul matricii A este: ');
disp(C);
D=det(B);
disp('Determinentaul matricii B este: ');
disp(D);
%inversa matricii A
disp('inversa matricii A=');
E=inv(A);
disp(E);
% Transpusa matricii B
disp('inversa matricii B=');
F=trace(B);
disp(F);

% norma matricii B

% Returneaza cea mai mare valoare singiulara a lui B


G=norm(B);
disp('Returneaza cea mai mare valoare singiulara a lui B: ');
disp(G);
% Returneaza cea mai mare suma a elementelor de pe linie
H=norm(B,1);
disp('Returneaza cea mai mare suma a elementelor de pe linie: ');
disp(H);
% Returneaza norma infinita a lui B (cea mai mare suma a elem de pe
coloana)
I=norm(B,inf);
disp('Returneaza norma infinita a lui B : ');
disp(I);
% Returneaza valoarea minima in modul
J=norm(B,-inf);
disp('Returneaza valoarea minima in modul');
disp(J);
% Rangul matricii B
disp('Rangul matrici b este: ');
K=rank(B);

disp(K);

5. Se consideră matricile
1 2 3
𝐴 = (4 5 6)
1 2 3
7 8 0
𝐵 = (4 5 6)
7 8 0

Să se factorizeze LU respectiv QR aceste matrice. Să se calculeze pseudoinversele lor.

A=[1 2 3;4 5 6; 7 8 0]
B=[1 2 3; 4 5 6;7 8 0]
% Factorizare LU (lower-upper)
disp('Factorizarea LU: ');
disp('Metoda I');
disp('Pentru A:');
[L,U]=lu(A);
disp(U);
disp('Pentru B:');
[L,U]=lu(B);
disp(U);

disp('Metoda a II-a');
disp('Pentru A:');
[L,U,P]=lu(A);
disp(U);
disp('Pentru B:');
[L,U,P]=lu(B);
disp(U);

% Factorizare QR
disp('Factorizarea QR: ');
disp('Metoda I');
disp('Pentru A:');
[Q,R]=qr(A);
disp(R);
disp('Pentru B:');
[Q,R]=qr(B);
disp(R);

disp('Metoda a II-a');
disp('Pentru A:');
[Q,R,E]=qr(A);
disp(R);
disp('Pentru B:');
[Q,R,E]=qr(B);
disp(R);

% Pseudo-inversa matricii A
M=pinv(A);
disp('Pesudo-inversa amtricii A: ');
disp(M);

% Pseudo-inversa matricii B
N=pinv(B);
disp('Pesudo-inversa amtricii B: ');
disp(N);

6. Să se rezolve ecuația algebrică:

% Solutiile ecuatiei
A=[1 2 4 2 0]; % vectorul coeficientilor
disp('Solutiile ecuatiei algebrice 2: ');
rad=roots(A);
sol=[];
for i=1:length(rad)
if imag(rad(i))==0 & rad(i)<=1
sol=[sol rad(i)];
end
end
disp(sol);

TEMĂ – termen de transmitere 14.04.2021


1. Determinați valorile și vectorii proprii ai matricei

−2 1 0
𝐵 = ( 1 −2 1 )
0 1 −2

1 5
2. Să se descompună în valori singulare matricea A= 4 3 , folosind ambele apeluri ale functiei svd.

3. Calculați factorul Cholesky al matricei:

9 1 −1 0
1 9 0 −1
𝐴=( )
−1 0 9 1
0 −1 1 9
4. Să se rezolve ecuația algebrică:

x3−2x2−3x+10=0, x ∈C

S-ar putea să vă placă și