Home >Documents >MATLAB – CURSmaticiuc/didactic/MATLAB... · MATLAB foloses,te variabile speciale (care au nume...

MATLAB – CURSmaticiuc/didactic/MATLAB... · MATLAB foloses,te variabile speciale (care au nume...

Date post:08-Feb-2020
Category:
View:6 times
Download:0 times
Share this document with a friend
Transcript:
  • MATLAB – CURS

  • Cuprins

    1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Aplicaţia MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Comenzile help şi doc . . . . . . . . . . . . . . . . . . . . . . 21.3 Variabile şi comenzi MATLAB . . . . . . . . . . . . . . . . . . 31.4 Funcţii matematice . . . . . . . . . . . . . . . . . . . . . . . . 7

    2 Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.1 Utilizarea semnului : în manipularea matricelor . . . . . . . 302.2 Operarea element cu element . . . . . . . . . . . . . . . . . . 382.3 Analiza datelor . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3 Fişiere de tip script . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4 Funcţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.1 Fişiere de tip function . . . . . . . . . . . . . . . . . . . . . . . 534.2 Funcţii anonymous . . . . . . . . . . . . . . . . . . . . . . . . . 574.3 Funcţii inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    5 Programare în MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 655.1 Operatori relaţionali şi operatori logici . . . . . . . . . . . . . 655.2 Structuri if-elseif-else-end . . . . . . . . . . . . . . . 735.3 Structuri ciclice de tip for-end . . . . . . . . . . . . . . . . . 775.4 Structuri ciclice de tip while-end . . . . . . . . . . . . . . . 805.5 Structuri switch-case . . . . . . . . . . . . . . . . . . . . . 82

    6 Polinoame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    7 Rezolvarea numerică a unor probleme . . . . . . . . . . . . . . . 897.1 Rezolvarea ecuaţiilor . . . . . . . . . . . . . . . . . . . . . . . 897.2 Determinarea minimului şi maximului . . . . . . . . . . . . . 927.3 Integrarea numerică . . . . . . . . . . . . . . . . . . . . . . . 93

  • 7.4 Algebră liniară . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.5 Ecuaţii diferenţiale . . . . . . . . . . . . . . . . . . . . . . . . 100

    8 Reprezentări grafice . . . . . . . . . . . . . . . . . . . . . . . . . . 1058.1 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058.2 Grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    9 Calcul simbolic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239.1 Obiectele simbolice şi expresiile simbolice . . . . . . . . . . . 1249.2 Schimbarea formei unei expresii simbolice . . . . . . . . . . . 1279.3 Calculul numeric al unei expresii simbolice . . . . . . . . . . 1289.4 Sume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.5 Rezolvarea ecuaţiilor algebrice . . . . . . . . . . . . . . . . . 1319.6 Limite de funcţii . . . . . . . . . . . . . . . . . . . . . . . . . . 1349.7 Derivarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359.8 Integrarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369.9 Rezolvarea ecuaţiilor diferenţiale ordinare . . . . . . . . . . . 138

    Bibliografie selectivă . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

  • Capitolul 1

    Introducere

    1.1 Aplicaţia MATLAB

    Fereastra aplicat,iei MATLAB cont,ine o bară de titlu, o bară de meniuri,o bară de instrumente precum s, i următoarele ferestre:

    Command Window, Current Folder, Workspace, Command History

    Fereastra de comandă (Command Window) este cea mai importantă; aicisunt tastate comenzile după semnele>> care reprezintă prompterul1 MAT-LAB.

    După ce o comandă a fost introdusă2 s, i a fost apăsată tasta Enter, MAT-LAB execută comanda s, i rezultatul apare imediat pe ecran.

    De exemplu, prin tastarea comenzii>> version

    se afis, ează versiunea MATLAB folosită, iar comanda>> ver

    indică, pe lângă versiunea curentă a MATLAB-ului instalat, s, i toolbox-urile instalate.

    De exemplu, prin tastarea comenzii>> quit

    se se închide programul MATLAB (acelas, i efect îl are s, i comanda exit).

    1 În cazul în care programul face un calcul care durează prea mult s, i se dores, te intreru-perea procesului (sau pur s, i simplu se dores, te afis, area din nou a prompterului MATLAB),se tastează CTRL + C

    2 Comenzile în MATLAB sunt case sensitive.

    1

  • 2 1. Introducere

    Dacă dacă folosim comanda

    clc

    atunci s, tergem tot ce a fost scris în Command Window.

    Ment,ionăm, în plus, că, dacă în Command Window folosim tasta cu sim-bolul ↑ , atunci apare ultima comandă efectuată; dacă tastăm din nou sim-bolul ↑ apare penultima comandă efectuată s, .a.m.d.; apoi se poate folosi s, itasta ↓ pentru a reveni la comenzi mai noi. Săget,ile → s, i ← pot fi folositepentru a manevra cursorul în cadrul unei comenzi.

    De asemenea, sunt utile tastele Delete, Backspace, Home, End careau rolul lor standard. Foarte des utilizată este tasta Escape care s, tergecomanda curentă, care tocmai este scrisă.

    Fereastra care indică directorul în care se „lucrează” este Current Folder(numit eventual Current Directory).

    În fereastra Workspace sunt afis, ate toate variabilele definite de noi (pre-cum s, i valorile lor). Ment,ionăm că dacă folosim comanda

    clear

    s, tergem toate variabilele definite până atunci (dispar s, i din fereastra Work-space).

    În fereastra Command History sunt afis, ate toate comenzile efectuate denoi în Command Window. Printr-un dublu click pe o comandă aceasta aparedin nou în Command Window s, i se execută.

    1.2 Comenzile help s, i doc

    Pentru a utiliza sistemul de help al MATLAB scriem, în Command Win-dow, comanda

    >> help nume_comandas, i vom obt,ine câteva informat,ii ale comenzii dată de nume_comanda (o

    scurtă descriere, sintaxa s, i o listă de subiecte înrudite).De exemplu, comanda>> help expafis, ează informat,ii despre funct,ia exponent,ială.Dacă scriem doar>> help

  • 1.3. Variabile şi comenzi MATLAB 3

    atunci se deschide o listă de categorii3, care la rândul lor (se pot deschi-de) cont,in liste de comenzi.

    Dacă scriem comanda>> doc nume_comandavom obt,ine, într-o fereastră separată, informat,ii mai detaliate s, i exem-

    ple diverse de utilizare a comenzii dată de nume_comandaDe exemplu, comanda>> doc expafis, ează informat,ii mai detaliate s, i exemple de utilizare a funct,iei expo-

    nent,iale.

    De asemenea, pentru a utiliza sistemul de help al MATLAB se poatedeschide meniul Help al MATLAB (sau se tastează F1).

    1.3 Variabile şi comenzi MATLAB

    Numele unei variabile trebuie să înceapă cu o literă. Aceasta poate fiurmată apoi de orice literă, cifră sau de simboluri underscore (dar maxim 63de caractere).

    De asemenea, ment,ionăm că numele variabilelor în MATLAB sunt casesensitive.

    În general, definirea s, i numirea unor variabile se poate face în trei mo-duri: ori direct în Command Window, într-un fis, ier de tip script ori utilizândcomanda input (pentru detalii concrete vezi pagina 47).

    MATLAB foloses, te variabile speciale (care au nume rezervate ce nu potfi folosite pentru a desemna alte variabile) precum:

    Variabila specială Semnificat,ia

    ansnumele dat implicit unui rezultat obt,inut anterior,rezultat ce nu a fost atribuit, în prealabil,unei variabile (answer)

    pi numărul π

    epscel mai mic număr care adunat la 1 crează un numărdiferit de 1; este precizia de calcul a MATLAB(epsilon; are valoarea 2.220446049250313e-16)

    3 Pentru a afis, a s, i continuarea listei de categorii se tastează Enter sau Spacebar.

  • 4 1. Introducere

    eps(n) cel mai mic număr care adunat la ncrează un număr diferit de n

    Inf sau inf desemnează∞(de exemplu, rezultatul pentru 1/0 )

    Nan sau nan Not a number; reprezintă o expresie nedefinită(de exemplu, rezultatul pentru 0/0 )

    i sau j numărul4complex√−1

    intmin cel mai mic întreg (negativ) ce poate fi reprezentat

    intmax cel mai mare întreg ce poate fi reprezentat

    realmin cel mai mic număr real ce poate fi reprezentat

    realmax cel mai mare număr real ce poate fi reprezentat

    nargin numărul de argumente de intrare

    nargout numărul de argumente de ies, ire

    Precizăm că atunci când MATLAB calculează o expresie (folosind even-tual alte variabile) va face aceasta folosind toate valorile variabilelor caresunt deja definite s, i obt,inute, până la momentul când se efectuează co-manda.

    În cazul în care anumite variabile au fost redefinite, prin comanda clearse revine la valorile implicite.

    În MATLAB variabilele sunt definite prin atribuirea unei valori (carepoate fi număr, matrice etc.). Variabila astfel definită poate fi utilizată ulte-rior în definirea altor variabile s, .a.m.d.

    Unei variabile deja definite i se poate ulterior atribui altă valoare.

    Exemplul 1.1 Comanda

    >> 1+2+3

    afis, ează

    ans =6

    Astfel s-a definit implicit noua variabila ans s, i i s-a atribuit valoarea 6.Această variabilă poate fi folosită în calcule viitoare. �

    4 Este recomandat să scriem întotdeauna 1i sau 1j în loc de i sau respectiv j

  • 1.3. Variabile şi comenzi MATLAB 5

    Exemplul 1.2 Comanda

    >> a = 1+2+3

    afis, ează

    a =6

    Astfel s-a definit noua variabila a s, i i s-a atribuit valoarea 6. Aceastăvariabilă poate fi folosită în calcule viitoare. �

    Exemplul 1.3 Comanda

    >> total = a*2 + ans

    afis, ează

    total =18

    Astfel s-a definit noua variabila total s, i i s-a atribuit valoarea 18. �

    Exemplul 1.4 Comanda

    >> a*2 + ans

    afis, ează

    ans =18

    Astfel s-a definit noua variabila ans s, i i s-a atribuit valoarea 18. �

    Pentru a afis, a valoarea atribuită unei variabile se scrie numele variabileis, i astfel se va afis, a valoarea ei. De asemenea, precizăm că toate variabileles, i valorile lor sunt afis, ate s, i în fereastra Workspace. Comanda clear s, tergetoate variabilele definite până atunci (dispar s, i din fereastra Workspace).Dacă se scrie doar clear x atunci dispare doar variabila x

    Lista tuturor variabilelor se poate vedea s, i dacă se scrie comanda whoDacă se scrie comanda whos apare lista cu toate variabilele dar însot,ită

    de informat,ii suplimentare. Dacă se scrie comanda whos nume varia-bila apare variabila numită dar însot,ită de informat,ii suplimentare.

    Dacă o comandă este prea lungă sau se dores, te scrierea ei pe două linii,atunci se scrie ... acolo unde se dores, te să se rupă comanda, apoi setastează Enter, apoi se continuă scrierea comenzii.

  • 6 1. Introducere

    Exemplul 1.5 Comanda

    >> suma = 1 + 2 + 3 + ...

    5 +6 + 7 + 8 + 9 + 10

    afis, ează

    suma =

    55 �

    În anumite situat,ii nu se dores, te afis, area rezultatului. În aceste situat,iise scrie semnul

    ;

    la finalizarea comenzii.Pe o linie de comandă se pot scrie mai multe expresii, dar se vor separa

    folosind semnul ,Comenzile cu , la sfârs, it se vor efectua s, i se vor afis, a valorile obt,inute.

    Celor cu ; la sfârs, it nu li se vor afis, a valorile obt,inute.

    Exemplul 1.6 Comenzile

    >> a = 5, b=2*a, c = a + b; d = a + b + c

    afis, ează

    a =

    5

    b =

    10

    d =

    30 �

    Prin adăugarea semnului

    %

    în fat,a unui text acesta va deveni comentariu s, i nu va fi procesat de MAT-LAB.

    Formatul implicit de afis, are a valorilor numerice este de 4 zecimale.Mai există s, i alte formate posibile printre care amintim:

  • 1.4. Funcţii matematice 7

    ComandaMATLAB

    pi Comentarii

    format short 3.1416

    4 zecimale(modul implicit)(pentru numereîntre 0.001 s, i 1000,în rest e short e)

    format long 3.141592653589793

    15 zecimale(pentru numereîntre 0.001 s, i 100,în rest e long e)

    format short esauformat shorte

    3.1416e+00 4 zecimale s, i douăcifre exponent5

    format long esauformat longe

    3.141592653589793e+00 15 zecimale s, i douăcifre exponent

    format bank 3.14 2 zecimale

    format rat 355/113 aproximat deo fract,ie

    Ment,ionăm că modalitatea de afis, are a valorilor nu influent,ează valoa-rea lor; doar modalitatea de afis, are este schimbată.

    1.4 Funcţii matematice

    Operat,iile aritmetice elementare sunt

    Operat,ia Simbolul Exemplu

    Adunarea + 3.1 + 15

    Scăderea − 3.1 - 15

    Înmult,irea ∗ 3.1 ∗ 155 Scrierea 3.1416e+00 înseamnă 3.1416*1000.

  • 8 1. Introducere

    Împărt,irea(la dreapta)

    / 3.1/15 care este, prin definit,ie, 3.1*15−1

    Împărt,irea(la stânga)

    \ 3.1\15 care este, prin definit,ie, 3.1−1*15

    Puterea ^ 3.1 ^15

    Expresiile sunt operate de la stânga la dreapta. Ordinea în care se e-fectuează operat,iile este cea cunoscută deja: ridicarea la putere (are cel maimare nivel de precedent,ă), apoi înmult,irea s, i împărt,irea (au acelas, i nivel deprecedent,ă) s, i apoi adunarea s, i scăderea (au acelas, i nivel de precedent,ă).

    Evident, folosirea parantezelor schimbă orice ordine implicită (aceastafunct,ionează în cadrul unui set de paranteze).

    Funct,iile matematice elementare sunt date s, i explicate în Imaginile 1.1– 1.7 de la sfârs, itul acestei sect,iuni.

    Exemplul 1.7 Comenzile

    >> c_1 = 1-5i, c_2 = 1-5j, c_3 = complex(1,-5)

    afis, ează acelas, i lucru

    c_1 =1-5i

    c_2 =1-5i

    c_3 =1-5i �

    Exemplul 1.8 Comanda

    >> c_4 = 2*(3-4*sqrt(-1))

    afis, ează

    c_4 =6-8i

    iar% trebuie sin(.5)*i sau sin(.5)*1i% comanda sin(.5)i nu are nici o semnificatie>> c_5 = 2-sin(.5)*1i

    afis, ează

  • 1.4. Funcţii matematice 9

    c_5 =2.0000 - 0.4794i �

    Exemplul 1.9 Comenzile

    >> c_5r = real(c_5), c_5i = imag(c_5)

    afis, ează

    c_5r =2.0000

    c_5i =0.4794

    iar>> c_5a = abs(c_5)

    afis, ează

    c_5a =2.0567

    iar>> c_5unghi_r = angle(c_5) % unghiul in radiani

    afis, ează

    c_5unghi_r =0.2353

    iar% unghiul in grade>> c_5unghi_g = c_5unghi_r * 180/pi

    afis, ează

    c_5unghi_g =13.4802 �

    Exemplul 1.10 Comenzile

    % valoarea lui y se va obtine in radiani>> x = sqrt(2)/2 ; y = asin(x)

    afis, ează

    y =0.7854

    iar>> y_g = y * 180/pi % valoarea lui y in grade

  • 10 1. Introducere

    afis, ează

    y_g =45 �

    Exemplul 1.11 Avem următoarele comenzi de rotunjire a unui număr real:Comanda fix(x) reprezintă cel mai apropiat întreg de x înspre 0Comanda floor(x) reprezintă cel mai apropiat întreg de x înspre−∞(cel mai mare întreg din stânga lui x, adică partea întreaga a lui x)Comanda ceil(x) reprezintă cel mai apropiat întreg de x înspre +∞(cel mai mic întreg din dreapta lui x)Comanda round(x) reprezintă cel mai apropiat întreg de x

    Astfel

    >> x = 2.2; y = 2.6; z = -2.2; w = -2.6;>> x_1=fix(x), x_2=floor(x), x_3=ceil(x),>> x_4=round(x)

    afis, ează

    x_1 = 2 x_2 = 2 x_3 = 3 x_4 = 2

    iar

    >> y_1=fix(y), y_2=floor(y), y_3=ceil(y),>> y_4=round(y)

    afis, ează

    y_1 = 2 y_2 = 2 y_3 = 3 y_4 = 3

    iar

    >> z_1=fix(z), z_2=floor(z), z_3=ceil(z),>> z_4=round(z)

    afis, ează

    z_1 = -2 z_2 = -3 z_3 = -2 z_4 = -2

    iar

    >> w_1=fix(w), w_2=floor(w), w_3=ceil(w),>> w_4=round(w)

    afis, ează

    w_1 = -2 w_2 = -3 w_3 = -2 w_4 = -3 �

  • 1.4. Funcţii matematice 11

    Exemplul 1.12 Comanda

    % r = mod(a,b) reprezinta restul% impartirii lui a la b% (numita si impartirea a modulo b)% cu valoarea data de r = a - b.*floor(a./b)>> a = mod(5,-3), b = mod(-5,3)

    afis, ează

    a =-1

    b =1

    deoarece floor(-5/3)=-2iar a = 5− (−3) · (−2) = −1 iar b = (−5)− 3 (−2) = 1. �

    Exemplul 1.13 Comanda

    % r = rem(a,b) reprezinta restul% impartirii lui a la b% cu valoarea data de r = a - b.*fix(a./b)>> a = rem(5,-3), b = rem(-5,3)

    afis, ează

    a =2

    b =-1

    deoarece fix(-5/3)=-2iar a = 5− (−3) · (−1) = 2 iar b = (−5)− 3 (−1) = −2. �

    Exemplul 1.14 Comanda mod poate fi utilizată pentru a verifica dacă unnumăr este par sau nu (paritate înseamnă mod(a,2)==0 ).

    >> a = 7; rest1 = mod(a,2), rest2 = mod(-a,2)

    afis, ează

    rest1 =1

    rest2 =1

    deoarece floor(7/2)=3 s, i floor(-7/2)=-4deci 7− 2 · 3 = 1 iar −7− 2 · (−4) = 1. �

  • 12 1. Introducere

    Imaginea 1.1: Funcţii trigonometrice

    Section 2.7 Mathematical Functions 33

    These commands find the angle where the sine function has a value of 13/3. Note, again, that MATLAB uses radians, not degrees, in trigonometric functions. Other examples include the following:

    >> y = sqrt(3^2 + 4^2) % show 3-4-5 right triangle relationship

    y =

    5

    >> y = rem(23,4) % remainder function, 23/4 has a remainder of 3

    y =

    3

    >> x = 2.6, y1 = fix(x), y2 = floor(x), y3 = ceil(x), y4 = round(x)

    x =

    2.6000

    y1 =

    2

    y2 =

    2

    y3 =

    3

    y4 =

    3

    Trigonometric Function Description

    acos Inverse cosine returning radians

    acosd Inverse cosine returning degrees

    acosh Inverse hyperbolic cosine returning radians

    acot Inverse cotangent returning radians

    acotd Inverse cotangent returning degrees

    acoth Inverse hyperbolic cotangent returning radians

    acsc Inverse cosecant returning radians

    acscd Inverse cosecant returning degrees

    acsch Inverse hyperbolic cosecant returning radians

    asec Inverse secant returning radians

    asecd Inverse secant returning degrees

  • 1.4. Funcţii matematice 13

    Imaginea 1.2: Funcţii trigonometrice (continuare)34 Chapter 2 Basic Features

    Trigonometric Function Description

    asech Inverse hyperbolic secant returning radians

    asin Inverse sine returning radians

    asind Inverse sine returning degrees

    asinh Inverse hyperbolic sine returning radians

    atan Inverse tangent returning radians

    atand Inverse tangent returning degrees

    atanh Inverse hyperbolic tangent returning radians

    atan2 Four-quadrant inverse tangent returning radians

    cos Cosine returning radians

    cosd Cosine of argument in degrees

    cosh Hyperbolic cosine returning radians

    cot Cotangent returning radians

    cotd Cotangent of argument in degrees

    coth Hyperbolic cotangent returning radians

    csc Cosecant returning radians

    cscd Cosecant of argument in degrees

    csch Hyperbolic cosecant returning radians

    hypot Square root of sum of squares

    sec Secant returning radians

    secd Secant of argument in degrees

    sech Hyperbolic secant returning radians

    sin Sine returning radians

    sind Sine returning degrees

    sinh Hyperbolic sine returning radians

    tan Tangent returning radians

    tand Tangent returning degrees

    tanh Hyperbolic tangent returning radians

  • 14 1. Introducere

    Imaginea 1.3: Funcţii exponenţiale şi putereSection 2.7 Mathematical Functions 35

    Exponential Function Description

    ^ Power

    exp Exponential

    expm1 Exponential minus 1 [i.e., exp(x) � 1]

    log Natural logarithm

    log10 Base 10 logarithm

    log1p Natural logarithm of x � 1 [i.e., log(x � 1)]

    log2 Base 2 logarithm and floating-point number dissection

    nthroot nth real root of real numbers

    pow2 Base 2 power and floating-point number scaling

    reallog Natural logarithm limited to real nonnegative values

    realpow Power limited to real-valued arguments

    realsqrt Square root limited to real-valued values

    sqrt Square root

    nextpow2 Next higher power of 2

    Complex Function Description

    abs Absolute value or magnitude

    angle Phase angle in radians

    conj Complex conjugate

    imag Imaginary part

    real Real part

    unwrap Unwraps phase angle

    isreal True for real values

    cplxpair Sorts vector into complex conjugate pairs

    complex Forms complex number from real and imaginary parts

    sign Signum function

    Imaginea 1.4: Funcţii complexe

    Section 2.7 Mathematical Functions 35

    Exponential Function Description

    ^ Power

    exp Exponential

    expm1 Exponential minus 1 [i.e., exp(x) � 1]

    log Natural logarithm

    log10 Base 10 logarithm

    log1p Natural logarithm of x � 1 [i.e., log(x � 1)]

    log2 Base 2 logarithm and floating-point number dissection

    nthroot nth real root of real numbers

    pow2 Base 2 power and floating-point number scaling

    reallog Natural logarithm limited to real nonnegative values

    realpow Power limited to real-valued arguments

    realsqrt Square root limited to real-valued values

    sqrt Square root

    nextpow2 Next higher power of 2

    Complex Function Description

    abs Absolute value or magnitude

    angle Phase angle in radians

    conj Complex conjugate

    imag Imaginary part

    real Real part

    unwrap Unwraps phase angle

    isreal True for real values

    cplxpair Sorts vector into complex conjugate pairs

    complex Forms complex number from real and imaginary parts

    sign Signum function

  • 1.4. Funcţii matematice 15

    Imaginea 1.5: Funcţii de rotunjire36 Chapter 2 Basic Features

    Rounding and Remainder Function

    Description

    fix Rounds toward zero

    floor Rounds toward negative infinity

    ceil Rounds toward positive infinity

    round Rounds toward nearest integer

    mod Modulus or signed remainder

    rem Remainder after division

    idivide Integer division with rounding option

    sign Signum function

    Coordinate Transformation Function

    Description

    cart2sph Cartesian to spherical

    cart2pol Cartesian to cylindrical or polar

    pol2cart Cylindrical or polar to Cartesian

    sph2cart Spherical to Cartesian

    Number Theoretic Function Description

    factor Prime factors

    isprime True for prime numbers

    primes Generates list of prime numbers

    gcd Greatest common divisor

    lcm Least common multiple

    rat Rational approximation

    rats Rational output

    perms All possible combinations

    nchoosek All combinations of N elements taken K at a time

    factorial Factorial function

    Imaginea 1.6: Funcţii de transformări de coordonate

    36 Chapter 2 Basic Features

    Rounding and Remainder Function

    Description

    fix Rounds toward zero

    floor Rounds toward negative infinity

    ceil Rounds toward positive infinity

    round Rounds toward nearest integer

    mod Modulus or signed remainder

    rem Remainder after division

    idivide Integer division with rounding option

    sign Signum function

    Coordinate Transformation Function

    Description

    cart2sph Cartesian to spherical

    cart2pol Cartesian to cylindrical or polar

    pol2cart Cylindrical or polar to Cartesian

    sph2cart Spherical to Cartesian

    Number Theoretic Function Description

    factor Prime factors

    isprime True for prime numbers

    primes Generates list of prime numbers

    gcd Greatest common divisor

    lcm Least common multiple

    rat Rational approximation

    rats Rational output

    perms All possible combinations

    nchoosek All combinations of N elements taken K at a time

    factorial Factorial function

    Imaginea 1.7: Funcţii din teoria numerelor

    36 Chapter 2 Basic Features

    Rounding and Remainder Function

    Description

    fix Rounds toward zero

    floor Rounds toward negative infinity

    ceil Rounds toward positive infinity

    round Rounds toward nearest integer

    mod Modulus or signed remainder

    rem Remainder after division

    idivide Integer division with rounding option

    sign Signum function

    Coordinate Transformation Function

    Description

    cart2sph Cartesian to spherical

    cart2pol Cartesian to cylindrical or polar

    pol2cart Cylindrical or polar to Cartesian

    sph2cart Spherical to Cartesian

    Number Theoretic Function Description

    factor Prime factors

    isprime True for prime numbers

    primes Generates list of prime numbers

    gcd Greatest common divisor

    lcm Least common multiple

    rat Rational approximation

    rats Rational output

    perms All possible combinations

    nchoosek All combinations of N elements taken K at a time

    factorial Factorial function

  • Capitolul 2

    Matrice

    Elementul de bază al MATLAB este tabloul (array). Chiar s, i o variabilăscalară este văzut tot ca o un tablou de tip 1× 1. Cel mai des utilizate sunttablourile bidimensionale, numite matrice, care au elementele aranjate înmlinii s, i n coloane. Vectorii de tip linie (i.e. m = 1) s, i vectorii de tip coloană(i.e. n = 1) sunt cazuri particulare de matrice bidimensionale. Tablourile s, idimensiunile lor nu sunt declarate în mod explicit.

    În MATLAB există mai multe modalităt,i prin care se poate genera o ma-trice. Modalitatea explicită înseamnă utilizarea parantezelor pătrate întrecare se precizează fiecare element al matricei; trecerea de la o coloană la altase face adăugând semnul , sau un spat,iu gol iar trecerea de la o linie la altase face adăugând semnul ; sau tastând Enter.

    Elementele unei matrice pot fi numere reale sau numere complexe sauorice alte expresii matematice.

    Exemplul 2.1 Comanda>> a = [1 ; 2 ; 3 ; 4]

    afis, ează vectorul:a =

    1

    2

    3

    4�

    Exemplul 2.2 Comanda

    17

  • 18 2. Matrice

    >> A = [1 2 ; 3 4]

    sau>> A = [1 2

    3 4]

    sau>> A = [1, 2 ; 3, 4]

    afis, ează acelas, i lucru:A =

    1 2

    3 4�

    Exemplul 2.3 Comenzile>> a = [1 2 3 4];

    >> size(a)

    nu afis, ează vectorul a, dar afis, ează mărimea lui, adică afis, ează un vectorcu două elemente: numărul de linii s, i numărul de coloane al vectorului a

    ans =

    1 4

    iar comanda>> length(a)

    afis, ează mărimea vectorului aans =

    4 �

    Exemplul 2.4 Comenzile>> A = [1 2 ; 3 4];

    >> size(A)

    nu afis, ează matricea A, dar afis, ează mărimea matricei A, adică afis, eazăun vector cu două elemente: numărul de linii s, i numărul de coloane

    ans =

    2 2 �

  • 19

    Pentru a produce transpusa, rangul, determinantul s, i inversa avem ladispozit,ie comenzile:

    ComandaMATLAB

    Semnificat,ia

    A.’ transpusa matricei A

    A’ transpusa conjugată a matricei A(fiecare element al transpusei lui A este s, i conjugat)

    rank(A) rangul matricei A

    det(A) determinantul matricei A

    inv(A) inversa matricei A

    A^p este Ap, dacă p∈ N∗

    A^p este [inv(A)]-p, dacă (-p)∈ N∗

    A^p este determinată folosind valorile proprii, dacă p /∈ Z∗

    Exemplul 2.5 Comenzile>> A = [1 2 ; 3 4]; A.’

    afis, ează transpusa matricei Aans =

    1 3

    2 4

    iar>> A’afis, ează acelas, i lucru. �

    Exemplul 2.6 Comenzile>> A = [1-i 2+i ; 3-2i 4-3i]; A.’

    afis, ează transpusa matricei Aans =

    1-i 3-2i

    2+i 4-3i

    iar>> A’

    afis, ează transpusa conjugată a matricei A

  • 20 2. Matrice

    ans =

    1+i 3+2i

    2-i 4+3i�

    MATLAB are un set comenzi care produc matrice cu valori speciale,utile în general sau utile în anumite discipline. Printre acestea amintim:

    Comanda MATLAB Semnificat,ia

    [ ] o matrice fără cont,inut

    zeros(l,c) o matrice cu l linii s, i c coloane6s, i

    cu toate elementele 0

    ones(l,c) o matrice cu l linii s, i c coloane s, icu toate elementele 1

    eye(l,c) o matrice cu l linii s, i c coloane s, icu 1 pe diagonală s, i 0 în rest

    blkdiag(A1,A2,...)o matrice diagonală cu matriceleA1, A2, . . . pe diagonală(s, i în rest doar 0)

    repmat(A,l,c) o matrice bloc obt,inută prin replicareamatricei A pe l linii s, i c coloane

    Matricele pot fi construite s, i cu ajutorul altor matrice, adică sub formă deblocuri de alte matrice.

    Exemplul 2.7 Comenzile

    >> A = [1 2 ; 3 4];

    >> B = [A zeros(2,4) ; eye(4,2) ones(4) ; 10:-2:-1]

    nu afis, ează matricea A, dar afis, ează matricea B. Aceasta este scrisă peblocuri (a fost creată cu ajutorul altor matrice).

    B =

    6 Dacă se doreşte o matrice pătratică (la toate comenzile din acest tabel), atunci se poaterenunţa la scrierea ambelor variabile. De exemplu, dacă se scrie zeros(3) se obţine omatrice pătratică de dimensiune 3 cu toate elementele 0

  • 21

    1 2 0 0 0 0

    3 4 0 0 0 0

    1 0 1 1 1 1

    0 1 1 1 1 1

    0 0 1 1 1 1

    0 0 1 1 1 1

    10 8 6 4 2 0�

    Exemplul 2.8 Comenzile>> A = [1 2 3 ; 4 5 6]; B = [A; -1 -2 -3]

    adaugă la matricea A linia a 3-a suplimentară:B =

    1 2 3

    4 5 6

    -1 -2 -3�

    Exemplul 2.9 Comenzile>> A = [1 2 3 ; 4 5 6]; B = [-1 -2 -3 ; A]

    adaugă la matricea A o primă linie suplimentară:B =

    -1 -2 -3

    1 2 3

    4 5 6�

    Exemplul 2.10 Comenzile>> A = [1 2 3 ; 4 5 6] ; x = [-1 -2]’ ; B = [A , x]

    adaugă la matricea A coloana a 4-a suplimentară:B =

    1 2 3 -1

    4 5 6 -2�

  • 22 2. Matrice

    Exemplul 2.11 Comenzile>> A = [1 2 3 ; 4 5 6] ; x = [-1 -2]’ ; B = [x , A]

    adaugă la matricea A o primă coloană suplimentară:A =

    -1 1 2 3

    -2 4 5 6�

    Exemplul 2.12 Comenzile

    >> A = [1 2 ; 3 4]; C = blkdiag(A,ones(2))

    afis, ează matricea C:

    C =

    1 2 0 0

    3 4 0 0

    0 0 1 1

    0 0 1 1�

    Exemplul 2.13 Comenzile

    >> A = [1 2 ; 3 4]; D = repmat(A,2,3)

    afis, ează matricea D:

    D =1 2 1 2 1 2

    3 4 3 4 3 4

    1 2 1 2 1 2

    3 4 3 4 3 4�

    Exemplul 2.14 Dacă vrem că creăm o matrice cu acelas, i element peste tot,avem la dispozit,ie mai multe variante. Astfel următoarele comenzi (lescriem în ordine: de la cea mai lentă la cea mai rapidă):

    >> A = pi*ones(2,3), B = pi+zeros(2,3),>> x = pi, C = x(ones(2,3)), D = repmat(pi,2,3)

    afis, ează aceeas, i matrice:

  • 23

    3.1416 3.1416 3.1416

    3.1416 3.1416 3.1416�

    Simulările din cadrul aplicat,iilor (din matematică, fizică etc.) cer de-seori crearea s, i utilizarea de numere aleatoare. MATLAB are trei comenzi(rand, randn s, i randi) care pot fi folosite pentru obt,inerea de numereaaleatoare:

    Comanda MATLAB Semnificat,ia

    rand un numar uniform distribuit intre 0 si 1

    rand(l,c)o matrice cu l linii s, i c coloane s, icu toate elementele distribuiteuniform între 0 s, i 1

    randperm(n)un vector linie cu n elemente care suntpermutări aleatoare ale numerelorde la 1 la n

    randn(l,c)

    o matrice cu l linii s, i c coloane s, icu toate elementele distribuite normal standard(adică distribut,ia normalăde medie 0 s, i dispersie 1)

    randi(n) un numar întreg uniform distribuit intre 1 si n

    randi(n,l,c)o matrice cu l linii s, i c coloane s, icu toate elementele întregi s, idistribuite uniform între 1 s, i n

    Este cunoscut, din cadrul Teoriei Probabilităt,ilor, că dacă se dores, te genera-rea unor elemente distribuite uniform între două numere reale a s, i b, atuncifolosim relat,ia de legătură: variabila aleatoare X este distribuită uniformîntre 0 s, i 1 dacă s, i numai dacă (b− a)X + a este distribuită uniform între as, i b.

    De asemenea, variabila aleatoare X este distribuită normal standard,adică de medie 0 s, i dispersie (variant,ă) 1, dacă s, i numai dacă

    √σ2X +m

    este distribuită normal de medie m s, i dispersie (variant,ă) σ2.

    Exemplul 2.15 Comenzile>> A = rand(2,3) , B = 9*rand(2,3)+1

  • 24 2. Matrice

    generează o matrice A de tip 2 × 3 cu elementele fiind numere realedistribuite uniform între 0 s, i 1 s, i o matrice B de tip 2 × 3 cu elementelefiind numere reale distribuite uniform între 1 s, i 10

    A =0.96 0.80 0.42

    0.49 0.14 0.91B =

    7.35 3.49 1.87

    1.29 1.42 8.41�

    Exemplul 2.16 Comenzile>> A = randn(2,3) , B = 0.2*randn(2,3)+10

    generează o matrice A de tip 2 × 3 cu elementele fiind numere realedistribuite normal standard (distribuite normal, cu media 0 s, i dispersia1 ) s, i o matrice B de tip 2 × 3 cu elementele fiind numere reale distribuitenormal cu media 10 s, i dispersia 0.22. �

    Exemplul 2.17 Comenzile>> A = randi(10,2,3)

    generează o matrice A de tip 2 × 3 cu elementele fiind numere întregidistribuite uniform între 1 s, i 10. �

    Pentru a construi tablouri sunt utile s, i comenzile:

    ComandaMATLAB

    Semnificat,ia

    x = a:b se generează un vector linie cu numerede la a la b (numere reale) s, i cu pasul 1

    x = a:h:b se generează un vector linie cu numerede la a la b (numere reale) s, i cu pasul h

    x = linspace(a,b,n) se generează un vector liniecu n numere echidistante de la a la b

    x = logspace(a,b,n) se generează un vector linie cu n numerede la 10a la 10b s, i spat,iate logaritmic7

    7 De fapt, se generează n numere echidistante de la a la b: a1=a,a2,...,an−1,an=bs, i apoi se scrie vectorul linie 10a1 ,10a2 ,10a3 ,. . . ,10an .

  • 25

    Exemplul 2.18 Comanda>> x = 0:3:10

    afis, ează un vector linie, cu elemente echidistante de la 0 la 10, cu pasul3:

    x =

    0 3 6 9

    Comanda>> x = (0:0.1:1)*pi

    afis, ează un vector linie cu 11 coloane, cu elemente echidistante de la 0la 1, cu pasul 0.1 s, i apoi fiecare element al vectorului înmult,it cu π. �

    MATLAB are un set comenzi prin care se pot manipula matricele. Printreacestea amintim:

    Comanda MATLAB Semnificat,ia

    flipud(A)rotirea matricei A în jurulaxei orizontale de simetrie(flip up-down)

    fliplr(A)rotirea matricei A în jurulaxei verticale de simetrie(flip left-right)

    rot90(A) rotirea matricei A cu 90 de gradeîn sens direct trigonometric

    rot90(A,2) rotirea matricei A cu 2*90 de gradeîn sens direct trigonometric

    reshape(A,m,n)

    doar o matrice A care are m×n elementepoate fi rearanjată în m linii s, i n coloane(se scriu toate coloanele lui A, începând cu prima,una sub alta s, i apoi se rearanjează elementele)

    diag(A)rezultatul este un vector coloanăcu diagonala matricei A(A nu e neapărat pătratică)

    diag(a)rezultatul este o matrice diagonalăcu vectorul a pus pe diagonală(restul elementelor sunt 0)

  • 26 2. Matrice

    triu(A)

    extrage partea triunghiular superioarădin matricea A (nu neapărat pătratică)(restul elementelor sunt 0)(upper triangular)

    tril(A)

    extrage partea triunghiular inferioarădin matricea A (nu neapărat pătratică)(restul elementelor sunt 0)(lower triangular)

    Exemplul 2.19 Comenzile

    >> A = [1 2 3 ; 4 5 6], B = reshape(A,3,2)

    afis, ează

    A =

    1 2 3

    4 5 6

    apoi produce matricea coloană cu toate coloanele lui A puse una subalta apoi le reordonează:

    B =

    1 5

    4 3

    2 6�

    Exemplul 2.20 Comenzile

    >> A = 1:12 ;>> B = A’ ; C = reshape(B,3,4)

    afis, ează

    C =

    1 4 7 10

    2 5 8 11

    3 6 9 12

    Comanda D = reshape(A,3,4) va afis, a aceeas, i matrice C.Iar comanda

  • 27

    >> E = C’

    afis, ează

    E =

    1 2 3

    4 5 6

    7 8 9

    10 11 12�

    Exemplul 2.21 Comenzile

    >> A = 1:12 ;>> B = A’ ; C = reshape(B,4,3)

    afis, ează

    C =

    1 5 9

    2 6 10

    3 7 11

    4 8 12

    Comanda D = reshape(A,4,3) va afis, a aceeas, i matrice C.Iar comanda

    >> E = C’

    afis, ează

    E =

    1 2 3 4

    5 6 7 8

    9 10 11 12�

    Exemplul 2.22 Comenzile>> A = reshape(1:12,4,3), B = A’afis, ează

    A =

  • 28 2. Matrice

    1 5 9

    2 6 10

    3 7 11

    4 8 12

    B =1 2 3 4

    5 6 7 8

    9 10 11 12�

    Exemplul 2.23 Comenzile

    >> A = [1 2 3 ; 4 5 6 ; 7 8 9];>> b = diag(A)>> C = diag(diag(A))>> D = A-diag(diag(A))>> E = triu(A)-diag(diag(A))

    afis, ează vectorul b dat de diagonala lui A:b =

    1

    5

    9

    s, i matricea C (matricea A din care am păstrat doar diagonala ei):C =

    1 0 0

    0 5 0

    0 0 9

    s, i matricea D (matricea A fără diagonala ei):D =

    0 2 3

    4 0 6

    7 8 0

    precum s, i partea triunghiular superioară a matricei A dar fără diago-nala principală:

  • 29

    E =

    0 2 3

    0 0 6

    0 0 0�

    Avem următoarele generalizări în ceea ce proves, te diag s, i triu s, itril

    ComandaMATLAB

    Semnificat,ia

    diag(a,k)

    rezultatul este o matrice diagonalăcu vectorul a pus pe diagonală principală translată cuk unităt,i deasupra (pentru k>0)sau cu k unităt,i dedesubt (pentru k> a = [1 2 3];

    >> A_1 = diag(a), A_2 = diag(a,1), A_3 = diag(a,-2)

    afis, ează matricele:A_1 =

    1 0 0

    0 2 0

    0 0 3

    A_2 =

  • 30 2. Matrice

    0 1 0 0

    0 0 2 0

    0 0 0 3

    0 0 0 0

    A_3 =

    0 0 0 0 0

    0 0 0 0 0

    1 0 0 0 0

    0 2 0 0 0

    0 0 3 0 0�

    2.1 Utilizarea semnului : în manipularea matricelor

    Elementele unui vector a pot fi apelate scriind a(i) iar elementele uneimatrice A pot fi apelate scriind A(i,j)

    Mai există s, i varianta de apelare A(n), unde n este indexul elementuluimatricei A. Indexarea se face astfel: se scriu toate coloanele lui A, începândcu prima, una sub alta s, i apoi se numerotează elementele; adică elementelematricei coloană A(:).

    Exemplul 2.25 Comenzile

    >> A = 1:12 ; B = A’ ; C = reshape(B,3,4);>> elem1 = C(1,3) , elem2 = C(7)

    afis, ează aceeas, i valoare:

    elem1 = 7 s, i elem2 = 7 �

    Dacă se dores, te o întreagă submatrice a matricei A, atunci se scrie

    A(i:j,k:l)

    s, i se obt,ine submatricea cu elementele de la linia i până j s, i de la coloanak până l

    Dacă se dores, te coloana c a lui A, atunci se scrie

    A(:,c)

  • 2.1. Utilizarea semnului : în manipularea matricelor 31

    iar dacă se dores, te linia l a lui A, atunci se scrie

    A(l,:)

    iar dacă se scrieA(:)

    se obt,in un vector coloană cu toate elementele matricei A (este exact coloanape care comanda reshape(A,m,n) o rearanjează apoi pe m linii s, i n coloa-ne).

    Dacă se scrieA(:,k:l)

    se obt,ine partea matricei A de la coloana k până la coloana l iar dacă sescrie

    A(i:j,:)

    se obt,ine partea matricei A de la linia i până la linia j.Similar, dacă se scrie

    a(k:l)

    se obt,ine partea vectorului a de la elementul k până la elementul l.

    Exemplul 2.26 Comanda>> x = (0:0.1:1)*pi , x_2 = x(2)afis, ează al 2-lea element al vectorului x:x_2 =

    3.142Comanda>> x_1_3 = x(1:3)

    afis, ează elementele vectorului x de la primul până la al 3-lea:x_1_3 =

    0 0.3142 0.6283

    Comanda>> x_6_end = x(6:end)

    afis, ează elementele vectorului x de la al 6-lea până la ultimul.iar comanda>> x_6_11 = x(6:11)

    afis, ează acelas, i lucru (vectorul are 11 elemente). �

  • 32 2. Matrice

    Exemplul 2.27 Comenzile (vezi Exemplele 2.20–2.22)>> A = (reshape(1:12,4,3))’ ; B = A(:,2:3)

    afis, ează o parte a matricei A, cea de la linia 1 până la linia 3 s, i de lacoloana a 2-a până la coloana a 3-a:

    B =

    2 3

    6 7

    10 11

    (comanda B = A(1:3,2:3) are acelas, i efect). �

    Exemplul 2.28 Comenzile>> A = (reshape(1:12,4,3))’ ; x = [0 0 0]’;>> B = [ A(:,1:2) , x , A(:,3:4) ]

    inserează coloana x între coloanele 2 s, i 3 ale matricei A (am compuso nouă matrice din coloanele 1-2 din A, apoi am adăugat coloana x, apoicoloanele 3-4):

    B =

    1 2 0 3 4

    5 6 0 7 8

    9 10 0 11 12

    (comanda B=[A(1:3,1:2),x,A(1:3,3:4)] are acelas, i efect). �

    Exemplul 2.29 Comenzile>> A = (reshape(1:12,4,3))’ ; x = [0 0 0 0];>> B = [ A(1:2,:) ; x ; A(3,:)]

    inserează linia x între liniile 2 s, i 3 ale matricei A (am compus o nouămatrice din liniile 1-2 din A, apoi am adăugat linia x, apoi linia 3):

    B =

    1 2 3 4

    5 6 7 8

    0 0 0 0

    9 10 11 12

    (comanda B=[A(1:2,1:4);x;A(3,1:4)] are acelas, i efect). �

  • 2.1. Utilizarea semnului : în manipularea matricelor 33

    Alte modalităt,i prin care MATLAB poate crea s, i manipula matrice suntdate de următoarele exemple concrete, dar importante.

    Exemplul 2.30 Comenzile>> a = 7 ; a(ones(3,4))

    afis, ează o matrice de tip 3× 4 cu valoarea a pe orice pozit,ieans =

    7 7 7 7

    7 7 7 7

    7 7 7 7�

    Exemplul 2.31 Comenzile>> a = 12:-1:5 ; a(3) = 99

    afis, ează vectorul a cu elementul de pe pozit,ia 3 înlocuit cu 99:a =

    12 11 99 9 8 7 6 5�

    Exemplul 2.32 Comenzile>> a = 1:4 ; a(8) = 99

    afis, ează vectorul a cu elementul de pe pozit,ia 8 înlocuit cu 99; dacăaceste pozit,ii nu există în vectorul a, atunci se extinde vectorul punând 0 :

    a =

    1 2 3 4 0 0 0 99

    Similar, comanda>> b(8) = 99

    afis, ează vectorul b (care nu a fost definit în prealabil) cu elementul depe pozit,ia 8 înlocuit cu 99; dacă aceste pozit,ii nu există în vectorul b,atunci se extinde vectorul punând 0 :

    b =

    0 0 0 0 0 0 0 99�

    Exemplul 2.33 Comenzile>> A = (reshape(1:12,4,3))’ ; A(2,3) = 99

    afis, ează matricea A cu elementul de pe pozit,ia (2, 3) înlocuit cu 99:

  • 34 2. Matrice

    A =

    1 2 3 4

    5 6 99 8

    9 10 11 12�

    Exemplul 2.34 Comenzile>> A = (reshape(1:12,4,3))’ ; A(2,7) = 99

    afis, ează matricea A cu elementul de pe pozit,ia (2, 7) înlocuit cu 99;dacă această pozit,ie nu există în matricea A, atunci se extinde matricea Apunând 0 în rest:

    B =

    1 2 3 4 0 0 0

    5 6 7 8 0 0 99

    9 10 11 12 0 0 0�

    Exemplul 2.35 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:) = 99

    afis, ează matricea A cu toate elementele înlocuite cu 99:A =

    99 99 99 99

    99 99 99 99

    99 99 99 99�

    Exemplul 2.36 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,3) = 99

    afis, ează matricea A cu coloana a 3-a înlocuită cu 99:A =

    1 2 99 4

    5 6 99 8

    9 10 99 12

    (funct,ionează s, i varianta de înlocuire a unei linii). �

  • 2.1. Utilizarea semnului : în manipularea matricelor 35

    Exemplul 2.37 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,3)=[99 100 101]

    afis, ează matricea A cu coloana a 3-a înlocuită cu coloana [99 100101]’:

    A =

    1 2 99 4

    5 6 100 8

    9 10 101 12

    (funct,ionează s, i varianta de înlocuire a unei linii).Acelas, i efect îl are s, i comanda A(:,3)=[99 100 101]’ �

    Exemplul 2.38 Comenzile>> A = (reshape(1:12,4,3))’ ;>> A(:,3:4)=[99 100 101; 0 0 0]’

    afis, ează matricea A cu coloanele de la a 3-a până la a 4-a înlocuite cumatricea [99 100 101; 0 0 0]’:

    A =

    1 2 99 0

    5 6 100 0

    9 10 101 0

    (funct,ionează s, i varianta de înlocuire a unor linii). �

    Exemplul 2.39 Comenzile>> a = 1:4 ; a(5:7) = 10:3:18

    afis, ează vectorul a cu elementele de la al 5-lea până la al 7-lea suntînlocuite cu [10 13 16]; dacă aceste pozit,ii nu există în vectorul a, a-tunci se extinde vectorul (eventual se adaugă s, i 0 acolo unde nu este pre-cizată nici o valoare):

    a =

    1 2 3 4 10 13 16�

    Exemplul 2.40 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,6) = [99 100 101]

  • 36 2. Matrice

    afis, ează matricea A cu coloana a 6-a înlocuită cu coloana [99 100101]’; dacă această pozit,ie nu există în matricea A, atunci se extinde ma-tricea A punând 0 în rest:

    A =

    1 2 3 4 0 99

    5 6 7 8 0 100

    9 10 11 12 0 101

    (funct,ionează s, i varianta de adăugare a unei linii noi). �

    Exemplul 2.41 Comenzile>> a = 1:12 ; a(2:4) = [ ]

    afis, ează vectorul a cu elementele de la 2 până la 4 eliminate:a =

    1 5 6 7 8 9 10 11 12�

    Exemplul 2.42 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,3) = [ ]

    afis, ează matricea A cu coloana a 3-a eliminată:A =

    1 2 4

    5 6 8

    9 10 12�

    Exemplul 2.43 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,1:2) = [ ]

    afis, ează matricea A cu coloanele de la 1 până la 2 eliminate:A =

    3 4

    7 8

    11 12�

    Exemplul 2.44 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,[1 3]) = [ ]

  • 2.1. Utilizarea semnului : în manipularea matricelor 37

    afis, ează matricea A cu coloanele 1 s, i 3 eliminate:A =

    2 4

    6 8

    10 12�

    Exemplul 2.45 Comenzile>> A = (reshape(1:12,4,3))’ ; A(2,:) = [ ]

    afis, ează matricea A cu linia a 2-a eliminată:A =

    1 2 3 4

    9 10 11 12�

    Exemplul 2.46 Comenzile>> A = (reshape(1:12,4,3))’ ; A(2:3,:) = [ ]

    afis, ează matricea A cu liniile de la 2 până la 3 eliminate:A =

    1 2 3 4�

    Exemplul 2.47 Comenzile>> A = (reshape(1:12,4,3))’ ; A([1 3],:) = [ ]

    afis, ează matricea A cu liniile 1 s, i 3 eliminate:A =

    5 6 7 8�

    Exemplul 2.48 Comenzile>> A = (reshape(1:12,4,3))’ ; A(:,[2,4])=A(:,[4,2])

    afis, ează matricea A cu coloanele 2 s, i 4 schimbate între ele:A =

    1 4 3 2

    5 8 7 6

    9 12 11 10

    (funct,ionează s, i varianta de schimbare între ele a două linii). �

  • 38 2. Matrice

    2.2 Operarea element cu element

    Operat,iile cu matrice sunt aceleas, i cu cele date de tabelul de la pagina7, din cazul numerelor. Ment,ionăm că operat,iile pot fi efectuate atât în sensmatriceal cât s, i element cu element (în ambele cazuri dimensiunile trebuiesă fie astfel încât operat,iile să poată fi făcute).

    Precizăm doar că, în cazul împărt,irii,

    ComandaMATLAB

    Semnificat,ia

    A/B este8solut,ia X a sistemului X*B = A

    A\B este9solut,ia X a sistemului A*X = B

    În cazul operat,iilor element cu element, fie două matrice A = (ai,j) s, iB = (bi,j) . Atunci

    ComandaMATLAB10

    Semnificat,ia

    A.*Brezultatul este o matrice cu elementele ai,j · bi,j(se poate ca B să fie s, i scalar)

    A.^B rezultatul este o matrice cu elementele (ai,j)bi,j

    (se poate ca B să fie s, i scalar)

    A./B rezultatul este o matrice cu elementele ai,j/bi,j := ai,j · b−1i,j

    (se poate ca B să fie s, i scalar)

    A.\B rezultatul este o matrice cu elementele ai,j\bi,j := a−1i,j · bi,j

    (se poate ca B să fie s, i scalar)

    Pentru a obt,ine produsul scalar sau cel vectorial dintre doi vectori x s, i yavem la dispozit,ie comenzile:

    8 Înmult,ind cu B^(-1) în partea dreaptă obt,inem că rezultatul X este matriceaA*B^(-1).

    9 Înmult,ind cu A^(-1) în partea stângă obt,inem că rezultatul X este matricea A^(-1)*B.Cu toate acestea, pentru a determina vectorul X, MATLAB nu calculează inversa A^(-1)(care foloses, te o metodă mai put,in precisă) ci aplică o metodă numerică care rezolvă efectivsistemul A*X = B, mai precis metoda de eliminare a lui Gauss (diferent,ele de precizie sevăd dacă matricele sunt de dimensiuni mari).

    10 Nu trebuie lăsat un spat,iu liber înainte de operator. Astfel, comanda A. *B va pro-duce o eroare.

  • 2.2. Operarea element cu element 39

    ComandaMATLAB

    Semnificat,ia

    x*y’rezultatul este înmult,irea liniei x cu coloana y’(adică produsul scalar dintre vectorii linie x s, i y )

    dot(x,y) rezultatul este produsul scalar dintre vectorii x s, i y

    cross(x,y) rezultatul este produsul vectorial dintre vectorii x s, i y

    Exemplul 2.49 Comenzile

    >> A = [1 2 3 ; 4 5 6 ; 7 8 9]; dif = A - 5*A

    afis, ează diferent,a matricelor A cu 5*A.

    Comanda

    >> a = 1./A

    afis, ează matricea cu elementele 1/ai,j = (ai,j)−1 :a =

    1.0000 0.5000 0.3333

    0.2500 0.2000 0.1667

    0.1429 0.1250 0.1111

    Comenzile

    >> B = ones(3); b = B./A

    afis, ează matricea cu elementele bij/ai,j = bij (ai,j)−1 :b =

    1.0000 0.5000 0.3333

    0.2500 0.2000 0.1667

    0.1429 0.1250 0.1111

    Comanda

    >> c = A^2

    afis, ează pătratul matricei matricei A; trebuie ca dimensiunile să fie astfelîncât sa se poate efectua înmult,irea matricelor A cu A.

    Comanda

  • 40 2. Matrice

    >> d = A.^2

    afis, ează matricea A cu fiecare element ridicat la pătrat:d =

    1 4 9

    16 25 36

    49 64 81

    Comanda

    >> e = A.^(-1)

    afis, ează matricea cu elementele (ai,j)−1 .

    Comanda

    >> f = 2.^A

    afis, ează matricea cu elementele 2ai,j .

    Comanda

    >> g = A.^B

    afis, ează matricea cu elementele (ai,j)bi,j . �

    2.3 Analiza datelor

    MATLAB poate realiza o analiză statistică a seturilor de date. Acestedate sunt, mai întâi, organizate s, i reprezentate în tablouri.

    Ca o convent,ie, fiecare coloană a tabloului reprezintă rezultatele mă-surării aceleas, i variabile pentru fiecare element al es, antionului (al select,ieistatistice) considerat (de exemplu, punctajele obt,inute la disciplina D1 decătre fiecare elev în parte din es, antionul considerat) iar fiecare linie reprez-intă un set observat,ii citite pentru un element al es, antionului (de exem-plu, punctajele obt,inute la disciplinele D1, D2, D3,. . . de către un elev dines, antionul considerat).

    Printre comenzile legate de analiza datelor amintim pe următoarele.Acestea se pot aplica atât unei matrice A, cât s, i unui vector a (linie saucoloană). În caz că se aplică unei matrice, aceste comenzi act,ionează asuprafiecărei coloane în parte; astfel rezultatul va fi un vector linie (cu un numărde coloane egal cu coloanele matricei A).

  • 2.3. Analiza datelor 41

    Comanda MATLAB Semnificat,ia

    max(A) maximul elementelor fiecărei coloane a matricei A

    min(A) minimul elementelor fiecărei coloane a matricei A

    mean(A) media aritmetică a elementelor fiecăreicoloane a matricei A

    median(A) mediana elementelor fiecărei coloane a matricei A

    var(A) dispersia (sau variant,a) elementelor fiecăreicoloane a matricei A

    std(A) deviat,ia standard elementelor fiecăreicoloane a matricei A

    cov(A) matricea cu coeficient,ii de covariant,ăasociat,i coloanelor matricei A

    corrcoef(A) matricea cu coeficient,ii de corelat,ieasociat,i coloanelor matricei A

    sort(A) aranjarea în ordine crescătoare a elementelorfiecărei coloane a matricei A

    sum(A) suma elementelor fiecărei coloane a matricei A

    cumsum(A) suma cumulată a elementelor fiecărei coloanea matricei A (i.e.

    ∑ij=1 xj )

    prod(A) produsul elementelor fiecărei coloane a matricei A

    cumprod(A) produsul cumulat al elementelor fiecărei coloanea matricei A (i.e.

    ∏ij=1 xj )

    diff(A) diferent,a elementelor fiecărei coloane a matricei A(i.e. x2 − x1, x3 − x2, . . . , xn − xn−1)

    Exemplul 2.50 Comenzile

    >> a = rand(1,5);>> min = min(a) , max = max(a) , media = mean(a)>> cresc = sort(a) , descr = -sort(-a)>> suma = sum(a) , sumacumul = cumsum(a)

    afis, ează

  • 42 2. Matrice

    a =

    0.44 0.38 0.77 0.80 0.19min =

    0.19max =

    0.80media =

    0.51cresc =

    0.19 0.38 0.44 0.77 0.80descr =

    0.80 0.77 0.44 0.38 0.19suma =

    2.57sumacumul =

    0.19 0.57 1.01 1.78 2.57�

    Exemplul 2.51 În ceea ce prives, te comanda sort, pentru a obt,ine aran-jarea în ordine descrescătoare, am folosit comanda -sort(-a)

    Dar comanda sort permitea indicarea modului cum să facă aranjarea.Astfel, comanda

    >> cresc2 = sort(a,’ascend’)are acelas, i efect cu comanda cresc = sort(a), adicăcresc2 =

    0.19 0.38 0.44 0.77 0.80

    iar comanda>> descr2 = sort(a,’descend’)are acelas, i efect cu comanda descr = -sort(-a), adicădescr2 =

    0.80 0.77 0.44 0.38 0.19�

    Exemplul 2.52 Comenzile

    >> A = rand(5,2);>> min = min(A) , max = max(A) , media = mean(A)>> suma = sum(A) , sumacumul = cumsum(A)

    afis, ează

  • 2.3. Analiza datelor 43

    A =

    0.17 0.91

    0.36 0.09

    0.88 0.18

    0.74 0.95

    0.42 0.10min =

    0.17 0.09max =

    0.88 0.95media =

    0.51 0.45

    iar comanda

    >> minabs = min(min(A)) , maxabs = max(max(A))

    afis, ează minumul s, i apoi maximul tuturor elementelor lui Aminabs =

    0.09maxabs =

    0.95

    Acelas, i rezultat se poate obt,ine dacă se folosesc comenzile

    >> minabs2 = min(A(:)) , maxabs2 = max(A(:))

    (deoarece A(:) afis, ează o coloană cu toate coloanele lui A puse una subalta). �

    Exemplul 2.53 Există s, i posibilitatea afis, ării indicelui elementului minimsau maxim. Astfel dacă se scrie

    >> [minim,i] = min(A)

    se obt,in valorile minime (vector notat de noi cu minim) ale fiecăreicoloane a lui A, precum s, i indicii (vector notat de noi cu i), în cadrul acelorcoloane, a respectivelor valori minime:

    minim =

    0.17 0.09i =

    1 0.09

  • 44 2. Matrice

    iar

    >> [maxim,j] = max(A)

    se obt,in valorile maxime (vector notat de noi cu maxim) ale fiecăreicoloane a lui A, precum s, i indicii (vector notat de noi cu j), în cadrul acelorcoloane, a respectivelor valori maxime:

    maxim =

    0.88 0.95j =

    3 4 �

    Funct,ia max(A,a) returnează maximul dintre elementele matricei A s, iscalarul a.

    Funct,ia max(A,B) returnează maximul dintre elementele matricei A s, iale matricei B (trebuie să aibă aceas, i dimensiune cu A).

  • Capitolul 3

    Fişiere de tip script

    Pentru probleme simple utilizarea ferestrei Command Window este sufi-cientă (este rapidă s, i eficientă). Dar dacă numărul comenzilor cres, te s, i/sause dores, te schimbarea unora dintre comenzi s, i/sau se dores, te schimbareavalorilor unor variabile, este mult mai dificil de gestionat schimbările în ca-drul Command Window. În acest sens, MATLAB permite crearea unor fis, iereseparate, doar cu o succesiune de comenzi. Acestea pot fi executate ca s, icum ar fi fost scrise direct în Command Window iar rezultatele vor apareefectiv în Command Window.

    Asemenea fis, iere sunt numite fişiere de tip script (de la termenul scriptcare înseamnă faptul că MATLAB cites, te efectiv caracterele din acel fis, ier)sau fis, iere de tip M (deoarece fis, ierele script au extensia .m).

    Să ment,ionăm că fis, ierele de tip M pot fi utilizate s, i pentru a definifunct,ii. Prima linie a acestui tip de fis, iere începe obligatoriu cu cuvântulfunction

    Pentru a crea un fis, ier de tip M se alege, din bara de instrumente (tool-bar), New Script sau New s, i apoi se alege Script (sau Function, dacăse dores, te un fis, ier M pentru a defini o funct,ie).

    Dacă în Command Window se scrie>> edit

    se deschide fereastra cu editorul MATLAB-ului.

    Apoi aceste fis, iere trebuie salvate. Numele trebuie să înceapă cu o literăcare poate fi urmată apoi de orice literă, cifră sau de simboluri underscore.

    Pentru a deschide un fis, ier de tip M deja existent se alege, din bara deinstrumente, Open.

    45

  • 46 3. Fişiere de tip script

    Dacă în Command Window scriem (în dreptul prompterului) numele e-xact (fără extensie) al acelui fis, ier, MATLAB va executa comenzile scrise înfis, ier, ca s, i cum ar fi fost scrise direct în Command Window. Rezultatele vorapare în Command Window.

    De asemenea, fis, ierul se va executa s, i dacă utilizăm Run din bara deinstrumente sau tastăm F5

    Ment,ionăm că pentru a executa fis, ierul script folderul ce apare în fe-reastra Current Folder trebuie să coincidă cu cel în care este salvat acel fis, ierscript.

    În general, este util să adăugăm s, i o scurtă descriere a comenzilor ceapar în acel script. Acestea se pot scrie dacă inserăm comentarii prin folo-sirea semnului % (liniile care încep cu % nu se vor executa)

    Dacă dorim să scriem mai multe linii cu comentarii, putem folosi de-limitatorii %{ %} s, i să scriem în interiorul lor, pe diferite linii (dar nu îndreptul semnelor %{ s, i %} ).

    Exemplul 3.1 Prezentăm cont,inutul unui fis, ier de tip script (sau de tip M):

    % acesta este primul fisier de tip script% deci este un fisier cu extensia .m

    %{vom scrie produsul scalar si norma vectorilormai intai generam doi vectori de dimensiune (4n+1)%}

    n = 10 ; x = -n:.5:n ; y = 0:.5:2*n ;

    ps1 = x*y’ , ps2 = dot(x,y) , ps3 = sum(x.*y)

    norma1 = sqrt(sum(x.^2)) , norma2 = norm(x)

    Salvăm aces fis, ier cu numele ProdScal_Norma s, i cu extensia .mDacă scriem apoi în Command Window

    >> ProdScal_Norma

    se va executa acest fis, ier s, i se va afis, a

    ps1 = 1435 ps2 = 1435 ps3 = 1435norma1 = 37.8814 , norma2 = 37.8814 �

    De asemenea, ment,ionăm că atunci când se execută un fis, ier de tip scriptvariabilele ce sunt utilizate în acel fis, ier trebuie să fie deja definite s, i cunume atribuit.

  • 47

    În general, definirea s, i numirea unor variabile se poate face în trei mo-duri:

    • ori declarăm s, i numim variabilele într-un fis, ier de tip script (dupăprima executare a acestuia, toate variabilele declarate în el vor apares, i ele în Workspace);

    • ori în Command Window (s, i ele vor apare automat în Workspace);

    • sau utilizând comanda input care are structura:

    nume_var = input(’text_afisat’)

    unde: nume_var este numele dat de noi variabilei iar text_afisateste s, irul de caractere (textul) ce se dores, te să apară în Command Win-dow.

    Când comanda de mai sus este executată, textul va fi afis, at în Co-mmand Window s, i va cere utilizatorului să introducă o valoare ce va finumită nume_var. Utilizatorul introduce valoarea s, i tastează Enter.Dacă se adaugă semnul ; după comandă, atunci valoarea introdusăde noi a variabilei nu se va mai afis, a.

    Comanda input are s, i posibilitatea de a cere (s, i atribui un nume)unui s, ir de caractere (string):

    nume_var = input(’text_afisat’,’s’)

    Exemplul 3.2 Dacă scriem

    >> R = input(’Introduceti raza cercului = ’)

    se va afis, a

    Introduceti raza cercului =

    Apoi utilizatorul trebuie să introducă o valoare (de exemplu, 5) iar,după ce se tastează Enter, va apare

    R =5 �

    As, a cum am văzut deja, MATLAB generează automat un display, cândanumite comenzi sunt executate; de exemplu, când o valoare este atribuităunei variabile s, i se tastează Enter s, i apare în display variabila s, i valoareaei.

  • 48 3. Fişiere de tip script

    În afara acestei afis, ări automate MATLAB pune la dispozit,ie alte douăcomenzi: comanda disp prin care se poate afis, a un text s, i/sau date nu-merice s, i comanda fprintf prin care se poate afis, a un text s, i/sau datenumerice preferate de noi s, i se pot, eventual, salva într-un fis, ier.

    Comanda disp are structura:

    disp(’nume_var’)

    saudisp(’text_afisat_doar_caractere’)

    Comanda disp poate afis, a s, i variabile dacă le convertim în caractere. A-ceasta poate fi făcută folosind comanda num2str care are structura:

    num2str(nume_var,6)

    saunum2str(nume_var,’%-5.2f’)

    unde:

    • nume_var este variabila a cărei valoare se dores, te a fi transformatăîn caractere (trebuie să fie definită în prealabil);

    • 6 indică numărul total de cifre (ale variabilei nume_var) ce dorim săfie afis, ate;

    • % indică începerea operatorului de formatare;

    • - indică alinierea la stânga a numărului afis, at (există s, i varianta +care, dacă e utilizată, va afis, a semnul numărului);

    • 5 indică lăt,imea câmpului;

    • 2 indică numărul de zecimale (ale valorii variabilei) ce se dores, te a fiafis, ate;

    • f indică formatul de afis, are al numărului (există s, i variantele: e, g,i).

    Pentru a folosi efectiv comanda num2str în cadrul comenzii disp veziurmătorul exemplu.

  • 49

    Exemplul 3.3 Să introducem trei note (creăm vectorul nota s, i introducemcomponentele lui) s, i să le calculăm media:

    >> nota(1) = 7; nota(2) = 9; nota(3) = 10;>> media = mean(nota)

    Varianta mai simplă de afis, are este (pentru aceasta, mai întâi, creăm unvector cu textul de afis, at):

    >> a = [’Media notelor introduse este ’ ,num2str(media)];

    >> disp(a)

    Altă variantă de afis, are este (dorim să afis, ăm valoarea în formatul demaxim 4 cifre):

    >> b = [’Media notelor introduse este ’ ,num2str(media,4)];

    >> disp(b)

    Altă variantă de afis, are este (dorim să afis, ăm valoarea în formatul denumăr cu două zecimale):

    >> c = [’Media notelor introduse este ’ ,num2str(media,’%.2f’)];

    >> disp(c)

    Să afis, ăm notele introduse s, i media lor:

    >> d=[’Am introdus notele ’ , num2str(nota(1),’%.2f’),’, ’ , num2str(nota(2),’%.2f’), ’ si’, num2str(nota(3),’%.2f’), ’si am obtinutmedia ’, num2str(media,’%.2f’)];

    >> disp(d) �

    Comanda fprintf (în varianta mai simplă, de afis, are a unui text) arestructura:

    fprintf(’text_afisat_doar_caractere’)

    Această comandă poate fi folosită în Command Window, într-un fis, ier de tipscript sau într-un fis, ier de tip function.

    Dacă se dores, te trecerea pe o linie nouă, în cadrul s, irului de caractereafis, ate (de exemplu, dacă fraza afis, ată e prea lungă), atunci se inserează

    \n

  • 50 3. Fişiere de tip script

    înaintea caracterului care se dores, te să apară pe o nouă linie.Ment,ionăm s, i faptul că este util să adăugăm \n s, i la sfârs, itul textului de

    afis, at; doar as, a prompterul MATLAB va apare pe o linie nouă (altfel el vaapărea în continuarea textului afis, at).

    Astfel, dacă există mai multe comenzi de tip fprintf (s, i fără semnul; la sfârs, it), atunci ele vor afixa textele lor în continuu, unul după altul. Deaceea este util utilizarea comenzii \n pentru a se trece la o altă linie.

    De asemenea, dacă se dores, te, este util să adăugăm comanda

    fprintf(’\n’)

    după o altă comandă de tip fprintf pentru a insera o linie nouă (fărăcont,inut), adică un spat,iu vertical după textul precedent.

    Dacă se dores, te inserarea unui spat,iu TAB în cadrul s, irului de caractereafis, ate, atunci se inserează

    \t

    acolo unde se dores, te inserarea spat,iului.

    Exemplul 3.4 Dacă scriem

    >> fprintf(’Problema nu are solutie. \nVerificatidatele de intrare ! \n’)

    se va afis, a

    Problema nu are solutie.Verificati datele de intrare !>> �

    Dacă există mai multe comenzi de tip fprintf (s, i fără semnul ; lasfârs, it), atunci ele vor afixa textele lor în continuu, unul după altul. Deaceea este util utilizarea comenzii \n pentru a se trece la o altă linie.

    Comanda fprintf (în varianta de afis, are a unui text dar s, i a datelornumerice) are structura:

    fprintf(’text %-5.2f alt text’, nume_var)

    unde:

    • % indică începerea operatorului de formatare (deci faptul că inserămvaloarea unei variabile); pot fi scrise mai multe semne % (deci vomapela corespunzător mai multe variabile);

  • 51

    • nume_var este variabila ce se dores, te a fi afis, ată (trebuie să fie definităîn prealabil); pot fi enumerate mai multe variabile (deci în text vorapare corespunzător mai multe semne % );

    • - indică alinierea la stânga a numărului afis, at (există s, i varianta +care, dacă e utilizată, va afis, a semnul numărului);

    • 5 indică lăt,imea câmpului;

    • 2 indică numărul de zecimale (ale valorii variabilei) ce se doreşte a fiafis, ate;

    • f indică formatul de afis, are al numărului (există s, i variantele: e, g,i).

    Exemplul 3.5 Dacă scriem

    >> nota(1) = input(’Introduceti prima nota = ’);>> nota(2) = input(’Introduceti a doua nota = ’);>> nota(3) = input(’Introduceti a treia nota = ’);>> media = mean(nota);>> fprintf(’Am introdus notele %-.2f, %-.2f si

    %-.2f \n’,nota(1),nota(2),nota(3))>> fprintf(’\n’)>> fprintf(’Nota %-.4f reprezinta media

    notelor \n’, media)se va cere introducerea celor trei note s, i apoi se va afis, a textul s, i vari-

    abilele din cadrul comenzilor fprintf �

  • Capitolul 4

    Funcţii

    MATLAB furnizează câteva structuri care permit să ne creăm propriilefunct,ii. Aceste structuri sunt funct,ii definite de fis, iere separate de tip M(fişiere de tip function), funct,ii de tip anonymous s, i funct,ii de tip inline.

    4.1 Fişiere de tip function

    Dacă dorim să definim o funct,ie într-un fis, ier separat, de tip M, atuncistructura este, în linii mari, următoarea:

    function[arg_iesire] = nume_fct(arg_intrare)

    %{

    · · ·

    · · ·

    · · ·

    comentariu în care explicăm definit,ia funct,iei%}

    · · ·

    · · ·

    · · ·

    definirea efectivă a funct,iei nume_fctend

    unde:

    • function este cuvântul obligatoriu cu care trebuie să înceapă primalinie;

    53

  • 54 4. Funcţii

    • nume_fct este numele dat funct,iei s, i trebuie să fie identic cu numelefis, ierului de tip M care cont,ine acea funct,ie (deci fis, ierul se va numinume_fct.m);

    • arg_iesire sunt argumente de ies, ire; dacă o funct,ie nu are argu-mente de ies, ire, atunci [arg_iesire] = poate lipsi; dacă o funct,ieare doar un argument de ies, ire, atunci parantezele pătrate [ ] potlipsi; dacă o funct,ie are mai multe argumente de ies, ire, atunci ele sescriu separate printr-un spat,iu sau printr-o virgulă;

    • arg_intrare sunt argumente de intrare; dacă o funct,ie nu are ar-gumente de intrare, atunci parantezele rotunde ( ) pot lipsi; dacă ofunct,ie are mai multe argumente de intrare, atunci ele se scriu sepa-rate printr-o virgulă;

    • end poate lipsi.

    Ment,ionăm că un fis, ier de tip M care defines, te o funct,ie nu se poateexecuta (doar fis, ierele de tip script se pot executa).

    Exemplul 4.1 Să definim o funct,ie scalară de argument vectorial. Astfel,creăm un fis, ier de tip M cu numele sumapatrate.m

    function z = sumapatrate( x,y )% functia da suma patratelor a doua numere% se poate aplica si vectorilorz = x.^2 + y.^2-25;

    Apoi, dacă în Command Window scriem

    >> help sumapatrate

    se vor afis, a toate comentariile scrise de noi în fis, ierul M.Dacă în Command Window scriem

    >> sumapatrate(3,4)

    se va afis, a

    ans =0

    Dacă în Command Window scriem

    >> rez = sumapatrate(3,4)

    se va afis, a

  • 4.1. Fişiere de tip function 55

    rez =0

    Dacă în Command Window scriem

    >> sumapatrate([1 2;3 4],[1 2;3 4])

    se va afis, a

    ans =

    -23 -17

    -7 7�

    Exemplul 4.2 Să definim o funct,ie vectorială de argument scalar. Astfel,creăm un fis, ier de tip M cu numele fct_cerc.m care defineşte o funct,ie:

    function z = fct_cerc(theta)% functia va returna coordonatele (x,y)% ale unui pct de pe cercul x^2+y^2=5^2z = [ 5.*cos(theta) , 5.*sin(theta) ];% din definitia de mai sus se vede ca z este vector

    Apoi, dacă în Command Window scriem

    >> help fct_cerc

    se vor afis, a toate comentariile scrise de noi în fis, ierul M.Dacă în Command Window scriem

    >> fct_cerc(0)

    se va afis, a o pereche de coordonate

    ans =

    5 0

    Dacă în Command Window scriem

    >> fct_cerc([ 0 , pi/6 , pi/3 , pi/2 ])

    se vor afis, a patru perechi de coordonate (mai întâi sunt afis, ate toate celepatru valori corespunzătoare lui 5.*cos(theta), apoi cele corespunză-toare lui 5.*sin(theta) )

    ans =

    5 4.33 2.50 0 0 2.50 4.33 5

    Dacă în Command Window scriem

  • 56 4. Funcţii

    >> fct_cerc([ 0 , pi/6 , pi/3 , pi/2 ]’)

    se vor afis, a patru perechi de coordonate (dar fiecare pereche (pe linie)reprezintă exact coordonatele unui punct de pe cercul x2 + y2 = 5, cores-punzător fiecărui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )

    ans =

    5 0

    4.33 2.50

    2.50 4.33

    0 5

    Dacă în Command Window scriem

    >> theta = linspace(1,pi/2,100)>> fct_cerc(theta’)

    se vor afis, a o sută de perechi de coordonate (fiecare pereche (pe linie)reprezintă exact coordonatele unui punct de pe cercul x2 + y2 = 5, cores-punzător fiecărui theta=linspace(1,pi/2,100) )

    ans =

    5 0

    4.33 2.50...

    ......

    ...

    2.50 4.33

    0 5�

    Exemplul 4.3 Aceleas, i efecte se obt,in dacă folosim transpunerea în cadruldefinit,iei funct,iei (s, i nu atunci când apelăm funct,ia):

    function z = fct_cerc(theta)z = [ (5.*cos(theta))’ , (5.*sin(theta))’ ];

    Dacă în Command Window scriem

    >> fct_cerc([ 0 , pi/6 , pi/3 , pi/2 ])

    se vor afis, a patru perechi de coordonate (fiecare pereche (pe linie) re-prezintă exact coordonatele unui punct de pe cercul x2 + y2 = 5, cores-punzător fiecărui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )

  • 4.2. Funcţii anonymous 57

    ans =

    5 0

    4.33 2.50

    2.50 4.33

    0 5�

    Exemplul 4.4 Pentru o funct,ie vectorială de argument scalar există s, i vari-anta de a scrie:

    function [z,w] = fct_cerc(theta)z = (5.*cos(theta)) ;w = (5.*sin(theta)) ;% din notattie se vede ca rezultatul este vector

    Dacă în Command Window scriem

    >> theta = linspace(1,pi/2,100)>> [comp1,comp2] = fct_cerc(theta)

    se vor afis, a o sută de perechi de coordonate.

    Dacă scriem

    >> A = [comp1’,comp2’]

    se vor afis, a o sută de perechi de coordonate (dar fiecare pereche (pelinie) reprezintă exact coordonatele unui punct de pe cercul x2 + y2 = 5 )

    Dacă, de exemplu, scriem comanda>> plot(comp1,comp2)vom obt,ine graficul cu toate punctele obt,inute mai sus. �

    4.2 Funcţii anonymous

    Există numeroase situat,ii în care o funct,ie MATLAB sau una definită denoi trebuie utilizată, ca argument, de către o altă funct,ie, pentru evaluare.Acest lucru poate fi făcut dacă utilizăm funct,iile definite în fis, iere de tip Msau funct,ii de tip anonymous, dar există s, i o a treia metodă: funct,ii definiteinline (vezi sect,iunea următoarea).

    Pentru a defini o funct,ie de tip anonymous trebuie să utilizăm un func-tion handle (aceasta se realizează scriind caracterul @ în fat,a funct,iei care eargument).

  • 58 4. Funcţii

    Mai precis, definirea unei funcţii de tip anonymous este dată de comanda

    nume_fct = @(arg_iesire) functia_efectiva

    Vom folosi, pentru exemplificare, funct,ia ezplot11 care reprezintă, îndouă dimensiuni (2D), graficul unei funct,ii dată explicit (i.e. y = f (x) ),implicit (i.e. F (x, y) = 0 ) sau parametric (i.e. x = f (t) , y = g (t) ). Deci ar-gumentul funct,iei ezplot este o altă funct,ie. Domeniul implicit consideratde funct,ia ezplot pentru variabila funct,iei argument este [−2π, 2π] (dar else poate s, i schimba).

    Exemplul 4.5 Comanda

    >> sq = @(x) x.^2

    defines, te funt,ia nouă sq (x) = x2; este o funct,ie de tip anonymous (s, i serealizează utilizând function handle).

    Scriind apoi

    >> sq(.7)

    obt,inem valoarea funct,iei sq în punctul .7

    Comanda

    >> ezplot(sq , [-3 3])

    va afis, a graficul funct,iei sq (x) = x2 cu x din intervalul [−3, 3] . �

    Exemplul 4.6 Comanda

    >> functia3 = @(t) t.*sin(t)

    defines, te funt,ia nouă functia3 (t) = t sin t ; este o funct,ie de tip anony-mous (s, i se realizează utilizând function handle).

    Scriind apoi

    >> functia3(1)

    obt,inem valoarea funct,iei functia3 în punctul 1.

    Comanda

    >> ezplot(functia3)

    va afis, a graficul funct,iei f (t) = t sin t cu t din intervalul [0, 2π] . �11 Easy-to-use function plotter

  • 4.2. Funcţii anonymous 59

    Exemplul 4.7 Comanda

    >> functia4 = @(x,y) x.^4+y.^4-1

    defines, te funt,ia nouă f (x, y) = x4 + y4 − 1 ; este o funct,ie de tip anony-mous.

    Scriind apoi

    >> functia4(1,3)

    va afis, a

    ans =9 �

    Exemplul 4.8 Comanda

    >> ezplot(@(t) t.*sin(t))

    va afis, a graficul funct,iei f (t) = t sin t (funct,ie de tip anonymous) cu tdin intervalul [0, 2π] .

    Comanda

    >> ezplot(@(x,y) x.^4+y.^4-1, [-2 2])

    va afis, a graficul funct,iei x4 + y4 − 1 (funct,ie de tip anonymous) cu x dinintervalul [−2, 2] . �

    Exemplul 4.9 Comanda

    >> functia5 = @(t) exp(-t).*cos(8*t);>> functia6 = @(t) exp(-t).*sin(8*t);

    defines, te două funct,ii noi x (t) , y (t) (funct,ii de tip anonymous) (sau ofunct,ie scalară dată parametric: x = x (t) s, i y = y (t) )

    Comanda

    >> ezplot(functia5,functia6, [0 3])

    va afis, a graficul funct,iei dată parametric(e−t cos (8t) , e−t sin (8t)

    )cu t

    din intervalul [0, 3] . �

    Exemplul 4.10 Să creăm un fis, ier de tip M cu numele deriv_aprox.m pentrua defini funct,ia numită deriv_aprox care va da valoarea aproximativă aderivatei unei funct,ii, într-un punct (vezi Exemplul 4.19)

    function y = deriv_aprox(f,x)

  • 60 4. Funcţii

    y = (f(x+sqrt(eps))-f(x))/sqrt(eps);

    Acum, în Command Window, scriem:

    >> deriv_aprox(@exp,1)

    s, i obt,inem o aproximare a valorii derivatei funct,iei ex în punctul x = 1,adică

    (ex)′∣∣∣x=1≈ e

    x+h − ex

    h, unde h := sqrt(eps)

    deci o valoare aproximativă a lui e1 :

    ans =2.7183 �

    În final, ment,ionăm alte câteva cazuri în care un function handle esteutilizat pentru a utiliza o funct,ie (deja definită) drept argument.

    Un exemplu util este comanda arrayfun care aplică o funct,ie (dejadefinită de noi sau de MATLAB) tuturor elementelor unei matrice con-form structurii:

    B = arrayfun(@(x) functie(x),A)

    unde:

    • functie este funct,ia pe care vrem să o aplicăm tuturor elementelorlui A ; această funct,ie trebuie să fie de o variabilă reală cu valoriscalare;

    • B este matricea cu rezultate, deci B(i,j) = functie(A(i,j)),pentru fiecare i,j;

    • A este matricea cu valori asupra căreia aplic funct,ia functie

    În cazul în care funct,ia functie este definită într-un fis, ier de tip M,putem scrie sub forma:

    B = arrayfun(@functie,A)

    Exemplul 4.11 Folosim aproximarea ln (x+ 1) '∑n

    k=1 (−1)k+1 xk

    k , pen-tru orice x ∈ (−1, 1], pentru n suficient de mare.

    Să definim acum un fis, ier de tip function cu numele dezv_ln.m:

    function y = dezv_ln(x)

  • 4.2. Funcţii anonymous 61

    k = 1:100;y = sum((-1).^(k+1).*x.^k./k);

    Apoi definim a:

    >> a = [-0.5 0 0.5]

    Acum putem aplica funt,ia fiecărui element al matricei a:

    >> b = arrayfun(@(x) dezv_ln(x),a)

    Acelas, i efect se obt,ine dacă scriem direct:

    >> b = arrayfun(@dezv_ln,a)

    (am apelat funct,ia fct_fzero folosind un function handle). �

    Exemplul 4.12 În caz că o funct,ie are mai multe argumente, putem procedaastfel.

    Să luăm funct,ia de mai sus depinzând s, i de n (creăm un fis, ier de tipfunction cu numele dezv2_ln.m):

    function y = dezv2_ln(x,n)k = 1:n;y = sum((-1).^(k+1).*x.^k./k);Apoi definim a:

    >> a = [-0.5 0 0.5]

    Acum putem aplica funt,ia fiecărui element al matricei a:

    >> b = arrayfun(@(x) dezv2_ln(x,100),a) �

    Un alt exemplu util este comanda fzero cu ajutorul căreia determinămzero-urile unei funct,ii (vezi pagina 89):

    Exemplul 4.13 Fie

    f (x) = x3 − x2 − 3 arctg (x) + 1 .

    Să definim, mai întâi, un fis, ier de tip function cu numele fct_fzero.m:

    function y = fct_fzero(x)y = x.^3-x.^2-3.*atan(x)+1;

    Apoi determinăm nis, te valori particulare în care funct,ia îs, i schimbăsemnul; găsim f (−2) < 0, f (−1) > 0. Zero-urile se pot determina scriind:

    >> sol = fzero(@fct_fzero,[-2 -1])

    (am apelat funct,ia fct_fzero folosind un function handle). �

  • 62 4. Funcţii

    Exemplul 4.14 Comanda

    >> ezplot(@sin)

    va afis, a graficul funct,iei y = sin (x) cu x din intervalul [0, 2π] (am uti-lizat function handle pentru a utiliza funct,ia sin (predefinită în cadrul MAT-LAB) drept argument) �

    4.3 Funcţii inline

    O altă modalitate de a avea o funct,ie drept argument este de a utilizao funct,ie definită inline, adică definită în lina de comandă; în acest sensscriem:

    nume_fct = inline(’expresie_fct’)

    Exemplul 4.15 Comanda

    >> functia1 = inline(’x.^4+y.^4-1’)>> ezplot(functia1, [-2 2])

    va afis, a graficul funct,iei x4 + y4 − 1 cu x din intervalul [−2, 2] . �

    Exemplul 4.16 Evident, comanda

    >> ezplot(’x.^4+y.^4-1’, [-2 2])

    va afis, a acelas, i grafic ca mai sus. �

    Exemplul 4.17 Să creăm, în Command Window, o funct,ie de tip inline (funct,iadă suma pătratelor a două numere s, i se poate aplica s, i vectorilor):

    >> sumapatrate = inline( ’ x.^2+y.^2 ’ )

    Astfel se va afis, a

    sumapatrate =Inline function:sumapatrate = x.^2+y.^2

    Dacă în Command Window scriem

    >> sumapatrate(3,4)

    se va afis, a

    ans =25 �

  • 4.3. Funcţii inline 63

    Exemplul 4.18 Dacă se defines, te inline o funct,ie, atunci ordinea implicită aargumentelor este cea alfabetică:

    >> sumapatrate = inline( ’ a*x.^2+b*y.^2 ’ )

    s, i se va afis, a

    sumapatrate =Inline function:sumapatrate(a,b,x,y) = a*x.^2+b*y.^2

    Dar dacă se dores, te o anumită ordonare a argumentelor scriem astfel:

    >> sumapatrate = inline( ’ a*x.^2+b*y.^2 ’ ,

    ’x’,’y’,’a’,’b’)

    s, i se va afis, a

    sumapatrate =Inline function:sumapatrate(x,y,a,b) = a*x.^2+b*y.^2 �

    Exemplul 4.19 Să creăm un fis, ier de tip M cu numele deriv_aprox.m pentrua defini funct,ia numită deriv_aprox care va da valoarea aproximativă aderivatei unei funct,ii, într-un punct, folosind faptul că

    f ′ (x) ≈ f (x+ h)− f (x)h

    , dacă h > 0 este suficient de mic.

    function y = deriv_aprox(f,x)%{functia da o aproximare a derivateiunei functii f intr-un punct xvaloarea f’(x) este aproximata de (f(x+h)-f(x))/hiar pe h il vom lua foarte mic, de exempluh = sqrt(eps)%}y = (f(x+sqrt(eps))-f(x))/sqrt(eps);

    Acum, în Command Window, definim o funct,ie inline>> functia2 = inline( ’ sqrt(x)./(1+x.^2) ’ )

    Dacă scriem s, i>> deriv_aprox(functia2,.5)

  • 64 4. Funcţii

    obt,inem o aproximare a valorii derivatei funct,iei√x

    1 + x2în punctul x =

    0.5 :ans =

    0.1131 �

    ç

  • Capitolul 5

    Programare în MATLAB

    Un program este o succesiune de comenzi. Acestea se execută ori unadupă alta (în ordinea în care au fost scrise), ori unele dintre ele se execută înaltă ordine în funct,ie de variabilele introduse, ori unele dintre ele se executărepetitiv până când apare o valoare dată. Schimbarea modului de act,ionarea comenzilor necesită luarea anumitor decizii: când execută următoareacomandă, când evită executarea următoarei comenzi sau când repetă o a-numită comandă etc. Aceste decizii sunt luate prin compararea valorilorvariabilelor. Iar acest aspect este realizat utilizând operatorii relaţionali şipe cei logici.

    5.1 Operatori relaţionali şi operatori logici

    În plus fat,ă de operat,iile matematice obis, nuite, MATLAB suportă s, ioperat,ii relat,ionale s, i logice. Scopul acestor operat,ii este de a răspundela întrebări cu două variante de răspuns: True (1) s, i False (0). Operatorii re-laţionali în MATLAB se referă la comparat,iile obis, nuite, as, a cum se poatevedea în următorul tabel:

    Operator relat,ional Semnificat,ia

    < mai mic decât

    mai mare decât

    >= mai mare sau egal decât

    65

  • 66 5. Programare în MATLAB

    == egal12cu

    ∼= diferit de

    Dacă se compară două matrice, atunci cele două matrice trebuie să aibăaceleas, i dimensiuni s, i se compară element cu element. Rezultatul este omatrice (cu aceleas, i dimensiuni cu matricele comparate) de 0 s, i 1.

    Se poate compara s, i un scalar cu o matrice atunci se compară scalarulcu fiecare element al matricei. Rezultatul este o matrice de 0 s, i 1.

    Exemplul 5.1 Comenzile>> A = 8:-1:0; B = 9-A; Q1 = A>4

    afis, eazăQ1 =

    1 1 1 1 0 0 0 0 0iar>> Q2 = (A == B-1)

    afis, eazăQ2 =

    0 0 0 0 1 0 0 0 0 �

    Exemplul 5.2 Comenzile>> A = [1 2 ; 3 4]; B = eye(2); A == B

    afis, eazăans =

    1 0

    0 0iar>> A

  • 5.1. Operatori relaţionali şi operatori logici 67

    Exemplul 5.3 Comenzile

    >> x = (-3 : 3)/3; y = sin(x)./x

    afis, ează

    y =

    0.8415 0.9276 0.9816 NaN 0.9816

    0.9276 0.8415 �

    Exemplul 5.4 Dacă se dores, te ocolirea problemeisin 0

    0, atunci redefinim

    pe x scriind

    >> x = x + eps * (x==0); y = sin(x)./x

    s, i astfel se afis, ează

    y =

    0.8415 0.9276 0.9816 1.0000 0.9816

    0.9276 0.8415 �

    Operatorii logici furnizează o modalitate de a combina sau nega expre-siile relat,ionale. MATLAB oferă următorii operatori logici:

    Operator logic Semnificat,ia

    & S, I (element cu element, pentru tablouri)

    | SAU (element cu element, pentru tablouri)

    ∼ NEGAT, IA

    && S, I (pentru scalari)

    || SAU (pentru scalari)

    În plus fat,ă de operatorii logici s, i cei relat,ionali ment,ionat,i mai sus MAT-

  • 68 5. Programare în MATLAB

    LAB furnizează următoarele funct,ii:

    Funct,ia Semnificat,ia

    and(x,y) echivalentă funct,ional cu x&y

    or(x,y) echivalentă funct,ional cu x|y

    not(x) echivalentă funct,ional cu ∼x

    xor(x,y)SAU exclusiv;1 dacă x este nenul sau dacă y este nenuls, i 0 dacă ambii sunt nuli sau ambii sunt nenuli

    any(x)1 dacă există o componentă nenulă a vectorului x;1 pentru fiecare coloană a matricei xpentru care există o componentă nenulă

    all(x)1 dacă toate componentele vectorului x sunt nenule;1 pentru fiecare coloană a matricei xcare are toate elementele nenule

    Exemplul 5.5 Comenzile>> A = 8:-1:0 ; B = 9-A ; Q1 = (A>2) & (A> Q2 = and(A>4,A> A = 8:-1:0 ; B = 9-A ; Q3 = (A6)

    afis, ează 1 dacă A este mai mare ca 4 sau mai mic ca 6:Q3 =

    1 1 0 0 0 0 0 1 1

    iar>> Q4 = or(A6)

    afis, ează acelas, i lucru. �

    Exemplul 5.7 Comenzile

  • 5.1. Operatori relaţionali şi operatori logici 69

    >> A = 8:-1:0 ; B = 9-A ; Q5 = ∼ (A>4)

    afis, ează

    Q5 =

    0 0 0 0 1 1 1 1 1

    iar

    >> Q6 = not(A>4)

    afis, ează acelas, i lucru. �

    Exemplul 5.8 Comenzile

    >> a = 0 ; b = pi ; Q1 = a == 0 || b ∼= 1

    afis, ează

    Q1 =

    1

    iar

    >> Q2 = b == 1 && a == 0

    afis, ează

    Q2 =

    0

    iar

    >> Q3 = (1/a) < 0 || a == 0

    afis, ează, des, i 1/a = Inf,

    Q3 =

    1

    ( a == 0 este True ceea ce este suficent pentru a obt,ine rezultatul finalTrue; deci nu se mai calculează 1/a , adică a doua expresie nu mai esteevaluată) �

    Când MATLAB evaluează o expresie contează s, i ordinea operat,iilor (iar

  • 70 5. Programare în MATLAB

    în acest sens contează nivelul de precedent,ă):

    OperatorulOrdinea descrescătoare

    a nivelului deprecedent,ă

    parantezele 1

    transpusa .’ transpusa conjugată ’puterea .^ puterea ^

    2

    plusul unar + minusul unar - negat,ia ∼ 3

    înmult,irea .∗ înmult,irea ∗împărt,irea ./ împărt,irea /împărt,irea .\ împărt,irea \

    4

    adunarea + scăderea - negat,ia logică ∼ 5

    generarea unui vector linie :(notat,ia „pentru” coloană)

    6

    < >= == ∼= 7

    & 8

    | 9

    && 10

    || 11

    Exemplul 5.9 Comenzile>> 1 | 0 & 0

    afis, eazăans =

    1iar>> 1 | (0 & 0)

    afis, eazăans =

    1iar>> (1 | 0) & 0

  • 5.1. Operatori relaţionali şi operatori logici 71

    afis, eazăans =

    0 �

    Exemplul 5.10 Comenzile

    >> x = [0 1 2] ; y = [-1,0,1]; x=0

    afis, eazăans =

    1 0 0

    iar>> xor(x,y)

    afis, eazăans =

    1 1 0

    iar>> all(y)

    afis, eazăans =

    0iar>> any(y)

    afis, eazăans =

    1 �

    Exemplul 5.11 Comenzile

    >> A = [1 0 3 ; 4 5 6] ; all(A)

    afis, eazăans =

    1 0 1

    iar>> any(A)

    afis, eazăans =

    1 1 1 �

  • 72 5. Programare în MATLAB

    De asemenea, MATLAB furnizează numeroase funct,ii care testează e-xistent,a unor valori sau condit,ii anume:

    Funct,ie Semnificat,ia

    ischar testează dacă argumentul este s, ir de caractere

    isempty testează dacă argumentul este vid

    isequal testează dacă tablourile sunt identice

    isfinite testează dacă elementele unui tablou sunt finite

    isinf testează dacă elementele unui tablou sunt infinite

    islogical testează dacă argumentul este un tablou logic

    isprime testează dacă argumentul este număr prim

    isnumeric testează dacă argumentul este s, ir de caractere

    isreal testează dacă argumentul este un tablou real

    Funct,ia find aplicată unui vector spune ce indici corespund componen-telor nenule ale acelui vector. În cazul unei matrice funct,ia