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 =
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
Top Related