Documente Academic
Documente Profesional
Documente Cultură
Matlab este un pachet de programe performante, care rezolv numeric i probleme ale calculului tiinific. Probleme
complicate pot fi rezolvate rapid, permindu-ne astfel s folosim timpul gndind i experimentnd. Algoritmii folosii
sunt de foarte bun calitate, aa c putem avea ncredere deplin n rezultatele obinute. n plus resursele de grafic sunt
excelente.
Cu siguran Matlab ne va fi de un real folos pentru a nelege si a folosi rezultatele calculului tiinific. Exist un
singur mod de a nva cum poate fi folosit i anume lucrnd ct mai multe i mai variate exemple.
Aritmetic n Matlab
n Matlab operaiile aritmetice de baz ( + , - , * , /, ^ ) sunt folosite mpreun cu parantezele ( ). Ordinea
operaiilor este cea cunoscut din aritmetica elementar.
6*7-4/9+2^5
Importana parantezelor este reamintit prin urmtorul exemplu:
-3^4+2/5*7
(-3)^4+2/5*7
(-3)^4+2/(5*7)
S urmrim urmtorul calcul:
2-7/3
ans =
-0.3333
ans^2
ans =
0.1111
Rezultatul n urma calculului primei expresii a fost etichetat de Matlab cu ans (answer). Putem atribui nume pentru
a stoca numerele:
x=2-7/3
y=x^2
i astfel valorile lui x i y pot fi folosite n calcule ulterioare.
n cazul n care nu dorim afiarea rezultatelor intermediare, la sfritul expresiei sau atribuirii, scriem punct i
virgul (semi-colon):
x=2-7/3; y=x^2; z=y^2+2
Prezentm cteva funcii elementare din Matlab:
sqrt = radical
de reinut: pentru a calcula
abs(3-5*2^3)
sqrt(3)
n
a , a 0 vei scrie a
1
n
sin(pi/6)
cos(pi/10)
tan = funcia tg
tan(pi/12)
asin(-sqrt(3)/2)
acos(-1)
atan(-1)
exp(3)
log(1)
log10(1)
ln b
ln a
Matrice n Matlab
Pentru a scrie o matrice n Matlab folosim urmtoarea sintax:
- fiecare linie a matricei poate fi considerat a fi o list de numere, separate ntre ele de virgul sau spaiu liber;
- fiecare linie a matricei este desprit de urmtoarea prin punct i virgul;
- elementele matricei se scriu ntre paranteze drepte.
M=[1 -2 3 -4;2 1 5 2;-2 3 1 0; 3 1 2 -5]
M1=[2 1 -1 3; 1 3 2 -5]
Pentru a obine matricea transpus a matricei M scriem M:
M'
M1'
Operaiile cu matrice sunt cele cunoscute; eventualele greeli, legate de dimensiunea matricelor sunt semnalate de
soft:
inv(M1)
??? Error using ==> inv
Matrix must be square.
1 3 3 3 3 3 3
3 1 3 3 3 3 3
3 3 1 3 3 3 3
3 3 3 3 3 1 3
3 3 3 3 3 3 1
inv(A)
Vectori n Matlab
Vectorii linie sunt matrici cu o linie i n coloane. Ei pot fi considerai a fi liste de numere, separate ntre ele de
virgul sau spaiu liber. Numrul de input-uri reprezint lungimea (length) vectorului; deseori folosim pentru inputurile vectorului, termenul de component. Astfel, un element din Rn este un vector linie de lungime n n loc de vector de
dimensiune n.
x=[1 -2 7 15]
Prin instruciunea a:b:c unde a < c, b > 0 obinem un vector de forma:
a a+b a+2b a+3b a+mb
unde a+mb este cel mai mare numr de acest tip, mai mic sau egal cu c.
y=0:2:8
-2:5:2
1:2:-1
n ultimul exemplu rezultatul este mulimea vid deoarece dac a > c este necesar ca numrul b s fie negativ, cum
se ntmpl n exemplul urmtor:
1:-5:-14
Operaiile cu vectori sunt cele cunoscute din Rn: adunarea i nmulirea cu scalari.
x=[1 -2 7 15]; y=0:2:6; x+y
0.2*x
Vectorii coloan sunt matrici cu n linii i o coloan. In Matlab elementele sunt separate de punct i virgul.
u=[-2;3;1;4]
Adunarea a doi vectori de aceeai dimensiune i respectiv nmulirea cu scalar se definesc ca n cazul vectorilor linie.
u=[3;2;1;-10];u+v
(-3)*u
Putem transforma un vector linie ntr-un vector coloan prin procedeul numit transpunere, notat :
x=[2 -1 4 19]; x'
se reduce la rezolvarea ecuaiei matriceale A x b , unde matricea A ... ... ... este nesingular, x ,
a
x
n1 ... a nn
n
b
1
b . Ecuaia are o soluie unic x A 1 b .
b
n
x1 3 x2 3 x3 3 x4 3 x5 3 x6 3 x7 1
3x x 3x 3x 3x 3x 3x 3
3
4
5
6
7
1 2
3 x1 3 x2 x3 3 x4 3 x5 3 x6 3 x7 5
3 x1 3 x2 3 x3 3 x4 3 x5 3 x6 x7 10
Eroarea se datoreaz faptului c vectorii al cror produs scalar vrem s-l calculm sunt vectori linie; pentru a evita
aceast situaie folosim vectorul y (vectorul transpus).
x=[3 2 1 -7]; y=[4 2 -2 12];x*y
Calculm produsul scalar a doi vectori linie sau doi vectori coloan. Comentariile sunt precedate de % , avnd doar
rolul de a da explicaii cititorului.
x=[3 2 1];y=[2 4 5];x*y' % x si y sunt vectori linie
x=[3 2 1];x*x' % x este vector linie
u=[2;0;-3];v=[-1;2;3];u'*v % u si v sunt vectori coloana
Cele trei norme definite pe Rn,
x , x 1, x
unde x ( x1 , x 2 ,...x n ) ,
Unghiul dintre doi vectori linie x i y din R3 este definit de formula: cos
x, y t
. Calculai, utiliznd
x y
Matlab, cosinusul unghiului dintre x (1, 2, 3) i y (1, 2, 4) i determinai msura unghiului n grade.
x=[1 2 -3];y=[-1 2 -4]; a=(x*y')/(norm(x)*norm(y))
t=acos(a)
th=t*180/pi
V propunem s justificai formula Schwarz-Cauchy folosind formula de mai sus.
Folosind Matlab s relum problema de clustering (simplificat) cu pacienii de la gastroenterologie: stabilii
dac vectorii
x. * y ( x1 y1 , x 2 y 2 ,...,x n y n ) .
Dup cum se observ rezultatul este un vector n-dimensional, ale crui componente sunt componentele celor doi vectori
nmulite punctual (element cu element).
Scriei (sub forma de tabel) valorile funciei f ( x) x ln( x x 2 1) n punctele 0; 0.2; 0.4; 0.6; 0.8; 1.
x=0.2:0.2:1;y=x.*log(x+sqrt(x.^2+1));[x',y']
mprirea a doi vectori nu exist n matematic, dar n Matlab operaia (. /) este definit ca fiind mprirea element
la element, adic pentru x ( x1 , x 2 ,...,x n ) i y ( y1 , y 2 ,..., y n ) avem:
x. / y ( x1 / y1 , x 2 / y 2 ,...,x n / y n )
x=[2 -6 1 3];y=[-1 3 2 5];u=[4;19;2;-2];v=[4;10;-4;23];
x./y
v./u
u./x'
5
arcsin x
n punctele 0.1; 0.2; 0.3;0.4; 0.5.
x
x=[0.1:.1:.5]';y=(asin(x))./x;[x,y]
1
1
1
2 .... 2 .
2
2
3
20
s=0;
for i=1:20
s=s+1/i^2;
end
s
s=
1.5962
Dac renunm la punct i virgul (semi colon) vom avea afiate toate valorile intermediare ale sumei:
s=0;
for i=1:20
s=s+1/i^2
end
Un mod mai simplu, specific pentru Matlab, de a calcula aceast sum este utilizarea funciei sum:
sum(1./(1:20).^2)
Instruciunea while
Determinai cel mai mic numr natural pentru care
2n
1
2n
, problema fiind posibil deoarece lim
0.
n n !
n ! 10
n=1;
x=2;
while x>=1/10
x=x*2/n;
n=n+1;
end
n-1
Probleme propuse
1. Utiliznd Matlab
3
calculai: 7 2 ;
2e
35sin
12 ;
1 3 2
5ln 1 e ;
arctg
2
.
1+lg7
stabilii dac urmtoarele matrice sunt nesingulare i n caz afirmativ calculai matricele inverse:
1 2 0 0 0
3 5 7 2
3 2 3 0 0
1
2
3
4
; 0 4 3 4 0
0 1 9 10
0 0 5 4 5
0 1 2 0
0 0 0 0 5
x 3 y 5 z 7t 12
3x 5 y 7 z t 0
;
5 x 7 y z 3t 4
7 x y 3z 5t 16
x 2y 5
x 2 y 3z 14
y 2 z 3t 20
;
3x z 2t 14
2 x 3 y t 12
3 y 4 z 18
5 z 6u 39
7u 8v 68
9v 10 x 55
x y, x 3 y ;
normele cunoscute ale acestor vectori;
distanele cunoscute dintre cei doi vectori;
produsul scalar al celor doi vetori.
1
0
fiind dai vectorii u 7 i v 1 calculai:
5
3
e
2u v, u 5v ;
normele cunoscute ale acestor vectori;
distanele cunoscute dintre cei doi vectori;
produsul scalar al celor doi vetori.
Scriei (sub forma de tabel) valorile funciilor f ( x) x 2 x 4 x 2 2 i g ( x)
ln( x 1)
n punctele: -0.5; -0.4;
x
1
;
2
k 2
utiliznd instruciunea for i afind rezultatul final;
utiliznd instruciunea for i afind rezultatele pariale sub forma unui vector coloan;
folosind functia sum
20
ln 1 k
40
1
k
k 1
utiliznd instruciunea for i afind rezultatul final;
utiliznd instruciunea for i afind rezultatele pariale sub forma unui vector coloan;
folosind functia sum
(1)
n 1
(n !) 2
0.001
(2 n)!
n2
0.02
5n
5 n cazul bazei de date cu florile de Iris, prezentat la nceputul paragrafului s-a calculat c iriii de acelai tip sunt
grupai ntr-o bil deschis i anume
- Setosa n bila de centru C1 (2.4, 14.6, 34.3, 50.1),
-
I1
limea petalei
21
13
I1
lungimea petalei
56
limea sepalei
28
lungimea sepalei
64
42
26
57
scriind:
x=a:h:b
y=f(x)
Perechile ( (a ih, f (a ih)), 0 i n 1 , vor fi unite prin segmente de dreapt n urma aplicrii funciei plot(x,y)
Pentru a obine un grafic cu o bun acuratee este necesar folosirea unui pas h ct mai mic. n exemplul urmtor
dac h 1 obinem o linie poligonal ce aproximeaz funcia, n schimb dac h 0.1 obinem graficul cunoscut.
x=0:1:2*pi
y=cos(x)
plot(x,y)
x=0:0.01:2*pi; y=cos(x);plot(x,y)
Pentru a nu mai fi afiate valorile vectorilor x respectiv y am scris punct i virgul (semicolon) dup fiecare
instruciune.
Pe fiecare figur scriem un titlu i etichetm axele selectnd din Insert (apare la Figure) x-label, y-label, title i n
ferestrele ce s-au deschis nscriind axa Ox , axa Oy , respectiv titlul.
Alegerea valorii pasului h este important i penrtu a argumenta aceast afirmaie vom prezenta mai multe variante,
desennd toate graficele n acelai ecran. n acest scop vom construi nite ferestre, n care vom desena graficele,
ferestre situate ntr-o m n matrice. Fiecare element al matricei este constituit dintr-o asemenea fereastr, iar
numerotarea acestora este de la 1 la m n , ncepnd cu colul stnga sus. Funcia folosit este subplot.
subplot(411);x=0:1:2*pi;y=cos(x);plot(x,y)
subplot(412);x=0:0.5:2*pi;y=cos(x);plot(x,y)
subplot(413);x=0:0.1:2*pi;y=cos(x);plot(x,y)
subplot(414);x=0:0.01:2*pi;y=cos(x);plot(x,y)
n mod obinuit, graficul este desenat printr-o linie continu de culoare albastr; dac dorim alt culoare, sau alt stil
de linie facem precizarea n plot. Prezentm cteva opiuni pentru culori i stiluri de linie:
y galben
m mov
r
rou
g verde
b albastru
w alb
k
negru
+
*
:
-.
punct
cerc
plus
linie continu
stelu
punctat
linie punct
Aceste opiuni se scriu n cadrul funciei plot, ncadrate de apostrof, fr virgul ntre ele.
Desenai graficul funciei cos pe intervalul [2 , 2 ] , n culoarea roie, punctat, lund pasul h 0.1 .
x=-2*pi:.1:2*pi;y=cos(x);plot(x,y,'r.')
Deseori n Matlab scriem .1 n loc de 0.1
Desenai graficul funciei f ( x) tgx , folosind diferite valori ale lui h i eventual diferite culori.
Domeniul de definiie al funciei este R \ {(2k 1) } ; funcia este periodic de perioad , aadar este suficient
s desenm graficul pe (
, ).
2 2
Dac vom considera vectorul
x = -pi/2:.1:pi/2;
8
x=-pi/2:.1:pi/2;y=tan(x);plot(x,y)
Astfel vom considera un vector x a crui prim component este -1.5 i a crui ultim component este 1.5.
subplot(141);x=-1.5:.6:1.5;y=tan(x);plot(x,y,'r*')
subplot(142);x=-1.5:.4:1.5;y=tan(x);plot(x,y,'bo')
subplot(143);x=-1.5:.2:1.5;y=tan(x);plot(x,y,'k.')
subplot(144);x=-1.5:.05:1.5;y=tan(x);plot(x,y,'m-.')
Stabilirea corect a domeniului de definiie al funciei este foarte important. n unele cazri soft-ul ne avertizeaz
asupra greelilor i graficul poate prezenta erori.
3 2x
9 x2
[2.95, 2.95] pe acelai ecran, n ferestre diferite. Comentai desenele obinute
subplot(121); x=-3:.1:3; y=(3-2*x)./sqrt(9-x.^2);plot(x,y,'k')
pe [-3,3] i respecriv pe
2x 1
x2 1
Vom desena n acelai ecran mai multe variante i anume graficele restriciilor la
[-1000,1000], [-100,100], [-20,20], [-10,10] i vom alege desenul care ne convine:
subplot(411);x=-1000:1:1000;y=(2*x-1)./sqrt(x.^2+1);plot(x,y)
subplot(412);x=-100:1:100;y=(2*x-1)./sqrt(x.^2+1);plot(x,y)
subplot(413);x=-20:.1:20;y=(2*x-1)./sqrt(x.^2+1);plot(x,y)
subplot(414);x=-10:.1:10;y=(2*x-1)./sqrt(x.^2+1);plot(x,y)
Pentru a desena graficul unei funcii definite pe [a, b] [c, d ], b c vom scrie:
x1=a:h:b;y1=f(x1);x2=c:h:d,y2=f(x2);plot(x1,y1,x2,y2)
sau
x1=a:h:b; x2=c:h:d, plot(x1, f(x1),x2, f(x2))
2x 1
;
x2
Domeniul de definiie al lui f este R\{2}; funcia are asimptot vertical n x 2 .
n primul caz nu inem seama de aceast asimptot vertical, considernd un vector a crui prim component
este 10, ultim component 10 i pasul 0.1; n al doilea caz folosim metoda propus anterior, considernd
restriciile la (10, 2) respectiv la (2,10) :
subplot(121);x=-20:.1:20;plot(x,(2*x+1)./(x-2))
Warning: Divide by zero
subplot(122);x1=-20:.1:1.95;x2=2.05:.1:20; plot(x1,(2*x1+1)./(x12),'k',x2,(2*x2+1)./(x2-2),'k')
Nu e nevoie s specificm funcia separat, formula ce o definete poate fi scris i n plot. Dac nu se specific aceeai
culoare pentru cele dou ramuri, graficul va fi desenat n culori diferite
x2
x 3
Domeniul de definiie este (, 2) (3, )
Dac ne propunem s folosim intervalul (-20,20), fr a ine seama care este domeniul de definiie, softul ne
avertizeaz c greim.
x=-20:.1:20;plot(x,log(sqrt((x+2)./(x-3))))
Warning: Divide by zero.
Warning: Log of zero.
Warning: Imaginary parts of complex X and/or Y arguments ignored.
, )
2 2
ezplot(tan(x), [-1.55,1.55])
10
3. f ( x) ln(16 x2 )
ezplot(log(16- x^2),[3.95,3.95])
4. f ( x)
3 2x
9 x2
ezplot((3-2*x)/sqrt(9-x^2),[-2.95,2.95])
5. f ( x)
2x 1
x2 1
ezplot((2*x-1)/sqrt(x^2+1),[-20,20])
6. f ( x) | x 2 4 |
ezplot(sqrt(abs(x^2-4)),[-20,20])
Pentru a desena graficele a dou funcii n acelai sistem de axe vom scrie:
ezplot(f(x),[a,b]);hold on
ezplot(g(x),[a,b]);hold off
Graficele celor dou funcii vor fi de culoare albastr i astfel nu putem distinge funciile pe baza coloritului
graficelor lor.
Desenai n acelai sistem de axe graficele funciilor f ( x) sin x cos x i g ( x) sin x cos x ;
ezplot(sin(x)+cos(x),[0,2*pi]);hold on
ezplot(sin(x)-cos(x),[0,2*pi]);hold off
x2
x 3
n Symbolic Math nu putem folosi multiplot pe domenii de definiie diferite, dar problema este rezolvat
corect chiar dac cerem ca x [20, 20]
ezplot(log(sqrt((x+2)/(x-3))),[-20,20])
Vom desena n Matlab (pachetul de baz) graficele funciilor reale de dou variabile reale, caz n care
G f {( x, y, f ( x, y)) | ( x, y) D R2 } R3
n termeni de informatic, putem spune c funcia f este o regul care produce dintr-un vector input ( x, y) , un
output numeric notat f ( x, y) .
n cazul f : [a, b] [c, d ] R, scriind
[x,y] = meshgrid(a:h:b,c:h:d)
vom crea o matrice ale crei elemente sunt vrfurile unei reele de ptrate de latur h, din dreptunghiul [a, b] [c, d ] ;
scriind
z=f(x,y);
crem un vector ale crui elemente sunt valorile funciei f n punctele reelei.
Funcia
surf(x,y,z)
construiete graficul funciei cu ajutorul informaiilor anterioare.
11
[x,y]=meshgrid(-2:.1:2,-2:.1:2);z=sqrt(x.^2+y.^2);surf(x,y,z)
(con)
[x,y]=meshgrid(-2:.1:2,-2:.1:2);z=3-sqrt(x.^2+y.^2);surf(x,y,z)
n desenul unei poriuni de suprafa, n Matlab,exist un cod al culorilor: albastru nchis nseamn cele mai mici
valori ale lui z f ( x, y) , iar rou intens reprezint cele mai mari valori.
n general pentru a desena graficul funciei
y2 )
x 2x y 6x y y
x4 y 4 1
4
[x,y]=meshgrid(-4:.1:4,-4:.1:4);f=y.*exp(-x.^2-y.^2);surf(x,y,f)
[x,y]=meshgrid(-3:.1:3,-3:.1:3);
g=(x.^4+2.*x.^3.*y-6.*x.^2.*y.^2 +y.^4)./(x.^4+y.^4+1);
surf(x,y,g)
Considernd funcia f : A R, A R2 , mulimea M c f
real se numete curb de nivel constant c . Aceast mulime este proiecia n R2 a seciunii graficului lui f cu planul
z c.
Pentru a desena aceste curbe de nivel folosim funciile contour, pentru desenul n R2 i contour3 pentru desenul n
R , funcii ce se apeleaz astfel:
3
f ( x, y) ye
( x2 y 2 )
12
Desenai n acelai sistem de axe, poriunea de suprafa definit de funcia f :[4, 4] [4, 4] R
f ( x, y) ye( x
y2 )
x 4 2x 3 y 6x 2 y 2 y 4
subplot(221); [x,y]=meshgrid(-4:.2:4,-4:.2:4);
f=(x.^4+2.*x.^3.*y6.*x.^2.*y.^2+y.^4)./(x.^4+y.^4+1);surf(x,y,f)
subplot(222); [x,y]=meshgrid(-4:.2:4,-4:.2:4);
f=(x.^4+2.*x.^3.*y-6.*x.^2.*y.^2+y.^4)./(x.^4+y.^4+1);contour(x,y,f,20)
subplot(223); [x,y]=meshgrid(-4:.2:4,-4:.2:4);
f=(x.^4+2.*x.^3.*y-6.*x.^2.*y.^2+y.^4)./(x.^4+y.^4+1);contour3(x,y,f,20)
subplot(224); [x,y]=meshgrid(-4:.2:4,-4:.2:4);
f=(x.^4+2.*x.^3.*y-6.*x.^2.*y.^2+y.^4)./(x.^4+y.^4+1);surfc(x,y,f)
Dac privim aceste funcii ca expresii simboloce putem folosi n Symbolic Math instruciunile ezsurf i
ezcontour pentru a desena graficul funciei., respectiv curbele de nivel in R2
x 4 2x 3 y 6x 2 y 2 y 4
Fie funcia f :[4, 4] [4, 4] R, f ( x, y )
;
x 4 y 4 1
desenai graficul i curbele de nivel corespunztoare utiliznd Symbolic Math.
syms x y
f=(x^4+2*x^3*y-6*x^2*y^2+y^4)/(x^4+y^4+1);ezsurf(f,[-4,4,-4,4])
f=(x^4+2*x^3*y-6*x^2*y^2+y^4)/(x^4+y^4+1);ezcontour(f,[-4,4,-4,4])
Probleme propuse
1. Desenai graficul funciei f ( x) arcsin x , folosind diferite valori ale lui pasului h i eventual diferite culori, n 6
ferestre pe aceeai pagin
2. Desenai graficele funciilor folosind pachetul de baz Matlab i apoi Symbolic Math:
f1 ( x) arc tg 2 x ;
f 2 ( x) 3 x 3 3 x 2 ;
f 3 ( x)
f 4 ( x) ln( x x 2 1)
f 5 ( x)
x 1
x 2x 4
2
x2 2x
x3 1
f1 ( x) e x i g1 ( x) ln x ;
x 2 x3
;
2
6
x3 x5
f3 ( x) sin x i g3 ( x) x
6 120
f 2 ( x) e x i g 2 ( x) 1 x
5. Desenai graficul, curbele de nivel n R2 respectiv n R3, poriunea de suprafa i curbele sale de nivel n R2 , cele
patru desene fiind n aceeai pagin
f1 ( x, y) x 2 y 2 4 x 4 ;
f 2 ( x, y) 8 x 2 y 2 2 x ;
13
f3 ( x, y) ( x 1) ( y 2) ;
f 4 ( x, y) 1 x 2 y 2 4 x 2 y 5 ;
f5 ( x, y )
x2 y 2 x2 y 2
( x 2 y 2 1)2
6. Desenai graficul, curbele de nivel n R2 ale functiilor de la problema 5 utiliznd Symbolic Math.
14