Documente Academic
Documente Profesional
Documente Cultură
CAPITOLUL 1
1.1 Introducere
7
VALER NIMINEł APLICATII 3D
8
VALER NIMINEł APLICATII 3D
9
VALER NIMINEł APLICATII 3D
» (1+sqrt(5))/2
ans =
1.6180
O caracteristică a Matlab-lui este cea a existenŃei spaŃiului de
lucru în care se pot păstra şi regăsi variabilele definite şi valori ale
acestora calculate prin comenzi sau funcŃii Matlab. Fişierele script
au proprietatea că după apelarea şi execuŃia lor, variabilel rămân în
spaŃiul de lucru. Fişierele function au următoarea formă:
function[parametri_iesire] = nume_funcŃie[parametri_intrare].
Aceste fişiere au proprietatea că după executarea lor, variabilele
interne nu răman în zona de memorie a spaŃiului de lucru, ci doar
cele de ieşire.
Programele create în Matlab se scriu cu un editor de text si au
extensia .m.
FuncŃiile recunoscute de acest limbaj sunt grupate în toolbox-uri
specializate pe categorii de probleme din domenii diverse de
activitate. O listare a acestor categorii şi a funcŃiilor
corespunzatoare poate fi facută cu uşurinŃă utilizând comanda help
în fereastra de comanda.
>> help
[lista cu categoriile de funcŃii existente]
Dacă după comanda help se tipareşte numele exact al comenzii sau
funcŃiei care ne intereseazǎ, atunci se vor tipari informaŃiile
corespunzǎtoare acestora existente în meniul help al mediului
Matlab. De asemenea dacǎ sunteŃi conectat la Internet aveŃi şi
posibilitatea de a vi se oferi ajutor online. Dacǎ dupǎ help veŃi
tipǎri numele unui director atunci , atunci se vor afişa fişierele
conŃinute în directorul specificat La apelare nu este necesar sǎ se
scrie întreaga cale a directorului, ultima componentǎ este
suficientǎ.
Matlab utilizeazǎ deasemenea câteva funcŃii de control general :
10
VALER NIMINEł APLICATII 3D
11
VALER NIMINEł APLICATII 3D
addpath /home/me/mytools
se adaugă un director de instrumente proprii pentru calea implicită
de căutare.
Pe platformele Windows, fişierul startup.m se plasează în
directorul local din directorul toolbox.
17
Variabila ans se creeazǎ în momentul în care expresiei nu îi este
asociatǎ nici o variabilǎ.
» x=sin(2)
x =
0.9093
Dacǎ nu este necesarǎ afişarea variabilei de ieşire, putem folosi
semnul ; dupa tastarea expresiei :
12
VALER NIMINEł APLICATII 3D
» y=3*exp(x)+cos(x);
Virgula se poate folosi în situaŃia în care avem mai multe expresii
pe aceeaşi linie de intrare, pentru a le separa :
» x=sin(22), y=exp(3)
x =
-0.0089
y =
20.0855
Dacǎ expresia este prea lungǎ pentru ca declaraŃia sǎ încapǎ pe o
singurǎ linie, se utilizeazǎ semnele….urmat de enter pentru a
preciza cǎ instrucŃiunea continuǎ şi pe linia urmǎtoare. Exemplu
S=1+2+3+….
+4+5+6 ;
In Matlab existǎ cateva variabile şi constante speciale, ale cǎror
nume e bine sǎ nu le întrebuinŃǎm în alte asocieri de variabile. O
parte din acestea ar fi :
• ans- variabilǎ creatǎ automat, în care este returnat rezultatul
unui calcul, atunci când expresia nu a avut asignat un
nume ;
• eps- variabilǎ permanentǎ în care este memoratǎ eroarea
relativǎ pentru calculele efectuate în virgulǎ mobilǎ.
Valoarea implicitǎ este eps=2.2204e-016, dar poate fi
redefinitǎ la orice altǎ valoare ;
• pi- variabilǎ permanentǎ care are asignatǎ valoarea
3.14159265358 ;
• i = − 1 - variabilǎ folositǎ pentru introducerea numerelor
complexe ;
• j = − 1 - alternativǎ la utilizarea nitǎŃii imaginare i;
• inf- variabilǎ folositǎ pentru reprezentarea lui plus infinit în
artitmetica IEEE (rezultat al împǎrŃirii la zero) ;
• NaN- variabilǎ folositǎ pentru reprezentarea lui Not-a-
Number, In artimetica IEEE, rezultat al împǎrŃirii nedefinite
0.0/0.0 ;
13
VALER NIMINEł APLICATII 3D
0.7071 + 0.7071i
unde i reprezintǎ − 1 , partea imaginarǎ.
» 2-3i
ans =
2.0000 - 3.0000i
Pentru a memora un şir de numere {1,2,3,4,5} într-un vector x vom
folosi scrierea :
>>x=[1 2 3 4 5] ;
2 − 1
iar daca dorim sa afişăm elementele unei matrici A = vom
0 3
proceda astfel :
>>A=[2 -1 ;0 3] ;
Identificarea unui anumit element în cazul structurilor uni sau
bidimensionale se face prin specificarea indicilor ce corespund
poziŃiei elemntului respectiv în cadrul structurii :
>>x(4)
14
VALER NIMINEł APLICATII 3D
ans =
4
sau pentru matrici :
» A(1,2)
ans =
-1.
Există diferite modalităŃi de generare a vectorilor şi matricilor în
Matlab. Astfel pentru a genera un vector cu n elemente egal
spaŃiate, între capetele a si b, vom folosi comanda linspace(a, b, n)
» linspace(0, 1, 7)
ans =
2
4
1
3
» A(3,:)
ans =
15
VALER NIMINEł APLICATII 3D
2 1 1
Un caz special este cel al comenzii A( :), care returnează un vector
în care sunt comprimate toate valorile matricei.
» A(:)
ans =
3
-2
0
4
-1
3
5
1
4
OperaŃiile aritmetice se pot aplica şi matricilor uni sau
bidimensionale.
>> A = [1 2 3;4 5 6;7 8 9];
>> B = [1 1 1;2 2 2;3 3 3];
>> C = [1 2;3 4;5 6];
>> A+B
ans =
2 3 4
6 7 8
10 11 12
>> A+C
??? Error using ==> +
Matrix dimensions must agree.
A=[1 2 3;3 5 6; 34 5 6]
A =
1 2 3
3 5 6
34 5 6
16
VALER NIMINEł APLICATII 3D
0 2 4 6 8
>> A*v(1:3)
??? Error using ==> *
Inner matrix dimensions must agree.
>> A*v(1:3)'
ans =
16
28
46
Când dorim ca operaŃiile cu tablouri sǎ se facǎ element cu element,
Matlab introduce operatorul de vectorizare “.”, precizat înaintea
operatorilor “/”, “*”,”^”.
17
VALER NIMINEł APLICATII 3D
ans =
18
VALER NIMINEł APLICATII 3D
OperaŃia de mai sus este posibilǎ doar daca vectorul v este vector
coloanǎ.
>> u*v'
ans =
18.4000
Inner matrix dimensions must agree.
Ceea ce s-a obŃinut in linia de mai sus este produsul scalar al
vectorilor u şi v, egal dupǎ cum şti cu suma produselor
corespunzǎtoare aceloraşi vectori
Pentru calculul produsului scalar avem instrucŃiunea
C=sum(u.*v)
De amintit cǎ Matlab permite şi calculul puterilor unei matrici
doar în cazul când acestea sunt pătratice !
» C=[1 3;4 67;12 45]
C =
1 3
4 67
12 45
» C^2
??? Error using ==> ^
Matrix must be square.
Pentru o matrice pătratică putem calcula deasemenea şi inversa
matriciiA,
A-1, operaŃia fiind o simplă ridicare la putere :
» A^-1
ans =
19
VALER NIMINEł APLICATII 3D
X =
0.4267
0.9333
1.3467
Calcularea inversei unei matrici se face şi utilizând functia inv, în
condiŃiile în care acea matrice admite inversǎ, adicǎ determinantul
ei sǎ fie diferit de zero.
» A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14
1];
Dacǎ încercaŃi calculul inversei matricei de mai sus
» X=inv(A)
veŃi obŃine urmǎtorul mesaj de atenŃionare :
Warning: Matrix is close to singular or badly
scaled.
Results may be inaccurate. RCOND = 1.175530e-017.
Urmǎtoarea comandă crează de exemplu un vector incrementat cu
pasul 1 între limitele 1 si 6
» x=1:6
x =
1 2 3 4 5 6
Dacă vrem să facem incrementarea cu un anumit pas, acesta
trebuie specificat în cadrul comnezii astfel :
20
VALER NIMINEł APLICATII 3D
21
VALER NIMINEł APLICATII 3D
>> x = (-5:.1:5);
>> y = x./(1+x.^2);
1
Exemplul calculează valorile funcŃiei f ( x) = y = , unde x
1+ x2
reprezintă vectorul valorilor cuprinse între -5 si 5 cu pasul 0.1
Considerând acestea putem împârŃi acum un vector la altul
folosind comanda :
» x=1:.5:4;
» y=1:7;
» x./y
ans =
1.0000 0.7500 0.6667 0.6250
0.6000 0.5833 0.5714
Să precizăm ca dimensiunile vectorilor trebuie sa fie egale, altfel
programul va returna eroare.
» x=1:.5:4;
» y=1:6;
» x./y
??? Error using ==> ./
Matrix dimensions must agree.
De observat diferenŃa dintre A^2 şi A.^2, unde A reprezintă o
matrice. In primul caz matricea trebuie sa fie pătratică, pe când în
cazul al doilea ea poate avea orice dimensiune.
» A=[1 2 3; 45 6 7; 12 3 4;1 1 1];
» A.^2
ans =
1 4 9
2025 36 49
144 9 16
1 1 1
» A^2
??? Error using ==> ^
Matrix must be square.
22
VALER NIMINEł APLICATII 3D
1 45 12
2 6 3
3 7 4
Operatorul transpus ‘, poate fi folosit la generarea de tabele de
valori din vectori, astfel
» x=0:4;
» y=5:5:25;
» A=[x' y']
A =
0 5
1 10
2 15
3 20
4 25
Pentru calculul rangului unei matrice se va apela funcŃia rank
rank(X)
Reamintim cǎ o matrice X nenulǎ cu m linii şi n coloane are rangul
k, dacǎ X are un minor nenul de ordin k, iar toŃi minorii de ordin
23
VALER NIMINEł APLICATII 3D
mai mare decât k (dacǎ existǎ) sunt nuli. Rangul unei matrice est
un scalar 1 ≤ k ≤ min(m, n) .
Următoarele comenzi sunt destul de des întâlnite în lucrul cu
matrici şi informaŃii suplimentare despre ele puteŃi găsi în meniul
de help al mediului Matlab :
- B=zeros(m,n) crează o matrice B de zerouri cu m linii şi n
coloane;
- B=ones(m,n) crează o matrice B de 1 cu m linii şi n coloane;
- B=eye(n) crează matricea B unitate de dimensiune n;
- B=diag(v) (unde v este un vector de dimensiune n) crează o
matrice diagonală cu v pe diagonală ;
- x=max(A) returneazǎ vectorul x ce are ca şi componente pe
x j = max{aij , i = 1,..., n}, j = 1,..., n
- x=min(A) returneazǎ vectorul x ce are ca şi componente pe
x j = min{a ij , i = 1,..., n}, j = 1,..., n
- B=abs(A) crează o matrice B cu elementele bij = aij
Analog în cazul vectorilor se utilizează funcŃiile zeros si ones
pentru generarea unui vector de zeoruri sau de valori 1
zeros(m,1) -returnează un vector de zerouri avand m coloane ;
zeros (1,n) - returnează un vector de zerouri având n linii ;
ones (m,1) - returneazǎ un vector de valori 1 avand m coloane ;
ones (1,n) - returneazǎ un vector de valori 1 avand n linii ;
Putem reprezenta o matrice bidimensioanala ca o vector linie cu
elemente vectori coloana.
B =
1 2 3
2 4 5
3 7 8
24
VALER NIMINEł APLICATII 3D
25
VALER NIMINEł APLICATII 3D
» [min(x) max(x)]
ans =
0 1
» sort(x)
ans =
0 0.1667 0.3333 0.5000
0.6667 0.8333 1.0000
» sum(x)
ans =
3.5000
Pentru generarea aleatoare a elementelor unei matrici avem două
funcŃii importante. Prima, rand, care generează o matrice aleatoare
de numere, corespunzătoare distribuŃiei uniforme pe intervalul
[0,1], a doua randn va produce o matrice de numere aleatoare
corespunzătoare distribuŃiei normale. Ambele funcŃii apelate fără
argument genereză un singur număr.
» rand
ans =
0.9501
» rand(3)
ans =
26
VALER NIMINEł APLICATII 3D
0 -1 1
0 0 4
» tril(A)
ans =
3 0 0
-2 -1 0
0 3 4
Comenzile min si max utilizate pentru matrici, returnează doi
vectori ce conŃin elementele minime respectiv maxime pe fiecare
coloanǎ a matricei.
» min(A)
ans =
-2 -1 1
» max(A)
ans =
3 4 5
Comanda sum(A), returnează un vector ale cǎrui elemente
reprezintă sumele pe coloane a elementelor matricei.
O caracteristicǎ a Matlab-lui este cǎ memoreazǎ comenzile
anterioare, aşa încât comenzi sau funcŃii anterioare pot fi reapelate
cu ajutorul sǎgeŃilor up şi down de pe tastaurǎ. Pentru « curǎŃarea”
ferestrei de comandǎ a Matlab-lui tastaŃi comanda clc.
In cazul în care o linie din dreptul promter-lui se terminǎ cu trei
puncte, linia urmǎtoare va fi o continuare a primei linii.
» x=sin(1)+sin(2)+...
sin(3)+sin(4)
x =
1.1351
27
VALER NIMINEł APLICATII 3D
operator semnificatia
> mai mare
< mai mic
>= mai mare sau
egal
<= mai mic sau
egal
= egal
~- diferit
Operatorii logici
» x=[1 2 3];
» y=[1 0 0];
» x>0 & y>0
ans =
1 0 0
28
VALER NIMINEł APLICATII 3D
» x=[1 2 3];
» y=[1 0 0];
» x>0 |y>0
ans =
1 1 1
Sǎ dǎm în continuare tabelul cu valorile acestor operatori la care
am adǎugat şi operatorul sau exclusiv (xor)
29
VALER NIMINEł APLICATII 3D
1.3.1 Reprezentarea 2D
O problema importantă a lucrării de faŃă o reprezintă
vizualizarea tipurilor de curbe sau suprafeŃe tratate într-o manieră
cat mai simplă de realizat dar şi cat mai performantă.
Unul din avantajele lucrului cu Matlab este cǎ acest mediu
oferă posibilităŃi diverse de reprezentare grafică a datelor într-un
mod simplu şi eficient bidimesional sau tridmensional. De multe
ori o reprezenatre grafică corectă poate duce la soluŃionarea
parŃială a problemei.
Matlab oferǎ urmǎtoarele funcŃii pentru afişarea vectorilor
de date sub formǎ graficǎ :
plot- reprezintǎ garfice în coordonate liniare ;
loglog- reprezintǎ grafice în coordonate logaritmice ;
semilogx- reprezintǎ grafice într-un sistem în care axa x este
scalatǎ logaritmic, iar axa y liniar ;
semilogy- reprezintǎ grafice într-un sistem în care axa y este
scalatǎ logaritmic, iar axa x liniar ;
fill- reprezintǎ grafic poligoane ;
Atunci când domeniile datelor ce se doresc a fi reprezentate pe axa
y sunt mult diferite sau când se doreşte reprezentarea graficǎ în
acelaşi sistem de axe a unor funcŃii cu axele y scalate diferit, ste
utilǎ funcŃia plotyy. Se poate folosi una din sintaxele :
• plotyy (x1,y1,x2,y2)- traseazǎ grafic funcŃia y1=f(x1) cu axa
y plasatǎ la marginea stângǎ a zonei delimitate de sistemul
de axe şi funcŃia y2=f(x2) cu axay plasatǎ în dreapta ;
• plotyy (x1,y1,x2,y2, fun) – permite specificarea modului de
scalare a axelor, deci a funcŃiei folosite la reprezentǎri, prin
argumentul fun.
Acesta trebuie sǎ fie un şir de caractere ce conŃine numele
unei funcŃii care acceptǎ sintaxa fun(x,y).
Exemplu « plot », « loglog », « semilogx », « semilogy ».
30
VALER NIMINEł APLICATII 3D
>>y = (-5:0.1:4).^3;
>>plot(y);
O alta variantă a codului de mai sus o reprezintă şi comenzile:
>>x = -5:0.1:4;
>>y = (x).^3;
>>plot(x,y);
>> title('graficul functiei x^3')
Figura rezultată:
graficul functiei x 3
100
50
-50
-100
-150
-5 -4 -3 -2 -1 0 1 2 3 4
Fig. 3.4.
31
VALER NIMINEł APLICATII 3D
>>xlabel('x');
>>ylabel('y');
>>title('Graficul functiei y = x^3');
32
VALER NIMINEł APLICATII 3D
33
VALER NIMINEł APLICATII 3D
» x=[-pi:.3:pi];
» y=sin(x);
» z=cos(x);
» plot(x,y,'-r');
» hold on
» plot(x,z,'--g');
» hold on
» plot(x,0,'*-b')
» legend ('-sin(x)','-cos(x)','y=0');
1
-sin(x)
0.8 -cos(x)
y=0
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-4 -3 -2 -1 0 1 2 3
34
VALER NIMINEł APLICATII 3D
» x=[-2:.2:2];
» y=exp(-x.^2);
» subplot (2,2,1);
» plot (x,y);
» title ('exp(-x^2)');
» z=exp(-x.^2).*cos(2*pi*x);
» subplot (2,2,2);
» plot (x,z);
» title ('exp(-x^2)*cos(2*pi*x)');
» t=exp(-x.^2).*cos(4*pi*x);
» subplot (2,2,3);
» plot (x,t);
» title ('exp(-x^2)*cos(4*pi*x)');
35
VALER NIMINEł APLICATII 3D
0.8
0.5
0.6
0
0.4
-0.5
0.2
0 -1
-2 -1 0 1 2 -2 -1 0 1 2
exp(-x 2)*cos(4*pi*x)
1
0.5
-0.5
-1
-2 -1 0 1 2
36
VALER NIMINEł APLICATII 3D
2.5
1.5
0.5
0
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
37
VALER NIMINEł APLICATII 3D
»x=[-6:.5:6];
» y=x;
» [X,Y]=meshgrid(x);
» Z=sqrt(X.^2+Y.^2);
» mesh(X,Y,Z)
38
VALER NIMINEł APLICATII 3D
39
VALER NIMINEł APLICATII 3D
» [x,y] = meshgrid([-2:.2:2]);
» Z=x.^2*exp(-x.^2-y.^2);
» mesh(x,y,Z);
» colormap cool;
40
VALER NIMINEł APLICATII 3D
Fig. 3.11
» Z=peaks(30);
» subplot(2,2,1);
» surf(Z);
» shading flat;
» title (' Flat shading!')
» Z=peaks(30);
» subplot(2,2,2);
» surf(Z);
» shading interp;
» title (' Interpolated shading!')
» colormap summer;
Analog pentru ultima opŃiune şi obŃinem imaginile de mai jos, în
care puteŃi vedea diferenŃele între cele trei stiluri.
41
VALER NIMINEł APLICATII 3D
Fig 3.12
function z=func(x,y)
z=sin(x).*cos(y)+1;
42
VALER NIMINEł APLICATII 3D
» x=linspace(0,pi,20);
» y=linspace(-pi,pi,20);
» [xx,yy]=meshgrid(x,y);
» zz=func(xx,yy);
» mesh(xx,yy,zz)
Fig. 3.13
43
VALER NIMINEł APLICATII 3D
» x=0:.1:pi;
» y=0:.1:pi;
» [X,Y]=meshgrid(x,y);
» Z=sin(Y.^2+X)-cos(Y-X.^2);
» subplot(2,2,1);
» surf(Z);
» title('surf');
» subplot(2,2,2);
» surfc(Z);
» title('surfc');
» subplot(2,2,3);
» mesh(Z);
» title('mesh');
Fig. 3.14
44
VALER NIMINEł APLICATII 3D
0.5
-0.5
6
5
4
-1 3
2
-2
1
-3 0
» [th,r]=meshgrid(0:pi/40:2*pi,0:0.05:1);
» [X,Y]=pol2cart(th,r);
» g=inline('r.^n.*sin(n*th)','r','th','n')
g =Inline function:
g(r,th,n) = r.^n.*sin(n*th)
» surf(X,Y,g(r,th,5))
45
VALER NIMINEł APLICATII 3D
» hold on
» mesh(X,Y,-ones(size(X)))
Fig. 3.15
>> x=-3*pi:.25:3*pi;
>> A=linspace(3,0);
>> A=exp(-A);
>> X=sin(x).^2./(x+eps).^2;
>> Y=A'*X;
>> waterfall(Y)
46
VALER NIMINEł APLICATII 3D
>> x=-3*pi:.25:3*pi;
>> A=linspace(3,0);
>> A=exp(-A);
>> X=sin(x).^2./(x+eps).^2;
>> Y=A'*X;
>> waterfall(Y)
0.8
0.6
0.4
0.2
0
100
80
50 60
40
20
0 0
» x=0:0.5:6;
» t=0:0.5:20;
» [X,T]=meshgrid(x,t);
» g=inline('cos(x-0.4*y).*exp(-0.4*x)','x','y')
g =
Inline function:
g(x,y) = cos(x-0.4*y).*exp(-0.4*x)
» contour(X,T,g(X,T))
» pcolor(X,T,g(X,T))
47
VALER NIMINEł APLICATII 3D
» hold on
» contour(X,T,g(X,T),'k')
» shading interp
» colorbar
Fig. 3.16
» x=0:0.5:6;
» t=0:0.5:20;
» [X,T]=meshgrid(x,t);
» g=inline('cos(x-0.4*y).*exp(-0.4*x)','x','y')
g =
Inline function:
g(x,y) = cos(x-0.4*y).*exp(-0.4*x)
» surfc(X,T,g(X,T))
» colormap(bone)
48
VALER NIMINEł APLICATII 3D
Fig. 3.17
» [X,Y]=meshgrid(-2:.1:2,-2:.2:2);
» f=-X.*Y.*exp(-2*(X.^2+Y.^2));
» mesh(X,Y,f);
» xlabel('x');
» ylabel('y');
» grid on;
» contour(X,Y,f)
» xlabel('x');
» ylabel('y');
» grid on;
» hold on
» fmax=max(max(f))
fmax =
0.0886
» kmax=find(f==fmax)
kmax =
49
VALER NIMINEł APLICATII 3D
329
533
» pos=[X(kmax),Y(kmax)]
pos =
-0.5000 0.6000
0.5000 -0.6000
» plot(X(kmax),Y(kmax),'*')
» text(X(kmax),Y(kmax),' maximul')
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
1.5
maximul
0.5
0
y
-0.5
maximul
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x
Fig. 3.18
50
VALER NIMINEł APLICATII 3D
» [x,y]=meshgrid(-3:0.1:3,-5:0.1:10);
» f=100*(y-x.^2).^2+(1-x).^2+2;
» mesh(x,y,f);
» xlabel('x')
» ylabel('y')
» zlabel('z')
Fig. 3.19
sphere (n)
51
VALER NIMINEł APLICATII 3D
sphere
[X,Y,Z]=sphere(…)
Apelatǎ cu prima sintaxǎ, funcŃia reprezintǎ grafic suprafaŃa
unei sfere formatǎ din n × n suprafeŃe elementare. Nespecificarea
argumentului n presupune utilizarea valorii implicite a acestuia,
n=20.
Functia elipsoidului se bazeaza pe cea a sferei si este descris de
urmatoarea ecuatie:
2 2 2
x − xc y − y z − zc
+ c + =1
r
x
r
y
rz
unde xc , yc , zc reprezinta coordonatele centrului elipsoidului si
rx , ry , rz reprezinta razele pe cele trei coordonate.
Comanda in Matlab pentru generarea unui elipsoid este data de
[x,y,z]=ellipsoid(xc,yc,zc,rx,ry,rz,n), unde n, ca si in cazul sferei,
reprezinta numarul punctelor din reprezentare si daca nu este
specificat este considerat 20.
Codul următor generează un elipsoid având coordonatele:
xc=0,yc=0,zc=0,rx=2,ry=1,rz=1.
>> [x,y,z]=ellipsoid(2,0,2,2,1,1);
>> surf(x,y,z);
>> axis([0 4 -2 2 0 4]);
>> hold on
>> contour(x,y,z)
52
VALER NIMINEł APLICATII 3D
0
2
1 4
0 3
2
-1 1
-2 0
>> x = linspace(-3*pi,3*pi,50);
>> r = cos(x).* sin(0.5*x).*exp((x.^2)/200);
>> r = r - min(r);
53
VALER NIMINEł APLICATII 3D
>> plot(r,linspace(0,1,length(r)));
>> ylabel('z')
>> cylinder(r)
1
0.9
1
0.8
0.7 0.8
0.6 0.6
0.5
0.4
0.4
0.2
0.3
0
0.2 4
2 4
0.1
0 2
0 0
0 0.5 1 1.5 2 2.5 3 3.5 -2 -2
-4 -4
>> t=[-1:.01:1];
>> [x,y,z]=cylinder(2+cos(t));
>> mesh(x,y,z)
>> axis square
54
VALER NIMINEł APLICATII 3D
0.8
0.6
0.4
0.2
0
4
2 4
0 2
0
-2
-2
-4 -4
>> t = 0:0.1:10*pi;
>> x = exp(-t/20).*cos(t);
>> y = exp(-t/20).*sin(t);
>> z = t;
>> plot3(x,y,z);
>> xlabel('x');
>> ylabel('y');
>> zlabel('z');
55
VALER NIMINEł APLICATII 3D
40
30
20
z
10
0
1
0.5 1
0 0.5
0
-0.5 -0.5
y -1 -1
x
56
VALER NIMINEł APLICATII 3D
0.5
-0.5
-1
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1
57
VALER NIMINEł APLICATII 3D
>> subplot(2,2,1);plot3(x,y,z);
>> view(-10,10);
>> title('Default plot3');
>> subplot(2,2,2);plot3(x,y,z,'og');
>> view(-9,56);
>> title('Az=-10, El=10');
>> subplot(2,2,3);plot3(x,y,z,'xb');
>> view(0,90);
>> title('Az=0, El=90');
>> subplot(2,2,4);plot3(x,y,z,'dr');
>> view(90,0);
>> title('Az=90, El=0');
58
VALER NIMINEł APLICATII 3D
20 0
1
10
0 0
1
0 1
-1 -1 0 1 -1 0
-1
0.5 30
0 20
-0.5 10
-1 0
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
59
VALER NIMINEł APLICATII 3D
60
VALER NIMINEł APLICATII 3D
61
VALER NIMINEł APLICATII 3D
>> subs(t,2)
ans =
-2
Comanda subs poate fi apelata deasemenea si pentru un vector de
intrari.
>> subs(t,[1 -1.5 2])
ans =
62
VALER NIMINEł APLICATII 3D
x.
Integrarea expresiilor simbolice se face in Matlab cu comanda int.
>> int(f)
ans =
-x^2*cos(x)+2*cos(x)+2*x*sin(x)-exp(x).
Pentru calculul integralelor definite se includ in comanda capetele
de integrare
>> int(f,0,2)
ans =
-1-2*cos(2)+4*sin(2)-exp(2).
Reprezentarea grafica a functiilor simbolice de o variabila se poate
realiza in Matlab cu ajutorul functiei ezplot, care poate avea ca
parametri functia si intervalul pe care se face reprezentarea.
>> syms x;
>> f=x^3-3*x+1;
>> ezplot(f,[-1 1]);
Daca nu se specifica domeniul, domeniul implicit este -2*pi < x <
2*pi.
Cel mai simplu mod de utilizare a functiei este sa specificam direct
functia, ca un string.
>> ezplot('x^2 - 2*x + 1');
Pentru reprezentarea functiilor de 2 variabile putem utilize functia
ezsurf, ca in exemplul de mai jos:
>> syms x y;
>> ex1='sqrt(4-x^2-y^2)';
>> figure(1); ezsurf(ex1,[-2,2,-2,2]);
>> syms x y;
>> ex1='sqrt(4-x^2-y^2)';
>> figure(1); ezsurf(ex1,[-2,2,-2,2]);
63
VALER NIMINEł APLICATII 3D
sqrt(4-x 2-y 2)
1.5
0.5
1
0 1
0
-1
-1
y x
>> syms x ;
>> f=x^2-7*x+2;
>> solve(f)
ans =
7/2+1/2*41^(1/2)
7/2-1/2*41^(1/2)
64
VALER NIMINEł APLICATII 3D
>>[x] = solve(eq,x)
Pentru rezolvarea sistemelor de ecuatii putem folosi aceeasi funcŃie
solve. Să presupunem că avem de rezolvat sistemul de 3 ecuaŃii cu
3 necunoscute:
2x+3y-4z=5 ;y+4z+x=10 ;-2z+3x+4y=0
Vom scrie urmatoarele comenzi Matlab :
sin(ax )
lim
x → 0 x
>>syms x a;
>>value = limit(sin(a*x)/x,x,0)
Alte cateva exemple de limite
>> syms x;
>> f=x^2;
>> limit(f,2)
ans =
>> limit(f,inf)
ans =
65
VALER NIMINEł APLICATII 3D
Inf
>> limit(1/x,inf)
ans =
>> limit(log(abs(x)),0)
ans =
-Inf
66
VALER NIMINEł APLICATII 3D
CAPITOLUL II
67
VALER NIMINEł APLICATII 3D
y y
M(x,sinx)
x
x
68
VALER NIMINEł APLICATII 3D
0.8
0.6
0.4
0.2
f(x)=sin(x)
0
-0.2
-0.4
-0.6
-1
-4 -3 -2 -1 0 1 2 3 4
x
Fig. 2.1.3
Putem deasemenea să specificăm mărimea caracterelor utilizate la
titlu, legenda sau axe folosind parametru FontSize.
» title ('Graficul functiei sin(x)', ‘FontSize’, 14) ;
Putem îmbunătăti reprezentarea grafică, adăugând noi parametri
funcŃiei plot şi doi dintre aceştia ar fi cei referitori la grosimea
liniei de reprezentare , LineWidth (implicit este 0.5 puncte), iar cel
de al doilea la marimea marcatorilor, MarkerSize(implicit 6
puncte). Un punct reprezinta 1/72 inch. Sa îi utilizam în exemplul
urmator
<<plot (x,y,’m—‘ , ‘LineWidth’,3, ’MarkerSize’, 5);
69
VALER NIMINEł APLICATII 3D
» x=[-pi:.3:pi];
» y=sin(x);
» z=cos(x);
» plot(x,y,'-r');
» hold on
» plot(x,z,'--g');
» hold on
» plot(x,0,'*-b')
» legend ('-sin(x)','-cos(x)','y=0');
1
-sin(x)
0.8 -cos(x)
y=0
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-4 -3 -2 -1 0 1 2 3
Fig. 2.1.4
In figura de mai sus s-a reprezentatat şi axa y, punând astfel în
evidenŃa si solutiile ecuaŃiilor sin( x) = 0, cos( x) = 0 pe intervalul
[−π , π ] . Metoda grafică de rezolvare a ecuaŃiilor neliniare este
70
VALER NIMINEł APLICATII 3D
71
VALER NIMINEł APLICATII 3D
» title ('exp(-x^2)*cos(2*pi*x)');
» t=exp(-x.^2).*cos(4*pi*x);
» subplot (2,2,3);
» plot (x,t);
» title ('exp(-x^2)*cos(4*pi*x)');
exp(-x 2) exp(-x 2)*cos(2*pi*x)
1 1
0.8
0.5
0.6
0
0.4
-0.5
0.2
0 -1
-2 -1 0 1 2 -2 -1 0 1 2
2
exp(-x )*cos(4*pi*x)
1
0.5
-0.5
-1
-2 -1 0 1 2
Fig 2.1.5
72
VALER NIMINEł APLICATII 3D
F ( x, y ) = 0 (2.1.2)
2 2 2
Exemplu: x +y =R (Fig.2.1.2)
Această ecuaŃie reprezintă un cerc cu centrul în O(0,0) şi de
rază R>0.
O curbă plană dată de ecuaŃia implicită este concepută static
ca locul geometric al punctelor ce satisfac o anumită relaŃie. Dacă
în ecuaŃia (2.1.2) F este o funcŃie polinomială în x şi z de gradul n
atunci curba de ecuaŃia F (x, y ) = 0 se numeşte curbă algebrică de
grad n.
Conicele sunt curbe algebrice de grad 2.
O conică este curba care se obŃine prin intersectarea unui plan cu
un con (mai exact este vorba de suprafaŃa unui con drept, circular).
Conicele dupa cum se stie au foarte multe aplicatii atat in stiinta
cat si in inginerie. In mecanica de exemplu traiectoria unui
proiectil in vid este o parabola. Orbitele planetelor si satelitilor
sunt deasemenea sectiuni conice.
Amintim ecuatiile principalelor conice si sa urmarim apoi
reprezentarea lor in Matlab
• Cerc:
• Elipsă:
• Parabolă:
73
VALER NIMINEł APLICATII 3D
• Hiperbolă:
>> x=linspace(-2,2);
>> plot(x,sqrt(4-x.^2))
>> hold on
>> plot(x,-sqrt(4-x.^2))
>> axis equal
1.5
0.5
-0.5
-1
-1.5
>> a=2;
>> x-1:0.01:1;
74
VALER NIMINEł APLICATII 3D
>> plot(x,-sqrt(4*a*x));
>> hold on
>> plot(x,sqrt(4*a*x))
-1
-2
-3
-4
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
75
VALER NIMINEł APLICATII 3D
O x
.
Fig. 2.1.6
-1
-2
-3
-4
-15 -10 -5 0 5 10 15
76
VALER NIMINEł APLICATII 3D
• Cerc: ,
• Elipsă: ,
• Parabolă: ,
• Hiperbolă: sau .
Exemplu.
t t
Γ = Im c, c : [0,4π ] → R 2 c(t ) = (cos t − 2 cos , sin t − 2 sin ), c(0) = c(4π ) = (−1,0)
2 2
77
VALER NIMINEł APLICATII 3D
0.4
0.3
0.2
0.1
-0.1
-0.2
-0.3
-0.4
-1.5 -1 -0.5 0 0.5 1 1.5
78
VALER NIMINEł APLICATII 3D
M π
θ=
π4
θ O
θ=
O
x x 6
Fig. 2.1.8 Fig.2.1.9
π π π
θ 0 ∏
6 4 2
3 2
ρ = 1 + cos θ 2 1+ 1+ 1 0
2 2
ObservaŃie. Fiind dată curba ( Γ ) în coordonate polare prin
ρ = f (θ ), f : [α , β ] → R, relativ la reperul cartezian xoy asociat
reperului polar, curba admite parametrizarea c : [α , β ] → R 2 ,
c(θ ) = ( f (θ ) cos θ , f (θ ) sin θ ).
79
VALER NIMINEł APLICATII 3D
150 1 30
0.5
180 0
210 330
240 300
270
Fig. 2.1.10
80
VALER NIMINEł APLICATII 3D
90 1.5
120 60
150 30
0.5
180 0
210 330
240 300
270
81
VALER NIMINEł APLICATII 3D
90 20
120 60
15
150 10 30
180 0
210 330
240 300
270
82
VALER NIMINEł APLICATII 3D
>> syms x;
>> y=sin(x);
>> ezplot(y,[0,2*pi])
>> dydx=diff(y)
dydx =
cos(x)
>> m=subs(dydx,x,2)
m =
-0.4161
>> y0=subs(y,x,2);
>> hold on;
>> ezplot(m*(x-2)+y0,[0,2*pi]);
83
VALER NIMINEł APLICATII 3D
-...+15686858057262667/9007199254740992
1.5
0.5
-0.5
-1
0 1 2 3 4 5 6
x
84
VALER NIMINEł APLICATII 3D
CAPITOLUL 3
85
VALER NIMINEł APLICATII 3D
86
VALER NIMINEł APLICATII 3D
87
VALER NIMINEł APLICATII 3D
10
-5
-10
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1
Fig 3.1.1
88
VALER NIMINEł APLICATII 3D
89
VALER NIMINEł APLICATII 3D
cos t
x=
1 + α 2t 2
sin t
y=
1 + α 2t 2
z = αt
alpha=0.2;
t=linspace(-12*pi,12*pi,500);
x=cos(t)./sqrt(1+alpha^2*t.^2);
y=sin(t)./sqrt(1+alpha^2*t.^2);
z=alpha*t./sqrt(1+alpha^2*t.^2);
plot3(x,y,z).
phi=linspace(0,pi,30);
theta=linspace(0,2*pi,40);
[phi,theta]=meshgrid(phi,theta);
x=r*sin(phi).*cos(theta);
y=r*sin(phi).*sin(theta);
z=r*cos(phi);
90
VALER NIMINEł APLICATII 3D
mhndl=mesh(x,y,z)
Comanda mhndl=mesh(x,y,z) păstrează un “handle” pentru
obiectul sferă generată cu mesh. Un handle este un identificator
numeric pentru obiectul generat. Pentru obiectul sferă putem
obŃine o listă a parametrilor prin comanda get. Ne intereseaza aici
EdgeColor, EdgeAlpha, and FaceAlpha. Pentru setarea valorilor
parametrilor obiectului se foloseşte comanda set
set(lhndl,...
’Color’,[0.625,0,0],...
’LineWidth’,2).
Exemplu
(http://electronics.ucv.ro/mihaium/Materiale%20didactice/Material
e/Laboratoare/MATLABCap041.pdf)
Să se vizualizeze oscilaŃia unei mase agăŃate de un arc.
Pentru a realiza acestă cerinŃă vom folosi procedeele de animaŃie
din Matlab si vor fi necesare următoarele etape:
1. Se determina mai întâi ecuatia parametrica care descrie curba la
un anumit moment de timp.
2. Se introduce dependenŃa de timp în ecuatia curbei obŃinute mai
sus.
3. Se genereaza un grafic 3D a curbei respective la diferite
momente de timp.
4. Se utilizează comanda movie pentru a se afişa consecutiv
diferitele reprezentări la diferite momente de timp.
Rezolvarea problemei în Matlab
>>th=0:pi/60:32*pi;
>>a=1;A=0.25;w=2*pi/15;
>>M=moviein(16);
>>for t=1:16;
x=a*cos(th);
y=a*sin(th);
z=(1+A*cos(w*(t-1)))*th;
91
VALER NIMINEł APLICATII 3D
plot3(x,y,z,’r’)
axis([-2 2 -2 2 0 40*pi])
M(:,t)=getframe;
end
>>movie(M,15)
InstrucŃiunea M=moviein(16) crează o structura 2D care
memorează în fiecare coloana datele corespunzătoare unui cadru
de reprezentare la un anumit moment de timp. Cadrele respective
sunt generate cu bucla for. FuncŃia getframe returnează o imagine
cu pixeli a imaginii fiecărui cadru care este reprezentat. Ultima
comandă face animaŃia de 15 ori.
x = 2r sin φ cos θ
y = 2r sin φ sin θ
z = 2r cos φ.
In Matlab :
r=1;
phi=linspace(0,pi,30);
theta=linspace(0,2*pi,40);
[phi,theta]=meshgrid(phi,theta);
x=2*r*sin(phi).*cos(theta);
92
VALER NIMINEł APLICATII 3D
y=2*r*sin(phi).*sin(theta);
z=2*r*cos(phi);
mhndl1=mesh(x,y,z)
set(mhndl1,...
’EdgeColor’,[0.6,0.6,0.6])
axis equal
axis off
-1
-2
2
1 2
0 1
0
-1 -1
-2 -2
EcuaŃiile parametrice
x = r cos t
y = r sin t
produc un cerc de rază r centrat în origine. Aceasta poate fi
verificată cu comenzile Matlab comet si plot. Pentru a deplasa cu r
pe direcŃia x vom adăuga parametrul r la ecuaŃia lui x şi obŃinem
x = r + r cos t
y = r sin t.
93
VALER NIMINEł APLICATII 3D
x(t, z) = r + r cos t
y(t, z) = r sin t
z(t, z) = z.
Astfel pentru reprezentarea grafică în Matlab a cilindrului va
trebui sa generăm mai întâi o reŃea de puncte (t, z).
t=linspace(0,2*pi,40);
z=linspace(-2*r,2*r,20);
[t,z]=meshgrid(t,z);
x=r+r*cos(t);
y=r*sin(t);
z=z;
hold on
mhndl2=mesh(x,y,z)
set(mhndl2,...
’EdgeColor’,[0.8,0,0])
view(50,20)
94
VALER NIMINEł APLICATII 3D
Cum vom obŃine acum ecuaŃiile parametrice ale curbei tinând cont
de faptul ca punctele ei se vor afla atât pe sferă cât si pe suprafată
cilindrului. Vom relua ecuaŃiile celor două corpuri
x 2 + y 2 + z 2 = 4r 2
( x − r )2 + y 2 = r 2
Dezvoltând a doua ecuaŃie si apoi folosind prima ecuaŃie vom
obŃine
x 2 − 2rx + y 2 = 0
z 2 + 2rx = 4r 2
Tinând cont că punctele de pe curbă se afla pe cilindru pentru care
x = r + r cos t , înlocuind in ultima relaŃie avem :
z 2 + 2r (r + r cos t ) = 4r 2
z 2 + 2r 2 + 2r 2 cos t = 4r 2
z 2 = 2r 2 − 2r 2 cos t.
RelaŃia poate fi transcrisă
1 − cos t
z 2 = 4r 2
2
şi folosind inegalitatea sin 2 (t / 2) = (1 − cos t ) / 2 conduce la următorul
rezultat z 2 = 4r 2 sin 2 (t / 2) .
Am obŃinut astfel ecuaŃiile parametrice ale curbei Viviani
95
VALER NIMINEł APLICATII 3D
x = r + r cos t
y = r sin t
z = 2r sin(t / 2)
De notat că perioada funcŃiei z este T = 4π , astfel incâ pentru
intervalul 0 ≤ t ≤ 2π vom considera doar valorile pozitive ale
componentei z şi deci cealalată jumătate a curbei z (negativă) nu
este vizualizată.
Vom exemplifica în continuare câteva din secŃiunile conice care
reprezintă intersecŃia unui plan cu un con circular drept.
Exemplu Să se deseneze conul circular drept dat de ecuaŃiile
parametrice
x = r cos φ
y = r sin φ
z=r
unde 0 ≤ φ ≤ 2π ,−1 ≤ r ≤ 1, împreună cu secŃiunea plana dată de
planul z = 1 / 2 peste domeniul D = {( x, y ) : −1 ≤ x, y ≤ 1}.
SoluŃie
>> theta=linspace(0,2*pi,40);
>> r=linspace(-1,1,30);
>> [theta,r]=meshgrid(theta,r);
>> x=r.*cos(theta);
>> y=r.*sin(theta);
>> z=r;
>> mhndl=mesh(x,y,z)
>> set(mhndl,...
'EdgeColor',[.6,.6,.6])
>> hold on
>> [x,y]=meshgrid(-1:0.2:1);
>> z=0.5*ones(size(x));
>> phndl=mesh(x,y,z);
>> set(phndl,...
'EdgeColor',[0.625,0,0])
>> view(116,38)
>> axis equal
96
VALER NIMINEł APLICATII 3D
0.5
-0.5 -1
-0.5
-1
-1 0
-0.5
0 0.5
0.5
1 1
97
VALER NIMINEł APLICATII 3D
'EdgeColor',[0.625,0,0])
>> view(70,55)
>> axis equal
0.5
-0.5
-1
-1
-0.5
1
0.5 0.5
0
-0.5
1 -1
98
VALER NIMINEł APLICATII 3D
99
VALER NIMINEł APLICATII 3D
100
VALER NIMINEł APLICATII 3D
r = r (u , v)
(C ) (u , v) ∈ D ⊆ ℜ 2 (4.1.7)
u = h (v )
r = r (u , v)
(C ) u = u (t ) t ∈ [α , β ] (4.1.8)
v = v(t )
sau
r = r (u , v)
(C ) (u , v) ∈ D ⊆ ℜ 2 (4.1.9)
ϕ = ϕ (u )
a) coordonatele carteziene M 0 ( x0 , y 0 , z 0 )
b) coordonatele curbilinii M 0 (u 0 , v 0 ) ∈ D , unde
r (u 0 , v0 ) = ( x(u 0 , v0 ), y (u 0 , v 0 ), z (u 0 , v0 ) ) = ( x0 , y 0 , z 0 )
101
VALER NIMINEł APLICATII 3D
102
VALER NIMINEł APLICATII 3D
103
VALER NIMINEł APLICATII 3D
104
VALER NIMINEł APLICATII 3D
0.8
0.6
z -ax is
0.4
0.2
0.5 1
0 0.5
0
-0.5 -0.5
y-axis x-axis
[ ] v
y = 2 − 1 + eu /( 6π ) sin u cos 2
2
z = 1 − eu /( 3π ) − sin v + eu /( 6π ) sin v
unde 0 ≤ u ≤ 6π şi 0 ≤ v ≤ 2π .
>> u=linspace(0,6*pi,60);
>> v=linspace(0,2*pi,60);
>> [u,v]=meshgrid(u,v);
>> x=2*(1-exp(u/(6*pi))).*cos(u).*cos(v/2).^2;
>> y=2*(-1+exp(u/(6*pi))).*sin(u).*cos(v/2).^2;
>> z=1-exp(u/(3*pi))-
sin(v)+exp(u/(6*pi)).*sin(v);
>> mesh(x,y,z)
>> view(160,10)
>> box on
105
VALER NIMINEł APLICATII 3D
-1
-2
-3
-4
-5
-6
-7
-8
-9
-5
0
-2 -3 -4
5 1 0 -1
3 2
106
VALER NIMINEł APLICATII 3D
>> x=a*cos(u).*sin(v);
>> y=b*sin(u).*sin(v);
>> z=c*cos(v);
>> mesh(x,y,z)
>> box on
-5
4
2 4
0 2
0
-2 -2
-4 -4
107