Sunteți pe pagina 1din 50

Algebra matriceala in Matlab

Operatii cu matrice si functii aplicate


asupra matricelor
Transpusa

Matlab - A
Pentru matrice cu numere complexe:
Y

Produsul scalar (cu punct)

dot(A,B) =

Problema: calculul centrului de masa


al unui sistem

1:
2: Intrari:
localizarea pe fiecare dintre cele 3 axe x, y, z a componentelor sistemului
masa fiecarei componente
Iesiri: pozitia centrului de masa
Suportul teoretic al problemei (exemplu pentru 3 puncte)

Un caz particular

Solutia Matlab pt cazul particular


mass = [3.5, 1.5, 0.79, 1.75];
x = [0.1, 1, 1.5, 2];
x_bar = dot(x,mass)/sum(mass)
y = [2, 1, 0.2, 2];
y_bar = dot(y,mass)/sum(mass)
z = [3, 1, 0.5, 4];
z_bar = dot(z,mass)/sum(mass)

Reprezentarea grafica a solutiei


plot3(x,y,z,'o',x_bar,y_bar,z_bar,'s')
grid on
xlabel(axa x')
ylabel(axa y')
zlabel(axa z')
title(Centrul de masa')
axis([0,2,0,2,0,4])

Aflarea unghiului dintre 2 vectori

Vector Matlab

Solutia Matlab
%Calculul modului fiecarui vector
mag_A = sqrt(sum(A.^2));
mag_B = sqrt(sum(B.^2));
%Cosinusul unghiului
cos_theta = dot(A,B)/(mag_A*mag_B);
%\unghiul
theta = acos(cos_theta);
%Afisarea rezultatului
fprintf(Unghiul dintre cei 2 vectori este de %4.3f radiani
\n',theta)
fprintf(sau %6.2f grade \n',theta*180/pi)

Inmultirea matricelor
A*B
dot(A(i,:),B(:,j)) cu i=1:n, j=1:m
For i=1:n
For j=1:m
For k=1:p
c(i,j) = c(i,j) + a(i,k)*b(k,j)

End

End

End

Gasirea centrului de masa cu ajutorul


inmultirii matricelor
coord = [ X;
Y;
Z]

Coord_centru=coord*mass/sum(mass)

Alte operatii
Ridicarea la putere a matricelor:
n=m
A^k diferit de A.^k

Inversarea
A^-1
inv(A)

Gasirea determinantului
det(A)

Problema: Gasirea tensiunii in fiecare


nod dintr-un circuit electric elementar

Solutia Matlab
clear
V_1= 2;
R_1= 330;
R_2= 70;
R_3= 160;
R_4= 270;
B=[1/R_1+1/R_3+1/R_4 -1/R_3 ; ...
-1/R_3 1/R_3+1/R_2]
A=[V_1/R_1; V_1/R_2]
C=inv(B)*A

fprintf('\nDeasupra diagonalei principale strict(pe linii):\n');


for i=1:n-1
for j=i+1:n
fprintf('%f;', a(i,j));
end
end
fprintf('\nDeasupra diagonalei principale strict(pe coloane):\n');
for j=2:n
for i=1:j-1
fprintf('%f;', a(i,j));
end
end
fprintf('\nSub diagonala principala strict(pe linii):\n');
for i=2:n
for j=1:i-1
fprintf('%f;', a(i,j));
end
end
fprintf('\nSub diagonala principala strict(pe coloane):\n');
for j=1:n-1
for i=j+1:n
fprintf('%f;', a(i,j));
end
end

Parcurgeri

for i = 1: floor(n/2)
for j = i: n-i
fprintf('%.0f;', a(i,j));
end
for j = i:n-i
fprintf('%.0f;', a(j,n-i+1));
end
for j = n-i+1:-1:i+1
fprintf('%.0f;', a(n-i+1,j));
end
for j = n-i+1:-1:i+1
fprintf('%.0f;', a(j,i));
end
end

Parcurgerea
in spirala

Dreptunghi de stelute
rows = 3;
columns = 5;
% parcurg liniile
for i = 1:rows
% pentru fiecare linie afisez mai multe * si un \n
for j = 1:columns
fprintf('*')
end
fprintf('\n')
end

Arbore de stelute
for i = 1:inaltime
for j = 1 : inaltime-i+1
fprintf(' ')
end
for j = inaltime-i+2:inaltime+i
fprintf('*')
end
%optional
for j = inaltime+i+1 : 2*inaltime
fprintf(' ')
end
fprintf('\n')
end

Suma elementelor pe coloane


function outsum = matcolsum(mat)
% gaseste suma fiecare coloane dintr-o matrice
% Intoarce un vector de elemente suma
% Format: matcolsum(matrix)
[row, col] = size(mat);
% Prealoc vectorul suma
outsum = zeros(1,col);
% Fiecare coloana este insumata
% Se itereaza pe coloane
for i = 1:col
% Initializare suma pt fiecare coloana
runsum = 0;
for j = 1:row
runsum = runsum + mat(j,i);
end
outsum(i) = runsum;
end
end

Suma elementelor pe coloane 2


function outsum = matcolsum_var(mat)
% matcolsum finds the sum of every column in a matrix
% Returns a vector of the column sums
% Format: matcolsum(matrix)
[row, col] = size(mat);
% Preallocate the vector to the number of columns
outsum = zeros(1,col);
% Every column is being summed so the outer loop
% has to be over the columns
for i = 1:col
outsum(i) = sum(mat(:,i));
end
end

Suma elementelor pe coloane 3


function outsum = matcolsum_var(mat)
% matcolsum finds the sum of every column in a
matrix
% Returns a vector of the column sums
% Format: matcolsum(matrix)
outsum = sum(mat(:,:));
end

Produsul vectorial

cross(A, B)

Aflarea momentului unei forte fata de


un punct

Solutia Matlab
%Momentul fata de un punct
%Definirea vectorului de pozitie
r = [12/sqrt(2), 12/sqrt(2), 0];
%Definirea vectorului fortelor
F = [-100, 20, 0];
%Calcularea momentului
moment=cross(r,F)

Rezolvarea sistemelor de ecuatii liniare

Solutia utilizand inversarea matricii


(nerecomandata)

Solutia utilizand eliminarea gaussiana

Solutia folosind functia rref

Matrice speciale

8
3
4

ones
zeros
eye
magic
1
5
9

6
7
2

Functii logice
Find identifica intr-o matrice elementele ce
indeplinesc un anumit criteriu
Exemplu:
inaltimi = [63,67,65,72,69,78,75]
accept = find(inaltimi>=66 )
accept -> [67, 72, 69, 78, 75] -> NU
accept -> [2, 4, 5, 6, 7] -> corect
vector_inaltimi = inaltimi(accept) -> 67, 72, 69, 78,
75

Functii logice (2)


inaltimea(inch)

varsta

applicants = [ 63, 18; 67, 19; 65, 18; 72, 20; 69, 36; 78,
34; 75, 12]
pass = find(applicants(:,1)>=66 & applicants(:,2)>=18
& applicants(:,2) < 35)

Functii logice (3)


temp =
95.3000 100.2000 98.6000
97.4000 99.2000 98.9000
100.1000 99.3000 97.0000
element = find(temp>98.6)
[row, col] = find(temp>98.6)

S se sorteze n ordine descresctoare


elementele vectorului , cu precizarea indicelui
fiecrui element
>> x=[-0.76 -1 20 8 -7];
>> [y,I]=sort(x,descend);
S se determine indicii elementelor din
vectorul dat, a cror valoare este egala cu -1
>> x=[-0.76 -1 -6 8 -1];
>> u=find(x==-1);

Calcul simbolic
>> solve('x^2-2*x+1')
ans =
1
1
>> sym x^2-2*x+1
ans =
x^2 - 2*x + 1
>> solve(ans)
ans =
1
1

Aplicatii

Seria armonica alternanta

1) Cerinta problemei: Calculati termenii unei


serii armonice alternante si valoarea sumei
seriei pana cand aceasta converge catre valori
ce variaza cu mai putin de 0.001. Comparati
rezultatul cu logaritmul natural din 2.

2) Descrierea intrarilor si a iesirilor


3) Considerarea unor cazuri particulare
4) Solutia Matlab
clear,clc
% Definirea primilor 2 termeni ai seriei
y(1)=1;
y(2)=-1/2;
% Calcularea primelor doua sume cumulative
total(1)=y(1);
total(2)=total(1) + y(2);
k=3;
while (abs(total(k-1)-total(k-2))>.001)
y(k)=(-1)^(k+1)/k;
total(k) = total(k-1) + y(k);
k = k+1;
end
fprintf(Seria converge cand ultimul element este %8.3f \n',y(k-1))
fprintf(La pasul respectiv valoarea sumei seriei este %5.4f \n',total(k-1))
fprintf(Comparat cu ln(2) ~ , %5.4f \n',log(2))
fprintf(Seria a convers in %3.0f termeni \n',k)
%% Afisarea grafica a rezultatelor
semilogx(total)
title('Valoarea seriei armonice')
xlabel(Numarul de termeni')
ylabel('Suma termenilor')

2x daca x < 10

100 x daca x [10,100)

Se considera functia: f (x ) =
1000 0.5 x daca x [100,1000 )

x daca x 1000

Sa se scrie un program in MATLAB care sa calculeze valoarea functiei


pentru x = 5, pentru x = 50, pentru x = 500 si pentru x = 5000.
>> x=5;
>> if x<10
y=2*x;
elseif x<100
y=100-x;
elseif x<1000
y=1000-x/2;
else
y=sqrt(x);
end
>> y

Raspuns:
y = 10; y = 50; y = 750; y = 70.7107

O sticla cu bere este tinuta afara la o temperatura de 30oC. Exista un


frigider care n interior are temperatura de 10o C. Punem binenteles sticla
n frigider. Dupa cte minute berea ajunge la temperatura de 14oC ca sa o
putem bea? Se cunoaste coeficientul de conductie al caldurii K = 0.05
Notam cu Tf = temperatura din frigider. Daca la momentul t1 temperatura berii
este T1, atunci la momentul ti+1 temperatura va fi Ti+1. Pentru simplificarea
formulei vom considera unitatea de masura a timpului minutul si masuratorile se
vor face din minut n minut. Deci ti+1 ti = 1.
>> k=0.05;
>> Tbf=14;
>> Tbi=30;
>> t=1;
>> Tf=10;
>> while Tbi > Tbf
Tbn=Tbi+k*(Tbf-Tbi);
Tbi=Tbn;
t=t+1;
end
>> t

Ti+ 1 = Ti + K (t i+ 1 t i ) T
in care Tbf = 14oC, Tbi = 30oC, Tf = 10oC
Raspuns:
t = 33
Deci dupa 33 minute putem scoate berea
de la frigider la temperatura de 14oC.

n variabila lungime se afla valoarea numerica a unei masurari de lungime.


Unitatea de lungime cu care s-a facut msurarea poate fi: ft pentru picior, in
pentru inch, m pentru metru si mm pentru milimetru, memorat n variabila
unitate. Sa se creeze o secventa switch-case care pune n lungime_metri valoarea
n metri ai masuratorii (ex: 4.25 ft).
>> lungime = 4.25;
>> unitate='ft';
>> switch unitate
case 'in'
lungime_metri=lungime*0.0254;
case 'ft'
lungime_metri=lungime*0.3048;
case 'm'
lungime_metri=lungime;
case 'mm'
lungime_metri=lungime/1000;
otherwise
lungime_metri=NaN;
end
>> lungime_metri

Raspuns:
lungime_metri: 1.2954

1 inch = 0.0254 m
1 foot = 0.3048 m
1 mm = 0.001 m

n figura alaturata este prezentat un transportor ncarcator. Greutatea acestei


masini este G1=4500N, iar greutatea ncarcaturii este G2=2500N. Care sunt fortele
de reactiune pe axul din fata al masinii (Nf) si pe axul din spate (Ns) al masinii?

Problema este corect formulata. Pentru rezolvare vom observa ca n condiiile n care
transportorul sta pe loc singura miscare ce poate avea loc este o rotatie (de exemplu
greutatea ridicata este prea mare si atunci botul masinii coboara si spatele masinii se
ridica). Aceasta miscare este data de momentele ce sunt create de fortele ce actioneaza.
Deci trebuie sa precizam care sunt ecuatiile de echilibru ale momentelor. Sunt doua
puncte n care aceste momente actioneaza asupra mainii, punctele A si B. ntruct masina
este n echilibru suma momentelor n cele doua puncte este zero. Pentru punctul A avem
ecuatia:
Nf 2a -G1 1.5a -G2 4a = 0
Pentru punctul B obtinem ecuatia: G1 a - Ns 2a G2 4a = 0

Nf =
% date initiale
g1= 4500;
g2= 2500;
% calculul reactiunilor
nf=(g1*1.5+g2*4)/2;
ns=(g1-g2*1.5)/2;
>>nf
>>ns

1,5G1 + 4G2
G 1,5G2
; Ns = 1
2
2

Raspuns:
nf = 6700
ns = 300

n figura alaturata este prezentat un rezervor de gaz lichefiat ce trebuie


proiectat. Volumul rezervorului umplut trebuie sa fie egal cu 500000 litri. Costul
constructiei cupolei este de 500 Euro/m2 iar al partii cilindrice este de 300
Euro/m2. Baza este din beton armat si are suprafata n forma de cerc a carui raza
este cu 1m mai mare dect al cercului de baza al cilindrului si cost 25 Euro/m2.
Etansarea dintre cilindru si baza costa 50 Euro/m. Cteva presupuneri si limitari
sunt necesare:
- datorita suprafetei disponibile raza cilindrului nu poate depasi 8 m;
- limitari tehnice conduc la limita inferioara pentru raza, de 2 m;
- nu sunt permise goluri de aer n rezervor.
In aceste conditii se cere proiectarea
unui rezervor cu cost minim de constructie.

Deci volumul rezervorului este de 500 m3. Dar volumul rezervorului este:
VR

2 3
1500 2 r 3
= r h + r = 500 h =
3
3 r 2
2

Din aceasta formula permitandu-se exprimarea naltimii h n functie de raza r:


Costul constructiei va fi suma a patru costuri: cel al cilindrului, cel al emisferei,
cel al suprafetei de beton si cel al lungimii mbinarii beton-cilindru:
cost = 300 2rh + 500 2 r2 + 25 (r +1)2 + 50 2 r
O prima varianta de rezolvare ar fi sa consideram raza variind din
milimetru n milimetru ntre limitele admise de 2 pna la 8 m. Corespunztor se
afla si h din formula de mai sus. nlocuind obtinem un vector de cost pentru
care calculam minimumul. Scriptul p143v1 n MATLAB este:

% se definesc vectorii r si h
>>r=2:0.001:8;
>>h=(1500-2*pi*r.^3)/3/pi./r.^2;
% se calculeaza vectorul cost
>>cost=300*2*pi*r.*h+1000*pi*r.^2+25*pi*(r+1).^2+100*pi*r;
% se deseneaza graficul costului in functie de raza
>>plot(r,cost)
>>title(Functia cost)
>>xlabel(raza [m])
>>ylabel(costul [euro])
% se calculeaza costul minim, raza si inaltimea corespunzatoare
>>[costmin,indmin]=min(cost);
Raspuns:
>>disp(Costul minim in euro este: )
Costul minim in Euro este:
>>disp(costmin)
>> disp (costmin)
>>disp(Raza minima in metri este: )
1.0812e+005
>>disp(r(indmin))
Raza minima in metri este:
>>disp(Inaltimea minima in metri este: )
>> disp(r(indmin))
>>disp(h(indmin))
4.2040
Inaltimea minima in metri este:
>> disp (h(indmin))
6.2026

Functia cost

x 10

1.7

1.6

costul [Euro]

1.5

1.4

1.3

1.2

1.1
1.0812
1

4 4.2040

5
raza [m]

naltimea si viteza unui proiectil lansat cu viteza initial v0 si cu un unghi


sunt descrise de ecuatia:
1
h(t ) = v 0 t sin gt 2
2
v(t ) = v 20 2v 0 gt sin + g 2 t 2

Proiectilul va atinge solul cnd h(t)=0, ceea ce conduce la timpul de revenire t r:


2v 0
tr =
sin
g
(se egaleaza cu 0 prima ecuatie). Pentru = 40o , v0=20 m/s, si g=9.81 m/s2 ,
determinati timpul cnd naltimea h nu este mai mica de 6m, iar viteza este simultan cel
mult 16 m/s.
>> v0=20; g=9.81; alfa=40*pi/180;
>>
>>
>>
>>
>>
>>
>>

Raspuns:

tr=2*v0*sin(alfa)/g
[0.85,1.78]
t=0:0.01:tr;
v=sqrt(v0^2-2*v0*g*sin(alfa)*t+g^2*t.^2);
h=v0*t*sin(alfa)-0.5*g*t.^2;
u=find (h>6 & v<16)
t1=t(u(1))
(Timpii apartin unui interval dat de primul rang si ultimul
t2=t(u(end)) rang din u. Se determina capetele acestui interval.)

examene
UTDH
10403 - 22 ian 2015, ora 11
10404 - 26 ian 2015, ora 11
IEDM
10503 ultimul curs
10504 ultimul curs
UPP
10304 - vineri 13 feb, ora 11
10305 - vineri 6 feb, ora 11
10306 - 23 ian 2015, ora 11

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