Sunteți pe pagina 1din 7

Laborator 26

MATLAB (2)

Structuri de control în limbajul Matlab.


Structura if
Este structura de decizie simplă, întâlnită şi la celelalte limbaje de programare
(Pascal, C, ...). Forma generală a instrucţiunii if este:

if variabila,
instructiuni
end

Instrucţiunile sunt executate dacă partea reală a variabilei are toate elementele
diferite de 0. Variabila este în general rezultatul unei comparaţii de tipul expre-
sie op expresie, unde op este ==, <, >, <=, >= sau ~=.
De exemplu:
if i==j
A(i,j)=1;
end

Structura de decizie poate include două variante folosind structura if-else.


De exemplu:
if i==j
A(i,j)=1;
else
A(i,j)=0;
end

Structura for
Este structura iterativă cu contor. Forma generală este:

for variabila=expresie,
instructiuni
end

De exemplu:
for i = 1:n,
for j = 1:n,
A(i,j) = 1/(i+j-1);
end
end
Structura while
Corespunde structurii iterative cu test iniţial. Forma generală este:
while variabila
instructiuni
end

Instrucţiunile se execută până când variabila are toate elementele diferite de 0.


De exemplu:
i=0;
while i<5
A(i)=0;
i=i+1;
end

Reprezentări grafice
Reprezentări grafice bidimensionale se pot face prin funcţia plot. Avânt doi vec-
tori de dimensiuni identice, voi obţine o reprezentare grafică prin comanda:

plot(x,y)

Se pot genera reprezentări semilogaritmice şi logaritmice prin comenzile


semilogx, semilogy şi loglog. Pe acelaşi ecran se pot face mai multe grafice
utilizând comanda subplot prin care specific una din cele patru posibilităţi de pozi-
ţionare a graficului pe ecran.
Reprezentări 3D ale unor funcţii de două variabile se pot obţine cu funcţia
mesh.

Funcţii Matlab.
Pe lângă funcţiile interne sau externe Matlab, utilizatorul poate defini propriile
sale funcţii. Aceste funcţii vor putea fi utilizate la fel ca funcţiile externe Matlab.
Structura unei funcţii Matlab este următoarea:
- antet funcţie;
- corp funcţie.
Antetul funcţiei are următoarea formă:

function ListParamReturnati]=NumeFunc(ListParamApel);

Corpul funcţiei este format din instrucţiuni Matlab. Cel puţin o instrucţiune din
corpul funcţiei trebuie să aibă următoarea formă:

ParamReturnat = expresie

pentru fiecare parametru din ListaParamReturnati.


Funcţia astfel definită va fi editată folosind editorul medit (fig.3) şi va fi salva-
tă pe disc într-un fişier cu extensia m.

Aplicaţii simple.
Problema 1
Având funcţia f ( x) = x 2 + 3 x − 12 :
a). să se reprezinte grafic pe intervalul x ∈ [−10,10] ;
b). să se determine rădăcinile;
c). să se minimizeze funcţia pe
intervalul specificat.

Rezolvare
a). Pentru reprezentarea grafi-
că a unei funcţii se poate folosi func-
ţia Matlab fplot. Pentru aceasta se
va scrie următoarea funcţie m (folo-
sind editorul din Matlab medit -
vezi figura alăturată).

function y=f(x);
y=x.^2+3*x-12;

Această funcţie va fi salvată într-un fişier pe disc, de exemplu în f.m. De la li-


nia de comandă Matlab vom obţine reprezentarea grafică a funcţiei pe intervalul dorit
prin comanda:

»fplot('f',[-10 10])

Voi obţine în ecranul grafic reprezentarea dorită (vezi figurile de mai jos).
b). Determinarea rădăcinilor unei funcţii este posibilă în două moduri:
I. prin utilizarea funcţiei roots;
II. prin utilizarea funcţiei fzero.
Funcţia roots cere ca argument un
vector ce conţine coeficienţii funcţiei poli-
nomiale a cărei rădăcini dorim să determi-
năm. Funcţia returnează toate rădăcinile
(reale sau complexe) ale funcţiei definite.
»roots([1 3 -12])
Răspunsul obţinut va include toate ră-
dăcinile, atât cele reale cât şi cele complexe,
în acest caz (vezi figura alăturată):
ans =
-5.2749
2.2749

Argumentele cerute de funcţia fzero


sunt: un şir de caractere ce identifică numele
fişierului m în care s-a definit funcţia a cărei
rădăcini dorim să determinăm, o valoare sca-
lară prin care specificăm punctul de start al
căutării rădăcinii. Funcţia returnează o rădă-
cină reală (cea mai apropiată conform algo-
ritmului numeric de căutare). Pentru identifi-
carea celorlalte rădăcini, se folosesc puncte
de start diferite (vezi figura alăturată). Re-
prezentarea grafică a funcţiei şi marcarea ră-
dăcinilor se poate face şi prin programul
prezentat în figura următoare.
Programul este editat în editorul Mat-
lab şi salvat într-un fişier text cu extensia m
(în acest caz grafic.m). De la linia de co-
mandă Matlab, apelarea programul se poate
face prin numele fişierului m – grafic
(exemplu este prezentat în figurile alăturate -
pagina curentă şi pagina următoare).

c). Minimizarea funcţie este posibilă prin fmin pentru funcţii obiectiv de o
variabilă de decizie, şi fmins pentru funcţii obiectiv de două sau mai multe variabi-
le de decizie. În acest caz folosim funcţia fmin.
Parametrii de apelare ai funcţiei fmin includ: un şir de caractere ce identifică
numele fişierului m în care s-a definit funcţia de minimizat, două valori scalare prin
care se specifică intervalul de căutare. În acest caz, de la linia de comandă Matlab
(vezi figura de pe pagina anterioară):

» fmin('f',-10,10)
ans =
-1.5000
» f(ans)
ans =
-14.2500

Problema 2
Să se rezolve sistemul de ecuaţii liniare:
ì x − 3y + 2z = 9
ï
í 2 x − 5 y + z = −1
ï5x + y − 9 z = 12
î
Rezolvare
Soluţia unui sistem de ecuaţii liniare se obţine prin expresia: X=C\L, unde X
este vectorul soluţie, C este matricea coeficienţilor şi L vectorul termenilor liberi. În
cazul de faţă soluţia sistemului se obţine prin secvenţa de comenzi:

» C=[1 -3 2;2 -5 1;5 1 -9];


» L=[9 -1 12]';
» X=C\L
X =
17.4138
9.0345
9.3448

Soluţia obţinută este x=17,4138; y=9,0345 şi z=9,3448.


Problema 3
Să se rezolve sistemul de ecuaţii neliniare:
ì x − yz = 9
ï
í xy − 2 z = 0
ï6 xz − y = −1
î
Rezolvare
Se utilizează funcţia Matlab fsolve. Se defineşte sistemul de ecuaţii într-un
fişier m, fie acest fişier snelin.m cu următorul conţinut:

function y=f(x);
y=zeros(3,1);
y(1)=x(1)-x(2)*x(3)-9;
y(2)=x(1)*x(2)-2*x(3);
y(3)=6*x(1)*x(3)-x(2)+1;

De la linia de comandă Matlab:

» fsolve('snelin', [1 1 1]’)
ans =
9.0001 -0.0041 -0.0186

Soluţia obţinută este: x=9,0001, y=-0,0041 şi z=-0,0186.

Problema 4
Să se găsească soluţia sistemului de ecuaţii diferenţiale:
ì dc A −5 −6
ï dt = −6 ⋅ 10 c A + 7 ⋅ 10 cB
í
ï dcB = −7 ⋅ 10−6 c + 6 ⋅ 10−5 c
î dt B A

cu condiţia iniţială cA0 = 4, cB0 = 4 .

Rezolvare
Vom utiliza funcţia ode45 pentru
găsirea soluţiei pe cale numerică. Funcţia
ode45 utilizează metoda Runge-Kutta
de ordinul 4 pentru a aproxima soluţia
sistemului de ecuaţii diferenţiale. Pentru aceasta vom scrie următoarea funcţie pe
care o vom salva în fişierul dif.m (vezi figura alăturată):

function y=f(t,x);
y(1)=-6e-5*x(1)+7e-6*x(2);
y(2)=6e-5*x(1)-7e-6*x(2);
De la linia de comandă Matlab:
» [t,y]=ode45('dif',[0 100000],[4 4]);
» plot(t,y)
În urma acestei secvenţe de
comenzi, vom obţine reprezentarea
grafică a rezultatului conform figu-
rii alăturate.

Problema 5
Să se reprezinte grafic func-
ţia de două variabile:
f ( x, y ) = x 2 y 2 + 20
pe intervalul x ∈ [0,2] şi y ∈ [0,2].

Rezolvare
Reprezentarea unei expresii
de două variabile se poate face prin
următoarele funcţii Matlab de re-
prezentare 3D: mesh şi surf.
Pentru obţinerea reprezentă-
rii grafice a funcţiei date se parcurg următoarele etape:
1. cu editorul medit din Matlab, se scrie funcţia dată într-un fişier m.
2. de la linia de comandă Matlab se introduc comenzile prezentate în figura
următoare.

Bibliografie
1. * * *, MATLAB - User’s Guide, The MathWorks, Inc, USA, 1999.
2. M.Ghinea, V.Fireţeanu, Matlab. Calcul numeric-grafică-aplicaţii, Editura Teora,
Bucureşti, 1998

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