Cuprins - Facultatea De Matematica Iasimaticiuc/didactic/MATLAB_Curs_versiunea_9... · Daca˘...

127
Cuprins 1 Introducere ................................. 1 1.1 Aplica¸ tia MATLAB .......................... 1 1.2 Comanda help ............................ 2 1.3 Variabile ¸ si comenzi MATLAB .................... 3 1.4 Func¸ tii matematice .......................... 7 2 Matrice .................................... 15 2.1 Utilizarea semnului : în manipularea matricelor ......... 27 2.2 Operarea element cu element .................... 34 2.3 Analiza datelor ............................ 36 3 Fi¸ siere de tip script ............................. 41 4 Func¸ tii .................................... 47 4.1 Fi¸ siere de tip function ......................... 47 4.2 Func¸ tii inline .............................. 51 4.3 Func¸ tii anonymous ........................... 53 5 Programare în MATLAB .......................... 57 5.1 Operatori rela¸ tionali ¸ si operatori logici ............... 57 5.2 Structuri if-elseif-else-end ................. 65 5.3 Structuri ciclice de tip for-end ................... 68 5.4 Structuri ciclice de tip while-end ................. 70 5.5 Structuri switch-case ....................... 73 6 Polinoame .................................. 77 7 Rezolvarea numeric ˘ a a unor probleme ................. 81 7.1 Rezolvarea ecua¸ tiilor ......................... 81 7.2 Determinarea minimului ¸ si maximului ............... 83 7.3 Integrarea numeric˘ a ......................... 85 7.4 Algebr˘ a liniar ˘ a ............................. 87 7.5 Ecua¸ tii diferen¸ tiale .......................... 90 8 Reprezent˘ ari grafice ............................ 93 8.1 Grafica 2D ............................... 93

Transcript of Cuprins - Facultatea De Matematica Iasimaticiuc/didactic/MATLAB_Curs_versiunea_9... · Daca˘...

Cuprins

1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Aplicatia MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Comanda help . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Variabile si comenzi MATLAB . . . . . . . . . . . . . . . . . . . . 31.4 Functii matematice . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.1 Utilizarea semnului : în manipularea matricelor . . . . . . . . . 272.2 Operarea element cu element . . . . . . . . . . . . . . . . . . . . 342.3 Analiza datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3 Fisiere de tip script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4 Functii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.1 Fisiere de tip function . . . . . . . . . . . . . . . . . . . . . . . . . 474.2 Functii inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3 Functii anonymous . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5 Programare în MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1 Operatori relationali si operatori logici . . . . . . . . . . . . . . . 575.2 Structuri if-elseif-else-end . . . . . . . . . . . . . . . . . 655.3 Structuri ciclice de tip for-end . . . . . . . . . . . . . . . . . . . 685.4 Structuri ciclice de tip while-end . . . . . . . . . . . . . . . . . 705.5 Structuri switch-case . . . . . . . . . . . . . . . . . . . . . . . 73

6 Polinoame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

7 Rezolvarea numerica a unor probleme . . . . . . . . . . . . . . . . . 817.1 Rezolvarea ecuatiilor . . . . . . . . . . . . . . . . . . . . . . . . . 817.2 Determinarea minimului si maximului . . . . . . . . . . . . . . . 837.3 Integrarea numerica . . . . . . . . . . . . . . . . . . . . . . . . . 857.4 Algebra liniara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877.5 Ecuatii diferentiale . . . . . . . . . . . . . . . . . . . . . . . . . . 90

8 Reprezentari grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938.1 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

8.2 Grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

9 Calcul simbolic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099.1 Obiectele simbolice si expresiile simbolice . . . . . . . . . . . . . 1109.2 Schimbarea formei unei expresii simbolice . . . . . . . . . . . . . 1129.3 Calculul numeric al unei expresii simbolice . . . . . . . . . . . . 1149.4 Sume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159.5 Rezolvarea ecuatiilor algebrice . . . . . . . . . . . . . . . . . . . 1169.6 Limite de functii . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199.7 Derivarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209.8 Integrarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219.9 Rezolvarea ecuatiilor diferentiale ordinare . . . . . . . . . . . . . 122

Bibliografie selectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Capitolul 1

Introducere

1.1 Aplicatia MATLAB

Fereastra aplicat,iei MATLAB cont,ine o bara de titlu, o bara de meniuri, obara de instrumente precum s, i urmatoarele ferestre:

Command Window, Current Folder, Workspace, Command History

Fereastra de comanda (Command Window) este cea mai importanta; aici sunttastate comenzile dupa semnele >> care reprezinta prompterul MATLAB.

Dupa ce o comanda a fost introdusa1 s, i a fost apasata tasta Enter, MATLABexecuta comanda s, i rezultatul apare imediat pe ecran.

De exemplu, prin tastarea comenzii>> versionse afis, eaza versiunea MATLAB folosita, iar comanda>> verindica, pe lânga versiunea curenta a MATLAB-ului instalat, s, i toolbox-urile

instalate.De exemplu, prin tastarea comenzii>> quitse se închide programul MATLAB (acelas, i efect îl are s, i comanda exit).

Ment,ionam ca daca folosim comanda

clc

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

Ment,ionam, în plus, ca daca în Command Window folosim tasta cu sim-bolul ↑ ,apare ultima comanda efectuata; daca tastam din nou simbolul ↑ aparepenultima comanda efectuata s, .a.m.d.; apoi se poate folosi s, i tasta ↓ pentru a

1 Comenzile în MATLAB sunt case sensitive.

1

2 1. Introducere

reveni la comenzi mai noi. Saget,ile → s, i ← pot fi folosite pentru a manevracursorul în cadrul unei comenzi.

De asemenea, sunt utile tastele Delete, Backspace, Home, End care aurolul lor standard. Foarte des utilizata este tasta Escape care s, terge comandacurenta, care tocmai este scrisa.

Fereastra care indica folderul/directorul în care se „lucreaza” este CurrentFolder (numit eventual Current Directory).

În fereastra Workspace sunt afis, ate toate variabilele definite de noi (precums, i valorile lor). Ment,ionam ca daca folosim comanda

clear

s, tergem toate variabilele definite pâna atunci (dispar s, i din fereastra Workspace).

În fereastra Command History sunt afis, ate toate comenzile efectuate de noiîn Command Window. Printr-un dublu click pe o comanda aceasta apare dinnou în Command Window s, i se executa.

1.2 Comanda help

Pentru a utiliza sistemul de help al MATLAB scriem, în Command Window,comanda

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

scurta descriere, sintaxa s, i o lista de subiecte înrudite).De exemplu, comanda>> help expafis, eaza informat,ii despre funct,ia exponent,iala.Daca scriem doar>> helpatunci se deschide o lista de categorii2, care la rândul lor (se pot deschide)

cont,in liste de comenzi.

Daca scriem comanda>> doc nume_comandavom obt,ine, într-o fereastra separata, informat,ii mai detaliate s, i exemple

diverse de utilizare a comenzii data de nume_comandaDe exemplu, comanda>> doc expafis, eaza informat,ii mai detaliate s, i exemple de utilizare a funct,iei exponen-

t,iale.

De asemenea, pentru a utiliza sistemul de help al MATLAB se poate de-schide meniul Help al MATLAB (sau se tasteaza F1).

2 Pentru a afis, a s, i continuarea listei de categorii se tasteaza Enter sau Spacebar.

1.3. Variabile si comenzi MATLAB 3

1.3 Variabile si comenzi MATLAB

Numele unei variabile trebuie sa înceapa cu o litera. Aceasta poate fi urmataapoi de orice litera, cifra sau de simboluri underscore (numit s, i underline) (darmaxim 63 de caractere).

De asemenea, ment,ionam ca numele variabilelor în MATLAB sunt case sen-sitive.

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

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

Variabila speciala Semnificat,ia

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

pi numarul π

eps

cel mai mic numar care adunat la 1creaza un numar diferit de 1;este precizia de calcul a MATLAB(epsilon; are valoarea 2.220446049250313e-16)

eps(n) cel mai mic numar care adunat la ncreaza un numar diferit de n

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

Nan sau nan Not a number; reprezinta o expresie nedefinita(de exemplu, rezultatul pentru 0/0 )

i sau j numarul3complex√−1

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

intmax cel mai mare întreg ce poate fi reprezentat

realmin cel mai mic numar real ce poate fi reprezentat

realmax cel mai mare numar real ce poate fi reprezentat

nargin numarul de argumente de intrare

nargout numarul de argumente de ies, ire

Precizam ca atunci când MATLAB calculeaza o expresie (folosind eventualalte variabile) va face aceasta folosind toate valorile variabilelor care sunt dejadefinite s, i obt,inute, pâna la momentul când se efectueaza comanda.

3 Este recomandat sa scriem întotdeauna 1i sau 1j în loc de i sau respectiv j

4 1. Introducere

Î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 (care poatefi numar, matrice etc.). Variabila astfel definita poate fi utilizata ulterior îndefinirea altor variabile s, .a.m.d.

Unei variabile deja definite i se poate ulterior atribui alta valoare.

Exemplul 1.1 Comanda

>> 1+2+3

afis, eaza

ans =6

Astfel s-a definit implicit noua variabila ans s, i i s-a atribuit valoarea 6.Aceasta variabila poate fi folosita în calcule viitoare. �

Exemplul 1.2 Comanda

>> a = 1+2+3

afis, eaza

a =6

Astfel s-a definit noua variabila a s, i i s-a atribuit valoarea 6. Aceasta vari-abila poate fi folosita în calcule viitoare. �

Exemplul 1.3 Comanda

>> total = a*2 + ans

afis, eaza

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, eaza

ans =18

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

1.3. Variabile si comenzi MATLAB 5

Pentru a afis, a valoarea atribuita unei variabile se scrie numele variabileis, i astfel se va afis, a valoarea ei. De asemenea, precizam ca toate variabilele s, ivalorile lor sunt afis, ate s, i în fereastra Workspace. Comanda clear s, terge toatevariabilele definite pâna atunci (dispar s, i din fereastra Workspace). Daca se scriedoar clear x atunci dispare doar variabila x

Lista tuturor variabilelor se poate vedea s, i daca se scrie comanda whoDaca se scrie comanda whos apare lista cu toate variabilele dar însot,ita

de informat,ii suplimentare. Daca se scrie comanda whos nume variabilaapare variabila numita dar însot,ita de informat,ii suplimentare.

Daca o comanda este prea lunga sau se dores, te scrierea ei pe doua linii,atunci se scrie ... acolo unde se dores, te sa se rupa comanda, apoi se tasteazaEnter, apoi se continua scrierea comenzii.

Exemplul 1.5 Comanda

>> suma = 1 + 2 + 3 + ...5 +6 + 7 + 8 + 9 + 10

afis, eaza

suma =55 �

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

;

la finalizarea comenzii.Pe o linie de comanda 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, eaza

a =5

b =10

d =30 �

În cazul în care programul face un calcul care dureaza prea mult s, i se dores, teintreruperea procesului (sau pur s, i simplu se dores, te afis, area din nou a promp-terului MATLAB), se scrie tasteaza CTRL + C

6 1. Introducere

Prin adaugarea semnului

%

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

Formatul implicit de afis, are a valorilor numerice este de 4 zecimale.

Mai exista s, i alte formate posibile printre care amintim:

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 douacifre exponent4

format long esauformat longe

3.141592653589793e+00 15 zecimale s, i douacifre exponent

format bank 3.14 2 zecimale

format rat 355/113 aproximat deo fract,ie

Ment,ionam ca modalitatea de afis, are a valorilor nu influent,eaza valoarealor; doar modalitatea de afis, are este schimbata.

4 Scrierea 3.1416e+00 înseamna 3.1416*1000.

1.4. Functii matematice 7

1.4 Functii matematice

Operat,iile aritmetice elementare sunt

Operat,ia Simbolul Exemplu

Adunarea + 3.1 + 15

Scaderea − 3.1 - 15

Înmult,irea ∗ 3.1 ∗ 15

Împart,irea(la dreapta)

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

Împart,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 efectueazaoperat,iile este cea cunoscuta deja: ridicarea la putere (are cel mai mare nivelde precedent, a), apoi înmult,irea s, i împart,irea (au acelas, i nivel de precedent, a)s, i apoi adunarea s, i scaderea (au acelas, i nivel de precedent, a).

Evident, folosirea parantezelor schimba orice ordine implicita (aceasta func-t,ioneaza în cadrul unui set de paranteze).

Funct,iile matematice elementare sunt date s, i explicate în Imaginile 1.1 – 1.8de mai jos.

Exemplul 1.7 Comenzile

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

afis, eaza 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, eaza

c_4 =6-8i

iar% trebuie sin(.5)*i sau sin(.5)*1i

8 1. Introducere

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

afis, eaza

c_5 =2.0000 - 0.4794i �

Exemplul 1.9 Comenzile

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

afis, eaza

c_5r =2.0000

c_5i =0.4794

iar>> c_5a = abs(c_5)

afis, eaza

c_5a =2.0567

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

afis, eaza

c_5unghi_r =0.2353

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

afis, eaza

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, eaza

y =0.7854

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

afis, eaza

y_g =45 �

1.4. Functii matematice 9

Exemplul 1.11 Avem urmatoarele comenzi de rotunjire a unui numar real x:Comanda fix(x) reprezinta cel mai apropiat întreg de x înspre 0Comanda floor(x) reprezinta cel mai apropiat întreg de x înspre −∞(cel mai mare întreg din stânga lui x, adica partea întreaga a lui x)Comanda ceil(x) reprezinta cel mai apropiat întreg de x înspre +∞(cel mai mic întreg din dreapta lui x)Comanda round(x) reprezinta 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, eaza

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, eaza

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), y_4=round(z)

afis, eaza

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, eaza

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

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, eaza

a =-1

b =1

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

10 1. Introducere

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, eaza

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 utilizata pentru a verifica daca un numareste par sau nu (paritate înseamna mod(a,2)==0 ).

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

afis, eaza

rest1 =1

rest2 =1

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

Imaginea 1.1: Functii 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

Imaginea 1.2: Functii 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

12 1. Introducere

Imaginea 1.3: Functii exponentiale si 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: Functii 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. Functii matematice 13

Imaginea 1.5: Functii 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: Functii de transformari 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: Functii 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

14 1. Introducere

Imaginea 1.8: Functii specializateSection 2.7 Mathematical Functions 37

Specialized Function Description

airy Airy function

besselj Bessel function of the first kind

bessely Bessel function of the second kind

besselh Bessel function of the third kind

besseli Modified Bessel function of the first kind

besselk Modified Bessel function of the second kind

beta Beta function

betainc Incomplete beta function

betaincinv Inverse incomplete beta function

betaln Logarithm of beta function

ellipj Jacobi elliptic function

ellipke Complete elliptic integral

erf Error function

erfc Complementary error function

erfcinv Inverse complementary error function

erfcx Scaled complementary error function

erfinv Inverse error function

expint Exponential error function

gamma Gamma function

gammainc Incomplete gamma function

gammaincinv Inverse incomplete gamma function

gammaln Logarithm of gamma function

legendre Associated Legendre functions

psi Psi (polygamma) function

cross Vector cross product

dot Vector dot product

Capitolul 2

Matrice

Elementul de baza al MATLAB este tabloul (array). Chiar s, i o variabila scalaraeste vazut tot ca o un tablou de tip 1 × 1. Cel mai des utilizate sunt tablourilebidimensionale, numite matrice, care au elementele aranjate în m linii s, i ncoloane. Vectorii de tip linie (i.e. m = 1) s, i vectorii de tip coloana (i.e. n = 1)sunt cazuri particulare de matrice bidimensionale. Tablourile s, i dimensiunilelor nu sunt declarate în mod explicit.

În MATLAB exista mai multe modalitat,i prin care se poate genera o ma-trice. Modalitatea explicita înseamna utilizarea parantezelor patrate între carese precizeaza fiecare element al matricei; trecerea de la o coloana la alta se faceadaugând semnul , sau un spat,iu gol iar trecerea de la o linie la alta se faceadaugând semnul ; sau tastând Enter.

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

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

afis, eaza vectorul:a =

1

2

3

4�

Exemplul 2.2 Comanda>> A = [1 2 ; 3 4]

sau>> A = [1 2

15

16 2. Matrice

3 4]

sau

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

afis, eaza acelas, i lucru:

A =

1 2

3 4�

Exemplul 2.3 Comenzile

>> a = [1 2 3 4];

>> size(a)

nu afis, eaza vectorul a, dar afis, eaza marimea lui, adica afis, eaza un vectorcu doua elemente: numarul de linii s, i numarul de coloane al vectorului a

ans =

1 4

iar comanda

>> length(a)

afis, eaza marimea vectorului a

ans =

4 �

Exemplul 2.4 Comenzile

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

>> size(A)

nu afis, eaza matricea A, dar afis, eaza marimea matricei A, adica afis, eaza unvector cu doua elemente: numarul de linii s, i numarul de coloane

ans =

2 2 �

Pentru a produce transpusa, rangul, determinantul s, i inversa avem la dis-

17

pozit,ie comenzile:

ComandaMATLAB

Semnificat,ia

A.’ transpusa matricei A

A’ transpusa conjugata 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, daca p∈ N∗

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

A^p este determinata folosind valorile proprii, daca p /∈ Z∗

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

afis, eaza transpusa matricei Aans =

1 3

2 4

iar>> A’afis, eaza acelas, i lucru. �

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

afis, eaza transpusa matricei Aans =

1-i 3-2i

2+i 4-3i

iar>> A’

afis, eaza transpusa conjugata a matricei Aans =

1+i 3+2i

2-i 4+3i�

18 2. Matrice

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

Comanda MATLAB Semnificat,ia

[ ] o matrice fara cont,inut

zeros(l,c) o matrice cu l linii s, i c coloane5s, icu 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 diagonala s, i 0 în rest

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

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

Matricele pot fi construite s, i cu ajutorul altor matrice, adica sub forma 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, eaza matricea A, dar afis, eaza matricea B. Aceasta este scrisa pe blocuri(a fost creata cu ajutorul altor matrice).

B =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]

5 Daca se doreste o matrice patratica (la toate comenzile din acest tabel), atunci se poate renuntala scrierea ambelor variabile. De exemplu, daca se scrie zeros(3) se obtine o matrice patratica dedimensiune 3 cu toate elementele 0

19

adauga la matricea A linia a 3-a suplimentara: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]

adauga la matricea A o prima linie suplimentara: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]

adauga la matricea A coloana a 4-a suplimentara:B =

1 2 3 -1

4 5 6 -2�

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

adauga la matricea A o prima coloana suplimentara:A =

-1 1 2 3

-2 4 5 6�

Exemplul 2.12 Comenzile

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

afis, eaza matricea C:

C =1 2 0 0

3 4 0 0

0 0 1 1

0 0 1 1�

20 2. Matrice

Exemplul 2.13 Comenzile

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

afis, eaza 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 Daca vrem ca cream o matrice cu acelas, i element peste tot,avem la dispozit,ie mai multe variante. Astfel urmatoarele comenzi (le scriemîn ordine: de la cea mai lenta la cea mai rapida):

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

afis, eaza aceeas, i matrice:

3.1416 3.1416 3.1416

3.1416 3.1416 3.1416�

Simularile din cadrul aplicat,iilor (din matematica, fizica etc.) cer deseoricrearea s, i utilizarea de numere aleatoare. MATLAB are trei comenzi (rand,randn s, i randi) care pot fi folosite pentru obt,inerea de numerea aleatoare:

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 suntpermutari 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(adica distribut,ia normalade 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

21

Este cunoscut, din cadrul Teoriei Probabilitat,ilor, ca daca se dores, te generareaunor elemente distribuite uniform între doua numere reale a s, i b, atunci folosimrelat,ia de legatura: variabila aleatoare X este distribuita uniform între 0 s, i 1daca s, i numai daca (b− a)X + a este distribuita uniform între a s, i b.

De asemenea, variabila aleatoare X este distribuita normal standard, adicade medie 0 s, i dispersie (variant, a) 1, daca s, i numai daca

√σ2X + m este dis-

tribuita normal de medie m s, i dispersie (variant, a) σ2.

Exemplul 2.15 Comenzile

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

genereaza o matrice A de tip 2 × 3 cu elementele fiind numere reale dis-tribuite uniform între 0 s, i 1 s, i o matrice B de tip 2 × 3 cu elementele fiindnumere reale distribuite uniform între 1 s, i 10

A =

0.96 0.80 0.42

0.49 0.14 0.91

B =

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

genereaza o matrice A de tip 2 × 3 cu elementele fiind numere reale dis-tribuite normal standard (distribuite normal, cu media 0 s, i dispersia 1 ) s, i omatrice B de tip 2 × 3 cu elementele fiind numere reale distribuite normal cumedia 10 s, i dispersia 0.22. �

Exemplul 2.17 Comenzile

>> A = randi(10,2,3)

genereaza o matrice A de tip 2 × 3 cu elementele fiind numere întregi dis-tribuite uniform între 1 s, i 10. �

22 2. Matrice

Pentru a construi tablouri sunt utile s, i comenzile:

ComandaMATLAB

Semnificat,ia

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

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

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

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

Exemplul 2.18 Comanda

>> x = 0:3:10

afis, eaza un vector linie cu elemente echidistante de la 0 la 10, cu pasul 3:

x =

0 3 6 9

Comanda

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

afis, eaza un vector linie cu 11 coloane, cu elemente echidistante de la 0 la 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. Printre

6 De fapt, se genereaza n numere echidistante de la a la b: a1=a,a2,...,an−1,an=b s, i apoise scrie vectorul linie 10a1 ,10a2 ,10a3 ,. . . ,10an .

23

acestea 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 rearanjata în m linii s, i n coloane(se scriu toate coloanele lui A, începând cu prima,una sub alta s, i apoi se rearanjeaza elementele)

diag(A)rezultatul este un vector coloanacu diagonala matricei A(A nu e neaparat patratica)

diag(a)rezultatul este o matrice diagonalacu vectorul a pus pe diagonala(restul elementelor sunt 0)

triu(A)

extrage partea triunghiular superioaradin matricea A (nu neaparat patratica)(restul elementelor sunt 0)(upper triangular)

tril(A)

extrage partea triunghiular inferioaradin matricea A (nu neaparat patratica)(restul elementelor sunt 0)(lower triangular)

Exemplul 2.19 Comenzile

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

afis, eaza

A =

1 2 3

4 5 6

apoi produce matricea coloana cu toate coloanele lui A puse una sub altaapoi le reordoneaza:

B =

24 2. Matrice

1 5

4 3

2 6

Exemplul 2.20 Comenzile

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

afis, eaza

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

>> E = C’

afis, eaza

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, eaza

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, eaza

25

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, eaza

A =

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, eaza vectorul b dat de diagonala lui A:b =

1

5

9

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

1 0 0

0 5 0

0 0 9

s, i matricea D (matricea A fara diagonala ei):D =

26 2. Matrice

0 2 3

4 0 6

7 8 0

precum s, i partea triunghiular superioara a matricei A dar fara diagonalaprincipala:

E =

0 2 3

0 0 6

0 0 0�

Avem urmatoarele generalizari în ceea ce proves, te diag s, i triu s, i tril

ComandaMATLAB

Semnificat,ia

diag(a,k)

rezultatul este o matrice diagonalacu vectorul a pus pe diagonala principala translata cuk unitat,i deasupra (pentru k>0)sau cu k unitat,i dedesubt (pentru k<0)(restul elementelor sunt 0)

diag(A,k)rezultatul este un vector coloanacu diagonala k a matricei A(A nu e neaparat patratica)

triu(A,k)extrage partea triunghiular superioaradiagonalei k a matricei A (nu neaparat patratica)(restul elementelor sunt 0)

tril(A,k)extrage partea triunghiular inferioaradiagonalei k a matricei A (nu neaparat patratica)(restul elementelor sunt 0)

Exemplul 2.24 Comenzile>> a = [1 2 3];>> A_1 = diag(a), A_2 = diag(a,1), A_3 = diag(a,-2)

afis, eaza matricele:A_1 =

1 0 0

0 2 0

0 0 3

A_2 =

2.1. Utilizarea semnului : în manipularea matricelor 27

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 exista 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 numeroteaza elementele; adica elementelematricei coloana A(:).

Exemplul 2.25 Comenzile

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

afis, eaza aceeas, i valoare:

elem1 = 7 s, i elem2 = 7 �

Daca se dores, te o întreaga 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âna j s, i de la coloana kpâna l

Daca se dores, te coloana c a lui A, atunci se scrie

A(:,c)

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

A(l,:)

28 2. Matrice

iar daca se scrieA(:)

se obt,in un vector coloana cu toate elementele matricei A (este exact coloanape care comanda reshape(A,m,n) o rearanjeaza apoi pe m linii s, i n coloane).

Daca se scrieA(:,k:l)

se obt,ine partea matricei A de la coloana k pâna la coloana l iar daca se scrie

A(i:j,:)

se obt,ine partea matricei A de la linia i pâna la linia j.Similar, daca se scrie

a(k:l)

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

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

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

afis, eaza elementele vectorului x de la primul pâna la al 3-lea:x_1_3 =

0 0.3142 0.6283

Comanda>> x_6_end = x(6:end)

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

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

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

afis, eaza o parte a matricei A, cea de la linia 1 pâna la linia 3 s, i de la coloanaa 2-a pâna la coloana a 3-a:

B =2 3

6 7

10 11

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

2.1. Utilizarea semnului : în manipularea matricelor 29

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

insereaza coloana x între coloanele 2 s, i 3 ale matricei A (am compus o nouamatrice din coloanele 1-2 din A, apoi am adaugat coloana x, apoi coloanele 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,:)]

insereaza linia x între liniile 2 s, i 3 ale matricei A (am compus o noua ma-trice din liniile 1-2 din A, apoi am adaugat 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). �

Alte modalitat,i prin care MATLAB poate crea s, i manipula matrice sunt datede urmatoarele exemple concrete, dar importante.

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

afis, eaza 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, eaza vectorul a cu elementul de pe pozit,ia 3 înlocuit cu 99:a =

12 11 99 9 8 7 6 5�

30 2. Matrice

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

afis, eaza vectorul a cu elementul de pe pozit,ia 8 înlocuit cu 99; daca acestepozit,ii nu exista î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, eaza vectorul b (care nu a fost definit în prealabil) cu elementul de pepozit,ia 8 înlocuit cu 99; daca aceste pozit,ii nu exista în vectorul b, atunci seextinde 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, eaza matricea A cu elementul de pe pozit,ia (2, 3) înlocuit cu 99: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, eaza matricea A cu elementul de pe pozit,ia (2, 7) înlocuit cu 99; dacaaceasta pozit,ie nu exista în matricea A, atunci se extinde matricea A punâ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, eaza matricea A cu toate elementele înlocuite cu 99:A =

2.1. Utilizarea semnului : în manipularea matricelor 31

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, eaza matricea A cu coloana a 3-a înlocuita cu 99:A =

1 2 99 4

5 6 99 8

9 10 99 12

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

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

afis, eaza matricea A cu coloana a 3-a înlocuita cu coloana [99 100 101]’:A =

1 2 99 4

5 6 100 8

9 10 101 12

(funct,ioneaza 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, eaza matricea A cu coloanele de la a 3-a pâna la a 4-a înlocuite cu ma-tricea [99 100 101; 0 0 0]’:

A =

1 2 99 0

5 6 100 0

9 10 101 0

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

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

32 2. Matrice

afis, eaza vectorul a cu elementele de la al 5-lea pâna la al 7-lea sunt înlocuitecu [10 13 16]; daca aceste pozit,ii nu exista în vectorul a, atunci se extindevectorul (eventual se adauga s, i 0 acolo unde nu este precizata 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]

afis, eaza matricea A cu coloana a 6-a înlocuita cu coloana [99 100 101]’;daca aceasta pozit,ie nu exista în matricea A, atunci se extinde matricea A punând0 în rest:

A =1 2 3 4 0 99

5 6 7 8 0 100

9 10 11 12 0 101

(funct,ioneaza s, i varianta de adaugare a unei linii noi). �

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

afis, eaza vectorul a cu elementele de la 2 pâna 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, eaza matricea A cu coloana a 3-a eliminata:A =

1 2 4

5 6 8

9 10 12�

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

afis, eaza matricea A cu coloanele de la 1 pâna la 2 eliminate:A =

3 4

7 8

11 12�

2.1. Utilizarea semnului : în manipularea matricelor 33

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

afis, eaza 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, eaza matricea A cu linia a 2-a eliminata:A =

1 2 3 4

9 10 11 12�

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

afis, eaza matricea A cu liniile de la 2 pâna la 3 eliminate:A =

1 2 3 4�

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

afis, eaza 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, eaza 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,ioneaza s, i varianta de schimbare între ele a doua linii). �

34 2. Matrice

2.2 Operarea element cu element

Operat,iile cu matrice sunt aceleas, i cu cele date de tabelul de la pagina 7, dincazul numerelor. Ment,ionam ca operat,iile pot fi efectuate atât în sens matricealcât s, i element cu element (în ambele cazuri dimensiunile trebuie sa fie astfelîncât operat,iile sa poata fi facute).

Precizam doar ca, în cazul împart,irii,

ComandaMATLAB

Semnificat,ia

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

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

În cazul operat,iilor element cu element, fie doua matrice A = (ai,j) s, i B =(bi,j) . Atunci

ComandaMATLAB

Semnificat,ia

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

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

(se poate ca B sa 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 sa 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 sa fie s, i scalar)

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

ComandaMATLAB

Semnificat,ia

x*y’rezultatul este înmult,irea liniei x cu coloana y’(adica 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

7 Înmult,ind cu B^(-1) în partea dreapta obt,inem ca rezultatul X este matricea A*B^(-1).8 Înmult,ind cu A^(-1) în partea stânga obt,inem ca rezultatul X este matricea A^(-1)*B.

Cu toate acestea, pentru a determina vectorul X, MATLAB nu calculeaza inversa A^(-1) (carefoloses, te o metoda mai put,in precisa) ci aplica o metoda numerica care rezolva efectiv sistemulA*X = B, mai precis metoda de eliminare a lui Gauss (diferent,ele de precizie se vad daca ma-tricele sunt de dimensiuni mari).

2.2. Operarea element cu element 35

Exemplul 2.49 Comenzile

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

afis, eaza diferent,a matricelor A cu 5*A.

Comanda

>> a = 1./A

afis, eaza 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, eaza 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, eaza patratul matricei matricei A; trebuie ca dimensiunile sa fie astfelîncât sa se poate efectua înmult,irea matricelor A cu A.

Comanda

>> d = A.^2

afis, eaza matricea A cu fiecare element ridicat la patrat:d =

1 4 9

16 25 36

49 64 81

Comanda

>> e = A.^(-1)

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

Comanda

>> f = 2.^A

36 2. Matrice

afis, eaza matricea cu elementele 2ai,j .

Comanda

>> g = A.^B

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

2.3 Analiza datelor

MATLAB poate realiza o analiza statistica a seturilor de date. Aceste date sunt,mai întâi, organizate s, i reprezentate în tablouri.

Ca o convent,ie, fiecare coloana a tabloului reprezinta rezultatele masurariiaceleas, i variabile pentru fiecare element al es, antionului (al select,iei statistice)considerat (de exemplu, punctajele obt,inute la disciplina D1 de catre fiecareelev în parte din es, antionul considerat) iar fiecare linie reprezinta un set obser-vat,ii citite pentru un element al es, antionului (de exemplu, punctajele obt,inutela disciplinele D1, D2, D3,. . . de catre un elev din es, antionul considerat).

Printre comenzile legate de analiza datelor amintim pe urmatoarele. Aces-tea se pot aplica atât unei matrice A, cât s, i unui vector a (linie sau coloana). Încaz ca se aplica unei matrice, aceste comenzi act,ioneaza asupra fiecarei coloaneîn parte; astfel rezultatul va fi un vector linie (cu un numar de coloane egal cu

2.3. Analiza datelor 37

coloanele matricei A).

Comanda MATLAB Semnificat,ia

max(A) maximul elementelor fiecarei coloane a matricei A

min(A) minimul elementelor fiecarei coloane a matricei A

mean(A) media aritmetica a elementelor fiecareicoloane a matricei A

median(A) mediana elementelor fiecarei coloane a matricei A

var(A) dispersia (sau variant,a) elementelor fiecareicoloane a matricei A

std(A) deviat,ia standard elementelor fiecareicoloane a matricei A

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

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

sort(A) aranjarea în ordine crescatoare a elementelor fiecareicoloane a matricei A

sum(A) suma elementelor fiecarei coloane a matricei A

cumsum(A) suma cumulata a elementelor fiecarei coloanea matricei A (i.e.

∑ij=1 xj )

prod(A) produsul elementelor fiecarei coloane a matricei A

cumprod(A) produsul cumulat al elementelor fiecarei coloanea matricei A (i.e.

∏ij=1 xj )

diff(A) diferent,a elementelor fiecarei 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, eazaa =

0.44 0.38 0.77 0.80 0.19min =

0.19max =

0.80

38 2. Matrice

media =0.51

cresc =0.19 0.38 0.44 0.77 0.80

descr =0.80 0.77 0.44 0.38 0.19

suma =2.57

sumacumul =0.19 0.57 1.01 1.78 2.57

Exemplul 2.51 În ceea ce prives, te comanda sort, pentru a obt,ine aranjarea înordine descrescatoare, am folosit comanda -sort(-a)

Dar comanda sort permitea indicarea modului cum sa faca aranjarea. Ast-fel, comanda

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

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), adicadescr2 =

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, eazaA =

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.95

2.3. Analiza datelor 39

media =0.51 0.45

iar comanda

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

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

0.09maxabs =

0.95

Acelas, i rezultat se poate obt,ine daca se folosesc comenzile

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

(deoarece A(:) afis, eaza o coloana cu toate coloanele lui A puse una subalta). �

Exemplul 2.53 Exista s, i posibilitatea afis, arii indicelui elementului minim saumaxim. Astfel daca se scrie

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

se obt,in valorile minime (vector notat de noi cu minim) ale fiecarei coloanea lui A, precum s, i indicii (vector notat de noi cu i), în cadrul acelor coloane, arespectivelor valori minime:

minim =0.17 0.09

i =1 0.09

iar

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

se obt,in valorile maxime (vector notat de noi cu maxim) ale fiecarei coloanea lui A, precum s, i indicii (vector notat de noi cu j), în cadrul acelor coloane, arespectivelor valori maxime:

maxim =0.88 0.95

j =

3 4 �

Funct,ia max(A,a) returneaza maximul dintre elementele matricei A s, i sca-larul a.

Funct,ia max(A,B) returneaza maximul dintre elementele matricei A s, i alematricei B (trebuie sa aiba aceas, i dimensiune cu A).

Capitolul 3

Fisiere de tip script

Pentru probleme simple utilizarea ferestrei Command Window este suficienta(este rapida s, i eficienta). Dar daca numarul comenzilor cres, te s, i/sau se dores, teschimbarea unora dintre comenzi s, i/sau se dores, te schimbarea valorilor unorvariabile, este mult mai dificil de gestionat schimbarile în cadrul Command Win-dow. În acest sens, MATLAB permite crearea unor fis, iere separate, doar cu osuccesiune de comenzi. Acestea pot fi executate ca s, i cum ar fi fost scrise directîn Command Window iar rezultatele vor apare efectiv în Command Window.

Asemenea fis, iere sunt numite fisiere de tip script (de la termenul scriptcare înseamna faptul ca MATLAB cites, te efectiv caracterele din acel fis, ier) saufis, iere de tip M (deoarece fis, ierele script au extensia .m).

Sa ment,ionam ca fis, ierele de tip M pot fi utilizate s, i pentru a defini funct,ii.Prima linie a acestui tip de fis, iere începe obligatoriu cu cuvântul function

Pentru a crea un fis, ier de tip M se alege, din bara de instrumente (toolbar),New Script sau New s, i apoi se alege Script (sau Function, daca se dores, teun fis, ier M pentru a defini o funct,ie).

Daca în Command Window se scrie>> editse deschide fereastra cu editorul MATLAB-ului.

Apoi aceste fis, iere trebuie salvate. Numele trebuie sa înceapa cu o literacare poate fi urmata apoi de orice litera, cifra sau de simboluri underscore (nu-mit s, i underline).

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

Daca în Command Window scriem (în dreptul prompterului) numele exact(fara extensie) al acelui fis, ier, MATLAB va executa comenzile scrise în fis, ier,ca s, i cum ar fi fost scrise direct în Command Window. Rezultatele vor apare înCommand Window.

De asemenea, fis, ierul se va executa s, i daca utilizam Run din bara de instru-mente sau tastam F5

41

42 3. Fisiere de tip script

Ment,ionam ca pentru a executa fis, ierul script folderul ce apare în fereastraCurrent Folder trebuie sa coincida cu cel în care este salvat acel fis, ier script.

În general, este util sa adaugam s, i o scurta descriere a comenzilor ce aparîn acel script. Acestea se pot scrie daca inseram comentarii prin folosirea sem-nului % (liniile care încep cu % nu se vor executa)

Daca dorim sa scriem mai multe linii cu comentarii, putem folosi delimi-tatorii %{ %} s, i sa scriem în interiorul lor, pe diferite linii (dar nu în dreptulsemnelor %{ s, i %} ).

Exemplul 3.1 Prezentam 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)

Salvam aces fis, ier cu numele ProdScal_Norma s, i cu extensia .mDaca 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,ionam ca atunci când se executa un fis, ier de tip scriptvariabilele ce sunt utilizate în acel fis, ier trebuie sa fie deja definite s, i cu numeatribuit.

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

• ori declaram s, i numim variabilele într-un fis, ier de tip script (dupa primaexecutare a acestuia, toate variabilele declarate în el vor apare s, i ele înWorkspace);

• 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 sa apara în Command Window.

43

Când comanda de mai sus este executata, textul va fi afis, at în CommandWindow s, i va cere utilizatorului sa introduca o valoare ce va fi numitanume_var. Utilizatorul introduce valoarea s, i tasteaza Enter. Daca seadauga semnul ; dupa comanda, atunci valoarea introdusa de noi a vari-abilei nu se va mai afis, a.

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

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

Exemplul 3.2 Daca scriem

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

se va afis, a

Introduceti raza cercului =

Apoi utilizatorul trebuie sa introduca o valoare (de exemplu, 5) iar, dupa cese tasteaza Enter, va apare

R =5 �

As, a cum am vazut deja, MATLAB genereaza automat un display, când an-umite comenzi sunt executate; de exemplu, când o valoare este atribuita uneivariabile s, i se tasteaza Enter s, i apare în display variabila s, i valoarea ei.

În afara acestei afis, ari automate MATLAB pune la dispozit,ie alte doua co-menzi: comanda disp prin care se poate afis, a un text s, i/sau date numerices, i comanda fprintf prin care se poate afis, a un text s, i/sau date numericepreferate de noi s, i se pot, eventual, salva într-un fis, ier.

Comanda disp are structura:

disp(’nume_var’) sau disp(’text_afisat_doar_caractere’)

Comanda disp poate afis, a s, i variabile daca le convertim în caractere. Aceastapoate fi facuta folosind comanda num2str care are structura:

num2str(nume_var,6)

saunum2str(nume_var,’%-5.2f’)

unde:

• nume_var este variabila a carei valoare se dores, te a fi transformata încaractere (trebuie sa fie definita în prealabil);

• 6 indica numarul total de cifre (ale variabilei nume_var) ce dorim sa fieafis, ate;

44 3. Fisiere de tip script

• % indica începerea operatorului de formatare;

• - indica alinierea la stânga a numarului afis, at (exista s, i varianta + care,daca e utilizata, va afis, a semnul numarului);

• 5 indica lat,imea câmpului;

• 2 indica numarul de zecimale (ale valori variabilei) se doresc a fi afis, ate;

• f indica formatul de afis, are al numarului (exista s, i variantele: e, g, i).

Pentru a folosi efectiv comanda num2str în cadrul comenzii disp veziurmatorul exemplu.

Exemplul 3.3 Sa introducem trei note (cream vectorul nota s, i introducem com-ponentele lui) s, i sa le calculam media:

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

Varianta mai simpla de afis, are este (pentru aceasta, mai întâi, cream unvector cu textul de afis, at):

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

>> disp(a)

Alta varianta de afis, are este (dorim sa afis, am valoarea în formatul de maxim4 cifre):

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

>> disp(b)

Alta varianta de afis, are este (dorim sa afis, am valoarea în formatul de numarcu doua zecimale):

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

>> disp(c)

Sa afis, am 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 obtinut media ’,num2str(media,’%.2f’)];

>> disp(d) �

45

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

fprintf(’text_afisat_doar_caractere’)

Aceasta comanda poate fi folosita în Command Window, într-un fis, ier de tipscript sau într-un fis, ier de tip function.

Daca se dores, te trecerea pe o linie noua, în cadrul s, irului de caractere afis, ate(de exemplu, daca fraza afis, ata e prea lunga), atunci se insereaza

\n

înaintea caracterului care se dores, te sa apara pe o noua linie.Ment,ionam s, i faptul ca este util sa adaugam \n s, i la sfârs, itul textului de

afis, at; doar as, a prompterul MATLAB va apare pe o linie noua (altfel el vaaparea în continuarea textului afis, at).

Astfel, daca exista mai multe comenzi de tip fprintf (s, i fara semnul ; lasfârs, it), atunci ele vor afixa textele lor în continuu, unul dupa altul. De aceeaeste util utilizarea comenzii \n pentru a se trece la o alta linie.

De asemenea, daca se dores, te, este util sa adaugam comanda

fprintf(’\n’)

dupa o alta comanda de tip fprintf pentru a insera o linie noua (fara cont,i-nut), adica un spat,iu vertical dupa textul precedent.

Daca se dores, te inserarea unui spat,iu TAB în cadrul s, irului de caractereafis, ate, atunci se insereaza

\tacolo unde se dores, te inserarea spat,iului.

Exemplul 3.4 Daca scriem

>> fprintf(’Problema nu are solutie. \nVerificati datele de intrare ! \n’)se va afis, a

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

Daca exista mai multe comenzi de tip fprintf (s, i fara semnul ; la sfârs, it),atunci ele vor afixa textele lor în continuu, unul dupa altul. De aceea este utilutilizarea comenzii \n pentru a se trece la o alta linie.

Comanda fprintf (în varianta de afis, are a unui text dar s, i a datelor nu-merice) are structura:

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

unde:

46 3. Fisiere de tip script

• % indica începerea operatorului de formatare (deci faptul ca inseram va-loarea unei variabile); pot fi scrise mai multe semne % (deci vom apelacorespunzator mai multe variabile);

• nume_var este variabila ce se dores, te a fi afis, ata (trebuie sa fie definitaîn prealabil); pot fi enumerate mai multe variabile (deci în text vor aparecorespunzator mai multe semne % );

• - indica alinierea la stânga a numarului afis, at (exista s, i varianta + care,daca e utilizata, va afis, a semnul numarului);

• 5 indica lat,imea câmpului;

• 2 indica numarul de zecimale (ale valori variabilei) se doresc a fi afis, ate;

• f indica formatul de afis, are al numarului (exista s, i variantele: e, g, i).

Exemplul 3.5 Daca 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 variabilele

din cadrul comenzilor fprintf �

Capitolul 4

Functii

MATLAB furnizeaza câteva structuri care permit sa ne cream propriile funct,ii.Aceste structuri sunt funct,ii date de fis, iere separate de tip M (fisiere de tipfunction), funct,ii inline s, i funct,ii anonymous.

4.1 Fisiere de tip function

Daca dorim sa definim o funct,ie într-un fis, ier separat, de tip M, atunci structuraeste, în linii mari, urmatoarea:

function[argumente_iesire] = nume_fct(argumente_intrare)

%{

· · ·· · ·· · ·

comentariu în care explicam definit,ia funct,iei

%}

· · ·· · ·· · ·

definirea efectiva a funct,iei nume_fct

end

unde:

• function este cuvântul obligatoriu cu care trebuie sa înceapa primalinie;

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

47

48 4. Functii

• argumente_iesire sunt argumente de ies, ire; daca o funct,ie nu are ar-gumente de ies, ire, atunci [argumente_iesire] = pot lipsi; daca ofunct,ie are doar un argument de ies, ire, atunci parantezele patrate [ ]pot lipsi;

• argumente_intrare sunt argumente de intrare; daca o funct,ie nu areargumente de intrare, atunci parantezele rotunde ( ) pot lipsi;

• end poate lipsi.

Ment,ionam ca un fis, ier de tip M care defines, te o funct,ie nu se poate executa(doar fis, ierele de tip script se pot executa).

Exemplul 4.1 Sa cream 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, daca în Command Window scriem

>> help sumapatrate

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

>> sumapatrate(3,4)

se va afis, a

ans =0

Daca în Command Window scriem

>> rez = sumapatrate(3,4)

se va afis, a

rez =0

Daca în Command Window scriem

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

se va afis, a

ans =-23 -17

-7 7�

4.1. Fisiere de tip function 49

Exemplul 4.2 Sa cream un fis, ier de tip M cu numele fct_cerc.m care defineste ofunct,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) ];

Apoi, daca în Command Window scriem

>> help fct_cerc

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

>> fct_cerc(0)

se va afis, a o pereche de coordonate

ans =5 0

Daca î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 corespunzatoare lui 5.*cos(theta), apoi cele corespunzatoarelui 5.*sin(theta) )

ans =5 4.33 2.50 0 0 2.50 4.33 5

Daca în Command Window scriem

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

se vor afis, a patru perechi de coordonate (dar fiecare pereche (pe linie)reprezinta exact coordonatele unui punct de pe cercul x2 + y2 = 5, corespun-zator fiecarui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )

ans =5 0

4.33 2.50

2.50 4.33

0 5

Daca în Command Window scriem

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

se vor afis, a o suta de perechi de coordonate (fiecare pereche (pe linie)reprezinta exact coordonatele unui punct de pe cercul x2 + y2 = 5, corespun-zator fiecarui theta=linspace(1,pi/2,100) )

50 4. Functii

ans =5 0

4.33 2.50...

......

...

2.50 4.33

0 5�

Exemplul 4.3 Aceleas, i efecte se obt,in daca folosim transpunerea în cadrul de-finit,iei funct,iei (s, i nu atunci când apelam funct,ia):

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

Daca î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) repre-zinta exact coordonatele unui punct de pe cercul x2 + y2 = 5, corespunzatorfiecarui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )

ans =5 0

4.33 2.50

2.50 4.33

0 5�

Exemplul 4.4 Exista s, i varianta de a scrie:

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

Daca în Command Window scriem

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

se vor afis, a o suta de perechi de coordonate.Daca scriem

>> A = [comp1’,comp2’]

se vor afis, a o suta de perechi de coordonate (dar fiecare pereche (pe linie)reprezinta exact coordonatele unui punct de pe cercul x2 + y2 = 5 )

4.2. Functii inline 51

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

4.2 Functii inline

Exista numeroase situat,ii în care o funct,ie MATLAB sau una definita de noi tre-buie utilizata, ca argument, de catre alta funct,ie, pentru evaluare. Acest lucrupoate fi facut daca utilizam funct,iile definite în fis, iere de tip M sau în funct,iidefinite inline, dar exista s, i o a treia metoda mai eficienta: functii anonymous(vezi sect,iunea urmatoarea).

Daca dorim sa definim o funct,ie de tip inline, adica în lina de comanda,atunci scriem:

nume_fct = inline(’expresie_fct’)

Vom folosi, pentru exemplificare, funct,ia ezplot9 care reprezinta, în doua di-mensiuni (2D), graficul unei funct,ii data explicit (i.e. y = f (x) ), implicit (i.e.F (x, y) = 0 ) sau parametric (i.e. x = f (t) , y = g (t) ). Deci argumentul funct,ieiezplot este o alta funct,ie. Domeniul implicit considerat de funct,ia ezplotpentru variabila funct,iei argument este [−2π, 2π] (dar el se poate s, i schimba).

Exemplul 4.5 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.6 Evident, comanda

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

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

Exemplul 4.7 Sa cream, în Command Window, o funct,ie de tip inline (funct,ia dasuma patratelor a doua 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

Daca în Command Window scriem9 Easy-to-use function plotter

52 4. Functii

>> sumapatrate(3,4)

se va afis, a

ans =25 �

Exemplul 4.8 Daca se defines, te inline o funct,ie, atunci ordinea implicita a ar-gumentelor este cea alfabetica:

>> 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 daca se dores, te o anumita 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.9 Sa cream un fis, ier de tip M cu numele deriv_aprox.m pentru adefini funct,ia numita deriv_aprox care va da valoarea aproximativa a derivateiunei funct,ii, într-un punct, folosind faptul ca

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

, daca 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) ’ )

Daca scriem s, i>> deriv_aprox(functia2,.5)

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

1 + x2în punctul x = 0.5 :

ans =0.1131 �

4.3. Functii anonymous 53

4.3 Functii anonymous

O alta modalitate de a avea o funct,ie drept argument este de a utiliza o funct,iede tip anonymous; în acest sens trebuie sa utilizam un function handle (aceasta serealizeaza scriind caracterul @ în fat,a funct,iei care e argument).

Mai precis, definirea unei functii de tip anonymous este data de comanda

nume_fct = @(argumente_iesire) functia_efectiva

Exemplul 4.10 Comanda

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

defines, te funt,ia noua sq (x) = x2; este o funct,ie de tip anonymous (s, i serealizeaza 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.11 Comanda

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

defines, te funt,ia noua functia3 (t) = t sin t ; este o funct,ie de tip anonymous(s, i se realizeaza 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π] . �

Exemplul 4.12 Comanda

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

defines, te funt,ia noua f (x, y) = x4+ y4− 1 ; este o funct,ie de tip anonymous.

Scriind apoi

>> functia4(1,3)

va afis, a

ans =9 �

54 4. Functii

Exemplul 4.13 Comanda

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

va afis, a graficul funct,iei f (t) = t sin t (funct,ie de tip anonymous) cu t dinintervalul [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.14 Comanda

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

defines, te doua funct,ii noi x (t) , y (t) (funct,ii de tip anonymous) (sau o funct,iescalara data parametric: x = x (t) s, i y = y (t) )

Comanda

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

va afis, a graficul funct,iei data parametric (e−t cos (8t) , e−t sin (8t)) cu t dinintervalul [0, 3] . �

Exemplul 4.15 Sa cream un fis, ier de tip M cu numele deriv_aprox.m pentru adefini funct,ia numita deriv_aprox care va da valoarea aproximativa a deri-vatei unei funct,ii, într-un punct (vezi Exemplul 4.9)

function y = deriv_aprox(f,x)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,adica

(ex)′∣∣∣x=1≈ ex+h − ex

h, unde h := sqrt(eps)

deci o valoare aproximativa a lui e1 :

ans =2.7183 �

4.3. Functii anonymous 55

În final, ment,ionam alte câteva cazuri în care un function handle este utilizatpentru a utiliza o funct,ie (deja definita) drept argument.

Un exemplu util este comanda arrayfun care aplica o funct,ie (deja definitade noi sau de MATLAB) tuturor elementelor unei matrice conform structurii:

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

unde:

• functie este funct,ia pe care vrem sa o aplicam tuturor elementelor luiA ; aceasta funct,ie trebuie sa fie de o variabila reala cu valori scalare;

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

• A este matricea cu valori asupra careia aplic funct,ia functie

În cazul în care funct,ia functie este definita într-un fis, ier de tip M, putemscrie sub forma:

B = arrayfun(@functie,A)

Exemplul 4.16 Folosim aproximarea ln (x+ 1) '∑nk=1 (−1)

k+1 xk

k , pentruorice x ∈ (−1, 1], pentru n suficient de mare.

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

function y = dezv_ln(x)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 fiecarui element al matricei a:

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

Acelas, i efect se obt,ine daca scriem direct:

>> b = arrayfun(@dezv_ln,a)

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

Exemplul 4.17 În caz ca o funct,ie are mai multe argumente, putem procedaastfel.

Sa luam funct,ia de mai sus depinzând s, i de n (cream un fis, ier de tip functioncu numele dezv2_ln.m):

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

56 4. Functii

>> a = [-0.5 0 0.5]

Acum putem aplica funt,ia fiecarui element al matricei a:

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

Un alt exemplu util este comanda fzero cu ajutorul careia determinamzero-urile unei funct,ii (vezi pagina 81):

Exemplul 4.18 Fie

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

Sa 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 determinam nis, te valori particulare în care funct,ia îs, i schimba semnul;gasim 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). �

Exemplul 4.19 Comanda

>> ezplot(@sin)

va afis, a graficul funct,iei y = sin (x) cu x din intervalul [0, 2π] (am utilizatfunction handle pentru a utiliza funct,ia sin (predefinita în cadrul MATLAB)drept argument) �

Capitolul 5

Programare în MATLAB

Un program este o succesiune de comenzi. Acestea se executa ori una dupaalta (în ordinea în care au fost scrise), ori unele dintre ele se executa în alta or-dine în funct,ie de variabilele introduse, ori unele dintre ele se executa repetitivpâna când apare o valoare data. Schimbarea modului de act,ionare a comen-zilor necesita luarea anumitor decizii: când executa urmatoarea comanda, cândevita executarea urmatoarei comenzi sau când repeta o anumita comanda etc.Aceste decizii sunt luate prin compararea valorilor variabilelor. Iar acest aspecteste realizat utilizând operatorii relationali si pe cei logici.

5.1 Operatori relationali si operatori logici

În plus fat, a de operat,iile matematice obis, nuite, MATLAB suporta s, i operat,iirelat,ionale s, i logice. Scopul acestor operat,ii este de a raspunde la întrebari cudoua variante de raspuns: True (1) s, i False (0). Operatorii relationali în MAT-LAB se refera la comparat,iile obis, nuite, as, a cum se poate vedea în urmatorultabel:

Operator relat,ional Semnificat,ia

< mai mic decât

<= mai mic sau egal decât

> mai mare decât

>= mai mare sau egal decât

== egal10cu

∼= diferit de

10 A nu se confunda operatorul relational == (care compara doua variabile s, i afis, eaza 1 (True)daca sunt egale s, i 0 (False) daca sunt diferite) cu = care înseamna atribuirea unei valori (rezul-tatul unei operat,ii) unei variabile.

57

58 5. Programare în MATLAB

Daca se compara doua matrice, atunci cele doua matrice trebuie sa aibaaceleas, i dimensiuni s, i se compara element cu element. Rezultatul este o ma-trice (cu aceleas, i dimensiuni cu matricele comparate) de 0 s, i 1.

Se poate compara s, i un scalar cu o matrice atunci se compara scalarul cufiecare 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, eazaQ1 =

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

afis, eazaQ2 =

0 0 0 0 1 0 0 0 0 �

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

afis, eazaans =

1 0

0 0iar>> A <= B

afis, eazaans =

1 1

1 0�

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

afis, eazay =

0.8415 0.9276 0.9816 NaN 0.9816

0.9276 0.8415 �

Exemplul 5.4 Daca se dores, te ocolirea problemeisin 0

0, atunci redefinim pe x

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

5.1. Operatori relationali si operatori logici 59

s, i astfel se afis, eazay =

0.8415 0.9276 0.9816 1.0000 0.9816

0.9276 0.8415 �

Operatorii logici furnizeaza o modalitate de a combina sau nega expresiilerelat,ionale. MATLAB ofera urmatorii 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, a de operatorii logici s, i cei relat,ionali ment,ionat,i mai sus MATLABfurnizeaza urmatoarele funct,ii:

Funct,ia Semnificat,ia

and(x,y) echivalenta funct,ional cu x&y

or(x,y) echivalenta funct,ional cu x|y

not(x) echivalenta funct,ional cu ∼x

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

any(x)1 daca exista o componenta nenula a vectorului x;1 pentru fiecare coloana a matricei xpentru care exista o componenta nenula

all(x)1 daca toate componentele vectorului x sunt nenule;1 pentru fiecare coloana a matricei xcare are toate elementele nenule

Exemplul 5.5 Comenzile>> A = 8:-1:0 ; B = 9-A ; Q1 = (A>2) & (A<6)

afis, eaza 1 daca A este mai mare ca 4 s, i mai mic ca 6:Q1 =

0 0 0 1 1 1 0 0 0iar>> Q2 = and(A>4,A<6)

afis, eaza acelas, i lucru. �

60 5. Programare în MATLAB

Exemplul 5.6 Comenzile>> A = 8:-1:0 ; B = 9-A ; Q3 = (A<2) | (A>6)

afis, eaza 1 daca A este mai mare ca 4 sau mai mic ca 6:Q3 =

1 1 0 0 0 0 0 1 1

iar>> Q4 = or(A<2,A>6)

afis, eaza acelas, i lucru. �

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

afis, eazaQ5 =

0 0 0 0 1 1 1 1 1

iar>> Q6 = not(A>4)

afis, eaza acelas, i lucru. �

Exemplul 5.8 Comenzile>> a = 0 ; b = pi ; Q1 = a == 0 || b ∼= 1

afis, eazaQ1 =

1

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

afis, eazaQ2 =

0

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

afis, eaza, des, i 1/a = Inf,Q3 =

1

( a == 0 este True ceea ce este suficent pentru a obt,ine rezultatul final True;deci nu se mai calculeaza 1/a , adica a doua expresie nu mai este evaluata) �

5.1. Operatori relationali si operatori logici 61

Când MATLAB evalueaza o expresie conteaza s, i ordinea operat,iilor (iar înacest sens conteaza nivelul de precedent, a):

Operatorul Ordinea descrescatoare anivelului de precedent, a

parantezele 1

transpusa .’ transpusa conjugata ’puterea .^ puterea ^

2

plusul unar + minusul unar - negat,ia ∼ 3

înmult,irea .∗ înmult,irea ∗împart,irea ./ împart,irea /împart,irea .\ împart,irea \

4

adunarea + scaderea - negat,ia logica ∼ 5

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

6

< <= > >= == ∼= 7

& 8

| 9

&& 10

|| 11

Exemplul 5.9 Comenzile>> 1 | 0 & 0

afis, eazaans =

1iar>> 1 | (0 & 0)

afis, eazaans =

1iar>> (1 | 0) & 0

afis, eazaans =

0 �

Exemplul 5.10 Comenzile

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

62 5. Programare în MATLAB

afis, eazaans =

1 0 0

iar>> xor(x,y)

afis, eazaans =

1 1 0

iar>> all(y)

afis, eazaans =

0

iar>> any(y)

afis, eazaans =

1 �

Exemplul 5.11 Comenzile

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

afis, eazaans =

1 0 1

iar>> any(A)

afis, eazaans =

1 1 1 �

De asemenea, MATLAB furnizeaza numeroase funct,ii care testeaza existent,a

5.1. Operatori relationali si operatori logici 63

unor valori sau condit,ii anume:

Funct,ie Semnificat,ia

ischar testeaza daca argumentul este s, ir de caractere

isempty testeaza daca argumentul este vid

isequal testeaza daca tablourile sunt identice

isfinite testeaza daca elementele unui tablou sunt finite

isinf testeaza daca elementele unui tablou sunt infinite

islogical testeaza daca argumentul este un tablou logic

isprime testeaza daca argumentul este numar prim

isnumeric testeaza daca argumentul este s, ir de caractere

isreal testeaza daca argumentul este un tablou real

Funct,ia find aplicata unui vector spune ce indici corespund componentelornenule ale acelui vector. În cazul unei matrice funct,ia find spune ce indicicorespund elementelor nenule ale acelei matrice (indexarea elementelor matri-cei se face astfel: se scriu toate coloanele una sub alta s, i se numeroteaza fiecareelement în ordine crescatoare).

Exemplul 5.12 Comenzile

>> x = [-1 0 7] ; find(x)

afis, eazaans =

1 3

iar>> y = 1 : 100 ; isprime(y)

afis, eaza un vector linie cu 100 de coloane cu 1 (daca elementul corespunza-tor e prim) s, i 0 (daca elementul corespunzator nu e prim).

iar>> find(isprime(y))

afis, eaza indicii (din cei 100) corespunzatori lui 1 (adica numerelor prime dela 1 la 100). �

Exemplul 5.13 Comenzile

>> A = [-1 0 7 ; 3 0 -2] ; find(A)

afis, eazaans =

64 5. Programare în MATLAB

1

2

5

6

iar

>> find(A<0)

afis, eaza

ans =

1

6

5.2. Structuri if-elseif-else-end 65

5.2 Structuri if-elseif-else-end (si varianteleif-end, if-else-end)

Structura comenzii if-elseif-else-end este, în linii mari, urmatoarea:

· · ·· · ·· · ·

Program MATLAB

if expresie condit,ionata

· · ·· · ·· · ·

grup 1 de comenzi MATLAB

elseif expresie condit,ionata

· · ·· · ·· · ·

grup 2 de comenzi MATLAB

else

· · ·· · ·· · ·

grup 3 de comenzi MATLAB

end

· · ·· · ·· · ·

Program MATLAB

Ment,ionam ca elseif s, i grupul 2 de comenzi poate lipsi; astfel constructia sereduce la una de tip if-else-end.

De asemenea, elseif, else s, i grupurile 2 s, i 3 de comenzi pot lipsi; astfelconstructia se reduce la cea mai simpla forma a ei: o construct,ie de tip if-end.

Pe de alta parte, poate apare în plus un alt elseif însot,it de un alt grup decomenzi.

Daca prima expresia condit,ionata este adevarata (are valoarea 1), atunciprogramul continua sa execute toate comenzile care urmeaza dupa if, adicagrupul 1 de comenzi, pâna la elseif.

Daca prima expresie condit,ionata este falsa (are valoarea 0), atunci progra-mul omite sa execute grupul 1 de comenzi s, i trece direct la elseif. Daca

66 5. Programare în MATLAB

expresia condit,ionata asociata ei este adevarata (are valoarea 1), atunci progra-mul continua sa execute toate comenzile care urmeaza dupa elseif, adicagrupul 2 de comenzi, pâna la else.

Daca a doua expresie condit,ionata este falsa (are valoarea 0), atunci pro-gramul omite sa execute s, i grupul 2 de comenzi s, i trece direct la else s, i laexecutarea grupului de 3 comenzi, pâna la end.

Exemplul 5.14 Definim:

>> mere = 15 ; cost = mere * 1.5;

Acum calculam noul cost al merelor s, tiind ca daca vom cumpara mai multde 10 mere, atunci se da un discount de 20%:

>> if mere > 10cost = 0.8 * cost;

end

Acum, daca se scrie

>> cost

va apare

cost =18 �

Exemplul 5.15 Se defines, te, mai întâi, un numar folosind comanda input

>> numar = input(’Introduceti numarul = ’)

se va afis, a

Introduceti numarul =

Apoi utilizatorul trebuie sa introduca o valoare (de exemplu, −5) iar, dupace se tasteaza Enter, va apare

numar =-5

Apoi se testeaza: daca variabila noastra are valoarea pozitiva, se pastreaza,iar daca e negativ, atunci se înlocuies, te valoarea lui cu 0 :

>> if numar < 0numar = 0

end

Acum, daca se tasteaza Enter, va apare

numar =0

(daca numarul introdus ar fi fost pozitiv, atunci nu s-ar fi afis, at nimic).

5.2. Structuri if-elseif-else-end 67

Acum daca se scrie:

>> fprintf(’Radicalul numarului %.4f este %.4f \n’,numar, sqrt(numar))

se va afis, a

Radicalul numarului 0.0000 este 0.0000 �

Exemplul 5.16 O varianta este urmatoarea:

>> numar = input(’Introduceti numarul = ’)

Apoi utilizatorul trebuie sa introduca o valoare, de exemplu, −5.Apoi se scrie:

>> if numar < 0disp(’In acest caz vom folosi valoarea absoluta.’)numar = abs(numar)end>> fprintf(’Radicalul numarului %.4f este %.4f \n’,

numar, sqrt(numar))

s, i se va afis, a

In acest caz vom folosi valoarea absoluta.Radicalul numarului -5.0000 este 2.2361 �

Exemplul 5.17 Putem scrie un program de verificare daca un numar generataleator este sau nu mai mic decât 0.5 :

>> x = rand;>> if x < 0.5disp(x)disp(’Numarul aleator, uniform din (0,1),

generat de MATLAB este mai mic ca 0.5’)elsedisp(x)disp(’Numarul aleator, uniform din (0,1),

generat de MATLAB este mai mare ca 0.5’)end �

Exemplul 5.18 Sa cream un fis, ier de tip M cu numele fct_ramuri.m care de-fineste o funct,ie cu ramuri:

function y = fct_ramuri(x)%{definim o functie cu ramuriintr-un fisier de tip M%}if x < -1

68 5. Programare în MATLAB

y = 1;else

if x == -1y = 7

elseif x <= 2

y = x^2else

y=4end

endend

Apoi, daca în Command Window scriem

>> fct_ramuri(-5)

se va afis, a

ans =1 �

Exemplul 5.19 Aceeas, i funct,ie cu ramuri se obt,ine daca scriem scriem fis, ierulfct_ramuri2.m, folosind elseif

function y = fct_ramuri2(x)if x < -1

y = 1;elseif x == -1

y = 7elseif x <= 2

y = x^2else

y=4end �

5.3 Structuri ciclice de tip for-end

Un ciclu este o alta metoda de a controla desfas, urarea unui program. Fiecareciclu de executare este numit pas. În fiecare pas cel put,in unei variabile îi esteatribuita alta valoare. Într-un ciclu executarea unei comenzi sau a unui grup decomenzi este repetata de câteva ori: ori este precizat de la început numarul depas, i (instruct,iuni de tip for-end) ori se repeta pâna când o anumita condit,iee satisfacuta (instruct,iuni de tip while-end).

5.3. Structuri ciclice de tip for-end 69

Structura comenzii for-end este, în linii mari, urmatoarea:

· · ·· · ·· · ·

Program MATLAB

for k = a:h:b

· · ·· · ·· · ·

grup de comenzi MATLAB

end

· · ·· · ·· · ·

Program MATLAB

În primul pas avem k=a iar grupul de comenzi este executat cu aceasta valoarea lui k. Apoi noua valoare a lui k este a+h iar grupul de comenzi este executatdin nou cu noua valoare a lui k. S, .a.m.d. pâna se ajunge ca valoarea k=b cândse executa pentru ultima data grupul de comenzi folosind valoarea k=b. Apoise executa comenzile de dupa comanda end

Evident, pasul h poate fi negativ sau pozitiv. Daca a<b iar h<0 sau a>biar h>0, atunci pasul nu se executa.

Este posibil ca ultimul pas sa nu fie pentru k=b daca b nu poate fi scris subforma a+n*h, cu n ∈ N. Astfel, ultimul k pentru care se executa pasul este celmai mare numar de tipul a+n*h, cu n ∈ N, din stânga lui b.

În loc de vectorul a:h:b se poate scrie orice alta matrice linie se dores, te.

Exemplul 5.20 Vom genera o matrice folosind instruct,iunea for-endMa precis, vom scrie o matrice de ordin n× n cu 2 pe diagonala principala,

−1 deasupra s, i dedesubtul diagonalei principale s, i 0 în rest:

function A = matrice_sistem(n);for k = 1:n

for l = 1:nif k == l

A(k,l)=2;elseif abs(k-l) == 1

A(k,l) = -1;else

A(k,l) = 0;end

70 5. Programare în MATLAB

end

end �

Exemplul 5.21 Vom calcula suma primilor n termeni ai seriei∑∞

k=1

(−1)k k2k

.

Este convenabil sa scriem instruct,iunile într-un fis, ier de tip script s, i apoi sa îlexecutam:

n = input(’Introduceti numarul de termeni = ’)

S = 0;

for k = 1:n

S = S+(-1)^k*k/2^k;

end

fprintf(’Suma primilor %-.0f termeni ai seriei

este %-.6f \n’,n,S) �

Exemplul 5.22 S, tim dezvoltarea în serie Taylor a funct,iei sin :

sin (x) =∑∞

k=0

(−1)k x2k+1

(2k + 1)!.

Sa calculam valoarea sin (x) folosind aproximarea data de suma primilor ntermeni ai seriei precedente. Este convenabil sa definim un fis, ier de tip func-tion cu numele taylor_sin.m:

function y = taylor_sin(x,n)

xr = x*pi/180;

y=0

for k = 0:n-1

y = y+(-1)^k*xr^(2*k+1)/factorial(2*k+1);

end

fprintf(’Valoarea lui sin in %-.2f radiani este

aproximativ %-.6f (am folosit primii %-.0f

termeni ai dezvoltarii Taylor) \n’,xr,y,n) �

5.4 Structuri ciclice de tip while-end

Ciclul while-end este utilizat în situat,iile când sunt necesari pas, ii repetitividar nu se s, tie dinainte numarul pas, ilor (acesta nu este specificat când progra-mul începe). Pas, ii se repeta pâna când o anumita condit,ie este satisfacuta.

5.4. Structuri ciclice de tip while-end 71

Structura comenzii while-end este, în linii mari, urmatoarea:

· · ·· · ·· · ·

Program MATLAB

while expresie condit,ionata

· · ·· · ·· · ·

grup de comenzi MATLAB

end

· · ·· · ·· · ·

Program MATLAB

În primul pas avem o expresie condit,ionata ce trebuie verificata. Daca valoa-rea ei este falsa (are valoarea 0), atunci programul omite sa execute grupul decomenzi s, i trece direct la comenzile de dupa end. Daca expresia condit,ionataeste adevarata (are valoarea 1), atunci programul continua sa execute toatecomenzile dintre while s, i end. Apoi programul se întoarce la comanda whiles, i verifica din nou expresia condit,ionata s, i se reia procedeul de mai sus.

Expresia condit,ionata trebuie sa cont,ina cel put,in o variabila. În primul pasgrupul de comenzi este executat pentru prima data iar valoarea acelei (acelor)variabile este schimbata. Cu aceasta noua valoare este verificata din nou ex-presia condit,ionata. Daca e adevarata, atunci se executa din nou grupul decomenzi iar valoarea acelei (acelor) variabile este din nou schimbata. Grupulde comenzi este executat atâta timp cât valoarea acelei (acelor) variabile veri-fica expresia condit,ionata.

Exemplul 5.23 În acest program o variabila x ia valoarea 1 iar apoi valoarea eieste dublata atâta vreme cât valoarea ei este mai mica sau egala cu 15 :

>> x=1;>> while x <= 15

x = 2*xend �

Exemplul 5.24 Sa definim o funct,ie care verifica ce factorial este mai mic decâtun numar introdus de noi. Cream un fis, ier de tip function cu numele facto-rial_max.m:

function y = factorial_max(x)i = 0; fact = 1;

72 5. Programare în MATLAB

while fact <= x

i = i+1;

fact = fact*i;

end

y = fact/i

fprintf(’(am obtinut ca %-.0f ! e mai mic decat

numarul %-.0f introdus de noi)’,i-1,x) �

Exemplul 5.25 S, tim dezvoltarea în serie Taylor a funct,iei exp :

exp (x) =∑∞

k=0

xk

k!.

Sa calculam valoarea exp (x) folosind aproximarea data de suma primilor ntermeni ai seriei precedente. Dar sa facem verificarea: daca noul termenadunat la suma este mai mic decât 0.0001 sau daca numarul de termeni de-pas, es, te 40, atunci nu mai adagam nici un termen nou la suma termenilor.Este convenabil sa scriem instruct,iunile într-un fis, ier de tip script s, i apoi saîl executam:

x = input(’Introduceti valoarea = ’)

k =1; xk = 1 ; S = xk;

while abs(xk) >= 0.0001 & k <= 40

xk = x^k/factorial(k);

S = S + xk;

k = k+1;

end

if k >= 40

disp(’S-au adaugat mai mult de 40 de termeni’)

else

fprintf(’exp(%-.2f) = %-.6f \n(s-au adaugat

%-.0f termeni)\n’, x,S,k)

end �

5.5. Structuri switch-case 73

5.5 Structuri switch-case

Structura comenzii switch-case este, în linii mari, urmatoarea:

· · ·· · ·· · ·

Program MATLAB

switch expresie de tip switchcase expresie în cazul 1

· · ·· · ·· · ·

grup 1 de comenzi MATLAB

case expresie în cazul 2

· · ·· · ·· · ·

grup 2 de comenzi MATLAB

otherwise

· · ·· · ·· · ·

grup 3 de comenzi MATLAB

end

· · ·· · ·· · ·

Program MATLAB

O structura de tip switch-case este o alta metoda de a controla desfas, u-rarea unui program. Aceasta structura furnizeaza mai multe variante de grupede comenzi pe care programul sa le execute în funct,ie de expresia de tip switchintrodusa de noi. Expresia de tip switch poate fi un scalar sau un s, ir de caractere(de obicei este o variabila care este asociata unui scalar sau unor caractere).

Apoi se verifica daca valoarea variabilei din expresia de tip switch este într-unul dintre cazurile enumerate în program: daca se potrives, te cu valoarea dincazul 1, se executa grupul 1 de comenzi s, i programul se termina; daca nu esteîn cazul 1, se studiaza daca se potrives, te cu valoarea din cazul 2; s, .a.m.d. pânase ajunge, eventual, la otherwise

74 5. Programare în MATLAB

Sa precizam ca expresia dintr-un caz poate cont,ine mai multe variante.Grupul din cazul respectiv este executat daca cel put,in una dintre valori sepotrives, te cu expresia de tip switch.

Exemplul 5.26 Vom scrie un program care sa converteasca centimetrii introdus, ide noi într-o alta unitate de masura indicata de noi. Ment,ionam ca unitatea demasura trebuie introdusa de noi (fiind un s, ir de caractere) între doua semne ’

Este convenabil sa scriem instruct,iunile într-un fis, ier de tip script numit, deexemplu, switch_ex1.m s, i apoi sa îl executam:

x = input(’Introduceti valoarea, in centimetri,pe care doriti sa o transformati = ’);

unit = input(’Introduceti unitatea de masurain care doriti sa transformamvaloarea introdusa;\nvariantele sunt:inch (in), feet (ft), metri (m),milimetri (mm), centimetri (cm) = ’);

switch unitcase{’inch’,’in’}

y = x / 2.54case{’feet’,’ft’}

y = x / 2.54 / 12case{’metri’,’m’}

y = x / 100case{’milimetri’,’mm’}

y = x * 10case{’centimetri’,’cm’}

y = xotherwise

disp([’Unitate de masura necunoscuta: ’ unit])y = nan

end �

Exemplul 5.27 Vom scrie un program care sa calculeze norma11, introdusa denoi, a unui vector introdus de noi. Este convenabil sa scriem instruct,iunile într-un fis, ier de tip script numit, de exemplu, switch_ex2.m s, i apoi sa îl executam:

v = input(’Vectorul v = ’);p = input(’Scrieti indicele p al normei pe care doriti

sa o calculam (p = 1,2,inf,-inf)= ’);switch p

case 1disp(’Norma 1 este = ’)y = norm(v,1)

11 Comanda norm(A,p) calculeaza norma matricei sau vectorului A în raport cu indicelenormei p care poate fi 1, 2,∞ sau −∞, i.e. norm(A,p)=sum(abs(A)^p)^(1/p). Pentru detalii(definit,ii, sintaxa, exemple etc.) utilizeaza comanda doc norm în Command Window.

5.5. Structuri switch-case 75

case 2disp(’Norma 2 este = ’)y = norm(v,2)

case infdisp(’Norma Inf este = ’)y = norm(v,inf)

case -infdisp(’Norma -Inf este = ’)y = norm(v,-inf)

otherwisedisp(’Norma nu poate fi calculata in raport

cu p-ul introdus ’)y = nan

end �

Capitolul 6

Polinoame

MATLAB furnizeaza o serie de funct,ii ce opereaza asupra polinoamelor (deter-minarea derivatelor, a integralelor sau gasirea radacinilor).

Valoarea unui polinom într-un punct este data de

polyval(p,x)

unde p este vectorul (linie) cu tot,i coeficient,ii polinomului avut în vedere (co-eficient,ii nuli trebuie, de asemenea, trecut,i în p ) iar x este valoarea în care sedores, te calculul polinomului.

Exemplul 6.1 Sa reprezentam grafic polinomul

P (x) = x5 − 12.1x4 + 40.59x3 − 17x2 − 71.95x+ 35.88

pentru −1.5 ≤ x ≤ 6.7.Scriem

>> p1 = [1 -12.1 40.59 -17 -71.95 35.88]>> val = polyval(p1,9)

s, i obt,inem

val =7.2623e+03

iar daca dorim graficul scriem:

>> x = -1.5:0.1:6.7;>> y = polyval(p1,x);>> plot(x,y) �

Daca dorim sa determinam radacinile unui polinom folosim comanda

roots(p)

77

78 6. Polinoame

unde p este vectorul cu coeficient,ii polinomului avut în vedere.Ment,ionam ca polinomul trebuie introdus ca un vector linie iar radacinile

sunt afis, ate ca un vector coloana.

Exemplul 6.2 Sa determinam radacinile polinomului

P (x) = 2x4 − 6x3 + 2x2 + 86.

Scriem

>> p2 = [2 -6 2 0 86]>> r2 = roots(p2)

s, i obt,inem

r2 =2.7147 + 1.5601i

2.7147 - 1.5601i

-1.2147 + 1.7062i

-1.2147 - 1.7062i�

Daca dorim sa determinam polinomul care are nis, te radacini date folosimcomanda

poly(r2)

unde r2 este vectorul (coloana) al radacinilor.

Exemplul 6.3 Sa determinam polinomul care are radacinile date de vectorulr2 din exemplul precedent:

>> pol2 = poly(r2)

va afis, a

pol2 =

1.00 -3.00 1.00 0.00 43.00 �

Daca dorim sa determinam produsul a doua polinoame folosim comanda

conv(p,q)

unde p,q sunt vectorii cu coeficient,ii celor doua polinoame.

Exemplul 6.4 Sa determinam produsul a doua polinoame:

>> p3 = [2 1 -3 1]; p4 = [1 -4 3 23];>> u = conv(p3,p4)

Obt,inem

u =1 -7 -1 62 10 -66 23 �

79

Daca dorim sa determinam câtul s, i restul împart,irii a doua polinoamefolosim comanda

deconv(p,q)

unde p,q sunt vectorii cu coeficient,ii celor doua polinoame.

Exemplul 6.5 Sa determinam câtul s, i restul împart,irii a doua polinoame (folo-sim polinoamele precedente):

>> [cat,rest] = deconv(u,p4)

Obt,inem, evident,

cat =2 1 -3 1

rest =0 0 0 0 0 0 0 �

Evident, suma s, i diferent,a a doua polinoame se face utilizând suma s, i re-spectiv scaderea a doi celor doi vectori linie dat,i de coeficient,i. Daca gradelepolinoamelor sunt diferite, atunci trebuie adaugat 0 corespunzator la coefici-ent,ii polinomului cu gradul mai mic.

Daca dorim sa determinam derivata s, i primitiva unui polinom folosim co-manda

polyder(p)

s, i respectivpolyint(p,C)

unde p este vectorul cu coeficient,ii polinomului iar C este constanta care vaapare ca termen liber al primitivei; daca se scrie doar polyint(p), atunci seconsidera ca C este luat 0.

Exemplul 6.6 >> v = polyder(p3)>> w = polyint(v,1)

Obt,inem

v =6 2 -3

w =2 1 -3 1 �

Capitolul 7

Rezolvarea numerica a unorprobleme

Metodele numerice sunt des utilizate în rezolvarea unor probleme matematiceatunci când este dificil (sau imposibil) de determinat solut,ia exacta. În aceastasect,iune vom prezenta câteva dintre funct,iile des utilizate în rezolvarea ur-matoarelor probleme: rezolvarea ecuat,iilor cu o necunoscuta, determinareaminimului s, i maximului unei funct,ii, integrarea numerica s, i rezolvarea unorecuat,ii diferent,iale.

7.1 Rezolvarea ecuatiilor

Ne intereseaza determinarea punctelor în care o funct,ie scalara de o variabilareala ia o valoare anume. De exemplu, daca dorim sa aflam x astfel încâtf (x) = y, atunci, în caz ca exista inversa, valoarea x este data de x := f−1 (y) .Dar daca inversa nu exista, atunci, MATLAB trebuie sa estimeze, printr-o pro-cedura iterativa, valoarea x pentru care g (x) := f (x)− y = 0 (de aceea proce-dura iterativa se numes, te zero finding).

În MATLAB zero-urile reale ale unei funct,ii pot fi determinate cu ajutorulcomenzii

x = fzero(functie,x0)

unde:

• x este un scalar care va fi solut,ia problemei;

• functie este funct,ia la care ne referim; aceasta poate fi introdusa în maimulte moduri (as, a cum este descris în Capitolul 4): utilizând un fis, ier detip M, o funct,ie de tip inline, o funct,ie de tip anonymous, un function handlesau combinat,ii de acestea;

81

82 7. Rezolvarea numerica a unor probleme

• x0 poate fi scalar sau un vector cu doua elemente; daca e scalar, atuncix0 este valoarea în jurul careia MATLAB cauta un zero al funct,iei date;daca e un vector cu doua elemente, atunci x0 reprezinta capetele unuiinterval în care funct,ia data trebuie sa îs, i schimbe semnul.

Exemplul 7.1 Sa determinam zero-urile funct,iei:

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

Sa definim 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;

Sa studiem în ce valori f îs, i schimba semnul. Pentru aceasta, mai întâi, saschit, am graficul lui f :

>> x = -7:0.1:7;>> y = x.^3-x.^2-3.*atan(x)+1;>> plot(x,y)

Apoi determinam nis, te valori particulare în care funct,ia îs, i schimba semnul;gasim f (−2) < 0, f (−1) > 0 apoi f (0) > 0, f (1) < 0 apoi f (1) < 0, f (2) > 0,adica sunt trei zero-uri în intervalele [−2,−1] , [0, 1] s, i respectiv [1, 2] .Zero-urilese pot determina scriind:

>> zero1 = fzero(’fct_fzero’,[-2 -1])>> zero2 = fzero(’fct_fzero’,[0 1])>> zero3 = fzero(’fct_fzero’,[1 2])

s, i se va afis, a

zero1 =1.2780

zero2 =0.3204

zero3 =1.7205

(se poate face s, i proba calculând funct,ia în fiece zero gasit). �

Exemplul 7.2 Acelas, i rezultat se obt,ine daca apelam astfel funct,ia f :

>> zero1 = fzero(’x.^3-x.^2-3.*atan(x)+1’,[-2 -1])>> zero2 = fzero(’x.^3-x.^2-3.*atan(x)+1’,[0 1])>> zero3 = fzero(’x.^3-x.^2-3.*atan(x)+1’,[1 2]) �

Exemplul 7.3 Acelas, i rezultat se obt,ine daca apelam astfel funct,ia f (folosimun function handle):

>> zero1 = fzero(@fct_fzero,[-2 -1])>> zero2 = fzero(@fct_fzero,[0 1])>> zero3 = fzero(@fct_fzero,[1 2]) �

7.2. Determinarea minimului si maximului 83

Exemplul 7.4 Acelas, i rezultat se obt,ine daca definim funct,ia f ca fiind de tipinline:

>> fct_fzero = inline(’y = x.^3-x.^2-3.*atan(x)+1’)

s, i apoi o apelam

>> zero1 = fzero(fct_fzero,[-2 -1])>> zero2 = fzero(fct_fzero,[0 1])>> zero3 = fzero(fct_fzero,[1 2]) �

Exemplul 7.5 Acelas, i rezultat se obt,ine daca definim funct,ia f ca fiind de tipanonymous (folosim un function handle):

>> fct_fzero = @(x) x.^3-x.^2-3.*atan(x)+1

s, i apoi o apelam

>> zero1 = fzero(fct_fzero,[-2 -1])>> zero2 = fzero(fct_fzero,[0 1])>> zero3 = fzero(fct_fzero,[1 2]) �

Exemplul 7.6 Acelas, i rezultat se obt,ine daca definim funct,ia f ca fiind de tipanonymous (folosim un function handle):

>> zero1 = fzero(@(x) x.^3-x.^2-3.*atan(x)+1,[-2 -1])>> zero2 = fzero(@(x) x.^3-x.^2-3.*atan(x)+1,[0 1])>> zero3 = fzero(@(x) x.^3-x.^2-3.*atan(x)+1,[1 2]) �

7.2 Determinarea minimului si maximului

Ne intereseaza determinarea valorilor extreme ale unei funct,ii adica a punctelorde minim s, i maxim ale unei funct,ii scalare de o variabila reala.

Aceste valori extreme (în care funct,ia îs, i atinge minimul sau maximul) sunts, i ele estimate prin proceduri iterative. Având în vedera ca maximul funct,ieieste minimul funct,iei opuse (i.e. punctul de maxim local x0 este dat de−f (x0) =min {−f (x)} iar valoarea maxima este data de f (x0) ), este suficient sa nereferim la procedurile de minimizare.

În MATLAB punctele de minim local ale unei funct,ii pot fi determinate cuajutorul comenzii

x = fminbnd(functie,x1,x2)

unde:

• x este un scalar care va fi solut,ia problemei; exista s, i varianta de co-manda:

[x,fval] = fminbnd(functie,x1,x2)

unde fval este valoarea funct,iei în punctul x de minim local gasit;

84 7. Rezolvarea numerica a unor probleme

• functie este funct,ia la care ne referim; aceasta poate fi introdusa în maimulte moduri (la fel ca în cazul comenzii fzero);

• x1,x2 sunt capetele intervalului unde se cauta minimul.

Evident, pentru gasirea punctelor de maxim local definim, mai întâi, funct,iafunctie2 = opusul funct,iei date s, i apoi scriem

x = fminbnd(functie2,x1,x2)

Exemplul 7.7 Sa determinam punctele de minim s, i maxim local ale funct,iei:

f (x) = x3 − 12x2 + 40.25x− 36.5 .

Mai întâi sa schit, am graficul lui f :

>> x = -1:0.1:8;>> y = x.^3-12*x.^2+40.25*x-36.5;>> plot(x,y)

Acum avem o imagine asupra punctelor de extrem. Pentru a determinapunctele de minim local din intervalul [3, 8] scriem:

>> [x_min,f_min]=fminbnd(’x^3-12*x^2+40.25*x-36.5’,3,8)

s, i se va afis, a

x_min =5.6073

f_min =-11.8043

Pentru a determina punctele de maxim local din intervalul [0, 4] scriem:

>> x_max=fminbnd(’-x^3+12*x^2-40.25*x+36.5’,0,4)

s, i se va afis, a

x_max =2.3927

Pentru a determina punctele de minim local din intervalul [−1, 3] scriem:

>> [x_min2,f_min2]=fminbnd(’x^3-12*x^2+40.25*x-36.5’,-1,3)

s, i se va afis, a

x_min2 =-1.000

f_min2 =-89.7458 �

7.3. Integrarea numerica 85

7.3 Integrarea numerica

Ne intereseaza calculul integralelor definite din funct,ii scalare de o variabilareala. Aceste integrale pot fi determinate analitic, dar, având în vedere cafoarte multe funct,ii (mai ales cele din exemplele reale) nu pot fi (sau este di-ficil) integrate analitic (de exemplu, funct,iile sunt date doar ca o mult,ime dedate/puncte), este util sa avem metode numerice de calcul a integralelor.

În MATLAB integrala definita poate fi calculata cu ajutorul comenzilor:quad12 (care utilizeaza metoda Simpson de integrare numerica), quadl13 (careutilizeaza metoda Lobatto de integrare numerica) s, i trapz (care utilizeazametoda trapezelor de integrare numerica; este utilizata, mai ales, pentru funct,iicare nu sunt date explicit ci doar prin puncte de tipul (x, y) ) cu structurile

quad(functie,a,b,tol)

quadl(functie,a,b)

trapz(x,y)

unde:

• functie este funct,ia pe care o integram; aceasta poate fi introdusa înmai multe moduri (la fel ca în cazul comenzii fzero);

• a,b sunt limitele de integrare; funct,ia f nu trebuie sa aiba puncte singu-lare în intervalul [a, b] , adica sa nu aiba asimptote verticale în puncte din[a, b] ;

• tol este un argument opt,ional care indica eroare cu care se dores, te sa seobt,ina rezultatul (valoarea implicita este 1.0e-6, adica 10−6 );

• x,y sunt vectori de aceeas, i dimensiune reprezentând coordonatele unorpuncte (sunt punctele (x, y) cu y = f (x) , unde f este funct,ia de integrat).

Integrala dubla se calculeaza utilizând comanda dblquad

dblquad(functie,xmin,xmax,ymin,ymax,tol,method)

unde:

• functie este funct,ia f (x, y) pe care o integram;

• xmin,xmax sunt limitele de integrare pentru variabila x;

• ymin,ymax sunt limitele de integrare pentru variabila y;

• tol este un argument opt,ional care indica eroare cu care se dores, te sa seobt,ina rezultatul (valoarea implicita este 1.0e-6, adica 10−6 );

12 De la cuvântul din limba engleza quadrature.13 Ultima litera este L de la Lobatto.

86 7. Rezolvarea numerica a unor probleme

• method este metoda de calcul (variantele sunt quad (metoda implicita),quadl).

Integrala tripla se calculeaza utilizând comanda triplequad

Exemplul 7.8 Sa calculam integrala∫ 8

0

(x e−x

0.8

+ 0.2)dx.

Mai întâi sa schit, am graficul lui f pentru a avea o imagine asupra funct,iei(funct,ia f nu trebuie sa aiba asimptote verticale în intervalul [a, b] ):

>> x = 0:0.1:8;>> y = x.*exp(-x.^0.8)+0.2;>> plot(x,y)

Pentru a calula integrala putem defini funct,ia de integrat în mai multefeluri. De exemplu:

>> int1 = quad(’x.*exp(-x.^0.8)+0.2’,0,8)

sau (daca definim funct,ia de tip anonymous)

>> fct_int1 = @(x) x.*exp(-x.^0.8)+0.2;>> int2 = quad(@fct_int,0,8)sau (daca funct,ia noastra este deja definita într-un fis, ier separat fct_int2.m)

>> int3 = quad(@fct_int2,0,8) �

Exemplul 7.9 Sa calculam, prin metoda trapezelor, integrala∫ π

0

sin (x) dx.

>> x = linspace(0,pi,100);>> y = sin(x);>> int4 = trapz(x,y) �

Exemplul 7.10 Sa calculam integrala dubla∫∫

D

(1 − 6x2y

)dxdy, unde D =

[−1, 1]× [0, 2] :

>> int5 = dblquad(’1-6*x.^2*y’,-1,1,0,2) �

Exemplul 7.11 Sa calculam integrala dubla∫∫

D

(1 − 6x2y

)dxdy, unde D =

{(x, y) : x ∈ [0, 1] , y ∈ [x, 1]} .Observam ca limitele de integrare nu mai sunt constante. Pentru a putea

folosi comanda dblquad observam ca putem scrie∫∫[0,1]×[x,1]

f (x, y) dxdy =

∫∫[0,1]×[0,1]

f (x, y) 1{y≥x} dxdy

(notat,ia 1{y≥x} reprezinta funct,ia indicatoare a mult,imii {y ≥ x} , adica 1{y≥x}este 1, daca y ≥ x s, i 0 în rest).

Deci

>> int6 = dblquad(’(1-6*x.^2*y).*(y-x >= 0)’,0,1,0,1)�

7.4. Algebra liniara 87

7.4 Algebra liniara

As, a cum am vazut deja (vezi pagina 34 si nota de subsol 8), sistemele de ecuat,iiliniare se rezolva scriind sistemul sub forma matriceala

AX = b,

unde A este matricea sistemului, X este matricea coloana a necunoscutelor iarb este matricea coloana a termenilor liberi.

Solut,ia va fi obt,inuta scriind

X = A\b

O alta metoda de rezolvare este folosind comanda

rref

aplicata matricei extinse asociate unui sistem liniar. Aceasta metoda constaîn rezolvarea sistemului folosind metoda de eliminare a lui Gauss prin carematricea este redusa la forma triunghiulara.Mai întâi scriem matrice extinsa obt,inuta prin concatenarea celor doua matrice:

>> Aext = [A b];

Scriem comanda

>> sol = rref(Aext)

Rezultatul sol este o matrice de forma

sol = [C d]

unde C este o matrice superior triunghiulara obt,inuta prin metoda lui Gaussiar C s, i d sunt astfel încât vectorul solut,ie X verifica

C*X = d

De aici se pot obt,ine us, or necunoscutele componente ale vectorului X.Evident, din forma matricei triunghiulare C s, i a matricei S deducem s, i

natura sistemului:

• daca matricea triunghiulara C este chiar matricea unitate (s, i este matricepatratica), atunci sistemul este compatibil determinat iar solut,ia sistemu-lui este data chiar de coloana d

• daca matricea triunghiulara C are ultima linie formata doar din zero-uriiar matricea sol are s, i ea ultima linie formata din zero-uri14, atunci sis-temul este compatibil nedeterminat iar solut,ia sistemului este data derezolvarea sistemului C*X = d

14 De exemplu, C =

1 0 −30 1 −20 0 0

s, i sol =

1 0 −3 3.4

0 1 −2 3.1

0 0 0 0

.

88 7. Rezolvarea numerica a unor probleme

• daca matricea triunghiulara C are ultima linie formata din zero-uri darmatricea sol nu are ultima linie formata din zero-uri15, atunci sistemuleste incompatibil.

Exemplul 7.12 Sa rezolvam sistemul cu matricele A =

5 −3 2

−3 8 4

2 4 −9

s, i

b =[10 20 9

]t:

Metoda 1:

>> A = [5 -3 2 ; -3 8 4 ; 2 4 -9]; b = [10 ; 20 ; 9];>> X1 = A\b>> proba1 = A*X1

s, i obt,inem X1 =

3.4441

3.1981

1.1867

.Metoda 2:scriem matrice extinsa obt,inuta prin concatenarea celor doua matrice:

>> Aext = [A b];

Solut,ia este data de

>> sol = rref(Aext)

Rezultatul sol este o matrice cu trei linii s, i patru coloane, adica de forma

sol = [C d]

În cazul nostru, obt,inem sol =

1 0 0 3.4441

0 1 0 3.1981

0 0 1 1.1867

Valorile s, i vectorii proprii asociat,i unei matrice sunt dat,i de comanda eigcare, aplicata unei matrice, va returna matricea cu vectorii proprii, scris, i pecoloana, s, i o matrice diagonala cu valorile proprii pe diagonala. Mai precis,scriem

[Vect , Val] = eig(A)

unde:

15 De exemplu, C =

1 0 −30 1 −20 0 0

s, i sol =

1 0 −3 3.4

0 1 −2 3.1

0 0 0 1.1

.

7.4. Algebra liniara 89

• Vect este numele dat de noi matricei cu vectorii proprii, scris, i pe coloana,returnata de eig

• Val este numele dat de noi matricei diagonala cu valorile proprii pe di-agonala, returnata de eig

• A este matricea introdusa de noi.

MATLAB furnizeaza s, i funct,ii pentru descompunerea s, i factorizarea ma-tricelor:

ComandaMATLAB

Semnificat,ia

[L,U] = lu(A)

factorizarea LU (lower-upper)

MATLAB returneazamatricea inferior triunghiulara Lmatricea superior triunghiulara Uastfel încât L*U = A

[Q,R] = qr(A)

factorizarea QR (ortogonal-triunghiulara)

MATLAB returneazamatricea ortogonala16Qmatricea superior triunghiulara Rastfel încât Q*R = A

R = chol(A)

factorizarea Cholesky

MATLAB returneazamatricea superior triunghiulara Rastfel încât R’*R = A

[U,D,V] = svd(A)

factorizarea SVD (singular value decomposition)

MATLAB returneazamatricea ortogonala U (de tip m×m)matricea ortogonala V (de tip n× n)matricea diagonala D (de tip m× n)astfel încât U*D*V’ = A (de tip m× n)

16 Spunem ca matricea Q este ortogonala daca este matrice patratica s, i are liniile (s, i respectivcoloanele) vectori unitate s, i ortogonali între ei, adica

Qt Q = QQt = I

sau, echivalent, inversa matricei Q coincide cu transpusa Qt, i.e. Q−1 = Qt.

7.5 Ecuatii diferentiale

Doar un numar limitat de ecuat,ii diferent,iale pot fi rezolvate analitic. În schimbexista diverse metode numerice care pot rezolva multe tipuri de ecuat,ii dife-rent,iale.

În cadrul acestei sect,iuni vom prezenta comenzile de rezolvare a urmatoareiecuat,ii diferent,iale de ordinul 1 x′ (t) = f (t, x) , t ∈ [t0, T ]

x (t0) = x0 .

O solut,ie înseamna o funct,ie x = x (t) astfel încât x′ (t) = f (t, x (t)) , pentruorice t ∈ [t0, T ] . În general sunt mai multe funct,ii care satisfac aceasta ecuat,ie.Pentru determinarea unei singure funct,ii trebuie sa folosim s, i condit,ia init,ialax (t0) = x0 .

Ment,ionam ca funct,ia f poate fi vectoriala (deci avem un sistem de ecuat,iidiferent,iale de ordinul întâi).

MATLAB furnizeaza urmatoarele comenzi de rezolvarea a ecuat,ii diferen-t,iale de ordinul 1:

ComandaMATLAB

Semnificat,ia

ode45

pentru probleme nonstiffrezolvare într-un singur passe foloses, te ca prima încercareeste bazata pe metoda explicita Runge-Kutta

ode23

pentru probleme nonstiffrezolvare într-un singur paseste bazata pe metoda explicita Runge-Kuttamai rapida dar mai put,in precisa ca ode45

ode113 pentru probleme nonstiffrezolvare în mai mult,i pas, i

ode15spentru probleme stiffrezolvare în mai mult,i pas, ise foloses, te daca ode45 es, ueaza

ode23spentru probleme stiffrezolvare într-un singur paspoate rezolva probleme pe care ode15s nu poate

Structura comenzii ode45 este urmatoarea:

[t , y] = ode45(functie,interval,y0)

unde:

7.5. Ecuatii diferentiale 91

• functie este funct,ia care apare în ecuat,ia diferent,iala; aceasta poate fiintrodusa în mai multe moduri (la fel ca în cazul comenzii fzero);

• interval este intervalul pe care vom obt,ine solut,ia; acesta cont,ine celput,in doua puncte: daca are doua elemente, este de tipul [t0,T] undet0 este punctul init,ial s, i T este punctul final al domeniului solut,iei s, i sevor afis, a valorile solut,iei x (t) în valori din intervalul [t0,T] consider-ate de MATLAB; daca are mai multe elemente (putem lua, de exemplu,interval=[t0:h:T] ), atunci se vor afis, a valorile funct,iei în valorileindicate de noi;

• y0 este valoarea indicata a funct,iei date în punctul init,ial indicat t0;

• t este vectorul coloana cu toate punctele în care s-a aproximat solut,ia decatre MATLAB (primul s, i ultimul sunt respectiv t0 s, i T);

• y este vectorul coloana cu toate valoarea solut,iei x (t) în punctele vec-torului tîn care s-a aproximat solut,ia de catre MATLAB (primul s, i ultimulsunt respectiv t0 s, i T);

Exemplul 7.13 Sa se rezolve ecuat,ia diferent,iala de ordinul întâi: x′ (t) =t3 − 2x

t, t ∈ [1, 3]

x (1) = 4.2 .

Mai întâi, definim într-un fis, ier fct1_ODE.m funct,ia f (t, x) :

function z = fct1_ODE(t,x)z = (t.^3-2*x)./t

Apoi scriem:

>> [t , y] = ode45(@fct1_ODE,[1,3],4.2)

Daca dorim valoarea solut,iei în câteva valori, indicate de noi, atunci scriem

>> [t , y] = ode45(@fct1_ODE,[1:0.5:3],4.2)

Daca dorim graficul solut,iei x (t) , atunci luam mai multe valori în inter-valul [1, 3] :

>> [t , y] = ode45(@fct1_ODE,[1:0.01:3],4.2);>> plot(t,y)

Daca dorim sa comparam cu rezultatele comenzii ode23 scriem

>> [t , y] = ode45(@fct1_ODE,[1,3],4.2)>> plot(t,y,’r’)>> hold on>> [u , z] = ode23(@fct1_ODE,[1,3],4.2)>> plot(u,z,’b’)>> hold off �

92 7. Rezolvarea numerica a unor probleme

În cazul în care dorim sa rezolvam un sistem de ecuat,ii diferent,iale de or-dinul 1 introducem funct,ia vectoriala f.

În cazul în care dorim sa rezolvam o ecuat,ie diferent,iala de ordin superior,o putem reduce la un sistem de ecuat,ii diferent,iale de ordinul 1 s, i reducemproblema la cazul de mai sus. Tehnica este prezentata în urmatorul exempluconcret.

Exemplul 7.14 Sa se rezolve ecuat,ia diferent,iala de ordinul al doilea (ecuat,iacare descrie mis, carea pendulului neliniar): θ + ω2 sin (θ) = 0 , t ≥ 0

θ (0) = 1, θ (0) = 0 .

Mai întâi, transformam ecuat,ia de ordinul doi într-un sistem de ecuat,ii de or-dinul întâi (tehnica este standard):

Notam x1def== θ s, i x2

def== θ s, i obt,inem ecuat,ia de ordinul 1:x′1 (t) = x2 (t) ,

x′2 (t) = −ω2 sin (x1 (t)) , t ≥ 0

x1 (0) = 1, x2 (0) = 0 .

adicax′ (t) = f (t,x) ,

unde

x = [x1, x2]t

f (t,x) = f (t, x1, x2)def==(x2 (t) ,−ω2 sin (x1)

)x (t0 = 0) = x0

def== [1, 0]

t.

Definim într-un fis, ier fct2_ODE.m funct,ia vectoriala f (t,x) (luam ω = 2 ):

function z = fct2_ODE(t,x)z = [ x(2) ; -4*sin(x(1))];

Apoi scriem:

>> x0 = [1 ; 0];>> T = input(’Introduceti capatul intervalui T = ’);>> [t , y] = ode45(@fct2_ODE,[0,T],x0)

Solut,ia problemei date este matricea y cu doua coloane s, i mai multe linii(date de dimensiunea vectorului t) iar solut,ia x1 a problemei init,iale este primacoloana y(:,1)

Afis, am solut,ia

>> x1 = y(:,1) �

Capitolul 8

Reprezentari grafice

Reprezentarile grafice (în diversele ei forme) sunt nis, te instrumente utile înprezentarea informat,iilor. Acestea se pot seta din punctul de vedere al tipu-lui de linie folosit, al grosimii liniei, al culorii etc. Se poate adauga un titlu,comentarii, o legenda. De asemenea, mai multe grafice pot fi facute în acelas, ireper.

8.1 Grafica 2D

În MATLAB reprezentarea grafica în doua dimensiuni poate fi realizata cu co-manda plot care are structura

plot(x,y,’setare_linie’,’nume_setare’,valoare_setare)

unde:

• x,y sunt doi vectori de aceeas, i dimensiune; comanda plot va crea oimagine cu punctele, din plan, de tipul (xi, yi) unite printr-o linie poligo-nala (aceasta figura se va deschide într-o fereastra suplimentara) (deci xreprezinta vectorul cu toate abscisele punctelor reprezentate iar y reprez-inta vectorul cu toate ordonatele punctelor reprezentate);

• setare_linie este un argument opt,ional dat de un s, ir de caractere(scris între doua apostrofuri) care poate fi utilizat pentru a specifica anu-mite setari pentru tipul liniei, culoarea liniei s, i respectiv tipul de marcajal punctelor conform tabelelor urmatoare. Ordinea în care sunt scrisecomenzile legate de setari nu este importanta.

93

94 8. Reprezentari grafice

Stilul liniei:

Comanda MATLAB Semnificat,ia

- linie obis, nuita (stilul implicit)

-- linie întrerupta

: linie punctata

-. linie de tip linie-punct

Culoarea liniei:

ComandaMATLAB

Semnificat,ia ComandaMATLAB

Semnificat,ia

r ros, ie (red) m purpuriu (magenta)

g verde (green) y galben (yellow)

b albastru (blue) k negru (black)

c turcoaz (cyan) w alb (white)

Tipul de marcaj al punctelor:

ComandaMATLAB

Semnificat,ia ComandaMATLAB

Semnificat,ia

+ marcaj cu + s marcaj cu �(square)

o marcaj cu ◦ d marcaj cu 3(diamond)

* marcaj cu ∗ pmarcaj cu stea cu

cinci colt,uri(pentagram)

x marcaj cu × hmarcaj cu stea cu

s, ase colt,uri(hexagram)

^ marcaj cu4 < marcaj cu C

v marcaj cu5 > marcaj cu B

Sa ment,ionam ca daca se specifica tipul de marcare al punctelor dar nuse specifica tipul liniei, atunci comanda plot va desena doar puncteleindicate (s, i fara linia poligonala care le unes, te);

• nume_setare este un argument opt,ional dat de un s, ir de caractere (scrisîntre doua apostrofuri) care poate fi utilizat pentru a specifica anumite

8.1. Grafica 2D 95

setari pentru grosimea liniei, marimea marcajului, culoarea marginii mar-cajului s, i culoarea cu care se umple marcajul;

• valoare_setare este valoarea posibila a setarii indicate de argumentulnume_setare conform tabelului urmator:

ComandaMATLAB

(nume_setare)Semnificat,ia

ComandaMATLAB

(valoare_setare)

LineWidth(sau linewidth)

grosimea liniei numar de puncte(implicit este 0.5)

MarkerSize(sau markersize)

marimeamarcajului

numar de puncte

MarkerEdgeColor(sau markeredgecolor)

culoareamarginii

marcajului

culoarea conformtabelului precedent

MarkerFaceColor(sau markerfacecolor)

culoareacu care se

umple marcajul

culoarea conformtabelului precedent

Exemplul 8.1 Comanda

>> plot(x,y,’r--s’,’linewidth’,2,’markersize’,12,’markeredgecolor’,’g’,’markerfacecolor’,’k’)

va crea o linie poligonala intrerupta (--), de culoare ros, ie (r), cu grosimea de2, care unes, te punctele cu abscisele date de vectorul x iar ordonatele date devectorul y; punctele sunt marcate cu patrate (s), de marime 12, cu margineade culoare verde (g), cu interiorul de culoare neagra (k). �

Exemplul 8.2 Evident, pentru a crea graficul unei funct,ii y = f (x) putem uti-liza comanda plot

Astfel, comenzile:

>> x = -2:.01:4;>> y = 3.5.^(-0.5*x).*cos(6*x);>> plot(x,y,’g’)

vor crea graficul funct,iei f (x) = 3.5−0.5x cos (6x) în culoarea verde (g). �

Exemplul 8.3 Dorim sa reprezentam doar punctele indicate (fara linia polig-onala care le unes, te); vom specifica tipul de marcare al punctelor s, i nu vompreciza nimic despre tipul liniei.

Astfel, comenzile:

>> x = -2:.1:4;>> y = 3.5.^(-0.5*x).*cos(4*x);

96 8. Reprezentari grafice

>> plot(x,y,’g*’)

vor crea graficul tuturor punctelor/perechilor (x, y) date de comenzile de maisus, în culoarea verde (g) s, i indicate prin semnul *. �

Pentru reprezentarea grafica a unei funct,ii scalare avem la dispozit,ie s, i co-manda fplot care are structura

fplot(’functia’,limite,’setare_linie’)

unde:

• functia este funct,ia al carei grafic se dores, te a fi reprezentat (obt,inem ocurba plana); aceasta poate fi introdusa ca un s, ir de caractere (scrise întredoua apostrofuri) dar s, i prin celelalte metode cunoscute (de exemplu,utilizând un function handle);

• limite este un argument care specifica domeniul pentru x (daca scriem[xmin,xmax] ) sau domeniul pentru x s, i pentru y (daca scriem sub for-ma [xmin,xmax,ymin,ymax] );

• setare_linie este un argument opt,ional s, i este acelas, i ca în cazul co-menzii plot

Exemplul 8.4 Comanda

>> fplot(’x^2+4*sin(2*x)-1’,[-3,3])

va crea graficul funct,iei f (x) = x2 + 4 sin (2x)− 1, cu x ∈ [−3, 3] . �

Exemplul 8.5 Comanda

>> fplot(’sin(x)’,[-5,5])

va crea graficul funct,iei f (x) = sin (x) , cu x ∈ [−5, 5]iar comanda

>> fplot(@(x) sin(x),[-5,5])

va crea aceeas, i imagine. �

Daca dorim reprezentarea mai multor grafice în cadrul aceluias, i reper, atunciavem doua posibilitat,i.

O varianta ar fi sa scriem în cadrul unei singure comenzi plot toate graficeledorite. Astfel comanda

plot(x,y,t,u,v,w)

va reprezenta trei grafice (unul dat de vectorii x,y , altul dat de vectorii t,uiar al treilea dat de vectorii v,w) în acelas, i reper.

Evident, dupa fiecare pereche reprezentata se pot adauga s, i setari legate detipul liniei s, i tipul marcajului.

8.1. Grafica 2D 97

Exemplul 8.6 Comenzile

>> x = -6:.01:6;>> plot(x,sin(x),’r--’,x,cos(x),’b:’)

vor crea, în acelas, i reper, graficele funct,iilor sin (cu o linie întrerupta, de culoareros, ie) s, i cos (cu o linie punctata, de culoare albastra). �

Exemplul 8.7 Comenzile

>> x = -4:.01:4; y = 3*x.^3-26*x+10;>> yder = 9*x.^2-26; ydder = 18*x;>> plot(x,y,’b’,x,yder,’r--’,x,ydder,’g:’)

vor crea, în acelas, i reper, graficul funct,iei f (x) = 3x3 − 26x + 10 împreuna cugraficul derivatelor f ′ s, i f ′′. �

Alta varianta ar fi sa scriem comenzile hold on s, i hold off. Astfel,scriem o prima comanda plot s, i un prim grafic este generat; apoi scriemhold on s, i prima figura este pastrata deschisa s, i orice comanda plot ulte-rioara adauga noile grafice celui deschis de primul plot. Comanda hold offopres, te acest proces.

Exemplul 8.8 Comenzile

>> x = -4:.01:4; y = 3*x.^3-26*x+10;>> yder = 9*x.^2-26; ydder = 18*x;>> plot(x,y,’b’)>> hold on>> plot(x,yder,’r--’)>> plot(x,ydder,’g:’)>> hold off

vor crea aceleas, i trei grafice ca s, i în Exemplul 8.7 precedent, în acelas, i reper. �

Daca dorim reprezentarea mai multor grafice în cadrul aceleas, i figuri darseparat (fiecare grafic cu reperul lui), atunci avem la dispozit,ie comanda

subplot(m,n,p)

unde m,n reprezinta împart,irea ferestrei (cu figura obt,inuta de noi) în m × nsubfiguri iar p reprezinta pozit,ia în care dorim sa amplasam graficul nostru(numerotarea se face pe linie). De exemplu, subplot(3,2,4) va împart,ifigura în 3 × 2 = 6 zone s, i va afis, a graficul în a 4-a pozit,ie, adica elementulde pe linia 2 s, i coloana 2.

Exemplul 8.9 Comenzile

>> subplot(3,2,1);>> fplot(@(x) sin(x),[-pi,2*pi])

98 8. Reprezentari grafice

>> subplot(3,2,2);>> fplot(’cos(x)’,[-pi,2*pi])>> subplot(3,2,3);>> fimplicit(@(x,y) x^2+y^2-2,[-2,2])>> subplot(3,2,5:6);>> fplot(@(x) [tan(x),sin(x),cos(x)],[-2*pi,2*pi,-4,4])

vor deschide o fereastra cu 3×2 = 6 regiuni în care se vor amplasa patru repere(ultimul reper ocupa doua locuri: pozit,iile 5 s, i 6). �

Daca avem mai multe comenzi plot, atunci, în urma primei aparit,iei acomenzii plot, se deschide o fereastra cu imaginea comandata; apoi urma-toarea comanda plot va înlocui graficul existent, în aceeas, i fereastra, cu noulgrafic. S, .a.m.d.

Pentru a avea câte o fereastra pentru fiecare imagine obt,inuta este util safolosim, înainte de fiecare grafic obt,inut, comanda

figure

(numerotarea va fi automata).Daca dorim atribuirea unui anume numar pentru o imagine obt,inuta putem

sa folosim comandafigure(n)

unde n este numarul dat de noi figurii respective.Daca dorim un nume personalizat al figurii (pe lânga numarul care apare

automat) putem scrie

figure(’Name’,’nume_figura’)

unde nume_figura este numele care va apare în dreptul numarului figuriigenerate de noi.

Pentru a vizualiza o fereastra anume scriem în Command Window comanda

figure(n)

unde n este numarul figurii pe care dorim sa o vedem.

Pentru a închide o fereastra cu o imagine scriem în Command Window co-manda

close

care închide fereastra curenta cu imaginea generata de noi sau comanda

close(n)

care închide fereastra numarul n sau comanda

close all

8.1. Grafica 2D 99

care închide toate ferestrele cu imagini.

Dupa ce scriem comenzile plot s, i fplot sunt permise s, i anumite elementede personalizare a figurilor obt,inute.

Comandaaxis([xmin,xmax,ymin,ymax])

va seta limitele de afis, are ale reperului.Comanda

axis equal

seteaza faptul ca ambele axe vor avea aceas, i scala, iar comanda

axis square

seteaza faptul ca regiunea va fi patrata.

Comandaxlabel(’text_abscisa’)

va afis, a textul text_abscisa în dreptul axei Ox iar comanda

ylabel(’text_ordonata’)

va afis, a textul text_ordonata în dreptul axei Oy.

Comandatitle(’text_titlu’)

va afis, a un titlu al graficului cu textul text_titlu.

Comandatext(x,y,’text_comentariu’)

va afis, a textul text_comentariu cu primul caracter plasat în punctul de co-ordonate (x, y).

Comandalegend(’text_1’,’text_2’,pos)

va afis, a o casut, a cu o explicat,ie de tip „legenda”, în pozit,ia data de opt,iuneapos (variantele sunt17 -1,0,1,2,3,4) cu textul text_i corespunzator fieca-rui grafic în parte.

Comandagrid

va afis, a s, i o grila de linii orizontale s, i verticale desenate în cadrul reperului.

Ment,ionam ca textele din comenzile precedente pot fi s, i ele formatate.

17 Varianta 1 este cea implicita s, i înseamna ca legenda va fi pozit,ionata în coltul din dreapta sus

100 8. Reprezentari grafice

Exemplul 8.10 Comenzile

>> figure(’Name’,’Graficul a doua functii’)>> t = linspace(0,4*pi,200);>> x = sin(t); y = cos(t);>> plot(t,x,’r--’)>> hold on>> plot(t,y,’b:’)>> grid>> axis([-pi 6*pi -2 2])>> title(’Am desenat evolutia in timp’)>> xlabel(’Axa Ot (axa timpului)’)>> ylabel(’Axa Ox (axa valorilor)’)>> legend(’x = sin(t)’,’x = cos(t)’)hold off

vor crea, în aceas, i fereastra deschisa s, i în acelas, i reper, graficul a douafunct,ii: sin (linie întrerupta, colorata în ros, u) s, i cos (linie punctata, colorataîn albastru). Fereastra deschisa cu graficul nostru are numele „Figure 1:Graficul a doua functii”, titlul „Am desenat evolutia in timp”;axa Ox este de la −π la 6π s, i are numele „Axa Ot (axa timpului)” iaraxa Oy este de la −2 la 2 s, i are numele „Axa Ox (axa valorilor)”; deasemenea, apare s, i grila de linii orizontale s, i verticale precum s, i un text tip„legenda” în colt,ul din dreapta sus (modul implicit) în care am explicat ceînseamna fiecare curba. �

Pentru reprezentarea grafica a unei curbe date implicit avem la dispozit,iecomanda ezplot (vezi pagina 51) precum s, i comanda fimplicit care arestructura

fimplicit(’functia’,limite,’setare_linie’)

unde:

• functia este funct,ia implicita (data de ecuat,ia F (x, y) = 0) al careigrafic se dores, te a fi reprezentat; aceasta poate fi introdusa ca un s, irde caractere (scrise între doua apostrofuri) dar s, i prin celelalte metodecunoscute (de exemplu, utilizând un function handle);

• limite este un argument care specifica domeniul pentru x (daca scriem[xmin,xmax] ) sau domeniul pentru x s, i pentru y (daca scriem sub for-ma [xmin,xmax,ymin,ymax] );

• setare_linie este un argument opt,ional s, i este acelas, i ca în cazul co-menzii plot

Exemplul 8.11 Comenzile

>> f1 = @(x,y) x.^2 + y.^2 - 1;

8.1. Grafica 2D 101

>> fimplicit(f1,’g:’)>> hold on>> fimplicit(@(x,y) x.^2 - y.^2 - 2)>> hold off

vor crea graficul a doua elipse date sub forma implicita. �

Pentru reprezentarea grafica a unei curbe date în coordonate polare avemla dispozit,ie comanda polar care are structura

polar(theta,rho,’setare_linie’)

unde:

• theta s, i rho sunt vectorii care definesc curba în coordonate polare datade ρ = f (θ) , unde θ ∈ [a, b] ;

• setare_linie este un argument opt,ional s, i este acelas, i ca în cazul co-menzii plot

Exemplul 8.12 Comenzile

>> theta = 0:.01:6*pi;>> a = input(’Introduceti coeficientul a =’)>> b = input(’Introduceti coeficientul b =’)>> rho = a+b*theta;>> figure(’Name’,’O curba in coordonate polare’)>> polar(theta,rho)>> title(’Spirala lui Arhimede’)

vor crea graficul spiralei lui Arhimede, data de ecuat,ia (scrisa în coordo-nate polare) ρ = a + bθ, cu θ ∈ [0, 6π] . Fereastra deschisa cu graficul nostruva avea numele „Figure 1: O curba in coordonate polare” s, i vaavea titlul „Spirala lui Arhimede”. �

Mai exista s, i alte comenzi care produc grafice (vectorii x,y sunt de aceeas, idimensiune s, i sunt reprezentat,i grafic):

• semilogy(x,y) axa Oy este scalata logaritmic (în baza 10) iar axa Oxeste liniara;

• semilogx(x,y) axa Ox este scalata logaritmic (în baza 10) iar axa Oyeste liniara;

• loglog(x,y) ambele axe sunt scalate logaritmic (în baza 10);

• errorbar(x,y,e) afis, eaza s, i bare cu erorile, date de vectorul e, înfiecare punct;

• bar(x,y) graficul este sub forma de bare verticale;

102 8. Reprezentari grafice

• barh(x,y) graficul este sub forma de bare orizontale;

• stairs(x,y) graficul este sub forma de trepte;

• stem(x,y) graficul este sub forma de linii verticale;

• pie(x,y) graficul este sub forma de disc;

• hist(y) graficul este sub forma de histograma.

8.2 Grafica 3D

În MATLAB reprezentarea grafica a unei curbe în spat,iu poate fi realizata cucomanda plot3 care are structura

plot3(x,y,z,’setare_linie’,’nume_setare’,valoare_setare)

unde:

• x,y,z sunt trei vectori de aceeas, i dimensiune; comanda plot3 va creao imagine cu punctele, din spat,iu, de tipul (xi, yi, zi) unite printr-o liniepoligonala (aceasta figura se va deschide într-o fereastra suplimentara);

• setare_linie este un argument opt,ional cu aceas, i semnificat,ie ca încazul comenzii plot

• nume_setare este un argument opt,ional cu aceas, i semnificat,ie ca încazul comenzii plot

• valoare_setare este valoarea posibila a setarii indicate de argumentulnume_setare (cu aceas, i semnificat,ie ca în cazul comenzii plot).

Funct,ioneaza s, i celelalte setari s, i opt,iuni din cazul 2D: de exemplu, comen-zile figure, hold on, subplot, axis, xlabel, grid, close

Exemplul 8.13 Evident, daca o curba este data de ecuat,iile parametricex = x (t) ,

y = y (t) ,

z = z (t) , t ∈ [a, b] ,

atunci graficul ei se poate realiza cu comanda plot3Astfel, comenzile:

>> t = 0:.01:6*pi;>> x = sqrt(t).*sin(2*t);>> y = sqrt(t).*cos(2*t);>> z = 0.5*t;

8.2. Grafica 3D 103

>> figure(’Name’,’Graficul unei spirale in spatiu’)>> plot3(x,y,z,’m’,’linewidth’,1)>> grid>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)

vor crea graficul curbei

x (t) =

√t sin (2t) ,

y (t) =√t cos (2t) ,

z (t) = 0.5 t, t ∈ [0, 6π] ,

în culoarea pur-

puriu (m), cu o linie de grosime 1, cu o grila de linii s, i cu axele marcate cu nis, tetexte. �

Exemplul 8.14 Comenzile:

>> t = -6*pi:.001:6*pi;>> x = (1+t.^2).*sin(15*t);>> y = (1+t.^2).*cos(15*t);>> z = t;>> figure(’Name’,’Graficul unei alte spirale in spatiu’)>> plot3(x,y,z,’b’)>> grid>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)

vor crea graficul curbei

x (t) =

(1 + t2

)sin (20t) ,

y (t) =(1 + t2

)cos (20t) ,

z (t) = t, t ∈ [−6π, 6π] .�

Pentru reprezentarea grafica a unei curbe data parametric avem la dispozit,ies, i comanda ezplot318 care are structura

ezplot3(functiax,functiay,functiaz,[tmin,tmax])

unde:

• functiax, functiay , functiaz sunt ecuat,iile parametrice ale curbeiîn spat,iu; aceasta poate fi introdusa ca un s, ir de caractere (scrise întredoua apostrofuri) dar s, i prin celelalte metode cunoscute (de exemplu,utilizând un function handle);

• [tmin,tmax] este un argument opt,ional ce indica intervalul de variat,iepentru parametrul curbei; domeniul implicit este [0, 2π] .

Exemplul 8.15 Comenzile:

>> figure(’Name’,’Graficul elicei’)>> ezplot3(’cos(t)’,’sin(t)’,’t’,[0,8*pi])

18 Easy-to-use 3-D parametric curve plotter.

104 8. Reprezentari grafice

>> grid>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)

vor crea graficul curbei

x (t) = cos (t) ,

y (t) = sin (t) ,

z (t) = t, t ∈ [0, 8π] .�

Pentru reprezentarea grafica a unei suprafet,e data de ecuat,ia explicita z =f (x, y) , unde (x, y) ∈ [a, b] × [c, d] (evident, este inclus s, i cazul unei suprafet,edata de ecuat,iile parametrice x = x (t) , y = y (t) , z = z (t) unde t ∈ [t0 , T ] )avem la dispozit,ie comenzile mesh s, i surf

Primul pas consta în crearea unei ret,ele de puncte. În acest sens cream, maiîntâi, vectorii

x = a:h1:b; y = c:h2:d;

apoi, folosind vectorii de mai sus, se creaza o ret,ea de puncte în plan X,Y datade comanda

[X,Y] = meshgrid(x,y)

Astfel vom obt,ine doua matrice cont,inând coordonatele, abscisele s, i respectivordonatele, unor puncte din plan care realizeaza o divizare a dreptunghiului[a, b]× [c, d] .

Apoi definim variabila Z conform funct,iei care da suprafat,a prin

Z = f(X,Y);

(matricea Z are elementul Z(i,j) dat de valoarea funct,iei f în punctul X(i,j)s, i Y(i,j) ).

În final reprezentarea grafica a suprafet,ei se va obt,ine scriind una dintrecomenzile:

mesh(X,Y,Z) sau surf(X,Y,Z)

Exemplul 8.16 Daca lucram cu (x, y) ∈ [−1, 3] × [1, 3] , atunci sa luam, de e-xemplu, divizarea cu pasul 1

>> x = -1:3; y = 1:3;

s, i apoi sa scriem

>> [X,Y] = meshgrid(x,y)

Vom obt,ine

X =-1 0 1 2 3

-1 0 1 2 3

-1 0 1 2 3s, i

8.2. Grafica 3D 105

Y =1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

Aceste matrice reprezinta exact abscisele s, i respectiv ordonatele unor punctedin plan care realizeaza o divizare a dreptunghiului [−1, 3]× [1, 3] , adica punc-tele (as, a cum arata ele în plan):

(−1, 3) (0, 3) (1, 3) (2, 3) (3, 3)

(−1, 2) (0, 2) (1, 2) (2, 2) (3, 2)

(−1, 1) (0, 1) (1, 1) (2, 1) (3, 1)

Exemplul 8.17 Comenzile:

>> figure(’Name’,’Graficul unei suprafete’)>> x = -1:.01:3; y = 1:.01:4;>> [X,Y] = meshgrid(x,y);>> Z = X.*Y.^2./(X.^2+Y.^2);>> mesh(X,Y,Z)>> grid>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)

vor crea graficul suprafet,ei z =xy2

x2 + y2, cu (x, y) ∈ [−1, 3]× [1, 4] .

Mai exista s, i alte comenzi care produc grafice de suprafet,e (matricele X,Y,Zau aceas, i semnificat,ie ca în comanda mesh):

• ezmesh(functia) Easy-to-Use mesh;

• meshz(X,Y,Z) Mesh Curtain Plot;

• meshc(X,Y,Z) Mesh and Countour Plot;

• ezsurf(X,Y,Z) Easy-to-Use surf;

• surfc(X,Y,Z) Surface and Countour Plot;

• surfl(X,Y,Z) Surface Plot with Lighting;

• bar3(Y) 3D Bar Plot; graficul este sub forma de bare verticale; fiecareelement din Y reprezinta înalt,imea unei bare;

106 8. Reprezentari grafice

• pie3(X,explode) graficul este sub forma de disc în spat,iu.

Exemplul 8.18 Comenzile

>> x = -3:0.1:3; y =x;>> [X,Y] = meshgrid(x,y);>> Z = 1.8.^(-1.5*sqrt(X.^2+Y.^2)).*sin(X).*cos(0.5*Y);

>> figure(’Name’,’Graficul facut cu diverse comenzi’)>> grid

>> subplot(2,4,1)>> mesh(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’mesh’)

>> subplot(2,4,2)>> ezmesh(’1.8^(-1.5*sqrt(x^2+y^2))*sin(x)*cos(0.5*y)’

,[-3,3])>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’ezmesh’)

>> subplot(2,4,3)>> meshz(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’meshz’)

>> subplot(2,4,4)>> meshc(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’meshc’)

>> subplot(2,4,5)>> surf(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’surf’)

>> subplot(2,4,6)>> ezsurf(’1.8^(-1.5*sqrt(x^2+y^2))*sin(x)*cos(0.5*y)’

,[-3,3])>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’ezsurf’)

>> subplot(2,4,7)>> surfc(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’surfc’)

8.2. Grafica 3D 107

>> subplot(2,4,8)>> surfl(X,Y,Z)>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)>> legend(’surfl’)

vor deschide o fereastra (figure) cu un nume dat de noi, cu 2× 4 = 8 regiuni încare se vor amplasa opt repere cu graficul (facut cu diverse comenzi) suprafet,eidata de

z = 1.8−1.5√x2+y2 sin(x) cos(0.5 y), cu (x, y) ∈ [−3, 3]× [−3, 3] .

Am adaugat s, i o legenda în care precizam cu ce comanda este facut graficul s, iam etichetat s, i axele. �

Capitolul 9

Calcul simbolic19

Toate operat,iile facute de MATLAB în capitolele precedente sunt numerice.Dar multe aplicat,ii necesita operat,ii simbolice (sau calcul simbolic) care suntoperat,ii matematice cu variabile simbolice (variabile carora nu le este specifi-cata o valoare numerica anume, atunci când este efectuat calculul).

Rezultatul unei asemenea operat,ii este o expresie matematica în aceleas, ivariabile simbolice.

Calculul simbolic poate fi folosit doar daca este instalat toolbox-ul SymbolicMath. Operat,iile elementare s, i funct,iile pentru efectuarea operat,iilor simboliceau aceeas, i sintaxa ca în cazul operat,iilor numerice.

MATLAB se poate ocupa de multe tipuri de operat,ii simbolice:

• simplificarea expresiilor matematice s, i substituirea unei variabile simbo-lice cu o valoare data;

• rezolvarea unui sistem de ecuat,ii (nu neaparat liniare);

• limite de funct,ii;

• derivarea;

• integrarea;

• rezolvarea ecuat,iilor diferent,iale ordinare.

Punctul de plecare pentru operat,iile simbolice consta în definirea, în prea-labil, a obiectelor (sau variabilelor) simbolice. Acestea pot fi variabile sau nu-mere. Apoi variabilele simbolice declarate sunt utilizate pentru a crea expresiisimbolice ce vor fi, eventual, utilizate în operat,ii matematice simbolice.

19 Acest capitol nu este pentru Examen !

109

110 9. Calcul simbolic

9.1 Obiectele simbolice si expresiile simbolice

Un obiect simbolic poate fi o variabila careia nu i-am atribuit nici o valoarenumerica sau un numar sau o expresie simbolica formata din alte variabilesimbolice sau numere.

Obiectele simbolice pot fi create utilizând comenzile sym s, i/sau symsAstfel, comanda

nume_obiect = sym(’x’)

va crea o variabila simbolica x cu numele nume_obiect (x este un s, ir de ca-ractere ce poate fi format exclusiv din una sau mai multe litere s, i/sau una saumai multe cifre, s, i fara spat,ii sau alte semne între ele).

Comandasyms x y z

va crea trei variabile simbolice x,y s, i respectiv z

Exemplul 9.1 Comanda:

>> g = sym(’gamma’)

va crea obiectul simbolic gamma cu numele g

iar comanda

>> a = sym(’a’)

va crea obiectul simbolic a cu numele a

iar comanda

>> syms a b c

va crea trei obiecte simbolice: a,b s, i c �

O expresie simbolica este o expresie matematica formata din una sau maimulte obiecte simbolice (create în prealabil). În acest sens se pot apela operat,iiles, i funct,iile utilizate în cazul operat,iilor numerice.

Exemplul 9.2 Comenzile:

>> syms a b c x>> f = a*x^2 + b*x + c

vor crea expresia simbolica f s, i va afis, a20

f =a*x^2 + b*x + c

iar comanda:20 Afisarea unei expresii simbolice va fi facuta întotdeauna fara indent.

9.1. Obiectele simbolice si expresiile simbolice 111

>> f = sym(’a*x^2 + b*x + c’)

va crea expresia simbolica f s, i va afis, a acelas, i lucru:

f =a*x^2 + b*x + c �

Exemplul 9.3 Comenzile:

>> syms a b c x>> g = 2*a/3 + 4*a/5 - 6*x + x/3 + 2*5/3 -2.2

vor crea expresia simbolica g data de2a

3+

4a

5− 6x+

x

3+

2 · 53− 2.2 s, i va afis, a

s, i varianta cu calculul elementar efectuat:

g =(22*a)/15 - (17*x)/3 + 17/15 �

Diferent,a dintre calculul numeric s, i cel simbolic este ilustrat de urmatorulexemplu:

Exemplul 9.4 Comenzile:

>> a = sym(3); b = sym(5);>> e = b/a + sqrt(2)

vor afis, a (constantele 3 s, i 5 au fost asftel transformate în variabile simbolice)

e =2^(1/2) + 5/3

iar comenzile

>> c = 3; d = 5;>> f = d/c + sqrt(2)

vor afis, a

f =3.0808 �

Putem crea s, i matrice simbolice s, i putem opera cu ele:

Exemplul 9.5 Comenzile:

>> syms a b c d>> A = [a b ; c d]

vor afis, a

A =[a , b][c , d]

112 9. Calcul simbolic

iar comenzile

>> B = det(A), C = inv(A), D = A*C

vor afis, a determinantul, inversa matricei A s, i respectiv produsul matricelor Acu C �

Pentru a gasi ce variabile simbolice cont,ine o anumita expresie simbolicaavem la dispozit,ie comanda findsym care are structura:

findsym(S) sau findsym(S,n)

unde S este expresia simbolica iar n este numarul de variabile simbolice ce sedores, te a fi afis, ate.

Exemplul 9.6 Comenzile:

>> syms x a b c;>> f = a*x^2 + b*x + c;>> findsym(f)

vor afis, a

ans =a,b,c,x

iar comanda

>> findsym(f,1)

va afis, a

ans =x �

9.2 Schimbarea formei unei expresii simbolice

Comanda collect este utilizata pentru a grupa variabilele cu aceas, i putere(s, i a le scrie în ordinea descrescatoare a puterilor), s, i are structura:

collect(S) sau collect(S,nume_var)

unde S este expresia simbolica iar nume_var este variabila avuta în vedere(în caz ca S cont,ine mai multe variabile s, i se prefera gruparea dupa o anumevariabila).

Exemplul 9.7 Comenzile:

>> syms x y;>> S = (x-5+y)*(x-y^2-exp(x));

9.2. Schimbarea formei unei expresii simbolice 113

>> T = collect(S)>> U = collect(S,y)

vor afis, a

T =x^2+(-y^2+y-exp(x)-5)*x-(y^2+exp(x))*(y-5)U =-y^3+(5-x)*y^2+(x-exp(x))*y+(x-exp(x))*(x-5) �

Comanda expand este utilizata pentru a dezvolta o expresie care cont,ineproduse de paranteze de termeni s, i/sau funct,ii trigonometrice, exponent,ialesau logaritmice (utilizând formule algebrice), s, i are structura:

expand(S)

unde S este expresia simbolica.

Exemplul 9.8 Comenzile:

>> syms a x y;>> S = (x-a)*(y+a)*sin(x-y);>> T = expand(S)

vor afis, a valoarea lui T cu calculele efectuate s, i dezvoltând sin(x-y) �

Comanda factor este utilizata pentru a scrie un polinom ca un produs depolinoame de grad mai mic, s, i are structura:

factor(S)

unde S este expresia simbolica.

Exemplul 9.9 Comenzile:

>> syms x;>> S = x^3 + 3*x^2 - x - 3;>> T = factor(S)

vor afis, aT =[x + 3, x - 1, x + 1] �

Comanda simplify este utilizata pentru a simplifica forma unei expresiisimbolice (conform operat,iilor matematice ce apar în expresie), s, i are structura:

simplify(S)

unde S este expresia simbolica.

114 9. Calcul simbolic

Exemplul 9.10 Comenzile:

>> syms x y;>> S = (x+y)/(1/x+1/y);>> T = simplify(S)

vor afis, a

T =x*y �

9.3 Calculul numeric al unei expresii simbolice

Comanda subs este utilizata pentru a substitui o valoare numerica în cadrulunei expresii simbolice, s, i are structura:

subs(S,{var1,var2},{val1,val2})

unde S este expresia simbolica, var1 s, i var2 sunt variabilele pe care vremsa le substituim cu valorile date de valorile numerice val1 s, i respectiv val2(val1 s, i/sau val2 pot fi scalari dar s, i vectori sau matrice de valori).

Daca dorim înlocuirea unei singure variabile, atunci pot lipsi acoladele dinstructura comenzii.

Daca expresia S cont,ine o singura variabila simbolica, atunci acea variabilapoate sa nu mai fie ment,ionata în structura comenzii, ci doar valoarea cu carese dores, te a fi înlocuita.

Exemplul 9.11 Comenzile:

>> syms x;>> S = 3*x^2 - 5*x + 1;>> subs(S,x,1)

vor afis, a

ans =-1

iar comanda

>> subs(S,1)

va afis, a acelas, i lucru:

ans =-1

iar comanda

>> subs(S,x,[0,1])

va afis, a

ans =[1,-1] �

9.4. Sume 115

Exemplul 9.12 Comenzile:

>> syms a x;>> S = a*x^2 - 5*x + 1;>> subs(S,x,1)

vor afis, a

ans =a-4

iar comanda

>> subs(S,a,1)

va afis, a

ans =x^2 - 5*x + 1iar comanda

>> subs(S,{a,x},{3,1})

va afis, a

ans =-1 �

9.4 Sume

Comanda symsum este utilizata pentru a calcula sume de tipul∑k=j

k=ixk ,

s, i are structura:symsum(xk,k,i,j)

unde xk este termenul general, k este variabila în raport cu care se calculeazasuma (daca xk cont,ine o singura variabila simbolica, atunci acest argumentpoate lipsi), i,j sunt capetele sumei.

Exemplul 9.13 Comenzile:

>> syms k n;>> xk1 = k; xk2 = k^2; xk3 = k^3;>> sum1 = symsum(xk1,1,n)>> sum2 = symsum(xk1,k,1,n)>> sum3 = symsum(xk2,1,n)>> sum4 = symsum(xk3,1,n)>> sum5 = symsum(1/k^2,1,inf)

116 9. Calcul simbolic

vor afis, a diverse sume de termeni. Vom obt,ine, bineînt,eles,∑k=n

k=1k =

n (n+ 1)

2

∑k=n

k=1k2 =

n (n+ 1) (2n+ 1)

6

∑k=n

k=1k3 =

n2 (n+ 1)2

4∑k=∞

k=1

1

k2=π2

6

9.5 Rezolvarea ecuatiilor algebrice

Comanda solve este utilizata pentru a rezolva un sistem de ecuat,ii, s, i arestructura:

[sol1 sol2] = solve(eq1,eq2,var1,var2)

unde:

• eq1 = 0, eq2 = 0 reprezinta sistemul de ecuat,ii avut în vedere; eq1(sau eq2) poate fi numele unei expresii simbolice definite anterior sau oexpresie ce este scrisa direct în comanda, sub forma de s, ir de caractere;

• o ecuat,ie de tipul f (x) = g (x) poate s, i ea fi rezolvata scriind argumentul’f(x) = g(x)’, i.e. ca un s, ir de caractere (între doua apostrofuri);

• var1 s, i var2 sunt variabilele în raport cu care se dores, te rezolvareaecuat,iilor (trebuie scrise în caz ca sunt mai multe variabile simbolice);

• sol1 este solut,ia pentru var1 iar sol2 este solut,ia pentru var2 ; dacanu avem un sistem de ecuat,ii, atunci pot lipsi parantezele patrate dinstructura comenzii.

• daca ecuat,ia admite mai mult de o solut,ie, atunci solut,ia este o coloanacu solut,iile simbolice.

Exemplul 9.14 Comenzile:

>> syms x;>> f = 3*exp(x) - 5;>> sol = solve(f)

vor afis, a

sol =log(5/3)

9.5. Rezolvarea ecuatiilor algebrice 117

iar comanda

>> sol2 = solve(3*exp(x) - 5)

va afis, a acelas, i lucru:

sol2 =log(5/3)

iar comanda

>> sol3 = solve(3*exp(x) - 5,x)

va afis, a acelas, i lucru:

sol3 =log(5/3)

iar comanda

>> sol4 = solve(’3*exp(x) - 5’,x)

va afis, a acelas, i lucru:

sol4 =log(5/3) �

Exemplul 9.15 Comenzile:

>> syms x;>> sol = solve(’cos(2*x)+3*sin(x)=2’)

vor afis, a

sol =pi/2pi/6(5*pi)/6 �

Exemplul 9.16 Comenzile:

>> syms a b x;>> g = x^2 + (b-2*a)*x - 2*a*b;>> sol = solve(g,x)

vor afis, a

sol =2*a-b �

118 9. Calcul simbolic

Exemplul 9.17 Comenzile:

>> syms x y;>> [solx soly] = solve(5*x-y-2,2*x+2*y-8)

vor afis, a

solx =1soly =3 �

Exemplul 9.18 Comenzile:

>> syms x y;>> [solx soly] = solve(’5*x-y-2’,’2*x+2*y-8’)

vor afis, a acelas, i lucru ca în exemplul precedent. �

Exemplul 9.19 Comenzile:

>> syms x y;>> [solx soly] = solve(’5*x-y-2’,’2*x+2*y-8’,x,y)

vor afis, a acelas, i lucru ca în exemplul precedent. �

Exemplul 9.20 Comenzile:

>> syms x y t;>> S = 10*x+12*y+16*t;>> [solx soly] = solve(S,’5*x-y=13*t’)

vor afis, asolx =2*tsoly =-3*t �

Exemplul 9.21 Comenzile:

>> syms a b c x;>> f = a*x^2 + b*x + c;>> solve(f)

vor afis, a solut,iile ecuat,iei f = 0 în raport cu variabila x

Comanda

>> solve(f,x)

va afis, a acelas, i lucru. �

9.6. Limite de functii 119

Comanda solve este utila, de exemplu, s, i în determinarea punctelor deintersect,i dintre doua curbe date:

Exemplul 9.22 Comenzile:

>> syms x y R;

>> [solx soly] = solve(’(x-2)^2+(y-4)^2=R^2’,’2*y-x=1’)

vor afis, a punctele de intersect,ie ale cercului (x− 2)2+(y − 4)

2= R2 cu dreapta

2y − x = 1. �

9.6 Limite de functii

Comanda limit este utilizata pentru a calcula limite de funct,ii, s, i are struc-tura:

limit(S,var,a,’d’)

unde:

• S este expresia simbolica (definita anterior sau scrisa direct în comanda,sub forma de s, ir de caractere);

• var este variabila în raport cu care se calculeaza limita (daca S cont,ine osingura variabila simbolica, atunci acest argument poate lipsi);

• a este punctul limita; acesta poate fi numar sau variabila simbolica;

• d este un argument opt,ional s, i indica direct,ia limitei, în cazul în care sedores, te calculul unor limite laterale; variantele sunt right s, i left

Exemplul 9.23 Comenzile:

>> syms n x;

>> S1 = (1+1/n)^n; S2 = sin(x)/x; S3 = abs(x)/x;

>> lim1 = limit(S1,inf)

>> lim2 = limit(S1,n,inf)

>> lim3 = limit(S2,0)

>> lim4 = limit(S2,x,0)

>> lim5 = limit(S3,x,0,’right’)

>> lim6 = limit(S3,x,0,’left’)

vor afis, a diverse limite. �

120 9. Calcul simbolic

9.7 Derivarea

Comanda diff este utilizata pentru a deriva o expresie simbolica, s, i arestructura:

diff(S,var,n)

unde S este expresia simbolica (definita anterior sau scrisa direct în comanda,sub forma de s, ir de caractere), var este variabila în raport cu care se calculeazaderivata (daca S cont,ine o singura variabila simbolica, atunci acest argumentpoate lipsi) iar n este ordinul de derivare (daca ordinul dorit este 1, atunci acestargument poate lipsi).

Exemplul 9.24 Comenzile:

>> syms a b x y;>> S = a*exp(4*x)+b*cos(x*y);>> der1 = diff(S)% derivarea se face in raport cu variabila implicita>> der2 = diff(S,x)>> der3 = diff(S,y)>> der4 = diff(a*exp(4*x)+b*cos(x*y),x)>> der5 = diff(’a*exp(4*x)+b*cos(x*y)’,x)>> der6 = diff(S,x,2)>> der7 = diff(a*exp(4*x)+b*cos(x*y),x,2)>> der8 = diff(’a*exp(4*x)+b*cos(x*y)’,x,2)

vor afis, a diverse tipuri de derivate: în raport cu x s, i în raport cu y, cu S definitaîn prealabil sau introdusa direct în comanda ca s, ir de caractere, de ordinul 1 saude ordinul al 2-lea. �

Matricea jacobiana

D (f, g)

D (x, y):=

∂f

∂x

∂f

∂y

∂g

∂x

∂g

∂y

se calculeaza folosind comanda

jacobian([f;g],[x,y])

Exemplul 9.25 Consideram coordonatele polare s, i ecuat,iile de legatura cu co-ordonatele carteziene.

Comenzile:

>> syms rho theta x y;>> x = rho*cos(theta); y = rho*sin(theta);>> J1 = jacobian([x,y],[rho,theta])

9.8. Integrarea 121

>> det1 = det(J1)>> det2 = simplify(det(J1))

vor afis, a matricea jacobiana precum s, i determinantul ei (s, i apoi într-o formasimplificata, adica valoarea ρ). �

Exemplul 9.26 Consideram coordonatele sferice s, i ecuat,iile de legatura cu co-ordonatele carteziene.

Comenzile:

>> syms rho phi theta x y z;>> x = rho*cos(theta)*sin(phi);>> y = rho*sin(theta)*sin(phi);>> z = rho*cos(phi);>> J2 = jacobian([x,y,z],[rho,theta,phi])>> det3 = det(J2)>> det4 = simplify(det(J2))

vor afis, a matricea jacobiana precum s, i determinantul ei (s, i apoi într-o formasimplificata, adica valoarea −ρ2 sin (ϕ) ). �

9.8 Integrarea

Comanda int este utilizata pentru a integra o expresie simbolica, s, i arestructura:

int(S,var,a,b)

unde:

• S este expresia simbolica (definita anterior sau scrisa direct în comanda,sub forma de s, ir de caractere);

• var este variabila în raport cu care se calculeaza integrala (daca S cont,ineo singura variabila simbolica, atunci acest argument poate lipsi);

• a,b sunt limitele de integrare; acestea pot fi numere sau variabile sim-bolice (daca nu se dores, te determinarea unei integrale definite ci a uneiprimitive, atunci aceste argumente lipsesc).

Exemplul 9.27 Comenzile:

>> syms x y;>> S = 2*exp(4*x)-3*x*y;>> int1 = int(S)% integrarea se face in raport cu variabila implicita>> int2 = int(S,x)>> int3 = int(S,y)>> int4 = int(2*exp(4*x)-3*x*y,x)

122 9. Calcul simbolic

>> int5 = int(’2*exp(4*x)-3*x*y’,x)>> int6 = int(S,x,0,1)>> int7 = int(2*exp(4*x)-3*x*y,x,0,1)>> int8 = int(’2*exp(4*x)-3*x*y’,x,0,1)

vor afis, a diverse tipuri de integrale: în raport cu x s, i în raport cu y, cu S definitaîn prealabil sau introdusa direct în comanda ca s, ir de caractere, cu limite deintegrare sau fara limite de integrare. �

Exemplul 9.28 Putem calcula s, i integrale improprii, de exemplu integrala lui

Gauss,∫ +∞

−∞e−x

2

dx :

>> syms x;>> f = exp(-x^2);>> intGauss = int(f,-inf,inf)

Valoarea afis, ata va fi, bineînt,eles,√π. �

9.9 Rezolvarea ecuatiilor diferentiale ordinare

Comanda dsolve este utilizata pentru a determina solut,ia unei ecuat,iidiferent,iale ordinare, s, i are structura:

dsolve(’eq1’,’eq2’,’cond1’,’cond2’,’var’)

unde:

• eq1 este ecuat,ia diferent,iala ce trebuie scrisa direct în comanda, sub forma

de s, ir de caractere: derivata y′ saudy

dttrebuie scrisa sub forma Dy; de

exemplu, ecuat,ia diferent,iala y′ (t) + 3y (t) = 5 va fi scrisa sub forma’Dy+3y=5’; daca este un sistem de ecuat,ii apare s, i eq2;

• cond1,cond2 etc. sunt condit,iile int,iale ce trebuie satisfacute de solut,iaecuat,ii diferent,iale;

• var este variabila în raport cu care se calculeaza solut,ia ecuat,iei; daca eqcont,ine o singura variabila simbolica, atunci acest argument poate lipsi;daca eq cont,ine mai multe variabile simbolice s, i nu indicam variabila înraport cu care sa rezolvam ecuat,ia, atunci se lucreaza cu variabila implic-ita (luata t).

Exemplul 9.29 Solut,ia ecuat,iei diferent,iale de ordinul întâi

y′ = 2y + 4t (saudy

dt= 2y + 4t )

se va gasi scriind

9.9. Rezolvarea ecuatiilor diferentiale ordinare 123

>> dsolve(’Dy=2*y+4*t’)% nu este necesar sa definim, in prealabil,% variabile simbolice

s, i vom obt,ineans =C1*exp(2*t) - 2*t - 1 �

Exemplul 9.30 Solut,ia ecuat,iei diferent,iale de ordinul al doilea

d2x

dt2+ 2

dx

dt+ x = 0 (sau x′′ + 2x′ + x = 0 )

se va gasi scriind

>> dsolve(’D2x+2*Dx+x=0’)% nu este necesar sa definim, in prealabil,% variabile simbolice

s, i vom obt,ineans =C1*exp(-t) + C2*t*exp(-t) �

Exemplul 9.31 Solut,ia ecuat,iei diferent,iale

ds

dt= ax2 (sau s′ (t) = ax2, cu x independent de t )

se va gasi scriind

>> dsolve(’Ds=a*x^2’)% nu este necesar sa definim, in prealabil,% variabile simbolice

% nu am precizat variabila,% deci se va considera t drept variabila implicita

s, i vom obt,ineans =a*t*x^2 + C1 �

Exemplul 9.32 Solut,ia ecuat,iei diferent,iale

ds

dx= ax2 (sau s′ (x) = ax2 )

se va gasi scriind

>> dsolve(’Ds=a*x^2’,’x’)

s, i vom obt,ineans =(a*x^3)/3 + C1 �

124 9. Calcul simbolic

Exemplul 9.33 Solut,ia ecuat,iei diferent,iale

ds

da= ax2 (sau s′ (a) = ax2 )

se va gasi scriind

>> dsolve(’Ds=a*x^2’,’a’)

s, i vom obt,ineans =(a^2*x^2)/2 + C1 �

Exemplul 9.34 Solut,ia ecuat,iei diferent,iale cu condit,ii init,iale y′ + 3y = 5

y (0) = 1

se va gasi scriind

>> dsolve(’Dy+3*y=5’,’y(0)=1’)

s, i vom obt,ineans =5/3 - (2*exp(-3*t))/3 �

Exemplul 9.35 Solut,ia ecuat,iei diferent,iale cu condit,ii init,iale y′′ − 2y′ + 2y = 0

y (0) = 1, y′ (0) = 0

se va gasi scriind

>> dsolve(’D2y-2*Dy+2*y’,’y(0)=1’,’Dy(0)=0’)

s, i vom obt,ineans =exp(t)*cos(t) - exp(t)*sin(t) �

Exemplul 9.36 Solut,ia sistemului de ecuat,ii diferent,iale cu condit,ii init,ialex′ = x+ y

y′ = t− x

x (0) = 1, y (0) = 2

se va gasi scriind

>> [solx soly] = dsolve(’Dx=x+y’,’Dy=t-x’,’x(0)=1’,’y(0)=2’)

Astfel se va afis, a solut,ia solx s, i solut,ia soly �

Bibliografie selectiva

[1] Stormy Attaway, MATLAB R©. A practical Introduction to Programming andProblem Solving (Fourth Edition), Elsevier, Amsterdam, 2017.

[2] Tobin A. Driscoll, Learning MATLAB, Society for Industrial and AppliedMathematics (SIAM), 2009.

[3] Amos Gilat, MATLAB R©. An Introduction with Applications (Fifth Edition),Wiley, 2015.

[4] Duane Hanselman, Bruce Littlefield, Mastering MATLAB R©, Pearson, 2012.

[5] Brian R. Hunt, Ronald L. Lipsman, Jonathan M. Rosenberg, A Guide toMATLAB R© for Beginners and Experienced Users (Second Edition), CambridgeUniversity Press, 2006.

[6] William J. Palm III, A Concise Introduction to MATLAB, McGraw-Hill, NewYork, 2008.

[7] Rudra Patrap, Getting Started with MATLAB. A Quick Introduction for Scien-tists and Engineers, Oxford University Press, 2010.

125