Sunteți pe pagina 1din 101

VALER NIMINEł APLICATII 3D

CAPITOLUL 1

COMENZILE MATLAB FOLOSITE IN


APLICATII 2D SI 3D

1.1 Introducere

Obiectele geometrice ca punct, linie sau poligon reprezintă


baza pentru foarte multe aplicatii oferindu-ne o gama larga de
probleme si algorimti. Termenul de geometrie ne reaminteşte
desigur de cele mai vechi utilizări ale sale: măsurări de terenuri şi
materiale. In zilele noastre, apariŃia calculatorului a facilitat
rezolvarea unor probleme geometrice tot mai diverse. Termenul de
geometrie computaŃională se datorează lui Shamos (1975) şi s-a
dezvoltat considerabil în ultimii ani, cu precădere din 1985 când au
fost realizate prima conferinŃă (ACM Symposium on
Computational Geometry ) şi primul jurnal în domeniu (jurnalul
Springer-Verlag, “Discret and Computational Geometry”)
Matlab reprezintă un limbaj specializat pentru dezvoltarea
aplicaŃiilor tehnice, ce include facilităŃi destinate proiectării asistate
de calculator. Programele de tip CAD ( Computer Aided Design)
sunt în zilele noastre tot mai utilizate în domenii diverse de
activitate de la cele de proiectare în construcŃii, arhitectura, etc.
Matlab este un produs al companiei The Mathworks,
Inc.[http://www.mathworks.com] si lucreazǎ sub Windows, Unix,
Linux, sau Machintosh. Versiunea cea mai recentǎ este versiunea
7. O versiune completǎ a acestui mediu de calcul cuprinde module
specifice, numite tool-box-uri, care permit rezolvarea unor
probleme specifice din diferite domenii de lucru : statisticǎ,
inginerie, arhitecturǎ, matematicǎ, fiind astfel un mijloc de
investigaŃie numericǎ performant. Aceastǎ colecŃie de module

7
VALER NIMINEł APLICATII 3D

cuprinde: Simulink, DSP, Control System, SimMechanics,


SimPowerSystems, Data Acquisition, Fuzzy Logic, Image
Processing, Partial Differential Equations, Neural Network,
Optimization, System Identification, Financial, Statistics,
Communications, Database, Virtual Reality., etc.
Matlab reprezintă şi un mediu util de rezolvare a problemelor din
domeniul matematicii, în special a celor din domeniul numeric în
care de multe ori o vizualizare grafică ar îmbunătăŃi rezultatul
experimentului numeric.
Matlab ofera o gama larga de instrumente care rezolva probleme
de natura geometrica. Convex hull, triangulatiile Delaunay sau
diagramele Voronoi sunt probleme pentru care acest limbaj ofera
comenzi si functii predefinite pentru a fi rezolvate.
Ce este Matlab?
După cum sugerează şi numele, Matlab(Matrix Laboratory) este
destinat în primul rând lucrului cu matrici şi a problemelor care
implică calcul matriceal : rezolvarea de sisteme de ecuaŃii, calculul
vectorilor şi valorilor proprii, etc, oferind şi facilităŃi privind
reprezentările grafice ce au la bază date structurate în matrici de
diverse dimensiuni. Matlab este un sistem interactiv, al carui
element de baza este o matrice care nu trebuie specificata.
Astfel un vector este o matrice cu o linie sau o coloana iar scalarii
reali sau complexi sunt interpretaŃi ca matrici 1x1. Aceste obiecte
sunt definite în timpul lucrului în Matlab şi se numesc variabile.
Datorita facilitatilor sale extraordinare de vizualizare grafica softul
se utilizeaza foarte eficient si in domeniul geometriei
computationale fiind in acelasi timp util si usor de folosit de catre
cei care studiaza aceasta disciplina. Astfel Matlab pune la
dispozitia utilizatorului functii si comenzi specifice de reprezentari
a curbelor si suprafetelor din domeniul geometriei computationale.
Lucrarea imbina intr-un mod util rezultate teoretice din domeniu
cu aplicatii intr-un soft performant si de actualiate.
Matlab lucrează fie în modul linie de comanda, situaŃie în
care fiecare linie este prelucratǎ imediat, rezultatele putând fi

8
VALER NIMINEł APLICATII 3D

afisate, fie cu programme (mai multe instrucŃiuni Matlab cu


posibilitatea apelǎrii altor fişiere de acelaşi tip şi a apelǎrii
recursive ) conŃinute în fişiere numite fişiere-M (« M-files ») ce au
extensia .m
Dupǎ lansarea aplicaŃiei Matlab va aparea fereastra principalǎ
Matlab, din care pot fi deschise apoi alte ferestre supervizate de
Matlab. La variantele mai avansate (6,7) alǎturi de fereastra de
comandǎ (Command Window), mai pot apǎrea implicit Fereastra
Command History, ce permite memorarea, vizualizarea, editarea
şi relansarea funcŃiilor utilizate anterior, fereastra Lunch Pad, care
permite lansarea uneltelor şi accesarea documentaŃiei Matlab. Alte
ferestre care nu apar implicit mai pot fi
- fereastra Current Directory, ce controleazǎ fişierele Matlab
- fereastra Help
- fereastra Workspace unde se vizualizeazǎ şi modificǎ
conŃinutul spaŃiulu de lucru
Command Window este fereastra principalǎ de comunicare cu
utilizatorul şi permite lansarea de funcŃii şi comenzi Matlab. Dacǎ
doriŃi modificarea proprietǎŃilor acestei ferestre selectaŃi
Preferences din meniul File al Matlab Desktop.
Programele create în Matlab pot fi
- fişiere script care sunt fişiere cu comenzi Matlab
- fişiere function
Pentru crearea unui fişier .m selectaŃi File- New- M-file din meniul
Matlab Desktop.
Pentru rularea unui program creat în Matlab e necesară doar
tastarea comenzii cu numele fişierului cu extensia .m în fereastra
de comandă.
ExistenŃa ferestrei de comanda face din Matlab un mediu interactiv
deosebit de util in rezolvarea de aplicaŃii diverse. Astfel dupǎ
tastarea comenzilor în dreptul prompter-lui din fereastra de
comandǎ, calculele se vor efectua la acŃionarea tastei Enter. La
nivelul cel mai de jos, Matlab poate fi folosit ca şi calculator de
buzunar.

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

• what- listeazǎ fişierele *.m, *.mat şi *.mex din directorul


curent ;
• type- listeazǎ fişierul m, menŃionat ;
• lookfor- returneazǎ numele fişierelor care au în prima linie a
help-lui (linia H1) cuvintele precizate ca argument ;
• which- returneazǎ calea în care este localizat un fişier sau o
funcŃie Matlab ;
• who- listeazǎ variabilele curente din memorie ;
• whos- listeazǎ variabilele curente, dimensiunile lor, precum
şi tipul acestora (reale sau complexe) ;
Cel mai uşor mod de a învǎŃa Matlab este de a-l experimenta
singuri şi astfel să vă convingeŃi singuri de flexibilitatea şi usurinŃa
de a lucra cu acest mediu interactiv.
Startul şi terminarea sesiunilor de lucru

 Pe platformele de tip Windows, programul de instalare


creează un “shortcut” la programul executabil, shortcut care
poate fi plasat pe desktop (pe display-ul de lucru al
calculatorului). Prin efectuarea unui dublu click pe icon-ul
care reprezintă acest shortcut se startează MATLAB-ul.
 Pentru startarea MATLAB-ului pe un sistem UNIX trebuie
tastat matlab la prompterul sistemului de operare.

Fişiere de pornire (Startup Files)


La pornire, MATLAB-ul execută automat fişierul master
matlabrc.m şi, dacă există, fişierul startup.m.
Fişierul matlabrc.m este rezervat pentru
administratorul de sistem (reŃea), în timp ce
fişierul startup.m este destinat utilizatorilor. De aici se pot seta
căile de acces, se pot defini setările implicite pentru instrumentele
Handle Graphics şi se pot predefini variabile în spaŃiul de lucru.
De exemplu, dacă în startup.m se introduce linia

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.

Cum părăsesc mediul Matlab ?


Pǎrǎsirea unei sesiuni de lucru Matlab se face cu uşurinŃǎ tastând
în dreptul promter-ului Matlab >>, comenzile exit sau quit.

1.2 Calcule simple în Matlab. Vectori şi matrice

SecŃiunea oferă o introducere în modul de lucru al Matlab-lui cu


numere, vectori, matrici şi operatii care se pot realiza cu acestea.
Matlab oferă în primul rând posibilitatea realizarii operaŃiilor
aritmetice cu vectori, matrici sau scalari dar şi altor operaŃii
specializate pentru lucrul cu matrici uni sau bidimesionale. Daca
presupunem cǎ a şi b sunt doua numere întregi ce pot primi diverse
valori, Matlab poate realiza operaŃiile standard aritmetice cu
aceste valori :
» a =5;
» b =12;
» a+b
ans =

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

• nargin- variabilǎ permanentǎ pentru testarea numǎrului de


argumente de intrare ce se introduc pentru apelarea unei
funcŃii ;
• nargout- variabilǎ permanentǎ pentru testarea numǎrului de
argumente de ieşire ale unei funcŃii ;
• realmax- reprezintǎ cea mai mare valoare pozitivǎ în virgulǎ
mobilǎ care poate fi folositǎ în calcule, respectiv
1.7977e+308 ;
• realmin- reprezintǎ cea mai micǎ valoare pozitivǎ în virgulǎ
mobilǎ care poate fi folositǎ în calcule, respectiv 2.2251e-
308 ;
Numele de variabile şi funcŃii au ca prim caracter urmate de
litere, cifre sau liniuŃǎ de subliniere şi pot fi formate din maxim 19
caractere. Matlab face deosebirea dintre litere mari şi litere mici.
Matlab suportǎ şi calcule cu numere complexe.
» (-1)^0.25
ans =

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 =

0 0.1667 0.3333 0.5000


0.6667 0.8333 1.0000
Pentru a afla lungimea unui vector Matlab oferǎ funcŃia length(x),
iar pentru determinarea dimensiunilor unei matrici avem funcŃia
size(A).
Dacǎ dorim crearea unor vectori cu valori distribuite logaritmic
vom folosi funcŃia de generarea logspace.
In Matlab e posibilă identificarea unei anumite coloane sau linii
din cadrul unei matrici, astfel :
» A=[1 2 3 ; 3 4 -1;2 1 1;4 3 1];
» A(:,2)
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

ObservaŃi din exemplul de mai sus diferenŃa tipăririi matricii A


urmată de punct şi virgula în primul caz şi apoi lipsa acestui semn.
OperaŃia de înmulŃire este şi ea definită :
>> A*C
ans =
22 28
49 64
76 100
>> C*A
??? Error using ==> *
Inner matrix dimensions must agree.
Se observa că programul ne avertizează în cazul în care operaŃiile
nu se pot efectua, în cazul de faŃă, datorită neconcordanŃei de
dimensiuni a matricilor exemplificate.
InmulŃirea dintre un vector şi o matrice este şi ea posibilǎ dacǎ
dimensiunile structurilor o permit.
>> A = [ 1 2 3; 3 4 5; 6 7 8];
>> v = [0:2:8]
v =

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

Vom întâlni des aceşti operatori la calculul valorilor de funcŃii pe


un domeniu dat de valori.
Exemplu Sǎ se calculeze evalueze urmǎtoarele funcŃii pe
domeniile specificate
1
• f ( x) = e x −1 x ∈ [−1,1]
(1 + x )
2

• g ( x) = cos 2 ( x)e x x ∈ [0,2π ]


SecvenŃele Matlab pentru scrierea calculul corect al funcŃiilor
sunt:
>> x=linspace(-1,1,20);
>> f=1./(1+x.^2).*exp(x-1);
respectiv
>> x=linspace(0,2*pi,20);
>> g=cos(x).^2.*exp(x);
Dacǎ nu veŃi afişa semnul ; dupa expresiile funcŃiilor veŃi avea
tabloul valorilor funcŃiilor pentru domeniul de valori dat în
vectorul x.
In cazul vectorilor, înmulŃirea se poate realiza Ńinând cont de
regula de la matrici.
In aceastǎ situaŃie este posibilǎ de exmplu înmulŃirea a doi vectori
linie de aceeaşi dimensiune, rezultatul fiind un vector având drept
componente produsele pe componente ale vectorilor.
>> u=[2 3 4 1.2 5 -1];
>> v=[-1 3 4 -3 0 1];
>> u.*v

ans =

-2.0000 9.0000 16.0000 -3.6000


0 -1.0000
Dacǎ încercaŃi sǎ faceŃi înmulŃirea clasicǎ veŃi obŃine eroare,
structurile nu sunt compatibile pentru aceasta operaŃie
>> u*v
??? Error using ==> *

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 =

0.0000 -0.0323 0.0323


-2.0000 1.0323 -0.0323
1.6667 -0.6774 0.0108

19
VALER NIMINEł APLICATII 3D

Calculul inversei unei matrici face posibilă şi rezolvarea ecuaŃiilor


matriceale de forma :
AX = B , unde A este patrice pătratică inversabilă iar X şi B vectori
coloană cu aceeasi dimensiune a matricii A. Matlab calculează
direct X=A/B, unde « / », este operatorul de împârŃire. RelaŃia
anterioară este echivalenta cu o înmulŃire la stânga lui B cu inversa
matricii A, X=A-1B.
Exemplu
» A=[1 2 3;3 5 6; 34 5 6];
» B=[1 5 7];
» X=A/B

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

» x=1:.5:4 % pasul este de 0.5


x =
1.0000 1.5000 2.0000 2.5000
3.0000 3.5000 4.0000

Semnul % folosit mai sus marchează începutul unui comentariu în


Matlab.
Se acceptă deasemenea ca pas şi numere negative.
Pentru generarea de matrici se poate folosi comanda :
B[x log10(x) x+2] care creazǎ un table/matrice având trei
coloane cu x pe prima coloanǎ, log10(x) în a doua coloanǎ şi x+2
pe a treia coloanǎ.
In Matlab existǎ comenzi care pot asocia unui set de valori dintr-o
matrice anumite valori, astfel:
A(i:j, l:m) = k asociazǎ elementelor matricei situate între
liniile i şi j (i<j) şi coloanele l şi m (l<m) valoarea k.
A(i:j, l) = k asociazǎ elementelor din matrice situate pe coloana l,
între liniile i şi j, valoarea k.
A(i, m) = k asociazǎ elementului situat la intersecŃia liniei i cu
colona m, valoarea k.
Modul uzual de accesare al elemetului unei matrici sau al unui
vector se face prin indicarea numelui structurii si specificarea
indicilor corespunzǎtori. De exemplu elementul A(4,2) reprezintǎ
elementul din linia 4 şi coloana 2. Dacǎ încercaŃi în schimb sǎ
accesaŃi un element din afara matricei, va apǎrea urmǎtorul mesaj:
??? Index exceeds matrix dimensions
Matlab oferă şi posibilitatea vectorizării operaŃiilor aritmetice cu
matrici, utilizând « . » şi procesul se poate observa clar la calculul
valorilor unei funcŃii. Domeniul de definiŃie este reprezentat de un
vector x şi valorile funcŃiei sunt reprezentate tot într-un vector y cu
aceeaşi dimensiune ca x.

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

Dacă dorim să memorăm rezultatele noastre le putem asocia


variabile care să poarte un nume dat de utilizator, înlocuind astfel
numele implicit ans cu cel dat de noi :
» A=[1 2 3; 45 6 7; 12 3 4];
» B=A/4
B =

0.2500 0.5000 0.7500


11.2500 1.5000 1.7500
3.0000 0.7500 1.0000
Pentru a calcula transpusa unei matrici folosim simbolul
apostroful « ‘ »
» A=[1 2 3; 45 6 7; 12 3 4];
» A'
ans =

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 7]' [3 5 8]']

B =

1 2 3
2 4 5
3 7 8

24
VALER NIMINEł APLICATII 3D

Alte functii legate de lucrul cu matrici le puteti vizualiza tastând în


dreptul promter-ului.
Alte cateva operatii cu matrici frecvent întalnite :
- C=A.*B, comanda returneaza matricea produs
C = (cij ) i , j =1,..., n , cij = aij * bij
- C=A./B, returneaza matricea C = (cij ) i , j =1,...,n , cij = aij / bij
Matlab comenzile precedate de comanda help
>>matlab\elmat - Elementary matrices and matrix
manipulation.
>>matlab\matfun - Matrix functions - numerical linear
algebra.

Multe comenzi din Matlab care acŃionează asupra scalarilor,


acŃionează şi asupra vectorilor sau matricilor, element cu element.
>> sqrt([1 2 4 6])
ans =
1.0000 1.4142 2.0000 2.4495
>> sin([pi/4 pi/2 pi])
ans =
0.7071 1.0000 0.0000
Să mai amintim alte câteva comenzi des folosite în calculele cu
vectori
1. min(x), max(x) returneazǎ valorea minima respectiv
maxima dintr-un vector
2. sort(x) returneazǎ un vector ordonat crescator ce contine
valorile lui x
3. sum(x) returneazǎ suma elemntelor unui vector
» x=linspace(0, 1, 7)
x =

0 0.1667 0.3333 0.5000


0.6667 0.8333 1.0000

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 =

0.2311 0.8913 0.0185


0.6068 0.7621 0.8214
0.4860 0.4565 0.4447

Pentru o matrice pătratică A, putem extrage partea triunghiular


superioarǎ a acesteia, matricea cu toate elementele de deasupra
diagonalei principale nenule şi restul zero, folosind comanda
triu(A). Matricea inferior triunghiulară corespunzǎtoare lui A se
obŃine folosind comanda tril(A).
» triu(A)
ans =
3 4 5

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

Operatorii relaŃionali permit compararea cantitativǎ a douǎ


mǎrimi şi sunt reprezentaŃi în tabelul de mai jos

operator semnificatia
> mai mare
< mai mic
>= mai mare sau
egal
<= mai mic sau
egal
= egal
~- diferit

Operatorii logici

operator semnificaŃia descriere


& and întoarce 1 pentru fiecare locaŃie de
element care este adevǎratǎ în ambii
vectori
| or întoarce 1 pentru fiecare locaŃie de
element care este adevǎratǎ în unul sau
în celǎlalt vector
~ not întoarce 0 pentru fiecare locaŃie de
element care este adevǎratǎ şi 1 pentru
fiecare locaŃie de element care este
falsǎ

» 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)

Inputs and or xor not


A B A&B A|B xor(A,B) ~A
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0

De notat cǎ în versiunea Matlab 6, operatorii and şi or au aceeşi


precedenŃǎ, spre deosebire de alte limbaje de programare. O
expresie de forma x | y & z este evaluatǎ în Matlab 5.3 ca (x | y) &
z iar în Matlab 6 x | (y & z). Se recomandǎ astfel adǎugarea
parantezelor în expresii de aceastǎ formǎ pentru a se obŃine
aceleaşi rezultate în toate variantele de Matlab.

29
VALER NIMINEł APLICATII 3D

1.3 Reprezentarea grafică a curbelor şi suprafeŃelor

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

Graficul unui set arbitrar de date asociate unei variabile y poate fi


generat utilizand comanda plot(y). Sa consideram exemplul unor
date care reprezinta cubul numerelor cuprinse in intervalul [-5, 4]
cu pasul 0.1. Aceste date pot fi generate direct folosind comanda
la prometer:

>>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

Se pot adauga etichete axelor x si y, deasemenea un titlu pentru un


grafic cât mai informativ, astfel

>>xlabel('x');
>>ylabel('y');
>>title('Graficul functiei y = x^3');

Daca se doreşte o personalizare a graficului : culoare, stil, etc.,


comanda plot se poate completa cu câteva argumente ce reprezintă
defapt simboluri pentru culoarea sau stilul graficului. Să prezentăm
mai întâi lista acestor simboluri :

culoare marcator stil linie


w -alb . punct - linie continuă
y galben º cerculet : linie punctată
r rosu * asterix -. linie, punct
g verde x -- linie
b albastru + cruce întreruptǎ
k negru

Este posibilă şi setarea limitelor valorilor pe axe, de către utilizator


cu ajutorul comenzii axis[xmin xmax ymin ymax], care defineşte
defapt intervalele [xmin, xmax], [ymin, ymax], între care variază
cele doua variabile, x respectiv y. Matlab localizeazǎ marcajele de
gradare pe axe şi valoarea gradaŃiilor în funcŃie de valorile extreme
ale datelor de reprezentat. Acest mod de gradare al axelor poate fi
schimbat modificând valorile proprietǎtile “xtick”, respectiv
“ytick” ale obiectului grafic axe (“axes”). Setarea acestor
proprietǎŃi se face cu comanda set.
set(gca, ‘xtick’,2:10)
set (gca,’ytick’,[2 2.1 2.2 2.4 2.5 ]),

32
VALER NIMINEł APLICATII 3D

unde gca- reprezintǎ identificatorul pentru sistemul de axe curent


(“Get Current Axes”). In mod implicit, Matlab afişeazǎ graficele
într-un sistem rectangular de axe poziŃionate în fereastra figurǎ
astfel încât spaŃiul sǎ fie utilizat în mod optim.
a) axis(‘square’) sau axis square face ca axele x şi y sǎ aibǎ
aceeaşi lungime (chenarul care e încadreazǎ este un pǎtrat)
b) axis (‘equal’) sau axis equal- determinǎ aceeaşi factori de
scalǎ pentru ambele axe (o unitate de pe axa x va fi egalǎ cu
o unitate de pe axa y).
c) axis off- sterge sistemul de axe şi etichetele acestora;
d) axis on – reface sistemul de axe şi etichetele acestora;
Gridul este o reŃea de linii verticale şi orizontale trasate pe grafic
prin fiecare punct de gradare a axelor care uşureazǎ citirea datelor.
Afişarea sau ascunderea acestuia se fac cu comanda grid, astfel:
grid on- pentru afişare;
grid off- pentru ştergere.
In Matlab putem realiza vizualizarea pe porŃiuni ale reprezentǎrii
grafice curente folosind comanda zoom. Folosind sintaxa zoom
on, se pot realiza efectele:
- se permite specificarea zonei grafice ce va fi detaliatǎ
folosind butonul stâng al mouse-lui;
- la fiecare apǎsare a butonului stâng limitele axelor vor fi
modificate cu un factor de 2, permiŃând vizualizarea
detaliilor;
- se revine la forma iniŃialǎ printr-un dublu click al butonului
stâng al mouse-lui.
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);

33
VALER NIMINEł APLICATII 3D

Pentru vizualizarea mai multor grafice în acelasi sistem de


coordonate existǎ comanda hold on, iar comanda care o anuleazǎ
este hold off.

» 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

Comanda hold on poate fi eliminată dacă se scriu cele două funcŃii


în aceeaşi comandă plot.

>>plot(x, y, ’-r’, x, z,’—g’, x, 0, ’*b’ ) ;


Dacă vrem să vizualizăm grafice diferite în sisteme separate de
coordonate, dar în aceeaşi fereastră a figurii vom utiliza comanda
subplot, care divide defapt suprafaŃa ferestrei sub forma unei
matrici, în care fiecare element al matricei reprezintă defapt un
grafic separat.

34
VALER NIMINEł APLICATII 3D

Argumentele acestei comenzi sunt dimensiunile matricii, şi


numărul subferestrei în care este vizualizat graficul curent.
De exemplu o comandă de forma subplot (2,2,3), împarte
suprafaŃa ferestrei într-o matrice de subferestre, de dimensiune
2x2, şi graficul curent este poziŃionat în subfereastra 3.

» 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

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

exp(-x 2)*cos(4*pi*x)
1

0.5

-0.5

-1
-2 -1 0 1 2

O altǎ funcŃie de desenare este fplot ce poate fi aplicatǎ funcŃiilor


elementare cum ar fi, sin(x), cos(x), exp(x), log(x), etc.

>>fplot ('exp(-t^2)',[-2 2])


>>hold on
>>fplot('2*exp(-t^2)',[-2 2])
>>fplot('3*exp(-t^2)',[-2 2])
>>hold off

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

1.3.2 Reprezentarea 3D. SuprafeŃe

In Matlab se pot realiza şi grafice tridimensionale, care


presupun luarea în calcul a unei a treia axe. Dacă se iau în
considerare matrici de date vom folosi comanda mesh sau surf şi
alte funcŃii derivate din acestea.
Cu ajutorul functiei mesh suprafeŃele sunt reprezentate ca nişte
pânze în care sunt puse în evidenŃa prin diferite culori, doar liniile
care unesc punctele din matricea ce defineşte suprafaŃa. In cazul lui
surf sunt colorate atat liniile de conexiune dintre puncte cât si
patch-urile.
Una din variantele pentru sintaxa comenzii mesh este următoarea :
mesh(X,Y,Z), comandă ce generează o suprafaŃă colorată, în care
culoarea este influenŃată de coordonata Z (« înalŃimea »
suprafeŃei).
Dacă X si Y sunt vectori si lenght(X)=n si lenght(Y)=m, atunci
[m,n]=size(Z), unde cei doi vectori vor corespunde coloanelor,
respectiv liniilor matricii Z.

37
VALER NIMINEł APLICATII 3D

Primul pas în realizarea unui grafic pentru o funcŃie


bidimensională z = f ( x, y ) , este de a transforma domeniul funcŃiei
specificat de cei doi vectori x,y, în douǎ matrici de valori
corespunzatoare X, Y. Aceste matrici vor conŃine defapt copii ale
vectorilor x respectiv y peste domeniul specificat. Comanda care
realizează acest lucru este meshgrid(x,y). Astfel liniile matricii X
vor fi repetări ale vectorului x, iar coloanele lui Y vor fi repetari ale
vectorului y. Dacă cei doi vectori, x respectiv y se dau identici nu e
nevoie să-l specificăm decât pe unul dintre ei.

»x=[-6:.5:6];
» y=x;
» [X,Y]=meshgrid(x);
» Z=sqrt(X.^2+Y.^2);
» mesh(X,Y,Z)

In ideea unei reprezentari cât mai sugestive, Matlab pune la


dispoziŃia utilizatorului câteva comenzi legate de aspectul imaginii,
de poziŃia lui în spatiul 3D, etc.
Fiecare imagine creată 3D, are asociată o harta de culori, care
reprezintă defapt o matrice cu trei coloane, a căror lungime este
egală cu numarul de culori pe care le folosiŃi. Fiecare linie a

38
VALER NIMINEł APLICATII 3D

matricii defineşte o anumită culoare prin specificarea unor valori


intre 0 si 1. Acestea reprezintă componente ale sistemului de
culori RGB, adica intensităŃi de roşu, verde şi albastru. Să dăm
tabelul câtorva culori reprezentive din acest sistem :

Red Green Blue Culoare


0 0 0 Negru
1 1 1 Ab
1 0 0 Rosu
0 1 0 Verde
0 0 1 Albastru
1 1 0 Galben
1 0 1 Magenta
0 1 1 Cyan
0.5 0.5 0.5 Gri
0.5 0 0 Rosu
inchis
1 0.62 0.40 Copper
0.49 1 0.83 aquamarin

Astfel având aceste valori, vă puteti crea singuri harta voastra de


culori, sau puteti folosi funcŃiile deja existente care crează
anumite mape de culori. Referitor la culori, la crearea unei
suprafeŃe 3D existǎ trei posibilitǎŃi:
• Nu sunt specificate explicit culorile şi atunci Matlab
genereazǎ matricea d culori asociate datelor folosind
datele din matricea Z;
• Se specificǎ o matrice de culori, egalǎ cu dimensiunea ;
• Se specificǎ un triplet RGB pentru fiecare element din
matricea de date Z;
Paleta de culori (“colormap”) este o matrice cu trei coloane, fiecare
linie definind o culoare printr-un vector RGB. ConŃinutul acesteia

39
VALER NIMINEł APLICATII 3D

este controlat prin funcŃia colormap. In sistemul grafic Matlab


existǎ ma multe modele predefinite de culori:
- autumn, care foloseşte nunaŃe bazate pe roşu, portocaliu şi
galben;
- bone, foloseşte nuanŃe de albastru şi gri;
- cool, constǎ în nunaŃe ce varizǎ de la albastru deschis spre
mov;
- copper, afişeazǎ nuanŃe de la negru spre arǎmiu;
- gray, foloseşte nuanŃe de gri;
- hot, variazǎ lent de la negru la alb prin nuanŃe de roşu,
potocaliu şi galben;
- hsv, începe cu roşu, trece prin galben, verde, albastru, şi
mov, revenind la roşu;
- jet, trece de la albastru la roşu prin albastru deschis, galben
şi portocaliu;
- pink, conŃine nuanŃe derivate din culoarea roz;
- prism, repetǎ şase culori: roşu, portocaliu, galben, galben,
verde, albastru şi violet;
- spring, constǎ în culori derivate din mov şi galben;
- summer, constǎ în culori derivate din verde şi galben;
- winter, constǎ în culori derivate din albastru şi verde;
De exemplu funcŃia hot(m) va genera o matrice de culori de
dimensiuni m x 3, in care liniile specifică intensităŃile de culori ale
sistemului RGB ce variază de la negru la alb trecând prin nuanŃe de
roşu, portocaliu şi galben.

» [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

Am folosit mai sus funcŃia cool de generare a mapei de culori.


IncercaŃi pe rând şi voi celelalte funcŃii !
Stabilirea modului de colorare a obiectelor grafice de tip surface şi
path se realizeazǎ shading cu câteva opŃiuni : shading flat sau
shading interp ori shading faceted.

» 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

Mai sus este generată o suprafaŃă binecunoscută peaks, folosind


comanda surf.
Să considerăm cazul reprezentării unei funcŃii de două variabile
func(x,y), funcŃie creată într-un fişier Matlab.

function z=func(x,y)
z=sin(x).*cos(y)+1;

Utilizând următoarele comenzi în fereastra de comandă a Matlab-


ului obŃinem reprezentarea grafică a funcŃiei func(x,y)

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

La apelarea funcŃiei func(x,y), în fereastra de comandă să


avem grijă să ne găsim în directorul de lucru în care am salvat
functia, operaŃie executată cu funcŃia Set Path... din meniul File al
mediului Matlab. In caz contrar aplicaŃia Matlab va returna
urmatorul mesaj: “ ??? Undefined function or variable
'func'.!!!!”

După cum s-a observat din imaginile exemplificate, comada surf


spre deosebire de mesh, crează o umplere solidă a suprafeŃei, iar
comanda surfc crează şi un contur în planul de jos al figurii.

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

Daca se doreste reprezentarea unei functii impreuna cu


« soclul » pe care este asezata reprezentarea se foloseste functia
meshz

>> [X,Y] = meshgrid(0:.1:2*pi,-pi:.1:0);


>> Z = sin(X).*cos(Y);
>> meshz(X,Y,Z);
>> axis('equal');

0.5

-0.5
6
5
4
-1 3
2
-2
1
-3 0

Sǎ considerǎm un exemplu de funcŃie în douǎ variabile, datǎ în


coordonate cilindrice
z = f(r,theta). Vom combina comanda 3D, meshgrid, cu o
comandǎ de trecere de la coordinate polare la un domeniu
rectangular, vom obŃine graficul de mai jos

» [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

Similară în aparenŃă funcŃiei meshz este funcŃia waterfall. Pentru


exemplificare să considerăm un semnal care este primit de un
senzor timp de 100 secunde dar pentru care întârzierile cresc
exponenŃial pe secundă. Următorul cod Matlab redă comportarea:

>> 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

Dându-se suprafaŃa, conturul ei poate fi realizat cu comanda


contour, ca în exemplul de mai jos:

» 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

Conturul poate fi combinat cu graficul 3D al funcŃiei g, astfel

» 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

Sǎ reprezentǎm o suprafatǎ datǎ exponenŃial pentru care vrem sǎ


calculǎm un maxim , respectiv un minim, stabilind şi locaŃiile lor
pe grafic. FuncŃia este datǎ astfel :
f = − xye −2( x + y ) , − 2 ≤ x ≤ 2, − 2 ≤ y ≤ 2 .
2 2

» [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

Sǎ mai consideram o aplicaŃie, cazul reprezentǎrii funcŃiei


Rosenbrock f ( x, y ) = 100( y − x 2 ) 2 + (1 − x) 2 + 2
pe intervalul [−3,3] × [−5,10] .

» [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

In Matlab existǎ funcŃii predefinite pentru reprezentarea unei


sfere şi a unui cilindru. Generarea unei sfere cu raza egalǎ cu
unitatea se realizeazǎ cu funcŃia sphere, care poate fi utilizatǎ cu
una din sintaxele de mai jos.

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

Generarea unui cilindru (sau formǎ generatǎ din acesta) cu


înǎlŃimea egalǎ cu unitatea se realizeazǎ cu una din sintaxele:
[X,Y,Z]=cylinder
[X,Y,X]=cylinder (r)
[X,Y,Z]= cylinder(r,n).
Argumentul r specificǎ raza cercului circumscris poligonului
regulat de la bazǎ. Valoarea implicitǎ a lui r este 1. Argumentul n,
întotdeauna un scalar, specificǎ numǎrul de laturi ale poligoanelor
regulate care formeazǎ bazele formelor geometrice 3D. Valoarea
implicitǎ a acestuia este 20.
Interesant este sa se porneasca si de la forma profilului
radial a unui cilindru si apoi sa se creeze acesta. Pornind de la
urmatoarea ecuatie ce descrie profilul radial al unui cilindru
x2
r = cos( x) sin (x / 2)e 200
Vom scrie in matlab codul de program ce va genera un cilindru
pornind de la acest profil.

>> 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

Un alt exemplu de reprezentare a cilindrului este dat de următorul


cod

>> 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

FuncŃia plot3 se utilizează într-un mod similar funcŃiei plot cu


excepŃia unei coordonate suplimentare z, care asigură
reprezentarea într-un spaŃiu tridimensional.
Codul urmator

>> 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');

produce urmatoarea figura

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

Pentru vizualizarea datelor discrete in planul 2D aveam


funcŃia stem. Similar acestei funcŃii, funcŃia stem3 creează linii
verticale terminate cu un simbol, în planul 3D.
Vizualizăm în continuare funcŃia sin în jurul cercului unitate.

>> theta = 0:.2:2*pi;


>> x=sin(theta);
>> y=cos(theta);
>> z=sin(theta);
>> stem3(x,y,z);
>> hold on
>> plot3(x,y,z,'r')
>> plot(x,y)

56
VALER NIMINEł APLICATII 3D

0.5

-0.5

-1
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1

Matlab ne oferă şi posibilitatea vizualizării imaginii sau


obiectului respectiv, dintr-un anumit unghi, dorit de utilizator, cât
şi posibilitatea de a crea animaŃie cu un obiect grafic. NoŃiunea de
view, se referă tocmai la acesti paramteri legati de orientarea
obiectului in spatiul 3D. Astfel comanda view, seteazǎ parametrii
punctului din care se face vizualizarea prin specificarea azimutului
şi a elevaŃiei, în raport cu originea sistemului de coordonate

57
VALER NIMINEł APLICATII 3D

Pentru grafice 2-D, valoarea implicită a azimutului = 0° şi a


elevaŃiei = 90°.
Pentru grafice 3-D, valoarea implicită a azimutului = -37.5° şi a
elevaŃiei = 30°.
Să urmărim această comandă pentru exemplu din figura de mai sus

>> 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

Default plot3 Az=-10, El=10


40 40
30 20

20 0
1
10

0 0
1
0 1
-1 -1 0 1 -1 0
-1

Az=0, El=90 Az=90, El=0


1 40

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

Grafice de suprafeŃe cu iluminări

Iluminarea este tehnica de a proiecta o lumina asupra unui


obiect cu o
sursa directionala de lumina. În anumite cazuri aceasta tehnica
poate sa faca
diferente subtile pe forma suprafetei si o face mai usor de
vizualizat.
Iluminarea poate fi de asemenea folosita pentru a adauga o nota de
realism
graficelor în trei dimensiuni.Exemplul care urmeaza foloseste
aceeasi suprafata ca si în exemplul anterior dar în schimb acesta
coloreaza imaginea în rosu si îndeparteaza din desen liniile de
plasa. Se adauga dupa aceea un obiect de tip lumina în stânga
“camerei” (care semnifica locatia în spatiu unde este plasat
observatorul, adica de unde se vizualizeaza suprafata). Dupa ce se
adauga lumina si se seteaza metoda de iluminare la optiunea
phong, se foloseste comanda view pentru a schimba punctul de
vizualizare catre suprafata la un alt punct în spatiu (un azimut de –
15 si o elevatie de 65 grade). În final, din bara de instrumente se
poate apropia camera de suprafata astfel încât suprafata sa fie
vazuta mai aproape de observator (cu optiunea zoom in).
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> surf(X,Y,Z)
>>
surf(X,Y,Z,'FaceColor','red','EdgeColor','none')
;
>> camlight left; lighting phong;

60
VALER NIMINEł APLICATII 3D

1.4 Calcul Simbolic în Matlab

Pentru calcule simbolice, Matlab pune la dispozitia


utilizatorului toolbox-ul Symbolic Math. Lista completă a
funcŃiilor şi comenzilor Matlab pentru calcul simbolic se poate
afişa prin apelul help-lui asociat directorului Matlab symbolic.
Rezolvarea unei probleme pe cale simbolică trebuie să
înceapă cu definirea obiectelor simbolice (simbolurilor), Apoi se
trece la implementarea propriu-zisă a soluŃionării problemei.
Cu ajutorul calcului simbolic se pot rezolva o categorie larga
de probleme de natura matematica ce uneori pot creea probleme
din punct de vedere al volumului de calcul. Astfel calculul
limitelor, integralelor sau calculul derivatelor de functii complexe
poate deveni o sarcina foarte usoara prin utilizarea functiilor
specifice Matlab.
Pentru crearea variabilelor simbolice in Matlab se utilizeaza
comanda SYMS.
>>syms x y real
De specificat ca variabile nu sunt separate prin virgula!
Putem defini o expresie simboloca utilizand operatorii uzuali.
Vectorizarea nu se aplica in cazul expresiilor simbolice si nu va fi
utilizata in definitia ei. De exemplu:
>> t=x^2-3*x
t =
x^2-3*x
defineste o expresie simbolica.
In Matlab diferenta fundamentala intre notiunea de functie
definita in paragrafele de mai sus si o expresie simbolica este ca o
functie poate fi apelata cu un argument pe cand o expresie
simbolica nu ! Pe de alta parte o expresie simbolica poate fi
diferentiata sau integrata simbolic spre deosebire de o functie.
Pentru evaluarea unei expresii simbolice vom utiliza comanda
subs.

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 =

-2.0000 6.7500 -2.0000


Derivarea expresiilor simbolice se face simplu utilizand comanda
diff.
>> syms x
>> f=x^2*sin(x)-exp(x)
f =
x^2*sin(x)-exp(x)
>> diff(f)
ans =
2*x*sin(x)+x^2*cos(x)-exp(x).
Pentru derivate de ordin superior, ordinul dorit se include ca
parametru in comanda.
>> diff(f,3)
ans =
6*cos(x)-6*x*sin(x)-x^2*cos(x)-exp(x).
Pentru expresiile de mai multe variabile putem deasemenea utiliza
comanda diff pentru calculul derivatelor partiale.
>> syms x y
>> z=x^2+x*y
z =
x^2+x*y
>> diff(z,x)
ans =
2*x+y.
>> diff(z,y)
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

Pentru rezolvarea ecuaŃiilor date de funcŃii specificate simbolic


avem la dispoziŃie funcŃia solve.

>> 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)

Dacă ecuaŃia este în mai multe variabile se poate specifica ca


parametru variabila în care se rezolvă ecuaŃia.

>> clear, syms x y;


>>eq = 'exp(2*x) = 3*y';

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 :

>> clear, syms x y z;


>> eq1 = '2*x-3*y+4*z = 5'
>> eq2 = 'y+4*z+x = 10',
>> eq3 = '-2*z+3*x+4*y = 0'
>> [x,y,z] = solve(eq1,eq2,eq3,x,y,z)

Problema calculului de limite poate fi rezolvata deasemena în


cazul variabilelor simbolice utilizând comanda limit.
Să presupunem că avem de calculat limita :

 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

TRASAREA CURBELOR IN PLAN

2.1. Reprezentări analitice ale curbelor plane

Geometria diferenŃială clasică a curbelor studiază


proprietăŃile locale ale acestora, adică acele proprietăŃi care depind
de comportarea curbei în vecinătatea unui punct al său. Cadrul cel
mai adecvat de studiul local al curbelor este cel al calculului
diferenŃial, motiv pentru care funcŃiile ce intervin în definirea
curbelor sunt pesupuse a fi diferenŃiabile.
În analiza matematică diferenŃiabilitatea unei funcŃii
f : D → R n se defineşte în contextul în care D este o mulŃime
deschisă din Rn.
Dacă V este o submulŃime a lui Rn, atunci o funcŃie
f : U → R n se numeşte diferenŃiabilă pe U dacă există o mulŃime
deschisă D a lui Rn ce conŃine mulŃimea U şi o funcŃie g : D → R n
diferenŃiabilă pe D, astfel încât g / U = f .
O curbă plană este o submulŃime Γ a lui R 2 definită ca o
mulŃime de puncte ce satisfac anumite condiŃii relativ la o funcŃie
f : I → R sau F : D ⊂ R 2 → R sau C : I ⊂ R → R 2 . După tipul
funcŃiei ce intervine în definiŃia curbei avem diferite ecuaŃii ale
acesteia.

2.1.1 Reprezentarea explicită a unei curbe plane

Fie I ⊆ R un interval şi f : I → R o funcŃie de clasă C1 pe I.


Se numeşte curbă diferenŃiabilă definită de funcŃia f , mulŃimea
Γ = {M ( x, y ) ∈ E 2 / y = f ( x) ∈ I )}.

67
VALER NIMINEł APLICATII 3D

Curba definită de funcŃia f reprezintă, evident, graficul lui f.


Vom indica în cele ce urmează curba Γ prin ecuaŃia:
y = f ( x), x ∈ I (2.1.1)
numită ecuaŃia explicită a curbei.

Exemplu: y = sin x, x ∈ [0,2π ] (fig.2.1.1)

y y

M(x,sinx)

x
x

Fig. 2.1.1 Fig . 2.1.2

Reprezentarea graficelor de mai sus devine o problema


extrem de simpla daca o vom rezolva in Matlab.
Vom exemplifica in continuare folosind comenzi si functii Matlab
specifice
» title ('Graficul functiei sin(x)')
» legend ('- functia sin(x)')
» xlabel ('x')
» ylabel ('f(x)=sin(x)')
îl transformă pe acesta astfel:

68
VALER NIMINEł APLICATII 3D

Graficul functiei sin(x)


1

0.8

0.6

0.4

0.2

f(x)=sin(x)
0

-0.2

-0.4

-0.6

-0.8 - functia sin(x)

-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);

Pentru vizualizarea mai multor curbe în acelasi sistem de


coordonate existǎ comanda hold on, iar comanda care o anuleazǎ
este hold off.

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

uneori eficientă când nu există posibilitatea calcularii directe a

70
VALER NIMINEł APLICATII 3D

soluŃiilor, ci doar a aproximarii lor prin determinarea intervalului


căruia îi apartin, vizualizat astfel din grafic.
Comanda hold on poate fi eliminată dacă se scriu cele două funcŃii
în aceeaşi comandă plot.
>>plot(x, y, ’-r’, x, z,’—g’, x, 0, ’*b’ ) ;
Dacă vrem să vizualizăm grafice diferite în sisteme separate de
coordonate, dar în aceeaşi fereastră a figurii vom utiliza comanda
subplot, care divide defapt suprafaŃa ferestrei sub forma unei
matrici, în care fiecare element al matricei reprezintă defapt un
grafic separat.
Argumentele acestei comenzi sunt dimensiunile matricii, şi
numărul subferestrei în care este vizualizat graficul curent.
De exemplu o comandă de forma subplot (2,2,3), împarte
suprafaŃa ferestrei într-o matrice de subferestre, de dimensiune
2x2, şi graficul curent este poziŃionat în subfereastra 3.
» 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);

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

2.1.2 Reprezentarea implicită a unei curbe plane

Fie D ⊂ R 2 şi F : D → R o funcŃie de clasă C1 pe D.

72
VALER NIMINEł APLICATII 3D

MulŃimea Γ = {M (x, y ) / F (x, y ) = 0} o numim curbă plană dată prin


ecuaŃia implicită

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ă:

Să desenăm un cerc dat de rază 2. Din ecuatia de mai sus avem că


y = ± 4 − x 2 si pentru obŃinerea cercului avem de reprezentat în
Matlab ambele rădăcini.

>> 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

-2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5

Pentru reprezentarea hiperbolei pentru a=2 avem următoarea


reprezentare

>> 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

2.1.3 Reprezentarea parametrică a unei curbe plane

O mulŃime Γ ⊂ R 2 se numeşte curbă plană parametrizată


dacă există o aplicaŃie C : I ⊆ R → R 2 , c(t ) = ( x(t ), y (t )) de clasă Cn ,
n ≥ 1 pe intervalul I astfel încât:
Γ = Im c = {M ( x, y ) / ∃t ∈ I astfel incat t ( x, y ) = c(t )}.
AplicaŃia c se numeşte parametrizare a curbei Γ , iar t ∈ I se
numeşte parametru.
Exemplu: Curba Γ1 din Fig. 2.1.6 este parametrizată de
c 2 : R → R 2 , c 2 (t ) = (t 3 − 4t , t 2 − 4)

75
VALER NIMINEł APLICATII 3D

O x

.
Fig. 2.1.6

In Matlab problema se poate rezolva in modul urmator:


>> t=-3:.01:3;
>> x=t.^3-4*t;
>> y=t.^2-4;
>> plot(x,y)
5

-1

-2

-3

-4
-15 -10 -5 0 5 10 15

76
VALER NIMINEł APLICATII 3D

Daca ne referim la conicele specificate mai sus ecuatiile scrise


parametrizat:

• Cerc: ,

• Elipsă: ,

• Parabolă: ,

• Hiperbolă: sau .

O curbă dată parametric, Γ = imc , are o generare cinematică: ea


reprezintă traiectoria unui mobil care la momentul t se găseşte în
poziŃia de coordonate ( x(t ), y (t )) . Vom indica o curbă
parametrizată prin ecuaŃiile:
 x = x(t )
 , t∈I (2.1.3)
 y = y (t )
pe care le numim ecuaŃii parametrice ale curbei Γ .
DefiniŃia 2.1.1 Curba Γ = Im c, c : [a, b] → R se numeşte
curbă închisă dacă c(a ) = c(b) .

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

DefiniŃia 2.1.2 Fie curba Γ = Im c, c : I → R 2 şi M ( x0 , y 0 ) ∈ Γ .


Punctul M al curbei se numeşte punct simplu dacă mulŃimea
c −1 ( x0 , y 0 ) = {t ∈ I / c(t ) = ( x0 , y 0 )} conŃine un singur element şi punct
multiplu de ordin k dacă mulŃimea c −1 ( x0 , y 0 ) conŃine k elemente,
adică există t1 , t 2 ,..., t k ∈ I astfel încât c(ti ) = ( x0 , y 0 ), ∀i ∈ 1, k .

77
VALER NIMINEł APLICATII 3D

ObservaŃie. Dacă Γ = Im c şi parametrizarea c este bijectivă,


atunci orice punct al curbei este simplu.
Exemplu Vom considera în continuare un cazul curbei lui
Talbot ale cărei ecuaŃii parametrice sunt
x(t ) = (sin 2 (t ) + 1) cos(t )
y (t ) = (sin 2 (t ) − 1) sin(t )
pentru 0 ≤ t < 2π .
Vizualizarea în Matlab a curbei este dată de următoarele linii de
cod:
>> t=0:.01:2*pi;
>> x=((sin(t)).^2+1).*cos(t);
>> y=((sin(t)).^2-1).*sin(t);
>> plot(x,y)

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

2.1.4 Curbe date în coordonate polare

Fie un reper polar în plan de pol 0 şi axă polară Ox.


Coordonatele unui punct x faŃă de acest reper le notăm:
( ρ ,θ ) .

M π
θ=
π4
θ O
θ=
O
x x 6
Fig. 2.1.8 Fig.2.1.9

O curbă plană dată în coordonate polare este mulŃimea:


{
Γ = M ( ρ , θ ) / ρ = f (θ ), f : [α , β ] → R, f ∈ C 1 [α , β ] }
EcuaŃia:
ρ = f (a), θ ∈ [α , β ] (2.1.5)
o numim ecuaŃie în coordonate polare a curbei Γ .
Exemplu: ρ = 1 + cos θ , θ ∈ [0,2π ] . (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

Un exemplu cunoscut este cel al reprezentării cardioidei pe care îl


prezentăm în continuare insotite de comenzile Matlab
» t=linspace(0,2*pi,200);
» r=1+sin(t);
» polar(t,r);
» title('cardioida')
cardioida
90
2
120 60
1.5

150 1 30

0.5

180 0

210 330

240 300
270

Fig. 2.1.10

Prin urmare programul MATLAB poate sa deseneze si grafice


polare, adica sub forma de modul si unghi de faza daca comanda
este de forma polar(x,y).
Următoarele linii de cod generează o elipsă în coordonate polare
>> th=0:2*pi/100:2*pi;
>> ro=1+.2*cos(th);
>> polar(th,ro)

80
VALER NIMINEł APLICATII 3D

90 1.5
120 60

150 30
0.5

180 0

210 330

240 300
270

Graficul care se obŃine nu seamană cu o elipsă pentru că este


reprezentat în coordonate polare. Pentru a observa forma clasica a
elipsei este necesar să se traseze funcŃia în coordonate carteziene.
Se poate face conversia coordonatelor polare în coordonate
carteziene prin utilizarea functiei de conversie pol2cart astfel :
>> [x,y] = pol2cart(th,ro) ;
>> plot(x,y) ;
>> axis equal
Pentru reprezentarea unei spirale vom scrie următoarele linii de cod
>> th=0:2*pi/100:2*pi;
>> ro=3*th;
>> polar(th,ro)

81
VALER NIMINEł APLICATII 3D

90 20
120 60
15

150 10 30

180 0

210 330

240 300
270

2.2 Tangenta şi normala într-un punct al unei curbe plane

2. 2.1. Tangenta şi normala într-un punct al unei curbe plane


date explicit
Fie curba ( Γ ) y = f ( x), x ∈ I , f ∈ C 1 ( I ) şi M ( x0 , f ( x0 )) ∈ Γ. Se
ştie că din punct de vedere geometric derivata funcŃiei f în x0 ,
f ′( x0 ) , reprezintă panta tangentei în M0(x0,f(x0)) la graficul
funcŃiei. Prin urmare ecuaŃia tangentei în M0 la curbă este:
y − f ( x0 ) = f ′( x0 )( x − x 0 ) (2.2.1)
DefiniŃia 2.2.1. Se numeşte normală în punctul M0 al curbei
Γ , dreapta perpendiculară în M0, pe tangenta în acest punct la
curbă.
Într-un punct M 0 ( x0 , f ( x 0 )) al curbei ( Γ ) în care f ′( x0 ) ≠ 0 ,
1
panta normalei este − şi deci ecuaŃia normalei este:
f ′( x0 )
1
y − f ( x0 ) = − ( x − x0 ) (2.2.2)
f ′( x0 )
Dacă f ′( x0 ) = 0 , ecuaŃia tangentei în M o ( x0 , f ( x0 )) ∈ Γ este
y = f ( x0 ) , iar a normalei x = x0 .

82
VALER NIMINEł APLICATII 3D

Vom exemplifica mai jos în Matlab trasarea unei tangente la o


curbă într-un punct de pe curba
Problema
Să se traseze tangenta la graficul funcŃiei sin (x) în punctul
x=2.

Reamintim mai întai ca ecuatia unei tangente la graficul functiei


y(x) în punctul x=x0 are forma y-y0=m(x-x0), unde m reprezinta
panta tangentei in punctul respectiv. Vom scrie urmatoarele
comenzi Matlab pentru rezolvarea problemei.

>> 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

TRASAREA CURBELOR ÎN SPAłIU SI A


SUPRAFETELOR

3.1 Reprezentarea curbelor în spaŃiu

Pentru a defini noŃiunea de curbă în spaŃiu, intuitiv apelăm la


traiectoria unui punct mobil. Fie t un parametru t ∈ I , unde I este
un interval fie închis, fie deschis, fie semideschis. (adică I = [a ,b]
sau I = (a, b) sau I = (a, b] ) şi
Considerăm funcŃiile continui x, y, z : I → R .
Aceste funcŃii ne definesc funcŃia vectorială de argument scalar,
continuă
r : I → E 3 , r (t ) = x(t )i + y (t ) j + z (t )k (3.1.1)
3
unde E este spaŃiul euclidian tridimensional.
DefiniŃia 3.1.1 MulŃimea C = {r (t ) / t ∈ I } se numeşte arc
continuu de curbă.
Astfel o curbă se dă printr-o funcŃie vectorială
r = r (t ), t ∈ I
Această noŃiune de curbă nu satisface pretenŃiile noastre
intuitive despre curba continuă, deoarece există şi curbe continue
ce umplu pătratul [0,1] × [0,1] × {0} .
DefiniŃia 3.1.2. Arcul de curbă continuă r = r (t ), t ∈ I se numeşte
−1
arc simplu dacă r este bijecŃie între I şi Im(r) şi r este de
asemenea continuă.
ObservaŃie. În cazul în care I = [α , β ] din faptul că r este
−1
bijecŃie continuă rezultă că r este de asemenea continuă.
JusteŃea acestei observaŃii o ilustrăm prin curba

85
VALER NIMINEł APLICATII 3D

r : [0,2π ] → R 3 , r (t ) = cos t i + sin t j + o ⋅ k .


−1
Evident că r este continuă dar r nu. (imaginea lui I este cercul
de rază 1 şi cu centrul în origine din planul (xoy ) ).
Constatăm că noŃiunea de arc simplu este prea restrictivă.
Nu intră în această categorie o serie de curbe, de exemplu cele
care se autointersectează.
Din acest motiv ne vom ocupa de funcŃii
r : I → E , r (t ) = x(t )i + y (t ) j + z (t )k care reprezintă arce simple pe
3

porŃiuni (adică intervalul I se descompune în reuniune finită de


intervale astfel încât pe fiecare subinterval r să reprezinte un arc
simplu). Studiul acestor curbe se reduce de fapt la studiul arcelor
simple r : I → E 3 , I = [α , β ].
Dacă un arc simplu de curbă se da prin
r : I → E 3 , r (t ) = x(t )i + y (t ) j + z (t )k
Atunci spunem că s-a dat curba prin ecuaŃia sa vectorială.
Această ecuaŃie vectorială este complet determinată de funcŃiile
 x = x(t )

 y = y (t ) t∈I (3.1.2)
 z = z (t )

Sistemul de funcŃii dat mai sus poartă denumirea de ecuaŃiile
parametrice ale curbei.
EcuaŃia vectorială a unei curbe nu este unică. De exemplu:
r 1 : [0, π ] → E 3 , r1 (t ) = cos t i + sin t j + o ⋅ k .
π
r2 : [0, ] → E 3 , r 2 (t ) = cos 2t i + sin 2t j + o ⋅ k .
2
Reprezintă acelaşi semicerc din planul (xoy ) .
DefiniŃia 3.1.3 Reprezentante r 1 (t ), t ∈ [a, b] şi r 2 (τ ),τ ∈ [α , β ] ale
unui arc simplu se numesc echivalente dacă există o funcŃie
continuă, strict monotonă şi surjectivă ϕ : [α , β ] → [a, b] astfel încât
r 2 = r 1 o ϕ.

86
VALER NIMINEł APLICATII 3D

Majoritatea noŃiunilor care vor fi studiate sunt invariante la


parametrizarea curbei, adică nu depind de parametrizarea
echivalentă aleasă.
O altă modalitate de a defini o curbă în spaŃiu este ca intersecŃie
a două suprafeŃe sub formă carteziană explicită:
 z = f ( x, y )
 ' ( x, y ) ∈ D (⊆ R 2 ) (3.1.3)
 z = g ( x , y )
sau sub forma carteziană implicită:
 F ( x, y , z ) = 0
 , ( x, y , z ) ∈ D (⊆ R 3 ) (3.1.4)
G ( x , y , z ) = 0
Presupunem că funcŃiile F şi G satisfac condiŃiile din teorema
funcŃiilor implicite. În astfel de situaŃii, local putem alege una din
variabile ca parametru, de exemplu x = t şi sistemul de funcŃii
implicite
 F (t , y, z ) = 0

G (0, y, z ) = 0
ne defineşte funcŃiile y = y (t ) şi z = z (t ) ; deci curba poate fi
privită ca fiind reprezentată local prin ecuaŃiile parametrice
 x = x(t )

 y = y (t ) t ∈ [α , β ] .
 z = z (t )

Reciproc, dacă avem o reprezentare parametrică a curbei C
putem găsi una dintre formele carteziene (3.1.3) sau (3.1.4),
eliminând parametrul t între ecuaŃiile (3.1.2).
Desenele în 3 dimensiuni se pot reprezenta în mod similar cu cele
în doua dimensiuni.
Exemplul Se introduc in fereastra Matlab-ului urmatoarele:
>> t = -2*pi:.001:2*pi;
>> x=cos(t); y=sin(t);z=t;
>> plot3(x,y,z)

ExerciŃiul de mai sus desenează o elicoidă.

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

În geometria diferenŃială a curbelor se studiază arce C = Im⋅ r unde


k
r : I → R 3 este aplicaŃia diferenŃială de clasă C , k convenabil ales.
Fie r 1 = r 1 (t ), t ∈ [a, b] reprezentarea vectorială a unui arc simplu,
unde r 1 este de clasă Ck. Dacă ϕ : [α , β ] → [a, b] este de clasă Ch, cu
ϕ (α ) = a şi ϕ ( β ) = b sau ϕ (α ) = b şi ϕ ( β ) = a , atunci reprezentarea
echivalentă r 2 = r 1 o ϕ . este de clasă Ce, unde e = min{h, k} .
Acest rezultat este cunoscut din analiza matematică.

Să consideram în continuare curba spaŃială data de ecuaŃiile


parametrice
x = a cos ωt
y = a sin ωt (3.1.5)
z = bt
pentru a = 2, b = 0.1, ω = 2, si 0 ≤ t ≤ 12π.
Constanta a=2 controlează amplitudinea lui x şi y. Valoarea lui b
controlează rata la care z (înalŃimea) se modifică în raport cu

88
VALER NIMINEł APLICATII 3D

timpul. Valoarea ω controlează rata la care particula înconjoară


originea, aceasta făcându-se cu o viteză de 2 radiani per secunda.
Pentru vizualizarea în Matlab 3D şi efectelor de animaŃie a curbei
date de ecuaŃiile (3.1.5) vom scrie comenzile:
a=2;
b=0.1;
w=2;
t=linspace(0,12*pi,500);
x=a*cos(w*t);
y=a*sin(w*t);
z=b*t;
Pentru obŃinerea efectelor de animaŃie:
comet3(x,y,z).
Vizualizarea curbei se obŃine cu comanda 3D.
plot3(x,y,z)
xlabel(’x-axis’)
ylabel(’y-axis’)
zlabel(’z-axis’)
title(’x = 2 cos(t), y = 2 sin(t), z = 0.1t.’)

Fig. 3.1.2 Helix

89
VALER NIMINEł APLICATII 3D

Exemplu Presupunem că o navă calatoreşte de polul sud spre


polul nord păstrând un unghi fix faŃă de toate meridianele. Atunci
traseul va fi descris de ecuaŃiile

cos t
x=
1 + α 2t 2
sin t
y=
1 + α 2t 2
z = αt

Consideram α = 0.2 si −12π ≤ t ≤ 12π.


In Matlab vom scrie comenzile

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).

Multe din curbele spaŃiale se află în legătură cu suprafeŃele. Astfel


în cazul spiralei sferice putem intui o legătură cu sfera.
EcuaŃiile parametrice ale spiralei sferice sunt date de
x = r s in φ c o s θ
y = r s in φ s in θ
z = r cos φ
Considerăm r = 1 şi creând o reŃea pentru perechea (φ, θ) ,unde
0 ≤ φ ≤ π and 0 ≤ θ ≤ 2π. r=1;

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.

Curba lui Viviani

Multe din curbe se pot obŃine ca intersecŃie a două suprafeŃe. De


exemplu toate secŃiunile conice (cerc elipsa, parabola şi hiperbola)
sunt determinate de modul în care un plan intersectează un con
circular drept.
Această curbă se obŃine la intersecŃia unei sfere de raza 2r şi a
unui cilindru circular drept de rază r ce este deplasat cu r atât pe
direcŃia x cât şi pe y. EcuaŃia sferei este x 2 + y 2 + z 2 = 4r 2 . Aceasta
sferă este generată de ecuaŃiile parametrice

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

Dacă reprezentăm setul punctelor (x,y,z) astfel încât x 2 + y 2 = r 2 ,


rezultatul este un cilindru circular drept de rază r. Inlocuind x cu
x-r obŃinem ( x − r ) 2 + y 2 = r 2 care va deplasa cilindrul cu distanta r
pe directia x. Cum putem parametriza cilindrul dat de
( x − r)2 + y 2 = r 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

Astfel ecuaŃiile parametrice ale cilindrului circular drept


( x − r )2 + y 2 = r 2
x = r + r cos t
y = r sin t
z = z.
Ideea reprezentării în Matlab a cilindrului este aceea că x, y şi z
sunt funcŃii de t şi z.

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

Să considerăm acum pentru acelaşi con circular drept o secŃiune


plană dată de ecuaŃia z=y+0.25 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',[0.625,0,0])
>> set(mhndl,...
'EdgeColor',[.6,.6,.6])
>> hold on
>> [x,y]=meshgrid(-1:0.1:1);
>> z=y+0.25;
>> phndl=mesh(x,y,z);
>> set(phndl,...

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

3.2. NoŃiunea de suprafaŃă. Curbe pe o suprafaŃă

Un domeniu elementar ℜ 2 este un domeniu D având


frontiera o curbă plană simplă şi închisă.
O curbă plană simplă şi închisă defineşte un domeniu
elementar plan D, format din mulŃimea punctelor situate în
interiorul curbei, numit domeniu simplu conex. Un astfel de
domeniu este homeomorfism cu interiorul unui arc.
Fie f : D ⊂ ℜ 2 → ℜ 3 un homeomorfism al lui D pe Σ ⊂ ℜ 3 .
DefiniŃia 4.1.1 MulŃimea Σ a punctelor din spaŃiu
homeomorfă cu un domeniu elementar plan D se numeşte
suprafaŃă elementară.

98
VALER NIMINEł APLICATII 3D

MulŃimea punctelor homeomorfă cu un arc simplu din


domeniul D prin homeomorfismul f este un arc simplu aparŃinând
suprafeŃei elementare Σ .
DefiniŃia 4.1.2 O mulŃime S de puncte din ℜ 3 este o
suprafaŃă simplă dacă este conexă (oricare ar fi două puncte ale
mulŃimi, ele pot fi unite printr-un arc de curbă ale cărui puncte
aparŃin toate mulŃimii considerate) şi dacă oricare ar fi M ∈ S ,
există o vecinătate VM care este o suprafaŃă elementară Σ ≡ VM .
O suprafaŃă este o mulŃime de puncte din spaŃiu
homeomorfă cu o suprafaŃă simplă.
Dacă r : D → ℜ 3 este definit prin r (u, v) = (x(u , v), y (u, v), z (u, v) )
atunci sistemul:
 x = x(u , v)

( S ) y = y (u , v) (u , v) ∈ D ⊂ ℜ 2 (4.1.1)
 z = z (u , v)

defineşte o suprafaŃă S . EcuaŃiile (4.1.1) constituie ecuaŃiile
parametrice ale suprafeŃei S , iar r parametrizarea. SuprafaŃa se
spune că este de clasă C k , dacă r : D → ℜ 3 este de clasă C k .
Datorită izomorfismului existent între spaŃiile ℜ 3 şi V3
ecuaŃiile (4.1.1) ale suprafeŃei S sunt echivalente cu ecuaŃia:
r = r (u , v) (u , v) ∈ D ⊂ ℜ 2 (4.1.2)
unde r (u , v) = x(u , v)i + y (u , v) j + z (u , v)k , R = {o, i, j , k} fiind
reperul V3 care corespunde sistemului de axe Oxyz din ℜ 3 .
EcuaŃia (4.1.2) se numeşte ecuaŃia vectorială a suprafeŃei
(S ) .
DefiniŃia 4.1.3. SuprafaŃa S de clasă C k dată de ecuaŃia
vectorială (4.1.2) sau de ecuaŃiile parametrice (4.1.1) se numeşte
ru  x yu zu 
regulată dacă matricea   =  u  are rangul doi,
 r v   xv yv z v 
∂r ∂r
ru = ,rv = şi r u = xu i + y u j + z u k , r v = xv i + y v j + z v k .
∂u ∂v

99
VALER NIMINEł APLICATII 3D

O suprafaŃă S admite o infinitate de reprezentări


parametrice.
Două parametrizări de clasă C k , ale suprafeŃei
S , r 1 : D1 → ℜ3 şi r 2 : D2 → ℜ3 sunt echivalente dacă există un
difeomorfism ϕ : D2 → D1 de clasă C k astfel încât r 2 = r1 o ϕ .
Din ecuaŃiile (3.1.1) şi (3.1.2) rezultă că o suprafaŃă se
obŃine prin mişcarea unui punct M ( x, y, z ) ∈ ℜ3 , după o lege care
depinde de doi parametri, adică M are în mişcarea sa două grade
de libertate. Acest fapt se poate transcrie analitic impunându-se
celor trei coordonate ale punctului M o condiŃie de legătură, care
se poate scrie sub forma:
( S ) F ( x, y, z ) = 0; ( x, y, z ) ∈ V ⊂ ℜ3 . (4.1.3)
care se numeşte ecuaŃia implicită a suprafeŃei ( S ) .
În ecuaŃia (4.1.3) se presupune că pe V ⊂ ℜ3 funcŃia F este
de clasă C1 .
CondiŃia de legătură impusă coordonatelor punctului M se
poate scrie şi sub forma:
( S ) z = f ( x, y ) ( x , y ) ∈ D ⊂ ℜ 2 (4.1.4)
care se numeşte ecuaŃia explicită a suprafeŃei ( S ) .
Dacă în ecuaŃia implicită (4.1.3) a unei suprafeŃe introducem
o legătură de forma G ( x, y, z ) = 0 între coordonatele punctului
curent M ∈ S , atunci ansamblul celor două ecuaŃii:
{F ( x, y, z ) = 0, G ( x, y, z ) = 0}; ( x, y, z ) ∈ V ⊂ ℜ 3 (4.1.5)
defineşte o curbă pe suprafaŃa ( S ) .
Un alt mod de a defini o curbă pe o suprafaŃă, când suprafaŃa
este dată parametric sau vectorial, este de a introduce o legătură
între cei doi parametrii de care depinde punctul curent al
suprafeŃei. O curbă pe suprafaŃă poate fi deci dată sub una din
următoarele forme:
r = r (u , v)
(C ) (u , v) ∈ D ⊆ ℜ 2 (4.1.6)
 v = g (u )

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 )

ObservaŃie. Fie suprafaŃa (S ) definită pe r : D → ℜ 3 ,


r (u , v) = ( x(u , v), y (u , v), z (u , v) ) .
Un punct M 0 ∈ S se caracterizează prin două tipuri de coordonate
(fig.1):

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

DefiniŃia 4.1.4. Se numeşte curbă parametrică u pe


suprafaŃa (S ) curba definită de
 r = r (u , v)
(C u ) (u , v) ∈ D ⊆ ℜ 2 (4.1.10)
v = v0 (constant)
DefiniŃia 4.1.5. Se numeşte curbă parametrică v pe
suprafaŃa S curba definită de:
 r = r (u , v)
(C v )  (u , v) ∈ D ⊂ ℜ 2 (4.1.11)
u = u 0 (constant)
Curbele parametrice pe o suprafaŃa se numesc curbe
coordonate.
Curbele coordonate formează o reŃea de curbe pe suprafaŃa,
prin fiecare punct M 0 (u 0 , v0 ) ∈ S trecând câte o singură curbă u = u 0
şi câte o singura curbă v = v0 (Fig. 2).

102
VALER NIMINEł APLICATII 3D

În cazul particular al planului xOy care este tot o suprafaŃa


aceste curbe sunt curbele de coordonate x = x0 . y = y 0 adică drepte.
(Fig. 3).
Asa cum s-a vazut în primul capitol mediul de lucru Matlab ofera
foarte multe facilităŃi în reprezentarea suprafeŃelor date în diverse
forme, prin gama largă de funcŃii disponibile în acestă direcŃie.
Astfel reprezentarea unei suprafeŃe dată parametric devine o
sarcină extrem de simplă. Să exemplificăm prin următorul
exerciŃiu.

103
VALER NIMINEł APLICATII 3D

ExerciŃiu Să se genereze în Matlab suprafaŃa dată de ecuaŃiile


parametrice:
x = r cos θ
y = r sin θ
z = r,
unde 0 ≤ r ≤ 1 si 0 ≤ θ ≤ 2π .
SoluŃie
Vom genera mai întâi o reŃea de perechi de forma (r ,θ ) , fiecare
corespunzând unui triplet de forma (x,y,z) de pe suprafaŃa
parametrica dată mai sus. Pentru aceasta vom genera vectorii
pentru ceo doi parametrii pe domeniul definit în problemă:
>> r=linspace(0,1,30);
>> theta=linspace(0,2*pi,30);
De remarcat că vectorii au aceeaşi dimensiune.
Pe aceşti vectori se va creea acum reŃeaua de care aspuneam mai
sus, cu comanda meshgrid.
>>[r,theta]=meshgrid(r,theta);
Acum putem scrie ecuaŃiile parametrice pentru generarea
suprafeŃei
>> x=r.*cos(theta);
>> y=r.*sin(theta);
>> z=r;
Pentru generarea efectivă a suprafeŃei vom folosi comanda mesh
Carea va uni prin linii punctele vecine ale suprafeŃei.
>> mesh(x,y,z)

Pentru o vizualizare mai bună a suprafeŃei pentru crearea senzaŃiei


de adâncime vom folosi comanda box on şi pentru a identifica
axele aduagăm desenului etichete pentru axe cu comanda label.
>> axis tight
>> box on
>> xlabel('x-axis')
>> ylabel('y-axis')
>> zlabel('z-axis')

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

Să mai considerăm încă un exemplu interesant de funcŃie „scoică”


dată de ecuaŃiile parametrice:
[ ] v
x = 2 1 − eu /( 6π ) cos u cos 2  
2

[ ] 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

Următoarele comenzi vor da şi o mai spectaculoasă vizualizare a


suprafeŃei
>> surf(x,y,z,...
'FaceColor','interp',...
'EdgeColor','none',...
'FaceLighting','phong')
>> camlight left
>> view(160,10)
>> axis equal
Reprezentarea elipsoidului dat parametric de ecuaŃiile de mai jos
devine o sarcina la fel de simplă cu ajutorul funcŃiilor din Matlab
x = a cos u sin v
y = b sin u sin v
z = c cos v,
unde 0 ≤ u ≤ 2π şi 0 ≤ v ≤ π .
Vom experimenta pentru următoarele valori ale parametrilor a=3,
b=4, c=5;
>> u=linspace(0,2*pi,30);
>> v=linspace(0,pi,30);
>> [u,v]=meshgrid(u,v);

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

Ca exerciŃiu încercaŃi aceeaşi reprezentare pentru valori diferite


ale parametrilor şi remarcaŃi diferenŃele obŃinute.

107

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