APLICAtii MATLAB

download APLICAtii MATLAB

of 97

Transcript of APLICAtii MATLAB

  • 8/7/2019 APLICAtii MATLAB

    1/97

    APLICAII MATLAB

    1. PREZENTARE GENERAL

    MATLAB = Limbaj de nalt performan pentru proiectarea asistat de calculator

    MATLAB este n acelai timp un limbaj de programare i un sistem de dezvoltare care integreazcalculul, vizualizarea i programarea ntr-un mediu uor de utilizat (easy-to-use), problemele isoluiile acestor probleme fiind exprimate ntr-un limbaj matematic accesibil.

    Domenii de utilizare: Matematic i calcul numeric Dezvoltarea algoritmilor Modelare, simulare i testarea prototipurilor Analiza i vizualizarea datelor Grafica inginereasc i din tiinele aplicate

    Dezvoltarea de aplicaii, inclusiv GUI MATLAB = sistem interactiv care are ca element de baz tabloul, matricea, ceea ce

    permite rezolvarea problemelor de calcul numeric, n special cele care necesit prelucrareade vectori sau matrici.

    Numele MATLAB provine de laMatrix laboratoryFirma productoare este The MathWorks, Inc., SUA

    MATLAB-ul a evoluat:- n mediul universitar unde este pachetul standard pentru cursurile introductive i avansate de

    matematic, inginerie i tiine- n industrie, unde este utilizat pentru cercetarea de nalt randament, dezvoltare i producie

    MATLAB permite dezvoltarea unei familii de aplicaii sub forma toolbox-urilor.Aceste toolbox-uri permit nvarea i aplicarea tehnologiilor specializate din diversedomenii. Sunt disponibile toolbox-uri pentru domenii cum ar fi: procesarea numeric asemnalelor, sisteme de conducere automat, reele neurale, logic fuzzy, wavelet, simulare(SIMULINK), identificare etc.

    Sistemul MATLABconst n cinci pri principale:

    Limbajul MATLAB Mediul de lucru MATLAB Handle Graphics

    Biblioteca de funcii matematice a MATLAB-ului Interfaa de aplicaii program a MATLAB-ului (API)

    Limbajul MATLAB: Reprezint un limbaj de nivel nalt de tip matrice/tablou cu instruciunide control al salturilor, funcii, structuri de date, intrri/ieiri i cu proprieti de programareorientat pe obiecte. Facilitile de programare sunt organizate pe 6 directoare:

    ops Operators and special characters.Lang Programming language constructs.

    Strfun Character strings.

    1

  • 8/7/2019 APLICAtii MATLAB

    2/97

    Iofun File input/output.Timefun Time and dates.Datatypes Data types and structures.

    Mediul de lucru MATLAB: Reprezint un set de faciliti care permit manevrareavariabilelor n spaiul de lucru, importul i exportul de date, dezvoltarea, manipularea, editarea idepanarea fiierelor MATLAB (.m) i a aplicaiilor MATLAB. Aceste faciliti sunt organizate ndirectorul:

    general General purpose commands.

    Handle Graphics: Reprezint sistemul grafic al MATLAB-ului. Cuprinde comenzi de naltnivel pentru vizualizarea datelor bi i tri-dimensionale, procesarea imaginilor, animaie, prezentride grafice. Permite de asemenea utilizarea unor comenzi de nivel sczut pentru crearea unorinterfee grafice GUI. Funciile grafice sunt organizate n 5 directoare:

    graph2d Two-dimensional graphs.

    Graph3d Three-dimensional graphs.Specgraph Specialized graphs.Graphics Handle Graphics.Uitools Graphical user interface tools.

    Biblioteca de funcii matematice a MATLAB-ului: Reprezint o colecie complex dealgoritmi 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 organizaten 8 directoare:

    elmat Elementary matrices and matrix manipulation.

    Elfun Elementary math functions.Specfun Specialized math functions.

    Matfun Matrix functions numerical linear algebra.

    Datafun Data analysis and Fourier transforms.

    Polyfun Interpolation and polynomials.

    Funfun Function functions and ODE solvers.

    Sparfun Sparse matrices.

    Interfaa de aplicaii program a MATLAB-ului (API) este o bibliotec care permitescrierea de programe n C sau Fortran care interacioneaz cu MATLAB-ul. Include facilitipentru apelarea rutinelor din MATLAB, apelarea MATLAB-ului ca main de calcul, scrierea icitirea fiierelor de tip .MAT .

    Pachetul SIMULINK

    SIMULINK este un pachet software ataat MATLAB-ului i reprezint un sisteminteractiv pentru simularea dinamicii sistemelor neliniare (bineneles i a celor liniare). Esteconceput sub forma unei interfee grafice care permite crearea unui model prin trasareaschemei bloc a sistemului i apoi simularea dinamicii sistemului. SIMULINK poate lucra cu sisteme liniare, neliniare, continue, discrete,

    multivariabile etc.

    2

  • 8/7/2019 APLICAtii MATLAB

    3/97

    SIMULINK bebeficiaz de aa-numitele Blockset-uri care sunt de fapt bibliotecisuplimentare care conin aplicaii specializate din domenii cum ar fi: comunicaii, procesareasemnalelor etc. Real-time Workshop este un program foarte important care permite generarea unuicod C pentru schemele bloc create n SIMULINK i prin urmare permite rularea de aplicaiin timp real de o mare diversitate.

    Toolbox-urile MATLABToolbox-urile reprezint o familie de aplicaii care permit nvarea i aplicarea tehnologiilor

    specializate din diverse domenii. Aceste toolbox-uri sunt colecii de funcii MATLAB (functions)(M-files) care extind mediul MATLAB pentru rezolvarea unor clase particulare de probleme.Cteva din cele mai utilizate aplicaii sunt prezentate n figura urmtoare.

    2. FUNDAMENTELE PROGRAMRII N MATLAB

    3

  • 8/7/2019 APLICAtii MATLAB

    4/97

    2.1. Expresii fundamentaleMATLAB-ul lucreaz cu expresii matematice ca i celelalte limbaje de programare, dar spre

    deosebire de majoritatea acestor limbaje, aceste expresii implic la scar larg lucrul cu matrici.Expresiile sunt alctuite cu ajutorul urmtoarelor tipuri: Variabile Numere Operatori Funcii

    Variabile MATLAB-ul nu necesit declararea dimensiunii variabilelor, deoarece la ntlnireaunui nou nume de variabil genereaz automat variabila respectiv i aloc spaiul necesarde memorie. Numele unei variabile este o liter, urmat de un numr orict de mare de litere, cifresau simboluri. Din acest numr orict de mare sunt oprite primele 31 de caractere. MATLAB-ul este case sensitive - face distincie ntre literele mici i cele mari. Exemplu:

    a = 30

    creeaz o matrice 1 x 1 cu numele a i stocheaz valoarea acesteia 30 ntr-o singur locaiecorespunztoare singurului element al matricei.

    Numere MATLAB-ul utilizeaz notaia zecimal, cu punct zecimal opional i cu semn + sau-. Se utilizeaz i notaia tiinific cu litera e pentru a specifica o putere a lui 10.Reprezentarea numerelor imaginare este realizat cu litera i sau j ca sufix. Exemple:

    3 -99 0.0001

    9.6397238 1.60210e-20 6.02252e231i -3.14159j 3e5i

    Toate numerele sunt stocate intern utiliznd formatul long specificat de standardulIEEE n virgul mobil (precizie de 16 zecimale semnificative n domeniul 10-308 la 10+308).

    OperatoriExpresiile utilizeaz operatori aritmetici uzuali:

    + Adunare

    - Scdere

    * Multiplicare

    / mprire

    \ mprire la stnga

    ^ Ridicarea la o putere

    ' Transpusa complex conjugat

    (

    )

    Operatorul de specificare a

    ordinii de evaluare

    4

  • 8/7/2019 APLICAtii MATLAB

    5/97

    FunciiMATLAB-ul furnizeaz un mare numr de funcii matematice elementare standard (abs,

    sqrt, exp, sin ).

    Exist i funcii matematice avansate (funcii Bessel, gama etc.), multe dintre acestea acceptndargumente complexe.

    Pentru vizualizarea funciilor elementare se poate tasta:

    help elfun

    Pentru a vedea lista funciilor avansate se poate tasta:

    help specfun help elmat

    O parte din funcii (cum ar fi sqrt,sin)sunt de tipbuilt-in, adic sunt o parte a nucleuluiMATLAB, au o mare eficien, dar detaliile constructive nu sunt accesibile utilizatorului.

    Alte funcii sunt implementate ca fiiere MATLAB (M-files) i pot fi chiar modificate. Cteva funcii furnizeaz valorile unor constante universale:

    pi 3.14159265

    I Imaginary unit, -1

    J Same as I

    Eps Floating-point relative precision, 2-52

    Realmin Smallest floating-point number, 2-1022

    Realmax Largest floating-point number, 21023

    Inf InfinityNaN Not-a-number

    Numele funciilor nu sunt rezervate i deci este posibil suprascrierea lor.Exemplu:eps = 1.e-6Funcia original este reconstituit prin comanda: clear eps

    ExpresiiExemple de expresii i rezultatele corespunztoare ale evalurii acestor expresii:

    rho = (1+sqrt(5))/2rho =

    1.6180

    a = abs(3+4i)a =

    5

    z = sqrt(besselk(4/3,rho-i))z =

    0.3730+ 0.3214i

    huge = exp(log(realmax))

    huge =1.7977e+308

    toobig = pi*huge

    5

  • 8/7/2019 APLICAtii MATLAB

    6/97

    toobig =Inf

    2.2. Help on-line, formatul datelor, opiuni de salvareHelp on-linePentru rularea MATLAB pe un PC trebuie pur i simplu executat un dublu click cu mouse-ul

    pe icon-ul MATLAB. Dac sistemul de operare nu este de tip Windows (este de tip UNIX) trebuie

    tastat matlab dup prompter-ul sistemului de operare.o Limbajul MATLAB este mult mai simplu de nvat dac se renun la inspectarea arid a

    listelor cu variabile, funcii i operatori i se utilizeaz n schimb comenzile help,helpdesk, demo tastate direct de la prompterul MATLAB.

    o Pentru aflarea tuturor informaiilor utile despre o comand sau o funcie se tasteaz helpurmat de numele comenzii sau funciei respective.

    o Pachetul MATLAB dispune de asemenea de informaii complete despre utilizare sub formaunei documentaii tip .pdf.

    o n cazuri particulare se poate apela la INTERNET, existnd o legtur la pagina Web afirmei productoare.

    o Alte comenzi utile pentru aflarea de informaii sunt: helpwin,lookfor, help help.

    Exemple sugestive de utilizare a comenzii help:

    help sin

    SIN Sine.SIN(X) is the sine of the elements of X.

    Overloaded methodshelp sym/sin.m

    help exp

    EXP Exponential.EXP(X) is the exponential of the elements of X, e

    to the X.For complex Z=X+i*Y, EXP(Z) =

    EXP(X)*(COS(Y)+i*SIN(Y)).

    See also LOG, LOG10, EXPM, EXPINT.

    Overloaded methodshelp sym/exp.mhelp demtseries/exp.m

    help plot

    PLOT Linear plot.

    PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then thevector is plotted versus the rows or columns of the matrix, whichever line up.If X is a scalar and Y is a vector, length(Y) disconnected points are plotted.

    PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y)is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginarypart is ignored.

    Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S)where S is a character string made from one element from any or all thefollowing 3 colunms:

    y yellow . point - solidm magenta o circle : dottedc cyan x x-mark -. dashdot

    6

  • 8/7/2019 APLICAtii MATLAB

    7/97

    r red + plus -- dashedg green * starb blue s squarew white d diamondk black v triangle (down)

    ^ triangle (up)< triangle (left)> triangle (right)p pentagramh hexagram

    For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each

    data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does notdraw any line.

    PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the(X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's arestrings.

    For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solidyellow line interpolating green circles at the data points.

    The PLOT command, if no color is specified, makes automatic use of thecolors specified by the axes ColorOrder property. The default ColorOrder islisted in the table above for color systems where the default is yellow for oneline, and for multiple lines, to cycle through the first six colors in thetable. For monochrome systems, PLOT cycles over the axes LineStyleOrderproperty.PLOT returns a column vector of handles to LINE objects, one handle per line.

    The X,Y pairs, or X,Y,S triples, can be followed by parameter/value pairs tospecify additional properties of the lines.

    See also SEMILOGX, SEMILOGY, LOGLOG, GRID, CLF, CLC, TITLE, XLABEL, YLABEL,AXIS, AXES, HOLD, COLORDEF, LEGEND, and SUBPLOT.

    Formatul datelorMATLAB-ul afieaz numerele cu 5 zecimale (setare implicit). Aceast setare se poate

    modifica cu ajutorul comenzii format:FORMAT Set output format.

    All computations in MATLAB are done in double precision.FORMAT may be used to switch between different outputdisplay formats as follows:FORMAT Default. Same as SHORT.FORMAT SHORT Scaled fixed point format with 5 digits.FORMAT LONG Scaled fixed point format with 15 digits.FORMAT SHORT E Floating point format with 5 digits.FORMAT LONG E Floating point format with 15 digits.FORMAT SHORT G Best of fixed or floating point format with

    5 digits.FORMAT LONG G Best of fixed or floating point format with

    15 digits.FORMAT HEX Hexadecimal format.FORMAT + The symbols +, - and blank are printed

    for positive, negative and zero elements.Imaginary parts are ignored.

    FORMAT BANK Fixed format for dollars and cents.FORMAT RAT Approximation by ratio of small integers.Spacing:FORMAT COMPACT Suppress extra line-feeds.FORMAT LOOSE Puts the extra line-feeds back in.

    Exemple:

    c=1.333456789233c =

    1.3335

    7

  • 8/7/2019 APLICAtii MATLAB

    8/97

    format long cc =

    1.33345678923300

    format short e cc =

    1.3335e+000 format long e cc =

    1.333456789233000e+000

    format cc =

    1.3335

    Opiuni de salvare

    Pentru salvarea variabilelor curente cu care se lucreaz n MATLAB la ncheierea uneisesiuni de lucru se poate utiliza comanda save.

    Aceast comand va salva toate variabilele curente generate de ctre utilizator ntr-unfiier numit matlab.mat . Dac se dorete se poate da un nume fiierului de date n care sesalveaz variabilele.

    Exemplu:

    save date c determ A

    realizeaz salvarea datelor c, determ i A ntr-un fiierdate.mat.

    Pentru restituirea variabilelor ntr-o sesiune de lucru ulterioar se folosete comandaload. Exemplu:

    load date

    Dac se dorete aflarea variabilelor curente se pot utiliza comenzile who,whos:

    whoYour variables are:

    A c determ

    whosName Size Bytes Class

    A 2x2 32 double arrayc 1x1 8 double arraydeterm 1x1 8 double array

    Grand total is 6 elements using 48 bytes

    Pentru tergerea tuturor variabilelor curente din memoria de lucru se poate utilizacomanda clear.

    2.3. Crearea fiierelor MATLAB (.m files)

    Deoarece este mult mai comod i util dect introducerea comenzilor linie dup linie laprompterul MATLAB, se lucreaz cu fiiere text care conin aceste linii program cu comenzilenecesare.

    8

  • 8/7/2019 APLICAtii MATLAB

    9/97

    Aceste fiiere conin cod n limbajul MATLAB i sunt denumite .m files (sau M-files).Fiierele se creeaz utiliznd un editor de text i apoi se utilizeaz ca o comand MATLABobinuit.

    Sunt dou tipuri de fiiere .m:

    Fiiere Script, care nu accept argumente de intrare i nu returneaz argumente de ieire.Aceste fiiere opereaz cu datele din spaiul de lucru.

    Rutine (funcii), care accept argumente de intrare i returneaz argumente de ieire.Variabilele utilizate sunt variabile locale (interne) ale funciei.

    Pentru a vedea coninutul unui fiier MATLAB, de exemplu evolutie_studii.m, se folosetecomanda:

    type evolutie_studii

    Fiiere Script

    Atunci cnd se apeleaz la un fiier script, MATLAB-ul execut comenzile gsite n fiierulrespectiv. Fiierele script pot lucra cu date din spaiul de lucru (workspace) sau pot crea date noi cucare opereaz. Script-urile nu furnizeaz argumente de ieire, iar variabilele create rmn n

    workspace, pentru a fi eventual folosite n calculele ulterioare.Fiierele script pot furniza ieiri grafice folosind funcii cum ar fi plot,bar.Exemplu de fiier script: magicrank.m, cu urmtoarele comenzi MATLAB:

    % Investigate the rank of magic squaresr = zeros(1,32);for n = 3:32

    r(n) = rank(magic(n));endrbar(r)

    La tastarea numelui fiierului script (fr extensia .m):

    magicrank

    MATLAB-ul execut comenzile, calculeaz rangul unor matrici (matricile magice), i traseazgraficul cu rezultatele calculului. Dup ce se termin execuia fiierului, variabilele n i r rmn nspaiul de lucru.

    Graficul rezultat este prezentat n continuare:

    9

  • 8/7/2019 APLICAtii MATLAB

    10/97

    Funcii (rutine)

    Aceste fiiere accept argumente de intrare i furnizeaz argumente de ieire. Numele fiieruluiMATLAB (M-file) i cel al funciei (subrutinei) respective trebuie s fie identice. Funciile(subrutinele) lucreaz cu variabile proprii separate de spaiul de lucru uzual al MATLAB-ului.

    Exemplu: funcia rank. Fiierul M-file rank.m este disponibil n directorul

    toolbox/matlab/matfunSe poate vizualiza fiierul cu comanda: type rank

    function r = rank(A,tol)% RANK Matrix rank.% RANK(A) provides an estimate of the number of% linearly independent rows or columns of a matrix A% RANK(A,tol) is the number of singular values of A% that are larger than tol.% RANK(A) uses the default% tol = max(size(A)) * norm(A) * eps.

    s = svd(A);

    if nargin==1tol = max(size(A)) * max(s) * eps;

    endr = sum(s > tol);

    Prima linie a unei funcii M-file ncepe cu cuvntul cheie function. Aceast linie d numelefunciei, ordinea i numrul argumentelor.

    Liniile urmtoare (care ncep cu caracterul %) sunt linii de comentariu, care de fapt sunt iliniile afiate atunci cnd se apeleaz la comanda

    help rank

    Restul liniilor sunt executabile. Variabila s, ca i r, A, tol sunt variabile locale alefunciei i sunt separate de variabilele din workspace.

    Funcia rank poate fi utilizat n diferite moduri: rank(A) r = rank(A) r = rank(A,1.e-6)

    Variabile globale

    Dac se dorete ca mai multe astfel de subrutine s utilizeze o anume variabil comun, sedeclar variabila respectiv ca global utiliznd comanda global n toate funciile respective.

    Exemplu: fiierul falling.m:function h = falling(t)

    global GRAVITYh = 1/2*GRAVITY*t.^2;

    Se introduc apoi n mod interactiv liniile: global GRAVITY GRAVITY = 32; y = falling((0:.1:5)');

    Funcia eval

    Funcia eval lucreaz cu variabil text pentru implementarea unei faciliti puternice de tipmacro text.

    Expresia

    eval(s)folosete interpreter-ul MATLAB pentru evaluarea expresiei sau execuia declaraiei din irul decaractere s.

    10

  • 8/7/2019 APLICAtii MATLAB

    11/97

    Vectorizarea

    Pentru a obine o vitez de calcul mare, este foarte important aa-numita vectorizare aalgoritmilor n fiierele MATLAB. Acolo unde alte limbaje folosesc bucle de tip for sau DO,MATLAB-ul poate utiliza operaii matriceale sau vectoriale.

    Un exemplu simplu este urmtorul:x = 0;

    for k = 1:1001y(k) = log10(x);x = x + .01;

    end

    Versiunea vectorizat a aceluiai program estex = 0:.01:10;y = log10(x);

    Programatorii MATLAB spun uneori:"Viaa este prea scurt pentru a i-o petrece scriind bucle!"

    Atunci cnd nu se poate elimina complet folosirea unei bucle se utilizeaz procedura deprealocare.

    Funcii de funcii

    n MATLAB exist o clas de funcii care lucreaz cu funcii neliniare ca argument. Funciile defuncii includ:

    Gsirea zerourilor

    Optimizare

    Integrare numeric

    Ecuaii difereniale ordinare

    MATLAB-ul reprezint funcia neliniar ca o funcie M-file care poate fi ulterior utilizat caargument de alte funcii MATLAB.

    Exemplu:

    Urmtorul fiier creeaz o funcie neliniar:function y = humps(x)y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;

    Aceast funcie poate fi evaluat pentru un set de puncte n intervalul 0 x 1 cu programul:x = 0:.002:1;y = humps(x);

    i apoi se poate reprezenta grafic funcia cu comandaplot(x,y)

    Graficul arat c funcia are un minim local la aproximativ x = 0.6. Dac de exemplu utilizmfuncia fmins putem gsi imediat valoarea exact a lui x . Primul argument al funciei fmins estechiar numele funciei pentru care calculm minimul (al doilea parametru este o aproximare grosiera localizrii minimului).

    p = fmins('humps',.5)p =

    0.6370

    Se poate acum evalua valoarea funciei n punctul de minim local: humps(p)

    ans =

    11

  • 8/7/2019 APLICAtii MATLAB

    12/97

    11.2528

    2.4. Matrici, vectori i polinoamePentru a lucra uor i bine cu limbajul MATLAB trebuie n primul rnd s se nvee

    manipularea matricilor. n MATLAB, o matrice este un tablou dreptunghiular de numere. Scalariide exemplu sunt matrici 1 x 1, iar matricile cu o singur linie sau coloan sunt de fapt vectori.

    Un exemplu celebru de matrice apare n gravura renascentist Melancholia realizat de mareleartist i matematician amator Albrecht Drer. Gravura este ncrcat de simbolism matematic i la oatent observare a acesteia se poate distinge n colul din dreapta sus o matrice.

    Matricea respectiv este cunoscut sub numele de ptrat magic i n timpul lui Drer seconsidera c are proprieti magice.

    12

  • 8/7/2019 APLICAtii MATLAB

    13/97

    Introducerea matricilor

    Matricile se pot introduce n mai multe moduri.

    Introducerea unei liste explicite cu elementele matricei.

    ncrcarea unor date din fiere externe de date.

    Generarea de matrici utiliznd funcii built-in.

    Crearea de matrici n fiierele M-files.

    Vom introduce matricea lui Drer mai nti ca o list de elemente.Trebuie respectate cteva convenii simple:

    Elementele unei linii sunt separate prin virgule sau spaii.

    Sfritul unei linii se marcheaz cu punct i virgul.

    Lista de elemente care formeaz matricea se delimiteaz cu paranteze drepte:

    [ ]

    Pentru introducerea matricii lui Drer tastm:

    A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

    MATLAB-ul va afia matricea:A =

    16 3 2 135 10 11 89 6 7 124 15 14 1

    O dat introdus, matricea este memorat n workspace i poate fi apelat simplu, ca A.S vedem acum: de ce este magic?

    sum, transpose, diag

    Caracterul magic deriv din faptul c prin efectuarea unor operaii asupra elementelor matricirezult numere interesante i surprinztoare.

    Dac de exemplu nsumm elementele pe orice linie sau coloan sau de pe cele dou diagonale,vom obine acelai numr.

    S verificm acest lucru cu MATLAB-ul. Suma elementelor de pe cele 4 coloane se calculeazrapid cu:

    sum(A)

    ans =34 34 34 34

    Pentru calcularea sumelor pe linii, efectum nti transpunerea matricii i apoi aplic din noucomanda sum.

    Transpusa se calculeaz cu: A'ans =

    16 5 9 43 10 6 152 11 7 1413 8 12 1

    i apoi sum(A')'ans =

    34

    13

  • 8/7/2019 APLICAtii MATLAB

    14/97

    343434

    Suma elementelor de pe diagonal se calculeaz cu tot cu funcia sum, dar dup ce n prealabilvom sorta cu funcia diag elementele de pe diagonala principal:

    diag(A)ans =

    161071

    sum(diag(A))ans =

    34

    Un anume element al matricii, de exemplu elementul din linia i coloana j se noteaz A(i,j).Prin urmare o alt cale (mai puin rapid) de a calcula suma de pe patra coloan de exemplu

    este urmtoarea:

    A(1,4) + A(2,4) + A(3,4) + A(4,4)ans =34

    Dac specificm un element care nu exist n matrice, primim un mesaj de eroare:

    t = A(4,5)Index exceeds matrix dimensions.

    Operatorul :

    Operatorul : este foarte important. De exemplu, expresia 1:10

    este un vector linieans =1 2 3 4 5 6 7 8 9 10

    Alte exemple:

    100:-7:50ans =

    100 93 86 79 72 65 58 51

    0:pi/4:pians =

    0 0.7854 1.5708 2.3562 3.1416

    ExpresiaA(1:k,j)Se refer la primele k elemente ale coloanei j a lui A.

    Dac este utilizat n paranteze operatorul : atunci nseamn c ne referim la toate elementeleunei linii sau coloane

    sum(A(:,3))

    calculeaz suma elementelor din coloana a treia a lui A:ans =

    34

    O alt proprietate interesant a ptratului magic este c suma magic 34 este obinut i prin

    nsumarea elementelor matricii i prin mprirea la dimensiunea matricii (4): sum(1:16)/4ans =

    34

    14

  • 8/7/2019 APLICAtii MATLAB

    15/97

    Observaie: suma magic pentru orice ptrat magic n x n este (n3 + n)/2 (se poate calcula cuajutorul Symbolic Math Toolbox).

    Funciamagic

    MATLAB-ul are o funcie built-in care creeaz ptrate magice de orice dimensiune (funcie pecare deja am utilizat-o):

    B = magic(4)B =

    16 2 3 135 11 10 89 7 6 124 14 15 1

    Aceast matrice este aproape identic cu matricea lui Drer singura diferen fiind c cele doucoloane din mijloc sunt schimbate ntre ele. Pentru obinerea din B a matricii lui Drer se poateutiliza urmtoarea comand MATLAB:

    A = B(:,[1 3 2 4])A =

    16 3 2 135 10 11 89 6 7 124 15 14 1

    Polinoame

    Polinoamele sunt descrise n MATLAB prin vectori linie ale cror elemente sunt defapt coeficienii polinoamelor n ordinea descresctoare a puterilor.

    Exemplu: polinomul p(x)=x3+5x+6 este reprezentat n MATLAB astfel:

    p = [1 0 5 6]

    Un polinom poate fi evaluat pentru o valoare a lui x cu ajutorul funciei polyval:

    polyval(p,1)ans=

    12

    n exemplul de mai sus este evaluat polinomul p n punctul x =1.

    Se pot afla cu uurin rdcinile polinomului folosind funcia roots:

    r=roots(p)r =

    0.5000 + 2.3979i

    0.5000 - 2.3979i-1.0000

    Exist numeroase alte funcii i comenzi care se ocup cu operaii asuprapolinoamelor, funcii care vor fi abordate ntr-un capitol special. Dintre acestea amintimcomanda care permite nmulirea a dou polinoame, i anume conv:

    p1=[1 3 5]p1 =

    1 3 5

    p2=[2 0 1 0 5]p2 =

    2 0 1 0 5

    p3=conv(p1,p2)p3 =

    2 6 11 3 10 15 25

    15

  • 8/7/2019 APLICAtii MATLAB

    16/97

    2.5. Operaiuni elementare cu matrici i funcii

    MATLAB-ul opereaz cu matricile cu aceeai uurin cu care lucreaz cu scalarii. Pentruadunarea a dou matrici de exemplu se folosete pur i simplu semnul + ca la o adunare obinuit.Bineneles c matricile trebuie s aib aceleai dimensiuni pentru a putea fi adunate.

    Exemplu:

    A=[2 3;15 -3]A =2 3

    15 -3

    B=[11 -21; 12 4]B =

    11 -2112 4

    C=A+BC =

    13 -1827 1

    Pentru nmulirea a dou matrici se folosete operatorul * , valabil de altfel i pentru operaiilecu scalari. Exemplu:

    D=A*BD =

    58 -30129 -327

    Dac dimensiunile matricilor care se nmulesc nu sunt corespunztoare, atunci va fi furnizat unmesaj de eroare:

    E=[1 23; -12 2;1 2]E =

    1 23-12 21 2

    F=A*E??? Error using ==> *Inner matrix dimensions must agree.

    Pentru depanarea programului n cazul unor astfel de greeli se poate utiliza comanda sizecare ne d informaii despre dimensiunile matricilor respective i permite corectarea erorilor:

    size(A)ans =

    2 2

    size(E)ans =3 2

    MATLAB-ul include multe alte funcii care opereaz cu matrici i care vor fi descrise iutilizate intensiv n capitolele urmtoare. Amintim aici cteva: det, inv, rank, eig etc.

    O facilitate interesant a MATLAB-ului este aceea c lucreaz cu matricile cu operatori logicii relaionali ntr-un mod asemntor acestor operaii efectuate cu scalari.

    De exemplu, pentru operaiunea scalar r=17>55r =

    0

    MATLAB-ul rspunde cu r = 0, adicfals. Dac dorim de exemplu s comparm fiecare element almatricii A cu elementul corespunztor din matricea B, procedm asemntor:

    16

  • 8/7/2019 APLICAtii MATLAB

    17/97

    L=A

  • 8/7/2019 APLICAtii MATLAB

    18/97

    Opiunea deStartup

    Descriere

    Automation Starteaz MATLAB-ul ca un server automat, minimizat, fr splash screen.Logfilelogfilename

    Scrie n mod automat ieirile din MATLAB ntr-un log file specificat.

    Minimize Starteaz MATLAB-ul minimizat i fr splash screen-ul MATLAB.Nosplash Starteaz MATLAB-ul fr afiarea splash screen-ului MATLAB.

    r M_file Ruleaz automat fiierul .m specificat imediat dup pornirea MATLAB.ului.

    Regserver Modific regitrii Windows cu intrri adecvate tip ActiveX pentru MATLAB.

    UnregserverModific regitrii Windows pentru tergerea intrrilor ActiveX pentruMATLAB. Se utilizeaz pentru resetarea regitrilor.

    De exemplu, pentru a porni MATALB-ul i a rula imediat n mod automat un fiier cum ar fi de

    exemplu rezultate.m, se poate utiliza urmtoarea cale pentru shortcut:D:\bin\nt\matlab.exe /r rezultate

    Terminarea unei sesiuni de lucru Pentru a prsi mediul MATLAB, se tasteaz quit la prompterul MATLAB.

    n cazul platformelor Windows, se poate termina sesiunea prin selectarea opiunii exit dinmeniul File sau se poate utiliza butonul close vizibil n colul din dreapta sus al ferestrei decomand MATLAB. Comanda quit ruleaz fiierul finish.m, dac acesta exist n cile de cutare aleMATLAB-ului. Se pot include comenzi de tipul save n acest fiier, pentru a salva automat

    variabilele din spaiul de lucru la ncheierea sesiunii. O alt opiune este de a cere afiarea uneicasete de dialog pentru confirmarea terminrii sesiunii. Aceste dou tipuri de opiuni se pot gsin directorul /toolbox/local:

    finishsav.m: permite salvarea variabilelor curente

    finishdlg.m: afieaz o caset de dialog pentru confirmarea opririi

    Fereastra de comand (fereastra principal)Fereastra de comand este fereastra principal prin intermediul creia se poate comunica cu

    MATLAB-ul.

    Pe platformele Windows, MATLAB-ul furnizeaz o fereastr special, cu faciliti de tipWindows.

    Pe sistemele UNIX, fereastra de comand este fereastra terminal din care este lansatMATLAB-ul.

    Interpreterul MATLAB afieaz un prompter (>>) indicnd faptul c este gata s acceptecomenzile utilizatorului. De exemplu, pentru introducerea unei matrici 3 x 3 se poate tasta:

    A = [1 2 3; 4 5 6; 7 8 10]

    i la apsarea tastelorEnter sau Return, MATLAB-ul rspunde cu:A =

    1 2 34 5 67 8 10

    18

  • 8/7/2019 APLICAtii MATLAB

    19/97

    3.2.1. Editarea liniilor de comand n fereastra principalTastele de tip sgeat i tasta Ctrl permit apelarea, editarea i eventual reutilizarea comenzilor

    editate anterior. De exemplu: rho = (1+ sqt(5))/2

    Undefined function or variable 'sqt'.

    Pentru eliminarea greelii de editare a numelui funciei radical (sqrt) nu se mai editeaz din noutoat linia, ci se folosete tasta , apare din nou linia de comand greit i apoi cu tasta sedeplaseaz cursorul pe linie i se repar greeala.

    Lista complet a sgeilor i tastelor care permit controlul asupra operaiunilor cu linia decomand este prezentat n tabelul urmtor:

    Arrow Key Control Key OperationCtrl-p Recallprevious line.

    Ctrl-n Recall next line.

    Ctrl-b Move back one character.Ctrl-f Moveforward one character.

    ctrl-Ctrl-r Move right one word.

    ctrl-Ctrl-l Move left one word.

    home Ctrl-a Move to beginning of line.end Ctrl-e Move to end of line.esc Ctrl-u Clear line.del Ctrl-d Delete character at cursor.backspace Ctrl-h Delete character before cursor.

    Ctrl-k Delete (kill) to end of line.

    tergerea ferestrei de comandPentru tergerea coninutului (afiajul) ferestrei principale se poate folosi comanda clc, care

    ns nu are ca efect tergerea variabilelor curente din spaiul de lucru.

    Controlul afirii paginilor ecran n fereastra de comandPentru a controla afiarea paginilor n fereastra de comand se utilizeaz comanda more.

    Setarea implicit este moreoff. Atunci cnd setm moreon, o pagin ecran este afiat. Apoi se

    poate utiliza:Return To advance to the next lineSpace Bar To advance to the next pageq To stop displaying the output

    ntreruperea unui program care ruleazSe poate ntrerupe un program care ruleaz prin apsarea pe tastele Ctrl-c.

    Pe sistemele Windows se va atepta terminarea execuiei funciilor de tip built-in sau afiierelor de tip MEX-file.

    Pe sistemele UNIX, execuia programului se va ncheia imediat.

    19

  • 8/7/2019 APLICAtii MATLAB

    20/97

    Comanda formatComanda format controleaz formatul numeric al valorilor afiate pe ecran i a fost deja

    discutat ntr-un paragraf anterior. Comanda are efect asupra afirii numerelor, i nu asupramodului intern de reprezentare a acestora.

    Pe sistemele Windows, se poate schimba setarea implicit a formatului prin selectarea meniuluiPreferences din meniul File i selectarea formatului dorit din General.

    Suprimarea afirii rezultatelor unei linii comandDeoarece la apsarea tastelorReturn sau Enter MATLAB-ul afieaz automat rezultatele pe

    ecran, dac ncheiem linia de comand cu punct i virgul, va fi realizat calculul, dar nu va mai fiafiat. Aceast facilitate este important atunci cnd avem de lucrat cu matrici mari sau cu multedate. Exemplu:

    A = magic(100);

    Linii de comand lungiDac o declaraie nu ncape ntr-o linie de comand, se pot utiliza 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;

    Spaiile albe din jurul semnelor =, +, - sunt opionale i pot mbunti citirea liniilor.Maximul numrului de caractere pe o singur linie este de 4096.

    3.2.2. Descrierea ferestrei de comandFereastra de comand permite rularea comenzilor MATLAB, lansarea unor instrumente cum ar

    fi Editor/Debugger i permite startarea toolbox-urilor.

    Toolbar (bara de instrumente)

    Toolbar-ul din fereastra de comand permite accesul la operaii simple:

    20

  • 8/7/2019 APLICAtii MATLAB

    21/97

    Meniuri

    Meniurile fereastrei de comand furnizeaz accesul la operaii care nu sunt accesibile dintoolbar.

    PreferineSunt utilizate pentru controlarea operaiilor i a modului de prezentare din fereastra de comand.

    Pentru aceasta se selecteaz Preferences din meniul File, iar dup apariia casetei de dialogPreferences se pot seta preferinele pentru General, Command Window Font i CopyingOptions.

    21

  • 8/7/2019 APLICAtii MATLAB

    22/97

    General Preferences:

    Numeric Format Specific formatul numeric implicit.

    Editor Preference Permite folosirea editorului MATLAB sau specificarea altui editor.

    Help Directory Specific directorul n care se afl fiierele de tip help.

    Echo On Seteaz facilitatea de afiare a liniilor program n timp ce un program MATLABeste rulat.

    Show Toolbar Arat sau ascunde toolbar-ul.

    Enable Graphical Debugging Permite depanarea (Debugger) n mod automat la fiecarebreakpoint.

    Command Window Font:Specific caracteristicile fontului pentru textul afiat n fereastra de comand.

    Copying Options:Specific opiunile utilizate la copierea unor obiecte din MATLAB n clipboard pentru rescrierea nalte aplicaii.

    Spaiul de lucru al MATLAB-ului (workspace)

    Spaiul de lucru conine un set de variabie (numite tablouri sau matrice) care pot fi manevratedin linia de comand. Se pot folosi comenzile who i whos (deja prezentate) pentru a vedea caresunt variabilele curente din workspace. Pentru tergerea variabilelor din workspace se utilizeazcomanda clear.

    ncrcarea i salvarea din workspaceComenzile save i load descrise ntr-un subcapitol anterior au rolul de a salva variabilele din

    spaiul de lucru i respectiv de a le rencrca ntr-o sesiune ulterioar. Aceste comenzi se pot folosii pentru a importa i exporta date.

    Pe platformele Windows, operaiile save, load sunt disponibile i prin selectareaopiunilorSave Workspace As, respectiv Load Workspace din meniul File.

    Citirea sau scrierea unor fiiere .mat din programe externe n C sau Fortran se poate face cuInterfaa de Aplicaii Program (API).

    Formatul n care comanda save stocheaz datele poate fi controlat prin adugarea unor flag-urin lista de nume de fiiere sau variabile:

    -mat Utilizeaz formatul binar tip .MAT (implicit).

    -ascii Utilizeaz formatul ASCII pe 8 digii.

    -ascii -double Utilizeaz formatul ASCII pe 16 digii.

    -ascii -double tabs Delimiteaz elementele tablourilor cu tab-uri.

    -v4 Salveaz ntr-un format pe care versiunea 4 MATLAB lpoate deschide.

    -append Adaug datele ntr-un fiier .MAT existent.

    22

  • 8/7/2019 APLICAtii MATLAB

    23/97

    Observaie: atunci cnd se salveaz coninutul spaiului de lucru n format ASCII trebuie salvatcte o variabil pentru a permite reconstituirea ulterioar a acesteia.

    ncrcarea unor fiiere cu date ASCIIComanda load permite importul de fiiere de date ASCII. Exemplu:

    load diverse.dat

    creeaz o variabil cu numele diverse n workspace. Dac datele ASCII au m linii cu n valori pefiecare linie, rezultatul va fi o matrice numeric m x n.

    Nume de fiiere ca iruri de caractereDac 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. Deexemplu

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

    au acelai efect ca save myfile VAR1 VAR2 load myfile

    Pentru ncrcarea sau salvarea mai multor fiiere cu acelai prefix i cu sufixe numere ntregisuccesive se poate utiliza o bucl. Exemplu:

    file = 'data';for i = 1:10

    j = i.^2;save([file int2str(i)],'j');

    end

    WildcardsComenzile 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 WorkspaceBrowser-ul Workspace permite vizualizarea coninutului spaiului de lucru curent (este de fapt

    varianta grafic a comenzii whos). Pentru a deschide acest instrument, se selecteaz ShowWorkspace din meniul File i apoi se face click din mouse pe tasta Workspace Browser dintoolbar.

    23

  • 8/7/2019 APLICAtii MATLAB

    24/97

    3.2.3. Ci de cutareMATLAB-ul utilizeaz o cale de cutare (search path) pentru a gsi fiierele .m . Aceste fiiere

    sunt organizate n directoare, din care unele sunt furnizate de MATLAB i altele sunt disponibileseparat ca toolbox-uri.

    Dac de exemplu tastm numele fis la prompterul MATLAB, interpreterul MATLAB va faceurmtoarea cutare:

    1. Caut pe fis ca pe o variabil.

    2. Verific dac fis este o funcie tip buit-in.

    3. Caut n directorul curent fiierul numit fis.m.

    4. Caut n directoarele aflate n calea de cutare fiierul fis.m.

    Schimbarea cii de cutareCalea de cutare poate fi afiat sau schimbat folosind funciile path, addpath, rmpath:

    Path determin rentoarcerea la calea curent. path(s), unde s este un ir de caractere, seteaz calea la s.

    addpath /home/lib i path(path,'/home/lib') adaug noi directoare la calea decutare.

    rmpath /home/lib terge calea /home/lib.

    Calea de cutare implicit este definit n fiierul pathdef.m n directorul local.

    Fiiere pe calea de cutare

    Pentru a afia calea de cutare se poate folosi path. Dac dorim s vedem ce fiiere MATLABsunt ntr-un director se utilizeaz comanda what. Exemplu: what matlab/elfun

    Pentru a vedea coninutul unui fiier se folosete comanda type (deja descris ntr-un paragrafanterior). Exemplu:

    type rank

    Pentru editarea unui fiier M-file se poate utiliza edit. Exemplu: edit rank

    Path BrowserMATLAB-ul furnizeaz i un browser al cii de cutare (Path Browser) cu o interfa grafic

    pentru vizualizarea i schimbarea cii de cutare. Pentru startarea acestui browser se utilizeazpathtool, sau se selecteaz Set Path din meniul File, sau se faceclick pe butonul Path Browserdin toolbar.

    24

  • 8/7/2019 APLICAtii MATLAB

    25/97

    Meniurile din Path Browser pot fi folosite pentru:

    Adugarea unui director pe calea de cutare.

    tergerea (ndeprtarea) unui director din cale.

    Salvarea setrilor n fiierul pathdef.m.

    Restabilirea setrilor implicite.

    Directorul curent

    MATLAB-ul menine un director curent pentru lucrul cu fiiere de tip .m i .mat.

    Pe platformele Windows, directorul curent iniial este specificat n shortcut-ul utilizat pentrupornirea MATLAB-ului.

    Pentru schimbarea setrilor implicite se poate face click cu butonul din dreapta al mouse-ului ise selecteaz meniul Properties.

    Deschiderea fiierelor n MATLABSe pot deschide fiiere n funcie de extensiile lor prin folosirea funciei open, care este o

    funcie extensibil de ctre utilizator. Se pot include i alte tipuri de fiiere n afara fiierelorMATLAB standard:

    Nume Aciune

    Figure file (*.fig) Deschide o figur ntr-o fereastr tip figur.

    M-file (name.m) Deschide fiierul name de tip .m n Editor.

    Model (name.mdl) Deschide modelul name n Simulink.

    P-file (name.p) Deschide fiierul corespunztor name.m, dac exist, n Editor.

    25

  • 8/7/2019 APLICAtii MATLAB

    26/97

    Variable Deschide tabloul name n Array Editor (tabloul trebuie s fie numeric);open apeleaz openvar.

    Alte extensii(name.custom)

    Deschide name.custom prin apelarea funciei helperopencustom,unde opencustom este o funcie definit de utilizator.

    3.3. Fereastra grafic (figure) MATLAB-ul direcioneaz ieirile grafice spre o fereastr distinct de fereastra decomand. Aceast fereastr grafic este denumitfigur(figure). Funciile grafice creeaz n mod automat o nou fereastr grafic dac nu exist unacurent. Dac exist o astfel de fereastr, MATLAB-ul o va utiliza. Dac exist mai multe ferestre de tip figur, atunci una dintre ele este asignat ca fiindfereastra curent (n general este ultima fereastr figur utilizat).

    Funcia figure genereaz ferestre grafice. De exemplu,

    figure

    genereaz o nou fereastr i o face fereastra curent.O funcie grafic, cum ar fi funcia plot, genereaz un grafic n fereastra de tip figur. De

    exemplu,

    t = 0:pi/100:2*pi;y = sin(t);plot(t,y)

    traseaz graficul funciei sinus de la 0 la 2 n fereastra curent de tip figur, dac aceasta exist,iar dac nu ntr-una nou creat.

    Prelucrarea graficelor cu Plot EditorDup generarea unui grafic (plot), se pot face schimbri i prelucrri ale graficului cu interfaagrafic Plot Editor. Figura urmtoare ilustreaz principalele faciliti ale ferestrei grafice i aleinterfeei Plot Editor.

    26

  • 8/7/2019 APLICAtii MATLAB

    27/97

    Pentru salvarea unei figuri se selecteaz Save din meniul File. Pentru salvarea ntr-un formatdiferit, cum ar fi TIFF, necesar utilizrii n alte aplicaii se selecteaz Export din meniul File.

    3.4. Importul i exportul de dateSunt multe posibiliti de a realiza importul i exportul de date ntre MATLAB i alte aplicaii.

    n majoritatea cazurilor se pot utiliza facilitile MATLAB de a citi sau scrie fiiere (pentru aplicaii

    complicate trebuie scrise programe n C sau Fortran).Importul de daten tabelul urmtor sunt prezentate cteva metode de import date:

    Metoda Cnd trebuie utilizat metoda. Mod de utilizare

    Introducerea uneiliste explicite deelemente

    Atunci cnd cantitatea de date este mic. Se tasteaz pur i simplu dateleutiliznd parantezele drepte ([]).

    Crearea de date ntr-

    un fiier .m

    Se utilizeaz un editor de text pentru generarea unui fiier .m.

    Metoda este util atunci cnd datele nu sunt deja n form digital. Estentr-un fel similar cu prima metod.

    ncrcarea datelordintr-un fiier ASCII

    Fiierele ASCII stocheaz datele pe linii cu un numr egal de elementespaiate prin blanc-uri, linii ncheiate cu Enter. Aceste fiiere se pot edita cuun editor de texte obinuit. Datele sunt introduse n MATLAB cu funciaload. Se poate utiliza dlmread dac este necesar specificarea altordelimitatori.

    Citirea datelor cufopen, fread i cufunciile de

    intrare/ieire

    Metoda este folosit cnd se ncarc date de la alte aplicaii, date care aupropriul lor format.

    Funcii specializatede citire a fiierelor

    Dlmread Citete fiiere de date ASCII.

    Textread Citete date de tip caracter sau numerice dintr-un fiier ile convertete n variabile MATLAB.

    Wk1read Citete fiiere de tip (WK1) (tip foaie de lucru)

    Imread Citete din fiiere grafice.

    Auread Citete fiiere de sunet tip (.au).

    Wavread Citete fiiere de sunet Microsoft WAVE (.wav).

    Crearea de fiiere tipMEX pentru citireadatelor

    Este metoda potrivit dac sunt deja disponibile rutine C sau Fortran pentrucitirea datelor din alte aplicaii.

    Dezvoltarea unorprograme n Fortransau C

    Se utilizeaz n cazuri complexe pentru translatarea unor date n format.mat i apoi ncrcarea cu comanda load.

    Exportul datelorn tabelul urmtor sunt prezentate cteva metode de export date:

    Metoda Cnd trebuie utilizat metoda. Mod de utilizare

    27

  • 8/7/2019 APLICAtii MATLAB

    28/97

    Folosirea comenziidiary

    Pentru tablouri de date de mic dimensiune se folosete comanda diarypentru crearea unui fiier de tip jurnal i afiarea variabilelor. Ieirea diaryinclude comenzile MATLAB folosite ntr-o sesiune de lucru.

    Salvarea datelor nformat ASCII

    Se utilizeaz comanda save cu opiunea -ascii. Se poate folosidlmwrite dac este necesar specificarea altor delimitatori.

    Scrierea datelor nformate speciale Se folosesc fwrite i alte funcii I/O de nivel sczut. Este util la scriereadatelor n formate cerute de alte aplicaii.Funcii specializatede scriere afiierelor

    Dlmwrite Scrie fiiere n format ASCII.wk1write Scrie fiiere tip (WK1).Imwrite Scrie imagini pentru fiiere grafice.Auwrite Scrie fiiere de sunet tip (.au).Wavwrite Scrie fiiere de sunet tip Microsoft WAVE (.wav).

    Crearea unor fiieretip MEX pentruscrierea datelor

    Este metoda potrivit dac sunt deja disponibile rutine C sau Fortran pentruscrierea datelor n formate cerute de alte aplicaii.

    Scrierea datelor nfiiere tip .MAT

    Se folosete comanda save i apoi se scrie un program n Fortran sau Cpentru translatarea fiierului .mat n formatul dorit.

    Fiiere de tip text cu delimitatoriFunciile dlmread i dlmwrite amintite mai sus permit citirea i scrierea unor valori

    separate prin delimitatori nt-un fiier de date ASCII. Un delimitatoreste orice caracter care separvalorile.

    Exemplu: considerm un fiierfiz.dat ale crui componente sunt separate prin punct i

    virgul:7.2;8.5;6.2;6.65.4;9.2;8.1;7.2

    Citirea i transcrierea componentelor ntr-un tablou (matrice) A se face astfel:

    A = dlmread('fiz.dat', ';');

    n mod similar se folosete dlmwrite pentru scrierea unui text cu delimitatori ntr-un fiierextern:

    A =1 2 34 5 6

    dlmwrite('myfile',A,';')

    myfile va conine:

    1;2;34;5;6

    Citirea fiierelor cu format uniformFuncia textread citete date de tip caracter sau numerice dintr-un fiier i le transcrie n

    variabile MATLAB folosind specificatorii de conversie care definesc lungimea cmpului de date iformatul acestora. Funcia textread este util pentru fiiere cu format uniform i cunoscut (de

    exemplu cu delimitatori de tip virgul sau tab).Exemplu: fie fiierul mydata.dat :Sally Type1 12.34 45 Yes

    28

  • 8/7/2019 APLICAtii MATLAB

    29/97

    Pentru citirea fiierului mydata.dat ca fiier cu format liber se folosete formatul de conversie%:

    [names,types,x,y,answer]=textread('mydata.dat','%s %s %f %d %s',1)

    unde %s citete un ir de caractere separat prin spaii albe, %f citete o valoare tip floating point, i%d citete un ntreg cu semn.

    MATLAB va rspunde:names =

    'Sally'types =

    'Type1'x =12.34000000000000

    y =45

    answer ='Yes'

    Schimbarea de date ntre platforme (sisteme de operare)n unele situaii este necesar transferul de date i programe ntre utilizatori care lucreaz cusisteme de operare diferite. Aplicaiile MATLAB constau n fiiere .m cu funcii i script-uri ifiiere tip .mat cu date binare. Ambele tipuri de fiiere pot fi transportate direct ntre diferitecomputere:

    Fiierele .m conin text simplu i sunt independente de main.

    Fiierele .mat sunt binare i dependente de main dar pot fi transportate ntre computeredeoarece conin semntura de main n antetul fiierului.

    Pentru utilizarea i transportul aplicaiilor MATLAB pe diverse computere (sisteme de operare)

    trebuie s ne asigurm c fiierele .mat se transmit n binary file mode i fiierele .m nASCII filemode.

    Comanda diary Comanda diary genereaz o copie a sesiunii de lucru MATLAB ntr-un fiier disc

    (fr grafice). Se poate vizauliza i edita textul rezultat cu orice procesor de texte. De exemplu, pentru crearea unui fiier cu numele octomb26.out care conine

    comenzile i ieirile (rspunsurile) MATLAB corespunztoare, trebuie tastat:

    diary octomb26.out

    Pentru oprirea nregistrrii sesiunii se folosete:

    diary off

    Utilizarea memoriei

    MATLAB-ul necesit o zon continu de memorie pentru stocarea datelor din fiecarematrice. De asemenea, imaginile i filmele (animaia) cer o mare cantitate de memorie. n plus, harta de pixeli (pixmap) folosit pentru imagini cere o cantitate de memorie

    proporional cu suprafaa imaginii de pe ecran. O imagine color de 500x500 pixeli cere 1 Mbde memorie. Pentru limitarea memoriei necesare trebuie limitat dimensiunea imaginilor de peecran.

    29

  • 8/7/2019 APLICAtii MATLAB

    30/97

    Rezolvarea erorilor de memorieDac nu exist memorie suficient, n cazul unor matrici de dimensiuni mari este posibil

    apariia unei erori de memorie de tip out of memory. Se poate ncerca o defragmentare amemoriei cu comanda pack.

    Dac astfel de erori out of memory sunt dese se pot ncerca i alte metode:

    n cazul sistemelor Windows se crete memoria virtual folosind System Properties pentruPerformance, instrument accesibil din Control Panel.

    Pentru sisteme UNIX trebuie cerut administratorului de sistem s creasc spaiul swap.

    Administrarea memoriei MATLAB MATLAB-ul utilizeaz funciile C standard malloc i free pentru alocareamemoriei dinamice. Aceste rutine menin de regul o rat relativ lent de utilizare a memorieialocat de sistemul de operare. Pentru MATLAB, malloc i free aloc memoria ntr-un ritmmai rapid. Pe msur ce MATLAB-ul nu mai are nevoie de memorie, malloc i free nureturneaz memoria adiional sistemului de operare (rutinele presupun c dac a fost nevoie de

    o cantitate mare de memorie o dat, atunci este posibil s mai fie nevoie nc o dat). Din acest motiv este posibil ca alte aplicaii care ruleaz s nu poat dispune dememorie, chiar dac MATLAB-ul nu mai are nevoie. Pentru a diponibiliza cantitatea dememorie trebuie terminat sesiunea MATLAB.

    4. EDITORUL/DEBUGGER-UL I PROFILER-UL MATLAB

    4.1. Editorul/Debugger-ul MATLAB

    MATLAB-ul dispune de un editor propriu, editor care este asociat i cu un program dedepanare (debugger). Editorul/debugger-ul ofer posibilitatea de a efectua operaiunile de editare de

    baz precum i accesul la instrumente de depanare a fiierelor .m .Pachetul Editor/Debugger ofer i o interfa grafic uor de utilizat. Pentru lansarea editoruluise tasteaz la prompterul MATLAB comanda edit. Se pot folosi i butoanele/meniurile accesibiledin fereastra de comand.

    30

  • 8/7/2019 APLICAtii MATLAB

    31/97

    Setarea implicit a Editorului

    Facilitile de editare i depanare sunt setate s fie active n mod implicit atunci cndMATLAB-ul este instalat.

    Dac se dorete instalarea altui editor sau nu se dorete apelarea la depanarea n regim grafic sepot dezactiva aceste faciliti prin setarea corespunztoare. De exemplu (n UNIX) se modific~home/.Xdefaults file:

    matlab*builtInEditor: Offmatlab*graphicalDebugger: Off

    Trebuie rulatxrdb -merge ~home/.Xdefaults

    nainte de pornirea MATLAB-ului.

    Debugger-ul MATLAB. Exemple de depanare a fiierelor MATLAB Debugger-ul permite identificarea erorilor de programare. Prin folosirea debugger-ului se

    poate vizualiza coninutul workspace-ului n orice moment n timpul execuiei unei funcii i sepoate executa programul (codul) MATLAB linie cu linie. Pentru folosirea acestui instrument de depanare se poate utiliza interfaa grafic a debugger-ului sau se pot folosi linii de comand.

    Depanarea permite corectarea a dou tipuri de erori: Erori de sintax, cum ar fi scrierea incorect a numelui unei funcii sau omiterea unor

    paranteze. MATLAB-ul detecteaz majoritatea acestor erori i afieaz un mesaj de eroarecare descrie natura erorii i numrul liniei din programul .m n care a aprut eroarearespectiv.

    Erori de rulare (de calcul), care sunt mai mult de natur algoritmic. De exemplu este posibils modificm o alt variabil dect trebuie sau s efectum un calcul incorect. Aceste erorisunt observate atunci cnd fiierul rulat furnizeaz rezultate necorespunztoare.

    n timp ce erorile de sintax se corecteaz realtiv uor pe baza mesajelor de eroare, erorile derulare sunt mai greu de depanat. Se pot utiliza n acest caz mai multe tehnici de depanare:

    Se ndeprteaz delimitatorii de tip punct i virgul de la sfritul liniilor program. Astfel larularea programului vor fi afiate i rezultatele intermediare corespunztoare fiecrei linii.

    Se adaug comanda keyboard n fiierele .m care sunt depanate. Aceast comand opreteexecuia programului respectiv, d controlul la tastatur i d posibilitatea examinrii ischimbrii unor funcii sau variabile. Acest mod de lucru este indicat printr-un prompterspecial: "K>>." Pentru a continua execuia, se tasteaz return i se apas apoi tastaReturn.

    Se folosete Debugger-ul MATLAB.

    Debugger-ul este util deoarece permite accesul la funciile din workspace, examinarea ieventual modificarea coninutului acestora.Debugger-ul permite setarea sau tergerea unor puncte de oprire: breakpoints, care sunt linii

    speciale n programul MATLAB la ntlnirea crora execuia se oprete i sunt posibile operaii deschimbare i de execuie a liniilor de comand una cte una.

    Exemplu de depanarePentru a ilustra procedurile de depanare disponibile (ndeosebi pentru cazul erorilor de rulare)

    vom folosi un exemplu preluat din MATLAB User Guide. Vom scrie un fiier denumitvariance.m care este o funcie avnd ca intrare un vector i ca ieire un scalar. Fiierul apeleazla o alt funcie, numit sqsum, care calculeaz o sum medie ptratic a vectorului de intrare.

    function y = variance(x)mu = sum(x)/length(x);tot = sqsum(x,mu);

    31

  • 8/7/2019 APLICAtii MATLAB

    32/97

    y = tot/(length(x)-1);

    n fiierul sqsum.m se strecoar intenionat o eroare.

    function tot = sqsum(x,mu)tot = 0;for i = 1:length(mu)

    tot = tot + ((x(i)-mu).^2);

    end

    Pentru verificarea corectitudinii calculelor, folosim funcia MATLAB std (calculeaz deviaiastandard) care permite efectuarea unui calcul echivalent.

    Se introduce mai nti un vector de intrare de test: v = [1 2 3 4 5];

    apoi se utilizeaz funcia std: var1 = std(v).^2var1 =

    2.5000

    ncercm funcia variance care apeleaz funcia sqsum (scris eronat): myvar1 = variance(v)myvar1 =

    1

    Rspunsul este greit. Vom ncerca cu debugger-ul s gsim i s corectm greeala.

    Depanarea cu ajutorul interfeei grafice a Debugger-uluiA. Pentru startarea procedurii de depanare: Dac fiierul .m (adic variance.m) a fost creat cu editorul MATLAB i suntem n

    fereastra Editor/Debugger, se continu din acest punct. Dac fiierul a fost creat cu un editor extern, se starteaz Editor/Debugger-ul i apoi se face

    click pe butonul Open M-file dintoolbar.

    Toolbar-ul Editor/Debugger conine o serie butoane descrise n continuare:

    Toolbar

    Scop Descriere ComandEchivalent

    Seteaz/tergeBreakpoint

    Seteaz sau terge un breakpoint pe linia pe care estepoziionat cursorul.

    Dbstop/Dbclear

    terge toate

    Breakpoint-urile

    terge toate breakpoint-urile care sunt setate n mod

    curent.

    Dbclear all

    Step In(Pas n)

    Execut linia curent a fiierului .m i dac linia esteo apelare la alt funcie sare (face un pas) n funciarespectiv.

    Dbstep in

    Single Step(Un singur

    pas)Execut linia curent a fiierului .m . Dbstep

    ContinuContinu execuia fiierului pn la terminare sau

    pn la alt breakpoint.Dbcont

    Sfritdepanare

    Ieirea din starea de depanare.dbquit

    Prin apsarea butonului din dreapta al mouse-ului n fereastra editorului se poate obine unmeniu cu toate aceste opiuni.

    32

  • 8/7/2019 APLICAtii MATLAB

    33/97

    B. Setarea Breakpoint-urilor

    Punctele de oprire (breakpoint-uri) determin oprirea execuiei fiierului la linia specificat ipermit evaluarea i schimbarea variabilelor din workspace nainte de reluarea execuiei. Breakpoint-ul este indicat printr-un semn rou de stop ( ) nainte de linia respectiv.

    Pentru exemplul considerat, la nceputul depanrii nu se tie unde ar putea fi eroarea, ns un loclogic de amplasare a unui breakpoint pentru a face verificri este n linia 4 a funcieivariance.m:

    y = tot/(length(x)-1);

    Pentru setarea breakpointului se poziioneaz cursorul pe linia 4 i se face click pe butonul dintoolbar sau se alege Set Breakpoint din meniul Debug.

    C. Examinarea variabilelor

    Pentru verificarea variabilelor, se execut mai nti funcia din fereastra de comand:variance(v)

    Atunci cnd execuia programului ajunge la breakpoint, o sgeat galben orizontal ( ) araturmtoarea linie care va fi executat. Dac sgeata galben este vertical ( ) atunci aceasta indico pauz la sfritul unui script sau a unei funcii i permite examinarea variabilelor nainte derentoarcerea la funcia principal.

    Acum putem verifica valorile variabilelor mu i tot. Se selecteaz textul care coninevariabilele i se face click din butonul drept al mouse-ului dup care se alege din meniu EvaluateSelection.

    n fereastra de comand va fi afiat att textul selectat ct i rezultatul:K>> mu

    mu =3

    K>> tottot =

    4

    Din analiza acestor valori se observ c eroarea se afl n sqsum.

    D. Schimbarea contextului spaiului de lucru

    Se poate folosi meniul Stack pentru schimbarea contextului spaiului de lucru, adic pentruieirea din funcia variance i vizualizarea coninutului workspace-ului, prin selectarea dinmeniu a opiunii Base Workspace:

    33

  • 8/7/2019 APLICAtii MATLAB

    34/97

    Prin utilizarea comenzii whos sau a Browserului Workspace se vor vizualiza variabilele v imyvar1, ca de altfel i celelalte variabile create. Pentru ntoarcerea la contextul spaiului de lucrulocal al funciei variance se selecteaz Variance din meniu.

    E. Executarea pas cu pas a programului i continuarea execuieiSe terge breakpoint-ul din linia 4 din variance.m prin plasarea cursorului pe linie i

    selectarea opiunii Clear Breakpoint din meniul Debug. Se continu execuia programului cuContinue din meniul Debug.

    Se deschide sqsum.m i se seteaz un breakpoint la linia 4 pentru verificarea buclei i acalculelor. Se ruleaz din nou variance. Execuia se va opri acum la linia 4 din sqsum.

    Se poate acum evalua indicele buclei i:K>> i

    i = 1

    dup care prin selectarea opiunii Single Step din meniul Debug se execut linia urmtoare. Seevalueaz variabila tot:

    K>> tottot =

    4

    Se selecteaz din nou Single Step:for i = 1:length(mu)

    Se observ c bucla este iterat numai pn la lungimea lui mu, care este scalar, i nu pn lalungimea lui x, vectorul de intrare (aceasta este de fapt greeala).

    O dat eroarea gsit se selecteaz Quit Debugging i se termin execuia programului. Seterge breakpoint din sqsum i se pune un breakpoint la linia 4 din variance.m, dup carerulm din nou:

    variance(v)

    34

  • 8/7/2019 APLICAtii MATLAB

    35/97

    La oprirea execuiei se seteaz valoarea lui tot la valoarea corect (10):K>> tot = 10tot =

    10

    Selectm Continue Execution i obinem rezultzatul corect.

    F. Terminarea sesiunii de depanare

    Se selecteaz Exit Editor/Debugger din meniul File i se termin sesiunea de depanare.Pentru corectarea definitiv a erorii se folosete editorul i se ruleaz din nou programul pentru

    o ultim verificare.

    Depanarea din linia de comandFolosirea facilitilor de depanare se poate realiza i direct din linia de comand, prin

    intermediul unui set de comenzi. Aceste comenzi sunt prezentate n forma lor general n tabelulurmtor.Descriere Sintax

    Setarea unui breakpoint. dbstop at line_num infile_name

    tergerea unui breakpoint. dbclear at line_num infile_name

    Stop la atenionare, eroare sau generarea deNaN/Inf.

    dstop if warningerrornaninfinfnan

    Reluarea execuiei. Dbcont

    Listarea apelrii de funcii. Dbstack

    Listarea tuturor breakpoint-urilor. dbstatus file_name

    Executarea a una sau mai multe linii. dbstep nlines

    Listarea fiierelor M-file cu liniile numerotate.dbtype file_name

    Schimbarea contextului spaiului de lucru local(down).

    dbdown

    Schimbarea contextului spaiului de lucru local(up).

    dbup

    Prsirea modului de depanare. dbquit

    Pentru informaii suplimentare privind utilizarea acestor funcii se poate apela la comandahelp urmat de numele comenzii respective.

    Exemplul de depanare a unui fiier cu erori prezentat anterior poate fi reluat, utilizndu-se nlocul interfeei grafice a debugger-ului comenzi corespunztoare n linia de comand.

    4.2. Profiler-ul MATLAB Pentru mbuntirea performanelor fiierelor MATLAB se utilizeaz un instrumentMATLAB numit Profiler. Acest instrument furnizeaz informaii utile privitoare la timpul

    alocat calculelor efectuate de fiecare linie program.

    35

  • 8/7/2019 APLICAtii MATLAB

    36/97

    Cu ajutorul Profiler-ului se msoar modul n care programul consum timp, i omsur este evident mai bun dect ghicitul rutinelor sau funciilor care consum mult timpde calcul.

    Programarea eficient presupune folosirea Profiler-ului pentru determinareastrangulrilor din programul creat i apoi modificarea programului pentru optimizarea

    timpului de calcul. Programele MATLAB au n general o structur multistrat generat de faptul cfunciile utilizate apeleaz deseori alte funcii i aa mai departe. De aceea este important sfie identificate acele funcii consumatoare de timp i nlocuite dac este posibil.

    Profiler-ul permite: Evitarea calculelor inutile. Schimbarea algoritmilor pentru evitarea folosirii unor funcii consumatoare de timp. Evitarea recalculrilor prin stocarea unor rezultate ce pot fi utilizate ulterior.

    Comandaprofile

    Pentru a crea un profil al programului (fiierului) MATLAB se folosete comanda profile pentru a genera i vizualiza statisticile despre programul respectiv. n tabelul urmtor suntprezentate formele posibile ale acestei comenzi.Sintax Opiuni Descriere

    Profile on Starteaz profiler-ul i terge statisticile nregistrate anterior.-detaillevel Specific nivelul funciei analizate.

    -historySpecific secvena exact a apelurilor fcute de funcia care va finregistrat.

    Profilereport

    Suspend activitatea profilerului dup care genereaz un raport nformat HTML pe care l afieaz n browserul Web.

    BasenameSalveaz raportul n fiierul basename din directorul curent.

    Profileplot

    Suspend activitatea profiler-ului dup care afieaz un grafic nfereastra figur cu funciile care consum majoritatea timpului deexecuie.

    Profileresume Restarteaz profiler-ul fr a terge statisticile nregistrate anterior.Profileclear terge statisticile nregistrate.

    Profile off Termin activitatea profiler-ului.Profilestatus Afieaz o structur care conine starea curent a profiler-ului.stats =profile('info')

    Suspend profiler-ul i afieaz o structur cu rezultatele activitii deanaliz.

    Exemplu de utilizare a Profiler-ului

    1. Se starteaz profiler-ul:profile on -detail builtin -history

    Opiunea -detail builtin determin profilerul s ntocmeasc statistici i pentru funciilebuilt-in.

    36

  • 8/7/2019 APLICAtii MATLAB

    37/97

    2. Se execut un fiier .m . n exemplu este preluat programul care ruleaz modelul Lotka-Volterra pentru populaii tip prdtor-prad (lotkademo pentru demo).

    [t,y] = ode23('lotka',[0 2],[20;20]);

    3. Se genereaz un raport i se salveaz rezultatele n fiierul lotkaprof.profile report lotkaprof

    4. Se restarteaz profiler-ul fr tergerea statisticilor existente.profile resume

    5. Se oprete profiler-ul.profile off

    Vizualizarea rezultatelor

    A. Rapoarte

    Pentru afiarea unui raport cu rezultatele statistice obinute se tasteazprofile report

    Raportul care rezult apare n fereastra browserului Web i ncepe cu un rezumat al raportului dincare se pot accesa un raport detaliat i un raport al apelrilor de funcii (o cronic).Raportul rezumat. n figura urmtoare este prezentat raporul rezumat pentru exemplul Lotka-

    Volterra.Raportul detaliat. Acest raport furnizeaz detalii despre funciile de tip printe i copil aleunei funcii. Este prezentat raportul detaliat pentru funcia lotka din exemplul considerat.Raportul apelrilor de funcii. Acest raport afieaz secvena exact a funciilor apelate. Pentru avizualiza acest raport, trebuie startat profiler-ul cu opiunea -history.

    profile on -history

    Este prezentat un exemplu de astfel de raport.

    37

  • 8/7/2019 APLICAtii MATLAB

    38/97

    B. Reprezentarea grafic a rezultatelor Profiler-ului

    Pentru a obine o reprezentare grafic trebuie s tastm:profile plot

    n fereastra grafic va apare un grafic de forma din figura urmtoare:

    38

  • 8/7/2019 APLICAtii MATLAB

    39/97

    5. MATRICI, ALGEBR LINIAR, POLINOAME, TEHNICI DE INTERPOLARE

    5.1. Matricile n MATLAB Prin matrice nelegem un tablou bi-dimensional de numere reale sau complexe. ncapitolul de Fundamente ale programrii n MATLAB a fost prezentat modul de introducere amatricilor i au fost analizate cteva operaii simple cu matrici. MATLAB-ul lucreaz direct cu multe operaii matriceale: aritmetica matricilor, ecuaiiliniare, valori proprii, factorizri etc.

    Funciile de algebr liniar sunt localizate n directorul matfun. n continuare suntprezentate cteva din funciile care lucreaz cu matrici.

    Categoria Funcia Descriere

    Analiza matriceal norm Norma unei matrice sau a unui vector.

    normest Estimeaz norma-2 a matricei.

    rank Rangul matricei.

    det Determinant.

    trace Suma elementelor de pe diagonal.

    null Spaiul Nul.

    orth Ortogonalizare.

    subspace Unghiul dintre 2 subspaii.

    Ecuaii liniare \ i / Utilizate la calculul soluiilor ecuaiilor liniare.inv Inversa matricei.cond Numrul de condiie pentru inversare.

    39

    http://e/MATLABR11/help/techdoc/ref/arithmeticoperators.htmlhttp://e/MATLABR11/help/techdoc/ref/arithmeticoperators.html
  • 8/7/2019 APLICAtii MATLAB

    40/97

    chol Factorizarea Cholesky.lu Factorizarea LU.qr Decompoziia ortogonal-triunghiular.pinv Pseudoinversa.lscov Cele mai mici ptrate cu covarian cunoscut.

    Valori proprii ivalori singulare

    eig Valori proprii i vectori proprii.

    svd Decompoziia n valori singulare.

    poly Polinomul caracteristic.

    hess Forma Hessenberg.

    qz Factorizarea QZ.

    schur Decompoziia Schur.

    Funcii de matrice expm Exponeniala de matrice.logm Logaritmul de matrice.

    sqrtm Rdcina ptrat de matrice.

    funm Evaluarea unei funcii generale de matrice.

    Operaiunile elementare cu matrici au fost deja prezentate (adunarea matricilor, nmulireaacestora, transpusa unei matrice, funciile sum, diag etc.).

    n continuare sunt prezentate cteva matrici speciale utile n toate tipurile de reprezentri

    matematice:

    - Matricea identitate (unitate)Este o matrice cu elementele de pe diagonala principal egale cu 1 iar restul elementelor suntnule. Notaia matematic Iprovine de la denumirea matricii i nu este folosit n MATLAB,

    pentru evitarea unor confuzii. Se utilizeaz sintaxa:eye(m,n)

    Aceast funcie returneaz o matrice identitate mxn. Dac se folosete:eye(n)

    atunci este vorba de o matrice identitate ptratic nxn.

    - MatriceaonesEste o matrice care are toate elementele egale cu 1. Forme posibile:

    ones(n) este o matrice nxn cu elemente de 1 ones(m,n) sau ones([m,n]) sunt matrici mxn cu elemente de 1. ones(size(A)) are aceeai dimensiune cu o matrice A i are elemente de 1

    - Matricea zerosEste o matrice care are toate elementele egale cu 0. Forme posibile:zeros(n) este o matrice nxn de zerourizeros(m,n) sau zeros([m,n]) sunt matrici mxn de 0zeros(size(A))are aceeai dimensiune cu o matrice A i are elemente de 0

    5.2. Rezolvarea ecuaiilor liniare

    40

  • 8/7/2019 APLICAtii MATLAB

    41/97

    Una din cele mai importante probleme ale calculului din domeniul tehnic este soluionareasistemelor de ecuaii liniare.

    Definirea problemei este pe scurt urmtoarea:

    Dac se dau dou matrici A iB, exist o matrice unicXastfel nctAX = B sau XA = B ?

    MATLAB utilizeaz notaia din cazul scalar i pentru descrierea soluiei unui sistem de ecuaiiliniare. Cele dou simboluri utilizate n cazul scalar al diviziunii (mpririi) i anume slash, /, ibackslash, \, sunt folosite pentru definirea soluiei:

    X = A\B este soluia ecuaiei matricealeAX = B.X = B/A este soluia ecuaiei matricealeXA = B.

    n practic, ecuaiile liniare de formaAX = B sunt mai des ntlnite.

    Deoarece matriceaA, care conine de fapt coeficienii sistemului, poate s nu fie ptratic ci detipul general mxn, exist trei cazuri posibile:

    m = n. Sistem ptratic. Se poate cuta o soluie exact.

    m > n. Sistem supradeterminat (incompatibil). Se caut o soluie de tip cele maimici ptrate.

    m < n. Sistem nedeterminat. Se poate cuta o soluie cu cel mult m componentenenule.

    n multe cazuri MATLAB-ul d un diagnostic (o soluie) automat prin examinareacoeficienilor matricelor. Cteva din aceste cazuri:

    Permutarea matricilor triunghiulare

    Matrici simetrice, pozitiv definite

    Matrici ptratice nesingulare

    Sisteme rectangulare supradeterminate

    Sisteme rectangulare nedeterminate

    Sisteme ptraticeCel mai simplu caz este cel corespunztor unei matrice ptratice A i a unui vector coloan b.

    Soluia x = A\b are aceeai dimensiune ca b.Dac A i B sunt ptratice de aceleai dimensiuni atunci soluia X = A\B are aceeai

    dimensiune caA sau B.

    Observaie: Dac matriceaA este singular (determinant nul) atunci soluia ecuaieiAX = B nuexist sau nu este unic.

    Sisteme supradeterminate (incompatibile)Aceste tipuri de sisteme sunt des ntlnite n diverse situaii, cum ar fi de exemplu aproximarea

    unor curbe din date experimentale.

    Sisteme nedeterminateSistemele liniare nedeterminate au mai multe necunoscute dect ecuaii. Dac exist i

    constrngeri (restricii) suplimentare, atunci este vorba de o problem de programare liniar.Operatorul backslash din MATLAB permite cutarea soluiei n cazul fr restricii. Soluia nu

    este niciodat unic. MATLAB-ul gsete o soluie de baz (care are cel mult m componentenenule). Gsirea soluiei particulare se bazeaz pe factorizarea QR (decompoziia ortogonal-triunghiular).

    41

  • 8/7/2019 APLICAtii MATLAB

    42/97

    Vom prezenta un exemplu (care utilizeaz funcia matriceal random rand). R = fix(10*rand(2,4))R =

    6 8 7 33 5 4 1

    b = fix(10*rand(2,1))

    b = 12

    Sistemul liniarRx = b implic dou ecuaii cu 4 necunoscute. Soluia se poate afia n formatraional (coeficienii sunt numere ntregi). Soluia particular se obine astfel:

    format rat p = R\bp =

    05/70

    -11/7

    Soluia complet a sistemului nedeterminat se obine prin adugarea unui vector arbitrar dinspaiul nul folosind funcia null: Z = null(R,'r')Z =

    -1/2 -7/6-1/2 1/21 00 1

    Orice vector de forma x=p+Z*q pentru q vector arbitrar satisface R*x=b.5.3. Inverse i determinani

    Dac matricea A este ptratic i nesingular, ecuaiile AX = Ii XA = Iau aceeai soluie X.Aceast soluie este chiar inversa luiA, notat matematic prinA-1, i poate fi calculat cu funcia

    inv. Determinantul unei matrice se poate calcula cu funcia det (trebuie acordat atenie

    problemelor de scalare i rotunjire care apar n calcule).

    Exemple:

    A=[1 1 1;1 2 3;1 3 6];

    d = det(A)d =

    1

    X = inv(A)

    X =3 -3 1-3 5 -21 -2 1

    PseudoinverseMatricile dreptunghiulare (rectangulare) nu au inverse sau determinani. Atunci cel puin una

    din ecuaiile AX = Isau XA = Inu are soluie. Se poate utiliza n acest caz o pseudoinvers carepoate fi calculat cu funcia pinv:

    A1=[A;[1 3 5]]

    A1 = 1 1 11 2 31 3 6

    42

  • 8/7/2019 APLICAtii MATLAB

    43/97

    1 3 5

    X=pinv(A1)

    X =1.5000 -0.0000 1.0000 -1.5000

    -0.8333 0.6667 -2.0000 2.16670.1667 -0.3333 1.0000 -0.8333

    5.4. Funcii de matrice. Valori propriiPuteri de matriceDac A este o matrice ptratic i p este un numr ntreg pozitiv, atunci A^p multiplic pe A cu

    ea nsi de p ori.

    X = A^2X =

    3 6 106 14 2510 25 46

    Dac A este ptratic i nesingular, atunci A^(-p) multiplic pe inv(A) cu ea nsi de pori.

    Y=A^(-2)Y =

    19.0000 -26.0000 10.0000-26.0000 38.0000 -15.000010.0000 -15.0000 6.0000

    Ridicarea la putere element cu element se face utiliznd operatorul (funcia) .^. De exemplu:

    X = A.^2A =

    1 1 11 4 91 9 36

    Rdcina ptrat de matriceFuncia sqrtm(A) permite calculul lui A^(1/2) printr-un algoritm mai precis dect

    utilizarea puterii de matrice.

    Exponeniala de matrice

    Un sistem de ecuaii difereniale ordinare cu coeficieni constani poate fi scris:

    undex = x(t) este un vector de funcii de timp iA este o matrice independent de timp.Soluia sistemului poate fi scris prin intermediul exponenialei de matrice

    Funcia expm(A)permite calculul exponenialei de matrice.

    Valori propriiO valoare proprie i un vector propriu ale unei matrice ptraticeA sunt un scalar i un vector

    v care satisfac egalitatea

    Cu valorile proprii pe diagonala unei matrice de tip diagonal i cu vectorii proprii

    corespunztori care formeaz coloanele unei matrice Vvom avea

    43

  • 8/7/2019 APLICAtii MATLAB

    44/97

    Dac Veste nesingular obinem decompoziia (descompunerea) pe baza valorilor proprii:

    Exemplu:

    A=[-1 -3 1;2 -2 -1;0 1 -3]A =

    -1 -3 12 -2 -10 1 -3

    lambda=eig(A)lambda =-1.7593 + 2.4847i-1.7593 - 2.4847i-2.4814

    Lambda va fi un vector care conine valorile proprii ale matricei.Dac funcia eig este utilizat cu dou argumente de ieire vom obine vectorii proprii i

    valorile proprii (acestea sub forma diagonal):

    [V,D]=eig(A)V =

    0.2233 + 0.6835i 0.2233 - 0.6835i 0.31600.6481 - 0.0862i 0.6481 + 0.0862i 0.43680.0765 - 0.2227i 0.0765 + 0.2227i 0.8422

    D =-1.7593 + 2.4847i 0 0

    0 -1.7593 - 2.4847i 00 0 -2.4814

    Observaie: Toolbox-ul Symbolic Math extinde capacitatea MATLAB-ului prin conectarea laMaple, care este un sistem de calcul algebric performant. Una din funciile toolbox-ului permite

    calculul formei canonice Jordan. [X,J]=jordan(A)X =0.1121 0.4440 + 0.1691i 0.4440 - 0.1691i0.1549 -0.0775 + 0.4250i -0.0775 - 0.4250i0.2987 -0.1494 + 0.0434i -0.1494 - 0.0434i

    J =-2.4814 0 0

    0 -1.7593 - 2.4847i 00 0 -1.7593 + 2.4847i

    Forma canonic Jordan este un concept teoretic important, dar nu este indicat folosirea n

    cazul matricilor mari sau pentru matricile cu elemente afectate de erori de rotunjire sau de alteincertitudini. MATLAB-ul poate folosi n astfel de cazuri descompunerea Schur (funcia schur).

    5.5. Reprezentarea polinoamelor. InterpolareaPolinoameMATLAB-ul furnizeaz funcii pentru operaii polinomiale standard cum ar fi calculul

    rdcinilor, evaluarea polinoamelor, derivarea etc. O parte din aceste operaii precum i modul dereprezentare a polinoamelor ca vectori au fost descrise n capitolul de Fundamente de programare.

    Funciile polinomiale se afl n directorul polyfun:

    Funcie Descriereconv Multiplic polinoamele.deconv mparte polinoamele.

    44

  • 8/7/2019 APLICAtii MATLAB

    45/97

    poly Returneaz coeficienii dac se daurdcinile; Polinomul caracteristic.

    polyder Calcul derivatei unui polinom.polyfit Gsirea coeficienilor unui polinom din

    aproximarea unui set de date.polyval

    Evaluarea unui polinom.polyvalm Evaluarea unui polinom cu argumentmatriceal.

    residue Descompunere n fracii simple.roots Gsirea rdcinilor unui polinom.

    Dup cum s-a precizat deja, MATLAB-ul reprezint polinoamele ca vectori linie careconin coeficienii polinoamelor n ordinea descresctoare a puterilor. Funciile uzuale care opereaz cu polinoame au fost prezentate (de exemplu roots). ncontinuare sunt parcurse alte cteva exemple utile.

    Funcia poly returneaz coeficienii unui polinom dac dispunem de rdcinileacestuia (este o funcie invers fa de roots):

    p=[1 -1 2 4 1]; r=roots(p)r =

    1.0529 + 1.7248i1.0529 - 1.7248i

    -0.7995-0.3063

    coef=poly(r)coef =

    1.0000 -1.0000 2.0000 4.0000 1.0000O alt utilizare a funciei poly este aceea de calculare a coeficienilor polinomului

    caracteristic al unei matrice: AA =

    -1 -3 12 -2 -10 1 -3

    poly(A)ans =

    1 6 18 23

    Rdcinile acestui polinom sunt chiar valorile proprii ale matriciiA

    .

    Funcia polyval evalueaz un polinom pentru o valoare specificat a argumentului.

    Funcia polyvalm permite evaluarea unui polinom n sens matriceal. n acest caz polinomul pdin exemplul anterior: p(x) = x4 x3 + 2x2 + 4x + 1 devine p(X) = X4 X3 + 2X2 + 4X + I, unde Xeste o matrice ptratic i I matricea unitate.

    Exemplu: C=polyvalm(p,A)C =

    -75 -61 8158 -130 7552 -23 49

    Funciile conv i deconv implementeaz operaiile de nmulire i mprire apolinoamelor.

    45

  • 8/7/2019 APLICAtii MATLAB

    46/97

    Exemple:Fie a(x) = x2 + 2x+3 i b(x) = 4x2 + 5x + 6.

    a = [1 2 3]; b = [4 5 6]; c = conv(a,b)c =

    4 13 28 27 18

    [q,r] = deconv(c,a)q =

    4 5 6r =

    0 0 0 0 0

    Funciapolyder permite calculul derivatei unui polinom.

    Exemplu: p=[1 -1 2 4 1]; pderivat=polyder(p)pderivat =

    4 -3 4 4

    Funciapolyfit gsete coeficienii unui polinom (o curb) care aproximeaz un set de daten sensul algoritmului celor mai mici ptrate:

    p = polyfit(x,y,n)

    x i y sunt vectorii care conin setul de date iarn este ordinul polinomului ai crui coeficieni vor fifurnizai la apelarea funciei.

    Exemplu:

    x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4];

    p = polyfit(x,y,3)p =

    -0.1917 31.5821 -60.3262 35.3400

    Pentru plotarea rezultatului se utilizeaz mai nti funcia polyval pentru o trasare ct maiexact a graficului polinomului i apoi se ploteaz estimarea versus datele reale pentru comparaii.

    x2 = 1:.1:5; y2 = polyval(p,x2); plot(x,y,'o',x2,y2)

    46

  • 8/7/2019 APLICAtii MATLAB

    47/97

    Funcia residue se utilizeaz pentru descompunerea n fracii simple.Se aplic n cazul raportului a dou polinoame b i a,

    unde reste un vector coloan, p tot un vector coloan care conine polii iar kun vector linie cutermenii direci.

    Exemplu:

    b = [-4 8]; a = [1 6 8]; [r,p,k] = residue(b,a)r =

    -128

    p =-4

    -2k =[]

    Dac se folosesc trei argumente de intrare (r, p, i k), funcia residue asigur conversianapoi n forma polinomial:

    [b2,a2] = residue(r,p,k)b2 =

    -4 8a2 =

    1 6 8

    InterpolareaInterpolarea este un proces de estimare a valorilor dintre date (puncte) cunoscute. Aplicaiileinterpolrii sunt numeroase n domenii cum ar fi procesarea numeric a semnalelor i imaginilor.

    MATLAB-ul dispune de mai multe tehnici de interpolare, alegerea unei metode sau alteiafcndu-se n funcie de acurateea necesar, de viteza de execuie i de gradul de utilizare amemoriei.

    Funciile de interpolare se afl n directorul polyfun.

    Funcie Descrieregriddata Interpolare pe suprafee.

    interp1 Interpolare monodimensional.interp2 Interpolare bi-dimensional.interp3 Interpolare tri-dimensional.interpft Interpolare mono utiliznd metoda FFT.spline Interpolare spline (cubic).

    Compararea unor metode de interpolare bi-dimensional

    n continuare este preluat i prezentat (informativ) un exemplu de folosire a unor metode deinterpolare bi-dimensional pentru o matrice de date 7 x 7.

    1. Generarea funciei peaks (cu rezoluie mic):

    [x,y] = meshgrid(-3:1:3);

    47

  • 8/7/2019 APLICAtii MATLAB

    48/97

    z = peaks(x,y);surf(x,y,z)

    2. Generarea unei suprafee mesh fine pentru interpolare:

    [xi,yi] = meshgrid(-3:0.25:3);3. Interpolarea cu metoda celei mai apropiate vecinti:

    zi1 = interp2(x,y,z,xi,yi,'nearest');

    4. Interpolarea cu metoda biliniar:zi2 = interp2(x,y,z,xi,yi,'bilinear');

    5. Interpolarea cu metoda bicubic:zi3 = interp2(x,y,z,xi,yi,'bicubic');

    6. Compararea graficelor corespunztoare diferitelor metode de interpolare:

    48

  • 8/7/2019 APLICAtii MATLAB

    49/97

    7. Compararea contururilor suprafeelor n cazul diferitelor metode de interpolare:

    Se observ c metoda bicubic produce cele mai netede contururi. O metod cum ar fi cea acelor mai apropiate vecinti este preferat ns n anumite aplicaii, cum ar fi cele medicale undenu trebuie generate date noi.

    6. REPREZENTAREA FUNCIILOR. ECUAII DIFERENIALE6.1. Reprezentarea i plotarea funciilor matematiceReprezentarea funciilor matematice

    Funciile matematice uzuale sunt furnizate de MATLAB ca funcii buit-in (cum ar fisin, cos, log10, log, atan etc.). Pentru reprezentarea altor funcii matematice se utilizeaz exprimarea n fiieretip .m .

    De exemplu, o funcie cum este urmtoarea:

    poate fi creat ntr-un fiier MATLAB de tip function i poate fi utilizat ulterior ca intrare nalte funcii (aa-numitele funcii de funcii a se vedea paragraful 2.3).

    Fiierul care descrie aceast funcie a mai fost prezentat n paragraful 2.3:

    function y = humps(x)y = 1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6;

    O alt posibilitate este crearea la nivelul liniei de comand a unui obiect inline prin folosireaunei expresii tip ir de caractere:

    f=inline(`1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6');

    Pentru a evalua aceast funcie f n 2.0 tastm simplu: f(2.0)

    ans =-4.8552

    Alt exemplu:

    f = inline('y*sin(x)+x*cos(y)','x','y')

    f(pi,2*pi)

    ans =3.1416

    Plotarea funciilorPentru reprezentarea grafic a funciilor se poate utiliza funcia fplot. Se pot controla

    limitele axelor de reprezentare grafic.

    49

  • 8/7/2019 APLICAtii MATLAB

    50/97

    Exemplu: trasarea graficului funciei humps pentru limitele [-5 5] ale axei x:fplot('humps',[-5 5])

    Dac dorim i precizarea limitelor de reprezentare pe axa y (realizarea unui zoom) folosimcomanda:

    fplot('humps',[-5 5 -10 25])

    Un alt exemplu de folosire direct a funciei fplot:fplot('2*sin(x+3)',[-1 1])

    Se poate realiza i reprezentarea mai multor funcii pe acelai grafic:fplot('[2*sin(x+3), humps(x)]',[-1 1])

    50

  • 8/7/2019 APLICAtii MATLAB

    51/97

    6.2. Minimizarea funciilor i gsirea zerourilorMATLAB-ul furnizeaz o serie de funcii de nivel nalt care realizeaz sarcini de optimizare a

    funciilor. Aceste funcii sunt grupate n principal pe urmtoarele domenii:

    Minimizarea funciilor de o variabil Minimizarea funciilor de mai multe variabile Setarea opiunilor de minimizare Gsirea zerourilor unor funcii

    Pentru exemplificare vom considera minimizarea unei funcii de o singur variabil i gsirea

    zerourilor pentru aceast funcie.

    Minimizarea unei funciiPentru gsirea unui minim local al unei funcii scrise ntr-un fiierfunction, se utilizeaz

    funcia fminbnd.Relum aici exemplul din paragraful 2.3: pentru gsirea minimului funciei humps n intervalul

    (0.3, 1) folosim instruciunea:

    x = fminbnd('humps',0.3,1)x =

    0.6370

    Dac dorim o afiare detaliat a pailor fcui de prodedura de minimizare se utilizeazurmtoarea sintax:

    x = fminbnd('humps',0.3,1,optimset('Display','iter'))

    Func-count x f(x) Procedure1 0.567376 12.9098 initial2 0.732624 13.7746 golden3 0.465248 25.1714 golden4 0.644416 11.2693 parabolic5 0.6413 11.2583 parabolic6 0.637618 11.2529 parabolic

    7 0.636985 11.2528 parabolic8 0.637019 11.2528 parabolic9 0.637052 11.2528 parabolic

    x =0.6370

    51

  • 8/7/2019 APLICAtii MATLAB

    52/97

    Gsirea zerourilorFuncia fzero permite gsirea zerourilor unei funcii (este vorba de fapt de o ecuaie cu o

    singur necunoscut). Dac se d un punct de plecare x0pentru procedura de cutare, fzero va cuta un interval n

    jurul acestui punct n care funcia schimb semnul. Dac un astfel de interval este gsit, fzero

    returneaz valoarea pentru care funcia schimb semnul (adic zeroul), iar dac un astfel deinterval nu este gsit returneaz NaN.

    Alt variant permite cutarea ntr-un interval specificat de utilizator.

    Exemplu: gsirea unui zerou al funciei humps n apropiere de -0.2:

    a = fzero('humps',-0.2)a =-0.1316

    Pentru verificare evalum funcia n punctul -0.1316 i gsim ntr-adevr o valoare foarteaproape de zero:

    humps(a)ans =8.8818e -16

    Se poate folosi i varianta cu interval de cutare precizat de utilizator. n continuare este prezentat aceast variant plus folosirea unor opiuni suplimentare pentru afiarea detaliat ainformaiilor despre procedur i a pailor:

    options = optimset('Display','iter'); a = fzero('humps',[-1 1],options)

    Func-count x f(x) Procedure1 -1 -5.13779 initial2 1 16 initial

    3 -0.513876 -4.02235 interpolation4 0.243062 71.6382 bisection5 -0.473635 -3.83767 interpolation6 -0.115287 0.414441 bisection7 -0.150214 -0.423446 interpolation8 -0.132562 -0.0226907 interpolation9 -0.131666 -0.0011492 interpolation10 -0.131618 1.88371e-007 interpolation11 -0.131618 -2.7935e-011 interpolation12 -0.131618 8.88178e-016 interpolation13 -0.131618 -9.76996e-015 interpolation

    Zero found in the interval: [-1, 1].

    a =-0.1316

    6.3. Integrarea numericAria subgraficului unei funciiF(x) poate fi determinat prin integrarea numeric, proces care

    se numete quadratur (quadrature).Pentru rezolvarea integrrii numerice n cazul monodimensional exist dou funcii MATLAB:

    quad, care folosete un algoritm de tip Simpson quad8, care utilizeaz un algoritm de tip Newton

    Exemplu: pentru integrarea funciei humps ntre 0 i 1 folosim comanda

    q = quad('humps',0,1)q =

    29.8583

    52

  • 8/7/2019 APLICAtii MATLAB

    53/97

    Funciile quad sau quad8 permit i alte argumente de intrare care specific eroarea toleratpentru integrare i alte opiuni (a se vedea cu help).

    Exemplu de integrare numeric: calculul lungimii unei curbeVom considera o curb dat de ecuaiile:

    cu

    O plotare tri-dimensional a acestei curbe poate fi obinut cu

    t = 0:0.1:3*pi; plot3(sin(2*t),cos(t),t)

    -1

    -0.5

    00.5

    1

    -1

    -0.5

    0

    0.5

    1

    0

    2

    4

    6

    8

    10

    Lungimea acestei curbe este dat de formula urmtoare:

    Pentru calculul lungimii trebuie integrat numeric integrala de mai sus. Pentru aceasta secreeaz mai nti o funcie MATLAB care descrie integrandul pe care o numim fcurba:

    function f = fcurba(t)f = sqrt(4*cos(2*t).^2 + sin(t).^2 + 1);

    i apoi se integreaz cu ajutorul funciei quad:

    lungime = quad('fcurba',0,3*pi)lungime =

    1.7222e+01

    6.4. Rezolvarea ecuaiilor diferenialeMATLAB-ul dispune de metode i funcii care pot rezolva problema condiiilor iniiale

    (Cauchy) ale sistemelor de ecuaii difereniale ordinare (ODE Ordinary Differential Equations).n tabelul urmtor sunt prezentate succint cteva din aceste funcii.

    53

  • 8/7/2019 APLICAtii MATLAB

    54/97

    Categorie Funcie Descriere

    Funcii care rezolvODE

    ode45 Rezolv ecuaii difereniale nonstiff, metod de ordinmediu.

    ode23 Rezolv ecuaii difereniale nonstiff, metod de ordinsczut.

    ode113 Rezolv ecuaii difereniale nonstiff, metod de ordinvariabil.

    ode15s Rezolv ecuaii difereniale stiff i ecuaii algebricedifereniale, metod de ordin variabil.

    ode23s Rezolv ecuaii difereniale stiff, metod de ordinsczut.

    ode23t Ecuaii difereniale stiff i ecuaii algebrice difereniale,metoda trapezelor.

    ode23tb Rezolv ecuaii difereniale stiff, metod de ordinsczut.

    Opiuni ODE odeset Creeaz sau schimb opiuni de structur ale ODE.odeget Permite obinerea parametrilor din opiunile ODE.

    Funcii de ieireODE

    odeplot Plotarea soluiilor ODE (n funcie de timp).

    odephas2 Trasarea planului fazelor.

    odephas3 Trasarea spaiului fazelor (tri-dimensional).

    odeprint Permite tiprirea soluiei ODE n fereastra de comand.

    Observaie: La ecuaiile difereniale ordinare de tip stiff (rigide) soluiile pot avea variaiifoarte rapide n timp n raport cu intervalul de timp de integrare i este necesar folosirea unor paide integrare foarte mici, ceea ce nu mai este indicat la ecuaiile nonstiff.

    Exemplu de rezolvare: ecuaia van der PolEcuaia van der Pol este un exemplu clasic de ecuaie diferenial:

    unde > 0 este un parametru scalar.

    Pentru implementarea algoritmului de re