Sunteți pe pagina 1din 29

Limbaje de programare

inginereti
Tema 6
Matlab

Functii utilizator
1.

Inline Pentru definirea functiilor cu expresii mai


simple, sau cu utilizare temporara se rcomanda
definire cu functia inline
Functia inline este specifica pachetului matlab,
negasindu-se in nici un alt limbaj de programare.
Exemplu: putem defini functia utilizator g(x)=(sin(x))/(sin(x)
+cos(x)+4), astfel
g=inline('sin(x)./(sin(x)+cos(x)+4)')
g=
Inline function:
g(x) = sin(x)./(sin(x)+cos(x)+4)

Functii utilizator
2. Graficul unei functii utilizator se face cu comanda fplot(numef,limite,
spec1), unde limite este un vector cu 2 sau 4 valori indicand
limitele pentru x(2 valori), si eventual y(daca sunt 4 valori), iar
specl este specificatorul de linie acelasi ca la comanda plot
Exemplu aplicat la functia definita anterior
fplot(g,[-pi,pi],'r')

Functii utilizator
3. fminbnd(numef,xmin,xmax) comanda care
extrage valoarea minima a unei functii,
numef, pe un interval [xmin,xmax]
De exemplu pentru functia g, definita mai inainte
avem
fminbnd(g,-2,2)
ans =
-1.8235

Functii utilizator
4. quad(numef,a,b) functie care permte calculul integralei
definite a functiei numef, a si b fiind limitele intre
care se integreaza.
De exemplu pentru functia g, definita anterior, putem sa
calculam integrala pe intervalul cuprins intre pi/4 si
pi, astfel
quad(g,-pi/4,pi)
ans =
0.3589
adica

sin x
0.3589

sin x cos x 4
/ 4

Functii utilizator
5. dblquad(numef,ax,bx,ay,by) functie ce calculeaza
integrala dubla din functia numef, pe intervalul pe x
(ax,bx) si pe y (ay,by)
Fie functia h=inline('(x+5*y)./(x.^2+y.^2+0.1)')
h=
Inline function:
h(x,y) = (x+5*y)./(x.^2+y.^2+0.1)
Putem cacula integrala dubla pe intervalul pe x (0,1) si pe y(2,2)
dblquad(h,0,1,-2,2) 1 2
x 5y
ans =
dxdy 1.8241
2
2
1.8241
x y 0.1

0 2

Functii utilizator
6.

triplequad(numef,ax,bx,ay,by,az,bz) functie care


calculeaza integrala tripla a functiei numef, pe
intervalul x (ax,bx), pe y(ay,by) si pe z(az,bz).
Fie functia f,
f=inline('x.*y.*z./(x.^2+2*y.^2+3*z.^2+0.1)')
f=
Inline function:
f(x,y,z) = x.*y.*z./(x.^2+2*y.^2+3*z.^2+0.1)
Integrala tripla pe intervalul x(0,3), y(0,2), z(0,1), se
calculeza cu
triplequad(f,0,3,0,2,0,1)
3 2 1
xyz
ans =
dxdydz 0.5371
2
2
2
0.5371
x 2 y 3 z 0 .1

0 0 0

Functii utilizator
7. fzero(numef,x0) functie care permite calculul zerourilor
(radacinilor) cea mai apropiata de valoarea x0.
De exemplu: fie functia g1
g1=inline('(x.^2-1).*sin(3*x)')
g1 =
Inline function:
g1(x) = (x.^2-1).*sin(3*x)
Putem cauta valorile radacinilor apropiate de anumite valori
x0
fzero(g1,1.5)
ans = 1.0472
>> fzero(g1,0.9)
ans = 1.0000

Functii utilizator
Comparatie cu lucru cu functii in fisiere m file
O functie inline :
F = inline('1./(x.^3-2*x-5)');
Q = quad(F,0,2);
O functie care este definita in fisier de tip .m
Q = quad(@myfun,0,2);
unde myfun.m este un fisier M-file:
function y = myfun(x)
y = 1./(x.^3-2*x-5);

Calcule simbolice cu expresii


i polinoame
1.

Date de tip simbolic


Se intoduc cu comanda syms sau funcia sym (care sunt
cuvinte rezervate Matlab)
Exemplu:
syms x y z
d=sym(2)
n exemplul de mai sus x,y,z sunt declarate ca simboluri, iar d are
valoarea 2, dar este simbol nu numr. Pentru a nelege
deosebirea dintre 2 ca simbol i doi ca numr prezentm
exemplul urmtor:
>> 1/2+1/3
ans
0.8333
>> sym(1)/sym(2)+sym(1)/sym(3)
ans =
5/6

Calcule simbolice cu expresii i


polinoame
Datele numerice duc la rezultate efective, iar
datele simbolice dau un rezultat
simbolic(aici o fracie).
Important aici este c forma simbolic este
un rezultat exact n timp ce forma
numeric este un rezultat aproximativ
deoarece reprezentarea numeric a
fraciei 5/6 are un numr infinit de
zecimale dup virgul.

Calcule simbolice cu expresii i


polinoame
2. Simplificri
Fie alfa o expresie simbolic
syms alfa sau alfa=sym(alfa), dup care introducem
o expresie care contine simbolul definit
z=sin(alfa)^2+cos(alfa)^2; (punem ; pentru a suprima
ecoul pe ecran)
Comanda
simplify(z) va avea drept rezultat valoarea 1.
Iar, comanda:
>> syms x;
>> simplify((x^2+x-2)/(x-1)) va avea drept rezultat
ans = x+2

Calcule simbolice cu expresii


i polinoame
3. Specifcarea formatului dorit pentru exprimarea
rezultatului
Exemplu:
>> syms rho
>> rho=0.25
>> sym(rho,'r')
ans = 1 / 4
Aici, r, s-a folosit pentru a specifica forma rationala
a rezultatului. Informatii mai multe se pot
obtine cu help format

Calcule simbolice cu expresii


i polinoame
4. Derivarea unei functii . Sa presupunem ca vrem sa clculam
derivata functiei f(x)=x3 -cos(x)
Se introduc urmatoarele comenzi:
syms x
f=x^3-cos(x);
g=diff(f)
Rezultatul afisat este, g = 3*x^2+sin(x)
Comanda diff, s-a folosit pentru calcularea derivatei functiei
f, aceasta avand o singura variabila, x.
Daca o functie are mai multe variabile, atunci trebuie
specificata variabila dupa care se doreste derivarea

Calcule simbolice cu expresii


i polinoame
Sa presupunem ca avem functia f(x,y) = x2+(y+5)3 pe care
vrem sa o derivam in raport cu y.
Pentru aceasta in matlab trebuie sa introducem urmatoarea
secventa de comenzi
syms x y
f= x^2+(y+5)^3;
diff(f,y)
Rezultatul dat in Matlab este
ans = 3*(y+5)^2
Comanda fiind practic echivalenta cu derivata partiala a
functieif in raport cu y,

f ( x, y )
y

Calcule simbolice cu expresii


i polinoame
5. Integrarea functiilor simbolic
Daca vrem sa integram functia f(x,y), definita
anterior, se poate folosi expresia
Int(f,x)
Raspunsul Matlab va fi: ans = 1/3*x^3+(y+5)^3*x
Daca dorim sa calculam integrala definita, de ex:
10

f ( x, y)dy

Atunci trebuie sa folosim comanda 0


int(f,y,0,10)
Raspunsul va fi ans = 12500+10*x^2

Calcule simbolice cu expresii


i polinoame
6. Radacinile polinoamelor
Sa consideram urmatorul
polinom
f(x)=2x2+4x-8,
Radacinile se calculeaza cu
comenzile
sym x
f=2*x^2+4*x-8;
solve(f,x)
Rezultatul va fi
ans =
x
ans =
[ 5^(1/2)-1]
[ -1-5^(1/2)]

Acelasi rezultat se poate


obtine si cu urmatoarea
secventa de comenzi
>> f=[2 4 -8];
>> roots(f)
ans =
-3.2361
1.2361
Valorile obtinute fiind
aceleasi. Doar formatul in
care au fost scrise fiind
diferit

Calcule simbolice cu expresii


i polinoame
7. collect(p,v) este o comand care permite ordonarea dup
puterile lui v a expresiei p
Exemplu:
syms x y
collect((x+y)*(x^2+y^2+1))
are drept rezultat
ans =
x^3+y*x^2+(y^2+1)*x+y*(y^2+1)
Sortarea fcndu-se implicit dup puterile lui x
Iar comanda
collect((x+y)*(x^2+y^2+1), y), are drept rezultat
ans =
y^3+x*y^2+(x^2+1)*y+x*(x^2+1)

Calcule simbolice cu expresii


i polinoame
8.
Funcia
expand((p)
conduce la scrierea expresiei
p cu elementele ei constitutive
Exemplu1:
expand((x-2)*(x-4))
Are drept rezultat
ans =
x^2-6*x+8
Exemplu2:
expand(cos(x+y))
Are drept rezultat
ans =
cos(x)*cos(y)-sin(x)*sin(y)

Se observ c
aceast funcie
calculeaz
produse de
polinoame,dar i
desface expresii
trigonometrice,
exponeniale sau
logaritmice

Calcule simbolice cu expresii i


polinoame
9. Funcia factor(p) factorizeaz expresia p. Dac p este un
numr
ntreg face descompunerea lui p n numere prime.
Exemple:
>> factor(x^3-y^3+x^2-y^2)
ans =
(x-y)*(x^2+x+y*x+y+y^2)
>> factor(13482)
ans 2 3 3 7 107
>> factor(sym(13482))
ans = (2)*(3)^2*(7)*(107)
Se remarc deosebirea de form, dac se folosete funcia
sym sau nu

Calcule simbolice cu expresii i


polinoame
10. Funcia [n1,n2]=numden(p) calculeaz p ca o expresie
raional i calculeaz numrtorul n1 i numitorul
n2. Nu face ns i simplificri de aceea pentru a afla
valoare final trebuie s utilizai i funcia
simplify(n1/n2).
Exemplu:
>> [n1,n2]=numden(x/(x*y-y^2)-y/(x^2-x*y))
n1 =
x^2-y^2
n2 =
y*(x-y)*x
>> simplify(n1/n2)
ans =
(x+y)/y/x

Calcule simbolice cu expresii i


polinoame
11. Funcia [r,cum]=simple(p) caut s determine cea mai
simpl (mai scurt) form a unei expresii. n r va fi
cea mai simpl form gsit, iar n cum
metoda,funcia cu care a fost gsit aceast form
simpl.
Exemplu:
>> [r,cum]=simple(cos(x)^2-sin(x)^2)
r=
cos(2*x)
cum =
combine

Calcule simbolice n algebra liniar


Unele funcii simbolice au primit acelai nume ca cel pentru
calcule simbolice pentru simplicitate. Astfel determinantul
unei matrici simbolice se calculeaz tot cu funcia
det. Exemple:
>>syms a b c d;
A= [a, b; c, d]
det([a, b; c, d])
ans =
a*d-b*c
>> B = sym([2/3 1/3;1 1]);
>> r = det(B)
r=
1/3

Calcule simbolice n algebra liniar


Funcia inv are aceiai denumire indiferent de tipul
calculului, numeric sau simbolic. Exemple:
>>inv(A)
ans =
[ d/(a*d-b*c), -b/(a*d-b*c)]
[ -c/(a*d-b*c), a/(a*d-b*c)]
>>inv(B)
ans
[ 3, -1]
[ -3, 2]

Calcule simbolice n algebra liniar


Rezolvarea unui sistem nedeterminat este un calcul simbolic
i acum putem s o facem. S considerm sistemul:

Definim acum matricea coeficienilor necunoscutelor


i vectorul termenilor liberi:
A=[1 1 1;1 -1 2;0 2 -1]
B=[1;2;-1]

Calcule simbolice n algebra liniar


Construim matricea extins:
Aext=[A B];
Comparm rangul matricii A a coeficienilor necunoscutelor
cu rangul matricii extinse Aext.
>> rank(A)
ans =
2
>> rank(Aext)
ans =
2

Calcule simbolice n algebra liniar


Deoarece rangurile acestor dou matrici sunt egale sistemul
este compatibil (adic are soluie). Deoarece valoarea
comun a acestor dou ranguri i anume 2) este mai
mic dect numrul necunoscutelor (i anume 3)
rezult c sistemul este nedeterminat (adic are o
infinitate de soluii).
Rezolvarea problemei continu cu considerarea unei
submatrici (notat A1) a matricii A submatrice de
ordin egal cu rangul lui A (adic 2 n cazul dat) i
care s aib acelai rang cu A (deci 2). O astfel de
submatrice este cea format de coeficienii lui x i y din
primele dou ecuaii:
>> A1=[1 1;1 -1]

Calcule simbolice n algebra liniar


Vectorul coloan al termenilor liberi corespunztor ecuaiilor
intrate n submatrice (aici primele dou ecuaii) se obine din
scderea coloanelor necunoscutelor secundare (cele
care nu au coeficieni n submatrice, aici doar z)
privite acum ca si simboluri, din elementele
vectorului termenilor liberi. Deci:
>> syms z
B1=[1-z;2-2*z]
Soluia simbolic a sistemului se obine acum simplu:
>> x=A1\B1
x=
3/2-3/2*z
-1/2+1/2*z

Calcule simbolice n algebra liniar