Documente Academic
Documente Profesional
Documente Cultură
1
2
5.4.4
Obiectul Line........................................................................................57
5.4.5
Obiectul Text........................................................................................57
5.4.6
Modificarea proprietilor obiectelor grafice.......................................61
6
Transformata Fourier discret..............................................................................66
7
Integrarea ecuaiilor difereniale ordinare............................................................69
8
Filtre numerice.....................................................................................................73
9
Rezolvarea ecuaiilor algebrice neliniare.............................................................75
10
Interpolarea funciilor.......................................................................................78
11
Operaii cu polinoame......................................................................................79
12
Interfee grafice................................................................................................80
12.1 Construirea unei interfee grafice cu aplicaia GUIDE................................80
12.1.1
Descrierea aplicaiei GUIDE................................................................80
12.1.2
Crearea interfeei grafice......................................................................85
12.1.3
Alinierea componentelor......................................................................87
12.1.4
Modificarea proprietilor obiectelor grafice.......................................88
12.2 Programarea interfeei grafice......................................................................94
12.2.1
Organizarea interfeei grafice...............................................................94
12.2.2
Programarea interfeei grafice............................................................100
12.2.3
Adugarea unor grafice la interfa....................................................102
12.2.4
Modificarea proprietilor obiectelor grafice la rularea programului 107
12.2.5
Poziionarea unui punct pe o curb....................................................112
12.2.6
Introducerea datelor cu casete de dialog............................................119
13
Calcul simbolic...............................................................................................123
13.1 Definirea variabilelor i funciilor simbolice.............................................123
13.2 Substituii...................................................................................................125
13.3 Reprezentarea simbolic a numerelor.......................................................127
13.4 Definirea de variabile simbolice reale i complexe...................................128
13.5 Matrice simbolice.......................................................................................129
13.6 Crearea de funcii abstracte........................................................................132
13.7 Reprezentarea grafic a funciilor..............................................................132
14
Funcii pentru calcule simbolice....................................................................136
14.1 Derivarea....................................................................................................136
14.2 Limite de funcii.........................................................................................138
14.2.1
Calculul limitelor de funcii...............................................................138
14.2.2
Calculul limitelor laterale...................................................................139
14.3 Integrarea....................................................................................................139
14.3.1
Calculul integralei nedefinite.............................................................139
14.3.2
Calculul integralei definite.................................................................140
14.3.3
Calculul integralelor ce depind de un parametru...............................141
14.4 Calculul sumelor........................................................................................142
14.5 Dezvoltarea n serie Taylor........................................................................143
14.6 Simplificri i substituii............................................................................144
15
Operaii cu polinoame simbolice...................................................................146
16
Algebr liniar simbolic...............................................................................149
17
Rezolvarea simbolic a ecuaiilor algebrice...................................................151
18
Rezolvarea simbolic a ecuaiilor difereniale ordinare.................................154
19
Transformri integrale....................................................................................156
19.1 Transformata Fourier..................................................................................156
19.2 Transformata Laplace.................................................................................157
19.3 Transformata Z...........................................................................................158
Meniul File
Meniul Edit
Semnificaie
Crearea unui nou fiier .m
Deschide un fiier
Cut
Copy
Paste
Undo
Redo
Lansare Simulink
Lansare GUIDE
Help
Selectarea directorului curent
Alegerea unui nou director
curent
Meniul File al editorului are opiunile cunoscute, de a deschide un fiier nou sau unul
existent, de a salva i nchide fiiere, etc. Sunt afiate i ultimele patru fiiere
deschise. Meniul File este artat n Tabelul 2a. Meniul Edit are opiunile Cut, Copy,
Paste, Undo, Redo, Find, Replace, etc. Meniul Edit este artat n Tabelul 2b.
a) meniul File
b) meniul Edit.
Meniul Text din Figura 7a are opiuni pentru comentarea i decomentarea textului,
indentarea programului, etc. Un grup de instruciuni se poate comenta sau decomenta
prin selectarea i clic pe opiunile Comment respectiv Uncomment.
Meniul Debug din Figura 7b permite executarea instruciunilor din fiier cu opiunea
Save File and Run.
10
a) meniul Text
b) meniul Debug
11
Semnificaia
2.2 Variabile
Numele de variabile sunt formate din litere i cifre i ncep cu o liter. Variabilele sunt
create automat la ntlnirea unui nou nume. Variabilele sunt iniializate cu instruciuni
de forma
ident = expresie
Menionm c literele mici sunt diferite de literele mari. De exemplu, variabila x este
diferit de variabila X.
Pentru a afia valoarea unei variabila se tasteaz numele ei.
1
*b
a
Valoare
5.6569
1.3333
0.75
1
35.9370
-0.125
1
-2
2
-1
1
2
Valoare
2
3
3.6056
0.9828
13
atan(imag(z)/real(z))
atan2(imag(z), real(z))
0.9828
0.9828
Valoare
0
1
0
1
0
1
Dou funcii utile sunt any i all ce se aplic asupra vectorilor. Funcia any are
valoarea true dac cel puin un component al vectorului este diferit de zero, iar all are
valoarea true dac toate componentele vectorului sunt diferite de zero.
Valoare
14
1
0
1
0
Valoare
0
0
0
1
0
1
1
0
In ultimele exemple se evalueaz mai nti expresia ~1, deoarece operatorul ~ are
prioritate mai mare ca >, vezi tabelul cu prioritile operatorilor de mai jos..
Exist funcia xor cu dou argumente, ce corespunde operatorului xor (sau exclusiv).
Funcia xor are valoarea true (adevrat) dac un singur argument are valoarea true
(adevrat). De exemplu, expresia
xor(3, 4)
are valoarea zero.
Asociativitate
dreapta
stnga
stnga
stnga
stnga
stnga
stnga
15
&&
||
stnga
stnga
Tabelul 9. Prioritile i asociativitatea operatorilor.
findstr('abcdab', 'ab')
are ca rezultat vectorul cu indicii apariiei irului ab n irul abcdab.
1 5
Exemplu. Fie irurile
str1 = sir1 ;
str2 = sir2
Expresia
strcmp(str1, str2)
are valoarea zero deoarece irurile nu sunt egale.
Exemplu. Expresia
strcat ('xyz', 'a+x')
are ca rezultat irul
xyza+x
Exemplu
a/b
a\b
a^b
c=a.*b
c=a/b
c = a.\b
c=a^b
Semnificaie
a * inv(b)
inv(a) * b
ab
cij a ij * bij
cij a ij / bij
cij bij * a ij
cij a ij ^ bij
17
Funcia
length(x)
sum(x)
prod(x)
det(A)
inv(A)
[m n] = size(A)
Rezultat
lungimea vectorului x
suma elementelor vectorului x
produsul elementelor vectorului x
determinantul matricei A
inversa matricei A
dimensiunile matricei A
iar expresia
1: 3.3
genereaz vectorul
1 2 3
In a doua form, expresia
vi: r: vf
genereaz un vector cu primul element vi, urmtoarele elemente vi+r, vi+2*r, , pn
la ultimul element ce are valoare <=vf. De exemplu, expresia
1: 0.5: 3
genereaz vectorul
1 1.5 2 2.5 3
Expresia
1: 0.7 : 3
genereaz vectorul
1.7 2.4
Putem atribui aceti vectori ca valori unor variabile. De exemplu, instruciunea
A = [1:1:3; 2:1::4];
genereaz matricea
A = [1 2 3
2 3 4]
Semnificaie
Matrice cu toate elementele zero
Matrice cu toate elementele unu
Matrice cu elementele numere aleatoare
cu distribuie uniform
Matrice cu elementele numere aleatoare
cu distribuie normal
Matrice cu 1 pe diagonal i restul
elementelor 0. eye(n) creaz o matrice
unitate de dimensiune n.
De exemplu, instruciunea
A = zeros(2, 5);
creaz matricea
0 0 0 0 0
0 0 0 0 0
iar instruciunea
f = 5 * ones(3, 2);
creaz matricea
20
5 5
5 5
5 5
reshape(b, 2, 3)
ans =
1 3 5
2 4 6
2.9 Structuri
Este posibil de a defini structuri. Elementele structurilor se adreseaz cu operatorul .
Ca exemplu vom defini o structur cu dou componente, x i y ca mai jos.
a.x = 2;
a.y = 3;
21
b = a.x + a.y
b=
5
a
a=
x: 2
y: 3
Operaia realizat
convertete un numr ntr-un caracter
convertete numere n iruri de caractere
convertete un ir de caractere ntr-un numr
22
Expresia
x = a:1:f
genereaz vectorul
x = [97 98 99 100 101 102]
cu codurile ASCII ale caracterelor. Expresia
char(x)
convertete numerele n caractere ASCII i genereaz irul de caractere
abcdef
Raia r poate fi i negativ. De exemplu, expresia
char( ['h':-1:'a'])
sau expresia
char( 'h':-1:'a')
genereaz vectorul
hgfedcba
Funcia poate prelucra i matrice. De exemplu, iinstruciunea
x = ['e': -1: 'a'; 'a':1:'e']
creaz matricea
101 100 99 98 97
97 98 99 100 101
Expresia
char(x)
aplicat asupra acestei matrice are rezultatul
edcba
abcde
Funcia num2str convertete numere n iruri de caractere. Formele funciei sunt
num2str(x)
i
num2str(x, n)
unde x este numrul convertit sau matricea convertit n ir de caractere iar n
specific numrul maxim de cifre semnificative convertite.
Exemplu.
num2str(2.3134)
convertete numrul 2.3134 n irul '2.3134', n timp ce
num2str(2.3134, 3)
convertete numrul 2.3134 n irul '2.31'.
Exemplu
num2str(rand(1, 2), 3)
convertete argumentul, matricea rand(1, 2), n irul de caractere
'0.821 0.445'
Funcia str2num convertete un ir de caractere ntr-un numr. Forma funciei este
str2num(sir)
unde sir este irul ce va fi convertit n numr.
Exemplu. Fie instruciunea
x = str2num('2.5') + str2num('-3.7')
Se convertesc irurile de caractere n numere i rezultatul este
x=
-1.2000
23
Rezultat
Se afiaz 4 cifre dup virgul, fr exponent
Se afiaz 14 cifre dup virgul, fr exponent
Se afiaz 4 cifre dup virgul, cu exponent
Se afiaz 14 cifre dup virgul, cu exponent
Se afiaz 2 cifre dup virgul, fr exponent
Suprim caracterele CR pentru a afia mai puine
linii vide
Tabelul 14. Parametrul instruciunii format.
format short
pi/10
ans =
0.3142
format short e
pi/10
ans =
3.1416e-001
format bank
pi/10
ans =
0.31
format short e
format compact
pi/10
ans =
3.1416e-001
24
Z=
[1x3 double]
Este posibil de a defini tablouri de celule ce pot conine ca elemente celule cu obiecte
de tipuri diferite, tablouri, vectori sau matrice, structuri, iruri de caractere, etc.
Tablourile de celule se definesc asemntor cu tablourile obinuite, dar cu elementele
scrise ntre acolade, { i }. Vectorii de celule sunt utili la scrierea unor mesaje pe mai
multe linii. Ca exemplu, un vector coloan de celule ce conine ca elemente iruri de
caractere este urmtorul
A = {abc ; xyz ; mnp}
Un tablou de celule se creaz cu funcia cell() sau prin atribuire. De exemplu,
instruciunile
A = cell(2, 3)
B = {[], [], [] ; [], [], []}
creaz dou tabele de celule, A i B, cu dou linii i trei coloane cu celule vide.
Exist dou moduri de a adresa celulele unui tablou :
cnd utilizm paranteze rotunde, (), adresm celulele tabloului,
cnd utilizm acolade, {}, adresm valorile celulelor tabloului.
Fie de exemplu tabloul cu dou celule
D = {[1 2], [-1+j, 2+3j]}
D=
[1x2 double]
[1x2 double]
Dup cum se observ, tabloul conine obiecte de tipuri diferite. Vrem s extragem
datele din tablou.
Rezultatul instruciunii
C1 = D(2)
C1 =
[1x2 double]
este o celul.
Rezultatul instruciunii
C2 = D{2}
C2 =
-1.0000 + 1.0000i 2.0000 + 3.0000i
este chiar data din celul (este un tablou).
Vom crea un tablou cu dou celule X, cu aceleai componente ca D. Vom atribui
primei celule ca valoare vectorul [1, 2] utiliznd paranteze rotunde pentru indice.
Elementul atribuit trebuie s fie o celul.
X(1) = {[1, 2]}
X=
25
[1x2 double]
Vom atribui celei dea doua celule ca valoare vectorul [-1+j, 2+3j] utiliznd acolade.
Elementul atribuit trebuie s fie un tablou (datele din celul).
X{2} = [-1+j, 2+3j]
X=
[1x2 double]
[1x2 double]
Afiarea primului element al vectorului [1, 2] din prima celul a lui X se face cu
expresia X{1}(1)
X{1}(1)
ans =
1
Amintim c X{1} are ca rezultat vectorul [1, 2] din prima celul, iar X{1}(1) are ca
rezultat primul component al acestui vector.
Fie un vector cu dou celule cu elementele vectorii [1, 2.3] i [-3.28, 7].
Z = {[1, 2.3], [-3.28, 7]}
Z=
[1x2 double]
[1x2 double]
9.3000
26
ans =
1.0000
2.0000
27
3 Instruciuni Matlab
3.1 Instruciunea for
Instruciunea for are forma
for ident = vi:r:vf
bloc de instruciuni
end
Aici vi este valoarea iniial a variabilei ident, r este raia iar vf este valoarea final.
Cnd r > 0, instruciunea for execut blocul de instruciuni repetat cu variabila ident
lund valorile vi, vi + r, vi + 2*r, ... att timp ct ident <= vr. Dac r are valoarea unu,
expresia se poate scrie vi : vf.
Exemplu. Programul urmtor creaz un vector a cu cinci elemente, cu valorile 1, 1 / 2,
..., 1/5.
for i = 1 :5
a(i) = 1 / i ;
end
Menionm c, raia r poate fi i negativ. Atunci variabila ident ia valorile vi, vi + r,
vi + 2*r, ... att timp ct ident >= vr.
Instruciunea for are i urmtoarea form
for ident = expresie
bloc de instruciuni
end
Aici expresie este un vector sau o matrice.
Cnd expresie este un vector, ident ia ca valoare cte un element al vectorului i
execut blocul de instruciuni. Exemplul de mai sus poate fi scris ca
j = [1 : 1 : 5] ;
for i = j
a(i) = 1 / i ;
end
Atunci cnd expresie este o matrice, variabila ident ia pe rnd ca valoare cte o
coloan a matricei i execut blocul de instruciuni.
Exemplu. Fie matricea
1 2
a 2 4
3 6
Pentru fiecare coloan ai a matricei vrem s calculm matricea ai * ai. Fie
instruciunile
a = [ [1 2 3] [-2 -4 -6]]
for i = a
i * i
end
Rezultatul este
ans =
1
2
2
4
3
6
28
ans =
4
8 12
8 16 24
12 24 36
Menionm c, n prima form a instruciunii, expresia vi : r : vf este un vector linie.
Instruciunea for se utilizeaz n acelai mod n cazul tablourilor de celule. Fie
vectorul de celule de mai jos
D = {[1 2], [-1+2j, 2+3j]}
D=
[1x2 double]
[1x2 double]
4 i 5 2i 0
29
Vom afia coloanele matricei atta timp ct fiecare coloan are toate elementele
nenule. Fie programul de mai jos.
i=1;
while i <= 3 && all(b( :, i)
b( :, i)
i=i+1
end
Rezultatul este urmtorul.
ans =
4.0000
4.0000 + 1.0000i
ans =
5.0000
5.0000 + 2.0000i
Operatorul && se execut n felul urmtor. Se evalueaz primul operand. Dac
valoarea lui este fals, rezultatul este fals i al doilea operand nu se mai evalueaz.
Dac primul operand este adevrat, rezultatul este al doilea operand. In felul n care
este scris expresia, nu se poate ajunge la eroarea indice eronat.
3.4 Instruciunea if
Instruciunea if execut un bloc de instruciuni n funcie de valoarea unei condiii.
Forma instruciunii if este
if condiie1
bloc1
elseif condiie2
bloc2
..............
elseif condiien
blocn
else
bloc
end
Exemplu. Vom afia un mesaj dup cum valoarea unei variabile este pozitiv sau nu.
test = -5 ;
if test >= 0
variabila este pozitiva
else
30
31
4 Funcii
4.1 Definirea funciilor
Funciile se definesc n fiiere cu extensia m. Linia de definiie a unei funcii este
function [y1, y2, , yn ] = numefuncie (x1, x2, xk)
Variabilele x1, x2, , xk sunt parametri de intrare. Variabilele y1, y2, , yn sunt
calculate de funcie i sunt parametrii de ieire. Parametrii din definiia funciei se
numesc formali. Funciile pot avea propriile variabile locale. Funciile opereaz
asupra variabilelor din propriul lor spaiu, adic variabilele locale i parametrii.
Exemplu de funcie ce calculeaz patratul i cubul unei valori
function [p, c] = pc(x)
c = x * x;
p = c * x;
O funcie este apelat ca termen ntr-o expresie. Parametrii formali din definiia
funciei sunt nlocuii la apelare cu parametrii actuali. Parametrii de intrare actuali pot
fi expresii ce conin constante, variabile sau funcii. De exemplu, funcia de mai sus
este apelat ca
[a, b] = pc(2.3)
Orice funcie are 2 parametri implicii de intrare:
nargin numrul de parametri de intrare
nargout numrul de parametri de ieire
Execuia unei funcii se termin n mod normal la sfritul funciei. Pentru a termina
execuia funciei mai nainte se utilizeaz instruciunea
return
Funciile sunt salvate n fiiere ce au numele funciei i extensia .m. Imtr-un fiier .m
se pot defini mai multe funcii, apelate de prima fincie definit n fiier.
32
33
Aici f este o variabil handle, iar lista de parametri va conine parametrii lui f i ali
parametri ai funciei fcn. Fie fun o funcie ce va fi pasat ca parametru funciei fcn.
Apelarea funciei fcn se face cu urmtoarea secven de instruciuni:
% creaza variabila handle f
f = @fun ;
% paseaza variabila handle i
% lista de parametri actuali ai functiilor fcn si fun
x = fcn(f, lista de parametri actuali);
Exemplu. Fie funcia funb(x) ce va calcula expresia sin(f(x)), unde f(x) este o funcie
oarecare, ce va fi parametru al funciei funb. Funcia funb este memorat n fiierul
funb.m.
function b = funb(fcn, x)
% fcn - variabila handle a unei functii
%
ce calculeaz o expresie f(x)
y = fcn(x);
b = sin(y);
Vrem s calculm expresiile sin(x^2) i sin(x^3) cu x = 1.1. Vom defini funcia funa
ce calculeaz valoarea x^3 ca
function a = funa(x)
a = x * x * x;
i func care calculeaz valoarea x^2 ca
function a = func(x)
a = x * x;
Apelm funcia funb cu primul parametru handle al funciei funa i al doilea
parametru 1.1 i obinem
fh = @funa
z = funb(fh, 1.1)
z=
0.9714
Apelm funcia funb cu primul parametru handle al funciei func i al doilea
parametru 1.1 i obinem
fh = @func
z = funb(fh, 1.1)
z=
0.9356
35
36
Funcia feval poate evalua i funcii anonime. De exemplu, pentru a calcula valoarea
expresiei x^3 pentru x = 1.5 putem scrie
feval(@(x)x^3, 1.5)
ans =
3.3750
Matlab are funcia predefinit functions ce are ca parametru o variabil tip handle de
funcii i ca rezultat o structur cu informaiile despre funcia coninut n variabila
handle. De exemplu, pentru a obine structura cu informaii despre funcia funa vom
scrie
a = functions(@funa)
iar rezultatul va fi
a=
function: 'funa'
type: 'simple'
file: c:\matlab\work\funa
Pentru a afla doar fiierul n care este definit funcia vom afia cmpul file al
structurii a n felul urmtor
a.file
iar rezultatul va fi
ans =
c:\matlab\work\funa
37
ans =
2
[1x2 double]
celldisp(R)
R{1} =
1 2
R{2} =
1.4142
3.6056
38
5 Reprezentri grafice
5.1 Reprezentarea curbelor plane
Reprezentarea curbelor n plan se face cu funciile din Tabelul 15:
Funcia
plot
loglog
semilogx
semilogy
polar
stem
stairs
bar
Tipul graficului
scar liniar pe ambele axe
scar logaritmic pe ambele axe
scar logaritmic pe axa x
scar logaritmic pe axa y
coordinate polare
grafic cu linii terminate cu cercuri
grafic n scar
grafic cu bare
Funciile au ca parametri perechi de vectori x1, y1, , xn, yn. Vectorii x1, x2, ..., xn
conin abscisele curbelor, iar vectorii y1, y2, ..., yn conin ordonatele curbelor. Forma
funciei plot este
plot(x1, y1, , xn, yn)
Proprietile liniilor cu care se traseaz graficele sunt : culoarea (graficele pot fi
trasate cu diverse culori), stilul (continu, etc.) i simbolurile de marcaj (punctele de
pe grafic pot fi marcate cu diverse simboluri). Aceste trei proprieti (culoare, simbol
de marcaj i stilul liniei) se specific utiliznd simbolurile din Tabelul 16 printr-un ir
de caractere, cte unul pentru fiecare proprietate.
Culoare
albastru
verde
rou
mov
roz
galben
negru
Simbol
b
g
r
c
m
y
k
Marker
punct
cerc
x
plus
asterisc
ptrat
Simbol
.
o
x
+
*
s
Stil linie
continu
punctat
ntrerupt
Simbol
:
--
Pentru a utiliza o anumit culoare, tip de linie sau simbol la curba (xi, yi), perechea de
vectori xi, yi este urmat de un ir de caractere din tabelul de mai sus de forma cml
ce precizeaz culoarea, markerul i simbolul cu care se traseaz curba. De exemplu,
funcia
plot(x, y, 'b')
traseaz curba (x, y) cu culoarea albastru.
Reprezentarea curbelor n mai multe ferestre se face cu instruciunea
subplot(m, n, p)
Aceast instruciune mparte ecranul ntr-o matrice de m*n ferestre i traseaz axele n
fereastra p, unde p = 1, ..., m * n. Instruciunea plot urmtoare reprezint curba n
fereastra p.
Funcia
xlabel(sir)
39
Poziia
cea mai bun poziie
colul dreapta-sus
colul stnga-sus
colul stnga-jos
colul dreatpa-jos
n afara graficului
Legenda arat tipul, markerul i culoarea folosite pentru a reprezenta curba, plus
textul specificat.
Menionm c, figura, aria de desenare, curba, etichetele axelor, etc., sunt obiecte
grafice cu proprieti, create de funciile plot, xlabel, ylabel, etc. Toate funciile
grafice au ca rezultat un handle al obiectului grafic creat, curb, eticheta axei,
legenda, titlul, etc. Acest handle poate fi memorat ntr-o variabil i poate fi utilizat
pentru a obine sau prescrie proprieti ale obiectului grafic.
De exemplu, pentru a afia legenda la figuri unde s-a utilizat instruciunea subplot, se
utilizeaz variabila handle a instruciunii plot ca mai jos
h = plot(t, x)
legend(h, sir)
Funcia
grid
traseaz o gril pe figur.
Limitele axelor se pot specifica cu instruciunea
axis(xmin, xmax, ymin, ymax)
Selectarea automat a axelor se face cu instruciunea
axis auto
Vom exemplifica utilizarea acestor instruciuni pentru reprezentarea grafic a
funciilor sin(t) i cos(t) pe intervalul [0, 2 ]. Programul este urmtorul
t = 0 :0.001 :2*pi ;
plot(t, sin(t), t, cos(t))
xlabel(time)
40
grid
title(sin(time), cos(time))
Rezultatul este prezentat n Figura 8.
Este posibil de a utiliza litere greceti, alte caractere speciale sau expresii simple n
instruciunile ce afiaz iruri: title, xlabel i ylabel. Acestea se scriu dup regulile din
Latex. Caracterele se definesc n text sub forma
\nume caracter
Exemple de caractere sunt prezentate n Tabelul 18.
Caracter
Definiie
\theta
\Theta
\Pi
\alpha
\pm
\infty
\times
\lfloor
\subseteq
Caracter
Caracter
'
Definiie
\leq
\geq
\neq
\prime
\partial
\equiv
\div
\rfloor
\supseteq
Definiie
\leftarrow
\rightarrow
\uparrow
\downarrow
\leftrightarrow
\int
\surd
41
Definiia literelor greceti mari ncepe cu liter mare, a celor mici cu liter mic, de
exemplu \Omega pentru i respectiv \omega pentru .
Expresiile se definesc dup urmtoarele reguli:
expresii cu exponeni; expresia ab se definete ca a^b,
expresii cu indici; expresia xi se definete ca x_i,
dac este cazul, expresiile se grupeaz ntre acolade, { i }.
De exemplu, expresia eat se definete ca
e^a^t
sau
e^{at}
Expresia ai se definete ca
a_i
iar expresia xi+j se definete ca
x_{i+j}
Pentru a afia un text inclinat, (stilul italic), vom defini acel text ca
\ittext
iar pentru afiare cu litere groase (bold) vom defini textul ca
\bftext
Pentru exemplificare vom reprezenta grafic funcia sin() pe intervalul [0, 2 ]. Vom
scrie urmtoarele texte:
pe axa y, textul sin(),
pe axa x, textul 0 2 ,
titlul graficului va fi Functia sin().
Programul este urmtorul
t = 0: 0.001: 2*pi;
x = sin(t);
plot(t, x)
xlabel('0 \leq \theta \leq 2\pi')
ylabel('sin(\theta )')
title('Functia sin(\theta)')
grid
Rezultatul programului este cel din Figura 9.
42
43
Implicit, fiecare instruciune plot creaz o nou figur. Dei o instruciune plot poate
reprezenta grafic mai multe curbe, uneori este necesar s reprezentm mai multe
curbe pe aceeai figur cu mai multe instruciuni plot. Instruciunea
hold on
menine figura curent i proprietile axelor, astfel nct urmtoarele instruciuni plot
reprezint curbe pe aceeai figur. Instruciunea
44
hold off
reface modul implicit al instruciunii plot, de a terge graficele precedente i de a
reface proprietile iniiale ale axelor nainte de a desena un noi grafice.
Exemplu. Fie programul:
t = 0: 0.01: pi;
a = sin(2 * t);
b = cos(4 * t);
plot(t, a);
hold on
plot(t, b)
El traseaz dou curbe cu dou instruciuni plot pe aceeai figur.
Axele pot fi fcute vizibile sau invizibile cu opiunile on i off:
axis on
axis off
In unele cazuri avem nevoie s reprezentm simultan mai multe figuri. Dup cum am
spus mai nainte, acest lucru se face cu instruciunea
subplot (m, n, p)
care mparte figura ntr-o matrice de mxn axe i selecteaz axa p pentru reprezentarea
grafic ce se va face cu instruciunea plot urmtoare.
Ca exemplu vom reprezenta curbele sin(t), cos(t), sin2(t) i cos(t) n funcie de sin(t)
ntr-o matrice de patru figuri. Porgramul este urmtorul.
t = 0: pi/20: 2*pi;
x = sin(t);
y = cos(t);
z = x .* x;
subplot(2, 2, 1)
plot(t, x)
grid
xlabel('t[s]')
ylabel('sin(t)')
subplot(2, 2, 2)
plot(t, y)
grid
xlabel('t[s]')
ylabel('cos(t)')
subplot(2, 2, 3)
plot(t, z)
grid
xlabel('t[s]')
ylabel('sin^2(t)')
subplot(2, 2, 4)
plot(x, y)
grid
45
xlabel('sin(t)')
ylabel('cos(t)')
Rezultatul rulrii programului este cel din Figura 11.
46
a) meniul File
b) meniul Edit
c) meniul Insert
Salvarea unei figuri se face cu opiunile Save sau Save As ale meniului File.
La editarea unei figuri se pot aduga text, linii sau sgei. Pentru aceasta se utilizeaz
butoanele barei de instrumente din Figura 12, vezi i Figura 13, sau opiunile Arrow,
Line i Text ale meniului Insert din Tabelul 19.
Semnificaia acestor butoane i a opiunilor meniului Insert este cea din Tabelul 20.
Buton
Meniul Insert
Semnificaie
Selecteaz figura
Text
Arrow
Adaug text
Adaug o sgeat
Line
Adaug o linie
Procedura de adugare a unui text, a unei sgei sau a unei linii cu butoanele barei de
instrumente este urmtoarea :
1. se selecteaz figura cu un clic pe butonul
componente obiecte tip line ce reprezint curbele. Acest arbore este afiat de Editorul
de proprieti ca n Figura 14.
Caseta editorului de proprieti pentru modificarea axelor, Property Editor Axes, are
cteva seciuni importante, seciunea Style din Figura 16 i seciunile X, Y, Z, vezi
Figura 17 pentru seciunea X.
48
49
Menionm c o serie de proprieti ale figurii, axelor, liniei se pot alege din opiunile
meniurilor contextuale afiate la un clic cu butonul drept pe figur, scala axelor,
etichetele axelor. Aceste meniuri sunt artate n Tabelul 21.
51
52
Un alt exemplu de figur editat este cea din Figura 20. Aici s-au inserat o sgeat i
un text i s-au modificat stilul acestora i al curbei. Inserarea obiectelor s-a fcut
utiliznd bara de instrumente a figurii. Modificarea proprietilor se poate face cu
editorul de proprieti s-au utiliznd opiunile meniurilor contextuale afiate cu un clic
cu butonul drept al mousului pe obiect.
In cazul utilizrii Editorului de proprieti se afiaz arborele figurii, vezi Figura 21,
apoi se afiaz casete de dialog corespunztoare obiectelor de unde se aleg
proprietile dorite.
53
Funcie
gcf
gca
gco
Instruciunea
get(handle-obiect)
afiaz toate proprietile obiectului identificat de variabila handle-obiect.
Ierarhia obiectelor grafice este cea din Figura 22. Dup cum se vede din Figura 22
obiectele de tip Line i Text sunt copiii obiectului Axes.
54
Aceast ierarhie este afiat i de Editorul de proprieti, vezi Figura 14. In continuare
vom prezenta proprietile importante ale obiectelor grafice.
Toate obiectele grafice au proprietile comune din Tabelul 23.
Proprietate
Parent
Children
Type
Coninut
Variabila handle-obiect a printelui
Vector cu variabile handle-obiect ale copiilor
Tipul obiectului
Valori
[left, bottom, width, height]
{pixels, inches, centimeters, points}
Valori
{normal, italic, oblic}
{Courier, FixedWidth}
Dimensiunea fontului n FontUnits
{points, normalized, pixels, inches}
{normal, bold, light}
Valoare
[left, bottom, width, height]
{pixels, inches, centimeters, points}
{b, g, r, c, m, y, k}
Sistemul curent de axe
Valoare
[left, bottom, width, height]
[left, bottom, width, height]
{pixels, inches, centimeters, points}
{top, bottom}
{left, right}
{none, [r, g, b]}
{b, g, r, c, m, y, k}
{b, g, r, c, m, y, k}
Variabila handle-obiect a axei X
Variabila handle-obiect a axei Y
Variabila handle-obiect a titlul figurii
56
Celelalte proprieti ale obiectului Axes sunt evidente. Codurile culorilor sunt cele din
Tabelul 16. Exemple de utilizare a acestor proprieti vor fi prezentate ulterior.
Valoare
Vector cu abscise
Vector cu ordonate
{b, g, r, c, m, y, k}
Valoare
text
{left, center, right}
{top, middle, bottom}
{latex, tex, none}
{points, normalized, pixels, centimeters}
[x, y]
57
1440
900
58
59
60
61
t = 0: 0.01: 2 ;
x = sin(t);
plot(t, x)
set(gca, 'FontSize', 14)
title('Plot of sin(\Theta)')
xlabel('0 \leq \Theta \leq \pi')
ylabel('sin(\pi )')
text(pi, 0, '\leftarrow sin(\pi)', 'FontSize', 14)
grid
Rezultatul programului este cel din Figura 28.
In exemplul nostru vom crea mai nti un sistem de axe invizibil cu instruciunea
h = axes('position', [0 0 1 1], 'visible', 'off');
Apoi vom face acest sistem de axe sistemul current de axe al figurii.
set(gcf, 'currentAxes', h)
Vom scrie apoi parametrii curbei cu o instruciune text. Vom crea apoi un nou sistem
de axe n dreapta figurii cu instruciunea
axes('position', [.25 .1 .7 .8]);
i vom reprezenta grafic curba cu o instruciune plot.
t=0: 0.01: 4;
str(1) = {'Plot of the function'};
str(2) = {'y=A{\ite}^{-\alpha{\itt}}*sin(-\alpha{\itt})'};
str(3) = {'with the values'};
str(4) = {'A=0.25'};
str(5) = {'\alpha = 0.05'};
str(6) = {'t = 0: 0.01: 4'};
h = axes('position', [0 0 1 1], 'visible', 'off');
set(gcf, 'currentAxes', h)
text(0.05, .6, str, 'FontSize', 8)
axes('position', [.25 .1 .7 .8]);
A = 0.25 ;
alfa = 0.05 ;
z = A*exp(-alfa*t) .* sin(-alfa *t);
plot(t, z)
grid
Rezultatul programului este cel din Figura 29.
63
Ca un alt exemplu vom reprezenta dou curbe pe acelai grafic n dou sisteme de
axe. Culoarea zonei de desenare va fi verde. Pentru acesta vom utiliza instruciunea
set(gcf, 'defaultaxescolor', 'g');
Fie (x1, y1) vectorii cu perechi de puncte ai primei curbe. Aceast curb va fi trasat
cu culoarea roie cu o instruciune de forma
h11 = line(x1, y1, color, r);
Poziia axelor acestei curbe este cea implicit, la stnga i jos. Vom prescrie culoarea
celor dou axe roie. Pentru aceasta se obine variabila handle a obiectului Axes
corespunznd curbei i apoi se prescriu culorile axelor.
ax1 = gca;
set(ax1, 'XColor', 'r', 'YColor', 'r');
Se creaz un nou obiect Axes cu aceeai poziie cu obiectul Axes al primei curbe,
poziia axelor fiind sus i dreapta, culoare axelor neagr:
ax2 = axes('position', get(ax1, 'position'), ...
'XAxisLocation', 'top', 'YAxisLocation', 'right', ...
'Color', 'none', 'XColor', 'k', 'YColor', 'k');
Se reprezint a doua curb n noile axe, noul obiect Axes fiind printele obiectului
Line ce reprezint curba (x2, y2).
h12 = line(x2, y2, 'Color', 'k', 'parent', ax2);
Programul final este cel de mai jos.
x1 = [0:.1: 40];
64
65
X k x n e
j 2 k 1 n 1
N
, 1 k N
n 1
X k e
j 2 k 1 n 1
N
, 1 n N
k 1
Vom exemplifica cele de mai sus reprezentnd transformata Fourier discret a unui
semnal. Fie funcia de timp
x(t) = sin(2 * pi * 50 * t) + 1.5 * sin(2 * pi * 100 * t) + ...
sin(2 * pi * 200 * t) + .5 * sin(2 * pi * 350 * t)
Funcia ce calculeaz transformata Fourier discret este
fft(x)
unde x este vectorul valorilor funciei de timp n puncte echidistante. Funcia
ifft(X)
calculeaz transformata Fourier invers.
Se va scrie o funcie Matlab care calculeaz transformata Fourier rapid a lui x(t) i
reprezint pe x(t), modulul Xm i argumentul Xf al transformatei Fourier n trei
ferestre. Se vor reprezenta grafic jumtate din punctele transformatei Fourier. Se
noreaz T perioada de eantionarei fe = 1 / T frecvena de eantionare. Frecvenele
pentru care se reprezint tansformata Fourier sunt
k * fe
fk
k 0 : N / 2
N
Funcia Matlab este urmtoarea
function testx
t = 0: 0.001 : 0.511;
fe = 1 / (t(2) - t(1)); % 1 / T
x = sin(2 * pi * 50 * t) + 1.5 * sin(2 * pi * 100 * t) + ...
sin(2 * pi * 200 * t) + .5 * sin(2 * pi * 350 * t);
Xt = fft(x);
Xm = abs(Xt);
Xf = angle(Xt);
N = length(x);
X = Xm(1: N / 2 + 1);
f = [0: N / 2] * fe / N; % k * fe / N, k = [0: N /2]
Xfaza = Xf(1: N / 2 + 1);
% afisaza x
subplot(2, 2, 1)
plot(t, x);
grid
66
xlabel('t [s]')
ylabel('x')
% afisaza modulul, |Xt|
subplot(2, 2, 3)
plot(f, X)
grid
xlabel('f [Hz]')
ylabel('amplitudine')
% afisaza faza, arg(Xt)
subplot(2, 2, 4)
plot(f, Xfaza)
grid
xlabel('f [Hz]')
ylabel('faza [Rad]')
Rezultatul execuiei acestei funcii este cel din Figura 31
67
68
ode23
@ valdot , ts, x 0
ode45
unde vectorul ts = [t0, tf] conine limitele intervalului pe care se calculeaz soluia, iar
x0 este vectorul condiiilor iniiale. Funcia valdot calculeaz derivata ca mai sus.
Vom calcula soluia ecuaiei de mai sus pe 5 s n condiiile iniiale y 0 = 1 i y' 0 = 0.
Programul este urmtorul:
ts = [0 5];
x0 = [1 0]';
[t x] = ode45(@valdot, ts, x0);
plot(t, x)
grid
xlabel('t [s]')
legend('x', 'x''')
Soluia ecuaiei este reprezentat n Figura 33.
69
Figura 33. Soluia ecuaiei difereniale y'' + 3y' + 2y = 0 n condiiile iniiale y0=1, y'0=0.
70
71
Figura 34. Soluia ecuaiei difereniale y'' + p1 y' + p2 y = 0 n condiiile iniiale y0=1, y'0=0,
pentru diverse valori ale parametrilor.
72
8 Filtre numerice
Un filtru numeric este descris de ecuaia cu diferene
a1 y n a 2 y n 1 a k y n k 1 b1u n b2 u n 1 bm u n m 1
73
74
75
function f = fval(x)
f(1) = x(1) * x(1) - 2 * x(2) * x(2) + 4.82;
f(2) = 2 * x(1) + 4 * x(2) * x(2) - 16.74;
i obinem rezultatul
Optimization terminated: first-order optimality is less than
options.TolFun.
x =
1.4494
1.8602
i obinem rezultatul
Optimization terminated: first-order optimality is less than
options.TolFun.
x =
1.4494
1.8602
f =
1.0e-009 *
-0.1235
0.4388
i obinem rezultatul
Optimization terminated: first-order optimality is less than
options.TolFun.
x =
1.4494
1.8602
f =
76
1.0e-009 *
-0.1235
0.4388
exitflag =
1
77
10 Interpolarea funciilor
Fie o funcie f(x) ale crei valori sunt date prin perechi de puncte (x i, yi), i = 1, n.
Pentru a determina valoarea funciei ntr-un punct x se interpoleaz ntre valorile
funciei corespunznd punctelor xi.
Funcia Matlab de interpolare este interp1 cu formele:
YA = interp1(X, Y, XA)
YA = interp1(X, Y, XA, 'metoda')
Vectorii X i Y conin punctele xi i respectiv yi. Punctele xi sunt n ordine cresctoare.
interp1 calculeaz YA, valoarea funciei n punctul XA. Dac XA este scalar, interp1
calculeaz valoarea funciei n acest punct. Dac XA este vector, rezultatul YA este un
vector cu valorile funciei n punctele din vectorul XA. Un exemplu este cel de mai
jos.
xtab = [10 16 25 32 40 100 250];
ytab = [1.6 2.1 2.5 3 3.5 4 5];
a = 32;
rez = interp1(xtab, ytab, a);
In forma a doua se poate specifica metoda de interpolare. Metode disponibile sunt
'linear' i 'cubic'. In prima form se utilizeaz interpolarea liniar.
78
11 Operaii cu polinoame
Fie polinomul
A(x) = a1xn + a2xn-1 + + anx + an+1
cu coeficieni reali sau compleci. Acest polinom este dat prin vectorul coeficienilor
A = (a1 a2 an an+1)
Calculul rdcinilor polinomului se face cu funcia
R = roots(A)
care are ca rezultat vectorul R cu rdcinile polinomului.
Exemplu. Fie polinomul
A(x) = (1 + 2i)x2 + 2.3x + 5.2
Calculul rdcinilor polinomului se face ca mai jos.
A = [1+2i 2.3 5.2];
R = roots(A)
R=
0.4846 + 1.7674i
-0.9446 - 0.8474i
Calculul valorii polinomului A n punctual x se face cu funcia
polyval(A, x)
Valoarea polinomului A(x) n punctul x = 2 3.5i este
polyval(A, 2-3.5i)
ans =
29.5500 -38.5500i
Valoarea polinomului A pentru prima rdcin este
polyval(A, R(1))
ans =
0 +1.7764e-015i
79
12 Interfee grafice
Limbajul Matlab are posibilitatea de a construi interfee grafice. Exist dou moduri
de a construi o interfat grafic :
cu aplicaia GUIDE,
prin utilizarea funciilor Matlab de creare a unei interfee grafice.
Seciunea Create New GUI permite alegerea unui ablon de interfa grafic.
Seciunea Open Existing GUI deschide o interfa grafic existent.
Crearea unei noi interfee grafice se face astfel:
n seciunea Create New GUI se selecteaz ablonul Blank GUI (Default),
clic pe butonul OK i editorul Layout afiaz o interfaa grafic goal ca n
Figura 38.
In partea stng a ferestrei este afiat paleta de componente din care se pot insera
diverse obiecte grafice: butoane, meniuri, casete de text, etc. In partea dreapt a
ferestrei se afl aria de desenare n care se insereaz componentele interfeei.
80
Dimensiunile interfeei se pot modifica prin tragerea butonului din dreapta jos a ariei
de desenare din Figura 38.
Figura 38. Fereastra editorului Layout. Interfa grafic goal afiat cu opiunea Blank GUI.
Meniul File din Tabelul 30 are n general opiunile cunoscute. O parte din opiuni se
pot activa i din butoanele barei de instrumente din Figura 39.
81
82
Figura 41. Fereastra editorului Layout. Interfa grafic goal afiat cu opiunea Blank GUI.
Paleta cu componente afiaz i numele componentelor.
Aria de desenare se poate poate modifica astfel nct s afieze sau s ascund riglele
pe cele dou axe, s afiaze sau s ascund grila de desenare, s modifice distana
ntre liniile grilei, etc. Aceste opiuni se activeaz n caseta de dialog Grid and Rulers
din Figura 42, afiat cu un clic pe opiunea Grid and Rulers a meniului Tools.
Aria de desenare cu opiunea Show rulers activat este artat n Figura 43. In acest
caz se pot vedea coordonatele cursorului.
83
84
Acest lucru se face cu clic pe rigla orizontal sau vertical dup care se trage linia n
interiorul zonei de desenare cu butonul stng al mousului apsat. Liniile odat trasate,
se pot deplasa cu butonul stng al mousului apsat.
12.1.2
a) meniul Edit
b) meniu contextual
85
86
a) meniul View
b) meniul Tools
c) meniu contextual
Tabelul 32. Meniurile View, Tools ale editorului Layout i meniul contextual al obiectului grafic.
12.1.3
Alinierea componentelor
87
Rezultatul alinierii celor trei butoane din Figura 46 este artat n Figura 47.
Interfaa grafic
12.1.4
88
89
O proprietate comun tuturor obiectelor este String. In cazul obiectelor tip buton sau
text static, valoarea proprietii este chiar numele obiectului. In cazul unui obiect
Popup Menu sau Listbox, valoarea proprietii const n irurile de caractere cu
opiunile meniului, respectiv opiunile casetei Listbox. In cazul unei casete de text,
EditText, este chiar textul din caset. Modificarea acestei proprieti se face astfel:
1. se afiaz caseta Inspectorului de proprieti,
2. se selecteaz obiectul n interfaa grafic,
3. se selecteaz proprietatea String cu un clic ; ea apare ca n Figura 49 sau n
Figura 50,
4. proprietatea String se poate modifica n dou moduri :
a. se introduce n partea dreapt irul de caractere dorit,
b. clic pe butonul
care afiaz caseta de dialog String din Figura 51 n
care se introduce irurile de caractere dorite.
Pentru a modifica numele butonului Push Button din interfaa din Figura 45 vom
selecta proprietatea String cu un clic i vom introduce n partea dreapt irul de
caractere dorit. Procedura este urmtoarea :
1. se selecteaz butonul Push Button n interfaa grafic,
2. se selecteaz proprietatea String n caseta Inspectorului de Proprieti ca n
Figura 49,
90
In interfaa din Figura 45 s-au modificat numele butoanelor i textul static i s-a ters
textul din caseta Edit Text..
Adugarea de opiuni la un obiect de tip Popup Menu se face astfel :
1. se selecteaz obiectul Popup Menu din interfaa grafic,
2. se selecteaz proprietatea String n caseta Inspectorului de Proprieti ca n
Figura 50,
3. clic pe butonul
care afiaz caseta de dialog String din Figura 51 n care se
introduce textul opiunilor dorite; dup nserarea textului unei opiuni clic pe
butonul Return,
4. dup introducerea tuturor opiunilor clic pe butonul OK al casetei de dialog.
In acelai mod s-au introdus irurile n caseta Listbox. Rezultatul este cel din Figura
52.
91
Caseta cu obiectele interfeei grafice inspectate cu opiunea Object Browser este cea
din Figura 53. Caseta prezint arborele obiectelor interfeei grafice. Acest arbore are
ca rdcin un obiect tip figure.
92
Tipurile posibile ale obiectelor nterfeelor grafice sunt cele din Figura 54.
Numele generate pentru obiectele grafice au forma text1, text2, pushbutton1, etc. Ele
sunt formate din tipul elementului i numrul obiectului de tipul respectiv din
interfa, n ordinea n care a fost adugat.
Interfaa grafic poate fi salvat n dou moduri:
cu un clic pe opiunea Save As al meniului File,
cu un clic pe opiunea Run a meniului Tools sau pe butonul
al barei de
instrumente.
Aplicaia GUIDE creaz :
o figur (un fiier cu extensia .fig),
un fiier cu instruciuni ce realizeaz funciile obiectelor interfeei (cu
extensia .m). Acest fiier trebuie completat cu instruciunile corespunztoare
pentru ca obiectele interfeei s realizeze funciile dorite.
Interfaa construit este lansat n execuie n dou moduri:
cu un clic pe fiierul guidex2.fig i arat ca n Figura 55,
de la linia de comand, guidex2. In acest mod n linia de comand pot exista i
parametri.
93
12.2.1
al barei de instrumente.
94
95
Aplicaia GUIDE creaz un fiier cu numele test.fig i unul cu numele fiier test.m.
Funciile generate n fiierul test.m sunt urmtoarele.
Se genereaz o funcie test cu prototipul
function varargout = test(varargin)
care iniializeaz aplicaia. Parametrul de intrare varargin conine o list cu
argumentele liniei de comand. Reamintim c interfaa creat poate fi lansat n
execuie n dou feluri :
cu un clic pe fiierul test.fig,
de la linia de comand, cu numele interfeei, test, caz n care linia de comand
poate avea i parametri, iruri de caractere dup numele interfeei. Aceti
parametrii, dac exist, sunt pasai interfeei n vectorul varargin.
Codul funciei test este urmtorul.
function varargout = test(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @test_OpeningFcn, ...
'gui_OutputFcn', @test_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
96
97
Aplicaia GUIDE genereaz n general dou funcii pentru fiecare obiect al interfeei:
o funcie pentru iniializarea obiectului, apelat o singur dat de sistemul de
operare la crearea obiectului,
o funcie callback, apelat de sistemul de operare la fiecare selectare a
obiectului, pentru tratarea evenimentelor corespunztoare obiectului.
Vom prezenta n continuare aceste funcii. Obiectele interfeei noastre au numele
edit1, edit2 i respective pushbutton1 (proprietatea Tag a obiectelor), i sunt utilizate
de aplicaia GUIDE la crearea numelor funciilor asociate obiectelor.
98
Urmtoarea funcie, specific obiectelor tip EditText, este apelat o singur dat la
crearea obiectului. Ea poate fi utilizat pentru a prescrie proprietile obiectului:
culoarea fondului, etc. Parametrii funciei sunt :
hObject variabila handle a obiectului edit1,
handles - structur cu variabile handle ale obiectelor interfeei i date utilizator.
Ea este creat dup ce toate funciile CreateFcn asociate obiectelor interfeei
au fost apelate.
Funcia este urmtoarea.
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
O funcie identic este generat pentru obiectul EditText edit2.
Urmtoarele funcii sunt funciile callback pentru fiecare obiect al interfeei generate
de aplicaia GUIDE.
Funcia edit1_Callback este funcia callback pentru obiectul EditText edit1. Ea este
apelat ori de cte ori obiectul edit1 este selectat. Parametrii funciei sunt:
hObject variabila handle a obiectului edit1,
handles - structur cu variabile handle ale obiectelor interfeei i date utilizator
Funcia este prezentat n continuare:
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
%
str2double(get(hObject,'String')) returns contents of edit1 as a double
Pentru a obine textul din caseta de text (valoarea proprietii String) se utilizeaz
funcia
get(hObject,'String')
O funcie identic este generat pentru cellalt obiect EditText, edit2.
Funcia pushbutton1_Callback este funcia callback pentru obiectul tip PushButton
pushbutton1. Ea este apelat ori de cte ori apare un eveniment pentru acest obiect
(clic pe buton). Parametrii funciei sunt:
hObject variabila handle a obiectului pushbutton1,
handles - structur cu variabile handle ale obiectelor interfeei i date utilizator.
99
12.2.2
Funciile interfeei pot fi modificate cu editorul de fiiere Matlab (M-file Editor) care
se lanseaz cu un clic pe opiunea M-file Editor a meniului View sau a meniului
contextual afiat la un clic cu butonul drept pe un obiect al interfeei, sau cu un clic pe
butonul
La un clic pe butonul
se afiaz meniul din Figura 61. Un clic pe o funcie
plaseaz cursorul la nceputul acestei funcii n fiier.
100
Vom modifica acum funciile callback ale interfeei grafice. Operaiile pe care trebuie
s le execute interfaa grafic sunt:
s citeasc numrul introdus n caseta de text edit1,
s nmuleasc acest numr cu 2,
s afieze rezultatul n caseta de text edit2.
Funcia edit1_Callback va fi modificat astfel nct s citeasc numrul introdus n
caseta de text i s-l memoreze ca valoare a proprietii String a obiectului. Funcia
modificat este artat mai jos.
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
%
str2double(get(hObject,'String')) returns contents of edit1 as a double
input = str2num(get(hObject, 'String'));
if(isempty(input))
set(hObject, 'String', 0);
end
guidata(hObject, handles);
Funcia
get(hObject,'String')
d coninutul casetei de text ca ir de caractere. Funcia str2num convertete irul de
caractere n numr. Dac irul de caractere a fost vid atunci n caseta de text se nscrie
caracterul 0 cu funcia
set(hObject, 'String', 0)
In final, funcia
guidata(hObject, handles)
memoreaz valorile proprietilor obiectului n structura handles.
Funcia pushbutton1_Callback va fi modificat nct s citesc proprietatea String a
obiectului edit1, care este numrul introdus n caseta de text edit1, s nmuleasc cu 2
acest numr i s-l nscrie n caseta de text edit2. Funcia modificat este cea de mai
jos.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
101
12.2.3
Vom crea o interfa cu un grafic al funciei sin(t) pe intervalul [0, 2]. Interfaa este
cea din Figura 62. Numele ei va fi testfigure.
102
Aplicaia GUIDE genereaz un program dup cum s-a artat anterior. Vom repeta aici
definiia funciei testfigure_OutputFcn n care vom introduce datele ce se vor afia.
% --- Outputs from this function are returned to the command line.
function varargout = testfigure_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
Vom genera n aceast funcie datele ce se vor reprezenta grafic, vom crea obiectul
plot respectiv i vom memora acest obiect n structura handles, n cmpul
current_data, ca mai jos. Funcia modificat este urmtoarea.
% --- Outputs from this function are returned to the command line.
function varargout = testfigure_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
103
t = 0:0.1:2*pi;
x = sin(t);
h = plot(t, x);
xlabel('t [s]');
ylabel('sin(t)');
grid
handles.current_data = h;
% Get default command line output from handles structure
varargout{1} = handles.output;
Interfaa este cea din Figura 63.
Vom crea o interfa cu dou butoane care s reprezinte funcia sin(t) sau cos(t) dup
cum apsm un buton sau altul. Interfaa este cea din Figura 64. Numele ei este
douagrafice.
Pentru nceput generm graficul funciei cos ntr-un obiect plot memorm acest obiect
n structura handles, n cmpul current_data, ca mai sus. Aceast funcie este afiat
iniial.
% --- Executes just before douagrafice is made visible.
function douagrafice_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
104
% varargin
command line arguments to douagrafice (see VARARGIN)
t = 0:0.1:2*pi;
y = cos(t);
hs = plot(t, y);
xlabel('t [s]');
ylabel('cos(t)');
grid
handles.current_data = hs;
guidata(hObject, handles)
% Choose default command line output for douagrafice
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes douagrafice wait for user response (see UIRESUME)
% uiwait(handles.figure1);
105
xlabel('t [s]');
ylabel('sin(t)');
grid
handles.current_data = hs;
guidata(hObject, handles)
Vom crea acum o interfa cu dou obiecte grafice de tipul axes. Vom afia cte un
grafic n fiecare obiect axes la un clic pe un buton.
Funcia asociat butonului este artat mai jos.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject
handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
t = 0: 0.1: 2 * pi;
sx = sin(t);
cx = cos(t);
axes(handles.axes1)
plot(t, sx)
grid on
axes(handles.axes2)
plot(t, cx)
grid on
106
Afiarea unei curbe ntr-un obiect tip axes se face ca mai jos. Se genereaz curba
t = 0: 0.1: 2 * pi;
sx = sin(t);
Funcia axes(h) unde h este o variabil handle definete obiectul h ca axe curente.
Funcia plot urmtoare reprezint grafic o curb n aceste axe curente.
12.2.4
Modificarea proprietilor obiectelor grafice la rularea
programului
Vom construi o interfa grafic cu dou butoane, Button1 i Button2, i o caset de
text. Butonul 2 este iniial dazactivat. Un clic pe butonul 1 activeaz butonul 2. Un
clic pe butonul 2 afiaz un mesaj n caseta de text.
Interfaa grafic este cea din Figura 66. Ea are numele buttons i se proiecteaz ca n
exemplele anterioare.
107
108
109
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help buttons
% Last Modified by GUIDE v2.5 11-Aug-2010 22:50:48
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @buttons_OpeningFcn, ...
'gui_OutputFcn', @buttons_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before buttons is made visible.
function buttons_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to buttons (see VARARGIN)
% Choose default command line output for buttons
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes buttons wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = buttons_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
110
% handles
111
112
12.2.5
113
114
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help pointoncurve
% Last Modified by GUIDE v2.5 12-Aug-2010 14:23:03
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pointoncurve_OpeningFcn, ...
'gui_OutputFcn', @pointoncurve_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before pointoncurve is made visible.
function pointoncurve_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to pointoncurve (see VARARGIN)
% Choose default command line output for pointoncurve
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes pointoncurve wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = pointoncurve_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
115
% handles
116
% handles
117
118
Vom memora variabila handle asociat obiectului text creat n structura handles n
variabila handles.texhan.
handles.texhan = ht;
Memorm structura handles cu funcia
guidata(hObject, handles);
Marcarea punctelor pe grafic se face n funciile callback associate celor dou slidere.
Vom prezenta doar funcia slider1_Callback asociat primului slider.
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
%
get(hObject,'Min') and get(hObject,'Max') to determine range of slider
posx = get(hObject, 'Value');
set(handles.edit1, 'String', posx);
posy = get(handles.edit2, 'String');
% delete previous point
ht = handles.texhan;
delete(ht);
ht = text('String', 'x', 'units', 'norm', 'pos', [posx, str2num(posy)]);
handles.texhan = ht;
guidata(hObject, handles);
Se citete poziia sliderului cu instruciunea
posx = get(hObject, 'Value');
i se nscrie valoarea n variabila handle a sliderului cu instruciunea
set(handles.edit1, 'String', posx);
Se citete valoarea poziiei celuilalt slider cu instruciunea
posy = get(handles.edit2, 'String');
Menionm c, valoarea este memorat ca ir de caractere.
Stergem punctul anterior. Citim n variabila ht variabila handle a obiectului text creat
anterior, memorat n handles.texhan i tergem obiectul cu instruciunea delete.
ht = handles.texhan;
delete(ht);
Afim pe grafic un character x n punctul cu coordonatele celor dou slidere.
ht = text('String', 'x', 'units', 'norm', 'pos', [posx, str2num(posy)]);
Memorm n structura handles n handles.texhan variabila handle ht a obiectului text
creat i memorm structura handles
handles.texhan = ht;
guidata(hObject, handles);
Interfaa cu punctul selectat pe grafic este cea din Figura 70.
119
12.2.6
Casetele de dialog se pot utiliza pentru a introduce cantiti mici de date sau pentru a
afia mesaje. Vom exemplifica utilizarea unei casete de dialog la rezolvarea
urmtoarei probleme: calculul sumei, diferenei, produsului sau ctului a dou numere
introduse ntr-o caset de dialog mpreun cu operatorul dorit, +, -, * sau /.
Interfaa proiectat este cea din Figura 71. Obiectele grafice tip text au numele edit1,
edit2, edit3. Obiectul tip text static ce conine textul oper are numele text1. La un clic
pe butonul Calcul se va afia o caset de dialog n care vom introduce cele dou
numere i operatorul dorit. Numerele vor fi afiate apoi n cele dou casete text din
stnga, iar rezultatul n caseta din dreapta. Operatorul va fi afiat n obiectul tip text
static ce conine iniial irul oper.
Caseta de dialog va conine un numr de casete text n care se vor introduce datele
dorite. Caseta de dialog se creaz cu funcia inputdlg cu formele:
answer=inputdlg(prompt,dlg_title)
answer=inputdlg(prompt,dlg_title,num_lines)
answer=inputdlg(prompt,dlg_title,num_lines,defAns)
answer = inputdlg(prompt,dlg_title,num_lines,defAns,options)
unde:
prompt structur cu mesajele afiate deasupra casetelor text,
dlg_title ir de caractere cu numele casetei de dialog,
num_lines numrul de linii (casete de text) n care se vor introduce date,
defAns valorile implicite ale datelor din casetele text,
120
Aplicaia GUIDE genereaz un fiier cu funcii asociate obiectelor grafice dup cum
s-a artat mai nainte. Funcia asociat butonului, completat cu afiarea casetei de
dialog i calculele necesare este cea de mai jos.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt = {'Primul numar', 'Operator', 'Al doilea numar'};
titlu = 'Operatii cu numere';
answer = inputdlg(prompt, titlu);
set(handles.edit1, 'string', answer{1});
set(handles.edit2, 'string', answer{3});
a = str2num(answer{1});
b = str2num(answer{3});
oper = answer{2};
if oper == '+'
c = a + b;
elseif oper == '-'
c = a - b;
elseif oper == '*'
121
c = b * a;
elseif oper == '/'
c=a/b
else
c = NaN;
end
d = num2str(c);
set(handles.edit3, 'string', d);
set(handles.text1, 'string', oper);
guidata(hObject, handles);
Pentru nceput definim parametrii casetei de dialog. Structura prompt va conine
mesajele afiate deasupra casetelor text, 'Primul numar', 'Operator' i 'Al doilea numar'
prompt = {'Primul numar', 'Operator', 'Al doilea numar'};
Definim irul titlu cu numele casetei
titlu = 'Operatii cu numere';
Caseta de dialog se afiaz cu instruciunea
answer = inputdlg(prompt, titlu);
La un clic pe buton se afiaz caseta din Figura 72.
122
guidata(hObject, handles);
Interfaa cu rezultatele afiate este cea din Figura 73.
123
13 Calcul simbolic
13.1 Definirea variabilelor i funciilor simbolice
Calculul simbolic opereaz cu obiecte simbolice: variabile, matrice i expresii
simbolice. Variabilele simbolice se definesc n dou feluri:
cu instruciunea syms, care definete variabile simbolice,
orice variabil ce primete ca valoare o expresie simbolic devine o variabil
simbolic; atribuirea de valori unei variabile se face cu operatorul =.
Instruciunea syms are forma
syms var var var .
unde var sunt nume de variabile simbolice.
Exemplu. Definim variabilele simbolice a, b i c cu instruciunea syms i atribuim
variabilei a ca valoare expresia simbolic b + c.
syms a b c
a=b+c
a=
b+c
Fie instruciunea
m = b +c
m este acum o variabil simbolic, deoarece a primit ca valoare o expresie simbolic.
Expresiile simbolice se definesc la fel ca expresiile aritmetice din Matlab, n care
variabilele numerice sunt nlocuite cu variabile simbolice. Se includ aici i vectorii i
matricele cu elemente expresii simbolice, asupra crora se pot efectua calcule
simbolice analoge calculelor numerice din Matlab.
Expresiile simbolice au ca termeni variabile simbolice i funcii simbolice i ca
operatori aritmetici:
+, -, *, /, \, ^
Operatori, +, -, *, /, sunt cei patru operatori aritmetici cunoscui. Operaia a \ b se
definete ca
1
*b
a
124
Exist nc un mod de a crea expresii simbolice, funcia sym. Aceast funcie are
forma
sym(' expresie simbolica')
i are ca rezultat o expresie simbolic ce poate fi atribuit unei variabile simbolice.
Reamintim c o expresie simbolic are ca termeni variabile simbolice, definite
anterior.
Exemple. S definim funcia simbolic liniar f(x) = a * x + b. Primul mod de a defini
funcia este de a defini variabilele simbolice a, x, b i f cu instruciunea syms i apoi
atribuim lui f ca valoare expresia simbolic:
syms a x b f;
f = a * x + b;
Al doilea mod definete expresia simbolic cu funcia sym:
syms a x b f;
f = sym (a * x + b);
In unele cazuri trebuie s crem expresii simbolice n care intervin constante. Acest
lucru se face cu funcia sym. De exemplu, pentru a crea o funcie simbolic constant
ce are valoarea 3 vom scrie
f = sym(3)
sau
f = sym(3)
Reamintim c instruciunea
f=3
creaz o variabil numeric ce are valoarea 3.
Exemplu. Vom defini variabilele simbolice a, b i x i polinoamele simbolice f(x) =
a*x2 + 2 i g(x) = x + b i vom calcula produsul lor, f(x) * g(x). Programul este
urmtorul
syms a b x f g;
f = a *x^2+2
g=x+b
f*g
f=
a*x^2+2
g=
x+b
ans =
(a*x^2+2)*(x+b)
125
13.2 Substituii
Este posibil s atribuim valori numerice variabilelor simbolice i, n acest caz,
expresiile simbolice sunt evaluate la valoarea numeric corespunztoare. Aceste
substituii ale variabilelor simbolice cu valori numerice se fac cu funcia subs cu
formele
subs(expresie simbolic, variabil simbolic, valoare numeric)
n cazul cnd substituim o singur variabil, i
subs(expresie simbolica, {variabile simbolice}, {valori numerice})
n cazul cnd substituim mai multe variabile.
Exemplu. Fie funcia simbolic f(x) = x 2 - 3*x + 2. Vom substitui variabila simbolic
x cu valoarea 2.
syms f x;
f = x^2 3 * x + 2;
subs(f, x, 2)
ans =
0
Vom substitui acum variabila simbolic x cu valoarea -2
subs(f, x, -2)
ans =
12
Exemplu. Fie funcia de dou variabile f(x, y) = x 2 + x*y2 . Vom substitui mai nti
variabila simbolic x cu 2.
syms x y f;
f = x^2 + x * y;
subs(f, x, 2)
ans =
4+2*y
Vom substitui acum pe y cu 3.
subs(f, y, 3)
ans =
x^2+3*x
126
127
Funcia sym()
sym(x, f)
sym(x, r)
sym(x, e)
sym(x, d)
128
sym(0.2, f)
ans =
'1.999999999999a'*2^(-3)
sym(0.2, r)
ans =
1/5
sym(0.2, e)
ans =
1/5+eps/20
sym(0.2, d)
ans =
.20000000000000001110223024625157
digits(10)
sym(0.2, d)
ans =
.2000000000
129
ans =
x-i*y
real(z)
ans =
x
abs(z)
ans =
(x^2+y^2)^(1/2)
Dac dorim s tergem proprietatea real a unei variabile declarat anterior cu
instruciunea syms sau funcia sym, utilizm instruciunea syms cu opiunea unreal.
Exemplu.
syms x real;
syms x unreal;
Exemplu
a/b
a\b
a^b
c=a.*b
c=a/b
c = a.\b
c=a^b
Semnificaie
a * inv(b)
inv(a) * b
ab
cij a ij * bij
cij a ij / bij
cij bij * a ij
cij a ij ^ bij
b
d
M=
130
[ a, b]
[ c, d]
det(M)
ans =
a*d-b*c
inv(M)
ans =
[ d/(a*d-b*c), -b/(a*d-b*c)]
[ -c/(a*d-b*c), a/(a*d-b*c)]
R = M * inv(M)
R=
[ a*d/(a*d-b*c)-b*c/(a*d-b*c),
0]
[
0, a*d/(a*d-b*c)-b*c/(a*d-b*c)]
R = inv(M) * M
R=
[ a*d/(a*d-b*c)-b*c/(a*d-b*c),
0]
[
0, a*d/(a*d-b*c)-b*c/(a*d-b*c)]
Pentru a afia expresia R n form matematic utilizm funcia pretty.
pretty(R)
[ ad
bc
]
[--------- - --------0
]
[a d - b c a d - b c
]
[
]
[
ad
bc
]
[
0
--------- - ---------]
[
a d - b c a d - b c]
Putem simplifica expresiile de mai sus cu funcia simplify i obinem matricea unitate.
simplify(M*inv(M))
ans =
[ 1, 0]
[ 0, 1]
131
0
c
i
c
b
d
i calculm suma i
A=
[ a, 0]
[ b, c]
B = [-a b; -c d]
B=
[ -a, b]
[ -c, d]
R = A+B
R=
[ 0, b]
[ b-c, c+d]
R = A*B
R=
[ -a^2,
a*b]
[ -a*b-c^2, b^2+c*d]
Pentru a scrie expresia simbolic R n form matematic, utilizm funcia pretty
pretty(R)
[
2
]
[ -a
ab
]
[
]
[
2 2
]
[-a b - c b + c d]
a i *b
c
c
.
a i * b
syms a b c real;
A = [a+i*b c; -c a-i*b]
A=
[ a+i*b,
c]
132
-c, a-i*b]
det(A)
ans =
a^2+b^2+c^2
conj(A)
ans =
[ a-i*b, c]
[ -c, a+i*b]
Exemplu. Fie H matricea Hilbert de dimensiune patru. S convertim aceast matrice
ntr-o matrice simbolic. Calculele cu numere simbolice raionale se fac cu precizie
infinit.
H = hilb(4)
H = sym(H)
det(H)
inv(H)
x3
x 1
syms f x;
f = x^3 / (x - 1);
133
ezplot(f)
grid
Reprezentarea grafic a funciei este cea din Figura 74.
134
135
136
14.1 Derivarea
Calculul derivatei simbolice se face cu funcia diff, care poate calcula derivatele
funciilor de una sau mai multe variabile, derivate de ordin 1 sau de ordin superior,
etc. Funcia are urmtoarele forme:
pentru a calcula derivata de ordin nti a unei funcii n raport cu variabila x
diff(f, x)
pentru a calcula derivata de ordin n a unei funcii n raport cu variabila x
diff(f, x, n)
pentru a calcula derivata unei funcii n raport cu variabila implicit
diff(f)
variabila implicit se alege dup regula enunat la funcia subs n paragraful
de mai sus referitor la substituii.
Exemple. Derivate de ordin nti.
syms x;
f = cos(2 * x);
diff(f)
ans =
-2*sin(2*x)
syms x y f;
f = x * cos(y) y * cos(x);
diff(f, x), diff(f, y)
ans =
cos(y)+y*sin(x)
ans =
-x*sin(y)-cos(x)
syms x f;
137
f = exp(i * x)
diff(f, x)
ans =
i*exp(i*x)
Derivata unei matrice simbolice este matricea obinut derivnd fiecare element.
Exemplu.
syms x y;
A = [ x^2 x*y; 2*x y^3]
A=
[ x^2, x*y]
[ 2*x, y^3]
diff(A)
ans =
[ 2*x, y]
[ 2, 0]
Calculul iacobianului,
D ( f , g , h, )
, se face cu funcia jacobian cu forma
D ( x, y , z , )
jacobian([f; g; h; ], [x, y, x, ])
Primul argument al funciei jacobian este un vector coloan cu funciile f, g, h, , al
doilea argument este un vector linie cu variabilele x, y, z,
Exemplu. Fie transformarea dat de funciile:
x = r * cos(t)
y = r* sin(t)
Determinantul funcional (iacobianul) transformrii se calculeaz astfel:
syms x y r t;
x = r * cos(t);
y = r * sin(t);
D = jacobian([x; y], [r, t])
D=
[ cos(t), -r*sin(t)]
[ sin(t), r*cos(t)]
Determinantul transformrii se calculeaz i se simplific astfel
det(D)
ans =
cos(t)^2*r+r*sin(t)^2
138
simplify(det(D))
ans =
r
lim f ( x)
x a
x2 x 1
lim
2
x 3x 2 x 2
syms x f g;
f = x^2 x +1;
g = 3*x^2 + 2*x +2;
limit(f / g, x, inf)
ans =
1/3
Exemplu. S calculm limita
1
1
lim
n
n
Dup cum se tie, aceast limit este e.
syms g n;
limit((1 + 1 / n)^n, n, inf)
ans =
exp(1)
Exemplu. S calculm limita
lim 1 cos x
x 0
syms f x;
f = 1 + cos(x);
limit(f, x, 0)
139
ans =
2
Exemplu. S se calculeze limita
lim
h 0
sin x h sin x
h
syms g x h;
g = (sin(x+h)-sin(x))/h;
limit(g, h, 0)
ans =
cos(x)
Exerciii. S se calculeze limitele
n
x
1) lim 1
n
n
n
x
2) lim 1
n
n
14.2.2
lim f ( x)
x a
lim f ( x)
x a
x
x
n punctul x = 0.
syms x f;
f = abs(x) / x;
limit(f, x, 0, right)
ans =
1
limit(f, x, 0, left)
ans =
-1
140
14.3 Integrarea
14.3.1
f x dx
ax
1
x
1
x a2
2
1
x
1
cos 2 x
1
sin x cos 2 x
1
2
x2 a2
1
sin 2 x
14.3.2
f ( x)dx
a
se face cu funcia
int(f, x, a, b)
sau cu funcia
int(f, a, b)
In ultimul caz, variabila de integrare se alege dup regula specificat anterior.
Exemplu. S calculm integrala
3
(x
x 2)dx
syms x f;
f = x^3 + x + 2;
int(f, 1, 3)
141
ans =
28
Exemplu. S calculm integrala
x2
2
dx
142
14.3.3
Vrem s calculm
f x dx
Integrala este convergent n cazul n care parametrul a este pozitiv. Vom declara n
instruciunea syms c variabila a este pozitiv.
syms a positive;
syms x;
f = exp(-a * x^2)
R = int(f, x, -inf, inf)
R=
1/a^(1/2)*pi^(1/2)
pretty( R )
1/2
pi
----1/2
a~
In cazul n care parametrul a este complex vom scrie
syms a x;
f = exp(-a * x^2)
R = int(f, x, -inf, inf)
x(k )
k m
143
k
k 1
syms k n;
s = symsum(k, 1, n)
s=
1/2*(n+1)^2-1/2*n-1/2
pretty(s)
2
1/2 (n + 1) - 1/2 n 1 / 2
Exemplu. Fie de calculate sumele
n
1
,
k 1 k
k 1
1
,
k
k
k 1
syms k n;
r = symsum(1 / k, 1, n)
r=
Psi(n+1)+eulergamma
r = symsum(1 / k, 1, inf)
r=
inf
r = symsum(1/k^2, 1, inf)
r=
1/6*pi^2
k!
k 0
Dac argumentul a lipsete, funcia
taylor(f, n, x)
d dezvoltarea n serie MacLaurin a funciei a funciei f(x) pn la ordinul n 1
(dezvoltarea n serie n jurul punctului a = 0). Dac argumentul x lipsete, variabila
independent este determinat de funcia fyndsym. Dac argumentul n lipsete n = 6.
Exemplu. S calculm dezvoltarea n serie Taylor a funciei sin(x) n jurul originii.
syms x f;
f = sin(x);
taylor(f, 5)
144
ans =
x-1/6*x^3
Exemplu. S calculm dezvoltarea n serie Taylor a funciei ex n jurul originii.
syms f x;
f = exp(x);
T = taylor(f, 5, 0)
T=
1+x+1/2*x^2+1/6*x^3+1/24*x^4
pretty(T)
2
3
4
1 + x + 1/2 x + 1/6 x + 1/24 x
Exemplu. S calculm dezvoltarea n serie Taylor a funciei ex n jurul punctului x =1.
syms x f;
f = exp(x);
T = taylor(f, 3, 1)
T=
exp(1)+exp(1)*(x-1)+1/2*exp(1)*(x-1)^2
pretty(T)
2
exp(1) + exp(1) (x - 1) + 1/2 exp(1) (x - 1)
expand(f)
a*x+a*y
a*xa*y
a^x*a^y
a^x/a^y
exp(a) * exp(b)
exp(a)/exp(b)
log(x) + log(y)
log(x) log(y)
y*log(a)
sin(a)*cos(b)+cos(a)*sin(b)
2*a*(1-a^2)^(1/2)
145
simplify(f)
1
a^(x+y)
a^(x-y)
exp(a + b)
exp(a b)
x
x
146
147
Exemplu. Vom factoriza numerele 22, 333, 4444, , 999999999. Pentru aceasta vom
construi un vector simbolic cu numerele de mai sus i vom aplica funcia factor asupra
lui.
syms N;
for k = 2:9
S = 0;
for j = 1:k
S = S + 10^(j 1);
end
S = S * k;
N(k - 1) = S;
end
[N factor(N)]
ans =
[
[
[
[
[
[
[
[
22,
333,
4444,
55555,
666666,
7777777,
88888888,
999999999,
(2)*(11) ]
(3)^2*(37) ]
(2)^2*(11)*(101) ]
(5)*(41)*(271) ]
(2)*(3)^2*(7)*(11)*(13)*(37) ]
(7)*(239)*(4649) ]
(2)^3*(11)*(73)*(101)*(137) ]
(3)^4*(37)*(333667) ]
x+1,
x+1,
x-1,
x-1]
x^2+1,
x^2+1,
x^2-1,
(x-1)*(x+1)]
x^3+1,
(x+1)*(x^2-x+1),
x^3-1,
(x-1)*(x^2+x+1)]
x^4+1,
x^4+1,
x^4-1,
(x-1)*(x+1)*(x^2+1)]
x^5+1, (x+1)*(x^4-x^3+x^2-x+1), x^5-1,
(x-1)*(x^4+x^3+x^2+x+1)]
x^6+1,
(x^2+1)*(x^4-x^2+1), x^6-1, (x-1)*(x+1)*(x^2+x+1)*(x^2-x+1)]
148
poly2sym(c)
poly2sym(c, v)
In prima forma variabila implicit este x, n forma a doua este v.
Este posibil de asemenea conversia unui polinom symbolic cu coeficienii numere
raionale ntr-un polinom numeric. Aceast conversie se face cu funcia
sym2poly(s)
unde s este polinomul symbolic. Rezultatul funciei este un vector numeric cu
coeficienii polinomului n ordinea descresctoare a puterilor variabilei independente
a polinomului simbolic.
149
Funcia
det(A)
inv(A)
null(A)
colspace(A)
expm(A * t)
Funcia
E = eig(A)
[V, E] = eig(A)
poly(A)
poly(A, v)
J = jordan(A)
[V, J] = jordan(A)
S = svd(A)
[U, S, V] = svd(A)
a
2
1
2
1
1
[
[
[
0
2
0
1
0
1
0
1
0
0
1
1
[V, J] = jordan(M)
V=
0
1
0
1
0
0
0
0
1
0
1
0
0
1
1
J=
2
0
0
151
152
Dac dorim ca rezultatul s fie o structur, n stnga semnului egal vom scrie o
variabil.
Exemplu. S rezolvm sistemul de ecuaii:
tg xy x 2
x2
2y2 1
2
syms x y;
f=tan(x*y)-x^2
f=
tan(x*y)-x^2
g=0.5*x^2+2*y^2-1
g=
1/2*x^2+2*y^2-1
s = solve(f,g)
s=
x: [2x1 sym]
y: [2x1 sym]
Rezultatul este o structur cu dou cmpuri, x i y.
s.x
ans =
[ 0]
[ 0]
s.y
ans =
[ 1/2*2^(1/2)]
[ -1/2*2^(1/2)]
Exemplu. Fie de rezolvat sistemul de trei ecuaii:
y
1
z
x log
y 0.4 z 2 2 x 2
z 2
xy
20
syms x y z
f = x - log(y/z)-1
f=
153
x-log(y/z)-1
g=y-0.4-z^2+2*x^2
g=
y-2/5-z^2+2*x^2
h=z-2-x*y/20
h=
z-2-1/20*x*y
s=solve(f,g,h)
s=
x: [1x1 sym]
y: [1x1 sym]
z: [1x1 sym]
In acest caz soluia s este o structur cu componentele x, y i z. Rezultatele sunt:
s.x
ans =
-1.4453427795204872025615216821349
s.y
ans =
.17231322974245725394289003908468
s.z
ans =
1.9875474158787942273692241116145
154
155
y=
exp(t)*(cos(t)*C1+sin(t)*C2)
s = dsolve(Dx = x y, Dy = x + y)
s=
x: [1x1 sym]
y: [1x1 sym]
s.x
ans =
-exp(t)*(sin(t)*C1-cos(t)*C2)
s.y
ans =
exp(t)*(cos(t)*C1+sin(t)*C2)
[x, y] = dsolve('Dx = x - y', 'Dy = x + y', 'x(0) = 1', 'y(0) = 2')
x=
-exp(t)*(2*sin(t)-cos(t))
y=
exp(t)*(2*cos(t)+sin(t))
Exemplu. S se rezolve ecuaia diferenial
y''+3y'+2y = e3t + 2t + 1
[y] = dsolve('D2y + 3* Dy + 2*y = exp(3*t) +2*t + 1')
y=
1/20*exp(3*t)*(1+20*t*exp(-3*t)-20*exp(-3*t))+C1*exp(-t)+C2*exp(-2*t)
[y] = dsolve('D2y + 3* Dy + 2*y = exp(3*t) +2*t + 1', 'y(0) = 1', 'Dy(0) = 0')
y=
1/20*exp(3*t)*(1+20*t*exp(-3*t)-20*exp(-3*t))+11/4*exp(-t)-4/5*exp(-2*t)
156
19 Transformri integrale
In acest capitol vom prezenta funciile ce calculeaz transformatele Fourier, Laplace i
Z, directe i inverse.
f xe
iwx
dx
unde f(x) este o funcie simbolic scalar de argument x, iar F(w) este transformata
Fourier de argument w.
Transformata Fourier direct simbolic a funciei f se calculeaz cu funcia:
F = fourier(f)
F = fourier(f, v)
F = fourier(f, u, v)
In prima form, variabila funciei f este x, iar a funciei F este w (variabilele
implicite). In forma a doua, variabila funciei f este x, (variabila implicit), iar a
funciei F este v. In forma a treia, variabila funciei f este u, iar a funciei F este v.
Transformata Fourier invers se definete cu formula
f x
1
2
F w e
iwx
dw
unde F(w) este o funcie simbolic scalar de argument w, iar f(x) este transformata
Fourier invers de argument x.
Transformata Fourier invers simbolic a funciei F se calculeaz cu funcia:
f = ifourier(F)
f = ifourier(F, u)
f = ifourier(F, v, u)
In prima form, variabila funciei F este w, iar a funciei f este x (variabilele
implicite). In forma a doua, variabila funciei F este w, (variabila implicit), iar a
funciei f este u. In forma a treia, variabila funciei F este v, iar a funciei f este u.
Exemplu. S calculm transformata Fourier a funciei
f x ex
syms x;
f = exp(-x^2);
F = fourier(f)
F=
pi^(1/2)*exp(-1/4*w^2)
Pentru verificare vom calcula transformata Fourier invers a funciei F
ifourier(F)
ans =
exp(-x^2)
Exemplu. S se calculeze transformata Fourier a funciei
157
f t e at 1 t
0
1
1 t
f t e
ist
dt
unde f(t) este o funcie simbolic scalar de argument t, iar F(s) este transformata
Laplace de argument s.
Transformata Laplace direct simbolic a funciei f se calculeaz cu funcia:
F = laplace(f)
F = laplace (f, v)
F = laplace (f, u, v)
In prima form, variabila funciei f este x, iar a funciei F este w (variabilele
implicite). In forma a doua, variabila funciei f este t, (variabila implicit), iar a
funciei F este v. In forma a treia, variabila funciei f este u, iar a funciei F este v.
Transformata Laplace invers se definete cu formula
f x
c i
1
F s e ist ds
2i c i
unde F(s) este o funcie simbolic scalar de argument s, iar f(x) este transformata
Laplace invers de argument t.
Transformata Laplace invers simbolic a funciei F se calculeaz cu funcia:
f = ilaplace(F)
f = ilaplace (F, u)
f = ilaplace (F, v, u)
158
In prima form, variabila funciei F este s, iar a funciei f este t (variabilele implicite).
In forma a doua, variabila funciei F este s, (variabila implicit), iar a funciei f este u.
In forma a treia, variabila funciei F este v, iar a funciei f este u.
Exemplu. S calculm transformata Laplace a funciei
f t e at
syms f F t s
syms a positive
f = exp(-a *t)
f=
exp(-a*t)
F = laplace(f)
F=
1/(s+a)
Exemplu. S calculm transformata Laplace invers a funciei
F s
1
sa
syms f F s t
syms a positive
F = 1/(s+a)
f = ilaplace(F)
f=
exp(-t*a)
19.3 Transformata Z
Transformata Z direct se definete cu formula
F z f n z n
n 0
unde f este o funcie simbolic scalar de argument n, iar F(z) este transformata Z de
argument z.
Transformata Z direct se calculeaz cu funcia:
F = ztrans(f)
F = ztrans(f, w)
F = ztrans(f, k, w)
In prima form variabila funciei f este n, iar a funciei F este z, In a doua form
variabila funcie f este n (variabila implicit), iar variabila funciei F este w. In a treia
forma variabila funciei f este k, iar a funciei F este w.
Transformata Z invers se calculeaz cu formula
f n
1
2i
F z z
n 1
dz
z R
159
unde F(z) este o funcie simbolic scalar de argument z, iar f(n) este transformata Z
invers de argument n.
Transformata Z invers se calculeaz cu funcia:
f = iztrans(F)
f = iztrans(F, k)
f = iztrans(F, w, k)
In prima form, variabila funciei F este z, iar a funciei f este n (variabilele implicite).
In forma a doua, variabila funciei F este z, (variabila implicit), iar a funciei f este k.
In forma a treia, variabila funciei F este w, iar a funciei f este k.
In exemplele urmtoare vom nota cu T perioada de eantionare. Momentele de
eantionare vor fi nT.
Exemplu. S calculm transformata Z a funciei
f n exp( anT )
z
za
syms a z;
F = z / (z a);
f = iztrans(F)
f=
a^n
Funcia eantionat este f(n) = an. Cu notaia a e T obinem f n e nT . In
consecin, funcia de timp ce este eantionat este f t e t , unde
ln
.
T
z
za
160
syms a z;
F = z / (z + a);
f = iztrans(F)
f=
(-a)^n
Exemplu. S se calculeze transformata Z invers a funciei
F z
z
z 1 2
syms z F
F = z/(z-1)^2
F=
z/(z-1)^2
f = iztrans(F)
n
Funcia de timp ce este eantionat este f(t) = t/T. Vom calcula acum transformata Z a
funciei f.
ztrans(f)
ans =
z/(z-1)^2
161