Sunteți pe pagina 1din 34

Laborator 2

MATLAB

matrici
operatori logici si relationali
instructiuni de control
Vectori

Scrieti utmatoarele comenzi ptr a crea vectorii:
X= [1 2 3 4 5] Y=[6; 7; 8; 9; 10] size(Y) Z= Y’ size(Z)
W=[X Z] T=[ X; Z] M = [2 : 0.5 : 4]

Selectia din vector:
a=W(5) b =W(5:9) c=W(2:2:8) d= W([3 5 2 9])

Folosind operatorul : creati vectorii v1,v2,v3 si v4 :
1) 2, 4, 6, 8,...100 dar cu functia linspace()
2) 50, 48, 46,...-50
3) 1, 1/2, 1/3,...1/100
4) 0, 1/2, 2/3, 3/4...99/100
5)Folosind end (ultimul index al unui vector/matrice)
ptr un anumit vector, afisati vectorul elementelor
impare si vectorul elementelor in ordine inversa.
Ptr matricea M de la a) inversati coloanele, apoi liniile.
Vectori - Rezolvare

1)>> v1= 2:2:100 sau


>> v1 =linspace(2,100,50)

2)>> v2=50:-2:-50
3)>> vt=1:100; v3=1./vt
4)>> vr=0:99; vp=1:100; v4=vr./vp
5)>> v5=1:100; vi=v5(1: 2: end)
>>vinv=v5(end: -1: 1)
>> [nl,nc]=size(M) cc=M(:, nc:-1:1) ll=M(nl:-1:1, :)
Matrici

Se da matricea M = [1 2 3 4;
2 4 6 8;
-1 -2 -3 -4;
0 5 0 7]

• Sa se extraga elementul de pe linia 1 si coloana 3-a


• Prima linie
• Coloana a 2-a
• Submatricea determinata de liniiele 1, 2 si 4 si de
coloanele 2, 3 si 4
Matrici- Rezolvare

Introducerea matricei M:
>> M=[1 2 3 4; 2 4 6 8; -1 -2 -3 -4; 0 5 0 7];

Extragerea elementului de pe linia 1 şi coloana 3:
>> M(1,3) ans=3

Extragerea primei linii:
>> M(1,:) ans= 1 2 3 4

Extragerea coloanei a 2-a:
>> M(:,2) ans= [2; 4;-2; 5]

Extragerea submatricei determinată de liniile 1,2 şi 4 şi
de coloanele 2, 3 şi 4:
>> M([1,2,4],2:4) ans=[2 3 4; 4 6 8; 5 0 7]

Matricea M nefiind reatribuita in mod explicit, nu a fost


afectata de niciuna din operatiile de mai sus: >>M
Matrici

Creati urmatoarea matrice :

M= 1 2 3 4 5
11 12 13 14 15
21 22 23 24 25

Scrieti comanda ce va inlocui elementele din liniile 1 si 2


si coloanele 1 si 2 din matricea M cu valoarea 5

M= 5 5 3 4 5
5 5 13 14 15
21 22 23 24 25
Matrici- Rezolvare


Cream vectorul v :
>> v=[1 2 3 4 5]

Cream matricea M:
>> M = [v ; v+10; v+20;]

Extragerea primei linii:
>> M(1:2, 1:2) =5
Generarea matricilor cu numere aleatoare
Utilizand:
functia rand, pentru numere aleatoare, cu distributie
uniforma in intervalul (0,1) sau
functia randn, pentru numere aleatoare cu distributie
normala (Gaussiana), de medie zero si varianta unu.
functia randi pentru numere intregi intr-un anumit
interval ( ultimul parametru specificand dimensiunea)
Instructiunile pentru generarea matricelor cu numere
aleatoare au formele :
x = rand(n), y = rand(m,n), z = rand(size(A)),
v=randi([5,10] ,n) sau vv = randi([5,10], m,n)
unde m si n sunt scalari, iar A este o matrice oarecare.

Alte functii de generare a matricilor :magic(n), pascal(n)


Concatenarea matricilor
>> ra=randi([5,15], 3)
>>rra=randi([20,50], 3,6)
>> x= rand(3)*10
>> y=rand(3)*100
>> z=[x,y]
>> w=[x;y]
>> xx=horzcat(x,y)
>>yy=vertcat(y,x)

>> a= magic(3)
>> aa= rand(3,4)
>> b=rand(3,5)
>> bb=rand(4,4)
>> c=[a,b]
>> d= cat(2,a,b)
>> e=horzcat(aa,b,a)
>> f=cat(1,aa,bb)
Matrici

Folosind concatenarea si functiile zeros() , ones() si eye()


generati urmatoarea matrice:
0 0 0 5 0 0
0 0 0 0 5 0
0 0 0 0 0 5
2 0 1 3 3 3
1 1 1 3 3 3
2 2 2 3 3 3
Matrici Rezolvare

>> M=[zeros(3) 5*eye(3); X 3*ones(3)]


Matrici diagonale – functia diag(v,k)

v -vector, specifica vectorul de pe diagonala


k – scalar, specifica distanta de la diagonala
principala, k>0 deasupra diagonalei principale,
k<0 dedesuptul diagonalei principale

0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
-2 0 0 0 0 1
0 -2 0 0 0 0
0 0 -2 0 0 0
Matrici diagonale - Rezolvare diag(v,k)

>> D=-2*diag(ones(1,3),-3)+diag(ones(1,4),2)
Exercitiu 4

• Sa se genereze matricele patratice A si B, de ordinul


4, definite prin relatiile de mai jos. Sa se afiseze suma
lor, produsul lor, cubul matricei A, rezultatul
impartirii la stanga a matricei A prin B si rangul
matricei B. Rezolvarea problemei sa se faca prin
utilizarea unui fisier script
Rezolvare exercitiu 4

Crearea unui fisierul script numit my_opera.m
>> edit my_opera

Scrierea comenzilor in fisierul script
disp('generarea matricei A')
for i=1:4
for j=1:4
A(i,j) = 1/(i+j);
end
end
disp(A)
disp('generarea matricei B')
for i=1:4
for j=1:4
if i==j B(i,j)=1;
elseif i>j B(i,j)=i+j;
else B(i,j)=i-j;
end end end disp(B)
Rezolvare exercitiu 4

% afisarea matricei A
A

% afisarea matricei B
disp('matricea B')
disp(B)

% calculul si afisarea sumei
suma=A+B

% calculul si afisarea produsului
produs=A*B

% calculul si afisarea cubului matricei A
cub_A=A^3

% calculul si afisarea rezultatului impartirii la stanga
disp('Rezultatul impartirii A\B este')
Rez=A\B

% rangul matricei B
rang_B=rank(B)
Rezultat exercitiu 4

Rularea fişierului script se face din linia de comandă:
>> my_opera

A = 0.5000 0.3333 0.2500 0.2000


0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
0.2000 0.1667 0.1429 0.1250
matricea B
1 -1 -2 -3
3 1 -1 -2
4 5 1 -1
5 6 7 1
suma = 1.5000 -0.6667 -1.7500 -2.8000
3.3333 1.2500 -0.8000 -1.8333
4.2500 5.2000 1.1667 -0.8571
5.2000 6.1667 7.1429 1.1250
Rezultat exercitiu 4
produs = 3.5000 2.2833 0.3167 -2.2167
2.7167 1.9167 0.4500 -1.5333
2.2310 1.6405 0.4667 -1.1738
1.8964 1.4310 0.4512 -0.9512

cub_A = 0.4516 0.3263 0.2571 0.2127


0.3263 0.2358 0.1859 0.1538
0.2571 0.1859 0.1465 0.1213
0.2127 0.1538 0.1213 0.1004

Rezultatul impartirii A\B este


Rez = 1.0e+004 *
-0.0600 0.2380 -0.4940 -0.1420
0.4620 -1.5900 3.7980 1.0920
-0.9660 2.8980 -7.7280 -2.2260
0.5880 -1.5680 4.5640 1.3160
rang_B = 4
Exercitiu 5
Scrieti functia care intoarce indicii (linie,coloana) ale
elementului maxim si a celui minim dintr-o matrice:
function[ elemax, lmax, cmax, elemin, lmin, cmin]=tema1(a)
a=input('introduceti matricea a= ')
[r,c]=size(a);
lmin=1; lmax=1; cmin=1; cmax=1;
elemin=a(1,1); elemax=a(1,1);
for i=1:r
for j=1:c
if a(i,j) > elemax
elemax=a(i,j); lmax=i; cmax=j;
end
if a(i,j) < elemin
elemin=a(i,j); lmin=i; cmin=j;
end
end end end
Elemente de algebra vectoriala

Se considera vectorii v si w in spatiul real n-dimensional,
raportat la un sistem ortogonal de coordonate avand versorii
i1, i2, ,,,in


Norma p a (modulul, marimea) vectorului v este :

Daca p=2 avem norma euclideana. Un vectorul al carui


modulul este egal cu 1 – vector unitar sau versor.

Produsul scalar a vectorilor v si w


Prin unghiul intre vectorii v si w se intelege unghiul mic
determinat de sensurile pozitive ale celor doi vectori:
Exercitiu 5

Sa se scrie o functie Matlab care primeste ca argumente doi vectori


de lungimi egale cu 3, v si w, si returnează normele euclidiene ale
vectorilor, produsul lor scalar, produsul lor vectorial si unghiul
dintre cei doi vectori exprimat in radiani.
Rezolvare exercitiu 5
function [n_v,n_w,ps,pv,unghi]=vectori(v,w)
if length(v)~=3 | length(w)~=3
disp('Vectorii nu satisfac conditia de lungime 3!')
n_v=[]; n_w=[]; ps=[]; pv=[]; unghi=[];
return;
end
n_v=norm(v); n_w=norm(w);
ps=dot(v,w); pv=cross(v,w);
if n_v==0 | n_w==0
disp('Unghiul nu poate fi calculat, unul din vectori fiind zero.')
unghi=[];
else
unghi=acos(ps/(n_v*n_w));
end
Testarea programului pentru diferite perechi de vectori:
>> v=[1 -1 3]; w=[0 3 -2];
>> [n_v,n_w,ps,pv,unghi]=vectori(v,w)
Operatori logici/indexare logica - Exercitiul 6

Creati matricile:
A= 1 0 -2 10 0 B= 2 0 -4 20 0
2 0 1 1 1 -10 60 -20 0 2
-1 3 2 0 0 -1 3 2 0 0
-1 2 -2 3 3 -2 6 4 0 0

a) determinati toate elementele pozitive ale lui A


b) determinati elementele lui A egale cu cele din B
c) determinati elementele din A din intervalul (1,20)
d) determinati elementele din A din afara intervalului
(1,20)
Operatori logici- Rezolvare exercitiu 6


Introduceti matricile A si B:
>> A=[1 0 -2 10 0; 2 0 1 1 1; -1 3 2 0 0; -1 2 -2 3 3];
>> B=[2 0 -4 20 0; -10 60 -20 0 2; 4 0 2 2 2; -2 6 4 0 0];

Elementele pozitive din A:
>> A(A>0) incercati si A>0

Elementele egale din A si B
>> A==B A(A==B)

Elementele din A din intervalul (1,20)
>> A((A>1)&(A<20))

Elementele din afara intervalului (1,20)
>> A(~((A>1)& (A<20))) sau A((A<=1)|(A>=20))
Operatori logici- Exercitiu 7

Fie vectorul x=[3 15 9 12 -1 0 -12 9 6 1]

Determinai comanda care:


a) defineste vectorul a obtinut din x prin schimbarea
elementelor pozitive cu 33;
b) defineste vectorul b obtinut din x prin schimbarea
elementelor ce se divid cu 3, cu valoarea 7;
c) defineste vectorul c obtinut din x prin schimbarea
elementelor pare cu valoarea lor multiplicata cu 5;
Operatori logici- Rezolvare exercitiu 7

Introduceti vectorul x:
>> x = [3 15 9 12 -1 0 -12 9 6 1]

a) >> a=x;a(x>0)=33

b) >> b=x;b(~rem(x,3))=7

c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))
Operatori logici
Se da vectorul x=[6 25 1 2 -1 0 -7 50 4 9].
Determinai comanda care:

a) defineste vectorul t obtinut din x prin schimbarea


elementelor ce sunt mai mici ca media elementelor lui x,
cu 100

>> t=x; t(x<mean(x))=100

b)defineste vectorul p obtinut din x prin schimbarea


elementelor ce sunt mai mari decât media elementelor
lui x cu diferenta dintre valoarea lor si medie.

>> p=x; p(x>mean(x))=p(x>mean(x))-mean(x)


Functii relationale si logice
Au caracteristic faptul ca au ca rspuns numai numerele 0
(A) sau 1 (F).
any(v)- raspunde cu 1 daca vectorul v are cel putin un
element nenul si cu 0 daca toate elementele sunt 0.
all(v)-raspunde cu 1 daca toate elementele lui v sunt
nenule si cu 0 daca exista cel putin un element nul.
find(x)-raspunde cu un vector continand indicii
elementelor nenule ale lui x.
isnan(x)- raspunde cu un vector de aceiasi dimensiune cu
x ale carui elemente sunt 1 sau 0 dupa cum elementul
corespunzator al lui x este NaN sau nu.
isfinite(x)-raspunde cu un vector de aceiasi dimensiune ca
x ale carui elemente sunt 1 sau 0 dupa cum elementul
corespunztor al lui x este finit sau nu. NaN este
considerat nefinit.
Functii relationale si logice- Exercitiu 8

Inaltimea si viteza unui proiectil lansat cu viteza initiala


v0 si cu un unghi θ sunt date de:

Proiectilul va atinge solul cand h(t)=0, de unde rezulta


timpul de revenire. Pentru θ = 400 , v0=20 m/s, si g=9.81
m/s2 , determinati timpul cand inaltimea h nu este mai
mica de 6m iar viteza este simultan cel mult 16 m/s.
Functii relationale si logice- Rezolvare exercitiu 8

Definim datele initiale:
>> v0=20;g=9.81;theta=40*pi/180;

Calculam timpul de revenire al proiectilului tg, timpul
unde problema are sens:
>> tg=2*v0*sin(theta)/g % am egalat cu 0 prima ecuatie

Definim intervalul de timp si calculm vitezele si
inaltimile pe acest interval:
>> t=0:0.01:tg;
>> v=sqrt(v0^2-2*v0*g*sin(theta)*t+g^2*t.^2);
>> h=v0*t.*sin(theta)-0.5*g*t.^2;

Determinam cand inaltimea este mai mare 6m si viteza
nu este mai mare de 16 m/s :
>> u=find(h>6&v<16)
Functii relationale si logice- Rezolvare exercitiu 8


In vectorul u se afla indicii elementelor din v si h ce
verifica aceasta conditie. Evident, indicii corespunzatori
din t ne dau timpii in care conditiile sunt indeplinite.
Acesti timpi apartin unui interval dat de primul si
ultimul indice din u.

Determinm capetele acestui interval :
>> t1=t(u(1))
>> t2=t(u(end))

Solutia problemei este intervalul sol= [t1,t2]
>> sol= [0.85, 1.78]
Calculam si salvam- Exercitiu 9

Calculati pozitia si viteza in 5 momente de timp din


intervalul [0,10] sec stiind :

x =x0 +v0t+ at2/2 si v=v0+at

Salvati datele in format ascii in fisierul date.txt


Calculam si salvam in fisier - Exercitiu 9

Definim datele initiale:
>> a = 9.81; x0 = 50; v0 = 0;

Definim vectorul coloana t, ce contine 5 momente de timp
uniform distribuite intre 0 si 10:
>> t=linspace(0,10, 5)’

Calculam pozitiile si vitezele la fiecare moment din t
>>x = x0 + v0*t + 0.5*a*t.^2;
>>v = v0 + a*t;

Introducem o eroare random de 5% - simulam masuratorile
>>x = x.*(0.95 + 0.1*rand(5,1));
>>v = v.*(0.95 + 0.1*rand(5,1));

Salvam in format ascii in fisier. Atentie! in fisierul ascii se poate
salva doar o singura variabila
>> A=[x v];
>>save -ascii date.txt A
De citit si exercitii !

Stormy Attaway, Matlab, A Practical Introduction to Programming


and Problem Solving, 3rd Edition, 2013 Elsevier Inc.

Capitolul 2 - Vectori si Matrici


Sumarul de la paginile 27 si 66

Exercitiile de la sfarsitul Capitolului 2

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