Sunteți pe pagina 1din 213

MATLAB – C URS

Cuprins

1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Aplicaţia MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Comenzile help şi doc . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Variabile şi comenzi MATLAB . . . . . . . . . . . . . . . . . . 3
1.4 Funcţii matematice . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1 Utilizarea semnului : în manipularea matricelor . . . . . . . 30
2.2 Operarea element cu element . . . . . . . . . . . . . . . . . . 38
2.3 Analiza datelor . . . . . . . . . . . . . . . . . . . . . . . . . . 40

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

4 Funcţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1 Fişiere de tip function . . . . . . . . . . . . . . . . . . . . . . . 53
4.2 Funcţii anonymous . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3 Funcţii inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5 Programare în MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 65
5.1 Operatori relaţionali şi operatori logici . . . . . . . . . . . . . 65
5.2 Structuri if-elseif-else-end . . . . . . . . . . . . . . . 73
5.3 Structuri ciclice de tip for-end . . . . . . . . . . . . . . . . . 77
5.4 Structuri ciclice de tip while-end . . . . . . . . . . . . . . . 80
5.5 Structuri switch-case . . . . . . . . . . . . . . . . . . . . . 82

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

7 Rezolvarea numerică a unor probleme . . . . . . . . . . . . . . . 89


7.1 Rezolvarea ecuaţiilor . . . . . . . . . . . . . . . . . . . . . . . 89
7.2 Determinarea minimului şi maximului . . . . . . . . . . . . . 92
7.3 Integrarea numerică . . . . . . . . . . . . . . . . . . . . . . . 93
7.4 Algebră liniară . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5 Ecuaţii diferenţiale . . . . . . . . . . . . . . . . . . . . . . . . 100

8 Reprezentări grafice . . . . . . . . . . . . . . . . . . . . . . . . . . 105


8.1 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2 Grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

9 Calcul simbolic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123


9.1 Obiectele simbolice şi expresiile simbolice . . . . . . . . . . . 124
9.2 Schimbarea formei unei expresii simbolice . . . . . . . . . . . 127
9.3 Calculul numeric al unei expresii simbolice . . . . . . . . . . 128
9.4 Sume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.5 Rezolvarea ecuaţiilor algebrice . . . . . . . . . . . . . . . . . 131
9.6 Limite de funcţii . . . . . . . . . . . . . . . . . . . . . . . . . . 134
9.7 Derivarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
9.8 Integrarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.9 Rezolvarea ecuaţiilor diferenţiale ordinare . . . . . . . . . . . 138

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


Capitolul 1

Introducere

1.1 Aplicaţia MATLAB


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

Command Window, Current Folder, Workspace, Command History

Fereastra de comandă (Command Window) este cea mai importantă; aici


sunt tastate comenzile după semnele >> care reprezintă prompterul1 MAT-
LAB.
După ce o comandă a fost introdusă2 s, i a fost apăsată tasta Enter, MAT-
LAB execută comanda s, i rezultatul apare imediat pe ecran.
De exemplu, prin tastarea comenzii
>> version
se afis, ează versiunea MATLAB folosită, iar comanda
>> ver
indică, pe lângă versiunea curentă a MATLAB-ului instalat, s, i toolbox-
urile instalate.
De exemplu, prin tastarea comenzii
>> quit
se se închide programul MATLAB (acelas, i efect îl are s, i comanda exit).
1
În cazul în care programul face un calcul care durează prea mult s, i se dores, te intreru-
perea procesului (sau pur s, i simplu se dores, te afis, area din nou a prompterului MATLAB),
se tastează CTRL + C
2
Comenzile în MATLAB sunt case sensitive.

1
2 1. Introducere

Dacă dacă folosim comanda

clc

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


Ment, ionăm, în plus, că, dacă în Command Window folosim tasta cu sim-
bolul ↑ , atunci apare ultima comandă efectuată; dacă tastăm din nou sim-
bolul ↑ apare penultima comandă efectuată s, .a.m.d.; apoi se poate folosi s, i
tasta ↓ pentru a reveni la comenzi mai noi. Săget, ile → s, i ← pot fi folosite
pentru a manevra cursorul în cadrul unei comenzi.
De asemenea, sunt utile tastele Delete, Backspace, Home, End care
au rolul lor standard. Foarte des utilizată este tasta Escape care s, terge
comanda curentă, care tocmai este scrisă.
Fereastra care indică directorul în care se „lucrează” este Current Folder
(numit eventual Current Directory).
În fereastra Workspace sunt afis, ate toate variabilele definite de noi (pre-
cum s, i valorile lor). Ment, ionăm că dacă folosim comanda

clear

s, tergem toate variabilele definite până atunci (dispar s, i din fereastra Work-
space).
În fereastra Command History sunt afis, ate toate comenzile efectuate de
noi în Command Window. Printr-un dublu click pe o comandă aceasta apare
din nou în Command Window s, i se execută.

1.2 Comenzile help s, i doc


Pentru a utiliza sistemul de help al MATLAB scriem, în Command Win-
dow, comanda
>> help nume_comanda
s, i vom obt, ine câteva informat, ii ale comenzii dată de nume_comanda (o
scurtă descriere, sintaxa s, i o listă de subiecte înrudite).
De exemplu, comanda
>> help exp
afis, ează informat, ii despre funct, ia exponent, ială.
Dacă scriem doar
>> help
1.3. Variabile şi comenzi MATLAB 3

atunci se deschide o listă de categorii3 , care la rândul lor (se pot deschi-
de) cont, in liste de comenzi.
Dacă scriem comanda
>> doc nume_comanda
vom obt, ine, într-o fereastră separată, informat, ii mai detaliate s, i exem-
ple diverse de utilizare a comenzii dată de nume_comanda
De exemplu, comanda
>> doc exp
afis, ează informat, ii mai detaliate s, i exemple de utilizare a funct, iei expo-
nent, iale.
De asemenea, pentru a utiliza sistemul de help al MATLAB se poate
deschide meniul Help al MATLAB (sau se tastează F1).

1.3 Variabile şi comenzi MATLAB


Numele unei variabile trebuie să înceapă cu o literă. Aceasta poate fi
urmată apoi de orice literă, cifră sau de simboluri underscore (dar maxim 63
de caractere).
De asemenea, ment, ionăm că numele variabilelor în MATLAB sunt case
sensitive.
În general, definirea s, i numirea unor variabile se poate face în trei mo-
duri: ori direct în Command Window, într-un fis, ier de tip script ori utilizând
comanda input (pentru detalii concrete vezi pagina 47).
MATLAB foloses, te variabile speciale (care au nume rezervate ce nu pot
fi folosite pentru a desemna alte variabile) precum:

Variabila specială Semnificat, ia


numele dat implicit unui rezultat obt, inut anterior,
ans rezultat ce nu a fost atribuit, în prealabil,
unei variabile (answer)
pi numărul π
cel mai mic număr care adunat la 1 crează un număr
eps diferit de 1; este precizia de calcul a MATLAB
(epsilon; are valoarea 2.220446049250313e-16)
3
Pentru a afis, a s, i continuarea listei de categorii se tastează Enter sau Spacebar.
4 1. Introducere

eps(n) cel mai mic număr care adunat la n


crează un număr diferit de n

Inf sau inf desemnează ∞


(de exemplu, rezultatul pentru 1/0 )

Nan sau nan Not a number; reprezintă o expresie nedefinită


(de exemplu, rezultatul pentru 0/0 )

i sau j numărul4 complex −1
intmin cel mai mic întreg (negativ) ce poate fi reprezentat
intmax cel mai mare întreg ce poate fi reprezentat
realmin cel mai mic număr real ce poate fi reprezentat
realmax cel mai mare număr real ce poate fi reprezentat
nargin numărul de argumente de intrare
nargout numărul de argumente de ies, ire

Precizăm că atunci când MATLAB calculează o expresie (folosind even-


tual alte variabile) va face aceasta folosind toate valorile variabilelor care
sunt deja definite s, i obt, inute, până la momentul când se efectuează co-
manda.
În cazul în care anumite variabile au fost redefinite, prin comanda clear
se revine la valorile implicite.
În MATLAB variabilele sunt definite prin atribuirea unei valori (care
poate fi număr, matrice etc.). Variabila astfel definită poate fi utilizată ulte-
rior în definirea altor variabile s, .a.m.d.
Unei variabile deja definite i se poate ulterior atribui altă valoare.

Exemplul 1.1 Comanda


>> 1+2+3
afis, ează
ans =
6
Astfel s-a definit implicit noua variabila ans s, i i s-a atribuit valoarea 6.
Această variabilă poate fi folosită în calcule viitoare. 
4
Este recomandat să scriem întotdeauna 1i sau 1j în loc de i sau respectiv j
1.3. Variabile şi comenzi MATLAB 5

Exemplul 1.2 Comanda


>> a = 1+2+3
afis, ează
a =
6
Astfel s-a definit noua variabila a s, i i s-a atribuit valoarea 6. Această
variabilă poate fi folosită în calcule viitoare. 

Exemplul 1.3 Comanda


>> total = a*2 + ans
afis, ează
total =
18
Astfel s-a definit noua variabila total s, i i s-a atribuit valoarea 18. 

Exemplul 1.4 Comanda


>> a*2 + ans
afis, ează
ans =
18
Astfel s-a definit noua variabila ans s, i i s-a atribuit valoarea 18. 

Pentru a afis, a valoarea atribuită unei variabile se scrie numele variabilei


s, i astfel se va afis, a valoarea ei. De asemenea, precizăm că toate variabilele
s, i valorile lor sunt afis, ate s, i în fereastra Workspace. Comanda clear s, terge
toate variabilele definite până atunci (dispar s, i din fereastra Workspace).
Dacă se scrie doar clear x atunci dispare doar variabila x
Lista tuturor variabilelor se poate vedea s, i dacă se scrie comanda who
Dacă se scrie comanda whos apare lista cu toate variabilele dar însot, ită
de informat, ii suplimentare. Dacă se scrie comanda whos nume varia-
bila apare variabila numită dar însot, ită de informat, ii suplimentare.
Dacă o comandă este prea lungă sau se dores, te scrierea ei pe două linii,
atunci se scrie ... acolo unde se dores, te să se rupă comanda, apoi se
tastează Enter, apoi se continuă scrierea comenzii.
6 1. Introducere

Exemplul 1.5 Comanda

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


5 +6 + 7 + 8 + 9 + 10

afis, ează

suma =
55 

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


se scrie semnul
;

la finalizarea comenzii.
Pe o linie de comandă se pot scrie mai multe expresii, dar se vor separa
folosind semnul ,
Comenzile cu , la sfârs, it se vor efectua s, i se vor afis, a valorile obt, inute.
Celor cu ; la sfârs, it nu li se vor afis, a valorile obt, inute.

Exemplul 1.6 Comenzile

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

afis, ează

a =
5
b =
10
d =
30 

Prin adăugarea semnului


%

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


LAB.

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


Mai există s, i alte formate posibile printre care amintim:
1.4. Funcţii matematice 7

Comanda pi Comentarii
MATLAB
4 zecimale
(modul implicit)
format short 3.1416 (pentru numere
între 0.001 s, i 1000,
în rest e short e)
15 zecimale
format long 3.141592653589793 (pentru numere
între 0.001 s, i 100,
în rest e long e)
format short e
3.1416e+00 4 zecimale s, i două
sau
cifre exponent5
format shorte
format long e
sau 3.141592653589793e+00 15 zecimale s, i două
cifre exponent
format longe
format bank 3.14 2 zecimale

format rat 355/113 aproximat de


o fract, ie

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

1.4 Funcţii matematice


Operat, iile aritmetice elementare sunt

Operat, ia Simbolul Exemplu


Adunarea + 3.1 + 15
Scăderea − 3.1 - 15
Înmult, irea ∗ 3.1 ∗ 15
5
Scrierea 3.1416e+00 înseamnă 3.1416*1000 .
8 1. Introducere

Împărt, irea / 3.1/15 care este, prin definit, ie, 3.1*15−1


(la dreapta)
Împărt, irea \ 3.1\15 care este, prin definit, ie, 3.1−1 *15
(la stânga)
Puterea ^ 3.1 ^15

Expresiile sunt operate de la stânga la dreapta. Ordinea în care se e-


fectuează operat, iile este cea cunoscută deja: ridicarea la putere (are cel mai
mare nivel de precedent, ă), apoi înmult, irea s, i împărt, irea (au acelas, i nivel de
precedent, ă) s, i apoi adunarea s, i scăderea (au acelas, i nivel de precedent, ă).
Evident, folosirea parantezelor schimbă orice ordine implicită (aceasta
funct, ionează în cadrul unui set de paranteze).
Funct, iile matematice elementare sunt date s, i explicate în Imaginile 1.1
– 1.7 de la sfârs, itul acestei sect, iuni.

Exemplul 1.7 Comenzile


>> c_1 = 1-5i, c_2 = 1-5j, c_3 = complex(1,-5)
afis, ează acelas, i lucru
c_1 =
1-5i
c_2 =
1-5i
c_3 =
1-5i 

Exemplul 1.8 Comanda


>> c_4 = 2*(3-4*sqrt(-1))
afis, ează
c_4 =
6-8i
iar
% trebuie sin(.5)*i sau sin(.5)*1i
% comanda sin(.5)i nu are nici o semnificatie
>> c_5 = 2-sin(.5)*1i
afis, ează
1.4. Funcţii matematice 9

c_5 =
2.0000 - 0.4794i 

Exemplul 1.9 Comenzile


>> c_5r = real(c_5), c_5i = imag(c_5)
afis, ează
c_5r =
2.0000
c_5i =
0.4794
iar
>> c_5a = abs(c_5)
afis, ează
c_5a =
2.0567
iar
>> c_5unghi_r = angle(c_5) % unghiul in radiani
afis, ează
c_5unghi_r =
0.2353
iar
% unghiul in grade
>> c_5unghi_g = c_5unghi_r * 180/pi
afis, ează
c_5unghi_g =
13.4802 

Exemplul 1.10 Comenzile


% valoarea lui y se va obtine in radiani
>> x = sqrt(2)/2 ; y = asin(x)
afis, ează
y =
0.7854
iar
>> y_g = y * 180/pi % valoarea lui y in grade
10 1. Introducere

afis, ează
y_g =
45 

Exemplul 1.11 Avem următoarele comenzi de rotunjire a unui număr real:


Comanda fix(x) reprezintă cel mai apropiat întreg de x înspre 0
Comanda floor(x) reprezintă cel mai apropiat întreg de x înspre −∞
(cel mai mare întreg din stânga lui x, adică partea întreaga a lui x)
Comanda ceil(x) reprezintă cel mai apropiat întreg de x înspre +∞
(cel mai mic întreg din dreapta lui x)
Comanda round(x) reprezintă cel mai apropiat întreg de x
Astfel
>> x = 2.2; y = 2.6; z = -2.2; w = -2.6;
>> x_1=fix(x), x_2=floor(x), x_3=ceil(x),
>> x_4=round(x)
afis, ează
x_1 = 2 x_2 = 2 x_3 = 3 x_4 = 2
iar
>> y_1=fix(y), y_2=floor(y), y_3=ceil(y),
>> y_4=round(y)
afis, ează
y_1 = 2 y_2 = 2 y_3 = 3 y_4 = 3
iar
>> z_1=fix(z), z_2=floor(z), z_3=ceil(z),
>> z_4=round(z)
afis, ează
z_1 = -2 z_2 = -3 z_3 = -2 z_4 = -2
iar
>> w_1=fix(w), w_2=floor(w), w_3=ceil(w),
>> w_4=round(w)
afis, ează
w_1 = -2 w_2 = -3 w_3 = -2 w_4 = -3 
1.4. Funcţii matematice 11

Exemplul 1.12 Comanda


% r = mod(a,b) reprezinta restul
% impartirii lui a la b
% (numita si impartirea a modulo b)
% cu valoarea data de r = a - b.*floor(a./b)
>> a = mod(5,-3), b = mod(-5,3)
afis, ează
a =
-1
b =
1
deoarece floor(-5/3)=-2
iar a = 5 − (−3) · (−2) = −1 iar b = (−5) − 3 (−2) = 1. 

Exemplul 1.13 Comanda


% r = rem(a,b) reprezinta restul
% impartirii lui a la b
% cu valoarea data de r = a - b.*fix(a./b)
>> a = rem(5,-3), b = rem(-5,3)
afis, ează
a =
2
b =
-1
deoarece fix(-5/3)=-2
iar a = 5 − (−3) · (−1) = 2 iar b = (−5) − 3 (−1) = −2. 

Exemplul 1.14 Comanda mod poate fi utilizată pentru a verifica dacă un


număr este par sau nu (paritate înseamnă mod(a,2)==0 ).
>> a = 7; rest1 = mod(a,2), rest2 = mod(-a,2)
afis, ează
rest1 =
1
rest2 =
1
deoarece floor(7/2)=3 s, i floor(-7/2)=-4
deci 7 − 2 · 3 = 1 iar −7 − 2 · (−4) = 1. 
>> x = 2.6, y1 = fix(x), y2 = floor(x), y3 = ceil(x), y4 = round(x)
x =
2.6000
y1 =
2
y2 =
2
12 1. Introducere
y3 =
3
y4 =
3
Imaginea 1.1: Funcţii trigonometrice
Trigonometric Function Description

acos Inverse cosine returning radians


acosd Inverse cosine returning degrees
acosh Inverse hyperbolic cosine returning radians
acot Inverse cotangent returning radians
acotd Inverse cotangent returning degrees
acoth Inverse hyperbolic cotangent returning radians
acsc Inverse cosecant returning radians
acscd Inverse cosecant returning degrees
acsch Inverse hyperbolic cosecant returning radians
asec Inverse secant returning radians
asecd Inverse secant returning degrees
1.4. Funcţii matematice 13

34 Chapter 2 Basic Features


Imaginea 1.2: Funcţii trigonometrice (continuare)
Trigonometric Function Description

asech Inverse hyperbolic secant returning radians


asin Inverse sine returning radians
asind Inverse sine returning degrees
asinh Inverse hyperbolic sine returning radians
atan Inverse tangent returning radians
atand Inverse tangent returning degrees
atanh Inverse hyperbolic tangent returning radians
atan2 Four-quadrant inverse tangent returning radians
cos Cosine returning radians
cosd Cosine of argument in degrees
cosh Hyperbolic cosine returning radians
cot Cotangent returning radians
cotd Cotangent of argument in degrees
coth Hyperbolic cotangent returning radians
csc Cosecant returning radians
cscd Cosecant of argument in degrees
csch Hyperbolic cosecant returning radians
hypot Square root of sum of squares
sec Secant returning radians
secd Secant of argument in degrees
sech Hyperbolic secant returning radians
sin Sine returning radians
sind Sine returning degrees
sinh Hyperbolic sine returning radians
tan Tangent returning radians
tand Tangent returning degrees
tanh Hyperbolic tangent returning radians
14 1. Introducere

Section
Section 2.7
2.7 Mathematical
Mathematical Functions
Functions 35
35
Imaginea 1.3: Funcţii exponenţiale şi putere
Exponential
Exponential Function
Function Description
Description
^
^ Power
Power
exp
exp Exponential
Exponential
expm1
expm1 Exponential
Exponential minus
minus 11 [i.e., exp(x) 
[i.e., exp(x)  1]
1]
log
log Natural
Natural logarithm
logarithm
log10
log10 Base
Base 10
10 logarithm
logarithm
log1p
log1p Natural
Natural logarithm of xx 
logarithm of  11 [i.e., log(x 
[i.e., log(x  1)]
1)]
log2
log2 Base
Base 22 logarithm
logarithm and
and floating-point
floating-point number
number
dissection
dissection
th
nthroot
nthroot nth real
n real root
root of
of real
real numbers
numbers
pow2
pow2 Base
Base 22 power
power and
and floating-point
floating-point number
number scaling
scaling
reallog
reallog Natural logarithm limited to real nonnegative
Natural logarithm limited to real nonnegative
values
values
realpow
realpow Power
Power limited
limited to
to real-valued
real-valued arguments
arguments
realsqrt
realsqrt Square
Square root
root limited
limited to
to real-valued
real-valued values
values
sqrt
sqrt Square root
Square root
nextpow2
nextpow2 Next
Next higher
higher power
power of
of 22

Imaginea 1.4: Funcţii complexe


Complex
Complex Function
Function Description
Description
abs
abs Absolute
Absolute value
value or
or magnitude
magnitude
angle
angle Phase angle in radians
Phase angle in radians
conj
conj Complex
Complex conjugate
conjugate
imag
imag Imaginary
Imaginary part
part
real
real Real
Real part
part
unwrap
unwrap Unwraps
Unwraps phase
phase angle
angle
isreal
isreal True
True for
for real
real values
values
cplxpair
cplxpair Sorts
Sorts vector
vector into
into complex
complex conjugate
conjugate pairs
pairs
complex
complex Forms
Forms complex
complex number
number from
from real
real and
and
imaginary
imaginary parts
parts
sign
sign Signum
Signum function
function
1.4. Funcţii matematice 15

36 Chapter 2 Basic Features


36 Chapter 2 Basic Features
36 Imaginea 1.5: Funcţii de rotunjire
Chapter 2 Basic Features
Rounding and
Rounding and
Remainderand
Rounding Function Description
Remainder Function Description
Remainder Function Description
fix Rounds toward zero
fix Rounds toward zero
fix
floor Rounds
Rounds toward
toward zero
negative infinity
floor Rounds toward negative infinity
floor
ceil Rounds
Rounds toward negative
toward infinity
positive infinity
ceil Rounds toward positive infinity
ceil
round Rounds
Rounds toward
toward positive infinity
nearest integer
round Rounds toward nearest integer
round
mod Rounds
Modulustoward nearest
or signed integer
remainder
mod Modulus or signed remainder
mod
rem Modulus
Remainderor after
signed remainder
division
rem Remainder after division
rem
idivide Remainder afterwith
Integer division division
rounding option
idivide Integer division with rounding option
idivide
sign Integer division
Signum function with rounding option
sign Signum function
sign Signum function

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


Coordinate
Coordinate
Transformation
Coordinate Function Description
Transformation Function Description
Transformation Function Description
cart2sph Cartesian to spherical
cart2sph Cartesian to spherical
cart2sph
cart2pol Cartesian
Cartesian to
to spherical
cylindrical or polar
cart2pol Cartesian to cylindrical or polar
cart2pol
pol2cart Cartesian
Cylindrical orcylindrical
to or polar
polar to Cartesian
pol2cart Cylindrical or polar to Cartesian
pol2cart
sph2cart Cylindrical
Spherical toor polar to Cartesian
Cartesian
sph2cart Spherical to Cartesian
sph2cart Spherical to Cartesian

Imaginea 1.7: Funcţii din teoria numerelor


Number Theoretic Function Description
Number Theoretic Function Description
Number Theoretic Function Description
factor Prime factors
factor Prime factors
factor
isprime Prime
True forfactors
prime numbers
isprime True for prime numbers
isprime
primes True for
Generates prime
list ofnumbers
prime numbers
primes Generates list of prime numbers
primes
gcd Generates
Greatest commonprime
list of numbers
divisor
gcd Greatest common divisor
gcd
lcm Greatest common
Least common divisor
multiple
lcm Least common multiple
lcm
rat Least common
Rational multiple
approximation
rat Rational approximation
rat
rats Rational
Rational approximation
output
rats Rational output
rats
perms Rational output
All possible combinations
perms All possible combinations
perms
nchoosek All possible combinations
All combinations of N elements taken K at a time
nchoosek All combinations of N elements taken K at a time
nchoosek
factorial All
Factorial functionof N elements taken K at a time
combinations
factorial Factorial function
factorial Factorial function
Capitolul 2

Matrice

Elementul de bază al MATLAB este tabloul (array). Chiar s, i o variabilă


scalară este văzut tot ca o un tablou de tip 1 × 1. Cel mai des utilizate sunt
tablourile bidimensionale, numite matrice, care au elementele aranjate în m
linii s, i n coloane. Vectorii de tip linie (i.e. m = 1) s, i vectorii de tip coloană
(i.e. n = 1) sunt cazuri particulare de matrice bidimensionale. Tablourile s, i
dimensiunile lor nu sunt declarate în mod explicit.
În MATLAB există mai multe modalităt, i prin care se poate genera o ma-
trice. Modalitatea explicită înseamnă utilizarea parantezelor pătrate între
care se precizează fiecare element al matricei; trecerea de la o coloană la alta
se face adăugând semnul , sau un spat, iu gol iar trecerea de la o linie la alta
se face adăugând semnul ; sau tastând Enter.
Elementele unei matrice pot fi numere reale sau numere complexe sau
orice alte expresii matematice.

Exemplul 2.1 Comanda


>> a = [1 ; 2 ; 3 ; 4]
afis, ează vectorul:
a =
1
2
3
4


Exemplul 2.2 Comanda

17
18 2. Matrice

>> A = [1 2 ; 3 4]

sau
>> A = [1 2
3 4]

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

afis, ează acelas, i lucru:


A =
1 2
3 4


Exemplul 2.3 Comenzile


>> a = [1 2 3 4];
>> size(a)

nu afis, ează vectorul a, dar afis, ează mărimea lui, adică afis, ează un vector
cu două elemente: numărul de linii s, i numărul de coloane al vectorului a
ans =
1 4
iar comanda
>> length(a)

afis, ează mărimea vectorului a


ans =
4 

Exemplul 2.4 Comenzile


>> A = [1 2 ; 3 4];
>> size(A)

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

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


dispozit, ie comenzile:

Comanda Semnificat, ia
MATLAB
A.’ transpusa matricei A

A’ transpusa conjugată a matricei A


(fiecare element al transpusei lui A este s, i conjugat)
rank(A) rangul matricei A
det(A) determinantul matricei A
inv(A) inversa matricei A
A^p este Ap , dacă p ∈ N∗
A^p este [inv(A)]-p , dacă (-p) ∈ N∗
A^p / Z∗
este determinată folosind valorile proprii, dacă p ∈

Exemplul 2.5 Comenzile


>> A = [1 2 ; 3 4]; A.’
afis, ează transpusa matricei A
ans =
1 3
2 4
iar
>> A’
afis, ează acelas, i lucru. 

Exemplul 2.6 Comenzile


>> A = [1-i 2+i ; 3-2i 4-3i]; A.’
afis, ează transpusa matricei A
ans =
1-i 3-2i
2+i 4-3i
iar
>> A’
afis, ează transpusa conjugată a matricei A
20 2. Matrice

ans =
1+i 3+2i
2-i 4+3i


MATLAB are un set comenzi care produc matrice cu valori speciale,


utile în general sau utile în anumite discipline. Printre acestea amintim:

Comanda MATLAB Semnificat, ia


[ ] o matrice fără cont, inut

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


cu toate elementele 0

ones(l,c) o matrice cu l linii s, i c coloane s, i


cu toate elementele 1

eye(l,c) o matrice cu l linii s, i c coloane s, i


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

repmat(A,l,c) o matrice bloc obt, inută prin replicarea


matricei A pe l linii s, i c coloane

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


blocuri de alte matrice.

Exemplul 2.7 Comenzile

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

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

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

1 2 0 0 0 0
3 4 0 0 0 0
1 0 1 1 1 1
0 1 1 1 1 1
0 0 1 1 1 1
0 0 1 1 1 1
10 8 6 4 2 0


Exemplul 2.8 Comenzile


>> A = [1 2 3 ; 4 5 6]; B = [A; -1 -2 -3]
adaugă la matricea A linia a 3-a suplimentară:
B =
1 2 3
4 5 6
-1 -2 -3


Exemplul 2.9 Comenzile


>> A = [1 2 3 ; 4 5 6]; B = [-1 -2 -3 ; A]
adaugă la matricea A o primă linie suplimentară:
B =
-1 -2 -3
1 2 3
4 5 6


Exemplul 2.10 Comenzile


>> A = [1 2 3 ; 4 5 6] ; x = [-1 -2]’ ; B = [A , x]
adaugă la matricea A coloana a 4-a suplimentară:
B =
1 2 3 -1
4 5 6 -2

22 2. Matrice

Exemplul 2.11 Comenzile


>> A = [1 2 3 ; 4 5 6] ; x = [-1 -2]’ ; B = [x , A]
adaugă la matricea A o primă coloană suplimentară:
A =
-1 1 2 3
-2 4 5 6


Exemplul 2.12 Comenzile


>> A = [1 2 ; 3 4]; C = blkdiag(A,ones(2))
afis, ează matricea C:
C =
1 2 0 0
3 4 0 0
0 0 1 1
0 0 1 1


Exemplul 2.13 Comenzile


>> A = [1 2 ; 3 4]; D = repmat(A,2,3)
afis, ează matricea D:
D =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4


Exemplul 2.14 Dacă vrem că creăm o matrice cu acelas, i element peste tot,
avem la dispozit, ie mai multe variante. Astfel următoarele comenzi (le
scriem în ordine: de la cea mai lentă la cea mai rapidă):
>> A = pi*ones(2,3), B = pi+zeros(2,3),
>> x = pi, C = x(ones(2,3)), D = repmat(pi,2,3)
afis, ează aceeas, i matrice:
23

3.1416 3.1416 3.1416


3.1416 3.1416 3.1416


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

Comanda MATLAB Semnificat, ia


rand un numar uniform distribuit intre 0 si 1
o matrice cu l linii s, i c coloane s, i
rand(l,c) cu toate elementele distribuite
uniform între 0 s, i 1
un vector linie cu n elemente care sunt
randperm(n) permutări aleatoare ale numerelor
de la 1 la n
o matrice cu l linii s, i c coloane s, i
randn(l,c) cu toate elementele distribuite normal standard
(adică distribut, ia normală
de medie 0 s, i dispersie 1)
randi(n) un numar întreg uniform distribuit intre 1 si n
o matrice cu l linii s, i c coloane s, i
randi(n,l,c) cu toate elementele întregi s, i
distribuite uniform între 1 s, i n

Este cunoscut, din cadrul Teoriei Probabilităt, ilor, că dacă se dores, te genera-
rea unor elemente distribuite uniform între două numere reale a s, i b, atunci
folosim relat, ia de legătură: variabila aleatoare X este distribuită uniform
între 0 s, i 1 dacă s, i numai dacă (b − a) X + a este distribuită uniform între a
s, i b.
De asemenea, variabila aleatoare X este distribuită normal √ standard,
adică de medie 0 s, i dispersie (variant, ă) 1, dacă s, i numai dacă σ 2 X + m
este distribuită normal de medie m s, i dispersie (variant, ă) σ 2 .

Exemplul 2.15 Comenzile


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

generează o matrice A de tip 2 × 3 cu elementele fiind numere reale


distribuite uniform între 0 s, i 1 s, i o matrice B de tip 2 × 3 cu elementele
fiind numere 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
generează o matrice A de tip 2 × 3 cu elementele fiind numere reale
distribuite normal standard (distribuite normal, cu media 0 s, i dispersia
1 ) s, i o matrice B de tip 2 × 3 cu elementele fiind numere reale distribuite
normal cu media 10 s, i dispersia 0.22 . 

Exemplul 2.17 Comenzile


>> A = randi(10,2,3)
generează o matrice A de tip 2 × 3 cu elementele fiind numere întregi
distribuite uniform între 1 s, i 10. 
Pentru a construi tablouri sunt utile s, i comenzile:

Comanda Semnificat, ia
MATLAB

x = a:b se generează un vector linie cu numere


de la a la b (numere reale) s, i cu pasul 1

x = a:h:b se generează un vector linie cu numere


de la a la b (numere reale) s, i cu pasul h

x = linspace(a,b,n) se generează un vector linie


cu n numere echidistante de la a la b

x = logspace(a,b,n) se generează un vector linie cu n numere


de la 10a la 10b s, i spat, iate logaritmic7

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

Exemplul 2.18 Comanda


>> x = 0:3:10
afis, ează un vector linie, cu elemente echidistante de la 0 la 10, cu pasul
3:
x =
0 3 6 9
Comanda
>> x = (0:0.1:1)*pi
afis, ează un vector linie cu 11 coloane, cu elemente echidistante de la 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
acestea amintim:

Comanda MATLAB Semnificat, ia


rotirea matricei A în jurul
flipud(A) axei orizontale de simetrie
(flip up-down)
rotirea matricei A în jurul
fliplr(A) axei 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
doar o matrice A care are m×n elemente
reshape(A,m,n) poate fi rearanjată în m linii s, i n coloane
(se scriu toate coloanele lui A, începând cu prima,
una sub alta s, i apoi se rearanjează elementele)
rezultatul este un vector coloană
diag(A) cu diagonala matricei A
(A nu e neapărat pătratică)
rezultatul este o matrice diagonală
diag(a) cu vectorul a pus pe diagonală
(restul elementelor sunt 0)
26 2. Matrice

extrage partea triunghiular superioară


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

Exemplul 2.19 Comenzile


>> A = [1 2 3 ; 4 5 6], B = reshape(A,3,2)
afis, ează
A =
1 2 3
4 5 6
apoi produce matricea coloană cu toate coloanele lui A puse una sub
alta apoi le reordonează:
B =
1 5
4 3
2 6


Exemplul 2.20 Comenzile


>> A = 1:12 ;
>> B = A’ ; C = reshape(B,3,4)
afis, ează
C =
1 4 7 10
2 5 8 11
3 6 9 12
Comanda D = reshape(A,3,4) va afis, a aceeas, i matrice C.
Iar comanda
27

>> E = C’
afis, ează
E =
1 2 3
4 5 6
7 8 9
10 11 12


Exemplul 2.21 Comenzile


>> A = 1:12 ;
>> B = A’ ; C = reshape(B,4,3)
afis, ează
C =
1 5 9
2 6 10
3 7 11
4 8 12
Comanda D = reshape(A,4,3) va afis, a aceeas, i matrice C.
Iar comanda
>> E = C’
afis, ează
E =
1 2 3 4
5 6 7 8
9 10 11 12


Exemplul 2.22 Comenzile


>> A = reshape(1:12,4,3), B = A’
afis, ează
A =
28 2. Matrice

1 5 9
2 6 10
3 7 11
4 8 12
B =
1 2 3 4
5 6 7 8
9 10 11 12


Exemplul 2.23 Comenzile


>> A = [1 2 3 ; 4 5 6 ; 7 8 9];
>> b = diag(A)
>> C = diag(diag(A))
>> D = A-diag(diag(A))
>> E = triu(A)-diag(diag(A))
afis, ează vectorul b dat de diagonala lui A:
b =
1
5
9
s, i matricea C (matricea A din care am păstrat doar diagonala ei):
C =
1 0 0
0 5 0
0 0 9
s, i matricea D (matricea A fără diagonala ei):
D =
0 2 3
4 0 6
7 8 0
precum s, i partea triunghiular superioară a matricei A dar fără diago-
nala principală:
29

E =
0 2 3
0 0 6
0 0 0


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


tril

Comanda Semnificat, ia
MATLAB
rezultatul este o matrice diagonală
cu vectorul a pus pe diagonală principală translată cu
diag(a,k) k unităt, i deasupra (pentru k>0)
sau cu k unităt, i dedesubt (pentru k<0)
(restul elementelor sunt 0)
rezultatul este un vector coloană
diag(A,k) cu diagonala k a matricei A
(A nu e neapărat pătratică)
extrage partea triunghiular superioară
triu(A,k) diagonalei k a matricei A (nu neapărat pătratică)
(restul elementelor sunt 0)
extrage partea triunghiular inferioară
tril(A,k) diagonalei k a matricei A (nu neapărat pătratică)
(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, ează matricele:


A_1 =
1 0 0
0 2 0
0 0 3

A_2 =
30 2. Matrice

0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
A_3 =
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0


2.1 Utilizarea semnului : în manipularea matricelor


Elementele unui vector a pot fi apelate scriind a(i) iar elementele unei
matrice A pot fi apelate scriind A(i,j)
Mai există s, i varianta de apelare A(n), unde n este indexul elementului
matricei A. Indexarea se face astfel: se scriu toate coloanele lui A, începând
cu prima, una sub alta s, i apoi se numerotează elementele; adică elementele
matricei coloană A(:).

Exemplul 2.25 Comenzile


>> A = 1:12 ; B = A’ ; C = reshape(B,3,4);
>> elem1 = C(1,3) , elem2 = C(7)
afis, ează aceeas, i valoare:
elem1 = 7 s, i elem2 = 7 
Dacă se dores, te o întreagă submatrice a matricei A, atunci se scrie

A(i:j,k:l)

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


k până l
Dacă se dores, te coloana c a lui A, atunci se scrie

A(:,c)
2.1. Utilizarea semnului : în manipularea matricelor 31

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

A(l,:)

iar dacă se scrie


A(:)
se obt, in un vector coloană cu toate elementele matricei A (este exact coloana
pe care comanda reshape(A,m,n) o rearanjează apoi pe m linii s, i n coloa-
ne).
Dacă se scrie
A(:,k:l)
se obt, ine partea matricei A de la coloana k până la coloana l iar dacă se
scrie
A(i:j,:)
se obt, ine partea matricei A de la linia i până la linia j.
Similar, dacă se scrie
a(k:l)
se obt, ine partea vectorului a de la elementul k până la elementul l.

Exemplul 2.26 Comanda


>> x = (0:0.1:1)*pi , x_2 = x(2)
afis, ează al 2-lea element al vectorului x:
x_2 =
3.142
Comanda
>> x_1_3 = x(1:3)
afis, ează elementele vectorului x de la primul până la al 3-lea:
x_1_3 =
0 0.3142 0.6283
Comanda
>> x_6_end = x(6:end)
afis, ează elementele vectorului x de la al 6-lea până la ultimul.
iar comanda
>> x_6_11 = x(6:11)
afis, ează acelas, i lucru (vectorul are 11 elemente). 
32 2. Matrice

Exemplul 2.27 Comenzile (vezi Exemplele 2.20–2.22)


>> A = (reshape(1:12,4,3))’ ; B = A(:,2:3)
afis, ează o parte a matricei A, cea de la linia 1 până la linia 3 s, i de la
coloana a 2-a până la coloana a 3-a:
B =
2 3
6 7
10 11
(comanda B = A(1:3,2:3) are acelas, i efect). 

Exemplul 2.28 Comenzile


>> A = (reshape(1:12,4,3))’ ; x = [0 0 0]’;
>> B = [ A(:,1:2) , x , A(:,3:4) ]
inserează coloana x între coloanele 2 s, i 3 ale matricei A (am compus
o nouă matrice din coloanele 1-2 din A, apoi am adăugat 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,:)]
inserează linia x între liniile 2 s, i 3 ale matricei A (am compus o nouă
matrice din liniile 1-2 din A, apoi am adăugat linia x, apoi linia 3):
B =
1 2 3 4
5 6 7 8
0 0 0 0
9 10 11 12
(comanda B=[A(1:2,1:4);x;A(3,1:4)] are acelas, i efect). 
2.1. Utilizarea semnului : în manipularea matricelor 33

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

Exemplul 2.30 Comenzile


>> a = 7 ; a(ones(3,4))
afis, ează o matrice de tip 3 × 4 cu valoarea a pe orice pozit, ie
ans =
7 7 7 7
7 7 7 7
7 7 7 7


Exemplul 2.31 Comenzile


>> a = 12:-1:5 ; a(3) = 99
afis, ează vectorul a cu elementul de pe pozit, ia 3 înlocuit cu 99:
a =
12 11 99 9 8 7 6 5


Exemplul 2.32 Comenzile


>> a = 1:4 ; a(8) = 99
afis, ează vectorul a cu elementul de pe pozit, ia 8 înlocuit cu 99; dacă
aceste pozit, ii nu există în vectorul a, atunci se extinde vectorul punând 0 :
a =
1 2 3 4 0 0 0 99
Similar, comanda
>> b(8) = 99
afis, ează vectorul b (care nu a fost definit în prealabil) cu elementul de
pe pozit, ia 8 înlocuit cu 99; dacă aceste pozit, ii nu există în vectorul b,
atunci se extinde vectorul punând 0 :
b =
0 0 0 0 0 0 0 99


Exemplul 2.33 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(2,3) = 99
afis, ează matricea A cu elementul de pe pozit, ia (2, 3) înlocuit cu 99:
34 2. Matrice

A =
1 2 3 4
5 6 99 8
9 10 11 12


Exemplul 2.34 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(2,7) = 99
afis, ează matricea A cu elementul de pe pozit, ia (2, 7) înlocuit cu 99;
dacă această pozit, ie nu există în matricea A, atunci se extinde matricea 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, ează matricea A cu toate elementele înlocuite cu 99:
A =
99 99 99 99
99 99 99 99
99 99 99 99


Exemplul 2.36 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,3) = 99
afis, ează matricea A cu coloana a 3-a înlocuită cu 99:
A =
1 2 99 4
5 6 99 8
9 10 99 12

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


2.1. Utilizarea semnului : în manipularea matricelor 35

Exemplul 2.37 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,3)=[99 100 101]
afis, ează matricea A cu coloana a 3-a înlocuită cu coloana [99 100
101]’:
A =
1 2 99 4
5 6 100 8
9 10 101 12

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


Acelas, i efect îl are s, i comanda A(:,3)=[99 100 101]’ 

Exemplul 2.38 Comenzile


>> A = (reshape(1:12,4,3))’ ;
>> A(:,3:4)=[99 100 101; 0 0 0]’
afis, ează matricea A cu coloanele de la a 3-a până la a 4-a înlocuite cu
matricea [99 100 101; 0 0 0]’:
A =
1 2 99 0
5 6 100 0
9 10 101 0

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

Exemplul 2.39 Comenzile


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


Exemplul 2.40 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,6) = [99 100 101]
36 2. Matrice

afis, ează matricea A cu coloana a 6-a înlocuită cu coloana [99 100


101]’; dacă această pozit, ie nu există în matricea A, atunci se extinde ma-
tricea A punând 0 în rest:
A =
1 2 3 4 0 99
5 6 7 8 0 100
9 10 11 12 0 101
(funct, ionează s, i varianta de adăugare a unei linii noi). 

Exemplul 2.41 Comenzile


>> a = 1:12 ; a(2:4) = [ ]
afis, ează vectorul a cu elementele de la 2 până la 4 eliminate:
a =
1 5 6 7 8 9 10 11 12


Exemplul 2.42 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,3) = [ ]
afis, ează matricea A cu coloana a 3-a eliminată:
A =
1 2 4
5 6 8
9 10 12


Exemplul 2.43 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,1:2) = [ ]
afis, ează matricea A cu coloanele de la 1 până la 2 eliminate:
A =
3 4
7 8
11 12


Exemplul 2.44 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,[1 3]) = [ ]
2.1. Utilizarea semnului : în manipularea matricelor 37

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


A =
2 4
6 8
10 12


Exemplul 2.45 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(2,:) = [ ]
afis, ează matricea A cu linia a 2-a eliminată:
A =
1 2 3 4
9 10 11 12


Exemplul 2.46 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(2:3,:) = [ ]
afis, ează matricea A cu liniile de la 2 până la 3 eliminate:
A =
1 2 3 4


Exemplul 2.47 Comenzile


>> A = (reshape(1:12,4,3))’ ; A([1 3],:) = [ ]
afis, ează matricea A cu liniile 1 s, i 3 eliminate:
A =
5 6 7 8


Exemplul 2.48 Comenzile


>> A = (reshape(1:12,4,3))’ ; A(:,[2,4])=A(:,[4,2])
afis, ează matricea A cu coloanele 2 s, i 4 schimbate între ele:
A =
1 4 3 2
5 8 7 6
9 12 11 10
(funct, ionează s, i varianta de schimbare între ele a două linii). 
38 2. Matrice

2.2 Operarea element cu element


Operat, iile cu matrice sunt aceleas, i cu cele date de tabelul de la pagina
7, din cazul numerelor. Ment, ionăm că operat, iile pot fi efectuate atât în sens
matriceal cât s, i element cu element (în ambele cazuri dimensiunile trebuie
să fie astfel încât operat, iile să poată fi făcute).
Precizăm doar că, în cazul împărt, irii,

Comanda Semnificat, ia
MATLAB
A/B este8 solut, ia X a sistemului X*B = A
A\B este9 solut, ia X a sistemului A*X = B

În cazul operat, iilor element cu element, fie două matrice A = (ai,j ) s, i


B = (bi,j ) . Atunci

Comanda Semnificat, ia
MATLAB10

A.*B rezultatul este o matrice cu elementele ai,j · bi,j


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

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


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

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


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

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


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

Pentru a obt, ine produsul scalar sau cel vectorial dintre doi vectori x s, i y
avem la dispozit, ie comenzile:
8
Înmult, ind cu B^(-1) în partea dreaptă obt, inem că rezultatul X este matricea
A*B^(-1).
9
Înmult, ind cu A^(-1) în partea stângă obt, inem că rezultatul X este matricea A^(-1)*B.
Cu toate acestea, pentru a determina vectorul X, MATLAB nu calculează inversa A^(-1)
(care foloses, te o metodă mai put, in precisă) ci aplică o metodă numerică care rezolvă efectiv
sistemul A*X = B, mai precis metoda de eliminare a lui Gauss (diferent, ele de precizie se
văd dacă matricele sunt de dimensiuni mari).
10
Nu trebuie lăsat un spat, iu liber înainte de operator. Astfel, comanda A. *B va pro-
duce o eroare.
2.2. Operarea element cu element 39

Comanda Semnificat, ia
MATLAB

x*y’ rezultatul este înmult, irea liniei x cu coloana y’


(adică produsul scalar dintre vectorii linie x s, i y )
dot(x,y) rezultatul este produsul scalar dintre vectorii x s, i y
cross(x,y) rezultatul este produsul vectorial dintre vectorii x s, i y

Exemplul 2.49 Comenzile


>> A = [1 2 3 ; 4 5 6 ; 7 8 9]; dif = A - 5*A
afis, ează diferent, a matricelor A cu 5*A.
Comanda
>> a = 1./A
afis, ează matricea cu elementele 1/ai,j = (ai,j )−1 :
a =
1.0000 0.5000 0.3333
0.2500 0.2000 0.1667
0.1429 0.1250 0.1111
Comenzile
>> B = ones(3); b = B./A
afis, ează matricea cu elementele bij /ai,j = bij (ai,j )−1 :
b =
1.0000 0.5000 0.3333
0.2500 0.2000 0.1667
0.1429 0.1250 0.1111
Comanda
>> c = A^2
afis, ează pătratul matricei matricei A; trebuie ca dimensiunile să fie astfel
încât sa se poate efectua înmult, irea matricelor A cu A.
Comanda
40 2. Matrice

>> d = A.^2
afis, ează matricea A cu fiecare element ridicat la pătrat:
d =
1 4 9
16 25 36
49 64 81
Comanda
>> e = A.^(-1)
afis, ează matricea cu elementele (ai,j )−1 .
Comanda
>> f = 2.^A
afis, ează matricea cu elementele 2ai,j .
Comanda
>> g = A.^B
afis, ează matricea cu elementele (ai,j )bi,j . 

2.3 Analiza datelor


MATLAB poate realiza o analiză statistică a seturilor de date. Aceste
date sunt, mai întâi, organizate s, i reprezentate în tablouri.
Ca o convent, ie, fiecare coloană a tabloului reprezintă rezultatele mă-
surării aceleas, i variabile pentru fiecare element al es, antionului (al select, iei
statistice) considerat (de exemplu, punctajele obt, inute la disciplina D1 de
către fiecare elev în parte din es, antionul considerat) iar fiecare linie reprez-
intă un set observat, ii citite pentru un element al es, antionului (de exem-
plu, punctajele obt, inute la disciplinele D1, D2, D3,. . . de către un elev din
es, antionul considerat).
Printre comenzile legate de analiza datelor amintim pe următoarele.
Acestea se pot aplica atât unei matrice A, cât s, i unui vector a (linie sau
coloană). În caz că se aplică unei matrice, aceste comenzi act, ionează asupra
fiecărei coloane în parte; astfel rezultatul va fi un vector linie (cu un număr
de coloane egal cu coloanele matricei A).
2.3. Analiza datelor 41

Comanda MATLAB Semnificat, ia


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

mean(A) media aritmetică a elementelor fiecărei


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

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


coloane a matricei A

std(A) deviat, ia standard elementelor fiecărei


coloane a matricei A

cov(A) matricea cu coeficient, ii de covariant, ă


asociat, i coloanelor matricei A

corrcoef(A) matricea cu coeficient, ii de corelat, ie


asociat, i coloanelor matricei A

sort(A) aranjarea în ordine crescătoare a elementelor


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

cumsum(A) suma cumulată aP elementelor fiecărei coloane


a matricei A (i.e. ij=1 xj )
prod(A) produsul elementelor fiecărei coloane a matricei A

cumprod(A) produsul cumulat Qal elementelor fiecărei coloane


a matricei A (i.e. ij=1 xj )

diff(A) diferent, a elementelor fiecărei coloane a matricei A


(i.e. x2 − x1 , x3 − x2 , . . . , xn − xn−1 )

Exemplul 2.50 Comenzile


>> a = rand(1,5);
>> min = min(a) , max = max(a) , media = mean(a)
>> cresc = sort(a) , descr = -sort(-a)
>> suma = sum(a) , sumacumul = cumsum(a)
afis, ează
42 2. Matrice

a =
0.44 0.38 0.77 0.80 0.19
min =
0.19
max =
0.80
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.58
sumacumul =
0.44 0.82 1.59 2.39 2.58


Exemplul 2.51 În ceea ce prives, te comanda sort, pentru a obt, ine aran-
jarea în ordine descrescătoare, am folosit comanda -sort(-a)
Dar comanda sort permitea indicarea modului cum să facă aranjarea.
Astfel, comanda
>> cresc2 = sort(a,’ascend’)
are acelas, i efect cu comanda cresc = sort(a), adică
cresc2 =
0.19 0.38 0.44 0.77 0.80
iar comanda
>> descr2 = sort(a,’descend’)
are acelas, i efect cu comanda descr = -sort(-a), adică
descr2 =
0.80 0.77 0.44 0.38 0.19


Exemplul 2.52 Comenzile


>> A = rand(5,2);
>> min = min(A) , max = max(A) , media = mean(A)
>> suma = sum(A) , sumacumul = cumsum(A)
afis, ează
2.3. Analiza datelor 43

A =
0.17 0.91
0.36 0.09
0.88 0.18
0.74 0.95
0.42 0.10
min =
0.17 0.09
max =
0.88 0.95
media =
0.51 0.45
iar comanda
>> minabs = min(min(A)) , maxabs = max(max(A))
afis, ează minumul s, i apoi maximul tuturor elementelor lui A
minabs =
0.09
maxabs =
0.95
Acelas, i rezultat se poate obt, ine dacă se folosesc comenzile
>> minabs2 = min(A(:)) , maxabs2 = max(A(:))
(deoarece A(:) afis, ează o coloană cu toate coloanele lui A puse una sub
alta). 

Exemplul 2.53 Există s, i posibilitatea afis, ării indicelui elementului minim


sau maxim. Astfel dacă se scrie
>> [minim,i] = min(A)
se obt, in valorile minime (vector notat de noi cu minim) ale fiecărei
coloane a lui A, precum s, i indicii (vector notat de noi cu i), în cadrul acelor
coloane, a respectivelor valori minime:
minim =
0.17 0.09
i =
1 0.09
44 2. Matrice

iar
>> [maxim,j] = max(A)
se obt, in valorile maxime (vector notat de noi cu maxim) ale fiecărei
coloane a lui A, precum s, i indicii (vector notat de noi cu j), în cadrul acelor
coloane, a respectivelor valori maxime:
maxim =
0.88 0.95
j =
3 4 

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


scalarul a.
Funct, ia max(A,B) returnează maximul dintre elementele matricei A s, i
ale matricei B (trebuie să aibă aceas, i dimensiune cu A).
Capitolul 3

Fişiere de tip script

Pentru probleme simple utilizarea ferestrei Command Window este sufi-


cientă (este rapidă s, i eficientă). Dar dacă numărul comenzilor cres, te s, i/sau
se dores, te schimbarea unora dintre comenzi s, i/sau se dores, te schimbarea
valorilor unor variabile, este mult mai dificil de gestionat schimbările în ca-
drul Command Window. În acest sens, MATLAB permite crearea unor fis, iere
separate, doar cu o succesiune 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 fişiere de tip script (de la termenul script
care înseamnă faptul că MATLAB cites, te efectiv caracterele din acel fis, ier)
sau fis, iere de tip M (deoarece fis, ierele script au extensia .m).
Să ment, ionăm că fis, ierele de tip M pot fi utilizate s, i pentru a 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 (tool-
bar), New Script sau New s, i apoi se alege Script (sau Function, dacă
se dores, te un fis, ier M pentru a defini o funct, ie).
Dacă în Command Window se scrie
>> edit
se deschide fereastra cu editorul MATLAB-ului.

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

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

45
46 3. Fişiere de tip script

Dacă în Command Window scriem (în dreptul prompterului) numele e-


xact (fără extensie) al acelui fis, ier, MATLAB va executa comenzile scrise în
fis, ier, ca s, i cum ar fi fost scrise direct în Command Window. Rezultatele vor
apare în Command Window.
De asemenea, fis, ierul se va executa s, i dacă utilizăm Run din bara de
instrumente sau tastăm F5
Ment, ionăm că pentru a executa fis, ierul script folderul ce apare în fe-
reastra Current Folder trebuie să coincidă cu cel în care este salvat acel fis, ier
script.
În general, este util să adăugăm s, i o scurtă descriere a comenzilor ce
apar în acel script. Acestea se pot scrie dacă inserăm comentarii prin folo-
sirea semnului % (liniile care încep cu % nu se vor executa)
Dacă dorim să scriem mai multe linii cu comentarii, putem folosi de-
limitatorii %{ %} s, i să scriem în interiorul lor, pe diferite linii (dar nu în
dreptul semnelor %{ s, i %} ).

Exemplul 3.1 Prezentăm cont, inutul unui fis, ier de tip script (sau de tip M):
% acesta este primul fisier de tip script
% deci este un fisier cu extensia .m
%{
vom scrie produsul scalar si norma vectorilor
mai intai generam doi vectori de dimensiune (4n+1)
%}
n = 10 ; x = -n:.5:n ; y = 0:.5:2*n ;
ps1 = x*y’ , ps2 = dot(x,y) , ps3 = sum(x.*y)
norma1 = sqrt(sum(x.^2)) , norma2 = norm(x)
Salvăm aces fis, ier cu numele ProdScal_Norma s, i cu extensia .m
Dacă scriem apoi în Command Window
>> ProdScal_Norma
se va executa acest fis, ier s, i se va afis, a
ps1 = 1435 ps2 = 1435 ps3 = 1435
norma1 = 37.8814 , norma2 = 37.8814 
De asemenea, ment, ionăm că atunci când se execută un fis, ier de tip script
variabilele ce sunt utilizate în acel fis, ier trebuie să fie deja definite s, i cu
nume atribuit.
47

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


duri:

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

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

• sau utilizând comanda input care are structura:

nume_var = input(’text_afisat’)

unde: nume_var este numele dat de noi variabilei iar text_afisat


este s, irul de caractere (textul) ce se dores, te să apară în Command Win-
dow.
Când comanda de mai sus este executată, textul va fi afis, at în Co-
mmand Window s, i va cere utilizatorului să introducă o valoare ce va fi
numită nume_var. Utilizatorul introduce valoarea s, i tastează Enter.
Dacă se adaugă semnul ; după comandă, atunci valoarea introdusă
de noi a variabilei nu se va mai afis, a.
Comanda input are s, i posibilitatea de a cere (s, i atribui un nume)
unui s, ir de caractere (string):

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

Exemplul 3.2 Dacă scriem


>> R = input(’Introduceti raza cercului = ’)
se va afis, a
Introduceti raza cercului =
Apoi utilizatorul trebuie să introducă o valoare (de exemplu, 5) iar,
după ce se tastează Enter, va apare
R =
5 
As, a cum am văzut deja, MATLAB generează automat un display, când
anumite comenzi sunt executate; de exemplu, când o valoare este atribuită
unei variabile s, i se tastează Enter s, i apare în display variabila s, i valoarea
ei.
48 3. Fişiere de tip script

În afara acestei afis, ări automate MATLAB pune la dispozit, ie alte două
comenzi: comanda disp prin care se poate afis, a un text s, i/sau date nu-
merice s, i comanda fprintf prin care se poate afis, a un text s, i/sau date
numerice preferate 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 dacă le convertim în caractere. A-
ceasta poate fi făcută folosind comanda num2str care are structura:

num2str(nume_var,6)

sau
num2str(nume_var,’%-5.2f’)
unde:

• nume_var este variabila a cărei valoare se dores, te a fi transformată


în caractere (trebuie să fie definită în prealabil);

• 6 indică numărul total de cifre (ale variabilei nume_var) ce dorim să


fie afis, ate;

• % indică începerea operatorului de formatare;

• - indică alinierea la stânga a numărului afis, at (există s, i varianta +


care, dacă e utilizată, va afis, a semnul numărului);

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

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


afis, ate;

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


i).

Pentru a folosi efectiv comanda num2str în cadrul comenzii disp vezi


următorul exemplu.
49

Exemplul 3.3 Să introducem trei note (creăm vectorul nota s, i introducem
componentele lui) s, i să le calculăm media:
>> nota(1) = 7; nota(2) = 9; nota(3) = 10;
>> media = mean(nota)
Varianta mai simplă de afis, are este (pentru aceasta, mai întâi, creăm un
vector cu textul de afis, at):
>> a = [’Media notelor introduse este ’ ,
num2str(media)];
>> disp(a)
Altă variantă de afis, are este (dorim să afis, ăm valoarea în formatul de
maxim 4 cifre):
>> b = [’Media notelor introduse este ’ ,
num2str(media,4)];
>> disp(b)
Altă variantă de afis, are este (dorim să afis, ăm valoarea în formatul de
număr cu două zecimale):
>> c = [’Media notelor introduse este ’ ,
num2str(media,’%.2f’)];
>> disp(c)
Să afis, ăm notele introduse s, i media lor:
>> d=[’Am introdus notele ’ , num2str(nota(1),
’%.2f’),’, ’ , num2str(nota(2),’%.2f’), ’ si
’, num2str(nota(3),’%.2f’), ’si am obtinut
media ’, num2str(media,’%.2f’)];
>> disp(d) 

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

fprintf(’text_afisat_doar_caractere’)

Această comandă poate fi folosită în Command Window, într-un fis, ier de tip
script sau într-un fis, ier de tip function.
Dacă se dores, te trecerea pe o linie nouă, în cadrul s, irului de caractere
afis, ate (de exemplu, dacă fraza afis, ată e prea lungă), atunci se inserează

\n
50 3. Fişiere de tip script

înaintea caracterului care se dores, te să apară pe o nouă linie.


Ment, ionăm s, i faptul că este util să adăugăm \n s, i la sfârs, itul textului de
afis, at; doar as, a prompterul MATLAB va apare pe o linie nouă (altfel el va
apărea în continuarea textului afis, at).
Astfel, dacă există mai multe comenzi de tip fprintf (s, i fără semnul
; la sfârs, it), atunci ele vor afixa textele lor în continuu, unul după altul. De
aceea este util utilizarea comenzii \n pentru a se trece la o altă linie.
De asemenea, dacă se dores, te, este util să adăugăm comanda

fprintf(’\n’)

după o altă comandă de tip fprintf pentru a insera o linie nouă (fără
cont, inut), adică un spat, iu vertical după textul precedent.
Dacă se dores, te inserarea unui spat, iu TAB în cadrul s, irului de caractere
afis, ate, atunci se inserează
\t
acolo unde se dores, te inserarea spat, iului.

Exemplul 3.4 Dacă scriem


>> fprintf(’Problema nu are solutie. \nVerificati
datele de intrare ! \n’)
se va afis, a
Problema nu are solutie.
Verificati datele de intrare !
>> 
Dacă există mai multe comenzi de tip fprintf (s, i fără semnul ; la
sfârs, it), atunci ele vor afixa textele lor în continuu, unul după altul. De
aceea este util utilizarea comenzii \n pentru a se trece la o altă linie.
Comanda fprintf (în varianta de afis, are a unui text dar s, i a datelor
numerice) are structura:

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

unde:

• % indică începerea operatorului de formatare (deci faptul că inserăm


valoarea unei variabile); pot fi scrise mai multe semne % (deci vom
apela corespunzător mai multe variabile);
51

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

• - indică alinierea la stânga a numărului afis, at (există s, i varianta +


care, dacă e utilizată, va afis, a semnul numărului);

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

• 2 indică numărul de zecimale (ale valorii variabilei) ce se doreşte a fi


afis, ate;

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


i).

Exemplul 3.5 Dacă scriem


>> nota(1) = input(’Introduceti prima nota = ’);
>> nota(2) = input(’Introduceti a doua nota = ’);
>> nota(3) = input(’Introduceti a treia nota = ’);
>> media = mean(nota);
>> fprintf(’Am introdus notele %-.2f, %-.2f si
%-.2f \n’,nota(1),nota(2),nota(3))
>> fprintf(’\n’)
>> fprintf(’Nota %-.4f reprezinta media
notelor \n’, media)
se va cere introducerea celor trei note s, i apoi se va afis, a textul s, i vari-
abilele din cadrul comenzilor fprintf 
Capitolul 4

Funcţii

MATLAB furnizează câteva structuri care permit să ne creăm propriile


funct, ii. Aceste structuri sunt funct, ii definite de fis, iere separate de tip M
(fişiere de tip function), funct, ii de tip anonymous s, i funct, ii de tip inline.

4.1 Fişiere de tip function


Dacă dorim să definim o funct, ie într-un fis, ier separat, de tip M, atunci
structura este, în linii mari, următoarea:
function[arg_iesire] = nume_fct(arg_intrare)
%{

··· 


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


···

%}

··· 


··· definirea efectivă a funct, iei nume_fct


···

end
unde:
• function este cuvântul obligatoriu cu care trebuie să înceapă prima
linie;

53
54 4. Funcţii

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

• arg_iesire sunt argumente de ies, ire; dacă o funct, ie nu are argu-


mente de ies, ire, atunci [arg_iesire] = poate lipsi; dacă o funct, ie
are doar un argument de ies, ire, atunci parantezele pătrate [ ] pot
lipsi; dacă o funct, ie are mai multe argumente de ies, ire, atunci ele se
scriu separate printr-un spat, iu sau printr-o virgulă;

• arg_intrare sunt argumente de intrare; dacă o funct, ie nu are ar-


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

• end poate lipsi.

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

Exemplul 4.1 Să definim o funct, ie scalară de argument vectorial. Astfel,


creăm un fis, ier de tip M cu numele sumapatrate.m
function z = sumapatrate( x,y )
% functia da suma patratelor a doua numere
% se poate aplica si vectorilor
z = x.^2 + y.^2-25;
Apoi, dacă în Command Window scriem
>> help sumapatrate
se vor afis, a toate comentariile scrise de noi în fis, ierul M.
Dacă în Command Window scriem
>> sumapatrate(3,4)
se va afis, a
ans =
0
Dacă în Command Window scriem
>> rez = sumapatrate(3,4)
se va afis, a
4.1. Fişiere de tip function 55

rez =
0
Dacă în Command Window scriem
>> sumapatrate([1 2;3 4],[1 2;3 4])
se va afis, a
ans =
-23 -17
-7 7


Exemplul 4.2 Să definim o funct, ie vectorială de argument scalar. Astfel,


creăm un fis, ier de tip M cu numele fct_cerc.m care defineşte o funct, ie:
function z = fct_cerc(theta)
% functia va returna coordonatele (x,y)
% ale unui pct de pe cercul x^2+y^2=5^2
z = [ 5.*cos(theta) , 5.*sin(theta) ];
% din definitia de mai sus se vede ca z este vector
Apoi, dacă în Command Window scriem
>> help fct_cerc
se vor afis, a toate comentariile scrise de noi în fis, ierul M.
Dacă în Command Window scriem
>> fct_cerc(0)
se va afis, a o pereche de coordonate
ans =
5 0
Dacă în Command Window scriem
>> fct_cerc([ 0 , pi/6 , pi/3 , pi/2 ])
se vor afis, a patru perechi de coordonate (mai întâi sunt afis, ate toate cele
patru valori corespunzătoare lui 5.*cos(theta), apoi cele corespunză-
toare lui 5.*sin(theta) )
ans =
5 4.33 2.50 0 0 2.50 4.33 5
Dacă în Command Window scriem
56 4. Funcţii

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


se vor afis, a patru perechi de coordonate (dar fiecare pereche (pe linie)
reprezintă exact coordonatele unui punct de pe cercul x2 + y 2 = 5, cores-
punzător fiecărui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )
ans =
5 0
4.33 2.50
2.50 4.33
0 5
Dacă în Command Window scriem
>> theta = linspace(1,pi/2,100)
>> fct_cerc(theta’)
se vor afis, a o sută de perechi de coordonate (fiecare pereche (pe linie)
reprezintă exact coordonatele unui punct de pe cercul x2 + y 2 = 5, cores-
punzător fiecărui theta=linspace(1,pi/2,100) )
ans =
5 0
4.33 2.50
.. ..
. .
.. ..
. .
2.50 4.33
0 5


Exemplul 4.3 Aceleas, i efecte se obt, in dacă folosim transpunerea în cadrul


definit, iei funct, iei (s, i nu atunci când apelăm funct, ia):
function z = fct_cerc(theta)
z = [ (5.*cos(theta))’ , (5.*sin(theta))’ ];
Dacă în Command Window scriem
>> fct_cerc([ 0 , pi/6 , pi/3 , pi/2 ])
se vor afis, a patru perechi de coordonate (fiecare pereche (pe linie) re-
prezintă exact coordonatele unui punct de pe cercul x2 + y 2 = 5, cores-
punzător fiecărui theta=[ 0 , pi/6 , pi/3 , pi/2 ] )
4.2. Funcţii anonymous 57

ans =
5 0
4.33 2.50
2.50 4.33
0 5


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


anta de a scrie:
function [z,w] = fct_cerc(theta)
z = (5.*cos(theta)) ;
w = (5.*sin(theta)) ;
% din notattie se vede ca rezultatul este vector
Dacă în Command Window scriem
>> theta = linspace(1,pi/2,100)
>> [comp1,comp2] = fct_cerc(theta)
se vor afis, a o sută de perechi de coordonate.
Dacă scriem
>> A = [comp1’,comp2’]
se vor afis, a o sută de perechi de coordonate (dar fiecare pereche (pe
linie) reprezintă exact coordonatele unui punct de pe cercul x2 + y 2 = 5 )
Dacă, de exemplu, scriem comanda
>> plot(comp1,comp2)
vom obt, ine graficul cu toate punctele obt, inute mai sus. 

4.2 Funcţii anonymous


Există numeroase situat, ii în care o funct, ie MATLAB sau una definită de
noi trebuie utilizată, ca argument, de către o altă funct, ie, pentru evaluare.
Acest lucru poate fi făcut dacă utilizăm funct, iile definite în fis, iere de tip M
sau funct, ii de tip anonymous, dar există s, i o a treia metodă: funct, ii definite
inline (vezi sect, iunea următoarea).
Pentru a defini o funct, ie de tip anonymous trebuie să utilizăm un func-
tion handle (aceasta se realizează scriind caracterul @ în fat, a funct, iei care e
argument).
58 4. Funcţii

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

nume_fct = @(arg_iesire) functia_efectiva

Vom folosi, pentru exemplificare, funct, ia ezplot11 care reprezintă, în


două dimensiuni (2D), graficul unei funct, ii dată explicit (i.e. y = f (x) ),
implicit (i.e. F (x, y) = 0 ) sau parametric (i.e. x = f (t) , y = g (t) ). Deci ar-
gumentul funct, iei ezplot este o altă funct, ie. Domeniul implicit considerat
de funct, ia ezplot pentru variabila funct, iei argument este [−2π, 2π] (dar el
se poate s, i schimba).

Exemplul 4.5 Comanda


>> sq = @(x) x.^2
defines, te funt, ia nouă sq (x) = x2 ; este o funct, ie de tip anonymous (s, i se
realizează utilizând function handle).
Scriind apoi
>> sq(.7)
obt, inem valoarea funct, iei sq în punctul .7
Comanda
>> ezplot(sq , [-3 3])
va afis, a graficul funct, iei sq (x) = x2 cu x din intervalul [−3, 3] . 

Exemplul 4.6 Comanda


>> functia3 = @(t) t.*sin(t)
defines, te funt, ia nouă functia3 (t) = t sin t ; este o funct, ie de tip anony-
mous (s, i se realizează utilizând function handle).
Scriind apoi
>> functia3(1)
obt, inem valoarea funct, iei functia3 în punctul 1.
Comanda
>> ezplot(functia3)
va afis, a graficul funct, iei f (t) = t sin t cu t din intervalul [0, 2π] . 
11
Easy-to-use function plotter
4.2. Funcţii anonymous 59

Exemplul 4.7 Comanda


>> functia4 = @(x,y) x.^4+y.^4-1
defines, te funt, ia nouă f (x, y) = x4 + y 4 − 1 ; este o funct, ie de tip anony-
mous.
Scriind apoi
>> functia4(1,3)
va afis, a
ans =
9 

Exemplul 4.8 Comanda


>> ezplot(@(t) t.*sin(t))
va afis, a graficul funct, iei f (t) = t sin t (funct, ie de tip anonymous) cu t
din intervalul [0, 2π] .
Comanda
>> ezplot(@(x,y) x.^4+y.^4-1, [-2 2])
va afis, a graficul funct, iei x4 + y 4 − 1 (funct, ie de tip anonymous) cu x din
intervalul [−2, 2] . 

Exemplul 4.9 Comanda


>> functia5 = @(t) exp(-t).*cos(8*t);
>> functia6 = @(t) exp(-t).*sin(8*t);
defines, te două funct, ii noi x (t) , y (t) (funct, ii de tip anonymous) (sau o
funct, ie scalară dată parametric: x = x (t) s, i y = y (t) )
Comanda
>> ezplot(functia5,functia6, [0 3])
va afis, a graficul funct, iei dată parametric e−t cos (8t) , e−t sin (8t) cu t


din intervalul [0, 3] . 

Exemplul 4.10 Să creăm un fis, ier de tip M cu numele deriv_aprox.m pentru
a defini funct, ia numită deriv_aprox care va da valoarea aproximativă a
derivatei unei funct, ii, într-un punct (vezi Exemplul 4.19)
function y = deriv_aprox(f,x)
60 4. Funcţii

y = (f(x+sqrt(eps))-f(x))/sqrt(eps);
Acum, în Command Window, scriem:
>> deriv_aprox(@exp,1)
s, i obt, inem o aproximare a valorii derivatei funct, iei ex în punctul x = 1,
adică
ex+h − ex
(ex )0 ≈ , unde h := sqrt(eps)

x=1 h
deci o valoare aproximativă a lui e1 :
ans =
2.7183 

În final, ment, ionăm alte câteva cazuri în care un function handle este
utilizat pentru a utiliza o funct, ie (deja definită) drept argument.
Un exemplu util este comanda arrayfun care aplică o funct, ie (deja
definită de noi sau de MATLAB) tuturor elementelor unei matrice con-
form structurii:

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

unde:

• functie este funct, ia pe care vrem să o aplicăm tuturor elementelor


lui A ; această funct, ie trebuie să fie de o variabilă reală cu valori
scalare;

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


pentru fiecare i,j;

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

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

B = arrayfun(@functie,A)
Pn k+1 xk
Exemplul 4.11 Folosim aproximarea ln (x + 1) ' k=1 (−1) k , pen-
tru orice x ∈ (−1, 1], pentru n suficient de mare.
Să definim acum un fis, ier de tip function cu numele dezv_ln.m:
function y = dezv_ln(x)
4.2. Funcţii anonymous 61

k = 1:100;
y = sum((-1).^(k+1).*x.^k./k);
Apoi definim a:
>> a = [-0.5 0 0.5]
Acum putem aplica funt, ia fiecărui element al matricei a:
>> b = arrayfun(@(x) dezv_ln(x),a)
Acelas, i efect se obt, ine dacă scriem direct:
>> b = arrayfun(@dezv_ln,a)
(am apelat funct, ia fct_fzero folosind un function handle). 

Exemplul 4.12 În caz că o funct, ie are mai multe argumente, putem proceda
astfel.
Să luăm funct, ia de mai sus depinzând s, i de n (creăm un fis, ier de tip
function cu numele dezv2_ln.m):
function y = dezv2_ln(x,n)
k = 1:n;
y = sum((-1).^(k+1).*x.^k./k);
Apoi definim a:
>> a = [-0.5 0 0.5]
Acum putem aplica funt, ia fiecărui element al matricei a:
>> b = arrayfun(@(x) dezv2_ln(x,100),a) 

Un alt exemplu util este comanda fzero cu ajutorul căreia determinăm


zero-urile unei funct, ii (vezi pagina 89):

Exemplul 4.13 Fie


f (x) = x3 − x2 − 3 arctg (x) + 1 .
Să definim, mai întâi, un fis, ier de tip function cu numele fct_fzero.m:
function y = fct_fzero(x)
y = x.^3-x.^2-3.*atan(x)+1;
Apoi determinăm nis, te valori particulare în care funct, ia îs, i schimbă
semnul; găsim f (−2) < 0, f (−1) > 0. Zero-urile se pot determina scriind:
>> sol = fzero(@fct_fzero,[-2 -1])
(am apelat funct, ia fct_fzero folosind un function handle). 
62 4. Funcţii

Exemplul 4.14 Comanda


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

4.3 Funcţii inline


O altă modalitate de a avea o funct, ie drept argument este de a utiliza
o funct, ie definită inline, adică definită în lina de comandă; în acest sens
scriem:
nume_fct = inline(’expresie_fct’)

Exemplul 4.15 Comanda


>> functia1 = inline(’x.^4+y.^4-1’)
>> ezplot(functia1, [-2 2])
va afis, a graficul funct, iei x4 + y 4 − 1 cu x din intervalul [−2, 2] . 

Exemplul 4.16 Evident, comanda


>> ezplot(’x.^4+y.^4-1’, [-2 2])
va afis, a acelas, i grafic ca mai sus. 

Exemplul 4.17 Să creăm, în Command Window, o funct, ie de tip inline (funct, ia
dă suma pătratelor a două numere s, i se poate aplica s, i vectorilor):
>> sumapatrate = inline( ’ x.^2+y.^2 ’ )
Astfel se va afis, a
sumapatrate =
Inline function:
sumapatrate = x.^2+y.^2
Dacă în Command Window scriem
>> sumapatrate(3,4)
se va afis, a
ans =
25 
4.3. Funcţii inline 63

Exemplul 4.18 Dacă se defines, te inline o funct, ie, atunci ordinea implicită a
argumentelor este cea alfabetică:
>> sumapatrate = inline( ’ a*x.^2+b*y.^2 ’ )
s, i se va afis, a
sumapatrate =
Inline function:
sumapatrate(a,b,x,y) = a*x.^2+b*y.^2
Dar dacă se dores, te o anumită ordonare a argumentelor scriem astfel:
>> sumapatrate = inline( ’ a*x.^2+b*y.^2 ’ ,
’x’,’y’,’a’,’b’)
s, i se va afis, a
sumapatrate =
Inline function:
sumapatrate(x,y,a,b) = a*x.^2+b*y.^2 

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

f (x + h) − f (x)
f 0 (x) ≈ , dacă h > 0 este suficient de mic.
h
function y = deriv_aprox(f,x)
%{
functia da o aproximare a derivatei
unei functii f intr-un punct x
valoarea f’(x) este aproximata de (f(x+h)-f(x))/h
iar pe h il vom lua foarte mic, de exemplu
h = sqrt(eps)
%}
y = (f(x+sqrt(eps))-f(x))/sqrt(eps);
Acum, în Command Window, definim o funct, ie inline
>> functia2 = inline( ’ sqrt(x)./(1+x.^2) ’ )
Dacă scriem s, i
>> deriv_aprox(functia2,.5)
64 4. Funcţii

x
obt, inem o aproximare a valorii derivatei funct, iei în punctul x =
1 + x2
0.5 :
ans =
0.1131 
Capitolul 5

Programare în MATLAB

Un program este o succesiune de comenzi. Acestea se execută ori una


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

5.1 Operatori relaţionali şi operatori logici


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

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

65
66 5. Programare în MATLAB

== egal12 cu
∼= diferit de

Dacă se compară două matrice, atunci cele două matrice trebuie să aibă
aceleas, i dimensiuni s, i se compară element cu element. Rezultatul este o
matrice (cu aceleas, i dimensiuni cu matricele comparate) de 0 s, i 1.
Se poate compara s, i un scalar cu o matrice atunci se compară scalarul
cu fiecare element al matricei. Rezultatul este o matrice de 0 s, i 1.

Exemplul 5.1 Comenzile


>> A = 8:-1:0; B = 9-A; Q1 = A>4
afis, ează
Q1 =
1 1 1 1 0 0 0 0 0
iar
>> Q2 = (A == B-1)
afis, ează
Q2 =
0 0 0 0 1 0 0 0 0 

Exemplul 5.2 Comenzile


>> A = [1 2 ; 3 4]; B = eye(2); A == B
afis, ează
ans =
1 0
0 0
iar
>> A <= B
afis, ează
ans =
1 0
0 0

12
A nu se confunda operatorul relaţional == (care compară două variabile s, i afis, ează
1 (True) dacă sunt egale s, i 0 (False) dacă sunt diferite) cu = care înseamnă atribuirea unei
valori (rezultatul unei operat, ii) unei variabile.
5.1. Operatori relaţionali şi operatori logici 67

Exemplul 5.3 Comenzile


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

afis, ează
y =
0.8415 0.9276 0.9816 NaN 0.9816

0.9276 0.8415 

sin 0
Exemplul 5.4 Dacă se dores, te ocolirea problemei , atunci redefinim
0
pe x scriind
>> x = x + eps * (x==0); y = sin(x)./x

s, i astfel se afis, ează


y =
0.8415 0.9276 0.9816 1.0000 0.9816

0.9276 0.8415 

Operatorii logici furnizează o modalitate de a combina sau nega expre-


siile relat, ionale. MATLAB oferă următorii operatori logici:

Operator logic Semnificat, ia


& S, I (element cu element, pentru tablouri)
| SAU (element cu element, pentru tablouri)
∼ NEGAT, IA
&& S, I (pentru scalari)
|| SAU (pentru scalari)

În plus fat, ă de operatorii logici s, i cei relat, ionali ment, ionat, i mai sus MAT-
68 5. Programare în MATLAB

LAB furnizează următoarele funct, ii:

Funct, ia Semnificat, ia
and(x,y) echivalentă funct, ional cu x&y
or(x,y) echivalentă funct, ional cu x|y
not(x) echivalentă funct, ional cu ∼x
SAU exclusiv;
xor(x,y) 1 dacă x este nenul sau dacă y este nenul
s, i 0 dacă ambii sunt nuli sau ambii sunt nenuli
1 dacă există o componentă nenulă a vectorului x;
any(x) 1 pentru fiecare coloană a matricei x
pentru care există o componentă nenulă
1 dacă toate componentele vectorului x sunt nenule;
all(x) 1 pentru fiecare coloană a matricei x
care are toate elementele nenule

Exemplul 5.5 Comenzile


>> A = 8:-1:0 ; B = 9-A ; Q1 = (A>2) & (A<6)
afis, ează 1 dacă A este mai mare ca 4 s, i mai mic ca 6:
Q1 =
0 0 0 1 1 1 0 0 0
iar
>> Q2 = and(A>4,A<6)
afis, ează acelas, i lucru. 

Exemplul 5.6 Comenzile


>> A = 8:-1:0 ; B = 9-A ; Q3 = (A<2) | (A>6)
afis, ează 1 dacă A este mai mare ca 4 sau mai mic ca 6:
Q3 =
1 1 0 0 0 0 0 1 1
iar
>> Q4 = or(A<2,A>6)
afis, ează acelas, i lucru. 

Exemplul 5.7 Comenzile


5.1. Operatori relaţionali şi operatori logici 69

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

afis, ează
Q5 =
0 0 0 0 1 1 1 1 1
iar
>> Q6 = not(A>4)

afis, ează acelas, i lucru. 

Exemplul 5.8 Comenzile


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

afis, ează
Q1 =
1
iar
>> Q2 = b == 1 && a == 0

afis, ează
Q2 =
0
iar
>> Q3 = (1/a) < 0 || a == 0

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


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

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


70 5. Programare în MATLAB

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

Ordinea descrescătoare
Operatorul a nivelului de
precedent, ă
parantezele 1
transpusa .’ transpusa conjugată ’
2
puterea .^ puterea ^
plusul unar + minusul unar - negat, ia ∼ 3
înmult, irea .∗ înmult, irea ∗
împărt, irea ./ împărt, irea / 4
împărt, irea .\ împărt, irea \
adunarea + scăderea - negat, ia logică ∼ 5
generarea unui vector linie :
6
(notat, ia „pentru” coloană)
< <= > >= == ∼= 7
& 8
| 9
&& 10
|| 11

Exemplul 5.9 Comenzile


>> 1 | 0 & 0
afis, ează
ans =
1
iar
>> 1 | (0 & 0)
afis, ează
ans =
1
iar
>> (1 | 0) & 0
5.1. Operatori relaţionali şi operatori logici 71

afis, ează
ans =
0 

Exemplul 5.10 Comenzile


>> x = [0 1 2] ; y = [-1,0,1]; x<=0 & y+1>=0
afis, ează
ans =
1 0 0
iar
>> xor(x,y)
afis, ează
ans =
1 1 0
iar
>> all(y)
afis, ează
ans =
0
iar
>> any(y)
afis, ează
ans =
1 

Exemplul 5.11 Comenzile


>> A = [1 0 3 ; 4 5 6] ; all(A)
afis, ează
ans =
1 0 1
iar
>> any(A)
afis, ează
ans =
1 1 1 
72 5. Programare în MATLAB

De asemenea, MATLAB furnizează numeroase funct, ii care testează e-


xistent, a unor valori sau condit, ii anume:

Funct, ie Semnificat, ia
ischar testează dacă argumentul este s, ir de caractere
isempty testează dacă argumentul este vid
isequal testează dacă tablourile sunt identice
isfinite testează dacă elementele unui tablou sunt finite
isinf testează dacă elementele unui tablou sunt infinite
islogical testează dacă argumentul este un tablou logic
isprime testează dacă argumentul este număr prim
isnumeric testează dacă argumentul este s, ir de caractere
isreal testează dacă argumentul este un tablou real

Funct, ia find aplicată unui vector spune ce indici corespund componen-


telor nenule ale acelui vector. În cazul unei matrice funct, ia find spune
ce indici corespund elementelor nenule ale acelei matrice (indexarea ele-
mentelor matricei se face astfel: se scriu toate coloanele una sub alta s, i se
numerotează fiecare element în ordine crescătoare).

Exemplul 5.12 Comenzile


>> x = [-1 0 7] ; find(x)
afis, ează
ans =
1 3
iar
>> y = 1 : 100 ; isprime(y)
afis, ează un vector linie cu 100 de coloane cu 1 (dacă elementul cores-
punzător este prim) s, i 0 (dacă elementul corespunzător nu este prim).
iar
>> find(isprime(y))
afis, ează indicii (din cei 100) corespunzători lui 1 (adică numerelor prime
de la 1 la 100). 
5.2. Structuri if-elseif-else-end 73

Exemplul 5.13 Comenzile

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

afis, ează
ans =
1
2
5
6
iar
>> find(A<0)

afis, ează
ans =
1
6


5.2 Structuri if-elseif-else-end


(şi variantele if-end, if-else-end)
Structura comenzii if-elseif-else-end este, în linii mari, urmă-
toarea:

··· 


··· Program MATLAB


···

if expresie condit, ionată



··· 

··· grup 1 de comenzi MATLAB


···

elseif expresie condit, ionată


74 5. Programare în MATLAB


··· 


··· grup 2 de comenzi MATLAB


···

else

··· 


··· grup 3 de comenzi MATLAB


···

end

··· 


··· Program MATLAB


···

Ment, ionăm că elseif s, i grupul 2 de comenzi poate lipsi; astfel construcţia
se reduce la una de tip if-else-end.
De asemenea, elseif, else s, i grupurile 2 s, i 3 de comenzi pot lipsi;
astfel construcţia se reduce la cea mai simplă formă a ei: o construct, ie de
tip if-end.
Pe de altă parte, poate apare în plus un alt elseif însot, it de un alt grup
de comenzi.
Dacă prima expresia condit, ionată este adevărată (are valoarea 1), atunci
programul continuă să execute toate comenzile care urmează după if,
adică grupul 1 de comenzi, până la elseif.
Dacă prima expresie condit, ionată este falsă (are valoarea 0), atunci pro-
gramul omite să execute grupul 1 de comenzi s, i trece direct la elseif.
Dacă expresia condit, ionată asociată ei este adevărată (are valoarea 1), atunci
programul continuă să execute toate comenzile care urmează după elseif,
adică grupul 2 de comenzi, până la else.
Dacă a doua expresie condit, ionată este falsă (are valoarea 0), atunci pro-
gramul omite să execute s, i grupul 2 de comenzi s, i trece direct la else s, i la
executarea grupului de 3 comenzi, până la end.

Exemplul 5.14 Definim:


>> mere = 15 ; cost = mere * 1.5;
Acum calculăm noul cost al merelor s, tiind că dacă vom cumpăra mai
mult de 10 mere, atunci se dă un discount de 20%:
5.2. Structuri if-elseif-else-end 75

>> if mere > 10


cost = 0.8 * cost;
end
Acum, dacă se scrie
>> cost
va apare
cost =
18 

Exemplul 5.15 Se defines, te, mai întâi, un număr folosind comanda input
>> numar = input(’Introduceti numarul = ’)
se va afis, a
Introduceti numarul =
Apoi utilizatorul trebuie să introducă o valoare (de exemplu, −5) iar,
după ce se tastează Enter, va apare
numar =
-5
Apoi se testează: dacă variabila noastră are valoarea pozitivă, se păs-
trează, iar dacă e negativ, atunci se înlocuies, te valoarea lui cu 0 :
>> if numar < 0
numar = 0
end
Acum, dacă se tastează Enter, va apare
numar =
0
(dacă numărul introdus ar fi fost pozitiv, atunci nu s-ar fi afis, at nimic).
Acum dacă se scrie:
>> fprintf(’Radicalul numarului %.4f este %.4f \n’,
numar, sqrt(numar))
se va afis, a
Radicalul numarului 0.0000 este 0.0000 
76 5. Programare în MATLAB

Exemplul 5.16 O variantă este următoarea:


>> numar = input(’Introduceti numarul = ’)
Apoi utilizatorul trebuie să introducă o valoare, de exemplu, −5.
Apoi se scrie:
>> if numar < 0
disp(’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 dacă un număr ge-


nerat aleator este sau nu mai mic decât 0.5 :
>> x = rand;
>> if x < 0.5
disp(x)
disp(’Numarul aleator, uniform din (0,1),
generat de MATLAB este mai mic ca 0.5’)
else
disp(x)
disp(’Numarul aleator, uniform din (0,1),
generat de MATLAB este mai mare ca 0.5’)
end 

Exemplul 5.18 Să creăm un fis, ier de tip M cu numele fct_ramuri.m care de-
fineşte o funct, ie cu ramuri:
function y = fct_ramuri(x)
%{
definim o functie cu ramuri
intr-un fisier de tip M
%}
if x < -1
y = 1;
5.3. Structuri ciclice de tip for-end 77

else
if x == -1
y = 7
else
if x <= 2
y = x^2
else
y=4
end
end
end
Apoi, dacă î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 dacă scriem scriem fi-
s, ierul fct_ramuri2.m, folosind elseif
function y = fct_ramuri2(x)
if x < -1
y = 1;
elseif x == -1
y = 7
elseif x <= 2
y = x^2
else
y=4
end 

5.3 Structuri ciclice de tip for-end


Un ciclu este o altă metodă de a controla desfăs, urarea unui program.
Fiecare ciclu de executare este numit pas. În fiecare pas cel put, in unei vari-
abile îi este atribuită altă valoare. Într-un ciclu executarea unei comenzi sau
a unui grup de comenzi este repetată de câteva ori: ori este precizat de la
78 5. Programare în MATLAB

început numărul de pas, i (instruct, iuni de tip for-end) ori se repetă până
când o anumită condit, ie e satisfăcută (instruct, iuni de tip while-end).
Structura comenzii for-end este, în linii mari, următoarea:

··· 


··· 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 această
valoare a lui k. Apoi noua valoare a lui k este a+h iar grupul de comenzi
este executat din nou cu noua valoare a lui k. S, .a.m.d. până se ajunge
ca valoarea k=b când se execută pentru ultima dată grupul de comenzi
folosind valoarea k=b. Apoi se execută comenzile de după comanda end
Evident, pasul h poate fi negativ sau pozitiv. Dacă a<b iar h<0 sau
a>b iar h>0, atunci pasul nu se execută.
Este posibil ca ultimul pas să nu fie pentru k=b dacă b nu poate fi scris
sub forma a+n*h, cu n ∈ N. Astfel, ultimul k pentru care se execută pasul
este cel mai mare număr de tipul a+n*h, cu n ∈ N, din stânga lui b.
În loc de vectorul a:h:b se poate scrie orice altă matrice linie se dores, te.

Exemplul 5.20 Vom genera o matrice folosind instruct, iunea for-end


Ma precis, vom scrie o matrice de ordin n × n cu 2 pe diagonala princi-
pală, −1 deasupra s, i dedesubtul diagonalei principale s, i 0 în rest:
function A = matrice_sistem(n);
for k = 1:n
for l = 1:n
5.3. Structuri ciclice de tip for-end 79

if k == l
A(k,l)=2;
elseif abs(k-l) == 1
A(k,l) = -1;
else
A(k,l) = 0;
end
end
end 

X (−1)k k
Exemplul 5.21 Vom calcula suma primilor n termeni ai seriei .
2k
k=1
Este convenabil să scriem instruct, iunile într-un fis, ier de tip script s, i apoi să
îl executăm:
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 :

X∞ (−1)k x2k+1
sin (x) = .
k=0 (2k + 1)!

Să calculăm valoarea sin (x) folosind aproximarea dată de suma primilor
n termeni ai seriei precedente. Este convenabil să definim un fis, ier de tip
function 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) 
80 5. Programare în MATLAB

5.4 Structuri ciclice de tip while-end


Ciclul while-end este utilizat în situat, iile când sunt necesari pas, ii repet-
itivi dar nu se s, tie dinainte numărul pas, ilor (acesta nu este specificat când
programul începe). Pas, ii se repetă până când o anumită condit, ie este satis-
făcută.
Structura comenzii while-end este, în linii mari, următoarea:

··· 


··· Program MATLAB


···

while expresie condit, ionată



··· 


··· grup de comenzi MATLAB


···

end

··· 


··· Program MATLAB


···

În primul pas avem o expresie condit, ionată ce trebuie verificată. Dacă


valoarea ei este falsă (are valoarea 0), atunci programul omite să execute
grupul de comenzi s, i trece direct la comenzile de după end. Dacă expresia
condit, ionată este adevărată (are valoarea 1), atunci programul continuă să
execute toate comenzile dintre while s, i end. Apoi programul se întoarce
la comanda while s, i verifică din nou expresia condit, ionată s, i se reia pro-
cedeul de mai sus.

Expresia condit, ionată trebuie să cont, ină cel put, in o variabilă. În primul
pas grupul de comenzi este executat pentru prima dată iar valoarea acelei
(acelor) variabile este schimbată. Cu această nouă valoare este verificată
din nou expresia condit, ionată. Dacă e adevărată, atunci se execută din
nou grupul de comenzi iar valoarea acelei (acelor) variabile este din nou
schimbată. Grupul de comenzi este executat atâta timp cât valoarea acelei
(acelor) variabile verifică expresia condit, ionată.
5.4. Structuri ciclice de tip while-end 81

Exemplul 5.23 În acest program o variabilă x ia valoarea 1 iar apoi valoa-


rea ei este dublată atâta vreme cât valoarea ei este mai mică sau egală cu
15 :
>> x=1;
>> while x <= 15
x = 2*x
end 

Exemplul 5.24 Să definim o funct, ie care verifică ce factorial este mai mic
decât un număr introdus de noi. Creăm un fis, ier de tip function cu numele
factorial_max.m:
function y = factorial_max(x)
i = 0; fact = 1;
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 :


X ∞ xk
exp (x) = .
k=0 k!

Să calculăm valoarea exp (x) folosind aproximarea dată de suma primilor
n termeni ai seriei precedente. Dar să facem verificarea: dacă noul termen
adunat la sumă este mai mic decât 0.0001 sau dacă numărul de termeni de-
păs, es, te 40, atunci nu mai adăgăm nici un termen nou la suma termenilor.
Este convenabil să scriem instruct, iunile într-un fis, ier de tip script s, i apoi să
îl executăm:
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
82 5. Programare în MATLAB

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


Structura comenzii switch-case este, în linii mari, următoarea:

··· 


··· Program MATLAB


···

switch expresie de tip switch


case 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


···

5.5. Structuri switch-case 83

O structură de tip switch-case este o altă metodă de a controla des-


făs, urarea unui program. Această structură furnizează mai multe variante
de grupe de comenzi pe care programul să le execute în funct, ie de expresia
de tip switch introdusă de noi. Expresia de tip switch poate fi un scalar sau
un s, ir de caractere (de obicei este o variabilă care este asociată unui scalar
sau unor caractere).
Apoi se verifică dacă valoarea variabilei din expresia de tip switch este
într-unul dintre cazurile enumerate în program: dacă se potrives, te cu va-
loarea din cazul 1, se execută grupul 1 de comenzi s, i programul se termină;
dacă nu este în cazul 1, se studiază dacă se potrives, te cu valoarea din cazul
2; s, .a.m.d. până se ajunge, eventual, la otherwise
Să precizăm că expresia dintr-un caz poate cont, ine mai multe variante.
Grupul din cazul respectiv este executat dacă cel put, in una dintre valori se
potrives, te cu expresia de tip switch.

Exemplul 5.26 Vom scrie un program care să convertească centimetrii in-
trodus, i de noi într-o altă unitate de măsură indicată de noi. Ment, ionăm că
unitatea de măsură trebuie introdusă de noi (fiind un s, ir de caractere) între
două semne ’
Este convenabil să scriem instruct, iunile într-un fis, ier de tip script numit,
de exemplu, switch_ex1.m s, i apoi să îl executăm:
x = input(’Introduceti valoarea, in centimetri,
pe care doriti sa o transformati = ’);
unit = input(’Introduceti unitatea de masura
in care doriti sa transformam
valoarea introdusa;\nvariantele sunt:
inch (in), feet (ft), metri (m),
milimetri (mm), centimetri (cm) = ’);
switch unit
case{’inch’,’in’}
y = x / 2.54
case{’feet’,’ft’}
y = x / 2.54 / 12
case{’metri’,’m’}
y = x / 100
case{’milimetri’,’mm’}
y = x * 10
case{’centimetri’,’cm’}
y = x
84 5. Programare în MATLAB

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

Exemplul 5.27 Vom scrie un program care să calculeze norma13 , introdusă
de noi, a unui vector introdus de noi. Este convenabil să scriem instruct, iu-
nile într-un fis, ier de tip script numit, de exemplu, switch_ex2.m s, i apoi să îl
executăm:
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 1
disp(’Norma 1 este = ’)
y = norm(v,1)
case 2
disp(’Norma 2 este = ’)
y = norm(v,2)
case inf
disp(’Norma Inf este = ’)
y = norm(v,inf)
case -inf
disp(’Norma -Inf este = ’)
y = norm(v,-inf)
otherwise
disp(’Norma nu poate fi calculata in raport
cu p-ul introdus ’)
y = nan
end 

13
Comanda norm(A,p) calculează norma matricei sau vectorului A în raport cu indicele
normei p care poate fi 1, 2, ∞ sau −∞, i.e. norm(A,p)=sum(abs(A)^p)^(1/p). Pen-
tru detalii (definit, ii, sintaxă, exemple etc.) utilizează comanda doc norm în Command
Window.
Capitolul 6

Polinoame

MATLAB furnizează o serie de funct, ii ce operează asupra polinoamelor


(determinarea derivatelor, a integralelor sau găsirea rădăcinilor).
Valoarea unui polinom într-un punct este dată de

polyval(p,x)

unde p este vectorul (linie) cu tot, i coeficient, ii polinomului avut în vedere


(coeficient, ii nuli trebuie, de asemenea, trecut, i în p ) iar x este valoarea în
care se dores, te calculul polinomului.

Exemplul 6.1 Să reprezentăm grafic funct, ia polinomială

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 dacă dorim graficul scriem:
>> x = -1.5:0.1:6.7;
>> y = polyval(p1,x);
>> plot(x,y) 

85
86 6. Polinoame

Dacă dorim să determinăm rădăcinile unui polinom folosim comanda


roots(p)
unde p este vectorul cu coeficient, ii polinomului avut în vedere.
Ment, ionăm că polinomul trebuie introdus ca un vector linie iar rădăci-
nile sunt afis, ate ca un vector coloană.

Exemplul 6.2 Să determinăm rădăcinile 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

Dacă dorim să determinăm polinomul care are nis, te rădăcini date fo-
losim comanda
poly(r2)
unde r2 este vectorul (coloană) al rădăcinilor.

Exemplul 6.3 Să determinăm polinomul care are rădăcinile date de vec-
torul r2 din exemplul precedent:
>> pol2 = poly(r2)
va afis, a
pol2 =
1.00 -3.00 1.00 0.00 43.00 

Dacă dorim să determinăm produsul a două polinoame folosim co-


manda
conv(p,q)
unde p,q sunt vectorii cu coeficient, ii celor două polinoame.
87

Exemplul 6.4 Să determinăm produsul a două polinoame:


>> p3 = [2 1 -3 1]; p4 = [1 -4 3 23];
>> u = conv(p3,p4)
Obt, inem
u =
2 -7 -1 62 10 -66 23 

Dacă dorim să determinăm câtul s, i restul împărt, irii a două polinoame
folosim comanda
deconv(p,q)
unde p,q sunt vectorii cu coeficient, ii celor două polinoame.

Exemplul 6.5 Să determinăm câtul s, i restul împărt, irii a două polinoame
(folosim 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 două polinoame se face utilizând suma


s, i respectiv scăderea a doi celor doi vectori linie dat, i de coeficient, i. Dacă
gradele polinoamelor sunt diferite, atunci trebuie adăugat 0 corespunzător
la coeficient, ii polinomului cu gradul mai mic.
Dacă dorim să determinăm derivata s, i primitiva unui polinom folosim
comanda
polyder(p)
s, i respectiv
polyint(p,C)
unde p este vectorul cu coeficient, ii polinomului iar C este constanta care va
apare ca termen liber al primitivei; dacă se scrie doar polyint(p), atunci
se consideră că C este luat 0.

Exemplul 6.6 >> v = polyder(p3)


>> w = polyint(v,1)
88 6. Polinoame

Obt, inem
v =
6 2 -3
w =
2 1 -3 1 
Capitolul 7

Rezolvarea numerică a unor


probleme

Metodele numerice sunt des utilizate în rezolvarea unor probleme ma-


tematice atunci când este dificil (sau imposibil) de determinat solut, ia ex-
actă. În această sect, iune vom prezenta câteva dintre funct, iile des utilizate
în rezolvarea următoarelor probleme: rezolvarea ecuat, iilor cu o necunos-
cută, determinarea minimului s, i maximului unei funct, ii, integrarea numer-
ică s, i rezolvarea unor ecuat, ii diferent, iale.

7.1 Rezolvarea ecuaţiilor


Ne interesează determinarea punctelor în care o funct, ie scalară de o
variabilă reală ia o valoare anume. De exemplu, dacă dorim să aflăm x ast-
fel încât f (x) = y, atunci, în caz că există inversa, valoarea x este dată de
x := f −1 (y) . Dar dacă inversa nu există, atunci, MATLAB trebuie să es-
timeze, printr-o procedură iterativă, valoarea x pentru care g (x) := f (x) −
y = 0 (de aceea procedura iterativă se numes, te zero finding).
În MATLAB zero-urile reale ale unei funct, ii pot fi determinate cu aju-
torul comenzii
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 introdusă în


mai multe moduri (as, a cum este descris în Capitolul 4): utilizând un

89
90 7. Rezolvarea numerică a unor probleme

fis, ier de tip M, o funct, ie de tip inline, o funct, ie de tip anonymous, un


function handle sau combinat, ii de acestea;

• x0 poate fi scalar sau un vector cu două elemente; dacă e scalar, atunci


x0 este valoarea în jurul căreia MATLAB caută un zero al funct, iei
date; dacă e un vector cu două elemente, atunci x0 reprezintă capetele
unui interval în care funct, ia dată trebuie să îs, i schimbe semnul.

Exemplul 7.1 Să determinăm zero-urile funct, iei:

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

Să 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;
Să studiem în ce valori f îs, i schimbă semnul. Pentru aceasta, mai întâi,
să schit, ăm graficul lui f :
>> x = -7:0.1:7;
>> y = x.^3-x.^2-3.*atan(x)+1;
>> plot(x,y)
Apoi determinăm nis, te valori particulare în care funct, ia îs, i schimbă
semnul; găsim f (−2) < 0, f (−1) > 0 apoi f (0) > 0, f (1) < 0 apoi
f (1) < 0, f (2) > 0, adică sunt trei zero-uri în intervalele [−2, −1] , [0, 1]
s, i respectiv [1, 2] . Zero-urile se 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 găsit). 
7.1. Rezolvarea ecuaţiilor 91

Exemplul 7.2 Acelas, i rezultat se obt, ine dacă apelăm 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 dacă apelăm astfel funct, ia f (folo-
sim un function handle):

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


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

Exemplul 7.4 Acelas, i rezultat se obt, ine dacă definim funct, ia f ca fiind de
tip inline:

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

s, i apoi o apelăm

>> 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 dacă definim funct, ia f ca fiind de
tip anonymous (folosim un function handle):

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

s, i apoi o apelăm

>> 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 dacă definim funct, ia f ca fiind de
tip anonymous (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]) 
92 7. Rezolvarea numerică a unor probleme

7.2 Determinarea minimului şi maximului


Ne interesează determinarea valorilor extreme ale unei funct, ii adică a
punctelor de minim s, i maxim ale unei funct, ii scalare de o variabilă reală.
Aceste valori extreme (în care funct, ia îs, i atinge minimul sau maximul)
sunt s, i ele estimate prin proceduri iterative. Având în vederă că maximul
funct, iei este minimul funct, iei opuse (i.e. punctul de maxim local x0 este
dat de −f (x0 ) = min {−f (x)} iar valoarea maximă este dată de f (x0 ) ),
este suficient să ne referim la procedurile de minimizare.
În MATLAB punctele de minim local ale unei funct, ii pot fi determinate
cu ajutorul comenzii

x = fminbnd(functie,x1,x2)

unde:

• x este un scalar care va fi solut, ia problemei; există s, i varianta de co-


mandă:

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

unde fval este valoarea funct, iei în punctul x de minim local găsit;

• functie este funct, ia la care ne referim; aceasta poate fi introdusă în


mai multe moduri (la fel ca în cazul comenzii fzero);

• x1,x2 sunt capetele intervalului unde se caută minimul.

Evident, pentru găsirea punctelor de maxim local definim, mai întâi,


funct, ia functie2 = opusul funct, iei date s, i apoi scriem

x = fminbnd(functie2,x1,x2)

Exemplul 7.7 Să determinăm punctele de minim s, i maxim local ale funct, i-
ei:
f (x) = x3 − 12x2 + 40.25x − 36.5 .
Mai întâi să schit, ăm 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 determina
punctele de minim local din intervalul [3, 8] scriem:
7.3. Integrarea numerică 93

>> [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 numerică


Ne interesează calculul integralelor definite din funct, ii scalare de o vari-
abilă reală. Aceste integrale pot fi determinate analitic, dar, având în vedere
că foarte multe funct, ii (mai ales cele din exemplele reale) nu pot fi (sau este
dificil) integrate analitic (de exemplu, funct, iile sunt date doar ca o mult, ime
de date/puncte), este util să avem metode numerice de calcul a integralelor.
În MATLAB integrala definită poate fi calculată cu ajutorul comenzilor:
quad14 (care utilizează metoda Simpson de integrare numerică), quadl15
(care utilizează metoda Lobatto de integrare numerică) s, i trapz (care uti-
lizează metoda trapezelor de integrare numerică; este utilizată, mai ales,
14
De la cuvântul din limba engleză quadrature.
15
Ultima literă este L de la Lobatto.
94 7. Rezolvarea numerică a unor probleme

pentru funct, ii care 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 integrăm; aceasta poate fi introdusă


în mai multe moduri (la fel ca în cazul comenzii fzero);

• a,b sunt limitele de integrare; funct, ia f nu trebuie să aibă puncte


singulare în intervalul [a, b] , adică să nu aibă asimptote verticale în
puncte din [a, b] ;

• tol este un argument opt, ional care indică eroarea cu care se dores, te
să se obt, ină rezultatul (valoarea implicită este 1.0e-6, adică 10−6 );

• x,y sunt vectori de aceeas, i dimensiune reprezentând coordonatele


unor puncte (sunt punctele (x, y) cu y = f (x) , unde f este funct, ia de
integrat).

Integrala dublă se calculează utilizând comanda dblquad

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

unde:

• functie este funct, ia f (x, y) pe care o integrăm;

• 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 indică eroarea cu care se dores, te
să se obt, ină rezultatul (valoarea implicită este 1.0e-6, adică 10−6 );

• method este metoda de calcul (variantele sunt quad (metoda impli-


cită), quadl).

Integrala triplă se calculează utilizând comanda triplequad


7.3. Integrarea numerică 95
Z 8
0.8
x e−x

Exemplul 7.8 Să calculăm integrala + 0.2 dx.
0
Mai întâi să schit, ăm graficul lui f pentru a avea o imagine asupra func-
t, iei (funct, ia f nu trebuie să aibă 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 multe
feluri. De exemplu:
>> int1 = quad(’x.*exp(-x.^0.8)+0.2’,0,8)
sau (dacă definim funct, ia de tip anonymous)
>> fct_int1 = @(x) x.*exp(-x.^0.8)+0.2;
>> int2 = quad(@fct_int,0,8)
sau (dacă funct, ia este deja definită într-un fis, ier separat fct_int2.m)
>> int3 = quad(@fct_int2,0,8) 
Z π
Exemplul 7.9 Să calculăm, prin metoda trapezelor, integrala sin (x) dx.
0
>> x = linspace(0,pi,100);
>> y = sin(x);
>> int4 = trapz(x,y) 
ZZ
1−6x2 y dxdy, unde D =

Exemplul 7.10 Să calculăm integrala dublă
D
[−1, 1] × [0, 2] :
>> int5 = dblquad(’1-6*x.^2*y’,-1,1,0,2) 
ZZ
1−6x2 y dxdy, unde D =

Exemplul 7.11 Să calculăm integrala dublă
D
{(x, y) : x ∈ [0, 1] , y ∈ [x, 1]} .
Observăm că limitele de integrare nu mai sunt constante. Pentru a
putea folosi comanda dblquad observăm că putem scrie
ZZ ZZ
f (x, y) dxdy = f (x, y) 1{y≥x} dxdy.
[0,1]×[x,1] [0,1]×[0,1]

Notat, ia 1{y≥x} reprezintă funct, ia indicatoare a mult, imii {y ≥ x} , adică



 1, dacă y ≥ x
1{y≥x} =
 0, în rest.
96 7. Rezolvarea numerică a unor probleme

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


7.4 Algebră liniară


As, a cum am văzut deja (vezi pagina 38 si nota de subsol 9), sistemele
de ecuat, ii liniare se rezolvă scriind sistemul sub forma matriceală

A X = b,

unde A este matricea sistemului, X este matricea coloană a necunoscutelor


iar b este matricea coloană a termenilor liberi.
Solut, ia va fi obt, inută scriind

X = A\b

O altă metodă de rezolvare este folosind comanda

rref

aplicată matricei extinse asociate unui sistem liniar. Această metodă constă
în rezolvarea sistemului folosind metoda de eliminare a lui Gauss prin care
matricea este redusă la forma triunghiulară.
Mai întâi scriem matrice extinsă obt, inută prin concatenarea celor două ma-
trice:
>> Aext = [A b];
Scriem comanda
>> sol = rref(Aext)
Rezultatul sol este o matrice de forma

sol = [C d]

unde C este o matrice superior triunghiulară obt, inută prin metoda lui Ga-
uss iar C s, i d sunt astfel încât vectorul solut, ie X verifică

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:
7.4. Algebră liniară 97

• dacă matricea triunghiulară C este chiar matricea unitate (s, i este ma-
trice pătratică), atunci sistemul este compatibil determinat iar solut, ia
sistemului este dată chiar de coloana d

• dacă matricea triunghiulară C are ultima linie formată doar din zero-
uri iar matricea sol are s, i ea ultima linie formată din zero-uri16 , atunci
sistemul este compatibil nedeterminat iar solut, ia sistemului este dată
de rezolvarea sistemului C*X = d

• dacă matricea triunghiulară C are ultima linie formată din zero-uri


dar matricea sol nu are ultima linie formată din zero-uri17 , atunci
sistemul este incompatibil.
 
5 −3 2
 
Exemplul 7.12 Să rezolvăm sistemul cu matricele A =  −3 8 4 
 
 
2 4 −9
h it
s, i b = 10 20 9 :

Metoda 1:
>> A = [5 -3 2 ; -3 8 4 ; 2 4 -9]; b = [10 ; 20 ; 9];
>> X1 = A\b
>> proba1 = A*X1
 
3.4441
 
s, i obt, inem X1 =  3.1981  .
 
 
1.1867
Metoda 2:
scriem matrice extinsă obt, inută prin concatenarea celor două matrice:
>> Aext = [A b];
 
−3
 
1 0 −3 1 0 3.4
 
16
 
De exemplu, C = 
 0 1 −2  s i sol =  0 1 −2 3.1  .
 
 ,
 
0 0 0 0 0 0 0
 
−3
 
1 0 −3 1 0 3.4
 
17
 
De exemplu, C =  0 1  s, i sol = 
−2  0 1 −2 3.1  .
  
 
0 0 0 0 0 0 1.1
98 7. Rezolvarea numerică a unor probleme

Solut, ia este dată de

>> sol = rref(Aext)

Rezultatul sol este o matrice cu trei linii s, i patru coloane, adică de


forma

sol = [C d]

 
1 0 0 3.4441
 
În cazul nostru, obt, inem sol =  0 1 0 3.1981 
 
 
0 0 1 1.1867


Valorile s, i vectorii proprii asociat, i unei matrice sunt dat, i de comanda


eig care, aplicată unei matrice, va returna matricea cu vectorii proprii,
scris, i pe coloană, s, i o matrice diagonală cu valorile proprii pe diagonală.
Mai precis, scriem

[Vect , Val] = eig(A)

unde:

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


coloană, returnată de eig

• Val este numele dat de noi matricei diagonală cu valorile proprii pe


diagonală, returnată de eig

• A este matricea introdusă de noi.

MATLAB furnizează s, i funct, ii pentru descompunerea s, i factorizarea


7.4. Algebră liniară 99

matricelor:

Comanda Semnificat, ia
MATLAB
factorizarea LU (lower-upper)
MATLAB returnează
[L,U] = lu(A) matricea inferior triunghiulară L
matricea superior triunghiulară U
astfel încât L*U = A
factorizarea QR (ortogonal-triunghiulară)
MATLAB returnează
[Q,R] = qr(A) matricea ortogonală18 Q
matricea superior triunghiulară R
astfel încât Q*R = A
factorizarea Cholesky
R = chol(A) MATLAB returnează
matricea superior triunghiulară R
astfel încât R’*R = A
factorizarea SVD (singular value decomposition)
MATLAB returnează
[U,D,V] = svd(A) matricea ortogonală U (de tip m × m)
matricea ortogonală V (de tip n × n)
matricea diagonală D (de tip m × n)
astfel încât U*D*V’ = A (de tip m × n)

18
Spunem că matricea Q este ortogonală dacă este matrice pătratică s, i are liniile (s, i
respectiv coloanele) vectori unitate s, i ortogonali între ei, adică

Qt Q = Q Q t = I

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


7.5 Ecuaţii diferenţiale
Doar un număr limitat de ecuat, ii diferent, iale pot fi rezolvate analitic.
În schimb există diverse metode numerice care pot rezolva multe tipuri de
ecuat, ii diferent, iale.
În cadrul acestei sect, iuni vom prezenta comenzile de rezolvare a urmă-
toarei ecuat, ii diferent, iale de ordinul 1

 x0 (t) = f (t, x) , t ∈ [t0 , T ]
 x (t ) = x .
0 0

O solut, ie înseamnă o funct, ie x = x (t) astfel încât x0 (t) = f (t, x (t)) ,


pentru orice t ∈ [t0 , T ] . În general sunt mai multe funct, ii care satisfac
această ecuat, ie. Pentru determinarea unei singure funct, ii trebuie să folosim
s, i condit, ia init, ială x (t0 ) = x0 .
Ment, ionăm că funct, ia f poate fi vectorială (deci avem un sistem de
ecuat, ii diferent, iale de ordinul întâi).
MATLAB furnizează următoarele comenzi de rezolvarea a ecuat, ii dife-
rent, iale de ordinul 1:

Comanda Semnificat, ia
MATLAB
pentru probleme nonstiff
ode45 rezolvare într-un singur pas
se foloses, te ca primă încercare
este bazată pe metoda explicită Runge-Kutta
pentru probleme nonstiff
ode23 rezolvare într-un singur pas
este bazată pe metoda explicită Runge-Kutta
mai rapidă dar mai put, in precisă ca ode45

ode113 pentru probleme nonstiff


rezolvare în mai mult, i pas, i
pentru probleme stiff
ode15s rezolvare în mai mult, i pas, i
se foloses, te dacă ode45 es, uează
pentru probleme stiff
ode23s rezolvare într-un singur pas
poate rezolva probleme pe care ode15s nu poate
7.5. Ecuaţii diferenţiale 101

Structura comenzii ode45 este următoarea:

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

unde:

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

• interval este intervalul pe care vom obt, ine solut, ia; acesta cont, ine
cel put, in două puncte: dacă are două elemente, este de tipul [t0,T]
unde t0 este punctul init, ial s, i T este punctul final al domeniului
solut, iei s, i se vor afis, a valorile solut, iei x (t) în valori din intervalul
[t0,T] considerate de MATLAB; dacă are mai multe elemente (pu-
tem lua, de exemplu, interval=[t0:h:T] ), atunci se vor afis, a va-
lorile funct, iei în valorile indicate de noi;

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

• t este vectorul coloană cu toate punctele în care s-a aproximat solut, ia


de către MATLAB (primul s, i ultimul sunt respectiv t0 s, i T);

• y este vectorul coloană cu toate valoarea solut, iei x (t) în punctele vec-
torului t în care s-a aproximat solut, ia de către MATLAB (primul s, i
ultimul sunt respectiv t0 s, i T);

Exemplul 7.13 Să se rezolve ecuat, ia diferent, ială de ordinul întâi:


 3
 x0 (t) = t − 2x , t ∈ [1, 3]

t

 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)
Dacă dorim valoarea solut, iei în câteva valori, indicate de noi, atunci
scriem
>> [t , y] = ode45(@fct1_ODE,[1:0.5:3],4.2)
102 7. Rezolvarea numerică a unor probleme

Dacă dorim graficul solut, iei x (t) , atunci luăm mai multe valori în in-
tervalul [1, 3] :
>> [t , y] = ode45(@fct1_ODE,[1:0.01:3],4.2);
>> plot(t,y)
Dacă dorim să comparăm 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 

În cazul în care dorim să rezolvăm un sistem de ecuat, ii diferent, iale de


ordinul 1 introducem funct, ia vectorială f.
În cazul în care dorim să rezolvăm o ecuat, ie diferent, ială de ordin su-
perior, o putem reduce la un sistem de ecuat, ii diferent, iale de ordinul 1 s, i
reducem problema la cazul de mai sus. Tehnica este prezentată în urmă-
torul exemplu concret.

Exemplul 7.14 Să se rezolve ecuat, ia diferent, ială de ordinul al doilea (ecu-
at, ia care descrie mis, carea pendulului neliniar):

 θ̈ + ω 2 sin (θ) = 0 , t ≥ 0
 θ (0) = 1, θ̇ (0) = 0 .

Mai întâi, transformăm ecuat, ia de ordin superior într-un sistem de ecuat, ii


de ordinul întâi.
not not
Tehnica este standard: Să notăm x1 == θ s, i x2 == θ̇ s, i obt, inem sistemul
de două ecuat, ii de ordinul 1:

0
 x1 (t) = x2 (t) ,



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



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

adică ecuat, ia de ordinul 1:

x0 (t) = f (t, x) ,
7.5. Ecuaţii diferenţiale 103

unde
def
x == [x1 , x2 ]t
def  t
f (t, x) = f (t, x1 , x2 ) == x2 , −ω 2 sin (x1 )
def
x (0) = x0 == [1, 0]t .

Definim într-un fis, ier fct2_ODE.m funct, ia vectorială f (t, x) (luăm ω = 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 două coloane s, i mai multe
linii (date de dimensiunea vectorului t) iar solut, ia x1 a problemei init, iale
este prima coloana y(:,1)
Afis, ăm solut, ia
>> x1 = y(:,1) 
Capitolul 8

Reprezentări grafice

Reprezentările grafice (în diversele ei forme) sunt nis, te instrumente utile


în prezentarea informat, iilor. Acestea se pot seta din punctul de vedere al
tipului de linie folosit, al grosimii liniei, al culorii etc. Se poate adăuga un
titlu, comentarii, o legendă. De asemenea, mai multe grafice pot fi făcute în
acelas, i reper.

8.1 Grafica 2D
În MATLAB reprezentarea grafică în două dimensiuni poate fi realizată
cu comanda 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


o imagine cu punctele, din plan, de tipul (xi , yi ) unite printr-o linie
poligonală (aceasta figură se va deschide într-o fereastră suplimen-
tară) (deci x reprezintă vectorul cu toate abscisele punctelor reprezen-
tate iar y reprezintă vectorul cu toate ordonatele punctelor reprezen-
tate);

• setare_linie este un argument opt, ional dat de un s, ir de carac-


tere (scris între două apostrofuri) care poate fi utilizat pentru a speci-
fica anumite setări pentru tipul liniei, culoarea liniei s, i respectiv tipul
de marcaj al punctelor conform tabelelor următoare. Ordinea în care
sunt scrise comenzile legate de setări nu este importantă.

105
106 8. Reprezentări grafice

Stilul liniei:

Comanda MATLAB Semnificat, ia


- linie obis, nuită (stilul implicit)
-- linie întreruptă
: linie punctată
-. linie de tip linie-punct

Culoarea liniei:

Comanda Semnificat, ia Comanda Semnificat, ia


MATLAB MATLAB
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:

Comanda Semnificat, ia Comanda Semnificat, ia


MATLAB MATLAB

+ marcaj cu + s marcaj cu 
(square)

o marcaj cu ◦ d marcaj cu 3
(diamond)
marcaj cu stea cu
* marcaj cu ∗ p cinci colt, uri
(pentagram)
marcaj cu stea cu
x marcaj cu × h s, ase colt, uri
(hexagram)
^ marcaj cu 4 < marcaj cu C
v marcaj cu 5 > marcaj cu B
8.1. Grafica 2D 107

Să ment, ionăm că dacă se specifică tipul de marcare al punctelor dar
nu se specifică tipul liniei, atunci comanda plot va desena doar punc-
tele indicate (s, i fără linia poligonală care le unes, te);

• nume_setare este un argument opt, ional dat de un s, ir de caractere


(scris între două apostrofuri) care poate fi utilizat pentru a specifica
anumite setări pentru grosimea liniei, mărimea marcajului, culoarea
marginii marcajului s, i culoarea cu care se umple marcajul;

• valoare_setare este valoarea posibilă a setării indicate de argu-


mentul nume_setare conform tabelului următor:

Comanda Comanda
MATLAB Semnificat, ia MATLAB
(nume_setare) (valoare_setare)
LineWidth grosimea liniei număr de puncte
(sau linewidth) (implicit este 0.5)
MarkerSize mărimea număr de puncte
(sau markersize) marcajului
MarkerEdgeColor culoarea
culoarea conform
(sau marginii
tabelului precedent
markeredgecolor) marcajului
MarkerFaceColor culoarea
culoarea conform
(sau cu care se
tabelului precedent
markerfacecolor) umple marcajul

Exemplul 8.1 Comanda


>> plot(x,y,’r- -s’,’linewidth’,2,’markersize’,12,
’markeredgecolor’,’g’,’markerfacecolor’,’k’)
va crea o linie poligonală intreruptă (- -), de culoare ros, ie (r), cu grosimea
de 2, care unes, te punctele cu abscisele date de vectorul x iar ordonatele
date de vectorul y; punctele sunt marcate cu pătrate (s), de mărime 12, cu
marginea de culoare verde (g), cu interiorul de culoare neagră (k). 

Exemplul 8.2 Evident, pentru a crea graficul unei funct, ii y = f (x) putem
utiliza comanda plot
Astfel, comenzile:
>> x = -2:.01:4;
108 8. Reprezentări grafice

>> 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 să reprezentăm doar punctele indicate (fără linia po-
ligonală care le unes, te); vom specifica tipul de marcare al punctelor s, i nu
vom preciza nimic despre tipul liniei.
Astfel, comenzile:
>> x = -2:.1:4;
>> y = 3.5.^(-0.5*x).*cos(4*x);
>> plot(x,y,’g*’)
vor crea graficul tuturor punctelor/perechilor (x, y) date de comenzile de
mai sus, în culoarea verde (g) s, i indicate prin semnul *. 
Pentru reprezentarea grafică a unei funct, ii scalare avem la dispozit, ie s, i
comanda fplot care are structura

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

unde:

• functia este funct, ia al cărei grafic se dores, te a fi reprezentat (obt, i-


nem o curbă plană); aceasta poate fi introdusă ca un s, ir de caractere
(scrise între două apostrofuri) dar s, i prin celelalte metode cunoscute
(de exemplu, utilizând un function handle);

• limite este un argument care specifică domeniul pentru x (dacă


scriem [xmin,xmax] ) sau domeniul pentru x s, i pentru y (dacă scri-
em sub forma [xmin,xmax,ymin,ymax] );

• setare_linie este un argument opt, ional s, i este acelas, i ca în cazul


comenzii 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])
8.1. Grafica 2D 109

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. 

Dacă dorim reprezentarea mai multor grafice în cadrul aceluias, i reper,


atunci avem două posibilităt, i.
O variantă ar fi să scriem în cadrul unei singure comenzi plot toate
graficele dorite. Astfel comanda

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

va reprezenta trei grafice (unul dat de vectorii x,y, altul dat de vectorii
t,u iar al treilea dat de vectorii v,w) în acelas, i reper.
Evident, după fiecare pereche reprezentată se pot adăuga s, i setări legate
de tipul liniei s, i tipul marcajului.

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 întreruptă, de
culoare ros, ie) s, i cos (cu o linie punctată, de culoare albastră). 

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 împreună
cu graficul derivatelor f 0 s, i f 00 . 
Altă variantă ar fi să scriem comenzile hold on s, i hold off. Astfel,
scriem o primă comandă plot s, i un prim grafic este generat; apoi scriem
hold on s, i prima figură este păstrată deschisă s, i orice comandă plot ulte-
rioară adaugă noile grafice celui deschis de primul plot. Comanda hold
off opres, te acest proces.

Exemplul 8.8 Comenzile


>> x = -4:.01:4; y = 3*x.^3-26*x+10;
110 8. Reprezentări grafice

>> 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 trei grafice în acelas, i reper (vezi s, i Exemplul 8.7). 

Dacă dorim reprezentarea mai multor grafice în cadrul aceleas, i figuri


dar separat (fiecare grafic cu reperul lui), atunci avem la dispozit, ie co-
manda
subplot(m,n,p)
unde m,n reprezintă împărt, irea ferestrei (cu figura obt, inută de noi) în m×n
subfiguri iar p reprezintă pozit, ia în care dorim să amplasăm graficul nostru
(numerotarea se face pe linie). De exemplu, subplot(3,2,4) va împărt, i
figura în 3 × 2 = 6 zone s, i va afis, a graficul în a 4-a pozit, ie, adică elementul
de pe linia 2 s, i coloana 2.

Exemplul 8.9 Comenzile


>> subplot(3,2,1);
>> fplot(@(x) sin(x),[-pi,2*pi])
>> 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 fereastră cu 3 × 2 = 6 regiuni în care se vor amplasa patru
repere (ultimul reper ocupă două locuri: pozit, iile 5 s, i 6). 

Dacă avem mai multe comenzi plot, atunci, în urma primei aparit, iei
a comenzii plot, se deschide o fereastră cu imaginea comandată; apoi ur-
mătoarea comandă plot va înlocui graficul existent, în aceeas, i fereastră,
cu noul grafic, s, .a.m.d.
Pentru a avea câte o fereastră pentru fiecare imagine obt, inută este util
să folosim, înainte de fiecare grafic obt, inut, comanda

figure
8.1. Grafica 2D 111

(numerotarea va fi automată).
Dacă dorim atribuirea unui anume număr pentru o imagine obt, inută
putem să folosim comanda

figure(n)

unde n este numărul dat de noi figurii respective.


Dacă dorim un nume personalizat al figurii (pe lângă numărul care
apare automat) putem scrie

figure(’Name’,’nume_figura’)

unde nume_figura este numele care va apare în dreptul numărului figurii


generate de noi.
Pentru a vizualiza o fereastră anume scriem în Command Window co-
manda
figure(n)
unde n este numărul figurii pe care dorim să o vedem.

Pentru a închide o fereastră cu o imagine scriem în Command Window


comanda
close
care închide fereastra curentă cu imaginea generată de noi sau comanda

close(n)

care închide fereastra numărul n sau comanda

close all

care închide toate ferestrele cu imagini.

După ce scriem comenzile plot s, i fplot sunt permise s, i anumite ele-


mente de personalizare a figurilor obt, inute.
Comanda
axis([xmin,xmax,ymin,ymax])
va seta limitele de afis, are ale reperului.
Comanda
axis equal
112 8. Reprezentări grafice

setează faptul că ambele axe vor avea aceas, i scală, iar comanda

axis square

setează faptul că regiunea va fi pătrată.


Comanda
xlabel(’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.


Comanda
title(’text_titlu’)
va afis, a un titlu al graficului cu textul text_titlu.
Comanda
text(x,y,’text_comentariu’)
va afis, a textul text_comentariu cu primul caracter plasat în punctul de
coordonate (x, y).
Comanda

legend(’text_1’,’text_2’,pos)

va afis, a o căsut, ă cu o explicat, ie de tip „legendă”, în pozit, ia dată de opt, iunea


pos (variantele sunt19 -1,0,1,2,3,4) cu textul text_i corespunzător fi-
ecărui grafic în parte.
Comanda
grid
va afis, a s, i o grilă de linii orizontale s, i verticale desenate în cadrul reperului.
Ment, ionăm că textele din comenzile precedente pot fi s, i ele formatate.

Exemplul 8.10 Comenzile


>> figure(’Name’,’Graficul a doua functii’)
>> t = linspace(0,4*pi,200);
19
Varianta 1 este cea implicită s, i înseamnă că legenda va fi pozit, ionată în colţul din
dreapta sus
8.1. Grafica 2D 113

>> x = sin(t); y = cos(t);


>> plot(t,x,’r- -’)
>> hold on
>> plot(t,y,’b:’)
>> grid
>> axis([-pi 6*pi -2 2])
>> title(’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 fereastră deschisă s, i în acelas, i reper, graficul a două
funct, ii: sin (linie întreruptă, colorată în ros, u) s, i cos (linie punctată, colorată
în albastru). Fereastra deschisă cu graficul nostru are numele „Figure
1: Graficul a doua functii”s, i titlul „Evolutia in timp”; axa
Ox este de la −π la 6π s, i are numele „Axa Ot (axa timpului)” iar axa
Oy este de la −2 la 2 s, i are numele „Axa Ox (axa valorilor)”; de
asemenea, apare s, i grila de linii orizontale s, i verticale precum s, i un text tip
„legendă” în colt, ul din dreapta sus (modul implicit) în care am explicat ce
înseamnă fiecare curbă. 

Pentru reprezentarea grafică a unei curbe date implicit avem la dispo-


zit, ie comanda ezplot (vezi pagina 58) precum s, i comanda20 fimplicit
care are structura

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

unde:

• functia este funct, ia implicită (dată de ecuat, ia F (x, y) = 0) al cărei


grafic se dores, te a fi reprezentat; aceasta poate fi introdusă ca un s, ir
de caractere (scrise între două apostrofuri) dar s, i prin celelalte metode
cunoscute (de exemplu, utilizând un function handle);

• limite este un argument care specifică domeniul pentru x (dacă


scriem [xmin,xmax] ) sau domeniul pentru x s, i pentru y (dacă scri-
em sub forma [xmin,xmax,ymin,ymax] );

• setare_linie este un argument opt, ional s, i este acelas, i ca în cazul


comenzii plot
20
Această comandă a fost introdusă începând cu versiunea R2016b a MATLAB-ului.
114 8. Reprezentări grafice

Exemplul 8.11 Comenzile


>> f1 = @(x,y) x.^2 + y.^2 - 1;
>> fimplicit(f1,’g:’)
>> hold on
>> fimplicit(@(x,y) x.^2 - y.^2 - 2)
>> hold off
vor crea graficul a două elipse date sub formă implicită. 

Pentru reprezentarea grafică a unei curbe date în coordonate polare


avem la 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


dată de ρ = f (θ) , unde θ ∈ [a, b] ;

• setare_linie este un argument opt, ional s, i este acelas, i ca în cazul


comenzii 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, dată de ecuat, ia (scrisă în coordo-
nate polare) ρ = a + bθ, cu θ ∈ [0, 6π] . Fereastra deschisă cu graficul nostru
va avea numele „Figure 1: O curba in coordonate polare” s, i
va avea titlul „Spirala lui Arhimede”. 

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

• semilogy(x,y) axa Oy este scalată logaritmic (în baza 10) iar axa
Ox este liniară;
8.2. Grafica 3D 115

• semilogx(x,y) axa Ox este scalată logaritmic (în baza 10) iar axa
Oy este liniară;

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

• errorbar(x,y,e) afis, ează s, i bare cu erorile, date de vectorul e,


în fiecare punct;

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

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

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

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

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

• hist(y) graficul este sub formă de histogramă.

8.2 Grafica 3D
În MATLAB reprezentarea grafică a unei curbe în spat, iu poate fi real-
izată cu comanda 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


crea o imagine cu punctele, din spat, iu, de tipul (xi , yi , zi ) unite prin-
tr-o linie poligonală (aceasta figură se va deschide într-o fereastră su-
plimentară);

• setare_linie este un argument opt, ional cu aceas, i semnificat, ie ca


în cazul comenzii plot

• nume_setare este un argument opt, ional cu aceas, i semnificat, ie ca în


cazul comenzii plot

• valoare_setare este valoarea posibilă a setării indicate de argu-


mentul nume_setare (cu aceas, i semnificat, ie ca în cazul comenzii
plot).
116 8. Reprezentări grafice

Funct, ionează s, i celelalte setări s, i opt, iuni din cazul 2D: de exemplu,
comenzile figure, hold on, subplot, axis, xlabel, grid, close

Exemplul 8.13 Evident, dacă o curbă este dată de ecuat, iile parametrice

 x = x (t) ,


y = y (t) ,


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

atunci graficul ei se poate realiza cu comanda plot3


Astfel, comenzile:
>> t = 0:.01:6*pi;
>> x = sqrt(t).*sin(2*t);
>> y = sqrt(t).*cos(2*t);
>> z = 0.5*t;
>> figure(’Name’,’Graficul unei spirale in spatiu’)
>> plot3(x,y,z,’m’,’linewidth’,1)
>> grid
>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)
 √

 x (t) = t sin (2t) ,
 √
vor crea graficul curbei y (t) = t cos (2t) , în culoarea pur-


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

puriu (m), cu o linie de grosime 1, cu o grilă de linii s, i cu axele marcate cu
nis, te texte. 

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 altei spirale in spatiu’)
>> plot3(x,y,z,’b’)
>> grid
>> xlabel(’Axa Ox’); ylabel(’Axa Oy’);
zlabel(’Axa Oz’)
8.2. Grafica 3D 117


2

 x (t) = 1 + t  sin (20t) ,


vor crea graficul curbei y (t) = 1 + t2 cos (20t) ,


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


Pentru reprezentarea grafică a unei curbe dată parametric avem la dis-
pozit, ie s, i comanda ezplot321 care are structura

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

unde:

• functiax, functiay, functiaz sunt ecuat, iile parametrice ale cur-


bei în spat, iu; aceasta poate fi introdusă ca un s, ir de caractere (scrise
între două apostrofuri) dar s, i prin celelalte metode cunoscute (de e-
xemplu, utilizând un function handle);

• [tmin,tmax] este un argument opt, ional ce indică intervalul de va-


riat, ie pentru parametrul curbei; domeniul implicit este [0, 2π] .

Exemplul 8.15 Comenzile:


>> figure(’Name’,’Graficul elicei’)
>> ezplot3(’cos(t)’,’sin(t)’,’t’,[0,8*pi])
>> grid
>> xlabel(’Axa Ox’); ylabel(’Axa Oy’); zlabel(’Axa Oz’)

 x (t) = cos (t) ,


vor crea graficul curbei y (t) = sin (t) ,


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


Pentru reprezentarea grafică a unei suprafet, e dată de ecuat, ia explicită
z = f (x, y) , unde (x, y) ∈ [a, b] × [c, d] (evident, este inclus s, i cazul unei
suprafet, e dată 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 constă în crearea unei ret, ele de puncte. În acest sens creăm,
mai întâi, vectorii

x = a:h1:b; y = c:h2:d;
21
Easy-to-use 3-D parametric curve plotter.
118 8. Reprezentări grafice

apoi, folosind vectorii de mai sus, se crează o ret, ea de puncte în plan X,Y
dată de comanda
[X,Y] = meshgrid(x,y)
Astfel vom obt, ine două matrice cont, inând coordonatele, abscisele s, i res-
pectiv ordonatele, unor puncte din plan care realizează o divizare a drep-
tunghiului [a, b] × [c, d] .
Apoi definim variabila Z conform funct, iei care dă 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 grafică a suprafet, ei se va obt, ine scriind una dintre
comenzile:
mesh(X,Y,Z) sau surf(X,Y,Z)

Exemplul 8.16 Dacă lucrăm cu (x, y) ∈ [−1, 3] × [1, 3] , atunci să luăm, de
exemplu, divizarea cu pasul 1
>> x = -1:3; y = 1:3;
s, i apoi să scriem
>> [X,Y] = meshgrid(x,y)
Vom obt, ine
X =
-1 0 1 2 3
-1 0 1 2 3
-1 0 1 2 3
s, i
Y =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
Aceste matrice reprezintă exact abscisele s, i respectiv ordonatele unor
puncte din plan care realizează o divizare a dreptunghiului [−1, 3] × [1, 3] ,
adică punctele (as, a cum arată ele în plan):
8.2. Grafica 3D 119

(−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’)
xy 2
vor crea graficul suprafet, ei z = , cu (x, y) ∈ [−1, 3] × [1, 4] .
x2 + y 2


Mai există s, i alte comenzi care produc grafice de suprafet, e (matricele


X,Y,Z au 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 formă de bare verticale; fie-
care element din Y reprezintă înălt, imea unei bare;

• pie3(X,explode) graficul este sub formă de disc în spat, iu.


120 8. Reprezentări grafice

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)
8.2. Grafica 3D 121

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

>> subplot(2,4,8)
>> surfl(X,Y,Z)
>> xlabel(’Axa Ox’); ylabel(’Axa Oy’);
zlabel(’Axa Oz’)
>> legend(’surfl’)
vor deschide o fereastră (figure) cu un nume dat de noi, cu 2 × 4 = 8 regiuni
în care se vor amplasa opt repere cu graficul (făcut cu diverse comenzi)
suprafet, ei dată de

2 2
z = 1.8−1.5 x +y sin(x) cos(0.5 y), cu (x, y) ∈ [−3, 3] × [−3, 3] .

Am adăugat s, i o legendă în care precizăm cu ce comandă este făcut graficul


s, i am etichetat s, i axele. 
Capitolul 9

Calcul simbolic22

Toate operat, iile făcute de MATLAB în capitolele precedente sunt nu-


merice. Dar multe aplicat, ii necesită operat, ii simbolice (sau calcul simbolic)
care sunt operat, ii matematice cu variabile simbolice (variabile cărora nu le
este specificată o valoare numerică anume, atunci când este efectuat calcu-
lul).
Rezultatul unei asemenea operat, ii este o expresie matematică în aceleas, i
variabile simbolice.
Calculul simbolic poate fi folosit doar dacă este instalat toolbox-ul Sym-
bolic Math. Operat, iile elementare s, i funct, iile pentru efectuarea operat, iilor
simbolice au aceeas, i sintaxă 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 sim-


bolice cu o valoare dată;

• rezolvarea unui sistem de ecuat, ii (nu neapărat liniare);

• limite de funct, ii;

• derivarea;

• integrarea;

• rezolvarea ecuat, iilor diferent, iale ordinare.

Punctul de plecare pentru operat, iile simbolice constă în definirea, în


prealabil, a obiectelor (sau variabilelor) simbolice. Acestea pot fi variabile
22
Acest capitol nu este pentru Examen !

123
124 9. Calcul simbolic

sau numere. Apoi variabilele simbolice declarate sunt utilizate pentru a


crea expresii simbolice ce vor fi, eventual, utilizate în operat, ii matematice
simbolice.

9.1 Obiectele simbolice şi expresiile simbolice


Un obiect simbolic poate fi o variabilă căreia nu i-am atribuit nici o val-
oare numerică sau un număr sau o expresie simbolică formată din alte vari-
abile simbolice sau numere.
Obiectele simbolice pot fi create utilizând comenzile sym s, i/sau syms
Astfel, comanda

nume_obiect = sym(’x’)

va crea o variabilă simbolică x cu numele nume_obiect (x este un s, ir de


caractere ce poate fi format exclusiv din una sau mai multe litere s, i/sau
una sau mai multe cifre, s, i fără spat, ii sau alte semne între ele).
Comanda
syms 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 simbolică este o expresie matematică formată din una sau


mai multe obiecte simbolice (create în prealabil). În acest sens se pot apela
operat, iile s, i funct, iile utilizate în cazul operat, iilor numerice.
9.1. Obiectele simbolice şi expresiile simbolice 125

Exemplul 9.2 Comenzile:


>> syms a b c x
>> f = a*x^2 + b*x + c
vor crea expresia simbolică f s, i va afis, a23
f =
a*x^2 + b*x + c
iar comanda:
>> f = sym(’a*x^2 + b*x + c’)
va crea expresia simbolică 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
2a 4a x 2·5
vor crea expresia simbolică g dată de + − 6x + + − 2.2 s, i va
3 5 3 3
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 urmă-


torul exemplu:

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)
23
Afişarea unei expresii simbolice va fi făcută întotdeauna fără indent.
126 9. Calcul simbolic

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]
iar comenzile
>> B = det(A), C = inv(A), D = A*C
vor afis, a determinantul, inversa matricei A s, i respectiv produsul matricelor
A cu C 

Pentru a găsi ce variabile simbolice cont, ine o anumită expresie simboli-


că avem la dispozit, ie comanda findsym care are structura:

findsym(S) sau findsym(S,n)

unde S este expresia simbolică iar n este numărul de variabile simbolice ce


se dores, 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)
9.2. Schimbarea formei unei expresii simbolice 127

va afis, a
ans =
x 

9.2 Schimbarea formei unei expresii simbolice


Comanda collect este utilizată pentru a grupa variabilele cu aceas, i
putere (s, i a le scrie în ordinea descrescătoare a puterilor), s, i are structura:
collect(S) sau collect(S,nume_var)
unde S este expresia simbolică iar nume_var este variabila avută în vedere
(în caz că S cont, ine mai multe variabile s, i se preferă gruparea după o
anume variabilă).

Exemplul 9.7 Comenzile:


>> syms x y;
>> S = (x-5+y)*(x-y^2-exp(x));
>> 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 utilizată pentru a dezvolta o expresie care cont, ine
produse de paranteze de termeni s, i/sau funct, ii trigonometrice, exponent, iale
sau logaritmice (utilizând formule algebrice), s, i are structura:
expand(S)
unde S este expresia simbolică.

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) 
128 9. Calcul simbolic

Comanda factor este utilizată pentru a scrie un polinom ca un produs


de polinoame de grad mai mic, s, i are structura:

factor(S)

unde S este expresia simbolică.

Exemplul 9.9 Comenzile:


>> syms x;
>> S = x^3 + 3*x^2 - x - 3;
>> T = factor(S)
vor afis, a
T =
[x + 3, x - 1, x + 1] 

Comanda simplify este utilizată pentru a simplifica forma unei ex-


presii simbolice (conform operat, iilor matematice ce apar în expresie), s, i are
structura:
simplify(S)
unde S este expresia 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 utilizată pentru a substitui o valoare numerică în
cadrul unei expresii simbolice, s, i are structura:

subs(S,{var1,var2},{val1,val2})
9.3. Calculul numeric al unei expresii simbolice 129

unde S este expresia simbolică, var1 s, i var2 sunt variabilele pe care vrem
să 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).
Dacă dorim înlocuirea unei singure variabile, atunci pot lipsi acoladele
din structura comenzii.
Dacă expresia S cont, ine o singură variabilă simbolică, atunci acea vari-
abilă poate să nu mai fie ment, ionată în structura comenzii, ci doar valoarea
cu care se dores, te a fi înlocuită.

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] 

Exemplul 9.12 Comenzile:


>> syms a x;
>> S = a*x^2 - 5*x + 1;
>> subs(S,x,1)
vor afis, a
ans =
a-4
130 9. Calcul simbolic

iar comanda

>> subs(S,a,1)

va afis, a

ans =
x^2 - 5*x + 1
iar comanda

>> subs(S,{a,x},{3,1})

va afis, a

ans =
-1 

9.4 Sume
k=j
X
Comanda symsum este utilizată pentru a calcula sume de tipul xk ,
k=i
s, i are structura:
symsum(xk,k,i,j)

unde xk este termenul general, k este variabila în raport cu care se cal-


culează suma (dacă xk cont, ine o singură variabilă simbolică, atunci acest
argument poate 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)
9.5. Rezolvarea ecuaţiilor algebrice 131

vor afis, a diverse sume de termeni. Vom obt, ine, bineînt, eles,
Xk=n n (n + 1) Xk=n n (n + 1) (2n + 1)
k= k2 =
k=1 2 k=1 6
Xk=n n2 (n + 1)2
k3 =
k=1 4
Xk=∞ 1 π2
=
k=1 k 2 6


9.5 Rezolvarea ecuaţiilor algebrice


Comanda solve este utilizată pentru a rezolva un sistem de ecuat, ii, s, i
are structura:

[sol1 sol2] = solve(eq1,eq2,var1,var2)

unde:

• eq1 = 0, eq2 = 0 reprezintă sistemul de ecuat, ii avut în vedere;


eq1 (sau eq2) poate fi numele unei expresii simbolice definite an-
terior sau o expresie ce este scrisă direct în comandă, sub formă de s, ir
de caractere;

• o ecuat, ie de tipul f (x) = g (x) poate s, i ea fi rezolvată scriind argu-


mentul ’f(x) = g(x)’, i.e. ca un s, ir de caractere (între două apos-
trofuri);

• var1 s, i var2 sunt variabilele în raport cu care se dores, te rezolvarea


ecuat, iilor (trebuie scrise în caz că sunt mai multe variabile simbolice);

• sol1 este solut, ia pentru var1 iar sol2 este solut, ia pentru var2 ;
dacă nu avem un sistem de ecuat, ii, atunci pot lipsi parantezele pă-
trate din structura comenzii.

• dacă ecuat, ia admite mai mult de o solut, ie, atunci solut, ia este o coloa-
nă cu solut, iile simbolice.

Exemplul 9.14 Comenzile:


>> syms x;
132 9. Calcul simbolic

>> f = 3*exp(x) - 5;
>> sol = solve(f)
vor afis, a
sol =
log(5/3)
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/2
pi/6
(5*pi)/6 
9.5. Rezolvarea ecuaţiilor algebrice 133

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 

Exemplul 9.17 Comenzile:


>> syms x y;
>> [solx soly] = solve(5*x-y-2,2*x+2*y-8)
vor afis, a
solx =
1
soly =
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, a
solx =
2*t
soly =
-3*t 
134 9. Calcul simbolic

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. 

Comanda solve este utilă, de exemplu, s, i în determinarea punctelor


de intersect, i dintre două 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 funcţii


Comanda limit este utilizată pentru a calcula limite de funct, ii, s, i are
structura:
limit(S,var,a,’d’)
unde:

• S este expresia simbolică (definită anterior sau scrisă direct în co-


mandă, sub formă de s, ir de caractere);

• var este variabila în raport cu care se calculează limita (dacă S cont, i-


ne o singură variabilă simbolică, atunci acest argument poate lipsi);

• a este punctul limită; acesta poate fi număr sau variabilă simbolică;

• d este un argument opt, ional s, i indică direct, ia limitei, în cazul în care


se dores, te calculul unor limite laterale; variantele sunt right s, i left
9.7. Derivarea 135

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. 

9.7 Derivarea
Comanda diff este utilizată pentru a deriva o expresie simbolică, s, i
are structura:
diff(S,var,n)
unde S este expresia simbolică (definită anterior sau scrisă direct în co-
mandă, sub formă de s, ir de caractere), var este variabila în raport cu care
se calculează derivata (dacă S cont, ine o singură variabilă simbolică, atunci
acest argument poate lipsi) iar n este ordinul de derivare (dacă ordinul
dorit este 1, atunci acest argument 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
definită în prealabil sau introdusă direct în comandă ca s, ir de caractere, de
ordinul 1 sau de ordinul al 2-lea. 
136 9. Calcul simbolic

Matricea jacobiană
∂f ∂f
 
D (f, g)  ∂x ∂y 
:=  
D (x, y)  ∂g ∂g 
∂x ∂y
se calculează folosind comanda
jacobian([f;g],[x,y])

Exemplul 9.25 Considerăm coordonatele polare s, i ecuat, iile de legătură cu


coordonatele carteziene.
Comenzile:
>> syms rho theta x y;
>> x = rho*cos(theta); y = rho*sin(theta);
>> J1 = jacobian([x,y],[rho,theta])
>> det1 = det(J1)
>> det2 = simplify(det(J1))
vor afis, a matricea jacobiană precum s, i determinantul ei (s, i apoi într-o formă
simplificată, adică valoarea ρ). 

Exemplul 9.26 Considerăm coordonatele sferice s, i ecuat, iile de legătură cu


coordonatele 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 jacobiană precum s, i determinantul ei (s, i apoi într-o formă
simplificată, adică valoarea −ρ2 sin (ϕ) ). 

9.8 Integrarea
Comanda int este utilizată pentru a integra o expresie simbolică, s, i are
structura:
int(S,var,a,b)
9.8. Integrarea 137

unde:

• S este expresia simbolică (definită anterior sau scrisă direct în co-


mandă, sub formă de s, ir de caractere);

• var este variabila în raport cu care se calculează integrala (dacă S


cont, ine o singură variabilă simbolică, atunci acest argument poate
lipsi);

• a,b sunt limitele de integrare; acestea pot fi numere sau variabile sim-
bolice (dacă nu se dores, te determinarea unei integrale definite ci a
unei primitive, 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)
>> 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


definită în prealabil sau introdusă direct în comandă ca s, ir de caractere, cu
limite de integrare sau fără limite de integrare. 

Exemplul 9.28 Putem calcula s, i integrale improprii, de exemplu integrala


Z +∞
2
lui Gauss, e−x dx :
−∞

>> syms x;
>> f = exp(-x^2);
>> intGauss = int(f,-inf,inf)

Valoarea afis, ată va fi, bineînt, eles, π. 
138 9. Calcul simbolic

9.9 Rezolvarea ecuaţiilor diferenţiale ordinare


Comanda dsolve este utilizată pentru a determina solut, ia unei ecuat, ii
diferent, iale ordinare, s, i are structura:

dsolve(’eq1’,’eq2’,’cond1’,’cond2’,’var’)

unde:

• eq1 este ecuat, ia diferent, ială ce trebuie scrisă direct în comandă, sub
dy
formă de s, ir de caractere: derivata y 0 sau trebuie scrisă sub forma
0
dt
Dy; de exemplu, ecuat, ia diferent, ială y (t) + 3y (t) = 5 va fi scrisă sub
forma ’Dy+3y=5’; dacă este un sistem de ecuat, ii apare s, i eq2;

• cond1,cond2 etc. sunt condit, iile int, iale ce trebuie satisfăcute de


solut, ia ecuat, ii diferent, iale;

• var este variabila în raport cu care se calculează solut, ia ecuat, iei; dacă
eq cont, ine o singură variabilă simbolică, atunci acest argument poate
lipsi; dacă eq cont, ine mai multe variabile simbolice s, i nu indicăm
variabila în raport cu care să rezolvăm ecuat, ia, atunci se lucrează cu
variabila implicită (luată t).

Exemplul 9.29 Solut, ia ecuat, iei diferent, iale de ordinul întâi


dy
y 0 = 2y + 4t (sau = 2y + 4t )
dt
se va găsi scriind
>> dsolve(’Dy=2*y+4*t’)
% nu este necesar sa definim, in prealabil,
% variabile simbolice
s, i vom obt, ine
ans =
C1*exp(2*t) - 2*t - 1 

Exemplul 9.30 Solut, ia ecuat, iei diferent, iale de ordinul al doilea

d2 x dx
+2 + x = 0 (sau x00 + 2x0 + x = 0 )
dt2 dt
se va găsi scriind
9.9. Rezolvarea ecuaţiilor diferenţiale ordinare 139

>> dsolve(’D2x+2*Dx+x=0’)
% nu este necesar sa definim, in prealabil,
% variabile simbolice
s, i vom obt, ine
ans =
C1*exp(-t) + C2*t*exp(-t) 

Exemplul 9.31 Solut, ia ecuat, iei diferent, iale

ds
= ax2 (sau s0 (t) = ax2 , cu x independent de t )
dt
se va găsi 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, ine
ans =
a*t*x^2 + C1 

Exemplul 9.32 Solut, ia ecuat, iei diferent, iale

ds
= ax2 (sau s0 (x) = ax2 )
dx
se va găsi scriind
>> dsolve(’Ds=a*x^2’,’x’)
s, i vom obt, ine
ans =
(a*x^3)/3 + C1 

Exemplul 9.33 Solut, ia ecuat, iei diferent, iale

ds
= ax2 (sau s0 (a) = ax2 )
da
se va găsi scriind
>> dsolve(’Ds=a*x^2’,’a’)
140 9. Calcul simbolic

s, i vom obt, ine


ans =
(a^2*x^2)/2 + C1 

Exemplul 9.34 Solut, ia ecuat, iei diferent, iale cu condit, ii init, iale

 y 0 + 3y = 5
 y (0) = 1

se va găsi scriind
>> dsolve(’Dy+3*y=5’,’y(0)=1’)
s, i vom obt, ine
ans =
5/3 - (2*exp(-3*t))/3 

Exemplul 9.35 Solut, ia ecuat, iei diferent, iale cu condit, ii init, iale

 y 00 − 2y 0 + 2y = 0
 y (0) = 1, y 0 (0) = 0

se va găsi scriind
>> dsolve(’D2y-2*Dy+2*y’,’y(0)=1’,’Dy(0)=0’)
s, i vom obt, ine
ans =
exp(t)*cos(t) - exp(t)*sin(t) 

Exemplul 9.36 Solut, ia sistemului de ecuat, ii diferent, iale cu condit, ii init, iale



 x0 = x + y

y0 = t − x



x (0) = 1, y (0) = 2

se va găsi 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 selectivă

[1] Stormy Attaway, MATLAB R


. A practical Introduction to Programming
and Problem Solving (Fourth Edition), Elsevier, Amsterdam, 2017.
[2] Tobin A. Driscoll, Learning MATLAB, Society for Industrial and Applied
Mathematics (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 to
MATLAB R
for Beginners and Experienced Users (Second Edition), Cam-
bridge University Press, 2006.
[6] William J. Palm III, A Concise Introduction to MATLAB, McGraw-Hill,
New York, 2008.
[7] Rudra Patrap, Getting Started with MATLAB. A Quick Introduction for
Scientists and Engineers, Oxford University Press, 2010.

141
MATLAB – L ABORATOARE
Soft Matematic (MATLAB)
Laboratorul 11∗

1. Să se evalueze următoarele expresii s, i să se afis, eze rezultatul evaluării:

3 + 22 2
(a) x = 3
+ 4 3 −1 · 8; (b) y = 7x − 5;
5 +1
π 2π
(c) sin + cos2 ; (d) ey − ln (e) .
4 3

2. Să se atribuie variabilei x valoarea 3. Apoi să se folosească pentru a evalua expresiile:

x3 2
−1 x−1
(a) ; (b) ex ; (c) √ ;
6 x2 + 1
1 arctg (x)
(d) x3 sin (x − 2x ) ; (e) 2 3x ; (f ) .
1 + x2

3. Să se genereze s, i să se afis, eze:

(a) Un vector cu elemente de la − 1 la 1, cu pasul 1 s, i apoi cu pasul 0.01.


Să se determine s, i să se afis, eze dimensiunea vectorului ı̂n ambele cazuri;
(b) O matrice A de tip 2 × 3 cu toate elementele 1;
(c) O matrice B prin adăugarea liniei [2 3 4] la matricea A de la (b) ;
(d) O matrice C prin replicarea matricei B ı̂n 3 × 2 blocuri.
Să se determine s, i să se afis, eze dimensiunea lui C.
Să se afis, eze linia a 5-a s, i coloana a 2-a a lui C.
Să se s, teargă ultimele două linii s, i două coloane ale lui C.

4. Să se genereze s, i să se afis, eze vectorul x = (xn )n=1,100 , unde



(a) xn = n (n + 1) ; (b) xn = n n + 1.

5. Să se genereze s, i să se afis, eze următoarele matrice:

(a) de tip (2n + 1) × (2n + 1) , cu n ≥ 20, n ∈ N, de forma


 
−n 1 0 0 ··· 0 0
 
 1 −n + 1 1 0 ··· 0 0 
 
 
 0
 1 −n + 2 1 ··· 0 0 
 
 .. .. .. .. .. .. ..  ;
 .
 . . . . . . 

 
 0
 0 0 1 n−2 1 0 
 
 0
 0 0 0 1 n−1 1 
0 0 0 0 0 1 n
∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
Soft Matematic – Laboratorul 11 (MATLAB)

(b) de tip n × n, cu n ≥ 20, n ∈ N, de forma


 
2 −1 0 0 ··· 0 0
 

 −1 2 −1 0 ··· 0 0 
 

 0 −1 2 −1 ··· 0 0 
 
 .. .. .. .. .. .. ..  ;

 . . . . . . . 

 

 0 0 0 −1 2 −1 0 
 

 0 0 0 0 −1 2 −1 
0 0 0 0 0 −1 2

(c) de tip n × n, cu n ≥ 20, n ∈ N, de forma


 
1 n 0 0 ··· 0 0
 

 −2 2 n−1 0 ··· 0 0 
 

 0 −3 3 n−2 ··· 0 0 
 
 .. .. .. .. .. .. ..  .

 . . . . . . . 

 

 0 0 0 −n + 2 n−2 3 0 
 

 0 0 0 0 −n + 1 n−1 2  
0 0 0 0 0 −n n

2
10/01/20 10:34 D:\Lab11_MATLAB_script.m 1 of 3

% problema 1.a
x1 = (3+2^2)/(5^3+1)+4^(2/3-1)*8

% problema 1.b
y1 = 7*x1-5

% problema 1.c
z1 = sin(pi/4)+(cos(2*pi/3))^2

% problema 1.d
w1 = exp(y1)-log(exp(1))

% problema 2.a
x = 3 ; x2a = x^3/6

% problema 2.b
x = 3 ; x2b = exp(x^2-1)

% problema 2.c
x = 3 ; x2c = (x-1)/sqrt(1+x^2)

% problema 2.d
x = 3 ; x2d = (x^3)*sin(x-2^x)

% problema 2.e
x = 3 ; x2e = 2^(1/(3*x))

% problema 2.f
x = 3 ; x2f = atan(x)/(1+x^2)

% problema 3.a
x3b = -1:1
dimx = length(x3b)
y3b = -1:0.01:1;
dimy = length(y3b)

% problema 3.b
A = ones(2,3)
10/01/20 10:34 D:\Lab11_MATLAB_script.m 2 of 3

% problema 3.c;
% varianta: linia noua este prima linie a matricei A
A = ones(2,3) ; B1 = [ [2 3 4] ; A]

% problema 3.c;
% varianta: linia noua este ultima linie a matricei A
A = ones(2,3) ; B2 = [A ; [2 3 4]]

% problema 3.c;
% varianta: linia noua este intre prima si a doua linie a matricei A
A = ones(2,3); B3 = [A(1,:) ; [2 3 4] ; A(2,:)]

% problema 3.c;
% varianta: adaug o coloana noua intre coloana a 2-a si a 3-a a matricei A
A = ones(2,3); B3 = [A(:,1:2) , [2 3]' , A(:,3)]

% problema 3.d
A = ones(2,3); B = [A ; [2 3 4]];
C = repmat(B,3,2)
dimC = size(C)
l5C = C(5,:)
c2C = C(:,2)
partC = C(1:7,1:4)

% problema 4.a
% vom lua cazul n=1:10
% (trebuie scris si in cazul n=1:100, dar fara a afisa rezultatul)
m = 1:10 , x_m = m.*(m+1)
% introducerea de spatii intre . si operator va conduce la erori

% apoi scriem cazul:


n = 1:100 ; x_n = n.*(n+1);
% introducerea de spatii intre . si operator va conduce la erori

% problema 4.b
n = 1:100 ; y_n = n.*sqrt(n)+1;
% introducerea de spatii intre . si operator va conduce la erori

% problema 5.a; vom lua cazul n=7


% (trebuie scris si in cazul unui n oarecare, introdus de utilizator, dar fara a afisa rezultatul)
A1=diag(-7:7)
10/01/20 10:34 D:\Lab11_MATLAB_script.m 3 of 3

B1=diag(diag(eye(14)),1) % ce face comanda "diag(diag(matrice))"?


C1=diag(diag(eye(14)),-1)
D1=A1+B1+C1

% problema 5.b; vom lua cazul n=7


% (trebuie scris si in cazul unui n oarecare, introdus de utilizator, dar fara a afisa rezultatul)
A2=2*eye(7)
B2=diag(diag(eye(6)),1)
C2=diag(diag(eye(6)),-1)
D2=A2-B2-C2

% problema 5.c; vom lua cazul n=7


% (trebuie scris si in cazul unui n oarecare, introdus de utilizator, dar fara a afisa rezultatul)
A3=diag(1:7)
B3=diag(7:-1:2,1)
C3=diag(-2:-1:-7,-1)
D3=A3+B3+C3
Soft Matematic (MATLAB)
Laboratorul 12∗

1. Să se genereze s, i să se afis, eze matricea


 
1 2 −1 3
 7 6 0 1 
A= .
 3 −2 −1 −1 
0 1 −4 5

(a) Să se scrie transpusa matricei A;


(b) Să se calculeze At A s, i A At ;
(c) Să se determine rangul, determinantul s, i inversa matricei A;
(d) Fie B = At . Să se calculeze 3A − 5B 3 .

2. Să se rezolve următoarele sisteme de ecuat, ii liniare:




 5x1 + 2x2 + x3 = 12

(a) 5x1 − 6x2 + 2x3 = −1


−4x1 + 2x2 + x3 = 3



 2x1 − x2 = 1


−x1 + 2x2 − x3 = 1






−x2 + 2x3 − x4 = 1




(b) ..


 .


−xn−2 + 2xn−1 − xn = 1






−xn−1 + 2xn = 1


pentru n ≥ 2, n ∈ N.
3. Fie tablourile:
(a) x = [1 2 3; 0 −2 5; 6 3 9] ; (b) x = −10 : .1 : 10; (c) z = 5 ∗ randn(5).

Să se scrie o comandă care să determine numărul de elemente mai mari ca 1 ale acestor tablouri.

4. Să se construiască o matrice de tip 25 × 25 care să cont, ină toate numerele naturale de la 1 la 625
as, ezate ı̂n ordine crescătoare, linie după linie.
Să se ı̂nlocuiască cu 0 numerele care nu sunt prime.
Să se scrie comenzile corespunzătoare ı̂ntr-un fis, ier script.
5. Să se construiască o matrice de tip 5 × 5 de numere aleatoare, uniform distribuite ı̂n intervalul
[0, 1]. Să se calculeze media aritmetică a elementelor mai mari decât 0.5. Să se scrie comenzile
corespunzătoare ı̂ntr-un fis, ier script.
∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
Soft Matematic – Laboratorul 12 (MATLAB)

n+1
(−1)
6. Să se construiască un vector cu elementele xn = , unde n ia valoari de la 1 la 100. Să se
2n − 1
calculeze suma elementelor acestui vector.
7. Să se calculeze produsul 1 · 2 · 3 · . . . · 24 · 25.

8. Să se calculeze suma 1 + 22 + 32 + . . . + 1992 + 2002 .


X∞ 1
9. Să se aproximeze numeric suma seriei .
n=1 n (n + 1)

10. Să se creeze, ı̂ntr-un fis, ier de tip M, funct, ia f, unde:


x3 2x x
(a) f (x) = ; (b) f (x) = ; (c) f (x) = √ .
1 + x2 2 + 5x 1+ x

Să se apeleze funct, ia f cu argumentele x = 2.3 s, i respectiv x = [0 0.2 ... 1.8 2] .

2
10/01/20 10:34 D:\Lab12_MATLAB_script.m 1 of 4

% problema 1.a
A = [1 2 -1 3 ; 7 6 0 1 ; 3 -2 -1 -1 ; 0 1 -4 5]
trans1_A = A.'
% sau varianta care transpune si face si conjugatele elementelor
% care este identica in cazul nostru cu A'
trans2_A = A'

% problema 1.b
A = [1 2 -1 3 ; 7 6 0 1 ; 3 -2 -1 -1 ; 0 1 -4 5];
prod1 = A*A'
prod2 = A'*A

% problema 1.c
A = [1 2 -1 3 ; 7 6 0 1 ; 3 -2 -1 -1 ; 0 1 -4 5];
rang_A = rank(A)
det_A = det(A)
inv_A = inv(A)

% problema 1.d
A = [1 2 -1 3 ; 7 6 0 1 ; 3 -2 -1 -1 ; 0 1 -4 5];
B = A'
C = 3*A-5*B^3

% problema 2.a
% avem un sistem liniar de tipul AX=b
% solutia este data de X = A\b
% solutia este data si de X = A^(-1)*b
% dar precizia ei nu este la fel de mare in comparatie cu A\B
% (diferentele se vad cand dimensiunea sistemului este mai mare
% si cand matricea A are forma mai putin regulata)
A = [5 2 1 ; 5 -6 2 ; -4 2 1 ]; b = [12 ; -1 ; 3]
met1a_X = A\b
met2a_X = A^(-1)*b

% matricea sistemului este cea generata la Lab 11, Problema 5.b


% vom lua cazul n=7
% (trebuie scris si in cazul unui n oarecare, introdus de utilizator, dar fara a afisa rezultatul)
A = 2*eye(7)-diag(diag(eye(6)),1)-diag(diag(eye(6)),-1)
b = ones(7,1)
met1a_X = A\b
met2a_X = A^(-1)*b
10/01/20 10:34 D:\Lab12_MATLAB_script.m 2 of 4

% problema 3
x = [1 2 3 ; 0 -2 5 ; 6 3 9]
y = -10:.1:10;
z = 5*rand(5)
% am generat numere aleatoare distribuite uniform in intervalul (0,5)
w = 5*randn(5)
% am generat numere aleatoare distribuite normal standard (medie 0 si dispersie 1)
% si apoi le-am inmutit cu 5
% am obtinut numere aleatoare distribuite normal de medie 0 si dispersie 5^2)
a1 = x>1
b1 = sum(x>1)
suma_x = sum(sum(x>1))

a2 = y>1
b2 = sum(y>1)
suma_y = sum(sum(y>1))

a3 = z>1
b3 = sum(z>1)
suma_z = sum(sum(z>1))

a4 = w>1
b4 = sum(w>1)
suma_w = sum(sum(w>1))

% problema 4
A = 1:49;
B = reshape(A,7,7)
C = B'
D = isprime(C)
E = D.*C

% sau varianta (dar e mai greu de vizualizat)


A = 1:625;
B = reshape(A,25,25)
C = B'
D = isprime(C)
E = D.*C

% problema 5
A = rand(5);
B = A>0.5;
C = A.*B;
sum(sum(C))/sum(sum(B))
10/01/20 10:34 D:\Lab12_MATLAB_script.m 3 of 4

% problema 6
% vom lua cazul n=1:10
% (trebuie scris si in cazul n=1:100, dar fara a afisa rezultatul)
m = 1:10,
x_m = ((-1).^(m+1))./(2*m-1)
% introducerea de spatii intre . si operator va conduce la erori

SumaElem1 = sum(x_m)

% apoi scriem cazul:


n = 1:100;
x_n = ((-1).^(n+1))./(2*n-1);
% introducerea de spatii intre . si operator va conduce la erori

SumaElem2 = sum(x_n)

% problema 7
x = 1:25 ; Prod = prod(x)

% problema 8
n = 1:200 ; y_n = n.^2;
% introducerea de spatii intre . si operator va conduce la erori

SumaElem3 = sum(y_n)

% problema 9
n = 1:300 ; z_n = (n.*(n+1)).^(-1);
% introducerea de spatii intre . si operator va conduce la erori

SumaElem4 = sum(z_n)

% problema 10
val1_f1 = functia1(1)
x = 2.3
val2_f1 = functia1(x)
y = 0:.2:2;
val3_f1 = functia1(y)

val1_f2 = functia2(1)
x = 2.3
10/01/20 10:34 D:\Lab12_MATLAB_script.m 4 of 4

val2_f2 = functia2(x)
y = 0:.2:2;
val3_f2 = functia2(y)

val1_f3 = functia3(1)
x = 2.3
val2_f3 = functia3(x)
y = 0:.2:2;
val3_f3 = functia3(y)
28/09/19 14:41 D:\functia1.m 1 of 1

function y = functia1(x)

% definim, cu un fisier de tip M, o functie in cadrul Laboratorului 12,


% Problema 10(a)

y = (x.^3)./(1+x.^2);
28/09/19 14:42 D:\functia2.m 1 of 1

function y = functia2(x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 12, Problema 10(b)
%}

y = (2.^x)./(2+5.^x);
28/09/19 14:42 D:\functia3.m 1 of 1

function y = functia3(x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 12, Problema 10(c)
%}

y = x./(1+sqrt(x));
Soft Matematic (MATLAB)
Laboratorul 13 & 14∗

1. Să se definească funct, ia f : R → R, f (x) = x2 + ex ı̂n cele trei moduri: utilizând un fis, ier de tip M,
funct, ie de tip inline, funct, ie de tip anonymous (cu un function handle).
Apoi să se calculeze valorile funct, iei ı̂n argumentele:
 
  1 2
(a) x1 = 1 ; (b) x2 = −2 ; (c) x3 = 2 3 . (d) x4 = .
3 4

2. Să se scrie o funct, ie care generează, pentru o valoare n ∈ N cerută de program, o matricea A de tip
n × n cu elementele
1
ai,j = , i, j = 1, n .
i+j−1

3. Să se scrie o funct, ie care generează, pentru o valoare n ∈ N cerută de program, matricea de tip
(2n) × (2n) :
1 1 0 0 0 ··· ··· ··· 0 0 0
 

··· ··· ···


 
 1 2 2 0 0 0 0 0 
 
··· ··· ···
 
 0 0 3 1 0 0 0 0 
 
··· ··· ···
 
 0 0 1 4 2 0 0 0 
 .. .. .. .. .. .. .. .. .. .. .. 
 
 . . . . . . . . . . . 
 .. .. .. .. .. .. .. .. .. .. 
 
 . . . . . n . . . . .  .
 
 . . . .. .. .. .. .. .. .. 
 .. .. ..

 . . . n . . . . 
 . . . .. .. .. .. .. .. .. .. 
 .. .. .. . . . . . . . . 
 
 0 0 0
 0 0 ··· ··· 1 3 2 0  
 
 0 0 0
 0 0 ··· ··· ··· 0 2 1  
0 0 0 0 0 ··· ··· ··· 0 1 1

4. Să se calculeze eficient suma Xn 1


Sn = .
k=1 k2
X∞ 1 π2
Cât de bine aproximează Sn suma seriei 2
= ?
k=1 k 6
Să se afis, eze texte cu explicat, ii s, i cu rezultatele obt, inute (conform variabilei n introdusă de noi)
folosind comanda disp s, i apoi folosind comanda fprintf (textul trebuie să cont, ină s, i caractere s, i
variabilele definite ı̂n cadrul problemei).

5. Să se creeze, ı̂ntr-un fis, ier de tip M, funct, ia f care evaluează dezvoltarea Mac-Laurin a funct, iei
ln (x + 1) :
n
n+1 x
X∞
ln (x + 1) = (−1) , pentru orice x ∈ (−1, 1].
n=1 n
Să se apeleze funct, ia f cu argumentele x din intervalul [−0.5, 0.5] . Să se verifice ce se ı̂ntâmplă când
x se apropie de −1 sau de 1.
∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
Soft Matematic – Laboratorul 13 & 14 (MATLAB)

Să se afis, eze texte cu explicat, ii s, i cu rezultatele obt, inute (conform variabilei x introdusă de noi)
folosind comanda disp s, i apoi folosind comanda fprintf (textul trebuie să cont, ină s, i caractere s, i
variabilele definite ı̂n cadrul problemei).
6. Să se creeze, ı̂ntr-un fis, ier de tip M, funct, ia f aproximează, prin metoda trapezelor, integrala unei
funct, ii pe intervalul [a, b] . Algoritmul este următorul:
(a) se defines, te integrandul f s, i se indică limitele de integrare a, b;
(b) intervalul [a, b] se ı̂mparte ı̂n n subintervale, se calculează lungimea h := (b − a) /n a subinter-
valului s, i se obt, in nodurile echidistante x1 , . . . , xn ;
h Xn
(c) se aproximează integrala prin termenul I = (f (xk ) + f (xk+1 )) ;
2 k=1
Z b
(d) se afis, ează valoarea aproximativă a integralei f (x) dx.
a
Să se afis, eze texte cu explicat, ii s, i cu rezultatele obt, inute (conform variabilelor a, b, n, f introduse
de noi) folosind comanda disp s, i apoi folosind comanda fprintf (textul trebuie să cont, ină s, i
caractere s, i variabilele definite ı̂n cadrul problemei).

7. Să se determine care e cea mai mare valoare a lui n astfel ı̂ncât
Xn
Sn = k2 < L ,
k=1

unde L este dat.


Să se afis, eze texte cu explicat, ii s, i cu rezultatele obt, inute (conform variabilei L introdusă de noi)
folosind comanda disp s, i apoi folosind comanda fprintf (textul trebuie să cont, ină s, i caractere s, i
variabilele definite ı̂n cadrul problemei).

2
02/12/19 17:59 D:\Lab13_Lab14_MATLAB_script.m 1 of 4

%{
problema 1_modalitatea 1:
cream separat o functie de tip M cu numele functia4.m
o apelam scriind:
%}
y1 = functia4(1)
y2 = functia4(-2)
y3 = functia4([2 3])
y4 = functia4([1 2 ; 3 4])

% problema 1_modalitatea 2: cream o functie de tip inline


functia4b = inline('x.^2+exp(x)')
z1 = functia4b(1)
z2 = functia4b(-2)
z3 = functia4b([2 3])
z4 = functia4b([1 2 ; 3 4])

% problema 1_modalitatea 3: cream o functie de tip anonymous (folosim un function handle)


functia4c = @(x) x.^2+exp(x)
w1 = functia4c(1)
w2 = functia4c(-2)
w3 = functia4c([2 3])
w4 = functia4c([1 2 ; 3 4])

%{
problema 2: cream separat o functie de tip M cu numele functia5.m
o apelam scriind, de exemplu:
%}
H5 = functia5(5)
H7 = functia5(7)

%{
problema 3: cream separat o functie de tip M cu numele functia6.m
o apelam scriind, de exemplu:
%}
M5 = functia6(5)
M7 = functia6(7)
02/12/19 17:59 D:\Lab13_Lab14_MATLAB_script.m 2 of 4

%{
problema 4: trebuie scrisa pentru n=10, n=50, n=100 etc.
pentru a vedea cum arata eroarea
%}
k = 1:10; S_n = sum(1./k.^2)
suma = pi^2/6
eroarea = abs(S_n - suma)

%{
problema 5: trebuie scrisa pentru n=4, n=10, n=100, n=1000 etc.
pentru a vedea cum arata eroarea
%}
x1 = -.5; val1 = functia7(x1,4)
suma1 = log(x1+1)
eroarea1 = abs(val1 - suma1)

x2 = .5; val2 = functia7(x2,4)


suma2 = log(x2+1)
eroarea2 = abs(val2 - suma2)

x3 = 1; val3 = functia7(x3,4)
suma3 = log(x3+1)
eroarea3 = abs(val3 - suma3)

x4 = -1; val4 = functia7(x4,1000)


suma4 = log(x4+1)
eroarea4 = abs(val4 - suma4)

% problema 6_modalitatea 1:
%{
definim, mai intai, functia8, intr-un fisier de tip M, care defineste algoritmul de calcul
(metoda de aproximare a integralei (alta decat cea folosita de MATLAB))
careia vrem sa ii aproximam integrala
%}

% apoi introducem efectiv functia pe care vrem sa o integram;


% alegem functia exp(-x^2/2)
02/12/19 17:59 D:\Lab13_Lab14_MATLAB_script.m 3 of 4

fct_test = inline('exp(-x.^2/2)')
a = input('Introduceti limita a de la integrala definita = ')
b = input('Introduceti limita b de la integrala definita = ')
n = input('Introduceti numarul de pasi in aproximarea cu metoda trapezelor = ')
I_aprox = functia8(a,b,n,fct_test)
I = quad('exp(-x.^2/2)',a,b)
%{
calculez si integrala cu metoda MATLAB, adica, de exemplu, folosind comanda quad
(vine de la quadrature: adica metoda de a determina o aproximare numerica a
integralei definite prin metoda cuadraturilor (i.e. calcul de arii cunoscute))
%}
fprintf('Am aproximat integrala definita, dintr-o functie data,\nde la a = %.2f la b = %.2f cu un numar de n
= %.0f de pasi\n',a,b,n)
fprintf('\n')
fprintf('Integrala calculata de noi prin metoda trapezelor are valoarea %.8f \niar valoarea ei calculata de
MATLAB prin comanda quad este %.8f\n',I_aprox,I)
fprintf('\n')
fprintf('Diferenta dintre cele doua valori/metode de calcul este de %.12f\n',abs(I-I_aprox))
fprintf('\n')

% problema 6_modalitatea 2:
%{
definim, mai intai, functia9, intr-un fisier de tip M, care defineste algoritmul de calcul
(metoda de aproximare a integralei (alta decat cea folosita de MATLAB))
careia vrem sa ii aproximam integrala
(functia9 este functia8 scrisa in alta modalitate)
%}

% apoi introducem efectiv functia pe care vrem sa o integram;


% alegem functia exp(-x^2/2)

fct_test2 = inline('exp(-x.^2/2)')
a = input('Introduceti limita a de la integrala definita = ')
b = input('Introduceti limita b de la integrala definita = ')
n = input('Introduceti numarul de pasi in aproximarea cu metoda trapezelor = ')
I_aprox2 = functia9(a,b,n,fct_test2)
I = quad('exp(-x.^2/2)',a,b)
%{
calculez si integrala cu metoda MATLAB, adica, de exemplu, folosind comanda quad
%}
fprintf('Am aproximat integrala definita, dintr-o functie data,\nde la a = %.2f la b = %.2f cu un numar de n
= %.0f de pasi\n',a,b,n)
fprintf('\n')
fprintf('Integrala calculata de noi prin metoda trapezelor are valoarea %.8f \niar valoarea ei calculata de
MATLAB prin comanda quad este %.8f\n',I_aprox2,I)
fprintf('\n')
02/12/19 17:59 D:\Lab13_Lab14_MATLAB_script.m 4 of 4

fprintf('Diferenta dintre cele doua valori/metode de calcul este de %.12f\n',abs(I-I_aprox2))


fprintf('\n')

% problema 7_modalitatea 1:
L = input('Introduceti pragul L = ')
s = 0; k = 0;
while s < L - (k+1)^2
k = k+1;
s = s + k^2;
end
fprintf('Suma de patrate de valoare maxima care este mai mica decat L=%.2f este %.2f\n',L,s)
fprintf('\n')
fprintf('Ea este obtinuta pentru adunarea primilor %.0f termeni\n',k)
fprintf('\n')

% problema 7_modalitatea 2:
L = input('Introduceti pragul L = ');
n = input('Introduceti numarul de termeni n = ');
k = 1:n;
s2 = cumsum(k.^2)
% gasim termenii care verifica: suma patratelor este < L dat de noi
% si luam maximul acestora
rang_max = max(find(s2<L))
fprintf('Suma de patrate de valoare maxima \ncare este mai mica decat L = %.2f\neste obtinuta pentru
rangul %.0f\n',L,rang_max)
28/09/19 14:43 D:\functia4.m 1 of 1

function y = functia4(x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 1
%}

y = x.^2+exp(x);

end
28/09/19 14:43 D:\functia5.m 1 of 1

function y = functia5(n)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 2
%}

for i = 1:n
for j = 1:n
y(i,j)=1./(i+j-1);
end
end

end
28/09/19 14:44 D:\functia6.m 1 of 1

function y = functia6(n)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 3
%}

x = 1:n; y = n:-1:1; z = [x , y]; A = diag(z);


a = repmat([1 2],1,n-1); b = [a , 1]; B = diag(b,1);
c = repmat([1 0],1,n-1); d = [c , 1]; C = diag(d,-1);
y = A + B + C;

end
28/09/19 14:44 D:\functia7.m 1 of 1

function y = functia7(x,n)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 5
%}

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

end
28/09/19 14:45 D:\functia8.m 1 of 1

function y = functia8(a,b,n,f)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 6
%}

h = (b-a)/n;
x = a:h:b;
suma = 0;
for k = 1:n
suma = suma + f(x(k)) + f(x(k+1));
end
y = (h/2)*suma;

end
28/09/19 14:45 D:\functia9.m 1 of 1

function y = functia9(a,b,n,f)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13 & 14, Problema 6 (a 2-a modalitate (o alta varianta la functia8))
%}

h = (b-a)/n;
x = a:h:b;
sir1 = f(x(1:n));
sir2 = f(x(2:(n+1)));

y = (h/2)*sum(sir1+sir2);

end
Soft Matematic (MATLAB)
Laboratorul 15 & 16∗

1. Să se reprezinte grafic funct, ia f : [0, 2π] → R dată de

f (x) = ex sin (x) .

2. Să se reprezinte grafic funct, ia y = f (x) dată de ecuat, iile parametrice


(
x (t) = 1 + |t| ,

y (t) = 1 − t2 , t ∈ [−2, 2] .

Să se folosească s, i comanda subplot pentru a desena graficele funct, iilor x (t) , y (t) s, i y (x) .
3. Să se reprezinte grafic funct, ia y = f (x) dată ı̂n coordonate polare de

r = 2 sin (2θ) , θ ∈ [0, 2π] .

4. Să se reprezinte grafic funct, ia y = f (x) dată ı̂n coordonate polare de

r2 = 2 cos (2θ) , θ ∈ [0, 2π]

(graficul obt, inut se numes, te Lemniscata lui Bernoulli (dată ı̂n coordonate polare)).
5. Să se reprezinte grafic funct, ia y = f (x) dată ı̂n coordonate polare de

r = sin (2θ) cos (2θ) , θ ∈ [0, 2π] .

6. Să se reprezinte grafic funct, ia y = f (x) dată implicit de


3
x2 + y 2 − 1 + 27x2 y 2 = 0, (x, y) ∈ [−1, 1] × [−1, 1]

(graficul obt, inut se numes, te Astroida (dată ı̂n coordonate carteziene, sub formă implicită)).
7. Să se reprezinte grafic funct, ia y = f (x) dată implicit de
2
x2 + y 2 = x2 − y 2 , (x, y) ∈ [−1, 1] × [−1, 1]

(graficul obt, inut se numes, te Lemniscata lui Bernoulli (dată ı̂n coordonate carteziene, sub formă
implicită)).
8. Să se reprezinte grafic funct, ia y = f (x) dată implicit de

x3 + y 3 − 3xy = 0, x ∈ [−a, a] ,

unde a este o valoare introdusa de noi.


(graficul obt, inut se numes, te Foliul lui Descartes1 (dat ı̂n coordonate carteziene, sub formă im-
plicită)).
∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf
1 Pentru alte exemple de curbe interesante vezi [1], ı̂ncepând cu pagina 152 (sunt prezentate ecuatii si coduri MATLAB pen-
, ,
tru curbele: Loxodroma, Cicloida, Epicicloida (incluzând Cardioida), Hipocicloida (incluzând Astroida), Spirala lui Arhimede,
Lemniscata lui Bernoulli, Curbe Lissajous)

1
Soft Matematic – Laboratorul 15 & 16 (MATLAB) Bibliografie

9. Să se reprezinte grafic cercul de centru (2, 3) s, i de rază R = 4 (folosind ecuat, ia implicită a cercului).
10. Să se reprezinte grafic cercul de centru (x0 , y0 ) s, i de rază R (folosind ecuat, ia implicită a cercului).
11. Să se scrie un program care calculează rădăcinile reale ale ecuat, iei de gradul al doilea

ax2 + bx + c = 0, a, b, c ∈ R, a 6= 0,

punând ı̂n evident, ă pe acelas, i grafic rădăcinile găsite (dacă este cazul), maximul sau minimul
funct, iei.
12. Să se definească următoarea funct, ie cu ramuri s, i apoi să se reprezinte grafic: f : [−1, 1] → R dată de
(
−x, x ∈ [−1, 0),
f (x) =
x2 , x ∈ [0, 1] .

Bibliografie
[1] Nicoleta Breaz, Marian Crăciun, Păstorel Gas, par, Maria Miroiu, Iuliana Paraschiv-Munteanu, Mode-
larea matematică prin MATLAB, Editura StudIS, Ias, i, 2006.

2
28/09/19 14:13 D:\Lab15_Lab16_MATLAB_script.m 1 of 5

% problema 1, modalitatea 1
figure(1)
x = 0:0.01:2*pi;
y = exp(x).*sin(x);
plot(x,y)

% problema 1, modalitatea 2
functia_ex1_lab11 = inline('exp(x).*sin(x)')
figure(2)
ezplot(functia_ex1_lab11, [0 , 2*pi])

% problema 2
t = -2:0.01:2;
x = 1+abs(t); y = abs(1-t.^2);
figure('Name','O functie data parametric')
% folosim si comanda "subplot" pentru a desena 3 grafice diferite in cadrul
% aceleasi figuri numita "Figure 3: O functie data parametric"
subplot(1,3,1); plot(t,x)
title('Graficul functiei x(t)'); grid
subplot(1,3,2); plot(t,y)
title('Graficul functiei y(t)'); grid
subplot(1,3,3); plot(x,y)
title('Graficul functiei y(x)'); grid
axis([0 4 -1 5])
% fiecare grafic va avea titlul ei
% cel de-al treilea grafic are axa Ox de la 0 la 4 si Oy de la -1 la 5
% la fiecare grafic apare si grila de linii orizontale si verticale.

%{
% Avem si varianta mai simpla:
figure(3)
t = -1:0.01:1;
x = 1+abs(t);
y = abs(1-t.^2);
plot(x,y)
%}

% problema 3
figure(4)
28/09/19 14:13 D:\Lab15_Lab16_MATLAB_script.m 2 of 5

% folosim si comanda "subplot" pentru a desena 2 grafice diferite in cadrul


% aceleasi figuri numita "Figure 4"
theta1 = 0:0.01:pi; r1 = 2*sin(2*theta1);
theta2 = 0:0.01:2*pi; r2 = 2*sin(2*theta2);
subplot(1,2,1)
polar(theta1,r1)
subplot(1,2,2)
polar(theta2,r2)

% problema 5
figure(5)
theta = 0:0.01:2*pi;
r = sin(2*theta).*cos(2*theta);
polar(theta,r)

% problema 6
figure(6)
ezplot('(x.^2+y.^2-1).^3+27*x.^2*y.^2', [-1 1 -1 1])

% problema 7
figure(7)
ezplot('(x.^2+y.^2).^2 = x.^2-y.^2', [-1 1 -1 1])

% problema 9
x0 = 2; y0 = 3; R = 4
figure(8)
ezplot(@(x,y) (x-x0).^2+(y-y0).^2 - R.^2)

% problema 10
x0 = input('Introduceti abscisa centrului, x_0 = ');
y0 = input('Introduceti ordonata centrului, y_0 = ');
R = input('Introduceti raza cercului R = ');
figure(9)
ezplot(@(x,y) (x-x0).^2+(y-y0).^2 - R.^2)
28/09/19 14:13 D:\Lab15_Lab16_MATLAB_script.m 3 of 5

% problema 11
a = input('Introduceti coeficientul nenul a = ');
b = input('Introduceti coeficientul b = ');
c = input('Introduceti coeficientul c = ');
figure(10)
coef = [a b c];
rad = roots(coef) % am determinat zero-urile cu ajutorul comenzii roots aplicata pentru polinoame
fct_pol = @(x) a*x.^2+b.*x+c
val0 = input('Introduceti valoarea in jurul careia sa cautam solutia = ');
rad_val0 = fzero(fct_pol,val0)
ezplot(fct_pol)

rad_sort = sort(rad)
%{
am scris radacinile in ordine crescatoarea astfel incat sa la pot folosi
in determinarea minimului/maximului; le vom folosi scriind rad_sort(1) si rad_sort(2)
%}
if a<0
val_min = nan
fprintf('Deoarece %.2f este <0, functia nu admite puncte de minim (local)\n',a)
else
val_min = fminbnd(fct_pol,rad_sort(1),rad_sort(2))
end

fct_pol2 = @(x) -a*x.^2-b.*x-c


%{
am definit o noua functie = opusul primeia
acum o pot folosi in determinarea maximului
x_maxim(f) = x_minim(-f)
%}
if a<0
val_max = fminbnd(fct_pol2,rad_sort(1),rad_sort(2))
else
val_max = nan
fprintf('Deoarece %.2f este >0, functia nu admite puncte de maxim (local)\n',a)
end

% desenam acum un grafic in care sa apara si graficul functiei si anumite puncte particulare
a1 = input('Introduceti acum intervalul pentru doriti sa desenam graficul functiei. Primul punct = ');
b1 = input('Introduceti acum intervalul pentru doriti sa desenam graficul functiei. Al doilea punct = ');
x = a1:0.01:b1;
y = fct_pol(x);

figure(11)
28/09/19 14:13 D:\Lab15_Lab16_MATLAB_script.m 4 of 5

plot(x,y)
% !! mai multe grafice in acelasi reper
% folosim comanda: hold on - hold off
hold on
plot(rad_sort,fct_pol(rad_sort),'r*')
plot(val_min,fct_pol(val_min),'gx')
plot(val_max,fct_pol(val_max),'bx')
hold off
%{
r = red (culoarea liniei (punctelor) desenate cu plot)
g = green (culoarea liniei (punctelor) desenate cu plot)
b = blue (culoarea liniei (punctelor) desenate cu plot)
* = marcarea cu * a liniei (punctelor) desenate cu plot
(se foloseste, de exemplu, daca desenam doar cateva puncte, pentru a le scoate in evidenta)
x = marcarea cu x a liniei (punctelor) desenate cu plot
(se foloseste, de exemplu, daca desenam doar cateva puncte, pentru a le scoate in evidenta)
%}

% !! mai multe grafice in acelasi reper


% folosim un singur plot:
figure(12)
plot(x,y,rad_sort,fct_pol(rad_sort),'r*',val_min,fct_pol(val_min),'gx',val_max,fct_pol(val_max),'bx')

% problema 12
% daca vrem doar valori ale functiei definim functia10.m si o apelam
x10 = input('Introduceti valoarea in care vreti sa calculati functia = ');
val_x10 = functia10(x10)

% daca vrem doar valori ale functiei definim, intr-un mod similar, functia11.m
% si o apelam
x10_var2 = input('Introduceti valoarea in care vreti sa calculati functia = ');
val_x10_var2 = functia11(x10_var2)

% daca vrem sa reprezentam grafic functia din enunt


figure(13)
x = -1:0.01:1;
y = (-x).*(x<0) + (x.^2).*(x>=0);
plot(x,y,'r:')
% : = marcarea cu o linie punctata a liniei (punctelor) desenate cu plot
28/09/19 14:13 D:\Lab15_Lab16_MATLAB_script.m 5 of 5

% daca vrem sa reprezentam grafic functia din enunt (modalitatea 2)


figure(14)
x = -1:0.01:1; n = length(x);

for i = 1:n
if x(i)<0
y(i) = -x(i);
else
y(i) = x(i)^2;
end
end

plot(x,y,'b--')
% -- = marcarea cu o linie intrerupta a liniei (punctelor) desenate cu plot
28/09/19 14:46 D:\functia10.m 1 of 1

function y = functia10(x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 15 & 16, Problema 12
%}
if x < -1
y = nan;
fprintf('Valoarea %.2f introdusa nu este din domeniul functiei f\n',x)
elseif x <= 0
y = -x;
elseif x <= 1
y = x.^2;
else
y = nan;
fprintf('Valoarea %.2f introdusa nu este din domeniul functiei f\n',x)
end

end
28/09/19 14:46 D:\functia11.m 1 of 1

function y = functia11(x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 15 & 16, Problema 12 (varianta in care domeniul este [-1,1] )
%}

if x >= -1
if x <=0
y = -x;
elseif x<=1
y = x.^2;
end
end

end
Soft Matematic (MATLAB)
Laboratorul 17 & 18∗



 x (t) = sin t,

1. Să se reprezinte grafic funct, ia f dată de ecuat, iile parametrice y (t) = cos t,


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

2. Să se reprezinte grafic funct, ia f : [2, 5] × [1, 3] → R dată de f (x, y) = x + 2y − 4.


3. Să se reprezinte grafic suprafat, a dată de z = 1 − x2 − y 2 , cu x, y ∈ [−3, 3] .


 x = ρ cos θ,

4. Să se reprezinte grafic suprafat, a dată de ecuat, iile parametrice y = ρ sin θ,


z = ρ, ρ ∈ [0, 1] , θ ∈ [0, 2π] .

5. Să se reprezinte grafic sfera de centru (x0 , y0 , z0 ) s, i de rază R dată de ecuat, iile parametrice


 x = x0 + R cos θ sin ϕ,

y = x0 + R sin θ sin ϕ,


z = z0 + R cos ϕ, θ ∈ [0, 2π] , ϕ ∈ [0, π] .

6. Determinat, i valoarea următoarelor integrale:


Z 2 

 Z 1
1
(a) 5 x+ 3 dx ; (b) x3 (m − x) dx (pentru diverse valori ale lui m)
1 x 0

7. Determinat, i solut, iile ecuat, iei f (x) = 0 ı̂n intervalele specificate, unde:

(a) f (x) = 2 − x2 , ı̂n [1, 2] ; (b) f (x) = x3 − 2x2 + 3x − 1, ı̂n [0, 1] ;


x x
(c) f (x) = 4.5 cos2 − , ı̂n [2, 4] ; (d) f (x) = ex − 1, ı̂n [−1, 1] .
3 4

8. Să se reprezinte grafic, ı̂n aceeas, i figură, funct, iile date de (a) s, i (d) de la Problema 7, precedentă.
Determinat, i s, i punctele de extrem local ale acestor două funct, ii.
9. Să se determine rădăcinile ecuat, iilor:

(a) x2 − 2 = 0; (b) x3 − 2x2 + 3x − 1 = 0; (c) x4 − 3x2 + 2 = 0.

∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
16/12/19 22:36 D:\Lab17_Lab18_MATLAB_script.m 1 of 4

% problema 1
figure(1)
t = -5*pi:0.01:5*pi;
x = sin(t); y = cos(t); z = t;
plot3(x,y,z)

% problema 2
figure(2)
[x,y] = meshgrid(2:5,1:3);
z = x+2*y-4;
mesh(x,y,z)

% problema 3
figure(3)
[x,y] = meshgrid(-3:0.01:3);
z = 1-x.^2-y.^2;
mesh(x,y,z)

% problema 3, modalitatea a 2-a


figure(4)
[x,y] = meshgrid(-3:0.01:3);
z = 1-x.^2-y.^2;
surf(x,y,z)

% problema 4
figure(5)
rho = linspace(0,1,100); theta = linspace(0,2*pi,100);
[r,t] = meshgrid(rho,theta);
x = r.*cos(t); y = r.*sin(t); z = r;
mesh(x,y,z)

% problema 5
figure(6)
x0 = input('Introduceti centrul sferei: valoarea x_0 = ');
y0 = input('Introduceti centrul sferei: valoarea y_0 = ');
z0 = input('Introduceti centrul sferei: valoarea z_0 = ');
16/12/19 22:36 D:\Lab17_Lab18_MATLAB_script.m 2 of 4

R = input('Introduceti raza sferei R = ');


theta = linspace(0,2*pi,100); phi = linspace(0,pi,100);
[t,fi] = meshgrid(theta,phi);
x = x0 + R*cos(t).*sin(fi); y = y0 + R*sin(t).*sin(fi); z = z0 + R*cos(fi);
surf(x,y,z)

% problema 6(a)
a1 = input('Introduceti domeniul de integrare: capatul a1 = ');
b1 = input('Introduceti domeniul de integrare: capatul b1 = ');
functia1_lab12 = inline('5*sqrt(x)+1./x.^3');
int1 = quad(functia1_lab12,a1,b1)

% problema 6(a), modalitatea 2


a2 = input('Introduceti domeniul de integrare: capatul a2 = ');
b2 = input('Introduceti domeniul de integrare: capatul b2 = ');
functia2_lab12 = @(x) 5*sqrt(x)+1./x.^3;
int2 = quad(functia2_lab12,a2,b2)

% problema 6(b)
a3 = input('Introduceti domeniul de integrare: capatul a3 = ');
b3 = input('Introduceti domeniul de integrare: capatul b3 = ');
m = input('Introduceti parametrul m = ');
functia3_lab12 = @(x) (x.^3).*(m-x);
% daca functia '(x.^3).*(m-x)' ar fi introdusa se tip inline, atunci aparitia parametrului m va conduce la
erori

int3 = quad(functia3_lab12,a3,b3)

% problema 7(a)
a4 = input('Introduceti domeniul in care sa cautam solutia: a4 = ');
b4 = input('Introduceti domeniul in care sa cautam solutia: b4 = ');
% trebuie ca functia in cele doua puncte sa ia semne contrare
% (doar astfel exista o solutie (un zero) in intervalul specificat)
16/12/19 22:36 D:\Lab17_Lab18_MATLAB_script.m 3 of 4

functia4_lab12 = inline('2-x.^2');
if functia4_lab12(a4)*functia4_lab12(b4) >0
fprintf('\n')
fprintf('Functia data nu isi schimba semnul intre cele doua valori introduse\n')
fprintf('\n')
fprintf('deci nu exista nici un zero al ei in intervalul [%.2f,%.2f]\n',a4,b4)
else
sol1 = fzero(functia4_lab12,[a4,b4]);
fprintf('\n')
fprintf('Solutia ecuatiei f(x)=0 este %.4f \n',sol1)
end
% se deseneaza usor si graficul; vom lua, de exemplu, x din [-7,7]
figure(7)
x = -7:0.01:7; y = functia4_lab12(x);
plot(x,y)

% problema 8
functia5_lab12 = @(x) 2-x.^2
functia6_lab12 = @(x) exp(x)-1
% pentru grafice vom lua, de exemplu, x din [-7,7]
figure(9)
x = -2:0.01:2;
y1 = functia5_lab12(x); y2 = functia6_lab12(x);
plot(x,y1);
hold on;
plot(x,y2);
hold off
a5 = input('Introduceti domeniul in care sa cautam pct. de extrem local a5 = ');
b5 = input('Introduceti domeniul in care sa cautam pct. de extrem local b5 = ');
val_min1 = fminbnd(functia5_lab12,a5,b5)
val_min2 = fminbnd(functia6_lab12,a5,b5)

functia5b_lab12 = @(x) -2+x.^2;


functia6b_lab12 = @(x) -exp(x)+1;
val_max1 = fminbnd(functia5b_lab12,a5,b5)
val_max2 = fminbnd(functia6b_lab12,a5,b5)

figure(10)
x = -3:0.01:3;
y1 = functia5_lab12(x); y2 = functia6_lab12(x);
plot(x,y1);
hold on;
plot(x,y2);
plot(val_min1,functia5_lab12(val_min1),'r*')
16/12/19 22:36 D:\Lab17_Lab18_MATLAB_script.m 4 of 4

plot(val_min2,functia6_lab12(val_min2),'r*')
plot(val_max1,functia5_lab12(val_max1),'bx')
plot(val_max2,functia6_lab12(val_max2),'bx')
hold off

% problema 9(a)
figure(11)
coef = [1 0 -2];
rad = roots(coef) % am determinat zero-urile cu ajutorul comenzii roots aplicata pentru polinoame
x = -7:0.01:7; y = x.^2-2;
plot(x,y)

% problema 9(b)
figure(12)
coef = [1 -2 3 -1];
rad = roots(coef) % am determinat zero-urile cu ajutorul comenzii roots aplicata pentru polinoame
x = -7:0.01:7; y = x.^3-2*x.^2+3*x-1;
plot(x,y)

% problema 9(c)
figure(13)
coef = [1 0 -3 0 2];
rad = roots(coef) % am determinat zero-urile cu ajutorul comenzii roots aplicata pentru polinoame
x = -7:0.01:7; y = x.^4-3*x.^2+2;
plot(x,y)
Soft Matematic (MATLAB)
Laboratorul 19∗

Să se determine solut, ia următoarelor ecuat, ii diferent, iale cu valori init, iale.
Să se compare grafic solut, iile obt, inute prin diverse metode de calcul (ode45, ode23).
Să se determine solut, ia folosind s, i calculul simbolic.
Să se compare grafic solut, iile obt, inute prin aproximare numerică s, i prin calcul simbolic.
Să se determine numeric s, i simbolic solut, ia obt, inută ı̂n diverse puncte.

 x0 (t) = x (t) − 2t , t > 0,

1. x (t)

 x (0) = 1.


t
 2 x (t) x0 (t) = e ,

t > 0,
2. et + 1

 x (0) = 1.

 0
x (t) = x1 (t) + x2 (t) ,
 1


3. x02 (t) = t − x1 (t) , t > 0,


x1 (0) = 0.1, x2 (0) = 0.2.

 0

 x1 (t) = x1 (t) + x2 (t) − 3x3 (t) ,

 x02 (t) = 4x1 (t) + x2 (t) − 2x3 (t) ,


4.


 x03 (t) = 2x1 (t) + x2 (t) − 6x3 (t) , t > 0,


x1 (0) = 2, x2 (0) = 1, x3 (0) = −1.

x00 (t) = −1.2 x0 (t) − x (t) + 10 ,


(
t > 0,
5.
x (0) = 2, x0 (0) = 0.

x(4) (t) + 5 x(2) (t) + 4 x (t) = 0 ,


(
t > 0,
6.
0 00 000
x (0) = x (0) = x (0) = x (0) = 1.

∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
28/09/19 14:13 D:\Lab19_MATLAB_script.m 1 of 4

% problema 1, modalitatea 1 (las MATLAB sa discretizeze el intervalul [0,T])


% functia e introdusa in fisierul functia12.m

T = input('Introduceti capatul intervalui T = ');


[t1 , y1] = ode45(@functia12,[0,T],1)
% afisez si graficul, adica punctele plane M(t,y)
figure(1)
plot(t1,y1)

% problema 1, modalitatea 2 (indic eu pasul de discretizare al intervalului [0,T])


% functia e introdusa in fisierul functia12.m
T = input('Introduceti capatul intervalui T = ');
[t2 , y2] = ode45(@functia12,[0:0.1:T],1)
% valoarea intr-un punct este data de:
t2_0 = find(t2==0.2) % returneaza indicele unde se afla valoarea 0.2
val1 = y2(t2_0)

% problema 1, modalitatea 3 (indic eu pasul de discretizare al intervalului [0,T])


% functia este definita inline
fct1_ODE = inline('x - 2*t./x');
T = input('Introduceti capatul intervalui T = ');
[t3 , y3] = ode45(fct1_ODE,[0:0.1:T],1)
% s-ar putea ca metoda numerica "ode45" sa nu functioneze pentru aceasta functie;
% incearca si "ode23"

% valoarea intr-un punct este data de:


t3_0 = find(t3==0.9) % returneaza indicele unde se afla valoarea 0.9
val2 = y3(t3_0)

% problema 1, modalitatea 4 (indic eu pasul de discretizare al intervalului [0,T])


% functia este definita inline dar schimb si metoda; folosesc ode23
fct1_ODE = inline('x - 2*t./x');
T = input('Introduceti capatul intervalui T = ');
[t4 , y4] = ode23(fct1_ODE,[0:0.1:T],1)
figure(2)
plot(t4,y4)
% valoarea intr-un punct este data de:
t4_0 = find(t4==0.5) % returneaza indicele unde se afla valoarea 0.5
28/09/19 14:13 D:\Lab19_MATLAB_script.m 2 of 4

val3 = y4(t4_0)

% !! problema 1, modalitatea 5: CALCUL SIMBOLIC


syms t x; % nu se foloseste virgula "," (adica nu se scrie "syms t,x")
% rezolvam simbolic ecuatia diferentiala
x = dsolve('Dx = x-2*t/x','x(0)=1')

% determinam valoarea solutiei intr-un punct; nu mai trebuie comanda syms t x


t1 = 0.1; val1 = subs(x,t1)
t2 = 0.5; val2 = subs(x,t2)

% determinam valoarea solutiei intr-un punct;


% trebuie comanda syms t x (calculam variabila x in variabila t pentru valoarea 0.5)
val3 = subs(x,t,0.5)

% problema 2: indicam doar functia


fct2_ODE = inline('exp(t)./(1+exp(t))*1./(2*x)');

% problema 3
x0 = [0.1 ; 0.2];
T = input('Introduceti capatul intervalui T = ');
[t5 , y5] = ode45(@functia13,[0,T],x0)
% Solutia este matricea y cu doua coloane
% necunoscuta x_1 este prima coloana y5(:,1) iar necunoscuta x_2 este coloana a doua y5(:,2)
% afisez solutia problemei din enunt (x1,x2):
x1 = y5(:,1)
x2 = y5(:,2)

% problema 4
x0 = [ 2 ; 1 ; -1 ];
T = input('Introduceti capatul intervalui T = ');
[t6 , y6] = ode45(@functia14,[0,T],x0)
% Solutia este matricea y cu trei coloane
% necunoscuta x_1 este prima coloana y6(:,1)
% necunoscuta x_2 este coloana a doua y6(:,2)
28/09/19 14:13 D:\Lab19_MATLAB_script.m 3 of 4

% iar necunoscuta x_3 este coloana a treia y6(:,3)


% afisez solutia problemei din enunt (x1,x2,x3):
x1 = y6(:,1)
x2 = y6(:,2)
x3 = y6(:,3)

% afisez si graficul cu toate cele 3 curbe


% nu folosesc hold on
figure(3)
plot(t6,y6(:,1),'r',t6,y6(:,2),'b',t6,y6(:,3),'g')

% !! problema 4, modalitatea 2: CALCUL SIMBOLIC


syms t x1 x2 x3 % nu se foloseste virgula ","
% rezolvam simbolic ecuatia diferentiala
[x1 , x2 , x3] = dsolve('Dx1 = x1+x2-3*x3','Dx2 = 4*x1+x2-2*x3','Dx3 = 2*x1+x2-6*x3','x1(0)=2','x2
(0)=1','x3(0)=-1')

solutia_comp1 = x1
solutia_comp2 = x2
solutia_comp3 = x3

% determinam valoarea solutiei intr-un punct;


% nu mai trebuie comanda syms t x1 x2 x3
t1 = 0.1;
val1 = subs(x1,t1)
val2 = subs(x2,t1)
val3 = subs(x3,t1)

% determinam valoarea solutiei intr-un punct;


% trebuie comanda syms (calculam variabila x1 in variabila t pentru valoarea 0.1 etc.)
val4 = subs(x1,t,0.1)
val5 = subs(x2,t,0.1)
val6 = subs(x3,t,0.1)

% problema 5
x0 = [2 ; 0];
T = input('Introduceti capatul intervalui T = ');
[t7 , y7] = ode45(@functia15,[0:0.1:T],x0)
28/09/19 14:13 D:\Lab19_MATLAB_script.m 4 of 4

% Solutia este matricea y cu doua coloane


% necunoscuta x_1 este prima coloana y7(:,1) iar necunoscuta x_2 este coloana a doua y7(:,2)
% necunoscuta problemei date in enunt este doar prima coloana y7(:,1)
% afisez solutia problemei din enunt x :
sol_probl5 = y7(:,1)
% afisez si graficul, adica punctele plane M(t7,sol_probl5)
figure(4)
plot(t7,sol_probl5)

% problema 6
x0 = [1 ; 1 ; 1 ; 1];
T = input('Introduceti capatul intervalui T = ');
[t8 , y8] = ode45(@functia16,[0:0.1:T],x0)
% Solutia este matricea y cu patru coloane
% necunoscuta x_1 este prima coloana y8(:,1)
% iar necunoscuta x_2 este coloana a doua y8(:,2) etc.
% necunoscuta problemei date in enunt este doar prima coloana y8(:,1)
% afisez solutia problemei din enunt x :
sol_probl6 = y8(:,1)
% afisez si graficul, adica punctele plane M(t8,sol_probl6)
figure(5)
plot(t8,sol_probl6)

% !! problema 6, modalitatea 2: CALCUL SIMBOLIC


syms t x1 x2 x3 x4
% rezolvam simbolic ecuatia diferentiala
[x1 , x2 , x3 , x4] = dsolve('Dx1 = x2','Dx2 = x3','Dx3 = x4','Dx4 = -4*x1-5*x3','x1(0)=1','x2(0)=1','x3
(0)=1','x4(0)=1')
28/09/19 14:46 D:\functia12.m 1 of 1

function y = functia12(t,x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 19, Problema 1
%}

y = x - 2*t./x;
end
16/12/19 22:23 D:\functia13.m 1 of 1

function z = functia13(t,x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13, Problema 3
%}

z = [ x(1)+x(2) ; t-x(1)];

% introducerea de spatii in expresia matricei z (mai precis spatiile din cadrul expresiilor matematice) va
conduce la erori

end
16/12/19 22:23 D:\functia14.m 1 of 1

function z = functia14(t,x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13, Problema 4
%}

z = [ x(1)+x(2)-3*x(3) ; 4*x(1)+x(2)-2*x(3) ; 2*x(1)+x(2)-6*x(3) ];

% introducerea de spatii in expresia matricei z (mai precis spatiile din cadrul expresiilor matematice) va
conduce la erori

end
16/12/19 22:24 D:\functia15.m 1 of 1

function z = functia15(t,x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13, Problema 5
%}

z = [ x(2) ; -1.2*x(2)-x(1)+10];

% introducerea de spatii in expresia matricei z (mai precis spatiile din cadrul expresiilor matematice) va
conduce la erori

end
16/12/19 22:24 D:\functia16.m 1 of 1

function z = functia16(t,x)

%{
definim, cu un fisier de tip M, o functie in cadrul
Laboratorului 13, Problema 6
%}

z = [ x(2) ; x(3) ; x(4) ; -5*x(3)-4*x(1) ];

% introducerea de spatii in expresia matricei z (mai precis spatiile din cadrul expresiilor matematice) va
conduce la erori

end
Soft Matematic (MATLAB)
Laboratorul 20∗

Să se rezolve următoarele probleme folosind calculul simbolic.

1. Să se determine solut, ia ecuat, iilor diferent, iale cu valori init, iale din cadrul Laboratorului 19. Să se
compare grafic solut, iile obt, inute prin aproximare numerică s, i prin calcul simbolic. Să se determine
numeric s, i simbolic solut, ia obt, inută ı̂n diverse puncte.

2. Să se dezvolte determinantul următor punându-l sub formă de produs



a+b
−a + b − c b+c


a−b−c a + b a + c


a+c b+c −a − b + c

P (x)
3. Să se transforme fract, ia ı̂ntr-o fract, ie ireductibilă, unde
Q (x)
P (x) = x6 − x5 − 3x4 + x3 − 4x − 3,
Q (x) = 2x4 − 6x2 − 8x − 6.

4. Să se calculeze 2a2 + 8b3 a − 3 (b − a) pentru b = 4.


5. Să se rezolve următoarea ecuat, ie ı̂n raport cu variabila x :
x2 − 2 (m + 2) x + m2 − 1 = 0, m ∈ R.

6. Să se rezolve următoarea ecuat, ie ı̂n raport cu variabila x :


2x + a3x
= 2, a ∈ R.
2x − a3x
7. Să se rezolve următorul sistem de ecuat, ii liniare:


 3x + 4y + mz = 0,

4x + my + 3z = 6,
m ∈ R.


mx + 3y + 4z = 3 + m,

8. Să se determine matricea A astfel ı̂ncât:


t t
(2A − 3 (1, 2, 0)) = 3At + (2, 1, −1) .

9. Să se calculeze lungimea arcului de curbă (γ) dat de f (x) = ln (sin x) , x ∈ [π/3, π/2] folosind
Z bq
2
formula L (γ) = 1 + (f 0 (x)) dx.
a

10. Să se calculeze suma


n ∈ N.
3 3
Sn = 13 + 43 + 73 + . . . + (3n − 5) + (3n − 2) ,

11. Să se calculeze:


Z p
3

1 1 1+ 4x
(a) limx→0 e ;
x (b) limx→0 e ;x (c) √ .
x>0 x<0 x

∗ Pentru examen trebuie avute ı̂n vedere şi toate exemplele din Cursul disponibil pe pagina personală:
https://www.math.uaic.ro/∼maticiuc/didactic/MATLAB Curs.pdf

1
28/09/19 15:02 D:\Lab20_MATLAB_script.m 1 of 3

% problema 1
% vezi Laboratorul 19

% problema 2, modalitatea 1
syms a b c; % nu se foloseste virgula "," (adica nu se scrie "syms a,b,c")
A1 = [ a+b , -a+b-c , b+c ; a-b-c , a+b , a+c ; a+c , b+c , -a-b-c];
detA1 = simplify(det(A1))
pretty(det(A1)) % in caz ca se doreste, comanda "pretty" afiseaza o forma apropiata de scrierea matematica

% problema 2, modalitatea 2
syms a b c; % nu se foloseste virgula "," (adica nu se scrie "syms a,b,c")
A2 = [ a+b , -a+b-c , b+c ; a-b-c , a+b , a+c ; a+c , b+c , -a-b-c];
detA2 = factor(det(A2))

%{
problema 2, modalitatea 2
(exemplu simplu pentru vizualizarea rezultatului comenzilor "simplify" si "factor")
%}
syms a b; % nu se foloseste virgula "," (adica nu se scrie "syms a,b")
A3 = [ a+b , a-b ; a-b , a+b];
detA3 = simplify(det(A3))
detA3 = factor(det(A3))
pretty(det(A3)) % in caz ca se doreste, comanda "pretty" afiseaza o forma apropiata de scrierea matematica

% problema 3
syms x;
Px = x^6-x^5-3*x^4+x^3-4*x-3;
Qx = 2*x^4-6*x^2-8*x-6;
simplify(Px/Qx)
pretty(simplify(Px/Qx))

% problema 4
syms a b;
S4 = 2*a^2+8*b^3*a-3*(b-a)
subs(S4,b,4)

% problema 5
syms x m; % nu se scrie "syms x,m"
28/09/19 15:02 D:\Lab20_MATLAB_script.m 2 of 3

sol1 = solve('x^2 - 2*(m+2)*x+m^2-1',x)


sol2 = solve(x^2 - 2*(m+2)*x+m^2-1,x)
sol3 = solve(x^2 - 2*(m+2)*x+m^2-1) % rezolvarea se face in raport cu variabila implicita (considerata
"x" in acest caz)

% problema 6
syms a x;
S6 = (2.^x+a*3.^x)/(2.^x-a*3.^x)-2;
sol1 = solve(S6) % rezolvarea se face in raport cu variabila implicita (considerata "x" in acest caz)
sol2 = solve(S6,x)

% problema 7
syms x y z m;
[x y z] = solve('3*x+4*y+m*z=0','4*x+m*y+3*z=6', 'm*x+3*y+4*z=3+m',x,y,z);
sol_x = simplify(x)
sol_y = simplify(y)
sol_z = simplify(z)
pretty(x) % in caz ca se doreste, comanda "pretty" afiseaza o forma apropiata de scrierea matematica

% problema 8
A8 = [a,b,c];
S8 = transpose(2*A8-3*[1 2 0]-3*A8-[2,1,-1]);
S8
[sola solb solc] = solve(S8(1),S8(2),S8(3))

% problema 9
syms x;
f9 = log(sin(x));
der_f9 = diff(f9)
g9 = sqrt(1+der_f9^2);
lungime = int(g9,x,pi/3,pi/2)

% problema 10
syms k n;
Sn = symsum((3*k-2)^3,1,n)
% daca este o singura variabila simbolica in x_n, atunci aceasta poate sa nu fie precizata
28/09/19 15:02 D:\Lab20_MATLAB_script.m 3 of 3

% daca sunt mai multe variabile simbolice in x_n, atunci, daca nu se


% precizeaza variabila, atunci se sumeaza dupa variabila implicita
Sn_var = symsum((3*k-2)^3,k,1,n)

% problema 11, pct. (a)


syms x;
f11 = exp(1/x);
lim_1 = limit(f11, x, 0, 'right')

% problema 11, pct. (b)


syms x;
g11 = exp(1/x);
lim_2 = limit(g11, x, 0, 'left')

% problema 11, pct. (c)


syms x;
h11 = (1+x^(1/4))^(1/3)/sqrt(x);
h11
int = int(h11,x)
Examen MATLAB
– Checklist –

1. Crearea s, i lucrul cu fis, iere de tip script; executarea lor (trei metode) . . . . . . . . . . . . . . . pct.
2. Inserarea de comentarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

3. Stabilirea Current Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.


4. Utilizarea sistemului de Help al MATLAB: help, doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
5. Variabile predefinite: ans, pi, eps, inf, nan etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

6. Operat, ii elementare (inclusiv împărt, irea la stânga \) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.


7. Funct, ii elementare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
8. Definirea de variabile; atribuirea de valori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
9. Definirea de variabile de intrare folosind input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

10. Afis, area de texte s, i/sau date numerice rezultate folosind disp
comanda num2str
setări de afis, are ale valorilor numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
11. Afis, area de texte s, i/sau date numerice rezultate folosind fprintf
scrierea pe mai multe linii: comanda \n
setări de afis, are ale valorilor numerice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
12. Evaluare de expresii matematice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
13. Utilizarea: clear clc ; ↑ ↓ CTRL+C ...................................... pct.

14. Stabilirea formatului de afis, are: format long, format short etc. . . . . . . . . . . . . . . . . . . pct.
15. Operarea cu tablouri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
16. Operarea element cu element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

17. Generare de vectori (a:h:b s, i linspace) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.


18. Comenzi pentru determinarea dimensiunii unui vector s, i a unei matrice . . . . . . . . . . . . pct.
19. Generare de matrice: zeros, ones, eye, repmat, reshape . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
20. Generare de matrice: rand, randn, randperm, randi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

21. Matrice făcute din alte matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.


22. Afis, area la o matrice: a unui element, a unei linii, a unei coloane . . . . . . . . . . . . . . . . . . . pct.
23. Adăugarea unei linii (nu neapărat prima sau ultima) între
alte două linii ale unei matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
Checklist

24. Adăugarea unei coloane (nu neapărat prima sau ultima) între
alte două coloane ale unei matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
25. Înlocuirea unei linii (nu neapărat prima sau ultima) a unei matrice . . . . . . . . . . . . . . . . . pct.
26. Înlocuirea unei coloane (nu neapărat prima sau ultima) a unei matrice . . . . . . . . . . . . . pct.
27. Eliminarea unei linii (nu neapărat prima sau ultima) a unei matrice . . . . . . . . . . . . . . . . pct.
28. Eliminarea unei coloane (nu neapărat prima sau ultima) a unei matrice . . . . . . . . . . . . pct.
29. Scrierea elementelor unui s, ir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
30. Produsul scalar s, i produsul vectorial a doi vectori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
31. Generare de matrice de tip bandă folosind diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
32. Transpusa, rangul, determinantul unei matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
33. Crearea de funct, ii folosind fis, iere de tip M; apelare unei asemenea funct, ii
(funct, ii scalare sau vectoriale, de argument scalar sau vector) . . . . . . . . . . . . . . . . . . . . . . pct.
34. Crearea de funct, ii folosind comanda inline; apelarea unei asemenea funct, ii . . . . . . . . pct.
35. Crearea de funct, ii folosind un function handle; apelarea unei asemenea funct, ii . . . . . . pct.
36. Aplicarea unei funct, ii unei matrice: comanda arrayfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
37. Folosirea operatorilor relat, ionali s, i a operatorilor logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
38. Determinarea elementelor unei matrice care satisfac anumite condit, ii
(s, i determinarea numărului lor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
39. Comenzile max, min, sort, sum, cumsum, prod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
40. Variantele max(max), min(min), sum(sum), diag(diag) . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
41. Comenzile mod, isprime, find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
42. Utilizarea structurii if-elseif-else-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
43. Utilizarea structurii for-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
44. Utilizarea structurii while-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
45. Definirea unei funct, ii cu ramuri (folosind if-elseif-else-end);
apelarea acestei funct, ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
46. Definirea unei funct, ii care generează o matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
47. Suma primilor n termeni ai unei serii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
48. Comanda abs (pentru a determina “eroarea”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
49. Polinoame: polyval, roots, poly, conv, deconv, polyder, polyint . . . . . . . . . . . . . . . pct.
50. Solut, iile unei ecuat, ii: fzero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
51. Minime s, i maxime de funct, ii scalare: fminbnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
52. Integrarea numerică: quad, quadl, trapz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
53. Integrarea numerică: dblquad, triplequad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
54. Sisteme de ecuat, ii liniare: A\b s, i rref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
55. Valori s, i vectori proprii: comanda eig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
Checklist

56. Factorizarea LU: comanda lu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.


57. Factorizarea QR: comanda qr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
58. Factorizarea Cholesky: comanda chol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
59. Factorizarea SVD: comanda svd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
60. Ecuat, ii diferent, iale de ordinul 1: ode45, ode23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
61. Sisteme de ecuat, ii diferent, iale de ordinul 1: ode45, ode23 . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
62. Ecuat, ii diferent, iale de ordin superior (reducerea la un sistem de
ecuat, ii diferent, iale de ordinul 1): ode45, ode23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
63. Grafica 2D: comenzile plot, fplot, fimplicit, ezplot, polar . . . . . . . . . . . . . . . . . . . . . pct.
64. Grafica 2D pentru funct, ii date explicit, implicit sau parametric
(s, i definite într-unul dintre cele trei moduri posibile) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
65. Setări ale modului de afis, are:
forma, culoarea s, i grosimea curbei; forma, culoarea s, i mărimea marcajelor . . . . . . . . . . pct.
66. Comanda plot: afis, area doar a punctelor (fără linia poligonală care le unes, te) . . . . . pct.
67. Număr sau nume dat unei figuri: comanda figure(n), figure(’Name’) . . . . . . . . . . . pct.
68. Vizualizarea unei anume figuri: comanda figure(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
69. Închiderea figurilor: comanda close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
70. Grafice în aceeas, i figură s, i/sau reper:
o singură comandă plot sau hold on - hold off sau subplot . . . . . . . . . . . . . . . . . . . . pct.
71. Alte setări ale modului de afis, are:
mărimea s, i etichetarea axelor, titlul s, i legenda figurii, grila de linii . . . . . . . . . . . . . . . . . pct.
72. Grafica 3D, curbe în spat, iu: comenzile plot3, ezplot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
73. Grafica 3D, suprafet, e: comenzile meshgrid, mesh, ezmesh, surf, ezsurf . . . . . . . . . . . pct.
74. Număr sau nume dat unei figuri: comanda figure(n), figure(’Name’) . . . . . . . . . . . pct.
75. Vizualizarea unei anume figuri: comanda figure(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
76. Închiderea figurilor: comanda close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
77. Grafice în aceeas, i figură s, i/sau reper: hold on - hold off sau subplot . . . . . . . . . . . pct.
78. Alte setări ale modului de afis, are:
mărimea s, i etichetarea axelor, titlul s, i legenda figurii, grila de linii . . . . . . . . . . . . . . . . . pct.
79. Calcul simbolic: crearea de variabile (syms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
80. Calcul simbolic: schimbarea formei (collect, expand, factor, simplify, subs) . . . . pct.
81. Calcul simbolic pentru: calculul de sume (symsum) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
82. rezolvarea unui sistem de ecuat, ii (solve) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
83. calculul de limite de funct, ii (limit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
84. calculul de derivate (diff) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
85. calculul de primitive s, i integrale definite (int) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.
86. rezolvarea ecuat, iilor diferent, iale (dsolve) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pct.

S-ar putea să vă placă și