Sunteți pe pagina 1din 43

MEDIUL DE PROGRAMARE MATLAB

Curs 1 cont.
1. PREZENTARE GENERAL
MATLAB = Matrix laboratory este un limbaj de programare i un sistem de dezvoltare a aplicaiilor din
diverse domenii
Matlab este dezvoltat de The MathWorks, Inc., SUA

Domenii de utilizare:
Matematic, calcul numeric i simbolic
Dezvoltarea algoritmilor
Modelare, simulare i testarea prototipurilor
Achiziii date de la senzori, analiza i vizualizarea datelor
Grafica inginereasc i din tiinele aplicate
Dezvoltarea de aplicaii, inclusiv GUI

MATLAB - s-a dezvoltata n:


1. mediul universitar -este pachetul standard pt. cursurile de inginerie, matematic i tiine aplicate
2. industrie - pentru cercetarea, dezvoltare i producie.
S-a dezvoltat prin toolbox-uri - familii/colecii de aplicaii (funcii .m) specializate:
SimBiology - modelarea proceselor biologice,
Aerospace Toolbox - extinde calculele tehnice n domeniul ingineriei aerospatiale,
Bioinformatics Toolbox - mediu pentru analiza genomului, inginerie genetic, cercetri n biologie,
Communications Toolbox,
Control System toolbox - controlul sistemelor,
Data Acquisition Toolbox funcii pentru achiziii de date i adaptori pentru interfaare cu hardware specific
(plci de achiziii ale diferitelor firme),
Database toolbox funcii MATLAB pentru import i export de date cu baze de date relaionale
Distributed Computing Toolbox coordonarea i execuia operaiilor aplicaiilor Matlab simultan ntr-un
cluster de calculatoare crescnd viteza de execuie a aplicaiilor mari,
Financial toolbox - calcule financiare,
Fuzzy logic toolbox logica fuzzy,
Genetic algorithm - algoritmi genetici,
Image acquisition toolbox - achiziii de imagini,
Image processing toolbox procesarea imaginilor,
Neural network toolbox reele neuronale,
Optimization toolbox optimizri de sisteme,
Partial Differential Equation Toolbox ecuaii difereniale cu derivate pariale,
Robust Control Toolbox funcii pentru analiza i proiectarea sistemelor de control multiinput-multioutput
MIMO cu incertitudini,
Signal Processing toolbox - procesarea semnalelor,
Spline toolbox curbe spline,
Statistics toolbox funcii statistice,
Symbolic Math - calcule simbolice,
System identification toolbox identificarea sistemelor,
Virtual reality toolbox realitate virtual,
Wavelet toolbox funcii pentru reconstrucia semnalelor,
etc.
Sistemul MATLAB conine: 1.Limbajul MATLAB, 2.Mediul de lucru MATLAB,
3.Handle Graphics, 4.Biblioteca de funcii matematice, 5.Interfaa de aplicaii program a
MATLAB-ului (API)

1.Limbajul MATLAB: - un limbaj de nivel nalt, tipul de baz este matricea, exist
instruciuni de control, funcii, structuri de date, intrri/ieiri i cu proprieti de programare
orientat pe obiecte. Facilitile de programare sunt organizate pe 6 directoare din toolbox/matlab/
1

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

ops

Operators and special characters.

lang

Programming language constructs.

all(), any, xor, or, transpose (.), ctranspose


(), ldivide(.\)
if, for, while, case, persistent

strfun

Character strings.

char, ischar, strcat

iofun

File input/output.

fscanf, fseek

timefun

Time and dates.

clock, date

datatypes

Data types and structures.

cell, class, int8, double, logical, struct

2.Mediul de lucru MATLAB Set de faciliti care permit manevrarea variabilelor n spaiul
de lucru, importul/exportul de date, dezvoltarea, manipularea, editarea i depanarea fiierelor
MATLAB (.m) i a aplicaiilor MATLAB. Aceste faciliti sunt n dir. general din toolbox/matlab/:
beep, delete, dir, rmdir, dos, echo, exit, import,
general General purpose commands.
load, who, whos, ver, save, quit etc.
3.Handle Graphics Reprezint sistemul grafic al MATLAB-ului. Cuprinde comenzi de
nalt nivel pentru vizualizarea datelor bi i tri-dimensionale, procesarea imaginilor, animaie,
prezentri grafice. Permite de asemenea utilizarea unor comenzi de nivel sczut pentru crearea unor
interfee grafice GUI. Funciile grafice sunt organizate n 5 directoare din toolbox/matlab/:
graph2d

Two-dimensional graphs:

graph3d

Three-dimensional graphs: plot3, surf, mesh, zlabel etc.

Specgraph

Specialized graphs:

graphics
uitools

Handle Graphics:
figure, hold, print etc.
Graphical user interface tools: menu etc.

plot, grid, polar, subplot etc.

bar, comet3, ezplot, voronoi etc.

4.Biblioteca de funcii matematice a MATLAB-ului Reprezint o colecie complex de


algoritmi de calcul pornind de la funcii elementare (sinus, cosinus etc.) pn la funcii sofisticate
(inversarea de matrice, valori proprii, funcii Bessel, FFT etc.). Funciile matematice sunt organizate
n 8 directoare:
isempty(x),zeros(3)

elmat

Elementary matrices and matrix manipulation.

elfun

Elementary math functions.

specfun

Specialized math functions.

abs(),sin(),tan,sinh,exp,
log, log2, log10, imag,real
bessel,cross,dot,factorial

matfun

Matrix functions numerical linear algebra.

trace,lu,rank,svd,eig ...

datafun

Data analysis and Fourier transforms.

fft, ifft,mean,var,std,lscov

polyfun

Interpolation and polynomials.

Residue, Legendre, convhull

funfun

Function functions and ODE solvers.

Ode23, ode45(), fzero, ...

sparfun

Sparse matrices.

full(), sparse()

5.Interfaa de aplicaii program a MATLAB-ului (API) este o bibliotec care permite


scrierea de programe n C sau Fortran care interacioneaz cu MATLAB-ul. Include faciliti pentru
apelarea rutinelor din MATLAB, apelarea MATLAB-ului ca main de calcul, scrierea i citirea
fiierelor de tip MAT .

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

SIMULINK este un pachet software pentru modelarea, simularea i analiza sistemelor


dinamice. Pot fi modelate sisteme (mecanice, electrice) liniare,
neliniare, continue, discrete, hibride.

SIMULINK are interfa grafic utilizator (GUI) pentru


crearea modelelor sub forma unor diagrame construite din
blocuri, pe baza unor tehnici de tip click-and-drag realizate
cu mouse-ul. Astfel, trasarea diagramelor este simpl i
intuitiv, aproape la fel de simpl ca trasarea acestor diagrame direct pe hrtie. n plus, se evit
formularea matematic laborioas (sistemele dinamice sunt de regul descrise de ecuaii
difereniale).

Real-time Workshop este un program care permite generarea de cod C pentru


schemele bloc create n SIMULINK i astfel permite rularea de aplicaii n timp real.
2. MEDIUL DE LUCRU MATLAB
Lansare sub Windows: shortcut la programul executabil
La pornire, MATLAB-ul execut automat fiierele:
matlabrc.m rezervat pentru administratorul de sistem i
startup.m. (n directorul local) este destinat utilizatorilor; se pot defini setrile implicite
pentru instrumentele Handle Graphics i se pot predefini variabile n spaiul de lucru.

Terminarea sesiunii de lucru: comanda >>quit la prompterul MATLAB sau exit din meniul File
Fereastra de comand (fereastra principal) unde Interpretorul MATLAB afieaz un prompter (>>).
De exemplu, pentru introducerea unei matrice 3 x 3 se poate tasta:
A = [1 2 3; 4 5 6; 7 8 10]
i la apsarea tastelor Enter sau Return, MATLAB-ul rspunde cu:
A =
1
2
3
4
5
6
7
8
10

Editarea liniilor de comand n fereastra principal


Arrow Key
Control Key
efect
previous line - comanda precedenta
sau: Ctrl-p

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

next line comanda urmatoare tastata

sau: Ctrl-n
tergerea ferestrei de comand: >> clc

% clear command..., nu terge variabile din spaiul de lucru.

Controlul afirii paginilor ecran n fereastra de comand


Controlul afirii paginilor n fereastra de comand: more off i more on.
ntreruperea unui program care ruleaz : Ctrl-c.
Comanda format controleaz formatul numeric (numrul de zecimale) al valorilor afiate pe
ecran (dar nu reprezentarea n memorie): File/ Preferences/Comand Window sau comanda:
format short (4 zecimale (implicit), : 3.1416) sau format long (15 zecimale: 3.141592653589793) etc.

Suprimarea afirii rezultatelor unei linii comand


- dac ncheiem linia de comand cu punct i virgul ; rezultatele nu sunt afiate la ecran.
Exemplu:
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
A = magic(3);

Linii de comand lungi: ntrerupere prin trei puncte urmate de Return sau Enter pentru a indica
faptul c expresia continu pe linia urmtoare. Exemplu:
s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 . . .
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;

Fereastra de comand permite rularea comenzilor MATLAB, lansarea unor instrumente cum ar
fi Editor/Debugger i permite startarea toolbox-urilor.

Spaiul de lucru al MATLAB-ului (workspace)


-conine un set de variabile (vectori, matrice, structuri, cells etc.) care pot fi manevrate din linia
de comand. comenzile >>who i whos (mai detaliat) listeaz variabilele curente din workspace.
comanda >>clear % tergerea variabilelor din workspace
>>clear v1 % terge variabila v1
>>clear v* % terge variabilele care ncep cu caracterul v
Citirea sau scrierea unor fiiere .mat (fiiere de date Matlab) din programe externe n C sau
Fortran se poate face cu Interfaa de Aplicaii Program (API).
ncrcarea i salvarea din workspace
Comenzile save i load au rolul de a salva variabilele din spaiul de lucru i respectiv de a le
rencrca ntr-o sesiune ulterioar. Aceste comenzi se pot folosi i pentru a importa i exporta date.
Pe platformele Windows, operaiile save, load sunt disponibile i prin selectarea opiunilor
Save Workspace As, respectiv Load Workspace din meniul File.
4

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Formatul n care comanda save stocheaz datele poate fi controlat prin adugarea unor flag-uri
(opiuni) n lista de nume de fiiere sau variabile:
-mat

Utilizeaz formatul binar tip .MAT (implicit).

-ascii
-ascii -double

Utilizeaz formatul ASCII pe 8 digii.


Utilizeaz formatul ASCII pe 16 digii.

-ascii -double tabs

Delimiteaz elementele tablourilor cu tab-uri.

-append

Adaug datele ntr-un fiier .MAT existent.

Exemple:
save
save f1_var [mat]

Salveaz toate variabilele n fiierul matlab.mat


Salveaz toate variabilele n fiierul fi_var.mat

ncrcarea unor fiiere cu date ASCII (format text)


Comanda load import fiiere de date ASCII. Exemplu: scriem fisierul date.dat coninnd:
1234
2345
load date.dat

%incarca i creaza variabila matrice [1 2 3 4; 2 3 4 5]

creeaz o variabil cu numele date n workspace.


Nume de fiiere ca iruri de caractere
Dac numele fiierelor sau variabilelor cu care se lucreaz sunt stocate n variabile de tip ir de
caractere, se poate folosi dualitatea comand/funcie pentru a apela load i save ca funcii. De
exemplu
%salveaza variabilele var1 i var2 n myfile.dat

save('myfile','VAR1','VAR2')
A = 'myfile';
load(A)

au acelai efect cu:


save myfile VAR1 VAR2
load myfile

Wildcards Comenzile load i save permit specificarea unui caracter special de tip wildcard (*).
Exemplu: save rundata x* %salveaz toate variabilele din workspace care ncep cu x n fiierul
rundata.mat.
Browser-ul Workspace (varianta grafic a comenzii whos) permite vizualizarea coninutului
spaiului de lucru curent.
Exemplu: vizualizarea datelor incrcate cu load

Directorul curent al MATLAB-ul pentru lucrul cu fiiere de tip .m i .mat.


3. FUNDAMENTE DE PROGRAMARE N MATLAB
5

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

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 funcia: iskeyword
3.2. Expresii
MATLAB-ul lucreaz cu expresii matematice ca i celelalte limbaje de programare
Instruciunile Matlab sunt adesea de forma:
variabila=expresie
sau numai:
expresie
Se evalueaz valoarea expresiei din dreapta semnului = iar valoarea obinut se atribuie
variabilei din stnga semnului =.
Pentru forma simplificat (a doua) valoarea expresiei se atribuie unei variabile `ans` (answer)
create imediat de Matlab.
>> 1/3
>> sqrt(2)
>> exp(1)
>> tan(pi/4)^-1
ans
=
ans
=
ans
=
ans =
1.4142
2.7183
1.0000
0.3333
Expresia = niruire de operanzi i operatori; operanzii: nume de variabile, constante, nume
(sau apel) de funcii, operatorii: +, *, .*, ^, .^ etc.
>> 4 * sin(pi/6) / sqrt(2) + 3^2 - exp(2) * tan(pi/4)
ans =
3.0252
Matlab lucreaz n mod linie avnd la baz un interpretor (i nu compilator). Fiecare
instruciune pe rnd este trimis interpretorului i evaluat.
3.3. O variabil MATLAB este un nume care se asigneaz (asociaz) unei zone de memorie
unde sunt stocate valori. Prin nume citim/scriem valoarea din/n memorie, i folosim valoarea n
expresii. MATLAB dispune de trei tipuri de variabile: locale, globale i persistente(locale funciei, nu
se terg la ieire, valoarea lor este reinut i regsit la un nou apel al aceleai funcii).
MATLAB-ul NU necesit declararea dimensiunii variabilelor, deoarece la ntlnirea unui nou
nume de variabil genereaz automat variabila respectiv i aloc spaiul necesar de memorie.
Tipul de dat asociat numelui se poate schimba n acelai program:
>> a=123

>> a='qwer'

a=
123

a=

>> a=[1 2 3; 2 3 4; 3 4 5]
a=
1 2 3
2 3 4
3 4 5

qwer

Numele unei variabile este o liter, urmat de un numr orict de mare de litere, cifre sau
simboluri. Din nume numai primele 31 de caractere sunt folosite pentru identificare.
MATLAB-ul este case sensitive - face distincie ntre literele mici i cele mari (n nume).
Exemplu:
a = 30

>> A=30 % alta variabila diferita de a

creeaz o matrice 1 x 1 cu numele a i stocheaz (memoreaz) valoarea 30


Reprezentarea numerelor imaginare este realizat cu litera i sau j.
Exemple:
>> sqrt(-2)
>> j
>> i
>> abs(3+4j)
ans =
ans =
ans =
ans =
0 + 1.4142i
0 + 1.0000i
0 + 1.0000i
5

>> exp(i*pi/2)
ans =
0.0 + 1.0000i
cos(pi/2) + i*sin(pi/2)

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Operatori elementari
Operatori aritmetici n cadrul expresiilor:
+ adunare
- scdere
\ mprire la stnga
* multiplicare
/ mprire
^ ridicare la putere
` transpusa unei matrice sau complex conjugata unui numr complex
( ) operatorul de specificare a ordinii de evaluare (cu prioritate maxim)

3.4.Funcii matematice
MATLAB-ul furnizeaz un mare numr de funcii 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)
ans =
1.5708

>> rem(5,3)
ans =
2

>> sind(30)
ans =
0.5000

>>exp(2) % 2.7183^2
ans =
7.3891

>> log(2.72)
ans =
1.0006
% f.logaritmica

>> atan2(1,0)
ans =
1.5708

>> atan2(-1,0)
ans =
-1.5708
%-pi<= ATAN2(Y,X)<=pi

Exist i funcii matematice avansate (funcii Bessel, gama etc.),


multe dintre acestea acceptnd argumente complexe.
Pentru vizualizarea funciilor elementare se poate tasta: help elfun
Pentru a vedea lista funciilor avansate se poate tasta:
help specfun

sau help elmat

O parte din funcii (cum ar fi sqrt, sin)sunt de tip built-in, fac parte din nucleul Matlab,
fiind compilate i astfel ofer vitez de execuie sporit (accesul la structura funciei nefiind
permis).
Unele funcii sunt implementate ca fiiere MATLAB (M-files) i pot fi modificate.
Pentru a gsi calea spre codul surs a unei funcii MATLAB M-file folosim funcia which:
>> which exp => built-in (D:\MATLAB\toolbox\matlab\elfun\@double\exp) % double method
>> which pascal => D:\MATLAB\toolbox\matlab\elmat\pascal.m
Sunt dou tipuri de fiiere M-files: script i function (pot primi i returna valori).
Cteva funcii furnizeaz valorile unor constante:
pi

3.14159265

i i j

Imaginary unit,

eps

Precizia Floating-point 2-52 (2.2204e-016)

realmin

Cel mai mic numr real floating-point, 2-1022 (2.2251e-308)

realmax

Cel mai mare numr real floating-point, 21023 (1.7977e+308)

Inf

Infinit

NaN

Not a Number

(sqrt(-1) )

Numele funciilor NU sunt rezervate i deci este posibil suprascrierea lor.


Exemplu:
eps = 1.e-6
true=0 (implicit true=1)
Funcia original este reconstituit (tergnd variabilele noi) prin comanda:
clear eps
clear true
7

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Alte exemple de expresii


Exemple de expresii i rezultatele evalurii acestor expresii:
rho = (1+sqrt(5))/2
rho =
1.6180

a = abs(3+4i)
a =
5

huge1 = exp(log(realmax))
huge1 =
1.7977e+308

>> exp(i*pi)
ans =
-1.0000 + 0.0000i

toobig = pi*huge
toobig =
Inf

3.5.Generarea unui VECTOR de VALORI:


a) vector = val_initial : pas : val_final
t=2 : 10
Creeaz vectorul t = 2
3 4 5 6 7 8 9 10
t[1] t[2] t[3]
.......
t[9]
t1=0 : 0.2 : 1.3
t1 = 0 0.2000 0.4000 0.6000 0.8000
t1[1]
.......
t2=-2 : 3 : 11
t2 = -2 1 4 7 10
t2[1]
t2[5]
Pas negativ:
t3=5 : -1 : -1.1
t3 = 5 4 3 2 1 0 -1
t3[1]
t3[7]
length(t3) -> ans= 7
>> t3(10)=105 %se adauga un element pe pozitia 10
t3 = 5 4 3 2 1 0 -1 0 0 105
>> length(t3) -> ans =10

(pas=1, implicit)
1.0000 1.2000
t[7]

b) val initial, val final, numar valori inclusiv prima i ultima (Vector cu spaiere liniar)
x=linspace(-300, 100, 5)
Rezult: x = -300 -200 -100 0 100
c) Vector cu valori spaiate logaritmic
x1= logspace(2, 4, 3)
%3 valori 10^2 10^3 10^4
x1 =
100
1000
10000
x1= logspace(-1, 2, 5)
=>
ans = 0.1000 0.5623 3.1623 17.7828 100.
Genereaz 5 valori 10^-1 10^2
(inclusiv capetele)
3.6. Numere complexe (coordonate carteziene i polare):
>>z = 3.0000 + 4.0000i
% x + iy
>>conj(z)
ans = 3.0000 - 4.0000i

% x - iy

>> z '
ans = 3.0000 - 4.0000i
>> r = abs(z)

>> r1=abs (conj(z))


r= 5

>> z+conj(z)
ans = 6
Faza:

r1 = 5
% x + iy + x iy = 2x

% rezult numr real


% Obs: conj(z) sau z

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

>> fi=angle(z)
fi = 0.9273

% cadran I
% pi/2=1.57rad

>> fi1=angle(conj(z))
fi1= - 0.9273 % cadran IV
>> pi/2
ans = 1.5708 % radiani
Fig. 1. Numrul complex z
n planul complex

Modulul:
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
>> sqrt ( z * conj(z) )
ans = 5
% verificare egalitate/ expresie logic
>> sqrt ( z*conj(z)) == abs(z)
ans = 1 (true)
%
%

%
%

Exprimare z n coordonate carteziene


z = x + j y sau z = z (cos + j sin )

Exprimare z n coordonate polare

z = z e j

Relaia lui Euler:

cos + j sin = e j
>> abs(z)*( cos(fi) +i*sin(fi) )
ans =
3.0000 + 4.0000i

>> abs(z) * exp(j*fi)


ans =
3.0000 - 4.0000i

Adunare i scdere de numere complexe:


z = 3.0000 + 4.0000i
z2= -4.00 + 2i

z+z2= ( x + x 2 ) + j ( y + y 2 )
z-z2= ( x x2 ) + j ( y y 2 )

>> z + z2
ans = -1.0000 + 6.0000i
>> fi_sum=angle(z+z2)
fi_sum= 1.7359 % radiani

% rezultat in Cadran II
>> angle(z+z2) > pi/2
ans =

Variante de reprezentare grafic numere complexe


>> plot(z,'s')

% s=square

>> line([0 real(z)],[0 imag(z)])


% linie din (0,0) n ( real(z), imag(z) )

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

>> hold

%Current plot held

>> plot(z2,'s')
>> line([0 real(z2)],[0 imag(z2)])
% traseaza a doua linie
Reprezentare vectori cu originea n (0,0):
z = 3.0000 + 4.0000i

compass([z, z/i, z*i]) % fig. stanga


..............
z=exp(.3i)
compass([z, z^2, z^3, z^4], '-*r') % fig. dreapta
Inmulirea a dou numere complexe
Forme carteziene:
z1*z2= ( x1 + j y1 )( x2 + j y 2 ) =

Forme polare: z1*z2= z1 z2 e j (1 + 2 )


= produsul modulelor i suma fazelor

( x1 x2 y1 y 2 ) + j ( x1 y 2 + y1 x2 )

Inmulire n forme polare:


>> abs(z)*abs(z2)*exp(fi*i)*exp(fi2*i)

>>z = 3.0000 + 4.0000i


>>z2= -4.00 + 2i
>> z*z2
ans =
-20.0000 -10.0000i

ans =
-20.0000 -10.0000i

Imprirea a dou numere complexe


Forma cartezian:

z x + j y ( x + j y )(u jv ) ( xu + yv ) + j ( xv + yu )
=
=
=
w u + jv
(u + jv )(u jv )
u2 + v2
xu + yv j ( yu xv )
= 2
+ 2
u + v2
u + v2
>>z = 3.0000 + 4.0000i
>>z2= -4.00 + 2i
>> z / z2
ans =
-0.2000 - 1.1000i

Forme polare:

z e j1
z
z1
= 1 j = 1 e j (1 2 )
z2 z2 e 2
z2
= ctul modulelor i diferena fazelor

Imprire n forme polare (explicit):


>> abs(z) / abs(z2)*
exp(fi2*i)
ans =
-0.2000 - 1.1000i

exp(fi*i)/

Inmulirea jz= j ( x + j y ) = jx y = y + jx
Numrul complex jz se obine prin rotirea lui z cu 90 grade n sens
trigonometric.
Varianta polar: j = 1 e
Imprirea z/j=

=> jz= 1e

* z e j = z e

j ( + )
2

x + j y jx y
=
= y jx
j
1

Varianta polar:

Fig. 4. z i z/ j=y-jx

10

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

j ( )
j ( )
j ( )
1
j
2
z = z
= z ( j ) = z 1 e 2 = z e j * e 2 = z e
j
1

Numrul complex z/j se obine prin rotirea lui z cu 90 grade n sens orar

Curs 2
Grafic z, z*j, z/j
4

>> plot(z, 's')


>> hold
% Current plot held
>> plot(z * j, '*')
>> plot(z / j, 's')
>> line([0 real(z)],[0 imag(z)])
>> line([0 real(z*j)],[0 imag(z*j)])
>> line([0 real(z / j)],[0 imag(z / j)])
>> grid on

-1

-2

-3
-4

-3

-2

-1

% line( [ 1 2 3], [2 5 -1] ) tablou abscise, tablou ordonate


Ridicai un numr complex la puterea n.

3.7 Calcule elementare cu matrice


>> B=[-1 0 1] ' % B 3x1
>> A=[1 2 3; 3 4 5; 5 6 7]
A=
B=
1 2 3
-1
3 4 5
0
5 6 7
1
>> A*B %3x3 3x1->3x1 >> A'*B
% 3x3 3x1 -> 3x1
ans =
ans =
2
4
2
4
2
4
Preluare de zone din matrice:
>> C1=A(2,:)
>> C2=A(:,3)
C1 =
C2 =
3 4 5
3
5
7
>> C2*C1 %3x1 1x3 ->3x3 >> A(1:2,:)
ans =
ans =
9 12 15
1 2 3
15 20 25
3 4 5
21 28 35
Produs scalar a doi vectori de valori:
>> A(1:4) %luate pe coloane
>> V= 1:2:7
V=
ans =
1 3 5 7
1 3 5 2
Inversa matricei
>>D=[exp(2) 1; sqrt(2) 5; 1 tand(0)]
D=
7.3891 1.0000
1.4142 5.0000
1.0000
0

>> D(3,3)=7 %add 1 col


D=
7.3891 1.0000
0
1.4142 5.0000
0
1.0000
0 7.0000
>> D*D^-1
ans =
11

>> B'
ans =
-1 0
>> B'*A
ans =
4

1
%1x3 3x3 -> 1x3
4

>> C1*C2 %1x3 3x1 ->1x1


ans =
64
>> C1(2:3)*A(1:2,:)

ans =
19 28 37
>> A(1:4)* V'
ans =
%1x4 4x1->1x1
49
>> D^-1 %inversa 3x3
ans =
0.1407 -0.0281
0
-0.0398 0.2080
0
-0.0201 0.0040 0.1429
>> D^-1 * D
ans =
Prof.dr.ing. Iulian Lupea
Programarea i Utilizarea Calculatoarelor

1.0000
0
0
-0.0000 1.0000
0
0.0000 -0.0000 1.0000
>> 2*D = = D+D %test
ans =
1 1 1
1 1 1
1 1 1
Impriri / i \
>> M=magic(3)
ans =
8 1 6
3 5 7
4 9 2

% suma pe fiecare linie =


=suma pe fiec. col. =
=suma DP =suma DS=15

>> M/D
ans =
0.9654
0.0824
0.1645
>> M\D
ans =
0.9474
-0.3146
0.0207

0.0069
0.9835
1.7671

0.8571
1.0000
0.2857

-0.5750 0.4472
0.0500 0.7389
0.9250 -0.7194

1.0000 0.0000
0
-0.0000 1.0000
0
-0.0000 -0.0000 1.0000
>> D*D= =D^2 %la putere
ans =
1 1 1
1 1 1
1 1 1
>> M * D^-1
ans =
0.9654 0.0069
0.0824 0.9835
0.1645 1.7671
>> M^-1 * D
ans =
0.9474 -0.5750
-0.3146 0.0500
0.0207 0.9250

%=M / D
0.8571
1.0000
0.2857
%M \ D
0.4472
0.7389
-0.7194

3.8.Tipuri de date in Matlab


Tipul fundamental de dat la baza produsului Matlab este matricea.
Elementele matricei sunt de acelai tip de dat: ntreg sau real, logic, caracter, structur etc.
Tipurile structur i tablouri de celule stocheaz tipuri diferite de date n cmpurile lor.
Pot fi de asemenea dezvoltate tipuri noi de date proprii utilizatorului folosind clase Matlab
(user classes i Java classes). Sunt 15 tipuri fundamentale de date (matrice sau tablou) variind de la
minim 0 x 0 elemente la n dimensionale.
Cuvintele cheie asociate
tipurilor fundamentale sunt
scrise cu litere mici (Figura->).
Pot fi create matrice 2D
de tip double i logical fiecare
putnd fi n format FULL sau
SPARSE (pentru matrice cu
marea majoritate a elementelor
nule pentru economie de
memorie).

Tipul de dat
ntreg:

int8,
int16,
int32,
int64,

Exemple
uint16(65000)
( conversie la uint16 )

Descriere
Tablou de ntregi signed (int) i unsigned (uint)
O valoare ocup 8, 16, 32 resp. 64 bii n memorie
tip data
ce valori poate conine:
[de la -128 la 127]
int8
[de la 0
la 255]
uint
[-32768 la 32767]
int6
[ 0
la 65535]
uint16
[ -2^63 la (2^63)-1 ]
sau:
int64

single(3.1 * 10^38)

Tablou de numere n simpl precizie. Dpdv al

uint8,
uint16,
uint32,
uint64

[ -9.2234e+018 la 9.2234e+018]

Single

12

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

(4 octei)

single(5+6i)
%conversie 16->8oct

Double
(tip implicit)

3.4 * 10^300
5 + 6i
[1 2; 3 4.1]

(8 octei)

Logical

x = [true, true, false, 1];

(1 octet)

>> magic(2) => ans =


1 3
4 2
>> magic(2) > 2
ans =
0 1
1 0
'Dati val. pt. vector: '
mesaj='Hello'
>> mesaj(2:4)
ans =
ell

Char
(2 octei/
caracter)

Structure

length('Dati val. pt. vector: ')


ans = 22
str.numar = 124;
str.color = 'alb';
str.matr = magic(3);
str.logic=[true];

prin . se refera cmpul


str(2).numar = -17;

Cell array

a{1,1} = 12;
a{1,2} = 'Red';
a{1,3} = magic(4);
a{2,3}='a'

memoriei: mai puin dect tipul double avnd mai


mic precizie i domeniu de valori mai ngust.
Domeniul <0:[ -3.40282e+038 to -1.17549e-038] i
>0: [1.17549e-038 to 3.40282e+038 ]
Spaierea:Eps(1)=4.7684e-007 aprox. (=2^-21)
Tablou de numere n dubl precizie (este tipul implicit
de dat). Tablourile 2D pot fi de tip sparse.
Domeniul: -1.79769e+308 to -2.22507e-308 i
2.22507e-308 to 1.79769e+308
Spaierea(eps): 2.2204e-016 aprox (=2^-52)
Exist dou valori logice: 1 (true) i 0 (false).
Orice valoare diferit de 0 este considerat true (1)
>> true & [0 1 4 -4 false true]
ans =
0 1 1 1 0 1
Tablourile 2D de valori logice pot fi sparse (rare).

Tablou de tip caracter (sau ir de caracterestring);


- fiecare caracter se memo. pe 16 bii (2oct) lungime.
Tablou de caractere. irurile sunt reprezentate ca
vectori de caractere. Pentru tablouri ce conin mai mult
de un ir se prefer folosirea tipului cell arrays.
Structura este un set de cmpuri; fiecare cmp are
nume propriu (numar, color, matr, logic) i memoreaz
orice tip de dat. Structura are nume ex:str .
O structur singular este un tablou 1 x 1 de structuri
aa cum un scalar numeric (ex:7) este o matrice 1 x 1.
Se pot forma tablouri de structuri.
Tablou de celule indexate. Fiecare celul poate
memora un tablou de orice tip sau mrime.
Celulele tabloului se refer prin acolade :
ex: a{1,1} este tablou 1x1 de double, a{1,2}->tablou 1x3
caractere, a{1,3} -> matrice 4x4

Function
handle

b={5, 'e', [1 2;3 4]}


ra2=@sqrt
struct(2).a1=@sin
cell2{4,1}=@cos

User class
Java class

polynom([0 -2 -5])
java.awt.Frame

cell2={12, 'asdf', [1 2;3 4]; 1:3,[],'aa'} (alt exemplu)


Pointer la o funcie.
Cmpul a1 al structurii struct memoreaz pointer la
funcie.
>> ra2(2) ans = 1.4142
>> cell2{4,1}(pi)
>> struct(2).a1(pi/2)
ans = > -1
ans= > 1
Obiecte construite dintr-o clas definit de utilizator
Obiecte construite dintr-o clas Java (vezi clase Java)

Valorile numerice sunt stocate intern, implicit n format virgul mobil double-precision.
Pentru a stoca un ntreg trebuie realizat conversie (vezi funcii de conversie) de la tipul double la
tipul ntreg dorit.
Ex.1. Conversie la ntreg pentru a memora val. 325 ntr-o variabil ntreag cu semn pe 16-bit:
x = int16(325);
% x este un tablou 1 x 1 de ntregi cu semn
x1=int32(500.499) % se va memora 500 (partea fracionar este neglijat)
13

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

x2=int32(500.500) % se va memora 501 (rotunjire la ntregul mai mare)


Ex.2.Tablou de valori logice
>> val_log=true

$ este un tablou 1x1 de valori logice

>> a = [true, true, false, true, false]


a=
1 1 0 1 0
>>b = [2.5 6 .7
>>isfinite(b)
ans => 1 1
>>d=magic(3)
8 1
3 5
4 9

9.2
1
6
7
2

inf

$ a este tablou 1 x 5 de val. logice

4.8];

% testeaza daca valorile sunt finite


0 1
>> d >= 5
% sume pe linii=
ans =
%=sume pe coloane=
1 0 1
%=suma pe DP si DS =15
0 1 1
0 1 0

Ex.3.Tablou 1D - ir de caractere, 1 x 14 numit: pr_nu


>> pr_nu =Marius Giurgiu
>> length('Marius Giurgiu')
ans =
14
% 14 x 2 -> 28 octeti in memorie
- n workspace apare:
Name
Size
Bytes
Class
pr_nu
1x14
28
char
Tablou 2D de caractere <2 x 15 char> sau tablou de iruri de caractere de lungimi egale:
>>nume = ['Marius Giurgiu ' ; 'Mircea Bolboaca'] % s-a adugat 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
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 funcia cellstr:
>> cell_array1=cellstr(nume)
cell_array1 = { 'Marius Giurgiu' , ...
'Mircea Bolboaca' }
>> cell_array1{1}
ans =
Marius Giurgiu
cell_array1{1}(1)
ans => M

>> cell_array1{2}
ans =
Mircea Bolboaca
>> cell_array1{2}(2:4) % identific cell cu { }
ans =
% apoi in tablou refer cu ( )
irc

Ex.4. Structuri (tablou de cmpuri cu nume)


Construirea unui tablou de structuri 1x1 (structur singular) prin asignare de date fiecrui
cmp n parte:
student.nume = 'Giurgiu';
student.prenume = 'Marius';
student.note = [9 7 10; 8 9 10; 9 8 4];
In continuare se poate aduga a doua structur din tablou => tablou de structuri:
student(2).nume='Botean'
student(2).prenume='Tudor'
student(2).note=[5 8; 9 9; 10 9]
14

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Accesarea datelor n structur:


Pentru afiare n fereastra de comenzi tastm:
student(1) % sau student(2)
ans =
nume: 'Giurgiu'
prenume: 'Mircea'
note: [3x2 double]
student(1).note
ans =
9 7 10
8 9 10
9 8 4
student(2).note(3,1)

ans =
10
Exemple: Cell arrays
Tabloul(matricea) de celule este folosit la stocarea indexat a datelor de tipuri diferite. n
celulele tabloului pot fi stocate date de tipuri i mrimi diverse. Putem spune c celulele sunt
cmpuri fr nume (dar indexate pentru a putea fi referite).
Ex1: Urmtoarea instruciune creeaz un tablou A de 2 x 2 celule:
>>A = {[1 4 3; 0 5 8; 7 2 9], 'Marius Giurgiu' ; 3+7i, -pi : pi/4 : pi};

Se poate iniializa individual fiecare celul:


A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
%sau A{1,1} = [1 4 3; 0 5 8; 7 2 9];
% Obs: paranteze rotunde ( ) i acolade {} NU: A3{1,1} = {[1 4 3; 0 5 8; 7 2 9]}
A(1,2) = {'Marius Giurgiu'};
%sau A{1,2} = 'Marius Giurgiu';
A(2,1) = {3+7i};
% A{2,1} = 3+7i;
A(2,2) = {-pi:pi/4:pi};
% A{2,2} = [-pi:pi/4:pi];
Dac introducem >A(3,3) = {5}; se va extinde tabloul
de celule cu 4 celule vide.
(clear A
!!salt.....

%Se terge A i se initializeaz din nou)

Ex2: Celule n celule

*se iniializeaz:

A{1,1} = { [1 4 3; 0 5 8; 7 2 9] }
% se obine un cell array pentru A{1,1}
A{1,3} = {'abc', 'de'} i >>A{2,2} = [1 2 3]

Extragem caracterul b: A{1,3}{1,1}(2)


Ex3: n figura alturat observm un tablou de
celule cu urmtoarele componente (celule):
aa{1,1} conine tablou de ntregi fr semn,
aa{1,2} conine tablou de iruri de caractere (irurile
sunt de lungimi egale),
aa{1,3} conine tablou de numere complexe
aa{2,1} conine ir (1D) de numere n virgul mobil
aa{2,2} conine tablou 2D de ntregi cu semn
aa{2,3} conine tablou de celule de tipuri variate
Ex.4: Observai alte exemple:
aa{1,1}={1 2 3; 2 3 4; 3 4 5} %9celule num.
aa{1,2}={'11'; 'qwe'; 'wd45'}

15

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

aa{1,3}={'11' 'qwe' 'wd45'}


aa{1,4}={'11', 'qwe', 'wd45'}
aa{2,3}={'text', [4 2;1 5]; [1.2 2.3;1.22 1.3], .2+5i}

Exemplu - referire elemente:


aa{2,3}{1,1}(2)='a'

% s-a schimbat e cu a

aa{1,1}{2,2}='abc' % numar 3 nlocuit de ir abc


Ex.5:

WIREFRAME. Stack{1,1}(1,1)
Structura WIREFRAME cu cmpul Stack de tip cell array; se refer celula {1,1} care este
un ir de caractere => este referit primul caracter din ir.
2.Operatori
Operatorii MATLAB pot fi clasificai n trei categorii:
Operatori aritmetici
Operatori relaionali (compar operanzii cantitativ)
Operatori logici

*Operatori aritmetici
+
Adunare

.^

Fiecare element din matrice la putere


[2 3 4] .^ 2 => [4

9 16]

Scdere

'

Transpusa unei matrice reale

.*

nmulire element cu elem.

'

Transpusa + conjugate complexe a numerelor


complexe din matrice (dac exist)

.'

Transpusa fr conjugata complex a

[2 3] .* [10 20] -> [20 60]

./

mprire la dreapta: 1 ./ [1 2 3]
1.0000 0.5000 0.3333
>>[1 2] . / [2 3]
0.5000 0.6667

.\

mprire la stnga: 2 .\ [1 2 3]

numerelor complexe

nmulire matriceal (| nm. dou numere)


Amxn * Bnxp => Cmxp

0.5000 1.0000 1.5000

Plus unar

A/B

mprire matriceal la dreapta A*B^-1

Minus unar

A\B

mprire matriceal la stnga A^-1 *B

Operatorul dou puncte

Matrice ptratic 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 cellalt scalar. n acest caz MATLAB-ul aplic
scalarul fiecrui element al matricei, ex: [2 3] 1 [1 2] sau: [2 3] ./ 2
*Operatori relaionali
<
Mai mic
<=
Mai mic sau egal
>
Mai mare

>=
==
~=

Mai mare sau egal


Egal cu
Diferit de

Operatorii relaionali compar elementele corespondente ale unor tablouri de dimensiune egal.
Operatorii relaionali lucreaz totdeauna element cu element. Exemplu:
1 < sqrt(2)
ans =
1
A = [2 7 6; 9 0 5; 3 0.5 6];
B = [8 7 0; 3 2 5; 4 -1 7];

16

>> pi ~= 3.14
ans =
1
A == B
ans =
0
1
0
0
0
0

0
1
0

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

>> A >= B
0
1
0

Rezultatele comparaiilor sunt valori de tip


logic: 0 sau 1

1
0
1

1
1
0

*Operatori logici
&
|
~

1 & 1 -> 1
AND (I)
0 & 1 -> 0
OR (SAU)
NOT (Negatie) 1 & 0 -> 0
0 & 0 -> 0

1
0
1
0

I
I
I
I

1
1
0
0

-> 1
-> 1
-> 1
-> 0

XOR(0, 0) -> 0
XOR(0, 1) -> 1
XOR(1, 0) -> 1
XOR(1, 1) -> 0
% EXCLUSIVE OR

Operatorii logici aplicai elementelor corespondente ale unor tablouri de dimensiuni egale.
Pentru vectori i tablouri dreptunghiulare ambii operanzi trebuie s aib aceeai dimensiune

O expresie care utilizeaz operatorul & (I) este adevrat dac ambii operanzi sunt
adevrai. n termeni numerici, expresia este adevrat 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 adevrat dac cel puin unul dintre
operanzi este logic adevrat. Pentru operanzi numerici, expresia este fals dac ambii
operanzi sunt nuli. Exemplu:
u | v
ans = 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
~u
ans= 0 1 0
~~u
ans= 1 0 1

3 0 -5];
0 1

1 0

% numai 0 i 1

Un operand este scalar i cellalt vector: n acest caz, ca i la operatorii aritmetici,


MATLAB-ul aplic scalarul fiecrui element al celuilalt operand.
u = [1 0 -2 3 0 -5];
>> u | 0
ans = 1 0 1 1 0 1 % valorile True devin 1

v = 5 6 -1 0
>> v & 4
ans =1 1 1 0

Funcii logice
n plus fa de operatorii logici MATLAB-ul furnizeaz i funcii logice:
Funcie
xor( )

all( )

Descriere
Exemple
Realizeaz sau exclusiv. Returneaz logic adevrat dac
a = 1;
unul din operanzi este adevrat i cellalt fals. n termeni
b = 1;
numerici, returneaz 1 dac un operand este nenul i cellalt
xor(a,b)
este zero.
ans = 0
u = [0 1 2 0];
Parametrul este vector: returneaz 1 dac toate elementele
all(u)
vectorului sunt adevrate sau nenule (true).
ans = 0
Parametrul este matrice (all() acioneaz pe coloane):

17

A = [0 1 2;
3 5 0];
all(A)
ans = 0 1 0
Prof.dr.ing. Iulian Lupea
Programarea i Utilizarea Calculatoarelor

any( )

v = [5 0 8];
any(v)
ans = 1
>> any([5 0 8 ;
2 0 0 ])
ans = 1 0 1

Parametrul vector: returneaz 1 dac cel puin unul dintre


elementele argumentului este adevrat (nenul); n caz
contrar returneaz 0.
Parametrul matrice (any() acioneaz pe coloane)

Alte funcii: isnan, isinf, find.


CURS 3

3.Prioritatea operatorilor
Se pot scrie expresii care folosesc orice combinaie de operatori aritmetici, relaionali i logici.
a) ordinea de evaluare a expresiei este dat de nivelele de precedena/prioritate
b) n cadrul fiecrui nivel de preceden operatorii au aceeai prioritate i se evalueaz de la
stnga 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. nmulire (.*), mprire la dreapta (./), la stnga (.\), nmulire de matrice (*),
mprire matrice dreapta ( / ), mprire matrice stnga ( \ )
5. adunare ( + ), scdere ( - )
6. operatorul dou puncte ( : )
7. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal (>=),
test egalitate (= =), test diferit (~ =)
8. i (&)
9. sau (|)

Exemplu: observai scrierea compact i eficiena/ puterea operatorilor n Matlab:


S se evalueze (fr ciclri) expresia A(r,):
A( r , ) =

1 + 4 2 r 2
(1 r 2 ) 2 + 4 2 r 2

r=0 : 0.005 : 2.5 i


=[0.03, 0.05, 0.1, 0.2, 0.5] % ze

ze=[0.03 0.05 0.1 0.20 0.50]';


r=0 : 0.005 : 2.5;
% ze este transpus
X=sqrt( ((2*ze*r).^2+1) ./ ( (ones(size(ze))*(1-r.*r).^2) + (2*ze*r).^2) );
plot(r,X)
% transmisibilitate for asupra masei la suport fix

La numrtor: prin ze*r se nmulete:


o matrice coloan (5x1) ze ( transpune) cu o matrice linie (1x501) r;
apoi se ridic la ptrat fiecare element din matrice.
>> ze=[0.03 0.05 0.1 0.20 0.50]'
ze = 0.0300
0.0500
0.1000
0.2000
0.5000

>> r=0 : 0.005 : 0.03


r=
0 0.0050 0.0100 0.0150 0.0200 0.0250 0.0300

>> ze * r
ans =
0 0.0001
0 0.0003
0 0.0005
0 0.0010
0 0.0025

0.0003
0.0005
0.0010
0.0020
0.0050

0.0004
0.0008
0.0015
0.0030
0.0075

0.0006
0.0010
0.0020
0.0040
0.0100

0.0007
0.0013
0.0025
0.0050
0.0125

0.0009
0.0015
0.0030
0.0060
0.0150

La numitor: primul termen (1 r 2 ) 2 rezult vector iar al doilea

4 2 r 2 matrice => avem nevoie de matrice i n primul termen.


size(ze) returneaz perechea de valori (5,1); acesta este argument
pentru funcia ones() care creaz matricea cu 5 linii i o coloan de
valori unitare.

18

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

>> ones(size(ze))
ans =
1
1
1
1
1
>> [1 1 1]' * [4 5 6 7 8]
ans =
4 5 6 7 8
4 5 6 7 8
4 5 6 7 8

ones(size(ze))*(1-r.*r).^2
Sunt generate 5 linii identice care vor fi adunate cu
matricea (2*ze*r).^2 (n care fiecare linie (r) se
nmulete cu un alt zeta)
ze*r => matrice 5x501
X
=> matrice 5x501
plot(r,X) => 5 grafice, pentru abscisa (vectorul) r se
traseaz fiecare linie din matricea X.

4. Instruciuni pentru controlul derulrii unui program


4.1 . if - end, if else - end, if - elseif else - end,

if elseif - end

- execut un grup de instruciuni pe baza unei condiii logice.


- dup elseif poate s nu mai existe un else
if expresie_logica
grup de instructiuni
end
...
i=2;
j=input('j= ');
if i+j>0
fprintf('i+j=%7.2f\n',(i+j)^2 );
end

if expresie_logica
grup1 de instructiuni
else
grup2 de instructiuni
end
--------if x>0
fprintf('x este numar pozitiv\n')
else
fprintf('x negativ sau zero\n')
end
if a>b
a=input('a= '); b=input('b= ');
if a>b
disp('a>b')
elseif a<b
'a>b'
disp('a<b')
else
else
%a==b
'a mai mic sau egal cu b'
end
disp('egalitate')
end
n=input('n= ');
if n <= 0
%Daca n este negativ afisaza un mesaj de eroare.
disp('valoarea furnizata trebuie sa fie pozitiva');
elseif rem(n,2)==0 %Daca n este pozitiv si par, imparte n la 2.
A = n/2; disp('n par');
else
%Daca n este pozitiv si impar incrementeaza si imparte la 2
A = (n+1)/2; disp('n impar');
end
a=input('a= '); %carui interval apartine a?
%test daca a<-5 sau >5
if a<-20
a=input('dati valori vector a=');
if a(1)>5
disp('a<-20')
elseif a<-10
disp('a(1)>5')
elseif a(1)<-5
disp('-20 <= a <-10')

19

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

elseif a<0
disp('-10 <= a <0')
elseif a<10
disp( '0<=a<10')
else
disp('a>=10')
end

end

disp('a(1)<-5')
% pt. a intre [-5 si 5] nu se afisaza

4. 2.switch, case otherwise


switch expresie %scalar sau sir de caractere/string
case valoare_1
grup 1 instructiuni
% se execut dac: expresie == valoare_1 =>true

case valoare_2
grup 2 instructiuni
% se execut dac: expresie == valoare_2 =>true

case valoare_n
grup n instructiuni
otherwise
grup n+1 instructiuni
% se execut dac expresie nu egaleaz nici un caz

end

% switch poate rezolva mai multe condiii ntr-un


% singur caz prin folosirea acoladelor { } (cell array).
var=input('var= ')

switch var
case 1
disp('1')
case {2,3,4}
disp('2 sau 3 sau 4')
case 5
disp('5')
otherwise
disp('alt valoare')
end

exemplul 2
switch var1
case -1
disp('minus unu');
case 0
disp('zero');
case 1
disp('unu, pozitiv');
otherwise
disp('alta valoare');
end

sircar = input('Tastati o culoare: ','s'); % descriptor s pentru citire sir car.


switch sircar
% valoarea citita este sir de caractere
case 'rosu'
disp('ati tastat rosu');
case 'galben'
fprintf('ati tastat %s\n', sircar);
case {'albastru','violet'}
disp('ati tastat albastru sau violet');
otherwise
disp('ati tastat altceva decat rosu, galben, albastru, violet');
end

Spre deosebire de limbajul C, daca un caz este adevrat i acesta se execut, se sare dup end fr a
folosi instruciune break. In C se execut implicit i cazurile urmtoare (daca nu exist instr. break).

4.3. Instruciunea de ciclare for


- Execut o instruciune sau un grup de instruciuni de un numr cunoscut dinainte de ori:

20

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

for index = start:increment:end


grup de instructiuni
end
x=3:8; %sau x=[3 4 5 6 7 8];
suma=0; %initializam variabila suma
for i=1:length(x)
suma=suma + x(i);
end
suma
% se afisaza 33
% sau acelai rezultat: sum(3:8) sum([3:8])

for k=1:2:n
x(1)=1; %se adaug valori in vect. x(i)
n=100; %increment <0
. . .
for n = 2 : 6
for k=n:-1:1
end
x(n) = 2 * x(n - 1);
. . .
end
end
% rezulta: 1
2
4
8 16 32
i=sqrt(-1);
%valoarea implicita a lui i
for x=0: pi/30 : 2*pi
%pas real
fprintf('x=%6.4f sin(x)=%7.4f %g+ %gi\n', x, sin(x), real(exp(i*x)), imag(exp(i*x)) );
end
x=0.0000 sin(x)= 0.0000 1+ 0i
% Relaia lui Euler: e^(ix) = cos(x) + isin(x)
x=0.1047 sin(x)= 0.1045 0.994522+ 0.104528i
% Observm: x sin(x) pentru x=mic
x=0.2094 sin(x)= 0.2079 0.978148+ 0.207912i
x=0.3142 sin(x)= 0.3090 0.951057+ 0.309017i
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
..
Instruciune for n corpul unei alte instruciuni 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
end
plot(1:lin,B) %sau plot(B)= fiecare coloana o curb

plot(1:col, B) % o linie=o curba

Ciclul for
versus
x=1:.1:10; %Cod scalar:
for k=1:length(x)
y(k)=sin(x(k));
end
plot(x,y)

vectorizare
Cod echivalent prin vectorizare:

--------------

----------x=-5:0.1:25;
y=x+sin(x);
plot(x,y)

x=-5:0.1:25; %Cod scalar:


for k=1:length(x)
y(k)=x(k)+sin(x(k));
end
plot(x,y)

x=1:.1:10;
y=sin(x);
plot(x,y)

% Ciclul for

%vectorizare

21

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

x=[1 2 3 4]
miu = sum(x)/length(x); %scalar
suma=0;
for i=1:length(x)
suma=suma +(x(i)-miu)^2
end
variance1=suma/length(x);
% variance1 -> 1.25

miu = sum(x)/length(x);
variance2=sum(( x-miu).^2)/length(x);

sau:
sau:

sum((x-miu).*(x-miu))
(x-miu)*(x-miu)
n

VAR = x2 = 1 ( X [i ] ) 2
n
i =1

Calcule cu matrice
%Numrare elemente ai pozitive din vector
a=input(`Tastati sir numeric= `);
%exemplu [5 -3 1 -9 4 1]
contor=0;
for i=1:length(a)
if a(i)>0
contor=contor+1
end
end
display(contor)

---------------------------

Suma elementelor aij de pe DP (i = j) folosind un ciclu for


a= [2 -1 3; ...
-9 4 1; ...
2 2 2]
sum=0;
nc= length(a(1,:)) %lin 1 i toate coloanele
for i=1:nc
sum=sum + a(i,i);
fprintf('i=%d j=%d a=%.3f\n',i,i,a(i,i));
end
sum

Suma elem. aij de pe DS (i+j=n+1) folosind un ciclu for


sumDS=0; n=nc;
for i=1:n
sumDS=sumDS + a(i,n+1-i);
end
sumDS

Se citete matricea ptratic a=[1 2 3 4;


2 3 4 5;
3 4 5 6;
4 5 6 7].
Se parcurg elementele matricei unu cte unu pe linii i se calculeaz suma elementelor pozitive situate
deasupra DP i deasupra DS.
Fiecare element nsumat va ndeplini simultan trei condiii:
Condiii de poziie n matrice: 1) i<j
selecteaz elementele aij situate deasupra DP
Condiia de valoare este:

2) i+j<n+1
3) a(i, j)>0

selecteaz elem. deasupra DS

Varianta 1: se parcurge ntreaga matrice


a=input(`Intr. Matrice patratica=`)
% tastati: [1 8 3 ;-9 4 1; 2 2 2]
n=length(a(:,1)); % (toate liniile, coloana 1)
sum=0;
for i=1:n
%ciclu exterior: ciclarea liniilor
for j=1:n
%ciclu interior: ciclarea coloanelor
if i<j & i+j<n+1 & a(i,j)>0
%expresie logica
sum=sum+a(i,j);
fprintf('i=%d j=%d a=%.3f\n',i ,j , a(i,j));
end
end
end
sum
Varianta 2: parcurgerea numai a zonei de interes
for i=1: floor(n/2)
%ciclu exter. = ciclarea liniilor
for j=i+1 : n-i
%ciclu interior = cicl. coloane
DS: j=n+1-i
if a(i,j)>0
%expresie logica
sum=sum+a(i,j);
fprintf('i=%d j=%d a=%.3f\n',i ,j , a(i,j));
end
end
end

22

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Produsul a dou matrice a i b

a=input('matricea a=');
b=input('matricea b=');
[aL aC]=size(a);
[bL bC]=size(b);
c=zeros(aL,bC);
if(aC ~= bL)
'nu se pot inmulti matricele'
else
for i=1:aL
for j=1:bC
for k=1:aC
c(i,j)=c(i,j)+a(i,k)*b(k,j);
end
end
end
display(c)
if all(all(a*b == c))
'corect'
end
end

4.4. Instruciunea de ciclare while cu condiionare anterioar

CURS 4

-execut un grup de instruciuni de un numr nedefinit de ori, sub controlul unei condiii logice.
while expresie logica

bloc de instructiuni
end

(1) Se evalueaz expresie logica (E_L).


(2) Daca E_L este True se executa bloc de
instructiuni si se trece iar la (1)
(3)Dac E_L este False se trece direct dupa
end
i=-2;
while i<7
i=i+1;
end
i

Suma tuturor elem. din ir:


x=6:-1:1; %sau x=[6 5 4 3 2 1];
suma=0; %initializam variabila suma
i=1;
%initializam indicele i
n_e= length(x)
while i <= n_e
suma=suma + x(i);
i=i+1; %indicele incrementeaza
end
suma

%suma elementelor x(2) x(5)din sirul x


x=-3:5; suma=0; i=2;
while i<=5
suma=suma+x(i);
i=i+1;
end
suma
amplasare elemente in sir:
x(1)
...
x(2)
x(3)
x(4)
x(5)
-3
-2
-1
0
1
...
%instructiune while in corpul while
m=input('linii m= ');
n=input('coloane n= ');
i=1;
while i<=m
%se repeta de m ori
j=1;
while j<=n %se repeta de m x n ori
A(i,j) = 1/(i + j - 1);
j=j+1;
end
i=i+1;
end
i
j
plot(A);
% este mai dificila gestionarea indicilor
%dect n cazul folosirii ciclului for

23

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

5. Scheme logice asociate instruciunilor de decizie i de ciclare


Schemele logice conin: blocul de start, B.de stop, B intrare date, B. ieire date
(paralelograme), B. de decizii logice (romb), bloc de atribuiri i calcul (dreptunghi) (interconectate
prin sgei orientate).
if expresie_logica
grup de instructiuni
end

..
if expresie_logica
grup1 de instructiuni
else
grup2 de instructiuni
end
..

for index = start:increment:end


grup de instructiuni
end

while expresie logica


bloc de instructiuni
end
switch expresie
% scalar sau sir de caractere/string
case valoare1
grup1 instructiuni
case valoare2
grup 2 instructiuni
...
case valoare n
grupn instructiuni
otherwise
grup n+1 instructiuni
end

24

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

S se traseze schema logic asociat programului de mai jos: conine decizii multiple n corpul ciclului for

Programul contorizeaz numrul de


apariii n irul x a valorilor 1, 2, 3 i restul
de valori.
x=input('Tastati un sir de valori x=[...] ');
v1=0; v2=0; v3=0; v=0;
for i=1:length(x)
if x(i) ==1
v1=v1+1;
elseif x(i) == 2
v2=v2+1;
elseif x(i) == 3
v3=v3+1;
else
v=v+1;
end
end
fprintf('v1=%d v2=%d v3=%d
v=%d\n',v1,v2,v3,v);

Observai:
1.Asemnarea 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 mrginete corpul
instruciunii de ciclare for i conine
deciziile multiple
4. Rescriei exemplul folosind
instruciunea switch-case
5. Rescriei exemplul numai cu if.

5. Definirea unei funcii n Matlab


5.1. Sintaxa definirii unei funcii:
in1, in2,inn sunt argumente de intrare
(parametri formali)
ou1,out2,outm sunt argumente de ieire
in1, in2, ou1,out2, sunt variabile locale

ai sunt parametri actuali sau efectivi care au


valori concrete la momentul apelului funciei
ri primesc valorile de la outi

1. Funciile sunt subprograme (apelate) care folosesc parametri de intrare (in1, in2,) i parametri
de ieire/calculai (ou1,out2,) pentru a comunica cu programul apelant, cu alte funcii sau cu
fereastra de comenzi.
2. Definiia funciei este salvat ntr-un fiier ce poart acelai nume cu cel al funciei sau altul i
extensia .m In cazul n care numele funciei este diferit de al fiierului se folosete numele
fiierului la apel. Calea spre fiier trebuie setat Set Path dac fiierul nu se afl n directorul
curent sau n lista de ci spre directoare.
3. Apelul funciei este: nume_fun(a1, a2,,an) unde a1, a2, ,an sunt parametri efectivi
(actuali) avnd valori concrete/cunoscute (la momentul apelului).
25

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

4.Valorile parametrilor efectivi sunt transferate parametrilor formali n ordine de la stnga la dreap.
5. O funcie poate fi apelat de mai multe ori; la fiecare apel, prin parametri de intrare, se aplic
acelai algoritm de calcul unor date de intrare diferite.
6. Folosirea funciilor permite modularizarea programului (anumite sarcini de calcul s fie
ncapsulate)
7. Funciile folosesc variabile locale funciei, variabile care exist numai pe timpul execuiei
funciei: n fun_demo1: i, x; la ieirea din funcie variabilele locale se pierd (elibereaz memoria).
8. Variabilele locale sunt independente de variabilele cu acelai nume din programul principal
(apelant) sau din alte funcii.
9. Funcia poate fi apelat din linia de comand, dintr-o alt funcie sau dintr-un fiier script.
10. Funciile pot s nu aib argumente de intrare sau argumente de ieire.
11. Pentru funcia apelat dintr-o expresie, apelul se nlocuiete cu valoarea (valorile) returnat.
5.2. EXEMPLE - definiii i apeluri de funcii
1) Un parametru de intrare i unul de ieire
x = parametrul de intrare este vector
function y = average(x)
% AVERAGE media elementelor vectorului
y = parametrul de ieire este scalar
y = sum(x) / length(x);
Funcia average este salvat n fiierul average.m
end
APELURI valide ale funciei:
v=[1 2 3 -3 5];
v=[1 2 3 -3 5];
average([1 2 3 -3 5])
ave=average(v)
average(v)
ans =
ans = 1.6000
1.6000
2) 2 parametri de intrare i un (1) parametru de ieire
x,y doi parametri de intrare
function z=xplusy(x,y);
z=x+y;
z un parametru de ieire
Se salveaz definiia funciei ntr-un fisier cu numele xplusy.m
end
APELURI valide ale funciei:
a=1
a=[1 2 3; 3 4 5]
a=7
b=2
b=[7 8 9; 2 0 4]
b=[7 8 9; 2 0 4]
scal1=xplusy(a,b)
matr1=xplusy(a,b)
matr2=xplusy(a,b) * b' %apel n expresie
scal2=xplusy(1,2)
matr1=xplusy([1 2 3; 3 4 5] , b) matr2=xplusy(7, [7 8 9; 2 0 4])
3) 2 parametri de intrare, nu sunt parametri de ieire
function comp(a,b)
if a>b
'a>b'
elseif a<b
'a<b'
else
%a==b
'egalitate'
end

a,b parametri intrare; nu exista parametri de ieire


Salvam definitia n fiierul comp.m
APELURI:
>>comp(4,6)
*Rezultate sunt tiparite din functie

4) un parametru intrare, 2 parametri de ieire


function [s,sp]=sumapoz(x)
%returneaza suma si suma elem >0
s=0;sp=0;
for i=1:length(x)
s=s+x(i);
if x(i)>0
sp=sp+x(i);%insumare
%x(i)>0
end
end
end

26

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Apel:[suma, sp]=sumapoz([1 5 -3])

stdev =

Parametrii locali ai functiei pot


avea acelasi nume (sp) cu
variabilele din seciunea care
apeleaz

1
n

( X [i ] mean 2)

i =1

5. Instruciunea break determin ntreruperea ciclrii for sau while i salt la prima instruciune
dup instruciunea end a ciclrii.
6. Instruciunea continue trece controlul sau realizeaz salt la prima instruciune din urmtoarea
iteraie n cadrul ciclrilor for sau while.
7. Instruciunea return determin ieirea forat din funcie (funcia apelat f_A) i ntoarcerea n
punctul de apel din funcia apelant f_An (care a apelat funcia f_A) (funcia returneaz valorile la acel
moment a parametrului de ieire).
function out=fun_demo1(in)
i=1;
while i < in
x(i)=rand(1);
if x(i)>0.95
'se executa break'
break; % intrerupe ciclul while
end
i=i+1;
end
out=x;
%salvare x in out
i
display('exemplu cu break')
end %incheiere functie cu end optional

function out=fun_demo2(in)
i=1;
while i < in
x(i)=rand(1);
if x(i)>0.95
out=x;
%salvam x in out
i
'se executa return'
return; %iesire din functie
end
i=i+1;
end
out=x;
display('exemplu cu return')
i

Apel: a=fun_demo1(1.e2);

Apel: b=fun_demo2(1.e2);

Dac x(i)>0.95 True, iese din ciclu, salveaz x in out si


iese din functie
Altfel executa 1.e2 cicluri, salveaza x in out si iese

Dac x(i)>0.95 True, salveaza x in out si iese din functie


Altfel executa 1.e2 cicluri, salveaza x in out si iese

1. Se poate apela o funcie din corpul altei funcii (ambele definiii in acelai fiier):

Bulina roie => breakpoint


Sgeata alb => punct de apel funcie
Sgeata verde => poziie curent de rulare

>> stat3([1 2 3 4]) % apel functie stat3


% media se calc. n alt funcie (avg)
2. Pentru evaluarea unei formule se pot folosi funcii inline pentru a evita definirea unei funcii.
function y=f_expresie(x) % se creaza un nou fisier
y=x+sin(x)+x.^2;
end
Sunt permise apelurile:
Rez1=f_expresie(2.2)
Rez2=f_expresie([2.2 3 5])

Ex1: un argument: x
fun_ex=inline( 'x+sin(x)+x.^2' );
%parametrul este ir de caractere
Rez_1=fun_ex (2.2)
Rez_2=fun_ex ([2.2 3 5])

27

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Ex2: mai multe argumente: a, om, t


exp_comp=inline ( a*exp(j*om .* t) )

%la apel parametrii sunt luai in ordinea din definitia inline

>> exp_comp(1, 3, 0:.1:0.4)


% 1->a, 3->om, 0:.1:0.4 ->t
ans = 1.0000
0.9553 + 0.2955i 0.8253 + 0.5646i
0.6216 + 0.7833i
>> plot(0: .1 :2*pi, exp_comp(3, pi, 0: .1 :2*pi) )

0.3624 + 0.9320i

graficul:

*partea imaginar a ordonatelor a fost neglijat n grafic


*abscisa de la 0 la 2pi; 3,1415 perioade de cosinus deoarece om=pi; 3 este amplitudinea

3.Variabile globale
VG permit folosirea unor variabile n corpul funciilor fr ca acele variabile s fie pasate
prin parametri n acele funcii.
Comunicare numai prin parametri
Fereastra de comenzi
Definiie 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
Comunicare prin parametri i variabil global
a=1;
functie y=fun_2(pa,pb)
b=2;
.
global vgC;
global vgC;
vgC=55;
..
re=fun_2(a,b);
y=pa+pb+ vgC;
Variabilele a,b i-au transferat valorile parametrilor formali pa respectiv pb.
Variabila vbC este declarat global n funcia apelant i apelat (fun_2) deci poate fi folosit n
expresii n funcia apelat fun_2( )
Variabile persistente sunt locale funciei, nu se terg la ieirea din funcie, valoarea lor
este reinut i regsit la un nou apel al aceleai funcii; nu pot fi accesate dinafara funciei.
persistent var_persist;
CURS 5
3. Fiiere script Matlab sau macrouri
Scriptul Matlab este un segment de program Matlab salvat ntr-un fiier numefis.m.
Execuia fiierului script se obine prin apelul numelui fiierului numefis (fr extensie) n linia de
comand, n funcii sau n alte fiiere script.
Dup execuia fiierului script variabilele locale rmn n spaiul de lucru al aplicaiei spre
deosebire de funcie n care variabilele locale se dealoc.
Un program Matlab are forma fiierelor:
nume_script.m

i/sau:

nume_functie.m

Din fiierele de funcii sau fiierele script se pot apela alte funcii sau fiiere script.
Se pot face de asemenea apeluri recursive:
- din funcie se apeleaz aceeai funcie sau
- dintr-un fiier script s se apeleze acelai fiier script.
Funcii transmise ca parametru altei funcii:
Sunt definite trei funcii apelate: f(), g() i arie()
function [y]=g(x)
function [y]=f(x)
y=sin(x)+x;
y=x*cos(x);
end
end

28

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

function [F]=arie(f1,a,b,n)
F=f1(a)+ f1(b);
... %calcul arie intre a i b
end

%Program principal sau script (apelant)


a=1; b=2; n=10;
rezultat1=arie( @f, a,b,n);
rezultat2=arie( @g, a,b,n)
disp(rezultat1); disp(rezultat2);

In corpul funciei arie se apeleaz sub numele formal f1


funcia dorit = funcia trimis prin parametri (f sau g) i
pentru aceasta se calculeaz integrala aprox. dintre a i b
Obs:

f1
parametru formal din def. functiei arie
@f , @g parametrii actuali = adrese de funcii
la apel fun. arie

Grafic 2D n MATLAB
1. Funcii pentru reprezentri grafice 2D n MATLAB
subplot(abc) sau subplot(a,b,c) divizeaz fereastra n grafice aezate matriceal:
a=numr linii,
b=numr coloane,
c=stabilete poziia curent n matrice numrnd pe linii: a11, a12 a21
plot(y) realizeaz reprezentri grafice n coordonate liniare
a) y este vector => reprezint valorile lui y n funcie de numrul de ordine al fiecrui element din vector
b) y este matrice m x n => plot(y) reprezint n curbe cte o curb pentru fiecare coloan a matricei
Exemplul #1 vector

x=0 : pi/100 : 4*pi


%vector real de 401 elemente

y=sin(x);
plot(y)
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
c) y este un vector de valori complexe -> va reprezenta plot(real(y), imag(y))
ze=0.04;
1
r=0 : .01 : 3;
Ac =
1 - r 2 + 2j r
%factor complex amplific. depl. 1gdl
Ac=1./ (1- r.^2+2*j*ze*r); %vector de val. complexe
subplot(121); % 1 linie, 2 col., pozitia 1 devine curenta
plot(Ac)
%traseaz real(Ac) vs. imag(Ac)
subplot(122); % 1 linie, 2 col., pozitia 2 devine curenta
plot(real(Ac), imag(Ac)) % grafic identic cu plot(Ac)

plot(x,y)
% acelai numr de valori n x i y
a) reprezint grafic vectorul y (ordonate) n funcie de vectorul x (abscise)
primul punct din grafic:
x(1), y(1)
punctul al doilea din grafic:
x(2), y(2)
ultimul punct:
x(end), y(end)
b) x vector, y matrice => coloanele/liniile matricei y vor fi reprezentate n funcie 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

29

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

10

-2
5

4
-4
2

0
-6

0
-8

-5

-2
-10

-4

-10
-12

-6

-8

0.5

1.5

2.5

-14

0.5

1.5

2.5

-15
0

0.5

1.5

2.5

c) plot(x1,y1, x2,y2) => n acelai grafic sunt reprezentate curbele (x1, y1) i (x2, y2)
plot(r, real(Ac), r, imag(Ac) );% sau plot( r, [real(Ac); imag(Ac)] ); identice
% fiecare linie din matrice n funcie de r
*Exemplu cu FFT + module de numere complexe
Profilul unei fore periodice este de forma:
4

f(t) = 1 cos 0 t + 3 cos 0 t +1.5 cos 0 t


2
2
Se traseaz grafic fora i se pun n eviden componentele armonice
ale profilului (amplitudinea i argumentul fiecrui cosinus):
t=0:0.01:5; w0=10;
f1=1*cos(w0/2*t)+3*cos(w0*t)+1.5*cos(4*w0/2*t);
subplot(211);
plot(t,f1)
Y1 = fft(f1);
%Fast Fourier Transform
subplot(212);
plot( abs(Y1(1:length(Y1)/4)) ); grafic module pentru prima ptrime din Y1 versus indici

Y1 = vector de numere complexe:


Y1:

Reprezentare n coordonate logaritmice i semilogaritmice


loglog(x,y) scaleaz ambele axe folosind logaritmul n baza 10
* valorile 10-1 , 100 , 101 , 102 , sunt echidistante pe abscise i ordonate
semilogx(x,y) scaleaz logaritmic axa x (10-1 , 100 , 101 , 102 ,sunt echidistante pe x=abscisa)
semilogy(x,y) scaleaz logaritmic axa y (10-1 , 100 , 101 , 102 ,sunt echidistante pe y=ordonata)
x=0 : pi/100 : 10*pi
%vector real de 1001 elemente
y=sin(x);
semilogx(x, y)

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

30

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Reprezentarea discret prin tulpini


x=0 : pi/10 : 3*pi %vector real de elemente
y=sin(x);
stem(x, y)
Reprezentare n trepte
x=0 : pi/10 : 3*pi %vector real
y=sin(x);
stairs(x, y)
Grafic de bare verticale
x=0 : pi/5 : pi %vector real de 6 valori
y=sin(x);
subplot(1,2,1)
bar (x,y)
subplot(1,2,2)
bar (y)
Reprezentare n coordonate polare (u,R)
u=0 : pi/10 : 2*pi; % unghi
R=sin(u) .* cos(u); % Raze cu interpolare liniar ntre ele
polar(u,R);
fplot(nume_fun, limite, n)
% reprezint grafic o funcie n limitele specificate, n valori de calcul
% definitie functie
function y=f2(x)
y=sin(x) .* x;
% salvam functia f2() in fisierul f2.m
return
fplot('f2', [-22 44], 1000); % reprezint grafic funcia f2 definit n fiierul f2
sau:
[x,y]=fplot('f2', [-22 44], 1000); %NU reprezit functia ci numai returneaza vectori
% 1000 abscise i 1000 ordonate n [x, y]
plot(x,y); grid; % apelm plot(x,y) pentru reprezentare grafic.
comet(y) i comet(x,y) realizeaz reprezentare dinamic a unei curbe 2D
printr-un punct care traseaz curba.
Trasare poligoane pline colorate

subplot(121)
fill([1 2 4],[1 6 8],'r') % un poligon
subplot(122)
fill([1 2 4],[1 6 8],'r', [2 4 8],[6 8 9], 'g') % doua poligoane
Reprezentare vectori compleci cu originea n (0,0):
z = 3.0000 + 4.0000i

compass([z, z/i, z*i])


% vector n forma exponenial complex:
compass([3*exp(j*pi/3), 2*exp(j*pi/2), 3-1*j])
Alte comenzi pentru formatare, scriere n grafice/figuri
Seteaz grosimea liniei
plot(r,T, 'LineWidth' , 1.6);
Seteaz culoarea i grosimea liniei
line(X,Y,Z, 'Color', 'r', 'LineWidth', 4)
>>figure

% se va scrie relatia lui Euler la pozitia dorit (x,y)= (.1, .22)

31

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

>> text(1, 8.2,'\ite^{(i\omega\tau)} = cos(\omega\tau) + i sin(\omega\tau)')


pozitie text
it pentru a interpreta ir text
acolade {} pentru gruparea scris la exponent
Alfabet grecesc: \omega
\tau \
gtext('ze=0.1') %permite interactiv scrierea textului la pozitia dorita pe figura curenta
% pozitia curenta este indicata de axele perpendiculare; acestea sunt deplasate la deplasare mouse

1. Tiprire cu format prin folosirea funciei fprintf


x=input('vector x= ');
for i=1 : length(x)
fprintf('element x(%3d)=%12.3f\n', i, x(i) );
fprintf('element x(%3d)=%12.3e\n', i, x(i) );
fprintf('element x(%3d)=%12.3g\n\n', i, x(i) );
end
% s-a folosit \n pentru trecerea cursorului pe randul
urmator la inceput dup fiecare execuie a funciei fprintf
vector x=

[1.01

0.00002]

element x(
element x(
element x(

1)=
1)=
1)=

1.010
1.010e+000
1.01

element x(
element x(
element x(

2)=
2)=
2)=

0.000
2.000e-005
2e-005

% s-a tastat
%f
%e
%g

Folosim descriptori de format:


%d pentru tiprire valori ntregi cu semn (decimal)
%s pt. tiprire iruri de caractere (string)
%f pentru tiprire valori reale
(float)
%12.3f valoarea real se tiprete ntr-un spaiu de
12 caractere dintre care 3 sunt alocate zecimalelor iar
restul punctului zecimal i prii ntregi.
%e tiprire format exponential
%g mai compact dect %f sau %e fara 0 inutil

%f lips cifre utile

%e
%g a ales f. expon.

n cadrul parametrului actual de tip ir de caractere a funciei fprintf, pot fi folosite caractere de
formatare a textului (caractere de evitare):
Linefeed LF + carriage return CR = se trece (scrie) la
\n
\t Tab (se sare un numr de
inceputul liniei urmtoare
caractere/pozitii de scriere)
carriage return
\r
\b Backspace (inapoi un caracter)
Folosim:
\\
pentru a tipri un caracter backslash
%% pentru tiprirea unui caracter procent.

pentru a tipri un caracter apostrof


Tiprire n form tabelar la ecran:
x=input('sir de medii x= ');
s=0; m=0; ma=0;
nivel={'slab', 'mediu', 'bun'};
%cell array conine 3 iruri de caractere de lungimi diferite
fprintf(' \t\tNote studenti\n'); %dou taburi (\t) i trecere la inceputul rndului urmtor (\n)
fprintf(' \t\t----------------\n'); %realizeaza subliniere titlu
for i=1:length(x)
if x(i)<=6
s=s+1;
% %s este descriptor pentru ir de caractere
fprintf('student #%d nivel %s =%12.3f s=%d\n', i, nivel{1}, x(i), s)
elseif x(i)<=8
m=m+1;
fprintf('student #%d nivel %s =%12.3f m=%d\n', i, nivel{2}, x(i), m )
else
ma=ma+1;

32

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

fprintf('student #%d nivel %s =%12.3f ma=%d\n', i, nivel{3}, x(i), ma)


end
end
Exemplu rulare:
sir de medii x= [4.33 10 6.25 7 9.66]
Note studenti
---------------student #1 nivel slab =
4.330 s=1
student #2 nivel bun = 10.000 ma=1
student #3 nivel mediu =
6.250 m=1
student #4 nivel mediu =
7.000 m=2
student #5 nivel bun =
9.660 ma=2

Pentru scriere n fiier (n locul ecranului) folosim o secven de forma urmtoare:


Coninut fiier fisdate.dat:
x=input('vector x= ');
fid=fopen('c:\fisdate.dat', 'wt'); % write text
if fid == -1
display('Nu s-a deschis fisierul\n ')
else
for i=1:length(x)
fprintf(fid, 'element x(%3d)=%12.3f\n', i, x(i) )
end
st = fclose(fid) % nchide fiier cu ID=fid
if st == 0
'fisier inchis cu success\n'
end
end
fid2 = fopen('c:/fis33.bin', 'wb'); % write binar
x=fwrite(fid2, 3:300); %returneaza 238 (valori scrise in fisier)
x2=fclose(fid2);
%returneaza 0 pentru succes i -1 altfel
Sintaxa de scriere:
fid = fopen(cale_numefisier, mod) deschide fiierul n modul specificat prin mod care poate fi:
'r' read
'w' write (se genereaz fiierul dac este necesar)
'a' append (se gener. fiierul dac este necesar)
'r+' read and write (nu se genereaz)
'w+' truncheaz sau creaz pentru read i write
'a+' read i append (creaz fiierul dac este necesar)
Fiierul poate fi deschis (pentru citire din fiier sau scriere n fiier):
n mod text (exemple 'rt' i 'w+t') sau binar (implicit).
Obs.: funciile fscanf este folosit pentru citire text cu format din fiiere.
fread = citete date binare din fiier.
CURS 6
2. Calcule cu polinoame
In Matlab polinoamele sunt reprezentate prin vectorul coeficienilor polinomului luai n ordine
descresctoare a puterilor.
p1=[1 2 3] ; %vector coef.
p( x) = x 2 + 2 x + 3
x=[-18: .2 : 22];
Funcia polyval evalueaz un polinom
%argumente
(dat prin coeficienii polinomului p1) la
y=polyval(p1,x);
abscisele din x (parametrul al doilea).
plot(x,y);
Adunare i scdere de polinoame
Se adun/scad element cu element coeficienii de acelai ordin. Vectorii coeficienilor trebuie s aib acelai
numr de elemente: p1=[1 2 3], p2= [0 3 4] => p_suma=p1+ p2 -> [1 5 7]

33

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Inmulire i mprire de polinoame cu funciile conv i deconv:


2
imp ( x ) = x + 2 x + 3

prod ( x ) = ( x 2 + 2 x + 3)( x 1)

x 1

nmulirea a dou polinoame date prin vectorii coeficienilor:


Comparai coeficienii obinui prin programul scris i prin apelul
funciei conv()
- gradul polinoamelor p1,p2 scrise prin coeficieni este:
length(p1)-1 respectiv length(p2)-1;
- gradul polin. produs p12 este:
length(p1)+length(p2) - 2
- se aloc length(p1)+length(p2) -1 pozitii n p12.
p1=[1 2 3 -4];
p2=[1 -1];
p12= zeros(1,length(p1)+length(p2)-1)
for i=1:length(p1)
for j=1:length(p2)
p12(i+j-1)= p12(i+j-1)+ p1(i)* p2(j);
end
%ex:i=1,j=1=> p12(2-1) inmultire puteri maxime
end
%ex:i=4,j=2=>p12(5) inmultire termeni liberi
%afisare coef. determinati prin program
p12
prod=conv(p1,p2) %afisare coef. determ prin functia conv()
Se nmulesc polinoame i se scad; pe DiagSecund se
potrivete gradul:

Exemplu Matlab:
p1=[1 2 3];
p2=[1 -1];
prod=conv(p1,p2)
[cat, rest]=deconv(p1,p2)
p1_ini = conv(p2,cat) + rest
prod = 1 1 1 -3
cat =
1 3
rest =
0 0 6
p1_ini =1 2 3

S se calculeze determinantul matricei B:

s+2
10 s 2 + 3s + 6
B=

s+2
5 s 2 + 2s + 4

detB=conv([10 3 6], [5 2 4]) - conv([0 1 2],[0 1 2] );


detB =
50 35 75 20 20

S se reprezinte grafic funcia:

F ( w) =

% k1=2;k2=2;k3=4; m1=5;m2=10
detB=conv([-m2 0 k2+k3] , [-m1 0 k1+k2]) - [0 0 0 0
k2^2];
pZerouri=[-m2 0 k2+k3];

m2 w 2 + k 2 + k 3
( m2 w + k 2 + k 3)( m1w 2 + k 1 + k 2) k 22
2

pentru:

k1=244.5; k2=244.5; k3=244.5; m1=1;m2=1;


in intervalul: w=10 : 0.01 : 30;

w=10:0.01:30;
FRF11=polyval(pZerouri,w) ./ polyval(detB,w);
plot(w,FRF11, 'linewidth',1.7);
grid on; zoom;

0.3

0.2

0.1

z1=roots(pZerouri); fz1=z1/(2*pi) % rad/s resp Hz


r12=roots(detB);
fr12=r12/(2*pi)

-0.1

* observm dou asimptote verticale

-0.2

-0.3

14

16

18

20

22

24

26

28

Descompunerea n sum de fracii simple a raportului a dou polinoame A(x) i B(x)


Fraciile conin la numitor polinoame de ordinul unu.
A( x )
B( x )

r (1)
x p (1)

r ( 2)
x p ( 2)

+ ... +

r(n)
x p(n)

+ k ( x)

unde numim r(1) ,, r(n) reziduuri iar p(1) ,, p(n) poli.


Se folosete funcia Matlab:
[r, p, k]=residue(A, B)
Funcia se poate apela i n forma:
[A,B]=residue(r, p, k) caz n care sunt returnai coeficienii polinoamelor A i B.
Exemplu:

34

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

Analizai urmtorul raport de polinoame (reprezint


funcia de transfer G(s) ):

G( s) =

x2 + 4x + 1
x3 + 2x + 1

num=[1 4 1]; den=[1 0 2 1];

>> roots(num) % rdcini ec.polinom (zerouri)


ans = -3.7321
reale
-0.2679
>> roots(den) % radacini numitor (poli)
ans = 0.2267 + 1.4677i complex conjugate
0.2267 1.4677i
-0.4534
Calcul poli, zerouri + trasare figura alturat
(poziie poli i zerouri)

-cerculeele zerouri sunt rdcinile polinomului de


la numrtor.
- cu x sunt notate rdcinile de la numitor polii.

pzmap([1 4 1],[1 0 2 1]) sau:


[p z]=pzmap([1 4 1],[1 0 2 1]) %salvare n p, z i
%fr reprezentare grafic
Descompunere n fracii simple a funciei G=num/den :
>> [r, p, k]=residue(num,den)
Sirul reziduurilor r(1), r(2), r(3):
Sirul polilor p(1), p(2), p(3):
r=
p=
0.6162 1.2316i
0.2267 + 1.4677i
0.6162 + 1.2316i
0.2267 1.4677i
-0.2324
-0.4534
Obs: 2 reziduuri complex conjugate
A( x )
B( x)

x + 4 x +1
x 3 + 2 x +1

r (1)
x p (1)

Rest:
k=
[]

Obs: 2 poli complex conjugai

r (2)
x p(2)

r ( 3)
x p ( 3)

0.6162 - 1.2316i
x ( 0.2267 + 1.4677i)

Nyquist([1 4 1],[1 0 2 1])

0.6162 + 1.2316i
x ( 0.2267 1.4677i)

-0.2324
x ( -0.4534)

Bode([1 4 1],[1 0 2 1]); grid on

Nyquist Diagram
6

Imaginary Axis

-2

-4

-6
-5

-4

-3

-2

-1

Real Axis

3. GRAFICE 3D
1. Curbe spaiale (3D) sintaxa funciei plot3()
plot3(x,y,z) % x, y, z = vectori de coordonate ale punctelor
plot3(x,y,z, tip-linie);
plot3(x1,y1,z1, tip-linie1, x2,y2,z2, tip-linie2, )
plot3(X,Y,Z)
Exemplu:
t=0 : pi/40 : 10*pi;
plot3(sin(t), sin(t) .*cos(t), 2*t); grid on;
Dou curbe spaiale:
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, '-' );

35

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

%prima curba trasata din `+`, a doua din `-`


Grafic spaial dinamic - un punct traseaz dinamic curba
comet3(sin(t), sin(t).*cos(t), 2*t);
Curb spaial complex:
ze=0.1; r=0: .01 :3;
Ac=1./(1-r.^2+2*j*ze*r); %factor complex amplific. depl.
plot3(r, real(Ac), imag(Ac), 'LineWidth', 1.5); grid on;
Curb spaial complex- dou bucle:
j=sqrt(-1);
w=0: 0.001 :2;
H11=(1/5)./(0.4-w.^2+j*0.01*w) + (1/2)./(2w.^2+j*0.02*w);
h=plot3(w, real(H11), imag(H11));
set(h, 'LineWidth', 2.7)
grid on;
2.Generarea unei REELE MESH, N PLAN
[X, Y]=meshgrid(x,y) sau [X, Y]=meshgrid(x)
Funcia meshgrid folosete domeniile 1D specificate prin vectorii x i y pentru generarea tablourilor X i Y .
Aceste tablouri sunt folosite la evaluarea funciilor de dou variabile z=f(x,y) prin funciile Matlab mesh i
surf cu reprezentare 3D.
>> [X,Y]=meshgrid(0:4, 6:2:10)
X=
0
0
0
Y=
6
8
10

1
1
1

2
2
2

3
3
3

4
4
4

6 6 6 6
8 8 8 8
10 10 10 10

>> [X,Y]=meshgrid(3:6)
X=
3 4 5 6
3 4 5 6
3 4 5 6
3 4 5 6
Y=
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6

Domeniu dreptunghiular:
-primul vector 0:4 genereaz matricea X
- liniile sunt identice i conin valorile vectorului 0:4 pe axa x
-attea linii cte valori sunt n vectorul 6:2:10 (direcia oy).
-al doilea vector 6:2:10 genereaz matricea Y
-coloanele sunt identice i conin valorile vect. 6:2:10 pe axa y
-attea coloane cte valori sunt n vect. 0:4 (pe direcia ox).
Cele dou matrice X i Y au acelai numr de lin. i col.
PERECHILE (X(i,j), Y(i,j) ) formeaz reeaua de puncte din
domeniul 2D oxy, dreptunghiular, de definiie al funciei z=f(x,y)
Domeniul este ptrat.
Perechile de puncte din plan sunt de forma ( X(i,j), Y(i,j) ):
(3,3), (4,3), (5,3), (6,3), (3,4), (4,4) etc.

3. Reprezentare suprafee wireframe cu funcia mesh i


suprafee netede cu funcia surf
Matlab reprezint suprafee prin cote z = valori ale funciei
pentru o reea de puncte din planul ox-y. Punctele de cot z adiacente
sunt conectate prin segmente colorate de dreapt (wireframe) n cazul
funciei mesh i coloreaz faete pentru comanda surf.
Fie o funcie de forma z=f(x,y):

z = sin( x 2 + y 2 ) / x 2 + y 2 )
36

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

sau: z=sin(ra)/ra, unde ra= x 2 + y 2 .


(sau direct: Z=sin( sqrt(X .^2+Y.^2) ) . / sqrt( X .^2+Y.^2);)
Etapa1: se genereaz reeaua de puncte din planul x-y
[X,Y]=meshgrid(-12:.4:12, -12:.4:12);

%sau meshgrid(-12: .4: 12);

Etapa2: calcul matricea ra de valori intermediare


ra=sqrt(X .^2+Y.^2);
%matricele X i Y sunt ridicate la ptrat element cu element,
%adunate, apoi radicalii din fiecare element salvai n matricea ra
Etapa3: calcul valori finale funcie cu salvare n matricea Z
Z=sin(ra) ./ ra;
Etapa4: reprezentarea grafic
subplot(211);
h=mesh(X,Y,Z); % h este handle la grafic
grid on;
subplot(212);
s2=surf(X,Y,Z); % vezi figura alturat ->
%fiecare matrice X,Y,Z conine coordonatele x, y resp. z
ale tuturor punctelor din grafic.

Etapa5: editare grafic:


get(h)
% listeaz pe ecran setul de proprieti ale graficului asociat
set(h, 'LineWidth', 1.7)
%set(h, ) se impune limea liniei de trasare a graficului
sau alte proprieti ale graficului asociat.
title('Functia sinc cu surf');
xlabel('axa x');
ylabel('axa y');

text(0, 0, 0.5 ,vrf);

Exemplul #2:

[X,Y]=meshgrid(-10:16);
Z=sqrt(X .^2+Y .^2);
surf(X,Y,Z);

4. Elemente de CALCUL SIMBOLIC


Variabila simbolic se memoreaz n forma unui ir de caractere
% defineste mai multe obiecte simbolice
syms y f g1 g2 g

%definete un singur obiect simbolic


x = sym('x')

37

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

whos % afisare tip variabile


Name
Size
Bytes Class
f
1x1
126 sym
g
1x1
126 sym
......

Attributes

x=
x

Derivare cu funcia diff()


% defineste expresia f
f= 12 + (x-1)*(x-1)*(x-2)*(x-3)
f=
12+(x-1)^2*(x-2)*(x-3)

syms x
f0=3*x^3+5*x^2-6*x+2 % definire f0
pretty(f0)
% vizualizare f0
3
2
3x +5x -6x+2
diff(f0)
ans = 9*x^2+10*x-6

diff(f)
% prima derivata
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)
ans = > 4*x*exp(3*x) + 6*x^2*exp(3*x)
>> diff(log(x))
ans =
1/x
>> int(1/x)
ans =
log(x)
Derivare funcii trigonometrice:
>> diff(sin(5*x))
>> diff(sin(x)^2)
ans =
ans =
5*cos(5*x)
2*sin(x)*cos(x)

diff(f, x, 2) % derivat de ordin 2


ans =
2*(x-2)*(x-3)+4*(x-1)*(x-3)+4*(x-1)*(x-2)+2*(x-1)^2
diff(f, x, 3) % derivat de ordin 3
ans =
24*x-42

>> diff( sin(x) * cos(x) )


ans =
cos(x)^2 - sin(x)^2

>> diff(exp(x) * cos(x))


ans =
exp(x)*cos(x) - exp(x)*sin(x)

Simplificare expresie simplify()


1. derivare
syms x
%derivare fractie + simplificare forma
num = 2*x^2 + 3*x -1;
denom = x^2 - x + 3;
f = num/denom
f=
(2*x^2+3*x-1) / (x^2-x+3)

2. simplificare (se aduce la numitor comun+calcule):

fps=simplify(fp),

fp=diff( f ) =>
fp =
(4*x+3)/(x^2-x+3) - (2*x^2+3*x-1)/(x^2-x+3)^2*(2*x-1)

- ->

fps =
-(5*x^2-14*x-8)/(x^2-x+3)^2

pretty(fps)

pretty(fp)
2
4 x + 3 (2 x + 3 x - 1) (2 x - 1)
---------- - -------------------------2
2
2
x -x+3
(x - x + 3)

sau:

2
5 x - 14 x - 8
- --------------2
2
(x - x + 3)

Derivate pariale, Jacobian:


syms g1 g2 x y ;
g1= 20*x^3 +15*y -30 ;
g2 = 0.25*x + y -1;
% g1,g2 pot avea derivate partiale
diff(g1,x) % derivata parial
ans =

g12 = [g1; g2] % g=vector coloan de 2 funcii de var. x,y


g12 =
[ 20*x^3+15*y-30]
[ 1/4*x+y-1
]
% Calcul matrice Jacobian=derivatele pariale ale vectorului g12 n

38

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

60*x^2
diff(g1,y)
ans =
15
Funcia ezplot():

% raport cu variabilele independente x i y

x_y = [x y];
% vectorul linie al variabilelor
J = jacobian(g12, x_y)
% calcul Jacobian
J = [ 60*x^2, 15]
[ 1/4,
1]
easy plot

Grafice cu ezplot( )

syms x f1 f2;
% polinom cu solutii simetrice fat de oy:
f1=(x-2.16)*(x-12.7)*(x-38.3) * (x+2.16)*(x+12.7)*(x+38.3)
subplot(211)
ezplot(f1, [-40,40]) ; line([-40 40] , [0 0] , 'Color','r');

8
(x-54/25)
(x-127/10) (x-383/10) (x+54/25) (x+127/10) (x+383/10)
x 10

3
2
1
0
-1
-2
-3
-4
-40

f2= (x-1)*(x-1)*(x-2)*(x-3)+4
subplot(212)
ezplot(f2)
% easy plot -2 pi < x < 2 pi
ezplot(f2, [0,4]) % graficul fun. f pentru 0 <= x <= 4

-20

0
x

20

40

(x-1)2 (x-2) (x-3)+4


14
12

10
8
6
4

df1 = diff(f1);
% derivare + grafic derivata
ezplot(df1,[0,4])
line([0 4],[0 0],'Color','r')

2
x

Grafic spaial / fr parametru simbolic


% trei siruri de caractere i intervalul parametrului t
ezplot3('sin(t)' , 'sin(t).*cos(t)' , ' 2*t' , [0,6*pi]);

Substituii + simplificare (calculele numerice i simbolice pot fi combinate):


syms x y
subs(f, y, 3)
f = x^2*y + 5*x*sqrt(y)
>>aa=subs(f, x, x^2+y)
ans =
subs(f, x, 3)
ans =
ans =
(x^2+y)^2*y + 5*(x^2+y)*y^(1/2)
3*x^2+5*x*3^(1/2)
>>
simplify(aa)
9*y+15*y^(1/2)
ans =
x^4*y + 2*x^2*y^2 + y^3 + 5*x^2*y^(1/2) + 5*y^(3/2)
syms g1 g2 x y ;
g1= 20*x^3 +15*y -30 ;
g2 = 0.25*x + y -1;
% evaluare g12 pentru x = 1, y = 2.5
g12 = [g1; g2]

subs(g12, {x, y}, {1 , 2.5})


ans = 27.5000
1.750
Funcia solve() : soluii pentru ecuaii i sisteme de ecuaii algebrice
Soluie simbolic ecuaie gradul 2
Parametrul este ir de caractere

>> x12=solve('a*x^2 + b*x + c')

pretty(x12)
[
2
1/2
[
b (b - 4 a c)
[- 1/2 ------------------[
a

x12 =

39

]
]
]
]

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

[
[
2
1/2
[
b + (b - 4 a c)
[- 1/2 ------------------[
a

-1/2*( b - (b^2-4*a*c)^(1/2) )/a


-1/2*( b + (b^2-4*a*c)^(1/2) )/a
Sistem 2 ec. cu 2 necunoscute
>> [sx sy] = solve( x + y = a , x 11*y = b )
sx =
11/12*a+1/12*b
sy =

]
]
]
]
]

% solutie simbolica

1/12*a-1/12*b
Soluie ecuatie n raport de r

apoi

n raport de ze:

>> solve( '1-r^2+2*ze^2*r^2 ' , r) % exc. suport vibratii

>> solve('1-r^2+2*ze^2*r^2', ze)

ans =
-1/(1-2*ze^2)^(1/2)
1/(1-2*ze^2)^(1/2)

ans =
1/2*(-2+2*r^2)^(1/2)/r

pretty(1/(1-2*ze^2)^(1/2))

-1/2*(-2+2*r^2)^(1/2)/r

Soluii numerice:
Expresie matriceal (se reia exemplul cu polyval):
M=[5 0;0 10]; K=[4 -2;-2 6];
detB=det(eval(K-w^2*M))
detB =
20-70*w^2+50*w^4
solve( '20 - 70*w^2 + 50*w^4' ) %sau solve(detB)

ans =

% solutii numerice
[sx sy] = solve(' x + y = 1 ' , ' x - 11*y = 5 ')
sx =
4/3
sy =
-1/3

-1
% 4 solutii w1,w2,w3,w4
1
1/5*10^(1/2)
% (2/5)^(1/2)
-1/5*10^(1/2)
Sistem 3 ecuaii liniare:
[sx1 sx2 sx3] = solve(' 3*x1-x2=5 ' , ' -2*x1+x2+x3', ' 2*x1-x2+4*x3=15' )
sx1 =
2
sx2 =
1
sx3 =
3

Rezolvare sistem dou ecuaii neliniare:

clear
syms x1 x2
% definire funcii
h1 = x1*x1 + x2*x2 - 2;
h2 = 0.25*x1*x1 +0.75*x2*x2 -1;
sol = solve(h1,h2); %rezolva sist. pt. x1 i x2
%[x1 x2]=solve(h1,h2)
>> [sol.x1 sol.x2]
ans =
[ 1, 1]
[ -1, 1]
[ 1, -1]
[ -1, -1]

solutie #1
sol #2
sol #3
sol #4

Funcia int() Integrare simbolic


syms x
fin =2*x^2
>> int(fin)

>> int(1/x)
ans =

>> int(tan(x))
ans =

40

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

ans =

log(x)

-log(cos(x))

2/3*x^3
diff( -log(cos(x)) )
ans =
sin(x)/cos(x)

syms a b x
% variabile simbolice
f = 3*a*b*x + 2*exp(a*x + b);
% definitie f
f1 = diff(f, x) % derivata functiei f in rap. cu x
>> f1 =
3*a*b+2*a*exp(a*x+b)

int(f1, x) % integrare simbolica f1 n raport cu x


ans =
3*a*b*x+2*exp(a*x+b) % s-a obinut f din nou

Integrala definit:
int(f, x, 0, pi/2) % integrare n raport cu variabila x ntre 0 i pi/2
ans = > 1/8*(3*a^2*b*pi^2+16*exp(1/2*pi*a+b)-16*exp(b))/a
f2 = int(f, b, 0, pi/2)
% integrare n raport cu b ntre 0 i pi/2
f2 = > 3/8*a*pi^2*x+2*exp(a*x+1/2*pi)-2*exp(a*x)

Matrice
Funcia inv() inversare matrice, simbolic
syms m1 m2 M;
M=[m1 0; 0 m2]
inv(M)
%matrice diagonal

M=
[ m1, 0]
[ 0, m2]
ans =
[ 1/m1, 0]
[ 0, 1/m2]

syms a b c d A;
A=[a b; c d]
pretty(inv(A))
[ d
b
]
[ --------- - --------- ]
[ad-bc
a d - b c]
[
]
[
c
a
]
[- --------- --------- ]
[ ad-bc ad-bc ]

%Matrice coloana * matrice linie


[a; b]2x1 * [c d]1x2
ans =
[ a*c, a*d]
[ b*c, b*d]

det(A)
ans = a*d - b*c

Funcia expand():
syms a b c ;
c=sin(a+b)
expand(c)

>> expand( cos(2*a) )


ans =
2*cos(a)^2 - 1

ans =
sin(a)*cos(b)+cos(a)*sin(b)

etc.

expand(cos(a+b))

ans =
cos(a)*cos(b)-sin(a)*sin(b)
Dezvoltare n serie
de funcii Taylor

f ( x0 + x ) = f ( x0 ) +

Serie MacLaurin

f ( 0 + x ) = f ( 0) +

syms x
f1 = sin(x);
T1 = taylor(f1,10),

f2=cos(x);
T2=taylor(f2,10)

f ' ( x0 )
f '' ( x 0 ) 2 f ' '' ( x 0 ) 3 f ( n ) ( x 0 ) n
x+
x +
x +
x + Rn
1!
2!
3!
n!

f ' ( 0)
f ' ' ( 0 ) 2 f ' '' ( 0) 3 f ( n ) ( 0 ) n
x+
x +
x +
x + Rn
1!
2!
3!
n!

% functii trigonometrice
% primii 10 termeni

T1 = > x -1/6*x^3 +1/120*x^5 -1/5040*x^7 +1/362880*x^9 % sunt afisati termenii nenuli


41

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

T2 = > 1 - 1/2*x^2 + 1/24*x^4 - 1/720*x^6 + 1/40320*x^8


S se verifice relaiile:

e jx = cos(x) + j sin(x)

e -jx = cos(x) - j sin(x)

f3 =exp(j*x);
T3 = taylor(f3,10)
T3 = 1+ i*x- 1/2*x^2 - 1/6*i*x^3+ 1/24*x^4+ 1/120*i*x^5- 1/720*x^6 -1/5040*i*x^7+ 1/40320*x^8+ 1/362880*i*x^9

Diverse
1. Calculul funciei sin(x) folosind dezvoltarea n serie Taylor:

sin(x) = (-1 )n
n=0

x2
x 2n+1
=> Tn +1 = Tn
(2n + 1)!
(2n + 2 )( 2n + 3 )

x=input('Dati valoarea lui x [radiani] pt calcul sin(x)\n')


n=input('Numar iteratii n= \n')
suma=x; T=x; %suma partiala si termenul curent
for i=0:n
T=-T*x^2/(2*i+2)/(2*i+3);
suma=suma+T;
end
fprintf('Valoare calc=
%20.15f \nVal calc Matlab=%20.15f\n',suma,sin(x) );

Rulare:
x =0.4
Numar iteratii n= 23
Valoare calc=
0.389418342308650
Val calc Matlab= 0.389418342308651
2. Rezolvare sistem de ecuaii liniare de forma: AX=B

2.1. Inversare matrice:


A=[3 -1 0;-2 1 1;2 -1 4] B=[5 0 15].' sau B=[5; 0; 15;]
X1=A^-1 * B

3 x1 x 2 = 5

2 x1 + x 2 + x3 = 0
2 x1 x 2 + 4 x3 = 15

sau: X1=A \ B

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 coeficienilor (A) n care coloana i a fost nlocuit cu coloana termenilor liberi (B).
A=[3 -1 0;
-2 1 1;
2 -1 4]
B=[5 0 15]'

X=A^(-1)*B;
X= ...
A1=[5 -1 0;
0
1 1;
15 -1 4]

%calcul direct
% Cramer

x1=det(A1)/det(A)

A3=[3 -1 5;
-2 1 0;
2 -1 15];
x3=det(A3)/det(A)

3. Calcul matriceal, verificarea unor relaii:


1. (A*B)T=BT* AT,
2. (A*B)-1=B-1 * A-1

3.
4.

(A-1)T=(AT)-1
det(A) * det(A-1)=1

5. (A+B)*C=A*C+B*C

det(AB)= det(BA)=det(A)*det(B)

4. Sortare prin metoda seleciei

42

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ')


asort=sort(a,'descend');
n=length(a);
for i=1:n-1
poz_max=i;
for j=i+1:n
if a(j)>a(poz_max)
poz_max=j;%retine pozitie element maxim
end
end
aux=a(i);a(i)=a(poz_max);a(poz_max)=aux; %interschimba
end
a
asort

5. Sortare prin metoda bulelor


a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ')
asort=sort(a,'descend');
n=length(a);
for i=n-1:-1:0
for j=1:i
%elem. cel mai mare este plasat ultimul in subsirul de indici 1,...,i
if a(j)<a(j+1)
aux=a(j); a(j)=a(j+1); a(j+1)=aux;
end
end
end
a
asort

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

43

Prof.dr.ing. Iulian Lupea


Programarea i Utilizarea Calculatoarelor

S-ar putea să vă placă și