Documente Academic
Documente Profesional
Documente Cultură
Introducere în MATLAB
Vol. I
Indrumar de laborator
IAŞI 2008
Autori : Nicolae Mitu şi Viorel Paleu 2
CUPRINS
CUPRINS................................................................................................. 2
LUCRAREA 1 ......................................................................................... 9
1.1. Obiectivele lucrării................................................................... 9
1.2. Ferestrele MATLAB. ............................................................... 9
1.3. Expresii şi calcule .................................................................. 11
1.4. Aplicaţii.................................................................................. 14
1.5. Indicaţii şi soluţii......................................................................... 16
LUCRAREA 2 ....................................................................................... 20
2.1. Obiectivele lucrării...................................................................... 20
2.2. Matrici şi vectori ........................................................................ 20
2.2.1. Matrici şi vectori. Definiţii................................................... 20
2.2.2. Definirea matricilor în MATLAB........................................ 21
2.2.3. Accesarea elementelor unei matrici. Operatorul.................. 22
2.2.4. Operaţii cu matrici şi vectori................................................ 23
2.2.5. Funcţii de matrici. ................................................................ 24
2.3. APLICAŢII ................................................................................. 24
2.4. Indicaţii şi soluţii......................................................................... 28
LUCRAREA 3 ....................................................................................... 32
3.1. Obiectivele lucrării..................................................................... 32
3.2 . Elemente de algebră liniară în MATLAB .................................. 32
3.2.1.Ecuaţii matriciale. ................................................................. 32
3.2.2. Sisteme liniare...................................................................... 33
3.2.3. Vectori şi valori proprii........................................................ 34
3.3 APLICAŢII .................................................................................. 37
3.4. Indicaţii şi soluţii......................................................................... 40
LUCRAREA 4 ....................................................................................... 44
4.1. Obiectivele lucrării...................................................................... 44
4.2. Elemente de grafică în MATLAB............................................... 44
4.2.1. Grafice 2D............................................................................ 44
4.2.2. Grafice 3D............................................................................ 49
4.3. Aplicaţii....................................................................................... 52
4.4. Indicaţii şi soluţii......................................................................... 53
LUCRAREA 5 ....................................................................................... 63
Introducere în MATLAB- Indrummar de laborator 3
Introducere
LUCRAREA 1
Zona
memorie Zona
comenzi
Istorie
comenzi
Fig.1.1. Ferestrele MATLAB
8
>>
scăderea
>> 5 – 3
ans =
2
>>
înmulţirea
>> 5 * 3
ans =
15
>>
împărţirea
>> 5 / 3
ans =
1.6667
>>
Autori : Nicolae Mitu şi Viorel Paleu 12
ridicarea la putere
>> 5 ^ 3
ans =
125
>>
Se impun două observaţii: prima este remarcarea faptului că
operaţiile de înmulţire şi împărţire utilizează aceleaşi simboluri, *
respectiv / , care sunt utilizate în celelalte limbaje de programare; a doua
este apariţia variabilei ans, variabilă în care programul introduce automat
rezultatul unei comenzi ce nu defineşte o variabilă proprie în acest scop.
Sigur putem face calcule aritmetice complexe acum utilizând
reguli implicite acceptate în limbajele de programare. Astfel pentru
calculul simplu:
3
5+
7
3
Vom scrie:
>> (5+3/7)/3
ans =
1.8095
>>
Utilizând parantezele corespunzător se pot calcula expresii mai
complicate. În calcule se pot utiliza şi funcţii elementare predefinite în
program. Mai jos prezentăm cele mai utilizate funcţii:
funcţii trigonometrice:
sin – sinus; asin – arcsinus;
cos – cosinus; acos – arccosinus;
tan – tangentă; atan – arctangent;
Introducere în MATLAB- Indrummar de laborator 13
funcţii putere:
exp – funcţia exponenţială;
log – logaritm natural;
log2 – logaritm în baza 2;
log10 – logaritm în baza 10;
sqrt – funcţia radical;
alte funcţii:
abs – valoarea absolută, modul;
min – minimum;
max – maximum;
π π
sin + cos
4 3
5 + ln(7) − 1.50.17
Se va scrie comanda:
>> (sin(pi/4)+cos(pi/3))/(sqrt(5+log(7))-1.5^0.17)
ans =
0.7717
>>
Autori : Nicolae Mitu şi Viorel Paleu 14
1.4. Aplicaţii
Să se calculeze:
1+ 5
a) =
2
π⎤ 3
⎡
b) ⎢
⎣
( )
2 ⎥
⎦
=
π
c) π 2 − 10icos 2 =
3
1
c) =
2
1+
3
1+
2
1+
5
1+
1+ 6
1.
a) 2^pi-pi^2
ans =
2.
a) (1+sqrt(5))/2
ans =
1.6180
b) 6.5919
c) 7.3696
Introducere în MATLAB- Indrummar de laborator 17
3.
a) ((3^pi-pi^3)/((1+sqrt(3))/3))^(pi/sqrt(3))
ans =
0.3849
b) 2.4231
c) 0.5576
4.
a) realmax;
b) NaN;
c) NaN;
d) realmax;
e) NaN;
f) NaN;
ans=
3.0503e-009
c)
h=0.0000000001
ans =
9.2454e-007
ans =
3.6942e-007
d)
h=0.000000000001
ans =
5.7368e-006
ans =
6.1248e-005
e)
ans =
0.0034
ans =
0.0021
π
Este surprinzător dar fracţiile nu tind la derivata în !!? Motivul
4
este, în principal dat erorile de calcul care se acumulează (precizia este
mică la maşinile pe 32 biţi). De remarcat este faptul că şi funcţiile
elementare sin(x) şi cos(x) sunt şi ele calculate şi au erori de aproximare.
0
În plus aici este vorba de o nedeterminare de forma şi deci se
0
împart două numere foarte mici. Ca şi sfat în astfel de calcule utilizaţi
valori pentru h la jumătatea preciziei maxime, deci 10-7 sau 10-8. Se
observă că precizia atinsă atunci este în jur de 10-8, 10--9 o precizie
Introducere în MATLAB- Indrummar de laborator 19
6.
a) (x^3+1)*log(1+t+t^2)= 1.6704
b) exp(x+t)*(1+x+cos(t))= 11.2300
c) ((cos(x))^2+atan(t))/(x+t+exp(x^t))= 0.5121
Autori : Nicolae Mitu şi Viorel Paleu 20
LUCRAREA 2
⎡1 2 3⎤
A=⎢ ⎥
⎣3 2 1 ⎦
2.3. APLICAŢII
⎡1 0 0 ⎤ ⎡2 0 1⎤
b) A = ⎢⎢0 1 0 ⎥⎥ ; B = ⎢⎢ 1 1 1 ⎥⎥ ;
⎢⎣0 0 1 ⎥⎦ ⎢⎣ −1 2 −2 ⎥⎦
⎡0 0 0 5 0 0⎤
⎢0 0 0 0 5 0 ⎥⎥
⎢
⎢0 0 0 0 0 5⎥
b) C = ⎢ ⎥;
⎢2 0 1 3 3 3⎥
⎢1 1 1 3 3 3⎥
⎢ ⎥
⎣⎢ −1 2 −2 3 3 3⎦⎥
⎡0 0 1 0 0 0⎤
⎢0 0 0 1 0 0 ⎥⎥
⎢
⎢0 0 0 0 1 0⎥
a) D = ⎢ ⎥;
⎢ −2 0 0 0 0 1⎥
⎢ 0 −2 0 0 0 0⎥
⎢ ⎥
⎢⎣ 0 0 −2 0 0 0 ⎥⎦
⎡2 1 0 0 0 0⎤
⎢1 2 1 0 0 0 ⎥⎥
⎢
⎢0 1 2 1 0 0⎥
b) E = ⎢ ⎥;
⎢0 0 1 2 1 0⎥
⎢0 0 0 1 2 1⎥
⎢ ⎥
⎣⎢ 0 0 0 0 1 2 ⎦⎥
e) D5 = ; f) Di E − E i D = ; g) D. ∗ E − E. ∗ D = ; h)
sin ( D ) − cos ( E ) = ;
⎡1 0 0 0 0 0⎤
⎢0 1 0 0 0 0 ⎥⎥
⎢
⎢0 0 1 0 0 0⎥
a) G = ⎢ ⎥ ;
⎢0 0 0 2 0 1⎥
⎢0 0 0 1 1 1⎥
⎢ ⎥
⎢⎣ 0 0 0 −1 2 −2 ⎥⎦
⎡1 0 0 −1 0 0 ⎤
⎢0 1 0 0 −1 0 ⎥⎥
⎢
⎢0 0 1 0 0 −1⎥
b) H = ⎢ ⎥
⎢2 0 1 2 0 1⎥
⎢1 1 1 1 1 1⎥
⎢ ⎥
⎣⎢ −1 2 −2 −1 2 −2 ⎦⎥
1.
c) B=[2 0 1;1 1 1;-1 2 -2]
2.
a) va=2:2:100
b) vb=50:-2:-50
c) vt=1:100; vc=1./vt
d) vt1=0:99; vt2=1:100; vd=vt1./vt2
3.
a) r=[v w]; t=[z;u]
b) C=[zeros(3) 5*eye(3);B 3*ones(3)]
4.
a) D=-2*diag(ones(1,3),-3)+diag(ones(1,4),2)
b) E=diag(ones(1,5),-1)+2*diag(ones(1,6))+diag(ones(1,5),1)
5.
a) v*z= -1 r*t= 1
⎛ −4 ⎞
⎜ ⎟
b) ⎜ −1 ⎟
⎜1 ⎟
⎝ ⎠
Introducere în MATLAB- Indrummar de laborator 29
⎡ 4 0 0 0 0 -2⎤
⎢ 0 8 0 0 0 0 ⎥⎥
⎢
⎢ 0 0 8 0 0 0⎥
e) ⎢ ⎥
⎢ 0 0 0 8 0 0⎥
⎢ 0 0 0 0 8 0⎥
⎢ ⎥
⎣⎢ -8 0 0 0 0 4 ⎦⎥
⎡ 0 1 0 0 0 0⎤
⎢ 0 0 0 0 0 0 ⎥⎥
⎢
⎢ 2 0 0 0 0 0⎥
f) ⎢ ⎥
⎢ 0 0 0 0 0 0⎥
⎢ 0 0 0 0 0 -1 ⎥
⎢ ⎥
⎢⎣ 0 0 0 -2 0 0 ⎥⎦
Autori : Nicolae Mitu şi Viorel Paleu 30
⎡ 0 0 0 0 0 0⎤
⎢ 0 0 0 0 0 0 ⎥⎥
⎢
⎢ 0 0 0 0 0 0⎥
g) ⎢ ⎥
⎢ 0 0 0 0 0 0⎥
⎢ 0 0 0 0 0 0⎥
⎢ ⎥
⎢⎣ 0 0 0 0 0 0 ⎥⎦
6.
a) G=[A zeros(3);zeros(3) B]
b) H=[A –A;B B]
7.
a) r(1:2:end)
b) H(H>0)
c) sum(H(:))
d) H(1:3,2:2:end)
e) ri=r(end:-1:1)
8.
a) va=B(1,1:end)
b) Bb=B(end-1:end,1:end)
Introducere în MATLAB- Indrummar de laborator 31
c) xc=sum(B)
d) xd=sum(B,2)
Observaţie. A doua valoare din sum indică după ce dimensiune se face
suma (implicit are valoarea 1 deci implicit se face suma pe coloane). În
cazul nostru pentru că dorim suma pe linii s-a trecut valoarea 2.
e) Bd=B([1,end],[1,end])
Autori : Nicolae Mitu şi Viorel Paleu 32
LUCRAREA 3
3.2.1.Ecuaţii matriciale.
Fie matricea
⎡ 3 −2 0 ⎤
A = ⎢⎢ 2 −2 0 ⎥⎥
⎢⎣ 0 1 1 ⎥⎦
Atunci folosind funcţia eig obţinem:
> A=[3,-2,0;2,-2,0;0,1,1]
A=
3 -2 0
2 -2 0
0 1 1
>> [v,d]=eig(A)
v=
0 -0.4082 -0.8165
0 -0.8165 -0.4082
1.0000 0.4082 -0.4082
d=
1 0 0
0 -1 0
0 0 2
S-au obţinut pe diagonală trei numere reale distincte deci avem
trei perechi: [1, (0,0,1)], [-1, (-0.4082,-0.8165, 0.4082)] şi ultima
pereche este [2, (-0.8165,-0.4092,-0.4082)] . Observăm că şi perechea
formată din:
[2,(2,1,1)] este soluţie.
>> A*v-2*v
ans =
0
0
0
Dar vectorul (2,1,1) nu mai este unitar, dar vectorul u este
Autori : Nicolae Mitu şi Viorel Paleu 36
>> norm(v)
ans =
2.4495
>> u=[-0.8165;-0.4082;-0.4082];
>> norm(u)
ans =
1.0000
Mai prezentăm următorul exemplu:
>> B=[0,-6,-1;6,2,-16;-5,20,-10]
>> [v,d]=eig(B)
v=
d=
-3.0710 0 0
0 -2.4645 +17.6008i 0
0 0 -2.4645 -17.6008i
3.3 APLICAŢII
⎡1 1 1 0 0 0 0⎤
⎢0 1 1 1 0 0 0 ⎥⎥
⎢
⎢0 0 1 1 1 0 0⎥
⎢ ⎥
A = ⎢0 0 0 1 1 1 0⎥ ;
⎢0 0 0 0 1 1 1⎥
⎢ ⎥
⎢0 0 0 0 0 1 1⎥
⎢0 0 0 0 0 0 1 ⎥⎦
⎣
⎡3 4 3 1 0 0 0⎤
⎢1 3 4 3 1 0 0 ⎥⎥
⎢
⎢0 1 3 4 3 1 0⎥
⎢ ⎥
B = ⎢0 0 1 3 4 3 1⎥ ;
⎢0 0 0 1 3 4 3⎥
⎢ ⎥
⎢0 0 0 0 1 3 4⎥
⎢0 0 0 0 0 1 2 ⎥⎦
⎣
⎡1 2 2 1 0 0 0⎤
⎢1 2 3 2 1 0 0 ⎥⎥
⎢
⎢0 1 2 3 2 1 0⎥
⎢ ⎥
C = ⎢0 0 1 2 3 2 1⎥
⎢0 0 0 1 2 3 2⎥
⎢ ⎥
⎢0 0 0 0 1 2 3⎥
⎢0 0 0 0 0 1 2 ⎥⎦
⎣
Autori : Nicolae Mitu şi Viorel Paleu 38
Fie matricele:
⎡5 3 ⎤ ⎡6 2⎤ ⎡ 4 −2 ⎤
A=⎢ ⎥ ; B=⎢ ⎥ ; C=⎢ ⎥
⎣3 2 ⎦ ⎣2 4⎦ ⎣ −6 3 ⎦
a) AX+B=C,
b) AX+B=X,
c) XA+B=C,
d) XA+B=X.
⎧ x1 + x2 + x3 + x4 = 0
⎪
⎪ 2i x1 − x2 − x3 − 2i x4 = 1
a) ⎨
⎪− x1 + 3i x2 + 2i x3 + 3i x4 = −1
⎪ x1 − 2i x2 + x3 − 2i x4 = −6
⎩
⎧ x1 − x2 + 2i x3 + 3i x4 + 5i x5 = 2
⎪
⎪2i x1 − 2i x2 + x3 − 4i x5 = 0
⎪
b) ⎨−3i x1 + x2 − 2i x3 − 2i x4 = 1
⎪− x + 2i x − 2i x + 3i x + 3i x = 3
⎪ 1 2 3 4 5
⎪⎩ − 2i x2 + x3 + x4 + x5 = −2
Introducere în MATLAB- Indrummar de laborator 39
⎧ x1 − x2 + 2i x3 + 3i x4 + 5i x5 = 2
⎪
⎪2i x1 − 2i x2 + x3 − 4i x5 = 0
⎪
c) ⎨−3i x1 + x2 − 2i x3 − 2i x4 = 1
⎪− x + 2i x − 2i x + 3i x + 3i x = 3
⎪ 1 2 3 4 5
⎪⎩ − 2i x2 + x3 + x4 + x5 = 3
⎧2i x1 + x2 + … =2
⎪ x +2 x + x + =2
⎪ 1 i 2 3 …
⎪ x2 + 2i x3 + x4 + … =2
⎪
d) ⎨.......................................................................................
⎪ … + 2i x97 + x98 =2
⎪
⎪ … + x97 + 2i x98 + x99 = 2
⎪
⎪⎩ …+ + x98 + 2i x99 = 2
⎡ 3 7 0 −6 ⎤
⎡7 8 2⎤ ⎢ −2 0 0 0 ⎥
A = ⎢⎢ −5 −6 −2 ⎥⎥ ; B = ⎢ ⎥
⎢ 6 12 −1 −9 ⎥
⎢⎣ −1 −1 1 ⎥⎦ ⎢ ⎥
⎣ −2 2 0 −2 ⎦
Dacă L este matricea pătrată ce are pe diagonala principală
valorile proprii iar V este matricea a cărui coloane sunt vectorii proprii
corespunzători să se calculeze pentru fiecare matrice A respectiv B
matricele V*L*inv(V). Ce observaţi
Autori : Nicolae Mitu şi Viorel Paleu 40
1.
A=diag(ones(1,7))+diag(ones(1,6),1) +diag(ones(1,5),2)
B=diag(ones(1,6),-1) +3*diag(ones(1,7)) +4*diag(ones(1,6),1)
+3*diag(ones(1,5),2) +diag(ones(1,4),3) şi apoi B(7,7)=2
C=diag(ones(1,6),-1) +2*diag(ones(1,7)) +3*diag(ones(1,6),1)
+2*diag(ones(1,5),2) +diag(ones(1,4),1) şi apoi C(1,1)=1, C(1,2)=2
X=A\B şi Y=C/A soluţiile ecuaţiilor.
⎡ 2 1 0 0 0 0 0⎤
⎢ 1 2 1 0 0 0 -1⎥⎥
⎢
⎢ 0 1 2 1 0 0 1⎥
⎢ ⎥
X =⎢ 0 0 1 2 1 0 0⎥ ;
⎢ 0 0 0 1 2 1 -1⎥
⎢ ⎥
⎢ 0 0 0 0 1 2 2⎥
⎢ 0 0 0 0 0 1 2 ⎥⎦
⎣
⎡1 1 0 0 0 0 0⎤
⎢1 1 1 0 0 0 0 ⎥⎥
⎢
⎢0 1 1 1 0 0 0⎥
⎢ ⎥
Y =⎢0 0 1 1 1 0 0⎥
⎢0 0 0 1 1 1 0⎥
⎢ ⎥
⎢0 0 0 0 1 1 1⎥
⎢0 0 0 0 0 1 1 ⎥⎦
⎣
Introducere în MATLAB- Indrummar de laborator 41
2.
⎡ 20.0000 -5.0000 ⎤
a) X=A\(C-B); X = ⎢ ⎥
⎣ -34.0000 7.0000 ⎦
⎡ 0 -2 ⎤
b) X=(A-eye(2))\(-B); X = ⎢ ⎥
⎣ -2 2 ⎦
⎡ 8.0000 -14.0000 ⎤
c) X=(C-B)/A; X = ⎢ ⎥
⎣ -13.0000 19.0000 ⎦
⎡ 0 -2 ⎤
d) X=(-B)/(A-eye(2)); X = ⎢ ⎥
⎣ -2 2 ⎦
3.
a) rang(A)=rang(Aext)=4 sistem compatibil determinat;
2.2e − 15 * cond ( A) = 3.7226e-014 deci precizia este cel puţin 10−14
X=A\b; x1=1; x2=0; x3=-3; x4=2
b) rang(A)≠rang(Aext) sistem incompatibil
c) rang(A)=rang(Aext)=3<4 sistem compatibil nedeterminat
d) A=2*diag(ones(1,99))+ diag(ones(1,98),-1)+ diag(ones(1,98),1);
b=2*ones(99,1) rang(A)=rang(Aext)=99 sistem compatibil determinat
2.2e-15*cond(A)=8.9148e-012
deci precizia este cel puţin 10−12 x=A\b
⎧0 daca i este par
Soluţia este: xi = ⎨
⎩1 daca i este impar
Autori : Nicolae Mitu şi Viorel Paleu 42
4.
⎡ 0.7071 -0.8165 0.5774 ⎤
[V L]=eig(A); V = ⎢⎢-0.7071 0.4082 -0.5774 ⎥⎥ ;
⎢⎣-0.0000 0.4082 0.5774 ⎥⎦
⎡ -1.0000 0 0 ⎤
⎢
L=⎢ 0 2.0000 0 ⎥⎥
⎢⎣ 0 0 1.0000 ⎥⎦
⎛ 1⎞
⎜ ⎟
Valoarea proprie λ1 = −1 este asociată cu vectorul propriu v1 = ⎜ −1 ⎟
⎜ 0⎟
⎝ ⎠
⎛ −2 ⎞
⎜ ⎟
Valoarea proprie λ2 = 2 este asociată cu vectorul propriu v2 = ⎜ 1⎟
⎜ 1⎟
⎝ ⎠
⎛ 1⎞
⎜ ⎟
Valoarea proprie λ3 = 1 este asociată cu vectorul propriu v3 = ⎜ −1⎟
⎜ 1⎟
⎝ ⎠
V*L*inv(V)=A care se numeşte descompunerea cu valori singulare a
matricei A.
Analog pentru matricea B
⎡-1.0000 0 0 0 ⎤
⎢ 0 2.0000 0 0 ⎥⎥
L= ⎢
⎢ 0 0 1.0000 0 ⎥
⎢ ⎥
⎣ 0 0 0 -2.0000 ⎦
Autori : Nicolae Mitu şi Viorel Paleu 44
LUCRAREA 4
Figura 4.1
Autori : Nicolae Mitu şi Viorel Paleu 46
Figura 4.2
Întrucât x este un vector iar sin(x) este tot un vector va trebui să utilizăm
la înmulţire operaţia cu punct (.*).
>> x=-pi:0.01:pi;
>> y=x.*sin(x);
>> plot(x,y,’-xr’);
>> title('Graficul funcţiei x*sin(x)');
>> xlabel('x');
>> ylabel('x*sin(x)');
Graficul obţinut este prezentat în figura 4.3.
Remarcaţi faptul că am pus la sfârşitul definirii lui x ; care are
rolul de a anula scrierea pe ecran vectorului x. Am făcut acest lucru
pentru a nu umple inutil ecranul cu elementele lui x (nu mai puţin de 629
de elemente). Am procedat la fel şi la definirea lui y (evident tot 629 de
elemente). Recomandăm utilizarea acestui separator pentru a anula
scrierea inutilă a tot felul de numere pe ecran. Însă este util să nu
utilizăm separatorul „;” dacă dorim să depanăm un program.
Introducere în MATLAB- Indrummar de laborator 49
Figura 4.3
4.2.2. Grafice 3D
Figura 4.4
Figura 4.5
Pentru desenarea de figuri geometrice în spaţiu avem trei
comenzi:
cylinder(y,n) desenează un corp de rotaţie în jurul axei z generat de o
curbă creată de vectorul y şi având n puncte pe circumferinţă. Daca r
este constant atunci desenează o prismă regulată cu baza având n laturi.
Cu ajutorul ei se pot desena şi piramide sau conuri.
Autori : Nicolae Mitu şi Viorel Paleu 52
4.3. Aplicaţii
sin ⎛⎜ x 2 + y 2 ⎞⎟
2. a) Să se reprezinte graficul funcţiei z = ⎝ ⎠ pe
x2 + y2
domeniul x ∈ [ −8 , 8] , y ∈ [ −8 , 8] . Se vor utiliza toate comenzile de
desenare ( mesh, meshc, surf, surfc ), pe acelaşi ecran în figuri diferite.
Discutaţi diferenţele.
b) Să se traseze suprafaţa definită de z = xisin ( x )icos ( y )
pe domeniul dat de x ∈ [ −π , π ] , y ∈ [ −π , π ] şi să se editeze modul de
colorare al suprafeţei.
c) Să se traseze liniile de contur ale celor două grafice de
mai sus în ambele variante de desenare, cele patru desene fiind
reprezentate pe aceiaşi imagine.
a) un cilindru;
b) un paralelipiped dreptunghic;
c) o piramidă cu baza pătrată;
d) un trunchi de piramidă cu baza hexagonală:
e) un con;
f) un trunchi de con;
g) o suprafaţă de rotaţie generată de funcţia: y = xisin( x) ;
h) o sferă:
i) un elipsoid cu centrul în punctul (0,0,0) si de raze: rx=1, ry=8
şi rz=3.
Fig. 4.6
x=-2:0.1:2; y1=exp(x/2).*sin(2*x); y2=(x-2)./(x.^2+1);
y3=x.*sin(x.^2+1); y4=sqrt(x.^2+1).*atan(x); subplot(2,2,1);
plot(x,y1,’r’); subplot(2,2,2); plot(x,y2,’b’); subplot(2,2,3);
plot(x,y3,’g’); subplot(2,2,4); plot(x,y4,’m’)
Introducere în MATLAB- Indrummar de laborator 55
Fig. 4.7
2. a) x=-8:0.5:8; y=x; [X,Y]=meshgrid(x,y);
Z=sin(sqrt(X.^2+Y.^2+eps))./sqrt(X.^2+Y.^2+eps); surf(X,Y,Z)
Autori : Nicolae Mitu şi Viorel Paleu 56
Fig. 4.8
b) x=-pi:pi/10:pi; y=x; [X,Y]=meshgrid(x,y);
Z=X.*sin(X).*cos(Y); surf(X,Y,Z);
Fig. 4.9
Introducere în MATLAB- Indrummar de laborator 57
Fig.4.10
3. a) cylinder;
Autori : Nicolae Mitu şi Viorel Paleu 58
b) cylinder
Fig. 4.11
Fig. 4.12
Introducere în MATLAB- Indrummar de laborator 59
Fig. 4.13
Fig 4.14
f) x=0:0.2:2; y=x-3; cylinder(y,40);
Autori : Nicolae Mitu şi Viorel Paleu 60
Fig. 4.15
Fig. 4.16
Introducere în MATLAB- Indrummar de laborator 61
h) sphere;
Fig. 4.17
ellipsoid(0,0,0,1,8,3).
Fig. 4.18
Autori : Nicolae Mitu şi Viorel Paleu 62
Fig. 4.19
Fig, 4.20
Introducere în MATLAB- Indrummar de laborator 63
LUCRAREA 5
5.2.1.Polinoame în MATLAB
-3.0000
-1.0000
1.0000 + 1.0000i
1.0000 - 1.0000i
-0.0000 + 1.0000i
-0.0000 - 1.0000i
1.0000
>> roots(q)
ans =
-3.0000
2.0000 + 1.0000i
2.0000 - 1.0000i
ans =
7 6 -20 24 -3 -2 4
Adică polinomul: 7 x 6 + 6 x5 − 20 x 4 + 24 x3 − 3 x 2 − 2 x + 4
ans =
1.0477
>> interp1(x,y,1.1,'spline')
ans =
1.0489
>> interp1(x,y,1.1,'cubic')
ans =
1.0488
>> sqrt(1.1)
ans =
1.0488
Ultima valoare este valoarea exactă şi se observă faptul că
ultimele două metode sunt mai precise.
5.2.2.Funcţii utilizator
Fig.5.1
Pentru determinarea valorii minime a unei funcţii pe un interval
utilizăm funcţia fminbnd(numef,xmin,xmax) unde [xmin,xmax] indică
intervalul în care căutăm valoarea minimă. Pentru g de mai sus pe
intervalul [-2,2]:
>> fminbnd(g,-2,2)
ans =
-1.8235
Introducere în MATLAB- Indrummar de laborator 69
xmin=0,xmax=3,ymin=0,ymax=2,zmin=0,zmax=1.
Autori : Nicolae Mitu şi Viorel Paleu 70
5.3. APLICAŢII
Fie polinoamele:
P[ x] = x5 − 7 x3 − 8 x 2 + 2 x + 12 ;
Q [ x] = x4 − 5x2 + 4 ;
T [ x ] = x6 + 4 x 4 − x 2 − 4
Să se determine produsul P[x]*T[x]*Q[x] ;
Să se determine câtul şi restul împărţirii P[x]:Q[x] şi T[x]:Q[x];
Să se determine rădăcinile polinoamelor P[x], Q[x] şi T[x].
Fie x = 0 : π 10 : π şi y=sin(x).
a) Să se determine polinomul P4[x] de gradul 4 care aproximează datele
din vectorii x şi y.
b) Să se compare valorile P4 [π 2] cu valoarea exactă sin(π 2) );
c) Să se calculeze utilând toate tipurile de interpolare valoarea în
π 2.
x2
e) Să se calculeze ∫∫ y 2 + 1 dxdy pentru xmin=0, xmax=1,
ymin=0, ymax=1;
dxdydz
f) Să se calculeze ∫∫∫ x + y + z +1
pentru xmin=ymin=zmin=0,
xmax=ymax=zmax=1.
5. Să se rezolve ecuaţiile:
a) xisin( x) + cos( x) = 0 pentru valoarea iniţială x=1;
Autori : Nicolae Mitu şi Viorel Paleu 72
( )
b) x 2 i x 2 + 3 + xiln x 2 + 1 − 2 − ln 2 = 0 , x=0.5;
[c,r]=deconv(p,q)
c=x; r = −2 ⋅ x3 − 8i x 2 − 2i x + 12 ;
[c1,r1]=deconv(t,q);
c1 = x 2 + 9 ; r1 = 40i x 2 − 40
c) roots(p); x1=3, x2=-2, x3=-1+i, x4=-1-i, x5=1
roots(q); x1=1, x2=-1, x3=2, x4=-2
roots(t); x1=2i, x2=-2i, x3=1, x4=-1, x5=i, x6=-i
2.
a) v=[1 2 3 -4 -5]; s=poly(v);
s ( x ) = x5 + 3i x 4 − 23i x3 − 27 ⋅ x 2 + 166i x − 120
polyval(s,2)=0, polyval(s,0)=-120; polyval(s,-7)=-4320
c) polyval(polyder(s),1)=60; polyval(polyder(s),0)=166,
polyval(polyder(s),-1)=144
Introducere în MATLAB- Indrummar de laborator 73
3.x=0:pi/10:pi; y=sin(x);
a) p4=polyfit(x,y,4);
P4 ( x ) = 0.0368i x 4 -0.2309i x 3 + 0.0485i x 2 + 0.9874i x+ 0.0002
b) polyval(p4,pi/2)-sin(pi/2)=0.00053993<10-3
c) interp1(x,y,pi/2,’nearest’); 1
interp1(x,y,pi/2,’linear’); 1
interp1(x,y,pi/2,’spline’); 1
interp1(x,y,pi/2,’cubic’); 1
4.
a) fplot(inline(‚x.*sin(x)’),[-pi pi],’r’);
Fig.5.2
fplot(inline('log(1+sin(x))'),[-pi pi],'m');
Autori : Nicolae Mitu şi Viorel Paleu 74
Fig.5.3
b) fminbnd(inline('(x.^4-5*x.^2+4)./(x.^6+4)'),-3,0) -
1.3072;
c) fminbnd(inline('-(x.^4-5*x.^2+4)./(x.^6+4)'),-1,1) 0;
d) quad(inline('x.*sin(x)'),-1,1); 0.6023
quad(inline('sin(x).*log(1+sin(x))'),-1,1); 0.6750
e) dblquad(inline('x.^2./(y.^2+1)'),0,1,0,1); 0.2618
f) triplequad(inline('1./sqrt(x+y+z+1)'),0,1,0,1,0,1);
0.6428
5.
a) fzero(inline('x.*sin(x)+cos(x)'),1); 2.7984
Introducere în MATLAB- Indrummar de laborator 75
b) fzero(inline('x.^2.*sqrt(x.^2+3)+x.*log(x.^2+1)-2-
log(2)'),0.5); 1
c) fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),-1); -
1.2255
fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.1); 0
fzero(inline('(x-1).*exp(x).*sin(x)+x.^3-x'),0.9); 1
Fig.5.4
LUCRAREA 6
syms x y z
d=sym(2)
>> 1/2+1/3
ans
0.8333
Introducere în MATLAB- Indrummar de laborator 77
>> sym(1)/sym(2)+sym(1)/sym(3)
ans =
5/6
>> syms x y
>> collect((x+y)*(x^2+y^2+1))
ans =
x^3+y*x^2+(y^2+1)*x+y*(y^2+1)
>> collect((x+y)*(x^2+y^2+1), y)
ans =
y^3+x*y^2+(x^2+1)*y+x*(x^2+1)
Funcţia expand((p) conduce la scrierea expresiei p cu elementele
ei constitutive. Exemple:
>> expand((x-2)*(x-4))
ans =
x^2-6*x+8
>> expand(cos(x+y))
ans =
cos(x)*cos(y)-sin(x)*sin(y)
Autori : Nicolae Mitu şi Viorel Paleu 78
>> 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 10
>> factor(sym(13482))
ans =
(2)*(3)^2*(7)*(107)
>> simplify((x^2+x-2)/(x-1))
ans =
x+2
>> simplify(sin(x)^2 + cos(x)^2)
ans
1
>> [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
x2 − y2
Se observă faptul că numden ne dă fracţia: i numai
xy ( x − y )
x+ y
prin simplificare obţinem răspunsul final .
xy
Funcţia [r,cum]=simple(p) caută să determine cea mai simplă
(mai scurtă) formă a unei expresii. În r fa fi această formă simplă găsită
iar în cum metoda,funcţia cu care a fost găsită această formă simplă.
Exemple:
>> [r,cum]=simple(cos(x)^2-sin(x)^2)
r=
cos(2*x)
cum =
combine(trig)
Putem rezolva simbolic o ecuaţie cu ajutorul funcţiei solve. Se
va indica doar eq din ecuaţia eq=0. Acest lucru înseamnă faptul că
trebuie să ducem toţii termenii ecuaţiei în stânga pentru a forma expresia
eq. In funcţia solve se indică doar expresia eq presupunându-se că dorim
să rezolvăm ecuaţia eq=0. Exemplu:
Autori : Nicolae Mitu şi Viorel Paleu 80
>> solve('x^3-2*t*x^2+t^3')
ans =
t
(1/2*5^(1/2)+1/2)*t
(1/2-1/2*5^(1/2))*t
Dacă dorim să rezolvăm ecuaţia în raport cu altă variabilă decât
cea implicită (adică altă variabilă decât x) trebuie să indicăm acest lucru.
Exemplu:
>> solve('x^3-2*t*x^2+t^3',t)
ans =
x
(1/2*5^(1/2)-1/2)*x
(-1/2-1/2*5^(1/2))*x
6.3. APLICAŢII
2 4 1
a) + + =
3 5 7
1 1
+
b) 2 3=
1 1
+
5 7
1
c) 1 + =
1
1+
1
1+
1
1+
2
Introducere în MATLAB- Indrummar de laborator 81
3, Să se calculeze expresiile:
1 1
1−
a a + 1− a =
a) +
1 1 a
1−
a 1− a
x3 − y 3 x 2 − y 2 ⎛ 1 1 ⎞
i i⎜ + ⎟
x 2 + y 2 x3 + y 3 ⎜⎝ x 2 y 2 ⎟⎠
b) =
2
( x + y ) − xi y i⎛ 1 − 1 ⎞
⎜ ⎟
( x − y )2 + xi y ⎝ y x ⎠
Autori : Nicolae Mitu şi Viorel Paleu 82
1 ⎛ 1 1 ⎞ 3 ⎛ 1 1 ⎞ 6 ⎛1 1⎞
c) i + ⎟+ i + ⎟+ i⎜ + ⎟ =
3 ⎜ 3 2 4 ⎜ 2 2
(a + b) ⎝a b ⎠ (a + b) ⎝a b ⎠ ( a + b )5 ⎝ a b ⎠
4. Să se simplifice expresiile:
5. Să se rezolve ecuaţiile:
a) x3 + 2iai x 2 − a 2 i x − 2i a3 = 0
b) x 4 − 6ia i x 2 + 8iai a i x − 3i a 2 = 0
6.4. Indicaţii.
1.
a) sym(2)/sym(3)+sym(4)/sym(5)+sym(1)/sym(7)
b) u=sym(1);d=sym(2);t=sym(3);c=sym(5);s=sym(7)
(u/d+u/t)/(u/c+u/s)
c) u+u/(u+u/(u+u/(u+u/d)))
Introducere în MATLAB- Indrummar de laborator 83
2.
a) expand((x-y)*(x^2+y^2)*(x^4-x^2*y^2+y^4)) sau
collect((x-y)*(x^2+y^2)*(x^4-x^2*y^2+y^4))
b) collect((x-2)^3*(x+1)^2) sau
expand((x-2)^3*(x+1)^2)
c) factor((a^2+b^2)*x^4+(-a*b-(a^2+b^2)*a+a^2+b^2)*x^3+(a^2*b-
a*b-(a^2+b^2)*a-2*a^2-2*b^2)*x^2+(a^2*b+2*a*b+2*(a^2+b^2)*a)*x-
2*a^2*b)
d) expand(sin(6*x)-cos(6*x))
e) factor(sym('354600'))
factor(sym('12345678901234567890'))
f) factor(a^6-a^5*b+a^4*b^2-b^4*a^2+b^5*a-b^6)
(-b+a)*(b+a)*(b^2+a^2)*(b^2-a*b+a^2)
3.
a) [sus,jos]=numden(a/(1-1/a)+(1-1/a)/(1/(1-a))+(1/(1-a))/a)
simplify(sus/jos)
b) [sus,jos]=numden(((x^3-y^3)/(x^2+y^2)*(x^2-
y^2)/(x^3+y^3)*(1/x^2+1/y^2))/(((x+y)^2-x*y)/((x-y)^2+x*y)*(1/y-
1/x)))
simplify (sus/jos)
Autori : Nicolae Mitu şi Viorel Paleu 84
c)
[sus,jos]=numden(1/(a+b)^3*(1/a^3+1/b^3)+3/(a+b)^4*(1/a^2+1/b^2)+6
/(a+b)^5*(1/a+1/b))
simplify(sus/jos)
4.
a) [r,how]=simple(8*cos(x)^4+8*sin(x)*cos(x)^3-8*cos(x)^2-
4*sin(x)*cos(x)+1)
b) [r,how]=simple(cos(3*acos(x)))
c) simple(simple(a*cos(a)*cos(b)-a*sin(a)*sin(b)+b*cos(a)*cos(b)-
b*sin(a)*sin(b)))
5
a) solve(x^3+2*a*x^2-a^2*x-2*a^3)
b) solve(x^4-6*a*x^2+8*a*sqrt(a)*x-3*a^2)
c) solve((a^2+b^2)*x^4+(-a^3-a*b^2+a^2+b^2-a*b)*x^3+(-a^3-
a*b^2+a^2*b-2*a^2-2*b^2-
a*b)*x^2+(2*a^3+2*a*b^2+a^2*b+2*a*b)*x-2*a^2*b)
6.5. Soluţii.
1.
a) 169/105
b) 175/72
c) 13/8
2.
a) x^7+x*y^6-y*x^6-y^7
b) x^5-4*x^4+x^3+10*x^2-4*x-8
Introducere în MATLAB- Indrummar de laborator 85
c) (x+2)*(x-1)*(x-a)*(x*a^2+x*b^2-a*b)
d) 32*sin(x)*cos(x)^5-32*sin(x)*cos(x)^3+6*sin(x)*cos(x)-
32*cos(x)^6+48*cos(x)^4-18*cos(x)^2+1
e) (2)^3*(3)^2*(5)^2*(197)
f) (2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541)
3.
a) 3
x− y
b)
xi y
1
c)
a 3 * b3
4.
a) r =cos(4*x)+sin(4*x); how = combine
b) r =4*x^3-3*x; how =expand
c) cos(a+b)*(a+b)
5.
a) -a
a
-2*a
b) a^(1/2)
a^(1/2)
a^(1/2)
-3*a^(1/2)
c) 1
-2
a
a*b/(a^2+b^2)
Autori : Nicolae Mitu şi Viorel Paleu 86
LUCRAREA 7
[ 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]
⎧ x + y + z =1
⎪
⎨ x − y + 2z = 2
⎪ 2 y − z = −1
⎩
A=
1 1 1
1 -1 2
0 2 -1
>> B=[1;2;-1]
B=
1
2
-1
Autori : Nicolae Mitu şi Viorel Paleu 88
>> syms z
>> B1=[1-z;2-2*z]
B1 =
1-z
2-2*z
Soluţia simbolică a sistemului se obţine acum simplu:
>> x=A1\B1
x=
3/2-3/2*z
-1/2+1/2*z
⎧ 3
⎪ x = 2 (1 − α )
⎪
⎪ 1
Sau, altfel scris: ⎨ y = − (1 − α ) α ∈ R
⎪ 2
⎪ z =α
⎪
⎩
7.3. APLICAŢII
1.
a) Fie polinomul P [ X ] = X 2 − ( a + d )i X + ( aid − bic ) * I 2 unde X este
⎡1 0 ⎤
o matrice pătrată de ordinul 2 , iar I 2 = ⎢ ⎥ . Să se calculeze P[A],
⎣0 1 ⎦
⎡a b ⎤
unde A = ⎢ ⎥ . Analog să se calculeze R[B] pentru polinomul R[X],
⎣c d ⎦
şi matricea B date de:
R [ X ] = X 2 − 2i( a + 2ib )i X + ( a − b )i( a + 5ib )i I 6
⎡a b b b b b⎤
⎢b a b b b b ⎥⎥
⎢
⎢b b a b b b⎥
B=⎢ ⎥
⎢b b b a b b⎥
⎢b b b b a b⎥
⎢ ⎥
⎢⎣ b b b b b a ⎥⎦
⎡1 0 0 0 0 b⎤
−a 0 ⎢ 0 ⎥⎥
⎡1 0⎤ ⎢0 1 0 0 0
⎢0 1 −a 0 ⎥⎥ ⎢ −a 0 1 0 0 0⎥
C=⎢ ; D=⎢ ⎥
⎢0 0 1 −a ⎥ ⎢ 0 −a 0 1 0 0⎥
⎢ ⎥ ⎢0
⎣0 0 0 1⎦ 0 −a 0 1 0⎥
⎢ ⎥
⎣⎢ 0 0 0 −a 0 1 ⎦⎥
Autori : Nicolae Mitu şi Viorel Paleu 92
2.
a) Să se arate că determinanţii matricelor C şi D definite la punctul 1 b)
sunt egali.
b) Să se scrie sub formă de produs determinantul matricei B definită la
1a) şi să se deducă de aici care sunt condiţiile ca determinantul să fie
nenul.
⎧x + y +t −u =1
⎪
a) ⎨ x + z + 2it + u = 2 ;
⎪x −t +u = 0
⎩
⎧ x1 − x2 + 2i x3 + 3i x4 + 5i x5 = 2
⎪
⎪2i x1 − 2i x2 + x3 − 4i x5 = 0
⎪
b) ⎨−3i x1 + x2 − 2i x3 − 2i x4 = 1 ;
⎪− x + 2i x − 2i x + 3i x + 3i x = 3
⎪ 1 2 3 4 5
⎪⎩ − 2i x2 + x3 + x4 + x5 = 3
⎧ 3i x + y − 2i z + 4it − u = 10
⎪ 2i x + 3i y − z + t + 4iu = 20
⎪⎪
c) ⎨ x − 4i y + 6i z − 2it − u = −2
⎪ −3i x − 3i y + 9i z − 9it + 5iu = 7
⎪
⎪⎩ 4i x − 18i y + 31i z − 13it = 9
4 . Să se determine valorile numerice ale expresiilor pentru valorile
indicate:
a 3 + b3 − c 3
a) pentru a=3, b=-1 şi c=1;
a 2bc + ab 2 c + abc 2
Introducere în MATLAB- Indrummar de laborator 93
sin x + cos 2 y + 1
c) pentru x=π/3 şi y=π/6.
cos y + sin 2 x + 1
7.4. Indicaţii
1.
a) syms a b c d
A=[a b;c d]
collect(A^2-(a+d)*A+(a*d-b*c)*eye(2))
syms a b
B=b*ones(6)+(a-b)*diag(ones(1,6))
expand(B^2-2*(a+2*b)*B+(a-b)*(a+5*b)*eye(6))
b) C=diag(ones(1,4))-a*diag(ones(1,3),1)
inv(C)
D=-a*diag(ones(1,4),-2)+diag(ones(1,6))
D(1,6)=b
inv(D)
2.
a)det(C)
det(D)
b) factor(det(B))
3.
Autori : Nicolae Mitu şi Viorel Paleu 94
4. syms a b c x y z
a)
>> u=(a^3+b^3-c^3)/(a^2*b*c+a*b^2*c+a*b*c^2)
u=
(a^3+b^3-c^3)/(a^2*b*c+a*b^2*c+a*b*c^2)
>> subs(u,{a,b,c},{3,-1,1})
b)
>> v=x^2*log(z^2+1)+x^3*z-x*z^2
v=
x^2*log(z^2+1)+x^3*z-x*z^2
>> subs(v,{x,z},{2,-2})
c)
>> w=(sin(x)+sqrt((cos(y))^2+1))/(cos(x)+sqrt((sin(y))^2+1))
Introducere în MATLAB- Indrummar de laborator 95
w=
(sin(x)+(cos(y)^2+1)^(1/2))/(cos(x)+(sin(y)^2+1)^(1/2))
>> subs(w,{x,y},{pi/3,pi/6})
7.5. Soluţii
1.
⎡0 0 0 0 0 0⎤
⎢0 0 0 0 0 0 ⎥⎥
⎢
⎡0 0⎤ ⎢0 0 0 0 0 0⎥
a) ⎢ ⎥ ; ⎢ ⎥;
⎣0 0⎦ ⎢0 0 0 0 0 0⎥
⎢0 0 0 0 0 0⎥
⎢ ⎥
⎢⎣ 0 0 0 0 0 0 ⎥⎦
⎡1 − a 2 ib 0 −aib 0 −b ⎤
⎢ ⎥
⎡1 a a2 a3 ⎤ ⎢ 0 1 0 0 0 0 ⎥
⎢ ⎥ ⎢ ⎥
⎢ 2⎥ ⎢ a − a3 ib 1 − a 2 ib 0 − aib ⎥
b) ⎢ 0 1 a a ;
⎥ ⎢
a⎥ ⎢0 a 0 1 0 0 ⎥
⎢0 0 1 ⎥
⎢0 0 0 1 ⎥⎦ ⎢ a 2 − a 4 ib a − a3 ib 1 2 ⎥
−a ib
⎣
⎢ ⎥
⎢⎣ 0 a2 0 a 0 1 ⎥⎦
Autori : Nicolae Mitu şi Viorel Paleu 96
2.
a) 1
5
b) (a + 5ib) * ( a − b ) deci a ≠ b a ≠ −5ib
3.
⎧x = α − β
⎪ y = −2iα + 2i β + 1
⎪⎪
a) ⎨ z = −3iα + 2 ; α, β ∈ R
⎪t = α
⎪
⎪⎩u = β
⎧ 32 64
⎪ x1 = − 33 + 33 iα
⎪
⎪ x = − 15 − 14 iα
⎪ 2 11 11
⎪
⎪ 26 80
b) ⎨ x3 = − − iα ; α ∈ R
⎪ 33 33
⎪ 35 37
⎪ x4 = 33 − 33 iα
⎪
⎪ x5 = α
⎪⎩
⎧ x = -16/17iα +10/3+11/51i β
⎪ y=10/17iα +16/3-94/51i β
⎪⎪
c) ⎨z=15/17iα +8/3-56/51i β ; α,β ∈ R
⎪ t=α
⎪
⎪⎩u=β
Introducere în MATLAB- Indrummar de laborator 97
4.
a)
ans =
-2.7778
b)
ans =
-17.5622
c)
ans =
1.3528
Autori : Nicolae Mitu şi Viorel Paleu 98
LUCRAREA 8
3*log(2)
Putem calcula şi limite al căror rezultat este ±∞. Exemplu:
>> limit(1/(x-1)^2,1)
ans =
Inf
De asemenea putem calcula limite laterale indicând ‚left’ pentru
stânga, respectiv ‚right’ pentru dreapta. Trebuie însă indicate variabila
(de obicei x) , punctul în care se calculează limita laterală şi care limită
laterală se doreşte. Exemplu:
>> limit(1/x,x,0,'left')
ans =
-Inf
În acest din urmă mod se pot calcula limitele în care variabila
tinde la ±∞. Exemplu:
>> limit((2-x-x^2)/(x^2+1),x,inf,'left')
ans =
-1
>> limit((1-x^3)/(x^2+1),x,-inf,'right')
ans =
Inf
Funcţia derivată a unei funcţii date se obţine cu funcţia diff.
Variabila de derivat este considerată implicit x. Exemplu:
>> diff(x^5*log(x^2+1))
ans =
5*x^4*log(x^2+1)+2*x^6/(x^2+1)
Se pot calcula şi derivate de ordin superior indicând ca argument
al lui diff ordinul derivatei. Astfel dacă dorim derivata de ordin 3 pentru
funcţia de mai sus obţinem:
>> diff(x^5*log(x^2+1),3)
ans =
Autori : Nicolae Mitu şi Viorel Paleu 100
60*x^2*log(x^2+1)+150*x^4/(x^2+1)-
72*x^6/(x^2+1)^2+16*x^8/(x^2+1)^3
Pentru a calcula derivata în funcţie de altă variabilă decât x se va
indica acest lucru ca argument al funcţiei dis între apostroafe. Exemplu:
>> diff(t*sin(t^2+1),'t')
ans =
sin(t^2+1)+2*t^2*cos(t^2+1)
Putem utiliza faptul că putem deriva în raport cu altă variabilă
∂3 f
decât x la calculul derivatelor parţiale. Astfel pentru funcţia
∂ 2 x∂y
f ( x, y ) = x 3 ⋅ sin y se va calcula astfel:
>> diff(diff(x^3*sin(y),2),'y')
ans =
6*x*cos(y)
sau
>> diff(diff(x^3*sin(y),'y'),2)
ans =
6*x*cos(y)
Vom calcula primitiva unei funcţii cu ajutorul funcţiei int. De
exemplu:
>> int(5*x^4*log(x^2+1)+2*x^6/(x^2+1))
ans =
x^5*log(x^2+1)
Se observă faptul că funcţiile int şi diff sunt inverse. Putem
calcula şi integrale definite indicând limitele de integrat (care pot fi
simboluri):
>> int(3*x^2,sin(t),cos(t))
ans =
cos(t)^3-sin(t)^3
Introducere în MATLAB- Indrummar de laborator 101
sin t )
3 ⋅ x 2 dx dt
>> int(int(3*x^2,sin(t),1),t)
ans =
t+1/3*sin(t)^2*cos(t)+2/3*cos(t)
Pentru reprezentarea grafică 2D a funcţiilor simbolice se
utilizează comanda ezplot. Daca f este o expresie simbolică ce conţine o
singură variabilă simbolică atunci comanda :
ezplot(f,[xmin,xmax,ymin,ymax]) cu xmin<x<xmax şi
ymin<f(x)<ymax.
Dacă nu se indică limitele atunci se consideră ca interval de
definiţie implicit [-2π, 2π]. Pentru funcţii implicite de forma
g(x,y)=0,adică expresia lui g conţine două variabile simbolice se
utilizează aceiaşi comandă De exemplu
>> syms x y
>> f=(x^4-1)*exp(-x);
f=
(x^4-1)*exp(-x)
>> ezplot(f,[-2,2])
>> g=x^2-y^4
g=
x^2-y^4
>> ezplot(g,[-2,2])
Autori : Nicolae Mitu şi Viorel Paleu 102
Fig.8.1
Fig.8.2
Introducere în MATLAB- Indrummar de laborator 103
f=
x*sin(y)
>> ezsurf(f)
Fig.8.3
Autori : Nicolae Mitu şi Viorel Paleu 104
8.3. APLICAŢII
x3 + 1 x +1 −1 1 − cos x ln(1 + x)
a) lim ; b) lim ; c) lim ; d) lim .
x →−1 x 2 + 1 x →0 3 x + 1 − 1 x →0 2 x →0 x
x
2. Să se calculeze limitele:
x
x3 − 1
⎛ x −1 ⎞
a) lim
x →+∞
( )
x + a − x ; b) lim
3
x →−∞ x + 1
; c) lim ⎜ ⎟ ;
x →∞ ⎝ x + 1 ⎠
d) lim
(
ln 1 + e x ).
x →∞ x
3. Să se calculeze:
( )
a) f’(x) dacă f ( x ) = 2i xisin x − x 2 − 2 icos ( x ) ;
x5
c) f’’’(x) dacă f ( x ) = .
ex
∂2 f
d) dacă f ( x, y ) = 3 ⋅ x3 ⋅ sin x + y ⋅ e x⋅ y
∂x∂y
Introducere în MATLAB- Indrummar de laborator 105
3 x2
a) f ( x ) = x 2 ie x ; b) f ( x ) = e a i x i sin ( bi x ) ; c) f ( x ) = ;
x 2 − 6i x + 10
x2
d) f ( x ) = .
10
( x − 1)
⎛ x2 ⎞
5. Să se arate că funcţia f ( x ) = ⎜ + x + 1⎟ie x − x − 1 este soluţie a
⎜ 2 ⎟
⎝ ⎠
ecuaţiei diferenţiale:
yiv − 2i yiii + y ii = e x
8.4. Indicaţii
syms x y t a b h
1.
a) limit((x^3+1)/(x^2+1),-1)
b) limit((sqrt(x+1)-1)/((x+1)^(1/3)-1))
c) limit((1-cos(x))/x^2)
d) limit(log(1+x)/x)
2.
a) limit(sqrt(x+a)-sqrt(x),x,inf,'left')
b) limit((x^3-1)/(x^3+1),x,-inf,'right')
c) limit(((x-1)/(x+1))^x,x,inf,'left')
d) limit(log(1+exp(x))/x,x,inf,'left')
3.
a) diff(2*x*sin(x)-(x^2-2)*cos(x))
b) diff(exp(x)*asin(x),2)
c) diff(x^5/exp(x),3)
d) diff(diff(3*x^3*sin(x)+y*exp(x*y)),’y’)
4.
a) int(x^2*exp(x^3))
b) int(exp(a*x)*sin(b*x))
c) int(x^2/(x^2-6*x+10))
d) int(x^2/(x-1)^10)
5.
d2f=diff((x^2/2+x+1)*exp(x)-x-1,2)
Introducere în MATLAB- Indrummar de laborator 107
d3f=diff((x^2/2+x+1)*exp(x)-x-1,3)
d4f=diff((x^2/2+x+1)*exp(x)-x-1,4)
collect(d4f-2*d3f+d2f)
6.
a)
>>f=(x^2-1)*sin(2*x)
>> ezplot(f,[-2,2])
Numărul rădăcinilor este dat de numărul intersecţiilor axei Ox cu
graficul lui f.
b)
>> g=x^2*sin(y)+y*log(x)
>> ezplot(g)
c)
>> h=(x^2-1)*sin(y)
>> ezsurf(h)
8.5. Soluţii
1.
a) 0
3
b)
2
1
c)
2
d) 1
2.
Autori : Nicolae Mitu şi Viorel Paleu 108
a) 0
b) 1
c) e−2
d) 1
3.
a) 2*sin(x)+(x^2-2)*sin(x)
b) exp(x)*asin(x)+2*exp(x)/(1-x^2)^(1/2)+exp(x)/(1-x^2)^(3/2)*x
c) 60*x^2/exp(x)-60*x^3/exp(x)+15*x^4/exp(x)-x^5/exp(x)
d) 2*y*exp(x*y)+y^2*x*exp(x*y)
4.
a) 1/3*exp(x^3)
b) -b/(a^2+b^2)*exp(a*x)*cos(b*x)+a/(a^2+b^2)*exp(a*x)*sin(b*x)
c) x+3*log(x^2-6*x+10)+8*atan(x-3)
d) -1/4/(x-1)^8-1/9/(x-1)^9-1/7/(x-1)^7
6 a) 5 rădăcini
Introducere în MATLAB- Indrummar de laborator 109
Fig.8.4
Autori : Nicolae Mitu şi Viorel Paleu 110
LUCRAREA 9
A=
1 0 -2 10 0
-5 30 -10 0 1
2 0 1 1 1
-1 3 2 0 0
>> B=2*A
B=
2 0 -4 20 0
Autori : Nicolae Mitu şi Viorel Paleu 112
-10 60 -20 0 2
4 0 2 2 2
-2 6 4 0 0
>> A>0
ans =
1 0 0 1 0
0 1 0 0 1
1 0 1 1 1
0 1 1 0 0
>> A==B
ans =
0 1 0 0 1
0 0 0 1 0
0 1 0 0 0
0 0 0 1 1
ans =
30
10
Doar două elemente ale lui A sunt mai mari ca 5: 30 şi 10.
Observaţie. Există mai multe posibilităţi pentru a accesa toate
elementele lui A. Prima ar fi să utilizăm o matrice cu toate elementele 1,
adică o condiţie adevărată pentru fiecare element, drept indice. De
exemplu să dăm comanda A(A==A). Alta ar fi să utilizăm operatorul :
(revezi lucrarea 2), A(:). Recomandăm a doua metodă ca fiind mai scurtă
şi mai rapidă.
Operatorii logici constituie o cale de a defini expresii logice( cu
ajutorul operatorilor relaţionali) . Există trei operatori logici:
0 0 0 0 1 0
1 0 0 1 0 1
0 1 0 1 1 1
1 1 1 1 0 0
>> isfinite(v)
ans =
1 0 0 0
Autori : Nicolae Mitu şi Viorel Paleu 116
9.3. APLICAŢII
a) x > y
b) y < x
c) x == y
d) x <= y
e) y >= x
f) x | y
g) x & y
h) x & (~y)
i) (x > y) | (y < x)
j) (x > y) & (y < x)
⎧ 2 daca x < 6
⎪
y ( x) = ⎨ x − 4 daca 6 <= x <= 20
⎪
⎩36 − x daca 20 <= x <= 35
utilizând indexarea logică. Verificaţi răspunsul desenând graficul lui
y(x).
b) Desenaţi graficul funcţiei de semnal sinusoidal discontinuu :
9.4. Indicaţii
3.
>> x = [3 15 9 12 -1 0 -12 9 6 1]
x=
3 15 9 12 -1 0 -12 9 6 1
a)>> a=x;a(x>0)=0
b)Se va utiliza funcţia rem(x,n), x un vector de numere întregi, iar n un
număr natural. Funcţia ne dă un vector în care elementele sunt restul
împărţirii fiecărui element al lui x la n. În situaţia noastră rem(x,3) ne va
da resturile împărţirii la 3. Dar pe noi ne interesează ca în acest vector pe
poziţia în care este 0, adică elementul se împarte exact la 3, să avem
valoarea 1( adică adevărat) şi 0 în rest (adică fals, nu se împarte exact la
3).Acest lucru se obţine pur şi simplu aplicând operatorul ~ (not) la
funcţie. Deci
>> b=x;b(~rem(x,3))=5
c) >> c=x;c(~rem(x,2))=5*c(~rem(x,2))
d) >> d=x(x>10)
e)media elementelor unui vector este dată de funcţia mean(x). Deci
>> e=x;e(x<mean(x))=0
f) >> f=x;f(x>mean(x))=f(x>mean(x))-mean(x)
>> y((x >= 20) & (x <= 35))=36-x((x >= 20) & (x <= 35))
Acum putem trasa graficul lui y în funcţie de x cu comanda:
>> plot(x,y,'or')
b) Mai întâi definim timpul t:
>>t=0:0.1:10;
Apoi definim funcţia x(t):
>> x=sin(t);
Punem valoarea 0 în locul valorilor negative ale lui x:
>> x=x.*(x>0);
Facem graficul şi punem etichetele:
>> plot(t,x)
>> axis([0 10 -0.1 1.1])
>> xlabel('Timpul [s]')
>> ylabel('Amplitudinea')
>> title('Semnal sinusoidal discontinuu')
5. Definim x ca în problemă:
>> x=[7 3 0 5 -2 0 -1 0 pi]
Ideea este că vom utiliza în locul valorii 0 cea mai mică valoare relativă
pozitivă pe care calculatorul o poate reprezenta. Aceasta este:
eps= 2−52 ≈ 2.2204e-016
Comanda de înlocuire este:
>> x=x+(x==0)*eps
Acum putem calcula:
>> sin(x)./x
>> tg=2*v0*sin(theta)/g
Definim acum intervalul de timp şi calculăm vitezele şi înălţimile
pe acest interval:
>> t=0:0.01:tg;
>> v=sqrt(v0^2-2*v0*g*sin(theta)*t+g^2*t.^2);
>> h=v0*t*sin(theta)-0.5*g*t.^2;
Determinăm acum când înălţimea nu este mai mică decât 6m şi
viteza nu este mai mare decât 16 m/s :
>> u=find(h>6&v<16)
In vectorul u se află rangurile elementelor din v şi h ce verifică
această condiţie. Evident rangurile corespunzătoare din t ne dau timpii în
care condiţiile sunt îndeplinite . Aceşti timpi aparţin unui interval dat de
primul rang şi ultimul rang din u. Determinăm capetele acestui interval
astfel:
>> t1=t(u(1))
>> t2=t(u(end))
Soluţia problemei este intervalul [t1,t2]
9.5. Soluţii
1.
a) >> x > y
ans =
0 1 0 1 1 0 0
Vectorul rezultat are 1 pe poziţia în care elementul lui x este mai mare
decât elementul lui y şi 0 unde elementul lui x este mai mic sau egal cu
elementul corespunzător al lui y.
Autori : Nicolae Mitu şi Viorel Paleu 122
2.
a) >> x((x > 3) & (x < 8))
ans =
4 5 6 7
Analog pentru restul comenzilor.
3.
a) a =
0 0 0 0 -1 0 -12 0 0 0
b) b =
5 5 5 5 -1 5 5 5 5 1
c) c =
3 15 9 60 -1 0 -60 9 30 1
d) d =
15 12
e) e =
0 15 9 12 0 0 0 9 6 0
f) f =
3.0000,10.8000,4.8000,7.8000,-1.0000,0,-12.0000,4.8000,1.8000,
1.0000
4. a) x =
Columns 1 through 15
24 31 8 21 25 15 27 30 26 2 29 22 16 19
10
Columns 16 through 30
Introducere în MATLAB- Indrummar de laborator 123
33 7 35 4 28 3 11 14 32 6 12 23 9 5 20
Columns 31 through 35
18 13 34 17 1
y=
Columns 1 through 15
12 5 4 15 11 11 9 6 10 2 7 14 12 15 6
Columns 16 through 30
3 3 1 2 8 2 7 10 4 2 8 13 5 2 16
Columns 31 through 35
14 9 2 13 2
Fig.9.1
Autori : Nicolae Mitu şi Viorel Paleu 124
Fig.9.2
5. x =
7.0000 3.0000 0.0000 5.0000 -2.0000 0.0000 -1.0000
0.0000 3.1416
>> sin(x)./x
ans =
0.0939 0.0470 1.0000 -0.1918 0.4546 1.0000 0.8415
1.0000 0.0000
6. [0.85, 1.78]
Introducere în MATLAB- Indrummar de laborator 125
LUCRAREA 10
if condiţie
secvenţa de instrucţiuni
end
Autori : Nicolae Mitu şi Viorel Paleu 126
>> x=5;
>> ind=2;
>> if ind<25
ind=ind+1;
end
>> ind
ind =
3
if condiţie
secvenţa 1 de comenzi
else
secvenţa 2 de comenzi
end
Introducere în MATLAB- Indrummar de laborator 127
if conditie1
Secvenţa 1 de comenzi
elseif conditie2
secvenţa 2 de comenzi
elseif conditie3
secvenţa 3 de comenzi
……………………………..
Else
Secvenţa n de comenzi
Exemplu:
>> n=7;
>> ind=1;
>> if n>10
ind=10;
Autori : Nicolae Mitu şi Viorel Paleu 128
elseif n>5
ind=5;
else
ind=0;
end
>> ind
ind =
5
În cazul unor ramificări multiple pentru a preveni scrierea unor
secvenţe if îmbricate complexe se utilizează comanda switch-case:
switch expresie
case valoare1
scvenţa 1 de comenzi
case valoare2
secvenţa 2 de comenzi
…………………………….
otherwise
secvenţa n de comenzi
end
>> interval=0.9;
>> switch interval<1
case 1
xinc=interval/10;
case 0
xinc=0.1;
end
Introducere în MATLAB- Indrummar de laborator 129
>> xinc
xinc =
0.0900
for variabila=expresie
secvenţa de comenzi
end
Observaţii:
Dacă rezultatul evaluării expresiei este o matrice vidă, atunci se
sare direct la prima comandă după end fără să se execute secvenţa de
comenzi;
Dacă rezultatul evaluării expresiei este o matrice cu n coloane
atunci secvenţa de comenzi se va executa de n ori. Variabila va lua pe
rând ca valoare coloana k la execuţia k şi poate fi utilizată cu această
valoare în secvenţa de comenzi;
Dacă rezultatul evaluării expresiei este un vector cu n elemente,
atunci secvenţa de comenzi se va executa de n ori, la a k-a execuţie
variabila luând ca valoare elementul de ordin k din vector;
Dacă rezultatul evaluării expresiei este un scalar secvenţa de
comenzi se va executa o singură dată, iar variabila va lua ca valoare acel
scalar;
Nu se poate termina o buclă for prin modificarea variabilei;
Se poate utiliza în expresie operatorul : ;
Variabila va avea la sfârşit ca valoare ultima coloană,respectiv
ultimul element.
Vom calcula valoarea n! :
Autori : Nicolae Mitu şi Viorel Paleu 130
>> n=6;
>> fact=1;
>> for ind=1:n
fact=fact*ind;
end
>> fact
fact =
720
Observaţie. Exemplul de mai sus este pur didactic. Ca regulă
generală atunci când există funcţii predefinite care calculează o valoare
este bine să le utilizaţi pe acelea. Nu există o funcţie specială pentru
factorial. Dar funcţia gamma dată de:
∞
gamma (a ) = ∫ e −t t a −1 dt
0
>> gamma(7)
ans =
720
>> prod(1:6)
ans =
720
A=
1 5 9
-3 7 0
6 9 4
>> [l,c]=size(A);
>> for i=1:l
for j=1:c
A(i,j)=rem(A(i,j),3);
end
end
>> A
A=
1 2 0
0 1 0
0 0 1
>> A=rem(A(:,:),3);
While conditie
Secvenţa de comenzi
End
Autori : Nicolae Mitu şi Viorel Paleu 132
it=1;
itmax=1000;
while condiţie & (it<itmax)
secvenţa de comenzi
it=it+1;
end
>> it=0;
>> itmax=100;
>> xeps=1;
>> while (((1+xeps)>1)&(it<itmax))
xeps=xeps/2;
it=it+1;
end
>> it-1
it =
52
>> xeps=xeps*2
xeps =
2.2204e-016
Introducere în MATLAB- Indrummar de laborator 133
>> x
x=
1 0 7 NaN 8
>> for ind=1:length(x)
if x(ind)==NaN
break
end
x(ind)=rem(x(ind),5);
end
>> x
x=
1 0 2 NaN 8
Se observă faptul că prelucrarea s-a oprit la NaN, altfel în loc de
8 ar fi fost 3 (restul împărţirii lui 8 la 5).
Autori : Nicolae Mitu şi Viorel Paleu 134
10.3. Aplicaţii
10.4. Indicaţii
>> x=5;
>> if x<10
y=2*x;
elseif x<100
y=100-x;
elseif x<1000
Autori : Nicolae Mitu şi Viorel Paleu 136
y=1000-x/2;
else
y=sqrt(x);
end
>> y
y=
10
3. Pentru transformare::
- pentru inci → metru y=0.0254*x;
- pentru picior → metru y=0.3048*x;
- pentru milimetru → metru y=x/1000.
Este bine de utilizat şi clauza otherwise în cazul nostru înseamnă
faptul că unitatea nu există şi să introducem în acest caz NaN în y pentru
a semnala că transformarea unităţilor nu s-a putut efectua.
6. Problema va utiliza bucle for îmbricate. Pentru teste vom utiliza if.
Vom nota lmin şi cmin indici căutaţi pentru elementul minim, respectiv
lmax şi cmax indicii elementului maxim.
10.5. Soluţii
2.
>> x=[1 2 3];
>> if l==1&c==1
y=’scalar’;
elseif l==1|c==1
y=’vector’;
else
y=’matrice’;
end
>> y
y=
vector
3.
>> lungime=4.25;
>> unitate=’ft’;
>> switch unitate
case ‚in’
lungime_metrii=lungime*0.0254;
Introducere în MATLAB- Indrummar de laborator 139
case ‚ft’
lungime_metrii=lungime*0.3048;
case ‚m’
lungime_metrii=lungime;
case ‚mm’
lungime_metrii=lungime/1000;
otherwise
lungime_metrii=NaN;
end
>> lungime_metrii
lungime_metrii =
1.2954
4.
>> v=[1 0 5 7 3 4 5 5 8]
v=
1 0 5 7 3 4 5 5 8
>> vx=[0 v 0]
vx =
0 1 0 5 7 3 4 5 5 8 0
>> for ind=2:length(vx)-1
w(ind-1)=(vx(ind-1)+vx(ind+1))/2;
end
>> w
w=
0 3.0000 3.5000 4.0000 5.5000 4.0000 4.5000 6.5000 2.5000
5.
>> t=linspace(0,10,512);
Autori : Nicolae Mitu şi Viorel Paleu 140
>> s=sin(2*pi/5+t);
>> z=0.1*randn(size(t));
>> x=s+z;
>> y=zeros(size(t));
>> y(1)=x(1);
>> y(2)=(x(2)+x(1))/2;
>> for k=3:length(t)
y(k)=(x(k)+x(k-1)+x(k-2))/3;
end
>> subplot(2,1,1);
>> plot(t,x)
>> xlabel(‚timp [s]’)
>> ylabel(‚amplitudine semnal’)
>> title(‚Semnal sinusoidal cu zgomot’)
>> subplot(2,1,2)
>> plot(t,y)
>> xlabel(‚timp [s]’)
>> ylabel(‚amplitudine semnal’)
>> title(‚Semnal filtrat’)
Introducere în MATLAB- Indrummar de laborator 141
Fig.10.1
Se observă faptul că semnalul filtrat a eliminat în mare măsură
zgomotul.
6.
>> a=[1 2 3;0 -2 3;-2 -1 0];
>> [r,c]=size(a);
>> lmin=1;lmax=1;cmin=1;cmax=1;
>> elemin=a(1,1);
>> elemax=a(1,1);
>> for i=1:r
for j=1:c
if a(i,j) > elemax
elemax=a(i,j);
Autori : Nicolae Mitu şi Viorel Paleu 142
lmax=i;
cmax=j;
end
if a(i,j) < elemin
elemin=a(i,j);
lmin=i;
cmin=j;
end
end
end
>> [elemax lmax cmax]
ans =
3 1 3
>> [elemin lmin cmin]
ans =
-2 2 2
Elementul maxim este 3 şi se află pe linia 1 coloana 3, iar
elementul minim este -2 şi se află pe linia 2 coloana 2. Se remarcă faptul
că, deşi există mai multe elemente maxime s-au minime, este reţinut
primul întâlnit.
7.
>> k=0.05;
>> tbf=14;
>> tb=30;
>> t=1;
>> tf=10;
>> while tb > tbf
tbn=tb+k*(tf-tb);
tb=tbn;
Introducere în MATLAB- Indrummar de laborator 143
t=t+1;
end
>> t
t=
33
Deci după 33 de minute putem scoate berea din frigider la
temperatura de 14o C. Cam durează şi dacă afară e 30o C o să ni se pară
o veşnicie !!
Autori : Nicolae Mitu şi Viorel Paleu 144
LUCRAREA 11
Fig.11.1
Prezentăm în continuare două exemple simple. Primul exemplu va crea
un script numit sindoix ce va calcula sin 2x , va defini x şi va apela
scriptul.
Deschideţi cu File>New>M-file fereastra Edit şi Introduceţi comanda:
y=2*sin(x).*cos(x);
Apoi cu File>: Save As… salvaţi cu numele sindoix. Apoi în Command
window daţi comenzile:
>> x=pi/3;
>> sindoix
>> y
y=
Autori : Nicolae Mitu şi Viorel Paleu 146
0.8660
Al doilea exemplu va defini o funcţie numită cosdoix ce va
calcula cos 2x .
Deschideţi cu File>New>M-file fereastra Edit şi Introduceţi comenzile:
function y=cosdoix(x)
y=cos(x).*cos(x)-sin(x).*sin(x);
Apoi cu File>: Save As… salvaţi cu numele cosdoix. Apoi în Command
window daţi comenzile:
>> y=cosdoix(x)
>>y
y=
-0.5000
>> (1+cosdoix(x))./cosdoix(x)
ans =
-1.0000
>> 1+sindoix
??? Attempt to execute SCRIPT sindoix as a function.
Observaţie. Funcţia a putut fi utilizată într-o formulă (atenţie la
situaţia când există mai mulţi parametrii în lista de ieşire!), pe când
scriptul nu. Deci MATLAB consideră scriptul ca un şir de instrucţiuni
,pe când la funcţie importanţi sunt parametrii de ieşire. În cazul când
există doar un parametru de ieşire (care poate fi un scalar,vector sau
matrice) parantezele pătrate pot lipsi. Parantezele rotunde de la lista-
param-intrare pot lipsi doar dacă nu există nici un parametru de intrare.
Vom analiza pe rând cele două tipuri si vom sublinia avantajele,
dezavantajele şi diferenţele dintre ele.
Scriptul este pur şi simplu o secvenţă de instrucţiuni şi a apărut
din necesitatea reutilizării multiple a secvenţei respective de instrucţiuni.
Avantaje:
Introducere în MATLAB- Indrummar de laborator 147
Tabelul 11.1
>> x=1:4;
>> y=sqrt(x);
>> fprintf('y= %9.4f\n',y)
y= 1.0000
y= 1.4142
y= 1.7321
y= 2.0000
for a=0:112;
for b=0:60;
u=a/2;
w=b/2;
v=w/50-0.3;
Autori : Nicolae Mitu şi Viorel Paleu 150
X(a+1,b+1)=cos(u)+v*cos(u/2)*cos(u);
Y(a+1,b+1)=sin(u)+v*cos(u/2)*sin(u);
Z(a+1,b+1)=v*sin(u/2);
end
end
surf(X,Y,Z)
view(55, 50)
shading interp
function y=radpat(x,prec)
% Functia radpat calculeaza radacina patrata a lui x
% Se utilizeaza faptul ca sirul a(n)=0.5*(a(n-1)+x/a(n-1)) tinde catre
% radicalul lui x
% Apelul se face cu y=radpat(x,prec) sau radpat(x,prec)
% parametrii intrare
% x numarul din care se extrage radicalul
% prec precizia dorita
% parametrii iesire
% y radacina patrata a lui x cu precizia prec
% variabile locale
% maxit numarul maxim de iteratii
% it iteratia curenta
% yold valoarea lui y din iteratia anterioara
Introducere în MATLAB- Indrummar de laborator 151
maxit=1000;
it=0;
y=0.1;
yold=1;
while abs(yold-y)>prec & it<maxit
yold=y;
y=0.5*(yold+x/yold);
it=it+1;
end
if it==maxit
disp('Atentie!! S-au depasit numarul maxim de iteratii');
end
>> radpat(7,0.001)
ans =
2.6458
Observaţie Liniile care încep cu %. Ele autodocumentează
funcţia. Remarcaţi ce informaţii s-au menţionat
ce face funcţia;
ce se utilizează pentru obţinerea parametrilor de ieşire (foarte sumar);
cum se fac apelurile funcţiei;
descrierea parametrilor de intrare;
descrierea parametrilor de ieşire;
descrierea variabilelor locale;
alte informaţii
Autori : Nicolae Mitu şi Viorel Paleu 152
11.3. Aplicaţii
n
n
1 ⎛ 1⎞
3. Se ştie că şirurile: an = 1 + ∑ şi bn = ⎜1 + ⎟ au aceiaşi limită e
k =1 k ! ⎝ n⎠
(numărul lui Euler), adică în MATLAB exp(1)=2.71828182845905.
Definiţi funcţiile e1, (respectiv e2), care utilizând şirul an, (respectiv bn),
să calculeze pe e (dată ieşire) cu precizia prec(dată intrare), indicând şi
câţi termeni din şir au fost evaluaţi în it (dată ieşire) . Comparând cei
doi it obţineţi deduceţi care din cele două şiruri converge mai rapid la e.
11.4. Indicaţii
11.5. Soluţii
1.
Autori : Nicolae Mitu şi Viorel Paleu 156
Fig.11.2
g
>> x=1;
>> tipvar(x)
ans =
scalar
>> z=[1 2 3];
>> tipvar(z)
ans =
vector
>> w=[1 2;3 4];
>> tipvar(w)
ans =
matrice
Introducere în MATLAB- Indrummar de laborator 157
2.
Fig.11.3
Autori : Nicolae Mitu şi Viorel Paleu 158
Fig.11.4
>> x=1.82;
>> u='yd';
>> lmet(x,u)
ans =
1.6562
>> x=0.023;
>> u='mlm';
>> lmet(x,u)
ans =
42.5960
>> u='kkk';
>> lmet(x,u)
Introducere în MATLAB- Indrummar de laborator 159
3. Funcţia e1:
Fig.11.5
Fig.11.6
Autori : Nicolae Mitu şi Viorel Paleu 160
Funcţia e2:
Fig.11.7
>> [y1,i1]=e1(0.001);
>> [y2,i2]=e2(0.001);
>> i1
i1 =
7
>> i2
i2 =
1359
Se observă faptul că primul şir este mult mai rapid convergent.
Dar chiar dacă rulăm programele la infinit nu vom obţine niciodată
valoarea exactă a lui e !!! (nici exp(1) nu este valoarea exactă a lui e!!).
Numărul e este o abstracţie tipic umană. Este un număr cu o infinitate
Introducere în MATLAB- Indrummar de laborator 161
4. Funcţia brrc:
Fig.11.8
Autori : Nicolae Mitu şi Viorel Paleu 162
Fig.11.9
Scriptul tabel este:
Fig.11.10
5. Funcţia indvect:
Fig.11.11
Introducere în MATLAB- Indrummar de laborator 165
Fig.11.12
>> a=[1 2 3;4 5 6;7 8 9]
a=
1 2 3
4 5 6
7 8 9
>> indvect(a,2,3)
ans =
8
>> [i,j]=vectind(a,8)
i=
2
j=
3
Autori : Nicolae Mitu şi Viorel Paleu 166
LUCRAREA 12
vy V
α vx
−∆ v 2 sin 2 α
Înălţimea maxima este data de y max = = (de la
4a 2g
funcţia de gradul 2!!)
D. Evident vom utiliza programul MATLAB pentru
implementare şi vom defini o funcţie numită zbor:
function [distanta, durata]=zbor(viteza,unghi)
% funcţia calculează distanţa şi durata unui zbor prin aruncare
%
% Apelare [distanta,durata]=zbor(viteza,unghi)
%
% parametrii intrare
Introducere în MATLAB- Indrummar de laborator 171
xlabel(’Distanta [m] ’)
ylabel (’Inaltimea [m] ’)
disp(’inaltimea maxima’)
ymax=v*sin(alfa)/g
E. Problema este prea simplă ca să comporte testări complexe. Apelarea
funcţie cu datele iniţiale din problemă a condus la următoarele rezultate:
>> [dh,dt]=zbor(50,30);
Inaltimea maxima
ymax =
6.3658
>> dh
dh =
44.1033
>> dt
dt =
2.2784
Deci înălţimea maximă a fost de 6.3659m, distanţa parcursă de
44.1033m, iar durata zborului 2.2784s. Graficul traiectoriei este:
Introducere în MATLAB- Indrummar de laborator 173
Fig.12.1
Cum ne şi aşteptam o formă de parabolă.
Observaţie. În toate lucrările de până acum la rubrica Indicaţii se
prezentau pe scurt primele 4 puncte din etapele de rezolvare a unei
probleme, iar la rubrica Soluţii cel de-al cincilea punct. Nu vom prezenta
niciodată la rubrica indicaţii aşa de amănunţit o problemă aşa cum am
făcut mai sus.
Autori : Nicolae Mitu şi Viorel Paleu 174
12.3. Aplicaţii
α
C Β
h
D
d
Fig. 12.2
Introducere în MATLAB- Indrummar de laborator 175
G2
A B
Ns G11
Nf
1.5a a 1.5a
Fig. 12.3
r
h
Fig. 12.4
Introducere în MATLAB- Indrummar de laborator 177
I 2
R 2 R 3
+
U - R I R
I 4 5
1 3
Fig. 12.5
d c
b
G1 G
G2
A B
NA NB
a
Fig.12.6
Introducere în MATLAB- Indrummar de laborator 179
12.4. Indicaţii
de potenţial) este nulă. Se pot obţine astfel multe ecuaţii dar numai
L-N+1=3 sunt independente. Adică exact câte necunoscute avem. Acest
lucru înseamnă că soluţia este unică. Pentru obţinerea celor 3 ecuaţii
independente am ales următoarele 3 circuite închise:
1 – circuitul ce conţine sursa de tensiune U,rezistenţa R2 şi rezistenţa R4;
2 – circuitul ce conţine rezistenţa R1, rezistenţa R2 şi rezistenţa R3;
3 – circuitul ce conţine rezistenţa R3, rezistenţa R4 şi rezistenţa R5.
Pentru circuitul 1 pe latura rezistenţei R2 diferenţa de potenţial
este V2=R2I1-R2I2, iar pentru latura rezistenţei R4 este V4= R4I1- R4I3.
Sursa U are tensiunea –VU cu semn contrar potenţialului rezistenţelor
(rezistenţele consumă curent, sursele produc curent). Deci ecuaţia este:
−VU + R2 ⋅ ( I1 − I 2 ) + R4 ⋅ ( I1 − I 3 ) = 0
Analog pentru circuitele 2 şi 3 se obţin ecuaţiile:
R1 ⋅ I 2 + R3 ⋅ ( I 2 − I 3 ) + R2 ⋅ ( I 2 − I1 ) = 0
R5 ⋅ I 3 + R3 ⋅ ( I 3 − I 2 ) + R4 ⋅ ( I 3 − I1 ) = 0
Pentru a rezolva acest sistem liniar în necunoscutele I1, I2, I3
trebuie să-l aducem la forma canonică. Obţinem sistemul:
⎧ ( R2 + R4 ) I1 − R2 I 2 − R4 I 3 = VU
⎪
⎨ − R2 I1 + ( R1 + R2 + R3 ) I 2 − R3 I 3 = 0
⎪− R I − R I + ( R + R + R ) I = 0
⎩ 4 1 3 2 3 4 5 3
>> b=[vu;0;0]
b=
vu
0
0
>> sol=A\b
sol =
vu*(r2*r3+r3*r1+r4*r1+r4*r2+r4*r3+r5*r1+r2*r5+r5*r3)/(r4*r2*r1+r4
*r5*r1+r4*r2*r5+r4*r5*r3+r4*r3*r1+r2*r5*r1+r2*r5*r3+r2*r3*r1)
vu*(r2*r5+r2*r3+r4*r3+r4*r2)/(r4*r2*r1+r4*r5*r1+r4*r2*r5+r4*r5*r3
+r4*r3*r1+r2*r5*r1+r2*r5*r3+r2*r3*r1)
vu*(r2*r3+r4*r1+r4*r2+r4*r3)/(r4*r2*r1+r4*r5*r1+r4*r2*r5+r4*r5*r3
+r4*r3*r1+r2*r5*r1+r2*r5*r3+r2*r3*r1)
>> subs(sol,[vu,r1,r2,r3,r4,r5],[200,5,5,5,15,15])
Rezultă:
max G1( 2d + a ) − G ( 2b − a )
max G 2 =
2c − a
Pentru calculul tabelului vom da valori lui c cuprinse între 4 şi 8
m.
Observaţie. Din cele de mai sus rezultă că 2b-a>0,2c-a>0 şi 2d-
a>0. Dacă 2b-a<0 atunci minG1=0. (Centrul de greutate G este plasat
între roti şi macaraua este stabilă fără încărcătură)
Scriptul macara care face aceste calcule este:
% initializare date cunoscute
G=10000;
a=1.2;
b=1;
c=4:0.5:8;
d=2;
% teste de validare
if 2*b-a<0
disp(' a incompatibil cu b - rezultate eronate')
elseif 2*c-a<0
disp(' a incompatibil cu c - rezultate eronate')
elseif 2*d-a<0
disp(' a incompatibil cu d - rezultate eronate')
end
% calculele
minG1=(2*b-a)/(2*d+a)*G;
disp(['Valoarea minima a lui G1 este: ',num2str(minG1)])
maxG1=(2*b+a)/(2*d-a)*G;
disp(['Valoarea maxima a lui G1 este: ',num2str(maxG1)])
maxG2=(maxG1*(2*d+a)-G*(2*b-a))./(2*c-a);
disp(['Val. maxima a lui G2 pentru c=8 este: ',num2str(maxG2(end))])
Introducere în MATLAB- Indrummar de laborator 187
% tabelul
disp(' c maxG2')
for ind=1:length(c)
disp([' ',num2str(c(ind)),' ',num2str(maxG2(ind))])
end
12.5. Soluţii
1.
>> cladire
>> y
y=
53.7615
Deci y=53.76m.
2.
>> ridic
>> nf
nf =
6700
>> ns
ns =
300
3. Varianta 1
>> p143v1
Costul minim in euro este:
1.0812e+005
Raza minima in metrii este:
4.2040
Autori : Nicolae Mitu şi Viorel Paleu 188
Fig.12.7
Introducere în MATLAB- Indrummar de laborator 189
4.
>> subs(sol,[vu,r1,r2,r3,r4,r5],[200,5,5,5,15,15])
ans =
20
10
10
Deci I1=20A, I2=10A, I3=10A.
LUCRAREA 13
>> x=[1,-2,4]
Introducere în MATLAB- Indrummar de laborator 191
x=
1 -2 4
>> y=[2,1,5]
y=
2 1 5
>> x+y
ans =
3 -1 9
>> x-y
ans =
-1 -3 -1
Şi înmulţirea cu o constantă se face în mod obişnuit:
>> 3*x
ans =
3 -6 12
>> -2*y
ans =
-4 -2 -10
Lungimea segmentului din săgeată se numeşte mărimea
vectorului şi se obţine cu funcţia MATLAB norm:
>> norm(x)
ans =
4.5826
>> norm(y)
ans =
5.4772
Produsul scalar a doi vectori se face cu funcţia dot :
Autori : Nicolae Mitu şi Viorel Paleu 192
>> dot(x,y)
ans =
20
Produsul vectorial a doi vectori z=xXy se face cu ajutorul
funcţiei MATLAB cross şi este evident tot un vector :
>> z=cross(x,y)
z=
-14 3 5
Produsul exterior a doi vectori este o matrice care se obţine în
MATLAB înmulţind transpusa lui x cu y:
>> x'*y
ans =
2 1 5
-4 -2 -10
8 4 20
Vectorul unitate ux( are mărimea 1. deci norm(ux)=1) pe direcţia
lui x se obţine cu formula:
>> ux=x/norm(x)
ux =
0.2182 -0.4364 0.8729
>> norm(ux)
ans =
1
Unghiul ( în radiani) dintre vectorii x şi y se obţine cu formula:
>> alfa=acos(dot(x,y)/(norm(x)*norm(y)))
alfa =
Introducere în MATLAB- Indrummar de laborator 193
0.6488
>> alfagr=alfa*180/pi
alfagr =
37.1726
Deci unghiul dintre vectorii x şi y este de 0.6488 radiani sau
37.1726o.
Vom spune că doi vectori sunt ortogonali dacă dot(x,y)=0.
evident din formula de mai sus rezultă că unghiul dintre ei este 90o.
Proiecţia z a vectorului x pe vectorul y este de forma ay unde a este o
constantă ce se cere determinată. În MATLAB această constantă este :
>> a=dot(x,y)/norm(y)^2
a=
0.6667
Deci z=0.6667y.
Autori : Nicolae Mitu şi Viorel Paleu 194
13.3. Aplicaţii
E
D
C
O
15 B
O
45
30 O 500 m
45O
30 O
Fig.13.1
Introducere în MATLAB- Indrummar de laborator 195
t[s]
0
20 s ∆t 40 s
-1
I II III
Fig.13.2
O
360
O
0
CURENT
Y L
α
VAPOR
O O
270 90
VANT
O
180
Fig.13.3
13.4. Indicaţii
%segmentul BE
be=ab^2/bc;
% segmentul DE
ae=ab*su45/su30;
de=ae*su15/sud;
% segmentul CD cerut
cd=be-bc-de;
disp(['distanta dintre debarcadere este: ',num2str(cd),' metrii'])
acceleraţiei: a = ⇒ ∆v = ∫ a dt .
dt t0
t3 t1 t2 t3 t1 t2 t3
∫ a dt = ∫ a dt + ∫ a dt + ∫ a dt = ∫ aI dt + ∫ aII dt + ∫ aIII dt =
t0 t0 t1 t2 t0 t1 t2
t1 t2 t3
2
Scriptul metrou de mai jos face calculele :
% date initiale
acci=1;
accii=2;
acciii=-2;
deltati=20;
deltatiii=40;
% calculul lui deltaii
deltatii=-(acci*deltati+acciii*deltatiii)/accii;
% primul interval
Autori : Nicolae Mitu şi Viorel Paleu 200
vi=acci*deltati;
di=0.5*acci*deltati^2;
% al doilea interval
vii=vi+accii*deltatii;
dii=di+vi*deltatii+0.5*accii*deltatii^2;
% intervalul al treilea
diii=dii+vii*deltatiii+0.5*acciii*deltatiii^2;
disp(['durata intervalului este : ',num2str(deltatii),'s'])
disp(['distanta dintre statii este : ',num2str(dii),'m'])
13.5. Soluţii
1.
>> distcd
distanta dintre debarcadere este: 896.5755 metri
2.
>> metrou
durata intervalului II este : 30s
distanta dintre statii este : 1700m
3.
>> vapor
vectorul viteza al navei este
V=
10.0000 17.3205
vectorul viteza al curentului mareic este
S=
1.0000 -1.7321
vectorul viteza al vantului este
T=
-0.4932 0.0823
viteza reala a navei in noduri este
vrn =
18.8671
cursul vasului in grade este:
alfa =
56.1592
Se remarcă o deviere de aproape 4 grade de la curs şi o reducere a vitezei
cu 1.1 noduri, cauzate de maree şi vânt. Cu ce unghi trebuie să
Introducere în MATLAB- Indrummar de laborator 203
LUCRAREA 14
14.3. Aplicaţii
C
R
M X
S
Fig.14.1
y
Brat de robot
A
Mana
L2
α2
L1
Cot
α1 X
Baza
Fig.14.2
14.4. Indicaţii
function roata(r,auc,tf)
Autori : Nicolae Mitu şi Viorel Paleu 208
% Partea II
% graficul traiectoriilor
%Traiectoria lui O
ec=vc.*t'+i*r;
%Traiectotia lui M
em=ec-r*vnc;
plot(real(ec),imag(ec),'r',real(em),imag(em),'b')
title('Traiectoria lui O (rosu) si M (albastru)')
disp('Tasteaza orice tasta pentru a continua.......');
pause;
% partea III
Autori : Nicolae Mitu şi Viorel Paleu 210
% generarea animatie
%desenul initial
%generarea partii fixe-fundalul, baza fiind dependenta de r si ex(end)
xdr=real(ec(end))/2;
ydr=r;
s0=fundal(xdr,-ydr/2,2*xdr,ydr,0);
hd0=fill(s0.x,s0.y,'c');
title('Miscarea cu rostogolire a unei roti - viteza');
hold on; % comanda care fixează fundalul
axis equal;
axis manual;
axis off;
disp('Tasteaza orice tasta pentru animatie.......');
pause;
n=max(size(alfa));
for l=1:n,
Introducere în MATLAB- Indrummar de laborator 211
coord.x(3)=xc+xl/2*ca-yl/2*sa;
coord.y(3)=yc+xl/2*sa+yl/2*ca;
coord.x(4)=xc-xl/2*ca-yl/2*sa;
coord.y(4)=yc-xl/2*sa+yl/2*ca;
coord.x(5)=coord.x(1);
coord.y(5)=coord.y(1);
function coord=disc(xc,yc,r,a)
%coord=disc(xc,yc,r,a)
%coord.x coord.y
%calculul coordonatelor unui disc de centru (xc,yc), de raza r. (24 laturi)
%o raza este desenată la unghiul a.
n=12;%1/2 numar de laturi
th=a:pi/n:a+2*pi;
coord.x=zeros(1,2*n+2);
coord.y=zeros(1,2*n+2);
coord.x=xc+r*cos(th);
coord.y=yc+r*sin(th);
coord.x(2*n+2)=xc;
coord.y(2*n+2)=yc;
function coord=vector(xa,ya,r,a)
%coord=vector(xa,ya,r,a)
%coord.x coord.y
%calculul coordonatelor unui vector cu punctul de aplicare (xa,ya),
%de lungime r si avand un unghi a
coord.x=zeros(1,5);
coord.y=zeros(1,5);
coord.x(1)=xa;
coord.y(1)=ya;
b=xa+i*ya+r*exp(i*a);
Introducere în MATLAB- Indrummar de laborator 213
coord.x(2)=real(b);
coord.y(2)=imag(b);
% an unghiul varfurilor sagetii
an=165*pi/180;
c=b+0.2*r*exp(i*(a+an));
d=b+0.2*r*exp(i*(a-an));
coord.x(3)=real(c);
coord.y(3)=imag(c);
coord.x(4)=real(d);
coord.y(4)=imag(d);
coord.x(5)=coord.x(2);
coord.y(5)=coord.y(2);
% date initiale
xa10=-19*pi/180;
xa1tf=43*pi/180;
xtf=10;
xa20=44*pi/180;
xa2tf=151*pi/180;
L1=1.2;
L2=0.9;
% calculul simbolic al functiilor
syms a1tf a10 tf t a2tf a20
x=[tf^3,tf^4,tf^5;3*tf^2,4*tf^3,5*tf^4;6*tf,12*tf^2,20*tf^3]
y=[a1tf-a10;0;0]
a=x\y;
alfa1=a10+a(1)*t^3+a(2)*t^4+a(3)*t^5;
Introducere în MATLAB- Indrummar de laborator 215
z=[a2tf-a20;0;0];
b=x\z;
alfa2=a20+b(1)*t^3+b(2)*t^4+b(3)*t^5;
% functia alfa1 pentru cazul dat
disp('alfa1')
falfa1=subs(alfa1,{a10,a1tf,tf,t},{xa10,xa1tf,xtf,t})
disp('alfa2')
falfa2=subs(alfa2,{a20,a2tf,tf,t},{xa20,xa2tf,xtf,t})
% calculul traiectoriei punctului A
tt=0:0.1:xtf;
% vectorul unghiurilor alfa1 de la 0 la tf
aa1=double(subs(falfa1,t,tt));
% vectorul unghiurilor alfa2 de la 0 la tf
aa2=double(subs(falfa2,t,tt));
% calculul pozitiei lui A
x=L1*cos(aa1)+L2*cos(aa1+aa2);
y=L1*sin(aa1)+L2*sin(aa1+aa2);
% Traiectoria lui A
plot(x,y,'r')
title('Traiectoria punctului A')
T ( m − 1, n ) + T ( m, n − 1) + T ( m + 1, n ) + T ( m, n + 1)
T ( m, n ) =
4
⎜ 2 ⎜⎜ A ⎜ d 2 ⎟ B⎜ d 2 ⎟ ⎟⎟ ⎟
⎜ ⎝ ⎝ ⎠ ⎝ ⎠⎠ ⎟
TV = ⎜ ⎟
⎜ ⎛ ( xC − xV ) + ( yC − yV ) ⎞
2 2 ⎛ ( xD − xV ) + ( yD − yV ) ⎞ ⎟
2 2
(50, 50)
(m-1,n)
A B
(m+1,n)
V
C D
(0, 0)
Fig.14.3
end
end
if all(new-old <= toler)
equilibrium = 1;
disp('Temperaturi finale');
disp(new)
end
old = new;
end
% Calculul lui tv
% Determinarea colturilor dreptunghiului lui tv
dx=lx/(nrc-1);
dy=ly/(nrr-1);
vecx=zeros(1,nrc);
vecy=zeros(1,nrr);
for ind=2:nrc
vecx(ind)=dx*(ind-1);
if vx<vecx(ind)
xst=vecx(ind-1);
ms=ind-1;
xdr=vecx(ind);
md=ind;
break
end
end
for ind=2:nrr
vecy(ind)=dy*(ind-1);
if vy<vecy(ind)
yjos=vecy(ind-1);
nj=ind-1;
Autori : Nicolae Mitu şi Viorel Paleu 220
ysus=vecy(ind);
ns=ind;
break
end
end
dg=sqrt(dx^2+dy^2); % diagonala dreptunghiului
tv=1/2*new(ms,ns)*(1-sqrt((xst-vx)^2+(ysus-vy)^2)/dg);
tv=tv+1/2*new(md,ns)*(1-sqrt((xdr-vx)^2+(ysus-vy)^2)/dg);
tv=tv+1/2*new(ms,nj)*(1-sqrt((xst-vx)^2+(yjos-vy)^2)/dg);
tv=tv+1/2*new(md,nj)*(1-sqrt((xdr-vx)^2+(yjos-vy)^2)/dg);
disp(' temperatura in punctul V este :')
disp(tv)
surf(new)
14.5. Soluţii
1.
>> roata(0.7,-0.001,125)
Vectorul viteză al lui M este : [0.098361,-0.086823]
mărimea şi unghiul vitezei în M : 0.1312,318.5651
Vectorul acceleraţie al lui M este : [-0.010066,-0.0020522]
mărimea şi unghiul acceleraţiei în M : 0.010273,-168.4769
Tastează orice tastă pentru a continua.......
Introducere în MATLAB- Indrummar de laborator 221
Fig.14.4
2.
falfa1 =
-19/180*pi+31/9000*pi*t^3-31/60000*pi*t^4+31/1500000*pi*t^5
falfa2 =
11/45*pi+107/18000*pi*t^3-107/120000*pi*t^4+107/3000000*pi*t^5
Autori : Nicolae Mitu şi Viorel Paleu 222
3.
>> Temperatura
Numar de linii 6
Numar de coloane 6
temperatura la nord 100
Temperatura la sud 50
Temperatura la vest 100
Temperatura la est 100
Toleranta 0.01
lungimea placii lx= 50
latimea placii ly= 50
abscisa lui V, vx= 21.18
ordonata lui V, vy= 34.55
Introducere în MATLAB- Indrummar de laborator 223
Temperaturi initiale
100 100 100 100 100 100
100 0 0 0 0 100
100 0 0 0 0 100
100 0 0 0 0 100
100 0 0 0 0 100
50 50 50 50 50 50
Temperaturi finale
100.0000 100.0000 100.0000 100.0000 100.0000 100.0000
100.0000 97.7127 96.3779 96.3779 97.7127 100.0000
100.0000 94.4840 91.4391 91.4391 94.4840 100.0000
100.0000 88.8022 83.4846 83.4846 88.8022 100.0000
100.0000 77.2582 70.2416 70.2416 77.2582 100.0000
50.0000 50.0000 50.0000 50.0000 50.0000 50.0000
Graficul temperaturilor:
Autori : Nicolae Mitu şi Viorel Paleu 224
Fig.14.5
Introducere în MATLAB- Indrummar de laborator 225
LUCRAREA 15
>> 3/(2+3))
??? 3/(2+3))
|
Error: Unbalanced or misused parentheses or brackets.
>> x=2;
>> 5*(4+2x)
??? 5*(4+2x)
|
Autori : Nicolae Mitu şi Viorel Paleu 226
>> 1+2*sinx
??? Undefined function or variable 'sinx'.
Eroarea constă în scrierea incorectă a funcţiei sin x. În MATLAB
toate funcţiile au argumentul scris între paranteze rotunde. Deci corect
este sin(x).
Erorile sintactice sunt uşor de depistat pentru că ni le semnalează
MATLAB. Un program nu este executat de MATLAB până când nu mai
are nici o eroare sintactică.
Odată lansat în execuţie un program MATLAB poate depista o
altă clasă de erori numită ’ erori de execuţie’. Exemplul tipic este
împărţirea cu 0. Şi alte tipuri de funcţii şi operaţii pot duce la rezultate
nedorite: NaN, Inf sau empty matrix:
>> x=-2:0.1:2;
>> y=x;
>> [x,y]=meshgrid(x,y);
>> z=x.*sin(y)./(x.^2-y.^2);
Warning: Divide by zero.
>> x=-2:0.1:2;
>> y=x;
>> [x,y]=meshgrid(x,y);
>> xxyy=x.^2-y.^2;
>> xxyy=xxyy+(xxyy==0)*eps;
>> z=x.*sin(y)./xxyy;
Fig.15.1
Lansăm in execuţie scriptul:
>> A=ones(1000,1000);
>> B=A;
>> inm
Elapsed time is 0.031000 seconds.
Elapsed time is 0.063000 seconds.
>> t=0:0.01:100000;
>> i=0;
>> vecsin
Elapsed time is 4.453000 seconds.
Elapsed time is 4.719000 seconds.
Iar scriptul este:
Autori : Nicolae Mitu şi Viorel Paleu 230
Fig.15.2
>> n=70;
>> testfb
Elapsed time is 0.000000 seconds.
Elapsed time is 0.016000 seconds.
Elapsed time is 0.016000 seconds.
Fig.15.3
Fig.15.4
Fig.15.5
Fig.15.6
15.2. Aplicaţii
1.Scrieţi exact aşa cum este scris scriptul supr1, apoi depanaţi-l :
x=-2:0,2:2;
y=(6-x)./(3-x;
(x,y)=meshgraid(x,y);
z=(x.^2+y.^2)/(x*y);
Surf(x,y,z)
2.Să se determine matricea alab ale cărui elemente sunt obţinute din
elementele a doi vectori a şi b astfel: fiecare element al lui a este ridicat
la puterea fiecare element al lui b. De exemplu dacă a=[1,2] şi b= [2,3],
⎡11 21 ⎤ ⎡1 4 ⎤
atunci alab va fi alab = ⎢ 3 3 ⎥ , adică: alab = ⎢1 8 ⎥
⎣1 2 ⎦ ⎣ ⎦
3. Tips and tricks. Sub acest nume în informatică se înţelege şmecheria,
trucul cu care obţinem mai rapid o soluţie. În acest punct de vedere
vectorizarea pare că face parte din această categorie.
a) Cum definim o matrice a cărui elemente sunt egale cu un număr dat.
Da-ti cel puţin două soluţii.
b) Cum obţinem un vector a cărui elemente sunt în ordine inversă cu cele
ale unui vector dat? Da-ţi o soluţie cu buclă şi una vectorizată.
c) Cum definim o matrice de tip mXn cu coloane identice cu un vector
dat? Daţi cel puţin două soluţii.
if cond
prelucrare1 a(i,j);
else
prelucrare2 a(i,j);
end
end
end
De exemplu pentru condiţie avem a(i,j)>5, iar prelucrare 1 poate
fi a(i,j)=a(i,j)=5, iar prelucrare 2 : a(i,j)=-a(i,j).
Cum se scrie această secvenţă fără nici un for şi fără if?
15.3. Indicaţii
1.Erori sintactice:
Linia 1 col. 7 – se pune punct în loc de virgula zecimală (notaţia
americană);
Linia 2 col .14 – paranteză închisă;
Linia 3 col. 3 – paranteze pătrate pentru parametrii de ieşire;
Linia 3 col. 7 – funcţia meshgraid inexistentă (este meshgrid);
Linia 4 col. 14 – operaţia de împărţire cu punct;
Linia 4 col. 18 – operaţia de împărţire cu punct;
Linia 5 col. 1 - funcţia surf cu litera s mic;
Erori de execuţie:
Linia 4 - împărţire cu 0;
15.4. Soluţii
1.
Fig.15.7
2.
Fig.15.8
Introducere în MATLAB- Indrummar de laborator 239
3.
Fig.15.9
Execuţia:
>> a=1:10000;
>> b=1:20;
>> alab1
Elapsed time is 2.516000 seconds.
>> alab2
Elapsed time is 0.250000 seconds.
Se remarcă timpul mult mai mic al scriptului vectorizat.
for j=1:n
M(i,j)=v(i);
end
end
Variantele vectorizate sunt:
N=v(:,ones(n,1))
Sau
O=repmat(v,1,n)
Fig.15.10
Fig.15.11
Introducere în MATLAB- Indrummar de laborator 241
Fig.15.12
Fig.15.13
Autori : Nicolae Mitu şi Viorel Paleu 242
Punerea în execuţie:
>> A=[ 0 0 1 ;0 1 0 ;0 0 1 ;1 1 2 ;0 2 1 ; 0 0 0 ;0 0 2 ];
A=
0 0 1
0 1 0
0 0 1
1 1 2
0 2 1
0 0 0
0 0 2
>> y=indlinie(A)
y=
1 3
2 2
3 3
4 1
5 2
7 3
>> y=indliniv(A)
y=
1 3
2 2
3 3
4 1
5 2
7 3
Pe fiecare linie a lui y prima valoare este linia , iar a doua valoare
este coloana elementelor căutate.
Introducere în MATLAB- Indrummar de laborator 243
Fig.15.14
Fig.15.15
Autori : Nicolae Mitu şi Viorel Paleu 244
Punerea în execuţie:
>> x=[1 3 0 0 0 4 5 0 0 6 0 7] ;
>> vectz(x)
ans =
1 3 3 3 3 4 5 5 5 6 6 7
>> vectzo(x)
ans =
1 3 3 3 3 4 5 5 5 6 6 7
Această problemă 6 este un exemplu că uneori vectorizarea este
complexă şi nu aduce avantaje deosebite.
Introducere în MATLAB- Indrummar de laborator 245
LUCRAREA 16
7 24 2.42788 1 2.26 1
8 27 0.032658 0.759511 0.206 2.5
9 30 7.03149e-006 0.111927 0.00294 2.5
10 33 3.29525e-013 0.00169132 6.36e-007 2.5
Optimization terminated: first-order optimality is less than
options.TolFun.
x=
0.5671
0.5671
fval =
1.0e-006 *
-0.4059
-0.4059
⎧ f1 ( x1 , x2 ,… , xn )
⎪
⎪ f ( x , x ,… , xn )
f ( x) = ⎨ 2 1 2
⎪
⎪ f n ( x1 , x2 ,… , xn )
⎩
Metoda se implementează uşor pentru sisteme relativ mici:
>>f=inline(’[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))]’); Funcţia
>>df=inline(’[2+exp(-x(1)) -1;-1 2+exp(-x(2))]’); % Jacobianul
>>x=[-5;-5];
>>for i=1:100
dx=-df(x)\f(x);
x=x+dx;
if dx<100*eps
break
end
end
>>[x f(x)]
ans =
0.5671 0.0000
0.5671 0.0000
1 1
1 1
>> X=fsolve(F,X0)
Optimization terminated: first-order optimality is less than
options.TolFun.
X=
-0.1291 0.8602
1.2903 1.1612
Verificare:
>> X^3
ans =
1.0000 2.0000
3.0000 4.0000
Autori : Nicolae Mitu şi Viorel Paleu 250
16.2. Aplicaţii
⎡5 4⎤
a) X 2 = ⎢ ⎥;
⎣4 5⎦
⎡ −1 1 ⎤
b) X 2 − 3 X = ⎢ ⎥;
⎣ 1 −1⎦
⎡4 3 1⎤
c) X − 2 x = ⎢⎢ 3 2 3 ⎥⎥ .
2
⎢⎣ 1 3 4 ⎥⎦
⎧ x3 + y = 1 ⎡ −5⎤
a) ⎨ 3 cu soluţia iniţială ⎢ ⎥ utilizând atât fsolve cât şi metoda
⎩ y − x = −1 ⎣6⎦
lui Newton;
⎧⎪ x 2 + ( y − 1)2 = 5 ⎡ −1⎤
b) ⎨ întâi cu soluţia iniţială ⎢ 0 ⎥ şi apoi cu soluţia
⎪⎩ ( )
2
x − 1 + y 2
= 1 ⎣ ⎦
⎡1 ⎤
iniţială ⎢ ⎥ ;
⎣ 2⎦
Introducere în MATLAB- Indrummar de laborator 251
⎧ x + y + z =1 ⎡2⎤
⎪ ⎢ 2 ⎥.
c) ⎨ x 2 + y 2 + z 2 = 3 cu aproximaţia iniţială ⎢ ⎥
⎪ x3 + y 3 − z 3 = 3 ⎢⎣ −2 ⎥⎦
⎩
16.3. Indicaţii
1.
a) Comenzile MATLAB pentru aflarea soluţiei sunt:
2.
a) Comenzile pentru varianta cu fsolve sunt:
Autori : Nicolae Mitu şi Viorel Paleu 252
>> F=inline('[x(1)^3+x(2)-1;x(2)^3-x(1)+1]');
>> x0=[-5;6];
>> x=fsolve(F,x0);
>>F=inline('[x(1)^3+x(2)-1;x(2)^3-x(1)+1]');
>>DF=inline('[3*x(1)^2 1;-1 3*x(2)^2]');
>>x=[-5;6];
>>for i=1:100
Dx=-DF(x)\F(x);
x=x+Dx;
end
b) Comenzile sunt:
>> f=inline('[x(1)^2+(x(2)-1)^2-5;(x(1)-1)^2+x(2)^2-1]');
>> x0=[-1;0];
>> x=fsolve(f,x0);
c) Comenzile sunt:
>>f=inline('[x(1)+x(2)+x(3)-1;x(1)^2+x(2)^2+x(3)^2-3;x(1)^3+x(2)^3-
x(3)^3-3]');
>> x0=[1;2;-2];
>> x=fsolve(f,x0);
Introducere în MATLAB- Indrummar de laborator 253
16.5. Soluţii
1.
a)
>> x
x=
2.0000 1.0000
1.0000 2.0000
b) Aceiaşi ca la a)
>> x
x=
2.0000 1.0000
1.0000 2.0000
c)
>> x
x=
2.
a) >> x
x=
1.0000
0.0000
b)
⎛1⎞
Pentru x0=[-1;0] se obţine soluţia ⎜ ⎟ ;
⎝ −1 ⎠
Autori : Nicolae Mitu şi Viorel Paleu 254
⎛ 2⎞
Pentru x0=[1’2] se obţine soluţia ⎜ ⎟
⎝0⎠
c)
x=
1.0000
1.0000
-1.0000
Introducere în MATLAB- Indrummar de laborator 255
LUCRAREA 17
⎪⎪ y2′ = f 2 ( x, y1 , y2 , , yn )
⎨
⎪
⎪ ′
⎩⎪ yn = f n ( x, y1 , y2 , , yn )
Nu vom utiliza decât funcţia ODE45 pentru rezolvarea acestor
ecuaţii. Forma generală a acestei funcţii pentru ecuaţia y’=f(x,y) este:
[x,y]=ode45(f,[a,b],v)
unde [a,b] este domeniul de valori al lui x,iar v=y(a) valoarea iniţială în
a.
Ne propunem să rezolvăm ecuaţia diferenţială simplă:
y′ = − xy 2 cu x ∈ [ 0, 2] şi condiţia iniţială y ( 0 ) = 1 .
Pentru aceasta trebuie să definim funcţia ce descrie ecuaţia asemănător
ca la sistemele neliniare din lucrarea anterioarǎ:
>> F=inline('-x*y^2')
Autori : Nicolae Mitu şi Viorel Paleu 256
F=
Inline function:
F(x,y) = -x*y^2
>> [x,y]=ode45('F',[0,2],1)
Putem acum să facem graficul funcţiei y(x). În plus ştim că
2
această problemă are soluţia y ( x ) = 2 şi vom compara graficele
x +2
soluţie aproximative cu cel al soluţiei exacte (acesta din urmă
reprezentat cu o)
>> t=0:0.1:2;
>> r=2./(t.^2+2);
>> plot(x,y,t,r,'o')
Fig.17.1
Introducere în MATLAB- Indrummar de laborator 257
⎧ y1′ = − y2 + x + 1
⎨ cu x ∈ [ 0, π ] şi y1 ( 0 ) = 1, y2 ( 0 ) = −1 .
⎩ y2′ = y1 − x + 1
>> F=inline('[-y(2)+x+1;y(1)-x+1]','x','y');
>> [x,y]=ode45(F,[0,pi],[1,-1]);
>> plot(x,y(:,1),x,y(:,2),'r',x,sin(x)+cos(x)+x,'o',x,sin(x)-cos(x)+x,'o')
Autori : Nicolae Mitu şi Viorel Paleu 258
Fig.17.2
17.3. Aplicaţii
⎧ y1′ = y1 + y2
a) ⎨ x ∈ [ 0, e ] y1 ( 0 ) = 0, y2 ( 0 ) = 1 .
⎩ y2′ = 3 y1 + y2 − 3 xe
x
⎧⎪ y ′ = − y
b) ⎨ 1 2
cu x ∈ [ 0, π ] y1 ( 0 ) = 1, y2 ( 0 ) = −1 .
′
⎪⎩ y2 = y1
Autori : Nicolae Mitu şi Viorel Paleu 260
17.4. Indicaţii
1.
a)Comenzile care trebuie date sunt următoarele:
>> F=inline('cos(x)-4*y')
>> [x,y]=ode45(F,[0,2*pi],1);
>> [x(1:5:end) y(1:5:end)]
>> plot(x,y)
>> interp1(x,y,pi/3,'cubic')
b)Comenzile sunt:
>> f=inline('1/x*(sin(x)-2*y)');
>> [x,y]=ode45(f,[pi,2*pi],1/pi);
>> [x(1:5:end),y(1:5:end)]
>> plot(x,y)
>> interp1(x,y,4*pi/3,'cubic')
c) Comenzile sunt:
2.
a) Comenzile sunt:
Introducere în MATLAB- Indrummar de laborator 261
>> F=inline('[y(1)+y(2);3*y(1)+y(2)-3*x*exp(x)]','x','y');
>> [x,y]=ode45(F,[0,exp(1)],[0,1]);
>> plot(x,y(:,1),x,y(:,2),'r')
b) Comenzile sunt:
>> f=inline('[-y(2);y(1)]','x','y');
>> [x,y]=ode45(f,[0,pi],[1,-1]);
>> plot(x,y(:,1),x,y(:,2),'r')
17.5. Soluţii
1.
a)
>> [x(1:5:end) y(1:5:end)]
ans =
0 1.0000
0.1211 0.7117
0.3885 0.4017
0.6640 0.2753
0.9737 0.1965
1.3695 0.1079
1.8715 -0.0131
2.4039 -0.1345
2.8895 -0.2131
3.3212 -0.2420
3.7409 -0.2275
4.1569 -0.1741
4.5738 -0.0907
Autori : Nicolae Mitu şi Viorel Paleu 262
4.9920 0.0084
5.4297 0.1104
5.8940 0.1954
6.2832 0.2353
>> interp1(x,y,pi/3,'cubic')
ans =
0.1802
Fig.17.3
b)
>> [x(1:5:end) y(1:5:end)]
ans =
3.1416 0.3183
3.5343 0.2308
Introducere în MATLAB- Indrummar de laborator 263
3.9270 0.1342
4.3197 0.0391
4.7124 -0.0450
5.1051 -0.1104
5.4978 -0.1520
5.8905 -0.1679
6.2832 -0.1592
>> interp1(x,y,4*pi/3,’cubic’)
ans =
0.0700
Fig.17.4
Autori : Nicolae Mitu şi Viorel Paleu 264
c)
>> [x(1:5:end) y(1:5:end)]
ans =
1.0000 0
1.2500 -0.0500
1.5000 -0.1682
1.7500 -0.3330
2.0000 -0.5463
2.2500 -0.8328
2.5000 -1.2602
2.7500 -2.0328
3.0000 -4.1318
>> interp1(x,y,2.654,’cubic’)
ans =
-1.6684
Fig.17.5
Introducere în MATLAB- Indrummar de laborator 265
2.
a)
Fig.17.6
b)
Fig.17.7
Autori : Nicolae Mitu şi Viorel Paleu 266
LUCRAREA 18
(
y ( n ) = f x, y, y′, y′′, , y ( n −1) )
prin substituţia următoare: y = y1 , y′ = y2 , y′′ = y3 , , y ( n − ) = yn devine
un sistem de ecuaţii diferenţial de ordinul I :
⎧ y1′ = y2
⎪ y2′ = y3
⎪⎪
⎨
⎪ yn′ −1 = yn
⎪
⎪⎩ yn′ = f ( x, y1 , y2 , , yn )
Conform celor de mai sus notăm y=y1 şi y’=y2. Evident y′′ = y2′
şi obţinem sistemul:
⎧ y1′ = y2
⎨
⎩ y2′ = 3 y2 − 2 y1
>> F=inline('[y(2);3*y(2)-2*y(1)]','x','y')
F=
Inline function:
F(x,y) = [y(2);3*y(2)-2*y(1)]
>> [x,y]=ode45(F,[0,1],[1,2]);
>> plot(x,y(:,1),x,exp(2*x),'ro')
Fig.18.1
Autori : Nicolae Mitu şi Viorel Paleu 268
18.2. Aplicaţii
18.3. Indicaţii
1.
a) Transformăm ecuaţia într-un sistem:
⎧ y1′ = y2
⎨
⎩ y2′ = −2 y1 − 2 y2 + 4 cos x
Introducere în MATLAB- Indrummar de laborator 269
Comenzile sunt:
>> F=inline('[y(2);-2*y(1)-2*y(2)+4*cos(x)]','x','y');
>> [x,y]=ode45(F,[0,10],[-1,2]);
>> plot(x,y(:,1))
⎧ y1′ = y2
⎪
⎨ cos x − y1
⎪⎩ y2′ = x
Comenzile sunt:
>> F=inline('[y(2);(cos(x)-y(1))/x]','x','y');
>> [x,y]=ode45(F,[1,3],[2,5]);
>> plot(x,y(:,1))
⎧ y1′ = y2
⎪
⎪
⎨ y2′ = y3
⎪
⎪⎩ y3′ = − y1 − y2 − y3
Comenzile sunt:
>> f=inline('[y(2);y(3);-y(1)-y(2)-y(3)]','x','y');
>> [x,y]=ode45(f,[0,pi],[0;1;0]);
>> plot(x,y(:,1))
Autori : Nicolae Mitu şi Viorel Paleu 270
18.4. Soluţii
1.
a)
Fig.18.2
b)
Fig.18.3
Introducere în MATLAB- Indrummar de laborator 271
c)
Fig.18.4
Autori : Nicolae Mitu şi Viorel Paleu 272
LUCRAREA 19
I 2
R 2 R 3
+
U -
I R
I
5
1 D 3
Fig.19.1
Introducere în MATLAB- Indrummar de laborator 273
19.2. Indicaţii
⎧ ⎛ I1 ⎞
⎪ R2 I1 − R2 I 2 + VT ⋅ ln ⎜ ⎟ = VU
⎪ ⎝ I3 ⎠
⎪
⎨ − R2 I1 + ( R1 + R2 + R3 ) I 2 − R3 I 3 = 0
⎪
⎪− R I + ( R + R ) I − V ⋅ ln ⎜⎛ I1 ⎟⎞ = 0
⎪⎩ 3 2 3 5 3 T
⎝ I3 ⎠
Pentru rezolvare vom utiliza funcţia fsolve considerând pentru
datele numerice date, vectorul valoare iniţială v=[2;1;1]
>> f=inline('[5*x(1)-5*x(2)+15*log(x(1)/x(3))-5;-5*x(1)+15*x(2)-
5*x(3);-5*x(2)+20*x(3)-15*log(x(1)/x(3))]');
>> s=fsolve(f,[2;1;1])
⎧ x1 = x2
⎪
⎨ c1 c2
⎪⎩ x2 = g − m x2 − m x2 x2 − kx1
Acest sistem îl putem rezolva cu ode45, dar nu cunoaştem
lungimea lun a coardei elastice. Pentru început putem presupune că
această lungime este lun=30 m. Odată rezolvat ne propunem să vedem
dacă această lungime este optimă. Pentru aceasta calculăm dl=98-
max(y(:,1)) adică diferenţa dintre 98 şi maximumul atins de coardă.
Dacă este 0 (sau măcar o diferenţă mai mică decât toleranţa) am
găsit soluţia problemei. Dacă dl nu este 0, facem incrementarea
lun=lun+dl/2 şi reluăm procesul de rezolvare al ecuaţiei diferenţiale dar
cu noua lungime. Continuăm până când dl este 0 (sau mai mic decât
toleranţa aici 1 cm). Scriptul bjex de mai jos utilizează funcţia bjfun
pentru descrierea sistemului. O singură observaţie, funcţia elastică
acţionează doar când poziţia x a corpului depăşeşte lungimea lun.
function xdt=bjfun(t,x,lun)
m=100;
g=9.8;
c1=1;
c2=1;
k=40;
gr=m*g;
ra=-c1*x(2)-c2*abs(x(2))*x(2);
if x(1)<lun
fe=0;
else
fe=-k*(x(1)-lun);
end
xdt=[x(2);(gr+ra+fe)/m];
Introducere în MATLAB- Indrummar de laborator 277
Şi acum scriptul
y=zeros(200,2);
lun=30;
ind=1;
while abs(max(y(:,1))-98)>0.01
[t,y]=ode45(@bjfun,[0,70],[0;0],[],lun);
dl=98-max(y(:,1))
lun=lun+dl/2;
ind=ind+1;
if ind>20
break
end
end
disp([' lungimea este :',num2str(lun)])
plot(t,y(:,1))
disp (’tastaţi orice tasta pentru a continua …’)
pause;
plot(t,y(:,2))
Pentru a vedea dacă este sau nu importantă rezistenţa aerului
vom modifica funcţia bjfun înlocuind linia unde se calculează ra cu
comanda ra=0.
function proiectil
clear all;
Introducere în MATLAB- Indrummar de laborator 279
disp(' ');
disp('Cautarea unghiului optim initial');
disp('pentru a tinti cu un proiectil');
disp('un obiect fix'); disp(' ');
disp(['viteza initiala = ',num2str(vinit)]);
disp(['acceleratia gravitationala = ',num2str(gravty)]);
disp(['coeficientul de rezistenta al aerului (cu v^2) = ',num2str(cres)]);
disp(['coordonatele tintei = (', ...
num2str(xend),',',...
num2str(yend),')']); disp(' ');
% transformarea datelor initiale in variabile globale;
Vinit=vinit; Gravty=gravty; Cres=cres;
Xend=xend; Yend=yend;
% se face optimizarea
fstart=180/pi*atan(yend/xend); fend=75;
disp('Asteptati un moment pentru optimizare')
bestung=fminbnd(@mindis,fstart,fend);
% listarea rezultatelor finale
[y,x,t]=traject(bestung,vinit,gravty,cres,xend);
dmin=abs(yend-y(length(y))); disp(' ')
disp(['precizia este de ', ...
num2str(dmin),' cand']);
disp(['unghiul initial este: ', ...
num2str(bestung),' grade']);
disp(['durata zborului :',num2str(t(end))])
%
Autori : Nicolae Mitu şi Viorel Paleu 280
%
function [dsq,x,y]=mindis(unghi)
%
% [dsq,x,y]=mindis(unghi)
% ~~~~~~~~~~~~~~~~~~~~~~~~
%
% este functia de minimizat cu fminbnd
% functia calculeaza eroarea de tintire pe axa y
%pentru un unghi dat
%
% unghi - unghiul de inclinare in grade
%
% dsq - patratul erorii de tintire
% x,y - coordonatele traiectoriei urmate de proiectil
%
% Vinit, Gravty,Cres, Xend parametrii globali utilizati
%
% foloseste functia traject
%----------------------------------------------
global Vinit Gravty Cres Xend Yend
[y,x,t]=traject ...
(unghi,Vinit,Gravty,Cres,Xend,1);
dsq=(y(end)-Yend)^2;
function zp=projcteq(x,z)
%
% zp=projcteq(x,z)
Introducere în MATLAB- Indrummar de laborator 283
% ~~~~~~~~~~~~~~~~
%
% functia care defineste miscarea proiectilului
% franat de propria gtrutate si de o rezistenta a
% aerului proportionala cu patratul vitezei
%
% x - coordonata orizontala (variabila functiei)
% z - vectorul ce contine [vx; vy; y; t];
%
% zp - derivata dz/dx egala cu
% [vx’(x); vy’(x); y’(x); t’(x)];
%
% variabile globale:
%
% grav - acceleratia gravitationala
% resc - tcoeficientul de rezistenta al aerului
% vtol - variabila de validare a vitezei initiale
% whether vx is zero
%----------------------------------------------
%
global grav resc vtol
vx=z(1); vy=z(2); v=sqrt(vx^2+vy^2);
if vx<vtol
disp(' ');error(' ');
end
zp=[-resc*v; -(grav+resc*v*vy)/vx; ...
vy/vx; 1/vx];
Autori : Nicolae Mitu şi Viorel Paleu 284
19.3. Soluţii
1.
s=
0.3520
0.2056
0.2640
2.
>> bjex
lungimea este :44.4881 m
Fig.19.2
Introducere în MATLAB- Indrummar de laborator 285
Fig. 19.3
Autori : Nicolae Mitu şi Viorel Paleu 286
Fig.19.4
Viteza se amortizează spre 0.
3.
>> proiectil
Fig.19.5
Autori : Nicolae Mitu şi Viorel Paleu 288
LUCRAREA 20
Fig.20.1
Fig.20.2
Introducere în MATLAB- Indrummar de laborator 291
(vezi figura 20.2). Crearea unui nou model se face tastând butonul .
Apare o fereastră nouă unde trebuie să introducem blocurile (vezi Figura
20.3).
Fig.20.3
Fig.20.4
Fig. 20.5
Fig.20.6
Fig.20.7
Fig.20.8
Fig. 20.9
Fig.20.10
Introducere în MATLAB- Indrummar de laborator 299
Fig.20.11
Autori : Nicolae Mitu şi Viorel Paleu 300
Fig.20.12
Fig.20.13
Introducere în MATLAB- Indrummar de laborator 301
Fig.20.14
Fig. 20.15
Fig. 20.16
Introducere în MATLAB- Indrummar de laborator 305
Fig. 20.17
19.4. Aplicaţii
f ( x ) = x 2 − 1sin 2 x + ( 2 x − 3) ln x − 3 .
Autori : Nicolae Mitu şi Viorel Paleu 306
9C-5F+160=0
2.
Pentru a modela şi simula n astfel de sistem trebuie să facem
paşii:
1. Lansăm Simulink şi deschidem un nou model.
2. Tragem o sursă Ramp şi o lăsăm cu valorile implicite (deci x=t).
3. Tragem o sursă Sin Wave şi modificăm frecvenţa la 2.
4. Tragem din Math un bloc Polynomials şi definim polinomul [1,0,-1].
5. Tragem din Math un bloc Polynomials şi definim polinomul [2,-3].
6. Tragem din Math un bloc Math Function şi alegem funcţia log.
7. Tragem din Math un bloc Math Function şi alegem funcţia sqrt.
Fig. 20.18
Autori : Nicolae Mitu şi Viorel Paleu 308
Fig.20.19
Fig.20.20
Fig.20.21
Introducere în MATLAB- Indrummar de laborator 311
LUCRAREA 21
Fig.21.1
Fig.21.2
Fig.21.3
Introducere în MATLAB- Indrummar de laborator 315
21.2. Aplicaţii
Fr=-cv
Fig.21.4
1.
a) Comenzile MATLAB sunt:
>> f=inline('2*x+t+1','t','x');
>> [t,x]=ode45(f,[1,exp(1)],-1);
>> plot(t,x,'r')
Introducere în MATLAB- Indrummar de laborator 317
Fig.21.5
b) Modelul creat cu Simulink se aseamănă cu cel creat la început (vezi
figura 21.6). În figura 21.7 este vizualizat rezultatul din blocul Scope.
Comparând figura 21.5 cu figura 21.7 remarcăm faptul că cele două
grafice sunt identice.
Fig. 21.6
Fig.21.7
Fig. 21.8
La step s-a pus Step time 0 şi initial şi final value ca fiind 400. Integrator
este lăsat aşa cum este iar la Gain -40. Dublu clic pe Scop şi-am obţinut:
Fig. 21.9
Autori : Nicolae Mitu şi Viorel Paleu 320
Fig.21.9
Introducere în MATLAB- Indrummar de laborator 321
Fig.21.10
Fig.21.11
Autori : Nicolae Mitu şi Viorel Paleu 322
Fig. 21.12
Se remarcă faptul că nu se ajunge la echilibru viteza crescând
continuu.
d) Creşterea vitezei de la punctul precedent se datorează creşterii
forţei fără vreo limită. Punem acum o limită superioară creşterii forţei
printr-un bloc Saturation care va face limitarea creşterii la valoarea 400
N. Astfel în blocul Saturation modificăm UpperLimit la 400. Blocul va
fi plasat între Ramp şi Sum (vezi figurile 21.13 şi 21.14).
Introducere în MATLAB- Indrummar de laborator 323
Fig. 21.13
Fig. 21.14
Se remarcă faptul că după un anumit timp viteza ajunge la starea
de echilibru de 10m/s. Acest model simulează corect situaţia reală a
plecării unui tramvai din staţie.
Autori : Nicolae Mitu şi Viorel Paleu 324
Fig. 21.15
Fig. 21.16
Se remarcă faptul că tramvaiul ajunge la echilibru mult mai
repede, dar viteza de echilibru este mult mai mică, în jur de 3.3m/s adică
doar aproximativ 12 km/h.
Introducere în MATLAB- Indrummar de laborator 325
LUCRAREA 22
⎧⎪ y1 = x ( t )
⎨
⎪⎩ y2 = x ( t )
⎧ y1 = y2
⎨ cu y1(0)=-3 şi y2(0)=-2
⎩ y2 = 3 y2 − 2 y1 + 2t − 9t + 2t
3 2
f=inline('[y(2);3*y(2)-2*y(1)+2*t^3-9*t^2+2*t]','t','y');
>> [t,y]=ode45(f,[0,2],[-3;-2]);
>> plot(t,y(:,1),'r',t,t.^3-2*t-3,'o')
Fig.22.1
Fig. 22.2
Introducere în MATLAB- Indrummar de laborator 329
Fig. 22.3
22.2. Aplicaţii
Z
F
K
m R
Fig. 22.4
Introducere în MATLAB- Indrummar de laborator 331
1.
a) Comenzile MATLAB sunt:
>> f=inline('[y(2);-2*sin(t)*y(2)-y(1)-2*sin(t)+(1+t)*cos(2*t)-t]','t','y');
>> [t,y]=ode45(f,[0,pi],[0;1]);
>> plot(t,y(:,1))
Fig. 22.5
Autori : Nicolae Mitu şi Viorel Paleu 332
Fig. 22.6
Introducere în MATLAB- Indrummar de laborator 333
Fig.22.7
mx = F − B ⋅ x − k ⋅ x
Autori : Nicolae Mitu şi Viorel Paleu 334
Fig. 22.8
Fig. 22.9
Autori : Nicolae Mitu şi Viorel Paleu 336
LUCRAREA 23
Abur suprasaturat
TA
.
q
Lichid in Lichid out
. .
To mO
TI mI
TA
Abur condensat
Fig. 23.1
TA temperatura aburului;
To temperatura cu care iese lichidul din tub (temperatura de echilibru);
Ti temperatura cu care intră lichidul din tub;
kJ
C căldura specifică a lichidului din tub măsurată în o ;
K ⋅ kg
Prima ecuaţie se numeşte ecuaţia transferului de căldură, iar a
doua ecuaţia balanţei energetice. Deoarece ne interesează doar
temperatura de ieşire vom utiliza prima ecuaţie doar pentru a calcula
membrul drept la a doua ecuaţie pe care însă o vom integra.
Caz numeric:
Autori : Nicolae Mitu şi Viorel Paleu 338
kW
K=0.8 ;
K ⋅ m2
o
A=300 m2; P P
m=1680 kg;
m =100/3 kg/s (Notaţie în MATLAB – mpct);
kJ
C=1.8 o ;
K ⋅ kg
TA=150 oC (Notaţie în MATLAB – TA);
P P
Fig. 23.2
Fig.23.3
Fig.23. 4
Redenumim blocurile In astfel::
In 1 cu mpct;
In2 cu TI;
In3 cu qpct.
Redenumim blocul Oit1 cu TO.
Tragem un bloc Sum
Tragem un bloc product la dreapta lui Sum şi dăm dublu clic pe el. În
câmpul List of Signs modificăm ultimul + în -.
Tragem un bloc Gain la dreapta şi dăm dublu clic pe el. În
câmpul Gain introducem C
Mai tragem un bloc Sum la dreapta.
La dreapta tragem un bloc Gain şi dăm dublu clic pe el. În
câmpul Gain introducem expresia 1/(m*C).
Tragem la dreapta un bloc Integrator şu dăm dublu clic pe el. În
câmpul Initial Condition introducem valoarea 130.
Autori : Nicolae Mitu şi Viorel Paleu 342
Fig.23. 5
Fi.23.6
In meniul Simulation în configuration Parameters punem în
câmpul Stop Time valoarea 50.
Dăm Start Simulation.
Dublu clic pe ieşirile Scope şi obţinem figurile 23.7 şi 23.8.
Autori : Nicolae Mitu şi Viorel Paleu 344
Fig. 23.7
Fig. 23.8
Introducere în MATLAB- Indrummar de laborator 345
Fig. 23.9
Revenim la modelul principal. Dăm clic pe blocul Atrcal şi apoi
CTRL+C (copy).
Cu ajutorul comenzii CTRL+V multiplicăm blocul A ca în final să avem
4 astfel de blocuri.
Pentru ca să listăm temperaturile de ieşire de la fiecare bloc
Atrcal vom introduce un bloc Mux la dreapta sus şi dublu clic pe e; iar la
Number of inputs punem 4 (numărul de temperaturi de ieşire testate).
Restul blocurilor şi conexiunile trebuie în aşa fel introduse pentru
a obţine modelul din figura 23.10 :
Introducere în MATLAB- Indrummar de laborator 347
Fig.23.10
Fig.23.11
Fig.23.12
Să remarcăm că se ajunge la un echilibru când temperatura finală
de la ultimul schimbător este peste 149.5oC Si cantitatea de căldură
P P
LUCRAREA 24
Fig.24.1
Autori : Nicolae Mitu şi Viorel Paleu 350
În modelul ce-l vom crea nu vom avea date de intrare iar ca ieşiri
vom avea graficul lui θ şi o animaţie ce va sugera mişcarea pendulului.
Programul de animaţie este denumit pendanim şi este listat aici :
function [sys,x0]=pendanim(t,x,u,flag,ts)
%PENDANIM S-function pentru animatia miscarii unui pendul
global PendAnim1
if flag==2,
if any(get(0,'Children')==PendAnim1),
if strcmp(get(PendAnim1,'Name'),'Animatie pendul'),
set(0,'currentfigure',PendAnim1);
hndlList=get(gca,'UserData');
Introducere în MATLAB- Indrummar de laborator 351
x=[u(1) u(1)+2*sin(u(2))];
y=[0 -2*cos(u(2))];
set(hndlList(1),'XData',x,'YData',y);
set(hndlList(2),'XData',u(1),'YData',0);
drawnow;
end
end
elseif flag == 4 % salt la urmatorul test
% ns memoreaza numarul de teste
ns = t/ts;
% Timpul pentru urmatorul test.
sys = (1 + floor(ns + 1e-13*(1+ns)))*ts;
elseif flag==0,
% Initializeaza figura
animinit('Animatie pendul');
[flag,PendAnim1] = figflag('Animatie pendul');
axis([-3 3 -2 2]);
hold on;
x=[0 0];
y=[0 -2];
hndlList(1)=plot(x,y,'LineWidth',5,'EraseMode','background');
hndlList(2)=plot(0,0,'.','MarkerSize',25,'EraseMode','back');
set(gca,'DataAspectRatio',[1 1 1]);
set(gca,'UserData',hndlList);
sys=[0 0 0 2 0 0];
x0=[];
end
Fig. 24.2
Fig.24.3
Fig.24.4
Fig.24.5
Autori : Nicolae Mitu şi Viorel Paleu 356
BIBLIOGRAFIE
12) Hu, Y., H., Hwang, J.-N. (editori), "Handbook of Neural Network
Signal Processing", CRC PRESS, 2002
13) Hunt, B.R., Lipsman, R.L., Rosenberg, J.M. et al., „A Guide to
MATLAB for Beginners and Experienced Users”, Cambridge
University Press, 2001.
Introducere în MATLAB- Indrummar de laborator 357