Sunteți pe pagina 1din 21

Semnale si Sisteme

Laboratorul 1. Introducere n MATLAB


1 Introducere
Numele MATLAB este prescurtarea sintagmei MATrix LABoratory. Limbajul a fost scris
initial ca sa faciliteze accesul si utilizarea programelor dedicate calculului algebric: LINPACK
(Linear Algebra Package), BLAS (Basic Linear Algebra Subprograms) si EISPACK (Eigen
System Package).
MATLAB este un limbaj de nivel inalt si un mediu de lucru interactiv care permite efectu-
area de calcule numerice mai ecient decat utilizand limbaje de programare clasice (Fortran,
C/C++, Java). Principalele aplicatii vizeaza scrierea de algoritmi, analiza si vizualizarea
datelor, prelucrarea semnalelor, modelare asistata de calculator, proiectarea sistemelor auto-
mate. MATLAB are incorportate o serie de Toolbox-uri utile pentru o gama larga de aplicatii:
Control System Toolbox, Signal Processing Toolbox, Bioinformatics Toolbox, Aerospace To-
olbox, Image Acquisition Toolbox si multe altele, dintr-o varietate de domenii ingineresti.
MATLAB are incorporat pachetul Simulink, un mediu programare bazat pe diagrame
bloc, dedicat simularii asistate de calculator.
Mai multe informatii despre MATLAB pot gasite pe site-ul web al producatorului: The
MathWorks Inc., http://www.mathworks.com.
2 Prezentarea mediului de programare
MATLAB contine cateva comenzi utile similare comenzilor UNIX (ex: ls, pwd, cd).
Comenzile sunt utile pentru a lista directorul de lucru al MATLAB, vericarea caii catre
directorul de lucru si schimbarea directorului de lucru. MATLAB cauta siere MATLAB
in anumite directoare, care sunt controlate de comanda path. Comanda path listeaza
directoarele din calea in care MATLAB cauta aceste siere. Un nou director poate adaugat
la aceasta cale cu comanda path(path,p) sau path(p,path), unde p este directorul nou
(care poate contine de exemplu functii scrise de utilizator).
2.1 Help in MATLAB
Daca se cunoaste numele unei functii pe care dorim sa o utilizam, se folosete comanda
helppentru a aa detalii complete cu privire la apelul acesteia:
>> help numefunctie
1
Aceasta comanda da o descriere a functiei si o lista de functii legate de ea. Daca nu
va amintiti exact numele functiei, puteti folosi comanda lookfor si un cuvant cheie aso-
ciat functiei. Aceasta comanda va asa o lista de functii care au acel cuvant cheie in descriere:
>> lookfor cuvantcheie
Comanda doc deschide browser-ul Help. Comanda doc numefuntie aseaza docu-
mentatia disponibila pentru functia/clasa/libraria specicata.
Alte comenzi utile sunt info, what si which. Descrierea acestor comenzi poate
gasita cu ajutorul comenzii help. MATLAB mai contine si o serie de exemple care pot
vizualizate cu ajutorul comenzii demo.
2.2 Operatori in MATLAB
MATLAB contine toate structurile de comanda obisnuite. Mai jos sunt dati operatorii ele-
mentari.
Operatori relationali: mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau
egal (>=), egal (==), diferit (=). Atentie la diferenta dintre operatorul de atribuire
= si cel de testare a egalitatii ==.
Operatori aritmetici: adunare(+), scadere(-), inmultire(*), impartire la dreapta(/),
impartire la stanga(\), ridicare la putere() , transpus conjugata().
Operatii in bucla si operatii logice: for, while, if si &(and), |(or) si (not).
2.3 Variabile MATLAB
Variabilele uzuale in MATLAB sunt scalari, vectori, matrici. Aceste variabile pot create
printr-o simpla asignare:
>> x = 17*2/9-33
Odata creata, o variabila poate reasignata, atat cat tip (oat, double, etc.) cat si ca
valoare. In plus, daca nu doriti asarea rezultatelor intermediare, puneti ; la sfarsitul liniei:
>> t = 5;
>> t = t+1
MATLAB permite lucrul cu numere complexe.

1 poate scris isau jcu conditia


sa nu e redenite de utilizator. De asemenea, 1 + 2j este intrepretat corect, in schimb
1 + j2 nu este - MATLAB interpreteaza j2 ca numele unei variabile. Se poate scrie
1 + j 2. Mai jos sunt cateva operatii cu numere complexe:
2
Scalar complex >> x = 3 + 4j (sau >> x = 5 + 10i)
Partea reala a lui x >> real(x) =3
Partea imaginara a lui x >> imag(x) =4
Modulul lui x >> abs(x) =5
Argumentul lui x >> angle(x) =0.9273
Conjugatul lui x >> conj(x) =3 4i
2.3.1 Generarea matricelor
MATLAB stocheaza variabilele sub forma de matrice de dimensiuni m n, unde m este nu-
marul de linii si n este numarul de coloane. O matrice de dimensiune 1 1 este un scalar; o
matrice de dimensiune 1 n este un vector linie, iar o matrice m 1 este un vector coloana.
O matrice este scrisa intre paranteze drepte [ ] cu spatii care separa coloane adiacente si ;
care separa linii adiacente. Elementele complexe ale unei matrice nu trebuie sa e scrise cu
spatii (ex: 1 +2j este corect ca element al matricei, dar 1 + 2j nu este). De exemplu,
se considera urmatoarele valori pentru variabila x
Vector linie >> x = [1 2 3] sau >> x = [1, 2, 3]
Vector coloana >> x = [1; 2; 3] sau >> x = [1, 2, 3]

Matrice 3*3 >> x = [1 2 3; 4 5 6; 7 8 9]


Matrice 2*3 complexa >> x = [1 + 3j 1 + j 5j; 4 5 + j 7 6j]
Vectorii pot generati folosind comanda :. De exemplu, pentru a genera un vector x
care ia valori intre 0 si 10 cu pasul 0.5, se poate folosi urmatoarea comanda (genereaza o
matrice de 1 21)
>> x=[0:0.5:10];
Alte metode sunt (apelati help numefunctie):
linspace - genereaza un vector prin specicarea primului si ultimului element si a
numarului de intervale egale dintre cele doua numere
logspace - este asemanatoare comenzii linspace numai ca intervalele sunt echidistante
pe o scala logaritmica.
MATLAB contine functii care genereaza matrici speciale:
eye(n) Returneaza matricea identitate n n
zeros(m,n) Returneaza o matrice mn cu zerouri
ones(m,n) Returneaza o matrice mn cu elemente de unu
diag(A) Extrage diagonala matricii A
rand(m,n) Returneaza o matrice mn cu elemente aleatoare
2.3.2 Accesul la elementele unei matrice
Elementele unei matrice sunt accesate prin specicarea liniei si a coloanei. De exemplu, in
matricea A =[1 2 3; 4 5 6; 7 8 9], elementul de pe linia 1 si coloana 3 poate accesat scriind:
3
>> x=A(1,3) care va intoarce valoarea 3
Linia 2 poate obtinuta scriind
>> y=A(2,:) care va intoarce [4 5 6] unde : inseamna toate coloanele.
O submatrice a lui A formata din liniile 1 si 2 si toate 3 coloanele poate scrisa
>> z=A(1:2,1:3) care intoarce [1 2 3;4 5 6]
Un element al unei matrici poate corectat usor. Spre exemplu, daca vrem sa inlocuim
valoarea de pe pozitia 3*3 cu 0, scriem A(3,3) = 0.
2.3.3 Operatii cu matrici
MATLAB poate efectua operatii aritmetice, relationale si logice cu matrice. Daca dimen-
siunile matricelor implicate in operatie sunt incompatibile, MATLAB intoarce un mesaj de
eroare. Impartirea este denita in felul urmator: Solutia ecuatiei A x = b este x = A\b si
solutia ecuatiei x A = b este x = b/A numai daca A este inversabila si toate matricele sunt
compatibile.
Adunarea si scaderea implica operatii element cu element; in schimb inmultirea si impar-
tirea nu. MATLAB ofera si posibilitatea efectuarii operatiilor element cu element punand .
inaintea operatorului dupa cum urmeaza: inmultire(.*), impartire la dreapta(./), impartire
la stanga(.\), ridicare la putere(.), transpusa neconjugata(.).
Diferenta dintre inmultirea de matrice si inmultirea element cu element este vizibila in
urmatorul exemplu:
>> A = [1 2;3 4]
>> B = A*A
>> C = A.*A
MATLAB are o serie de functii pentru determinarea inversei, determinantului, valorilor
proprii si multe altele. Mai jos sunt listate cateva functii utile.
det(A) Determinantul matricii A
inv(A) Inversa matricii A
eig(A) Valorile si vectorii proprii
norm(A) Norme vectoriale si matriciale
rank(A) Rangul matricii A
4
2.4 Fisiere MATLAB
Exista mai multe tipuri de siere MATLAB incluzand script-uri de comenzi MATLAB, -
siere care denesc functii create de utilizator, siere care includ rezultate numerice sau grace.
2.4.1 Fisiere .m
MATLAB este un limbaj interpretativ (interpretor), comenzile scrise sunt interpretate in
sesiunea curenta a MATLAB. Totusi, este dicil sa scriem secvente lungi de comenzi de e-
care data cand vrem sa realizam un obiectiv. Exista doua modalitati de a extinde puterea
MATLAB-ului - script-uri si functii. Ambele metode utilizeaza siere .m. Avantajul siere-
lor .m este ca sunt salvate comenzile si pot usor modicate fara a rescrie la ecare rulare
intreaga lista de comenzi.
Script-uri
Script-urile MATLAB sunt secvente de comenzi scrise intr-un editor si salvate intr-un
sier .m. Comenzile se scriu in ordinea executiei. Instructiunile sunt executate scriind numele
sierului in prompt-ul MATLAB
>> fisier
Executia sierelor .m este echivalenta cu scrierea intregii liste de comenzi in prompt-ul
MATLAB. Toate variabilele folosite in sierul .m sunt aduse in mediul de lucru MATLAB
(workspace). Mediul de lucru, care este gol la pornirea MATLAB-ului, contine toate varia-
bilele denite in sesiunea respectiva.
Functii
Un al doilea tip de sier .m poate o functie care are urmatoarea forma:
function [iesire1,iesire2]=numefunctie(intrare1,intrare2)
Comanda MATLAB1;
Comanda MATLAB2;
Comanda MATLAB3;
Numele sierului .m corespunzator acestei functii este numefunctie.m si este executat
din linia de comanda MATLAB sau dintr-un alt sier .m prin comanda
>> [iesire1,iesire2]=numefunctie(intrare1,intrare2)
Observatii!
Comentariile se marcheaza cu %.
Asarea rezultatelor este suprimata prin folosirea ;la sfarsitul liniei.
O linie poate extinsa pe o alta linie folosind ... la sfarsitul primei linii.
5
2.4.2 Fisiere .mat
Fisierele .mat sunt siere binare (comprimate) folosite pentru a stoca rezultate numerice.
Aceste siere pot folosite pentru a salva rezultate generate printr-o secventa de intructiuni
MATLAB. De exemplu, pentru a salva valorile a doua variabile, var1 si var2 in sierul nu-
mesier.mat vom scrie
>> save numefisier.mat var1 var2
Pentru a salva in acest sier toate variabilele curente (existente in spatiul de lucru)
>> save numefisier.mat
Un sier .mat poate incarcat in MATLAB
>> load numefisier.mat
2.4.3 Fisiere postscript
Gracele generate in MATLAB pot salvate intr-un sier postscript pentru a utilizate mai
tarziu. De exemplu, pentru a salva gracul curent vom scrie
>> print -dps numefisier.ps
Pentru alte optiuni help print.
2.4.4 Fisiere diary
O inregistrare a sesiunii MATLAB poate tinuta cu comanda diary si salvata intr-un -
sier diary. Pentru a incepe inregistrarea unui sier diary si a-l salva ca un sier cu numele
numefisier vom scrie
>> diary numefisier
Pentru a marca sfarsitul inregistrarii si a inchide sierul vom folosi comanda
>> diary
3 Reprezentarea graca a funct iilor
MATLAB contine numeroase comenzi pentru crearea gracelor bidimensionale si tridimen-
sionale. Cea mai des utilizata metoda este plot,care are mai multe argumente optionale.
Daca y este un vector linie, plot(y) deseneaza linia franta intre punctele de coordonate
(i, y(i)) cu i = 1 : length(y). Daca x si y sunt vectori-linie de aceiasi lungime, plot(x,y) de-
seneaza gracul cu punctele de abscisa x(i ) si ordonata y(i ). Un exemplu simplu de utilizare
a comenzii este trasarea gracului unui semnal u(t) = te
t
cos 8t.
6
Figura 1: Gracul functiei x(t) = te
t
cos(24t)
t = linspace(0,8,401); %Deneste un vector de timp [0;8] sec cu 401 puncte
x = t.*exp(-t).*cos(8*pi*t); %Deneste vectorul x cu valorile semnalului u
plot(t,x); %Gracul lui x functie de t
xlabel(Timp(s)) %Eticheta axei timpului (abscisei)
ylabel(Amplitudine) %Eticheta axei amplitudinii (ordonatei)
Acest script genereaza gracul din Figura 1.
3.1 Comenzi
Cateva comenzi care genereaza grace 2D sunt
plot Grac in coordonate liniare ca o functie continua
stem Grac in coordonate liniare ca o functie discreta
loglog Axe x si y logaritmice
semilogx Axa y liniara si axa x logaritmica
semilogy Axa x liniara si axa y logaritmica
hist Histograma
polar Coordonate polare
3.2 Personalizarea gracelor
Cateva dintre cele mai frecvente comenzi
7
xlabel Eticheta a axei x
ylabel Eticheta a axei y
title Titlu al gracului
grid Adauga un grid gracului
gtext Permite pozitionarea textului cu mouse-ul
text Permite pozitionarea textului la anumite coordonate ale gracului
axis Permite schimbarea axelor x si y
gure Creeaza o noua fereastra pentru un grac
gure(n) Face gura n gura curenta
hold on Permite desenarea mai multor grace pe acelasi sistem de axe de coordonate
hold o Incheie comanda hold
close(n) Inchide gura numarul n
subplot(a,b,c) Creeaza o matrice de grace a b cu c ind gura curenta
orient Specica orientarea unei guri
3.3 Scari logaritmice
Atunci cand valorile luate de un semnal difera ntre ele cu cateva ordine de marime sau atunci
cand se doreste reprezentarea anumitor grace pe un domeniu foarte larg (de exemplu, de la
0 la 10
5
) se folosesc scari logaritmice (log
10
). Intr-o scara logaritmica, punctele 10
k
cu k Z
sunt echidistante. De cele mai multe ori in astfel de grace variabila reprezentata pe abscica
are semnicatie de frecventa. In secventa de numere ..., 1, 2, 5, 10, ... pe o scara logaritmica
(log
10
) distanta dintre 1 si 2 este aproximativ egala cu cea dintre 5 si 10 si aproximativ egala
cu o treime din distanta dintre 1 si 10. In plus fata de aceasta, MATLAB mai efectueaza o
scalare suplimentara, care consta in numarul de pixeli alocat pentru ecare axa in parte
unitatii, adica distantei dintre doua puteri succesive ale lui 10. Pentru lucrul cu scari
logaritmice pot utile urmatoarele functii MATLAB, care au fost indicate si mai sus: loglog,
semilogx, semilogy, logspace.
3.4 Grace 3D
Se considera functia de doua variabile
g(x
1
, x
2
) = e
x
2
1
x
2
2
sin(4x
2
) cos(4x
1
)
Pentru generarea gracului 3D al functiei g(x
1
, x
2
) se poate folosi urmatoarea secventa de
comenzi. Se folosesc functiile meshgrid(),mesh(), care creaza matricile X si Y (introduceti
help meshgrid in linia de comanda a Matlab-ului):
x = linspace(-pi/2, pi/2, 50);
y = linspace(-pi/2, pi/2, 50);
[X Y] = meshgrid(x, y);
G = exp(-X.^2-Y.^2).*sin(4*Y).*cos(4*X);
mesh(X,Y,G);
O matrice mai poate vizualizata ca o suprafata cu comanda meshc sau surf.
8
Figura 2: Gracul functiei g(x
1
, x
2
) = e
x
2
1
x
2
2
sin(4x
2
) cos(4x
1
)
Pentru functii de doua variabile pot obtinute grace in care apar anumite contururi
corespunzatoare curbelor de nivel. Aceste contururi vor etichetate cu valoarea functiei pe
curba de nivel respectiva:
c = contour(G);
clabel(c);
4 Polinoame
Polinoamele apar frecvent in teoria semnalelor si sistemelor, de exemplu in reprezentarea n
frecvent aa sistemelor de convolutie prin intermediul asa-numitei functii de transfer, ca raport
de polinoame cu coecient i reali sau complecsi. Funct ia de transfer este transformata Laplace
(sau transformata Z) a funct iei pondere care deneste sistemul de convolut ie respectiv.
MATLAB reprezinta polinoamele ca vectori linie de coecienti polinomiali. De exemplu,
polinomul s
2
+ 4s 5 este reprezentat in MATLAB prin
>> p = [1 4 -5].
In continuare vom lista cateva din cele mai importante comenzi folosite la manipularea
polinoamelor.
roots(p) Radacinile polinomului p
polyval(p,x) Evaluarea polinomului p la valorile vectorului x
conv(p1,p2) Produsul polinoamelor p1 si p2
deconv(p1,p2) Rezultatul impartirii lui p1 la p2
poly2str(p,s) Asarea polinomului ca o ecuatie in s
poly(r) Determinarea unui polinom pe baza radacinilor r
9
Aproximarea polinomiala
Find dat un set de date {x
i
, y
i
}
i=1...N
, se poate determina polinomul care aproximeaza
cel mai bine in sensul celor mai mici patrate functia y = f(x). Functia
>> yp = polyfit(x,y)
returneaza coecientii polinomului aproximant y
p
(x) = a
n
x
n
+a
n1
x
n1
+ a
1
x +a
0
. Mai
jos este prezentat un exemplu de aproximare polinomiala.
x = 1:10; % Datele
y = [1 5 3 3 2 3 6 11 17 34];
plot (x , y , *); hold on
P = polyfit(x, y, 4); % gaseste coeficientii polinomului aproximant de gradul 4
x_p = linspace (1,10,100);
y_p = polyval( P, x_p); % se calculeaza valorile polinomului P in punctele x_p
plot (x_p , y_p , r )
legend(Date experimentale , Polinom);
5 Platforma MATHEMATICA si MATLAB
MATHEMATICA este un limbaj de nivel inalt concurent, cu multe Toolbox-uri utile, utilizat
in matematica, stiinte ingineresti, zica si alte arii ale stiintei si calculului numeric aplicat -
technical computing. Limbajul MATLAB are cateva biblioteci comune cu acesta, cum ar
Symbolic Math Toolbox si Partial Differential Equation Toolbox. Se consulta:
>> help Symbolic Math Toolbox
Sunt implementate metode diverse de calcul a limitelor, integrare, derivare, rezolvare
a ecuatiilor polinomiale, a ecuatiilor diferentiale sau cu derivate partiale. Ecuatiile pot
rezolvate e analitic (se lucreaza cu variabile simbolice, expresiile rezultate sunt literale), e
numeric (metode numerice de integrare, derivare, rezolvare a ecuatiilor diferentiale etc.).
Se lucreaza asadar cu obiecte simbolice, care pot denite folosind instructiunea
>>syms variabila1 variabila2
Mai jos sunt listate cateva functii precum si exemple edicatoare.
limit Calculeaza simbolic limita unei functii
diff Calculeaza simbolic derivata unei functii
int Calculeaza simbolic (numeric) integrala (ne)denita
solve Rezolva simbolic ecuatii
dsolve Rezolva simbolic ecuatii diferentiale
gradient Determina simbolic gradientul
10
syms x y % definire x, y ca obiecte simbolice
f = cos(x)^2 + x^3 % definire f(x)
subplot(211), ezplot(f) % reprezinta grafic f(x) in jumatatea superioara
g = exp(-x^2-y^2)*sin(x*y) % definire g(x)
subplot(212), ezmesh(g) % reprezinta grafic g(x,y) in jumatatea inferioara
L = limit( (1+x / n)^n , n , inf)
limit(x/abs(x),x,0,left)
fprim = diff(f)
fpprim = diff(f,2)
gprim = diff(g,y)
F = int(f,x) % integrare nedefinita in raport cu x
F = int(f,0,1) % Integrare definita
a = solve(f) % rezolva ecuatia f(x) = 0
a = solve(f(x)=3)
dsolve(Dy = 1 + y^2 , y(0) = 1)
6 Exercit ii rezolvate
Exercitiul 1. Pentru o mai buna intelegere a scarilor logaritmice explicati ce realizeaza
scriptul urmator:
subplot( 2, 1, 1 );
f = logspace( 0, 2, 100 );
loglog( log( f ) );
subplot( 2, 1, 2 );
f = logspace( 0, 2, 100 );
semilogy( f );
Exercitiul 2. Reprezentati grac functiile y
1
(x) = sin(x), y
2
(x) = 2 sin(x), y
3
(x) = sin(2x).
Rezolvare.
subplot( 3, 1, 1 );
x = -pi : 0.01 : pi;
plot( x, sin( x ) );
xlabel(x);
ylabel(sin(x));
title(Graficul functiei sin(x));
subplot( 3, 1, 2 );
plot( x, 2 * sin( x ) );
xlabel(x);
11
Figura 3: Gracele pentru exercitiul 1.
ylabel(2*sin(x));
title(Graficul functiei 2*sin(x));
subplot( 3, 1, 3 );
plot( x, sin( 2 * x ) );
xlabel(x);
ylabel(sin(2x));
title(Graficul functiei sin(2x));
Exercitiul 3. Trasati gracul functiei y(t) = 1(t) cos(t), unde 1(t) este functia treapta a
lui Heaviside, denita de:
1(t) =
_
1, t 0;
0, t < 0.
Rezolvare.
t= -2 * pi : 0.01 : 2 * pi;
treapta = zeros( 1 , length( t ) );
treapta (t>=0) = 1; % Expresia inloculieste un ciclu for. Justificati!
subplot( 2, 1, 1 );
plot( t, cos( t ) );
xlabel(t);
ylabel(cos(t));
12
Figura 4: Gracele pentru Exercitiul 2.
title(Graficul functiei cos(t));
subplot( 2, 1, 2 );
plot( t, treapta .* cos( t ) );
xlabel(t);
ylabel(1(t) * cos(t));
title(Graficul functiei 1(t) * cos(t));
Exercitiul 4. Mai multe perechi (x, y) pot reprezentate grac printr-un singur apel al
functiei plot. Reprezentati pe acelasi grac functiile y
1
(x) = 2 cos(x), y
2
(x) = cos(x),
y
3
(x) = 0.5 cos(x) pe intervalul x [0; 2].
Rezolvare.
x = 0:pi/100:2*pi;
y1 = 2*cos(x);
y2 = cos(x);
y3 = 0.5*cos(x);
plot(x,y1,--,x,y2,-,x,y3,:)
xlabel(0 \leq x \leq 2\pi)
ylabel(Functia cosinus)
legend(2*cos(x),cos(x),0.5*cos(x))
title(Exemplu tipic de grafice multiple)
axis([0 2*pi -3 3])
13
Figura 5: Gracele pentru Exercitiul 3.
Exercitiul 5. Hodograful. Se numeste drum parametrizat in R
2
, () = (f
1
(), f
2
())
I orice functie continua : I R
2
, unde I este un interval al dreptei reale. Submulti-
mea lui R
2
:()={(f
1
(), f
2
())| I} se numeste hodograful drumului . In multe probleme
specice Teoriei Sistemelor, hodograful se reprezinta in coordonate carteziene:
:
_
x = f
1
()
y = f
2
(), I.
Ca exercitiu, trasati hodograful urmatorului drum parametrizat:
:
_
x =
1
1+
2
y =

1+
2
, R.
Rezolvare.
w = -pi : 0.01 : pi;
x = ( 1 + w .^ 2 ) .^ ( -1 );
y = -w .* x;
plot( x, y );
Exercitiul 6. Trasati gracul functiei trian(t), unde
trian(t) =
_
1 |t|, 1 < t < 1;
0, altfel,
14
Figura 6: Gracul pentru Exercitiul 4.
pentru 0 < < 1 si 1 < < .
Rezolvare. Vom folosi doua siere: o functie in care generam functia trian(t) si un script
in care facem diferite prelucrari.
Functia trian(t) in sierul trian.m:
function [ y ] = trian( t );
if ( t > -1 && t < 1 )
y = 1 - abs( t );
else
y = 0;
end
Fisierul in care am trasat gracele arata in felul urmator:
t = -10 : 0.01 : 10;
alpha1 = input(Dati alpha subunitar: );
alpha2 = input(Dati alpha supraunitar: );
for i = 1 : length( t )
trian_func1( i ) = trian( t( i ) );
trian_func2( i ) = trian( alpha1 * t( i ) );
trian_func3( i ) = trian( alpha2 * t( i ) );
end
15
Figura 7: Gracul pentru Exercitiul 7.
plot( t, trian_func1, t, trian_func2, r, t, trian_func3, g );
ylim( [ -1 2 ] );
xlabel(t);
ylabel(trian(\alphat));
title(Grafice pentru trian(\alphat));
legend( trian(t),trian(\alphat), 0 < \alpha < 1, trian(\alphat), ...
1 < \alpha < \infty, Location, SouthWest );
Exercitiul 7. Trasati gracul functiei y(t) = ramp(t) e
t
.
Rezolvare. Functia rampa, ramp(t), are urmatoarea forma:
ramp(t) =
_
t, t 0;
0, t < 0.
t= -1 : 0.01 : 2;
ramp = zeros( 1 , length( t ) ); % umplem vectorul cu zerouri
for i = 1 : length( t )
if t( i ) >= 0
ramp( i ) = t( i ); % punem t pentru t >= 0
end
end
hold on
16
Figura 8: Gracul pentru Exercitiul 7.
plot( t, ramp );
plot( t, exp( t ), r );
plot( t, ramp .* exp( t ), g );
xlabel(t);
ylabel(f(t));
title( Graficele functiilor ramp(t), e^t si ramp(t) \cdot e^t);
legend( ramp(t), e^t, ramp(t) \cdot e^t, Location, NorthWest );
hold off
7 Exercitii propuse
Exercitiul 8 (1p).
a) Scrieti o functie care returneaza suma si produsul elementelor unui vector generat aleator
(sum, prod, rand). Adaptati apoi functia, astfel incat sa e luate in considerare doar
elementele mai mari decat 0.5.
b) Scrieti un script care reprezinta grac pozitiile radacinilor polinomului p(z) = z
n
1 in
planul complex pentru diverse valori ale lui n N (radacinile de ordin n ale unitatii).
c) Scrieti o functie care reprezinta grac atat functia f(x) = x
2
+ 2ab + b
2
cat si plasarea
radacinilor acesteia in planul complex (folositi instructiunea figure). Functia primeste
drept parametri de intrare a, b R.
Exercitiul 9 (1p).
17
Figura 9: Gracul pentru Exercitiul 9a.
a) Sa se reprezinte grac functia de doua variabile f(r) =
sin(r)
r
, cu r
2
= x
2
+ y
2
. Se vor
desena doua grace: unul cu x, y [15; 15] si unul cu x, y [30; 30].
b) Desenati trei cercuri concentrice de raze 1, 2, 3 cu diferite culori.
Exercitiul 10 (1p). Folositi help si dati o solutie numerica la urmatoarele cerinte:
a) Desentati e
x
2
, pentru x [3, 3]. Calculati
_
1
0
e
x
2
dx folosind functiile trapz si quad.
Calculati de asemenea
_
3
3
e
x
2
dx.
b) Calculati
_
5
0
xe

x
3
dx folosind functiile trapz si quad. Vericati analitic si numeric ca
valoarea integralei este 24e

5
3
+ 9.
c) Se da ecuatia diferentiala x + x
2
= 0 cu conditia initiala x(0) = 1. Rezolvati ecuatia
utilizand functia ode23.
Exercitiul 11 (2p). Un set de date cunoscut {x
i
, y
i
}
i1,N
poate aproximat ca o combinatie
liniara de M functii arbitrare:
y
P
(x) = c
1
f
1
(x) + c
2
f
2
(x) + + c
M
f
M
(x).
Coecientii se determina astfel incat eroarea sa e minima in sensul celor mai mici patrate.
Astfel, se considera setul de date generat prin secventa de comenzi
x = linspace(0,10,200);
y = randn(1,200);
Se cere aproximarea setului de date printr-o combinatie liniara a functiilor sin(x), sin(2x),
sin(3x). Reprezentati pe acelasi grac rezultatele obtinute, i.e., setul de date si y
P
(x).
Indicatie. Fie y
P
(x) = c
1
sin(x) +c
2
sin(2x) +c
3
sin(3x). Din setul de date avem succesiv:
18
Figura 10: Gracul pentru Exercitiul 12
_

_
y
1
= c
1
sin(x
1
) + c
2
sin(2x
1
) + c
3
sin(3x
1
)
y
2
= c
1
sin(x
2
) + c
2
sin(2x
2
) + c
3
sin(3x
2
)
=
y
200
= c
1
sin(x
200
) + c
2
sin(2x
200
) + c
3
sin(3x
200
)
y = Fc c = F
+
y = F\y, unde
y =
_

_
y
1
y
2
.
.
.
y
200
_

_
, F =
_

_
sin(x
1
) sin(2x
1
) sin(3x
1
)
sin(x
2
) sin(2x
2
) sin(3x
2
)
.
.
.
.
.
.
.
.
.
sin(x
200
) sin(2x
200
) sin(3x
200
)
_

_
, c =
_
_
c
1
c
2
c
3
_
_
, F
+
F = I.
Apelati in Matlab c=F\y.
Exercitiul 12 (1p). Scrieti un script Matlab care deseneaza gracele functiilor u(t) si v(t),
prezentate in gura 10.
Exercitiul 13 (1p). Convergenta seriilor innite. Consideram seriile
S
n
=
n

k=0
a
k
, a (1, 1), P
n
=
n

k=1
1
k
p
, p N
a) Scrieti o functie care primeste ca parametrii a (1, 1), n N si returneaza S
n
. Re-
prezentati grac S
n
, utilizand functia stem. Vericati ca, pentru n sucient de mare,
S
n

1
1a
. Testati pentru 1 < a < 0 si pentru 0 < a < 1.
b) Reluati punctul anterior pentru P
n
cu p = 2. Vericati ca, in acest caz, lim
n
P
n
=

2
6
.
Dar pentru p {3, 4, 5} ?
19
Figura 11: Gracul pentru Exercitiul 14
Exercitiul 14 (2p). Aruncarea unei bile in camp gravitational. Ecuatiile coordona-
telor bilei in functie de timp sunt
x(t) = v
0
cos()t, y(t) = h + v
0
sin()t
1
2
gt
2
,
unde t [0, t
nal
] este variabila de timp, h este inaltimea, v
0
este viteza initiala a bilei, este
unghiul vectorului v
0
cu orizontala, iar g = 9.8 m/s
2
. Se cere:
a) Scrieti o functie care primeste ca parametri t
nal
, h, v
0
, si deseneaza traiectoria bilei in
planul xOy. Se va desena pe acelasi grac solul, i.e., functia y(x) = 0, x.
b) Caz particular: t
nal
= 1 s, h = 1.5 m, v
0
= 4 m/s, = /4 rad. Gasiti distanta de impact
cu solul, i.e., x pentru care y 0. In cat timp are loc impactul? Gasiti si reprezentati pe
grac y
max
. La ce moment de timp are loc y = y
max
?
c) Desenati bila in miscare (o scurta animatie). Se vor folosi: o bucla for, plot, drawnow.
Exercitiul 15 (2p). Seturi Julia. Cautati pe Wikipedia Julia Sets, un exemplu celebru al
teoriei haosului. Date ind doua numere complexe, c si z
0
, se deneste urmatoarea recurenta:
z
n
= z
2
n1
+ c.
Sirul de numere complexe z
1
, z
2
, z
3
, . . . se numeste orbita lui z
0
.
a) Se poate arata ca, daca exista un numar n
0
N a.i. |z
n
0
| > 2, orbita sistemului tinde
la innit. Numarul n
0
se numeste viteza limita (escape velocity) pentru un z
0
particular.
Scrieti o functie care returneaza aceasta viteza, de forma n=escapeVelocity(z0,c,N),
unde N este valoarea maxima admisa (i.e., daca |z
N
| < 2, n = N; se previn astfel bucle
innite). Folositi functia abs pentru calculul modulului unui numar complex.
20
Figura 12: Gracul pentru Exercitiul 15
b) Vom scrie aici functia M=julia(zMax,c,N). Generati o matrice Z C
500500
, avand partea
reala intre -zMax si zMax si partea imaginara intre aceleasi limite. Pentru ecare element
din Z, se pastreaza in M viteza limita corespunzatoare. Indicatie. Z = X+jY . Veti folosi
functiile linspace si meshgrid. Mai departe, M(i,j)=escapeVelocity(Z(i,j),c,N),
pentru i, j {1, . . . , 500}.
c) Apelati M=julia(zMax,c,N) pentru diverse valori ale parametrilor. Se vor genera fractali.
Pentru vizualizarea fractalului, apelati imagesc(atan(0.1*M)). Spre exemplu, apelul de
mai jos genereaza gura 12.
M=julia(1,-0.297491+i*0.641051,100);
imagesc(atan(0.1*M))
21