opt

15

Click here to load reader

Upload: cristina-emilia-cismaru

Post on 23-Jun-2015

95 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Opt

Opt1/Seminar Optimizări- Introducere în MATLAB-2013-2014

MATLAB este un mediu de programare bazat pe operaţii asupra tablourilor (vectori si matrici), de unde si numele (« MATrix LABoratory »). Matlab este un pachet de programe de înaltă performanţă dedicat calcului numeric şi reprezentărilor grafice în domeniul ingineriei.MATLAB include si aplicaţii specifice numite TOOLBOX-uri. Acestea sunt colecţii de fisiere de tip « funcţie », cu extensie « .m », dedicate rezolvării unor probleme ingineresti.

Deschiderea Matlab : Dublu clik pe pictograma Matlab. Apare meniul :

Comenzile Matlab de încărcare şi salvare a fişierelor de date de pe (pe) discul curent sunt: crearea unui fişier .m : Matlab: File: New: M-file - creare (scriere)- salvare în spaţiul de lucru Work :

save – salvează într-un fişier de date pe disc.load – încarcă variabilele dintr-un fişier de date de pe disc;Salvarea variabilelor A B C din spaţiul de lucru, într-un fişier

nume_fişier.mat se face utilizând comanda:save nume_fişier A B CÎncărcarea datelor din fişiere cu extensie .mat se face utilizând comanda:load nume_fişier

Linia comentariu începe obligatoriu cu « % » Deoarece Matlab memorează toate instrucţiunile operate, la trecerea

unui alt program trebuie şterse din memoria acestuia cu instrucţiunile clear all şi clc.

Programele realizate sub MATLAB se redactează fie în fereastra de comenzi, situaţie în care fiecare linie de program este executată imediat ce se tastează « enter » :Ex :5+3« enter » ans =8

fie în fişiere : FileNewM-file Se scrie programul Se salveaza automat cu un nume fisier si extensia « .m » in directorul Work. Programul este rulat la tastarea numelui fişierului în fereastra de comenzi. Ex . de program : x=5;y=3;s=x+y salvat « suma » în fereastra de comenzi tastam « suma » s = 8

1

Page 2: Opt

Dacă o instrucţiune nu se termină prin punct-virgulă, « ; », rezultatele sunt afişate imediat ce linia este executată.

Variabilele în MATLAB.- Trebuie să înceapă cu o literă; MATLAB face o diferenţiere între literele mari şi mici - Lungimea cuvântului : 19 caractere( restul sunt ignorate); nu este permisă folosirea semnelor de punctuaţie în interiorul unui cuvânt ce reprezintă o variabilă ;- Variabile speciale utilizate de MATLAB: « ans » - rezultatul unui calcul; « pi » - raportul dintre perimetrul şi diametrul cercului = 3.14...; « i »sau «  j » = radical din -1,de la numerele complexe; Ex: >> i ans = 0 + 1.0000i« realmin » şi « realmax » - cel mai mic şi respectiv cel mai mare număr real pozitiv utilizabil.- Formate de afişare a numerelor: format opţiune cu opţiunile : short - patru cifre după virgulă ex.: 35.3482 - este forma standard; long - afişare pe 16 pozitii ex.: 35.34822154352415; rat - fracţie ex. : 215/6;

Operaţii matematice asupra scalarilor şi funcţii elementareExpresiile sunt evaluate de la stânga la dreapta, utilizându-se priorităţile

cunoscute: puteri, înmulţire şi împărţire, adunare şi scădere. - adunare = "+" ex.: 5+3 ; - scădere = "-" ex.: 5-3 ; - înmulţire = "*" ex.: 5*3 ; - împărţire la dreapta "./" : z= x/y Ex : 5/2 ans =2.5 sau ".\" la stânga z= y/x : 5\2 ans=0.4 - putere = "^" ex.: 5^3=125

Pentru a modifica ordinea operaţiilor, se folosesc paranteze. Ex: 5*((3+5)^2-7*(8-2)/5)-2 ans=276

Ex.10: Calculati { }2

Funcţii elementare:(Elementary math functions).

- Trigonometrice (unghiurile în radiani) : sin(x) = b / c- sinus ; sinh(x) =(ez-e-z)/2 - sinus hiperbolic ; asin(x) =sin-1(x) - arcsinus (invers sinus) ; asinh(x) =sinh-1(x) – arcsinus hiperbolic (invers sin hiperbolic) ; - cosinus : cos(x)=a / c, cosh, acos, acosh ; tangentă : tan(x)=b / a, tanh, atan, atanh ;cotangentă : cot(x)=a / b, coth, acot, acoth ;secantă :

2

Page 3: Opt

sec(x)=1/cos(x)=c / a, sech, asec, asech ;cosecantă : csc(x)=1/sin(x)= c / b, csch, acsc, acsch .Ex >> sin(pi/6) ans = 0.5000 >> csc(pi/6) ans = 2.0000Ex.11: Calculati toate functiile trigonometrice pt. : 0,30,90 , 120, -45 Ex.12: Calculati toate functiile trigonometrice inverse pt. : 0 0,5 , 1 - Alte funcţii elementare : exp(x) - ex (e = 2,7183- baza logaritmilor naturali) ; log(x) - logaritm natural ; log10(x) - logaritm zecimal ; sqrt(x) - radical ; abs(x) - valoarea absolută - Funcţii referitoare la numere complexe : real, imag, conj, angle(in radiani)Ex. >> x=3+4*i real(x) ans = 3 ; >> conj(x) ans = 3.0000 - 4.0000i

Operaţii asupra vectorilor şi matricilor.Un vector linie se poate introduce element cu element: a= [ 1 3 5 8 -2

0], un vector coloană( trecerea de la o coloană la alta este marcată « ; »): b= [ 1; 3; 5; 8; -2; 0]Trecerea dintr-o formă în alta se poate realiza prin operatorul de transpunere

« ' »: a = b' Obs: « .' » reprezintă transpunerea iar « ' » reprezintă transpunerea complex conjugatei; pentru numere reale, cele două operaţii sunt identice.- Generarea unui vector care începe cu elementul 0,următoarele elemente fiind incrementate cu 0.1 până la atingerea valorii 1. a=0:0.1:1Ex: >> a=0:0.1:1 a = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 - Înmulţirea fiecărui element al vectorului cu π= 3.14.... : a=(0:0.1:1)*pi- linspace(prima valoare, ultima valoare, număr de valori) ; Ex : a=linspace(0,1,11)- Alte modalităti : a=1:5, b=1:2:9, c=[a b] c=[ 1 2 3 4 5 1 3 5 7 9]. d= [a(1:2:5) 1 0 1] d=[1 3 5 1 0 1] - Adresarea elementelor : d(3) fiind al treilea element, adica 5, d(3:6) fiind al treilea,...,al şaselea element al vectorului.

- Introducerea matricilor este asemănătoare. Matricea:

se poate introduce: a). a=[1 2 3; 4 5 6; 7 8 9] b). a=[1 2 3 4 5 6 7 8 9] Adresarea elementelor matricii: - a(2,3) reprezintă un element din linia 2, coloana 3 adica 6 ; a(1,:) reprezintă toate coloanele din linia 1, adică

3

Page 4: Opt

elementele 1 3 5 ; a(:,2) reprezintă toate liniile coloanei 2, adică 3 4 5 ; a(:) rearanjează matricea într-un vector coloană, preluând elementele coloană după coloană.

Ex.1 . Afisati elementul : a. aflat pe linia 1 coloana2, b. linia 1,

c. col 2Ex.2: Creaţi vectorul ce conţine elementele : 32,4,81,e2,5 ,63,cos(/3)şi 14,12.Ex.3:Creaţi vectorul coloană ce conţine elementele :55,14,ln(51),987,0, sin(2,5).Ex.4: Creaţi vectorul linie a cărui prim element este 1, ultimul 33 şi pasul 2Ex.5: Creaţi vectorul coloană a cărui prim element este 15, ultimul – 32 şi pasul –5 Ex.6: Creaţi un vector linie cu 15 elemente, primul 7 ultimul 40Ex.7: Creaţi un vector coloană cu 12 elemente, primul -1 ultimul –15Ex.8: Sa se genereze un vector : a. Cu min=-20, max-10, pas=3 , b. min=2,5 max=7 si 4 elemente c. Min=2,5 max=7 pas=1,25

Matrici speciale: x= zeros(3) , y= ones(2,3) , z= eye(3) –diagonala principală 1

Fie a=[a1 a2 .....an], b=[b1 b2 .... bn], şi c un scalar c=[c] ; operaţii posibile, semnificaţia lor :adunarea unui scalar: a+c=[a1+c .... an+c] ; înmulţire cu un scalar : a*c=[a1*c .... an*c] ;adunarea a două tablouri: a+b=[a1+b1 ... an+bn] ; înmulţirea a două tablouri: a.*b=[a1*b1 ... an*bn] ; împărţire la dreapta, element cu elem.:a./b=[a1/b1 ... an/bn] ; împărţire la stânga, elem. cu element : a.\b=[a1\b1 ... an\bn] ; - puteri : sir la puterea scalar: a.^c=[a1^c ... an^c] ; scalar la puterea sir: c.^a=[c^a1 ... c^an] ;sir la puterea sir: a.^b=[a1^b1 ... an^bn] . - Extragerea unei matrici dintr-o matrice dată : d=c(1:2,3:5) va genera matricea c=[1 2 3 7 9;4 5 6 4 6;7 8 9 1 3]; d=c(1:2,3:5) d=[3 7 9;6 4 6] - aflarea dimensiunii unui vector : n=length(c) sau a unei matrici : [m n]=size(c), m-linii, - Rangul, determinantul, transpusa şi inversa unei matrici pot fi evaluate prin câte o simplă instrucţiune. : rangului matricii a:r=rank(a) , determinantul: delta=det(a) calculul inversei: b=inv(a), transpusa nr. reale : b=a.' , conjugate: b=a'- înmulţirea a două matrici " * ": c=a*b, a este m*n, b n*p, c n*p.

4

Page 5: Opt

Ex.9: a=[2 -1 5 0] , b=[3 2 -1 4] , c=3 . Calculati a+b, a-b, d=b:a, d=a:b, d=2:a , d=a*b, d=22+b, d=b*c*a , d=a’ Operatorul \ şi / sunt echivalenţi este un operator deosebit de puternic, soluţia aleasă pentru împărţire: soluţia sistemului: a*x=b x=a\b, x=inv(a)*b.Ex : Sa se rezolve sistemul : x+2*y+3*z=9 ; 0.5*x +0.5*y+z+u=4.5 ; 2*x+y-z+2*u=4 ; 0.5*x-y+z-3*u=-2.5ExOpt0: A=[1 2 .5 3 ; 0.5 0.5 1 1 ; 2 1 -1 2 ; 0.5 -1 1 -3] ; B=[9 4.5 4 -2.5] ; B=B'; X=inv(A)*B; disp('X=”); disp(X)U=A\Bdisp('sol.sist=');disp(U) ;Ex.13: Rezolvaţi sistemul :

A5x+4z-2y-6w=43x+6y+6z+4,5w=13,56x-12y-2z-16w=204x-2y+2z+4w=6

Bx+y+z=4x-2y-y=12x-y-2z=-1

C4x-2y-6z=82x+8y+2z=46x+10y+3z=0

D3x+2y-z=12x-2y+4z=-2-x+1/2 y-z=0

EX+y+z=250,06x+0,07y+0,08z=1,62y-z=6

Fx+2y+3z=5x-y+6z=23x-2y=4

G2x+3y+4z=5x-y+2z=63x-5y-z=0

HY+z=53x+z=6-x+y=1

Ex.14: Pentru ex.13.A-H calculati determinantul A, inversa A, rangul A, transpusa A

Grafica în MATLAB In cazul bidimensional, se utilizează instrucţiunea "plot". Structura: plot(y1,x1,'tip_linie1',y2,x2,'tip_linie2', ...); - "tip_linie" reprezintă tipul liniei : « - », «  _ » , «  -. » sau al punctului : « * », «  + » , « x », « o » ,etc. precum şi culoarea cu codurile : r - rosu; g - verde; b - albastru; - Pe figură se pot adăuga: titlul figurii : title(' text ce reprezintă titlul'); eticheta(denumirile) axelor : xlabel(' .... '), ylabel(' ... ') ; grila (caroiajul): grid;- un text amplasat în punctul de coordonate(unităţile axelor) x,y: text(x,y,'....').- limitele valorilor pe fiecare axă: axis([valminx valmaxx valminy valmaxy]).

5

Page 6: Opt

Ex. Graficul personalizat al funcţiilor sinus şi cosinus în intervalul 0 - 360. x=0:pi/50:2*pi;y1=sin(x);y2=cos(x);xgrd=x.*(180/pi);plot(xgrd, y1, 'r+', xgrd, y2, 'go'); grid; title('Graficul functiilor sinus si cosinus');xlabel('valoare unghiului[grade]');ylabel('valoarea functiei'); ExOpt1. Reprezentarea determinărilor experimentale: Sa se reprezinte

determinarile experimentale obtinute in intervalul 0-5 min din 30 in 30 sec. Personalizati.

t=0:0.5:5 H=[2.2 3.1 3.8 4.3 4.8 5.3 5.8 6.2 6.5 7 7.2 ]plot(t,H, '*');grid; m=min(H1),M=max(H1),med=mean(H1),

xlabel('timp-min');ylabel('nivel');title ('Determinari experimentale');Ex.16: Trasati graficul pe o perioada a functiilor trigonometrice. Personalizati.Ex.17: Trasati graficul functiilor x, x2, x3, ex, ey cu y=x2 x=0…4 Personalizati.Ex.18: Trasati graficul functiilor : . Personalizati

a. 2x2sin(x/2)/(2x) x=0….100 p=0.33b. (i3-lni)/ei i=10….20 p-0,01

c. n=1…….100 p=0,01

d. ln(a3-a2)/(a/2) * 3 a=50……100 p=20e. sin(x3-x2)/(x-2)*3 x=5..6 p=0.001

In cazul tridimensional, se foloseşte instrucţiunea plot3.- X=linspace(amin, amax, N) generează un vector între cele două limite cu pasul p=(amax- amin)/(n+1)

Evaluarea lui z în vederea reprezentării grafice se fasce cu cei doi vectori X,Y: (liniile matricii X sunt copii ale vectorului x iar coloanele matricii Y sunt copii ale lui y) 

Instrucţiunea « [X,Y]=meshgrid(x,y) » transformă domeniul specificat prin vectorii x,y în tablourile X,Y, necesare pentru definirea punctelor (xi,yi) pentru care se va face reprezentarea zi cât şi pentru reprezentării de tip 3D.

6

Page 7: Opt

Ex: Graficul funcţiei z=x*exp(-x^2-y^2), unde x,y[-2,2];Ex. x=linspace(-2,2,20);y=linspace(-2,2,20);[X,Y]=meshgrid(x,y);Z=X.*exp(-X.^2-Y.^2);plot3(X,Y,Z,'g*'),grid;

Valoarea medie pentru un set de valori ale unei variabile x. Varianţa şi dispersia datelor

Varianţa 2 unui set de date se calculează cu relaţia :

(2) ;

unde termenul (xk-) reprezintă diferenţa sau abaterea lui xk faţa de valoarea medie . Prin urmare, varianţa reprezintă pătratul abaterii mediei pătratice a datelor faţă de medie.

Abaterea medie pătratică (abaterea standard astd sau dispersia) este definită ca rădăcina pătrată a varianţei, .Funcţia Matlab care calculează abaterea medie pătratică este std.

Funcţii ale utilizatoruluiFuncţiile utilizatorului se construiesc cu instrucţiunea function. Structura

unei astfel de funcţii este: function[variabile de ieşire]=denumire_funcţie(variabile de intrare).

Dacă există mai multe variabile de ieşire, respectiv mai multe variabile de intrare, acestea se separă prin virgulă. Funcţia trebuie salvată într-un fişier ce are ca nume numele funcţiei (în acest caz: denumire_funcţie).Utilizatorul apelează fişierul cu următoarea structură:

[variabile de ieşire]= denumire_funcţie(variabile de intrare). Ex. Să se realizeze o funcţie care să calculeze media aritmetică (mean) şi

abaterea standard (stdev) pentru un set de valori ale unei variabile x. Funcţia va avea două variabile de ieşire şi o singură intrare, x. Funcţia se salvează sub numele: ex.m

function [med,stdx] = ex(x) n = length(x); med = sum(x) / n; stdx = sqrt(sum((x - med).^2)/(n-1));

length(x) determină "n", numărul de elemente ce compun vectorul x;Exemplu de apelare: x=[2 4 6 8]; [med,stdx]=ex(x)

7

Page 8: Opt

Ex.2. x=[5.1 6 5.7 6.2 5.5 5.8 6.05 5.3 5.8 5.4 6.05 5.75 5.9 6.15 5.38 ];Ex.19 : Creati o functie pentru calculul valoare medie, abatere standard. Aplicatie x=[1 3 5 7 9 10 13 20 34 52]

Comenzi pentru execuţii secvenţiale Pentru executarea repetată a unor secvenţe de calcul, se pot utiliza

buclele for şi while iar pentru luarea unor decizii în cursul calculului structurile if ... else.

Structura ciclului "for": for k = tablou bloc de instrucţiuni ( se utilizează pentru indexare k) end;

Ex. for1.: să se calculeze sinusul şi cosinusul unghiurilor 0,10, .... 90 de grade. % vectorul alfa , unghiurile fiind exprimate în grade

for k= 1:10a(k)=(k-1)*10;

end;% unghiurile exprimate în radiani

ar=a.*(pi/180);x=sin(ar);y=cos(ar);disp('valoarea unghiului');disp(a);disp('sinus de alfa=');disp(x);disp('cosinus de alfa=');disp(y);

Ex.20: Instructiuni ciclice : Calculati si reprezentati grafic functia pentru toate valorile intregi pentru care este definita :

a. f(x)=2x+8, pt. x=[-5,2], f(x)=3x2 pt. x=(2,5]b. f(x)=x2 , pt. x=[0,1), f(x)=2-x pt. x=[1,2]c. f(x)=x2, pt. x=[0,1], f(x)=1 pt. x=(1,2]d. f(x)=cos(x), pt. x=[0,/2], f(x)=1 pt. x=(/2,]e. f(x)=x, pt. x=[0,2], f(x)=2 pt. x=(2,3]

Ciclul "while" Structura: while expresie1 operator_relaţional expresie2 bloc de instrucţiuni end;

Operatorii relaţionali sunt:

8

Page 9: Opt

== egal; >= mai mare sau egal; <= mai mic sau egal;~= diferit; < mai mic; > mai mare.

Instrucţiunile din ciclu sunt executate atât timp cât raportul dintre expresiile 1 şi 2 este adevărat. Ex-Optw. : să se calculeze esin() pentru =0, 10, …,90:a=0; da=10;disp(‘alfa exp(sin(alfa))’) ; while a<=90

x=exp(sin(a)) ;disp([a x]) ;a=a+da ;

end;Structura if ... else ... end:

if expresie_relaţională1 bloc de instrucţiuni executat dacă expresie_ relatională1 este adevarată elseif expresie_relatională2

bloc de instrucţiuni executat dacă prima expresie relaţională este falsă iar a doua adevarată

elseif expresie_relatională3bloc de instrucţiuni executat dacă primele două expresii relaţionale sunt false iar expresie_relatională3 este adevarată

............ else bloc de instr. executat dacă expresiile relationale anterioare nu sunt adevarate end;Ex: Mărimea de intrare « u » a unui proces are valoarea 0 în primele 100 sec., valoarea 1 în următoarele 100 de secunde după care revine din nou la zero :tau=0 ;k=1;while tau<250 if tau <= 100 u=0 ; elseif tau<=200 u= 1; else u=0 ; end; disp([tau u]) ; t(k)=k; x(k)=u;

x=-10:20; for k=1 :length(x) if x(k)<=2 f(k)=2*x(k)+3; else f(k)=2*x(k)^2-1; end;end;plot(x,f);

9

Page 10: Opt

tau=tau+1; ;k=k+1;end ;plot (t,x);grid;axis([-1 260 -.1 1.1]);Structura if ... else ... end – if1 Exemplu- if2Ex-if2 : Calculati si reprezentati grafic functia pentru toate valorile intregi pentru care este definita : f(x)=2x+3 ,pt. x=[-10, 2] ; f(x)= 2x2-1 pt. x=(2,20]Ex. a. For2-Sa se calculeze sin((k1+k2)/(n+m)*pi);pt. k1=1:10, k2=1:5b. For3- Sa se calculeze ln(x) pt. X=12:-1 :6For2 : n=10;m=5;for k1=1:nfor k2=1:mc(k1,k2)=sin((k1+k2)/(n+m)*pi);end;end;Disp([c]);

For3 : n=10;disp('k ln=') ;for k=n+2:-1:n/2x(k)=log(k);disp([k x(k)]) ;end;

c. While –w2 : Să se calculeze esin() pentru =0, 10, …,90:a=0; da=10;disp(‘alfa exp(sin(alfa))’) ;while a<=90x=exp(sin(a)) ;disp([a x]) ;a=a+da ;end;Ex.21: Daca : 0,5e’(t)+e(t)=i(t); cu t=0,e(0)=0, si t=[0,4] Sa se reprezinte grafic pt. i(t)=1

1