Documente Academic
Documente Profesional
Documente Cultură
Curs 1 cont.
1. PREZENTARE GENERALĂ
Domenii de utilizare:
• Matematică, calcul numeric şi simbolic
• Dezvoltarea algoritmilor
• Modelare, simulare şi testarea prototipurilor
• Achiziţii date de la senzori, analiza şi vizualizarea datelor
• Grafica inginerească şi din ştiinţele aplicate
• Dezvoltarea de aplicaţii, inclusiv GUI
Fereastra de comandă permite rularea comenzilor MATLAB, lansarea unor instrumente cum
ar fi Editor/Debugger şi permite startarea toolbox-urilor.
Citirea sau scrierea unor fişiere .mat (fişiere de date Matlab) din programe externe în C sau
Fortran se poate face cu Interfaţa de Aplicaţii Program (API).
3.1. Cuvinte rezervate (Keywords) ale limbajului MATLAB: 'break' , 'case', 'continue'
'if ' 'else' 'elseif' 'end' 'for' 'function' ‘global' 'otherwise' 'persistent' 'return'
'switch' 'try' ‘catch’ 'while'. Pentru listarea lor se tastează funcţia: iskeyword
3.2. Expresii
MATLAB-ul lucrează cu expresii matematice ca şi celelalte limbaje de programare
Instrucţiunile Matlab sunt adesea de forma:
variabila=expresie
sau numai:
expresie
Se evaluează valoarea expresiei din dreapta semnului = iar valoarea obţinută se atribuie
variabilei din stânga semnului =.
Pentru forma simplificată (a doua) valoarea expresiei se atribuie unei variabile `ans` (answer)
create imediat de Matlab.
>> 1/3 >> sqrt(2) >> e1=exp(1) >> tan(pi/4)^-1
ans = ans = e1 = ans =
0.3333 1.4142 2.7183 1.0000
Operatori elementari
Operatori aritmetici în cadrul expresiilor:
+ adunare - scădere \ împărţire la stânga
* multiplicare / împărţire ^ ridicare la putere
` transpusa unei matrice sau complex conjugata unui număr complex
( ) operatorul de specificare a ordinii de evaluare (cu prioritate maximă)
3.4.Funcţii matematice
MATLAB-ul furnizează un mare număr de funcţii matematice elementare standard:
abs, angle, sqrt, exp, log,log10,log2, sin(argument în radiani), asin,
sind(argument grade), asind, atan2, sinh, imag, real, rem, sign …
>> angle(i) >>rem(5,3) %rest >> sind(30) >> atan2(-1,0)
ans = ans = ans = ans =
1.5708 2 0.5000 -1.5708
% -pi<= ATAN2(Y,X)<=pi
Inf Infinit
NaN Not a Number
>>conj(z) % x - iy
ans = 3.0000 - 4.0000i
>> z '
ans = 3.0000 - 4.0000i
Modulul:
>> r = abs(z) >> r1=abs (conj(z))
r= 5 r1 = 5
>> z+conj(z) % rezultă număr real % x + iy + x – iy = 2x
ans = 6 % Obs: conj(z) sau z’
Faza:
>> pi/2
ans = 1.5708 % radiani
Fig.1.Numărul complex z
în planul complex
Modul (continuare):
>> z * conj(z) % (x + iy)(x - iy)=x^2 - (iy)^2= x^2+y^2
ans= 25
>>compass( [z, conj(z), z*conj(z)] ) % figura Æ
% [vector valori complexe]
>> sqrt( z * conj(z) )
ans = 5
% verificare egalitate/ expresie logică
>> sqrt( z*conj(z)) == abs(z)
ans = 1 (true)
Obs:după % se inserează comentarii în Matlab
Cod Matlab:
>>z = 3.0000 + 4.0000i Inmulţire în forme polare:
>>z2= -4.00 + 2i >> abs(z)*abs(z2)*exp(i*fi)*exp(i*fi2) %sau
>> z*z2 >> abs(z)*abs(z2) * exp( i*(fi+fi2) ) % idem
ans = ans =
-20.0000 -10.0000i -20.0000 -10.0000i
Cod Matlab:
>>z = 3.0000 + 4.0000i Impărţire în forme polare (explicit):
>>z2= -4.00 + 2i
>> z / z2 >> abs(z)/abs(z2)* exp(fi*i)/ exp(fi2*i)
ans = ans =
-0.2000 - 1.1000i -0.2000 - 1.1000i
Inmulţirea j*z= j ( x + j y ) = jx − y = − y + jx
Numărul complex jz se obţine prin rotirea lui z cu 90 grade în sens
trigonometric.
π π π
j⋅ j j (ϕ + )
jϕ
Varianta polară: j = 1 ⋅ e 2 => jz= 1e 2 * z ⋅e = z ⋅e 2
x + j y jx − y
Impărţirea z/j= = = y − jx
j −1
Varianta polară:
Fig. 4.Iulian
Prof.dr.ing. z şiLupea
z/ j=y-jx
11 Programarea şi Utilizarea
Calculatoarelor
π π π
1 j j ⋅( − ) j ⋅( − ) j (ϕ − )
z⋅ = z⋅ = z ⋅ ( − j ) = z ⋅ 1 ⋅ e 2 = z ⋅ e jϕ * e 2 = z ⋅ e 2
j −1
Numărul complex z/j se obţine prin rotirea lui z cu 90 grade în sens orar
Curs 2
Reprezentare vectori cu originea în (0,0):
z = 3.0000 + 4.0000i
compass([z, z/i, z*i]) % fig. stanga
..............
%Ridicare număr complex la puterea n:
z=exp(.3i) % modul =1, unghi=0,3rad
compass( [z, z^2, z^3, z^4] , '-*r') % fig.
dreapta
compass([exp(j*pi/2) , 2*exp(pi/6*j) ,
2*exp(pi/6*j) / j], '-*')
>> grid on -1
Inversa matricei
>>D=[exp(2) 1; ... >> D(3,3)=7 % add 1 col >> D^-1 %inversa 3x3
sqrt(2) 5; ... D= ans =
1 tan(0)] 7.3891 1.0000 0 0.1407 -0.0281 0
D= 1.4142 5.0000 0 -0.0398 0.2080 0
7.3891 1.0000 %3 linii, 2col 1.0000 0 7.0000 -0.0201 0.0040 0.1429
1.4142 5.0000 >> D*D^-1 >> D^-1 * D
1.0000 0 ans = ans =
1.0000 0 0 1.0000 0.0000 0
-0.0000 1.0000 0 -0.0000 1.0000 0
0.0000 -0.0000 1.0000 -0.0000 -0.0000 1.0000
>> 2*D = = D+D %test >> D*D= =D^2 %la putere
13 Prof.dr.ing. Iulian Lupea
Programarea şi Utilizarea
Calculatoarelor
ans = ans =
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
“Impărţiri” / şi \
>> M=magic(3) >> M / D >> M * D^-1 %=M / D
ans = ans = ans =
8 1 6 0.9654 0.0069 0.8571 0.9654 0.0069 0.8571
3 5 7 0.0824 0.9835 1.0000 0.0824 0.9835 1.0000
4 9 2 0.1645 1.7671 0.2857 0.1645 1.7671 0.2857
Tablou 2D de caractere <2 x 15 char> sau tablou de şiruri de caractere de lungimi egale:
>>nume = ['Marius Giurgiu ' ; 'Mircea Bolboaca'] % s-a adăugat un blank după Giurgiu pentru a avea
nume = % siruri de lungimi egale pe fiecare linie
Marius Giurgiu
Mircea Bolboaca
>> nume(2, 7:15) % linia 2 coloanele 7:15
ans =
Bolboaca
!Facultativ cell array:
Este incomod de a lucra cu şiruri de lungimi egale în tablouri de caractere. Se poate trece
la tipul cell array care permite şiruri de lungimi oarecare. Conversia se face cu funcţia cellstr:
>> cell_array1=cellstr(nume)
2.Operatori
Operatorii MATLAB pot fi clasificaţi în trei categorii:
• Operatori aritmetici
• Operatori relaţionali (compară operanzii cantitativ)
• Operatori logici
*Operatori aritmetici
+ Adunare .^ Fiecare element din matrice la putere
[2 3 4] .^ 2 => [4 9 16]
- Scădere ' Transpusa unei matrice reale
.* Înmulţire element cu elem. ' Transpusa + conjugate complexe a numerelor
[2 3] .* [10 20] -> [20 60] complexe din matrice (dacă există)
./ Împărţire la dreapta: 1 ./ [1 2 3] .' Transpusa fără conjugata complexă a
1.0000 0.5000 0.3333 numerelor complexe
>>[1 2] . / [2 3]
0.5000 0.6667
.\ Împărţire la stânga: 2 .\ [1 2 3] * Înmulţire matriceală (| înm. două numere)
0.5000 1.0000 1.5000 Amxn * Bnxp => Cmxp
+ Plus unar A/B Împărţire matriceală la dreapta A*B^-1
- Minus unar A\B Împărţire matriceală la stânga A^-1 *B
: Operatorul două puncte ^ Matrice pătratică la o putere
Operatorii aritmetici pe element (.*, ./, .^) lucrează cu elementele corespondente ale unor tablouri de
dimensiuni egale.
Unii operatori binari lucrează cu un operand matrice şi celălalt scalar. În acest caz MATLAB-ul
aplică scalarul fiecărui element al matricei,
ex: [2 3] – 1 Æ [1 2] sau: [2 3] ./ 2
*Operatori logici
& AND (ŞI) 1 & 1 -> 1 1 I 1 -> 1 XOR(0, 0) -> 0
| OR (SAU) 0 & 1 -> 0 0 I 1 -> 1 XOR(0, 1) -> 1
~ NOT (Negatie) 1 & 0 -> 0 1 I 0 -> 1 XOR(1, 0) -> 1
0 & 0 -> 0 0 I 0 -> 0 XOR(1, 1) -> 0
% EXCLUSIVE OR
Operatorii logici aplicaţi elementelor corespondente ale unor tablouri de dimensiuni egale.
Pentru vectori şi tablouri dreptunghiulare ambii operanzi trebuie să aibă aceeaşi dimensiune
• O expresie care utilizează operatorul & (ŞI) este adevărată dacă ambii operanzi sunt
adevăraţi. În termeni numerici, expresia este adevărată dacă ambii operanzi sunt nenuli.
Exemplu:
» u = [1 0 -2 3 0 -5];
» v = [5 6 -1 0 0 7];
» u & v
ans= 1 0 1 0 0 1
• O expresie care utilizează operatorul | (SAU) este adevărată dacă cel puţin unul dintre
operanzi este logic adevărat. Pentru operanzi numerici, expresia este falsă dacă ambii
operanzi sunt nuli. Exemplu:
» u | v
ans = 1 1 1 1 0 1
• O expresie care utilizează operatorul ~ (NOT)neagă logic operandul. În termeni numerici,
orice operand nenul devine nul şi orice operand nul devine unu. Exemplu:
» u = [1 0 -2 3 0 -5];
» ~u
ans= 0 1 0 0 1 0
» ~~u
ans= 1 0 1 1 0 1 % numai 0 şi 1
Un operand este scalar şi celălalt vector: în acest caz, ca şi la operatorii aritmetici,
MATLAB-ul aplică scalarul fiecărui element al celuilalt operand.
u = [1 0 -2 3 0 -5]; v= 5 6 -1 0 0 7
>> u | 0 >> v & 4
19 Prof.dr.ing. Iulian Lupea
Programarea şi Utilizarea
Calculatoarelor
ans = 1 0 1 1 0 1 % valorile True devin 1 ans =1 1 1 0 0 1
Funcţii logice
În plus (paralel) faţă de operatorii logici MATLAB-ul furnizează şi funcţii logice:
Funcţie Descriere Exemple
and( ) Identic cu &
or( ) Identic cu |
xor( ) Realizează sau exclusiv. Returnează logic adevărat dacă » a = 1;
unul din operanzi este adevărat şi celălalt fals. În termeni » b = 1;
numerici, returnează 1 dacă un operand este nenul şi celălalt » xor(a,b)
este zero. ans = 0
all( ) Parametrul este vector: returnează 1 dacă toate elementele » u = [0 1 2 0];
vectorului sunt adevărate sau nenule (true). » all(u)
ans = 0
» A = [0 1 2; …
Parametrul este matrice (all() acţionează pe coloane):
9. 5 0];
» all(A)
ans = 0 1 0
any( ) Parametrul vector: returnează 1 dacă cel puţin unul dintre » v = [5 0 8];
elementele argumentului este adevărat (nenul); în caz » any(v)
contrar returnează 0. ans = 1
>> any([5 0 8 ; …
Parametrul matrice (any() acţionează pe coloane) 9. 0 0 ])
ans = 1 0 1
Alte funcţii: isnan, isinf, find.
3.Prioritatea operatorilor
Se pot scrie expresii care folosesc orice combinaţie de operatori aritmetici, relaţionali şi
logici.
a) ordinea de evaluare a expresiei este dată de nivelele de precedenţa/prioritate
b) în cadrul fiecărui nivel de precedenţă operatorii au aceeaşi prioritate şi se evaluează de
la stânga la dreapta.
c) prioritatea maximă o au parantezele:
1. Paranteze ( )
2. Transpusa (.’), putere (.^), transpusa cu complex conjugate ( ‘ ), matrice la putere ( ^ )
3. plus unar (+), minus unar (-), negare logică (~)
4. înmulţire (.*), împărţire la dreapta (./), la stânga (.\), înmulţire de matrice (*),
împărţire matrice dreapta ( / ), Împărţire matrice stânga ( \ )
5. adunare ( + ), scădere ( - )
6. operatorul două puncte ( : ) % A(1+2: 9)
7. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal (>=),
test egalitate (= =), test diferit (~ =)
8. şi (&)
9. sau (|)
CURS 3
Exemplu de scriere compactă şi eficientă / puterea operatorilor în Matlab:
Să se evalueze (fără ciclări) expresia A(r,ζ)=…:
1 + 4ζ 2 r 2 % unde r şi ζ iau următoarele valori:
A( r , ζ ) = r=0 : 0.005 : 2.5 şi
(1 − r 2 ) 2 + 4ζ 2 r 2
ζ=[0.03, 0.05, 0.1, 0.2, 0.5] % ze
Cod Matlab: % cu fiecare linie din A se trasează o curbă
ze=[0.03 0.05 0.1 0.20 0.50]'; r=0 : 0.005 : 2.5; % ze este transpus
A=sqrt( ((2*ze*r).^2+1) ./ ( (ones(size(ze))*(1-r.*r).^2) + (2*ze*r).^2) );
20 Prof.dr.ing. Iulian Lupea
Programarea şi Utilizarea
Calculatoarelor
plot(r,A) % transmisibilitate forţă asupra masei la suport fix
La numărător: ... ...
prin ze*r se înmulţeşte: ... ...
5 x 501
o matrice ze coloană (5 x 1) (‘ transpune) cu A=
o matrice r linie (1 x 501) ; ... ... ... ...
apoi se ridică la pătrat fiecare element din matrice. ... ... +
5 x 501 ... ... 5 x 501
>> ze=[0.03 0.05 0.1 0.20 0.50]'
ze = 0.0300 >> ze * r
0.0500
0.1000 ans =
0.2000 0 0.0001 0.0003 0.0004 0.0006 0.0007 0.0009
0.5000 0 0.0003 0.0005 0.0008 0.0010 0.0013 0.0015
>> r=0 : 0.005 : 0.03 0 0.0005 0.0010 0.0015 0.0020 0.0025 0.0030
r= 0 0.0010 0.0020 0.0030 0.0040 0.0050 0.0060
0 0.005 0.010 0.015 0.020 0.025 0.030 0 0.0025 0.0050 0.0075 0.0100 0.0125 0.0150
Spre deosebire de limbajul C, daca un caz este adevărat şi acesta se execută, se sare după end fără
a folosi instrucţiune break. In C se execută implicit şi cazurile următoare (daca nu există instr. break).
x(1)=1; %se adaugă valori in vect. x(i) % pas=2 n=100; %increment <0
for n = 2 : 6 for k=1:2:n for k=n:-1:1
x(n) = 2 * x(n - 1); . . . . . .
end end end
% rezulta: 1 2 4 8 16 32
Comparaţie sin(x) şi x , Relaţia lui Euler
i=sqrt(-1); %valoarea implicita a lui i
for x=0: pi/30 : 2*pi %pas real de 3grade
fprintf('x=%6.4f sin(x)=%7.4f %g+ %gi\n', x, sin(x), real(exp(i*x)), imag(exp(i*x)) );
end
... programul afişează:
x=0.0000 sin(x)= 0.0000 1+ 0i % Relaţia lui Euler: e^(ix) = cos(x) + i*sin(x)
x=0.1047 sin(x)= 0.1045 0.994522+ 0.104528i
x=0.2094 sin(x)= 0.2079 0.978148+ 0.207912i % Observăm: x ≈ sin(x) pentru x=mic
x=0.3142 sin(x)= 0.3090 0.951057+ 0.309017i 0,1rad; 0,2 rad
x=0.4189 sin(x)= 0.4067 0.913545+ 0.406737i
x=0.5236 sin(x)= 0.5000 0.866025+ 0.5i
x=0.6283 sin(x)= 0.5878 0.809017+ 0.587785i
x=0.7330 sin(x)= 0.6691 0.743145+ 0.669131i
……..
Instrucţiune for în corpul unei alte instr. for
(for imbricat):
lin=5; col=12;
for i =1:lin %se repeta de lin ori
for j =1:col %repeta de lin x col ori
B(i,j) = 1/(i+j-1);
end B5x12
end
plot(1:lin,B,'-*') %sau plot(B)= fiecare coloana o curbă plot(1:col, B, '-*') % o linie=o curba
% abscisa are 5 valori 1:lin abscisa are 12 valori 1:col
-------------- -----------
x=-5:0.1:25; %Cod scalar: x=-5:0.1:25;
for k=1:length(x) y=x+sin(x);
y(k)=x(k)+sin(x(k)); plot(x,y)
end
plot(x,y)
Calcul VARIANŢA:
% 1.Ciclul for % 2.Vectorizare
x=[1 2 3 4] miu = sum(x)/length(x);
miu = sum(x)/length(x); %media variance2=sum(( x-miu).^2)/length(x);
suma=0; sau: …sum((x-miu).*(x-miu))…
for i=1:length(x) sau: (x-miu)*(x-miu)’
suma=suma +(x(i)-miu)^2
end
= σ 2 = 1 n ( X [i ] − µ ) 2
variance1=suma/length(x);
VAR x n
∑
i =1
% variance1 -> 1.25
Calcule cu matrice
%Numărare elemente ai pozitive din vector Suma elementelor aij de pe DP (i = j) folosind un ciclu for
CURS 4
5. Scheme logice asociate instrucţiunilor de decizie şi de ciclare
Schemele logice conţin: Blocul de start, B.de stop,
B. intrare date, B. ieşire date (paralelograme),
B. de decizii logice (romb), B. de atribuiri şi calcul (dreptunghi)
Blocurile sunt interconectate prin săgeţi orientate.
if expresie_logica
grup de instructiuni
end
…..
if expresie_logica
grup1 de instructiuni
else
grup2 de instructiuni
end
…..
Să se traseze schema logică asociată programului de mai jos: conţine decizii multiple în corpul ciclului for
Observaţi:
1.Asemănarea deciziei multiple realizate
cu if-elseif şi cea realizată cu switch-case
2. S-au compus schemele logice pentru for
şi if-elseif (sau switch)
3.Linia întreruptă mărgineşte corpul
instrucţiunii de ciclare for şi conţine
deciziile multiple
1. Funcţiile sunt subprograme (apelate) care folosesc parametri de intrare (in1, in2,…) şi
parametri de ieşire/calculaţi (ou1,out2,…) pentru a comunica cu programul apelant, cu alte
funcţii sau cu fereastra de comenzi.
2. Definiţia funcţiei este salvată într-un fişier ce poartă acelaşi nume cu cel al funcţiei sau altă
denumire şi extensia .m In cazul în care numele funcţiei este diferit de al fişierului se foloseşte
numele fişierului la apel. Calea spre fişier trebuie setată “Set Path…” dacă fişierul nu se află în
directorul curent sau în lista de căi spre directoare.
3. Apelul funcţiei este: nume_fun(a1, a2,…,an) unde a1, a2, …,an sunt parametri efectivi
(actuali) având valori concrete/cunoscute (la momentul apelului).
4.Valorile parametrilor efectivi sunt transferate parametrilor formali în ordine de la stânga la
dreapta.
5. O funcţie poate fi apelată de mai multe ori; la fiecare apel, prin parametri de intrare, se aplică
acelaşi algoritm de calcul unor date de intrare diferite.
6. Folosirea funcţiilor permite modularizarea programului (anumite sarcini de calcul să fie
încapsulate)
7. Funcţiile folosesc variabile locale funcţiei, variabile care există numai pe timpul execuţiei
funcţiei: în fun_demo1: i, x; la ieşirea din funcţie variabilele locale se pierd (eliberează
memoria).
8. Variabilele locale sunt independente de variabilele cu acelaşi nume din programul principal
(apelant) sau din alte funcţii.
9. Funcţia poate fi apelată din linia de comandă, dintr-o altă funcţie sau dintr-un fişier script.
10. Funcţiile pot să nu aibă argumente de intrare sau argumente de ieşire.
11. Pentru funcţia apelată dintr-o expresie, apelul se înlocuieşte cu valoarea (valorile) returnată.
Apeluri valide:
>> xplusy2(3,5) >> xplusy2(3,5,2)
ans = 8 ans = 16
>> xplusy2(3,5,1) >> xplusy2(3,5,2,4)
ans = 8 ans = 64
1. Se apelează o funcţie din corpul altei funcţii - ambele definite în acelaşi fişier:
3.Variabile globale
VG permit folosirea unor variabile în corpul funcţiilor fără ca acele variabile să fie pasate
prin parametri în acele funcţii.
Comunicare numai prin parametri
Fereastra de comenzi Definiţie fun_1
a=1; functie y=fun_1(pa,pb,pc)
b=2; ….
c=5; y=pa+pb+pc; %variabile locale
re=fun_1(a,b,c);
Variabilele a,b,c şi-au transferat valorile parametrilor formali pa, pb respectiv pc.
Valoarea calculată y transferă valoarea variabilei re
CURS 5
4. Fişiere script Matlab sau macrouri
Scriptul Matlab este un segment de program Matlab salvat într-un fişier numefis.m.
Execuţia fişierului script se obţine prin apelul numelui fişierului numefis (fără extensie) în linia
de comandă, în funcţii sau în alte fişiere script.
După execuţia fişierului script variabilele locale rămân în spaţiul de lucru al aplicaţiei spre
deosebire de funcţie în care variabilele locale se dealocă din memorie.
Un program Matlab are forma fişierelor:
nume_script.m şi/sau: nume_functie.m
Din fişierele de funcţii sau fişierele script se pot apela alte funcţii sau fişiere script.
Se pot face de asemenea apeluri recursive:
- din funcţie se apelează aceeaşi funcţie sau
Grafică 2D în MATLAB
Exemplu #2 matrice
x=0 : pi/100 : 3*pi
ma(:,1)= sin(x); %generare coloana 1
ma(:,2)= sin(x+pi/3); %generare coloana 2
% faza pi/3 translatează curba
% în lungul abscisei
plot(ma); % ma este matrice 301 x 2
% 2 coloane → 2 curbe
b) x vector, y matrice => coloanele / liniile matricei y vor fi reprezentate în funcţie de vectorul x
subplot(131); plot(r, real(Ac))
subplot(132); plot(r, imag(Ac))
subplot(133); plot(r, [real(Ac); imag(Ac)]); % r=vector,
% [real(Ac); imag(Ac)]= matrice 2 linii
8 0 10
6
-2
5
4
-4
2
0
-6
0
-8
-5
-2
-10
-4
-10
-6 -12
-8 -14 -15
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
c) plot(x1,y1, x2,y2) => în acelaşi grafic sunt reprezentate curbele (x1, y1) şi (x2, y2)
x1, y1 = 2 vectori; x2, y2 = 2 vectori
plot(r, real(Ac), r, imag(Ac) );% sau plot( r, [real(Ac); imag(Ac)] ); identice
% fiecare linie din matrice în funcţie de r
subplot(312);
semilogx(abs(Y1(1:length(Y1)/4) ));
% scalare log după x
subplot(313);
semilogy(abs(Y1(1:length(Y1)/4) ));
% scalare log după y
Reprezentare în trepte
x=0 : pi/10 : 3*pi %vector real
y=sin(x);
stem
stairs(x, y)
stairs
În cadrul parametrului actual de tip ‘şir de caractere’ a funcţiei fprintf, pot fi folosite caractere de
formatare a textului (caractere de evitare):
\n Linefeed LF + carriage return CR = se trece \t Tab (sare la dreapta un număr de
(scrie) la inceputul liniei următoare caractere/pozitii de scriere)
\r carriage return \b Backspace (inapoi un caracter)
Folosim: \\ pentru a tipări un caracter backslash
%% pentru tipărirea unui caracter procent.
’’ pentru a tipări un caracter apostrof
Sintaxa de scriere:
fid = fopen(cale_numefisier, mod) deschide fişierul în modul specificat prin mod care poate fi:
'r' read
'w' write (se generează fişierul dacă este necesar)
'a' append (se generează fişierul dacă nu există)
'r+' read and write (nu se generează)
'w+' trunchează sau crează pentru read şi write
'a+' read şi append (crează fişierul dacă este necesar)
Fişierul poate fi deschis (pentru citire din fişier sau scriere în fişier):
în mod text (exemple 'rt' şi 'w+t') sau binar (implicit).
Obs.: funcţiile fscanf este folosită pentru citire text cu format din fişiere.
fread = citeşte date binare din fişier.
CURS 6
2. Calcule cu polinoame
2.1.Evaluarea polinomului pentru un vector de argumente
(scriind expresia polinomială şi operatorul .^ ):
VecArg=[ -2 0 10 10.1 99] % 5 argumente VArg= 2: 0.5 : 4;
Val = VecArg .^ 2 + 2*VecArg + 3 Val2= VArg .^ 2 +2 *VArg + 3
Val = Val2 =
1.0e+004 * 11.0000 14.2500 18.0000 22.2500 27.0000
0.0003 0.0003 0.0123 0.0125 1.0002
Operatorul .^ indică ridicarea la putere a fiecărei
valori din vectorul de argumente
2.2. Polinoamele sunt reprezentate prin vectorul coeficienţilor polinomului luaţi în ordine descrescătoare
a puterilor.
0
z1=roots(pZerouri);
-0.1
f_z1=z1/(2*pi) % rad/s respectiv Hz
-0.2
r12=roots(detB);
-0.3
f_r12=r12/(2*pi)
14 16 18 20 22 24 26 28
2
Imaginary Axis
-2
-4
-6
-5 -4 -3 -2 -1 0 1 2 3
Real Axis
3. GRAFICE 3D
Exemplu:
t=0 : pi/40 : 10*pi;
plot3(sin(t), sin(t) .*cos(t), 2*t); grid on;
Două curbe spaţiale:
plot3(sin(t), sin(t).*cos(t), 2*t, sin(t), cos(t), 2*t);
sau:
plot3(sin(t), sin(t).*cos(t), 2*t, '+' , sin(t), cos(t), 2*t, '-' );
% prima curba trasata din `+`, a doua din `-`
2. Reprezentare suprafeţe
funcţia mesh - reprezentare wireframe
funcţia surf - suprafeţe netede.
Matlab reprezintă suprafeţe prin cote z = valori ale funcţiei
pentru o reţea de puncte din planul ox-y. Punctele de cotă z adiacente
sunt conectate prin segmente colorate de dreaptă (wireframe) în cazul
funcţiei mesh şi colorează faţete pentru comanda surf.
Fie o funcţie de forma z=f(x,y):
Exemplul #2:
[X,Y]=meshgrid(-10:16);
Z=sqrt(X .^2+Y .^2);
surf(X,Y,Z);
df df d 2 f d 3 f
Derivare cu funcţia diff(): , derivare ordin 1, 2, 3: , ,
dx dx dx 2 dx 3
syms x % defineste expresia f
f0=3*x^3+5*x^2-6*x+2 % definire f0 f= 12 + (x-1)*(x-1)*(x-2)*(x-3)
pretty(f0) % vizualizare f0 f=
3 2 12+(x-1)^2*(x-2)*(x-3)
3x +5x -6x+2
diff(f0) diff(f) % prima derivata
ans = 9*x^2+10*x-6 ans =
-------------------------------------------------------- 2*(x-1)*(x-2)*(x-3) + (x-1)^2*(x-3) + (x-1)^2*(x-2)
>>f1 = 2*x^2*exp(3*x) % definire f1
>> diff(f1) diff(f, x, 2) % derivată de ordin 2
ans = > 4*x*exp(3*x) + 6*x^2*exp(3*x) ans =
-------------------------------------------------------- 2*(x-2)*(x-3)+4*(x-1)*(x-3)+4*(x-1)*(x-2)+2*(x-
Derivare, integrare 1)^2
>> diff(log(x)) % log= logaritm natural
ans = diff(f, x, 3) % derivată de ordin 3
1/x ans =
>> int(1/x) 24*x-42
f1=(x-2.16)*(x-12.7)*(x-38.3) * ...
2
(x+2.16)*(x+12.7)*(x+38.3) 0
-1
subplot(211) -2
-4
-40 -20 0 20 40
x
f2= (x-1)*(x-1)*(x-2)*(x-3)+4 14
subplot(212)
12
10
0 1 2 3 4
x
---------
Matrice
Funcţia inv() Æ inversare matrice, simbolic
syms m1 m2 M; syms a b c d A; %Matrice coloana * matrice linie
M=[m1 0; 0 m2]; A=[a b; c d];
pretty(inv(A)) [a; b]2x1 * [c d]1x2
inv(M) [ d b ]
%matrice diagonală [ --------- - --------- ] ans =
ans = [ad-bc a d - b c]
[ 1/m1, 0] [ ]
[ a*c, a*d]
[ 0, 1/m2] [ c a ] [ b*c, b*d]
[- --------- --------- ]
[ ad-bc ad-bc ]
det(A)
ans = a*d - b*c
Funcţia expand():
syms a b c ;
c=sin(a+b)
>> expand( cos(2*a) )
expand(c)
ans =
ans =
2*cos(a)^2 - 1
sin(a)*cos(b)+cos(a)*sin(b)
expand(cos(a+b)) etc.
ans =
cos(a)*cos(b)-sin(a)*sin(b)
f ( x + dx) − f ( x)
Limite: f ( x) = lim = definiţia derivatei
dx →0 dx
cos( x + dx) − cos( x)
lim → -sin(x)
dx →0 dx
49 Prof.dr.ing. Iulian Lupea
Programarea şi Utilizarea
Calculatoarelor
>> syms x, dx
>> limit( (cos(x+dx)-cos(x) )/dx, dx, 0) sau:
ans = >> diff(cos(x))
-sin(x) ans =
- sin(x)
>> exp(1)
ans =
2.7183
n >> limit( (1+x/n)^n, n, inf )
x
lim 1 + → exp( x) = e x ans =
n → inf n exp(x)
Diverse
Rulare:
x =0.4
Numar iteratii n= 23
Valoare calc= 0.389418342308650
Val calc Matlab= 0.389418342308651
X1 =
2.0000
1.0000
3.0000
2.1. Metoda lui Cramer: x1= ∆1 / ∆ , x2= ∆ 2 / ∆ , x3= ∆ 3 / ∆ unde ∆ este determinantul sistemului iar ∆ i este
determinantul matricei coeficienţilor (A) în care coloana “i” a fost înlocuită cu coloana termenilor liberi (B).
A=[3 -1 0; X=A^(-1)*B;
-2 1 1; X= ... %calcul direct
2 -1 4]
A1=[5 -1 0; % Cramer A3=[3 -1 5;
B=[5 0 15]' 0 1 1; -2 1 0;
15 -1 4] 2 -1 15];
x1=det(A1)/det(A) x3=det(A3)/det(A)
6. Integrare
function y = myfun(x) %definitie functie
y = 1./(x.^3-2*x-5);
quad('myfun',1,2) %integrare
ans = -0.2860
>> quad('myfun',-1,7)
Warning: Minimum step size reached; singularity possible.
> In quad at 103
ans =
-0.3811
a ⋅ e jω t