Documente Academic
Documente Profesional
Documente Cultură
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
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
Introducere
1
2 1. Introducere
clc
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ă.
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).
afis, ează
suma =
55
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.
>> a = 5, b=2*a, c = a + b; d = a + b + c
afis, ează
a =
5
b =
10
d =
30
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
Ment, ionăm că modalitatea de afis, are a valorilor nu influent, ează valoa-
rea lor; doar modalitatea de afis, are este schimbată.
c_5 =
2.0000 - 0.4794i
afis, ează
y_g =
45
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
Matrice
17
18 2. Matrice
>> A = [1 2 ; 3 4]
sau
>> A = [1 2
3 4]
sau
>> A = [1, 2 ; 3, 4]
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)
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
Comanda Semnificat, ia
MATLAB
A.’ transpusa matricei A
ans =
1+i 3+2i
2-i 4+3i
>> 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.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
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:
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 .
Comanda Semnificat, ia
MATLAB
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
MATLAB are un set comenzi prin care se pot manipula matricele. Printre
acestea amintim:
>> E = C’
afis, ează
E =
1 2 3
4 5 6
7 8 9
10 11 12
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
E =
0 2 3
0 0 6
0 0 0
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)
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
A(i:j,k:l)
A(:,c)
2.1. Utilizarea semnului : în manipularea matricelor 31
A(l,:)
Alte modalităt, i prin care MATLAB poate crea s, i manipula matrice sunt
date de următoarele exemple concrete, dar importante.
A =
1 2 3 4
5 6 99 8
9 10 11 12
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
Comanda Semnificat, ia
MATLAB10
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
>> 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 .
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
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).
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
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
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
• 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);
nume_var = input(’text_afisat’)
nume_var = input(’text_afisat’,’s’)
Î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:
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
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.
unde:
• 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 % );
Funcţii
%}
···
··· 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);
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).
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
ans =
5 0
4.33 2.50
2.50 4.33
0 5
Mai precis, definirea unei funcţii de tip anonymous este dată de comanda
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:
Î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)
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
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.
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
0.9276 0.8415
În plus fat, ă de operatorii logici s, i cei relat, ionali ment, ionat, i mai sus MAT-
68 5. Programare în MATLAB
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
afis, ează
Q5 =
0 0 0 0 1 1 1 1 1
iar
>> Q6 = not(A>4)
afis, ează
Q1 =
1
iar
>> Q2 = b == 1 && a == 0
afis, ează
Q2 =
0
iar
>> Q3 = (1/a) < 0 || a == 0
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
afis, ează
ans =
0
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
afis, ează
ans =
1
2
5
6
iar
>> find(A<0)
afis, ează
ans =
1
6
···
··· 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.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.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
î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.
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)
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
end
···
··· Program MATLAB
···
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.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)
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
otherwise
···
··· grup 3 de comenzi MATLAB
···
end
···
··· Program MATLAB
···
5.5. Structuri switch-case 83
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
polyval(p,x)
85
86 6. Polinoame
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 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
Obt, inem
v =
6 2 -3
w =
2 1 -3 1
Capitolul 7
89
90 7. Rezolvarea numerică a unor probleme
Exemplul 7.2 Acelas, i rezultat se obt, ine dacă apelăm astfel funct, ia f :
Exemplul 7.3 Acelas, i rezultat se obt, ine dacă apelăm astfel funct, ia f (folo-
sim un function handle):
Exemplul 7.4 Acelas, i rezultat se obt, ine dacă definim funct, ia f ca fiind de
tip inline:
s, i apoi o apelăm
Exemplul 7.5 Acelas, i rezultat se obt, ine dacă definim funct, ia f ca fiind de
tip anonymous (folosim un function handle):
s, i apoi o apelăm
Exemplul 7.6 Acelas, i rezultat se obt, ine dacă definim funct, ia f ca fiind de
tip anonymous (folosim un function handle):
x = fminbnd(functie,x1,x2)
unde:
[x,fval] = fminbnd(functie,x1,x2)
unde fval este valoarea funct, iei în punctul x de minim local găsit;
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
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:
• 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 );
dblquad(functie,xmin,xmax,ymin,ymax,tol,method)
unde:
• 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 );
Deci
>> int6 = dblquad(’(1-6*x.^2*y).*(y-x >= 0)’,0,1,0,1)
A X = b,
X = A\b
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
• 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
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
sol = [C d]
1 0 0 3.4441
În cazul nostru, obt, inem sol = 0 1 0 3.1981
0 0 1 1.1867
unde:
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
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
[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;
• 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);
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
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 .
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 .
Reprezentări grafice
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:
105
106 8. Reprezentări grafice
Stilul liniei:
Culoarea liniei:
+ 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);
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.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:
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.
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)
figure(’Name’,’nume_figura’)
close(n)
close all
setează faptul că ambele axe vor avea aceas, i scală, iar comanda
axis square
ylabel(’text_ordonata’)
legend(’text_1’,’text_2’,pos)
fimplicit(’functia’,limite,’setare_linie’)
unde:
polar(theta,rho,’setare_linie’)
unde:
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ă;
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:
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] ,
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:
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);
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
• bar3(Y) 3D Bar Plot; graficul este sub formă de bare verticale; fie-
care element din Y reprezintă înălt, imea unei bare;
>> 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] .
Calcul simbolic22
• derivarea;
• integrarea;
123
124 9. Calcul simbolic
nume_obiect = sym(’x’)
vor afis, a
f =
3.0808
va afis, a
ans =
x
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ă.
factor(S)
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ă.
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)
>> 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
unde:
• 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.
>> 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)
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).
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])
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:
• 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).
>> 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)
>> syms x;
>> f = exp(-x^2);
>> intGauss = int(f,-inf,inf)
√
Valoarea afis, ată va fi, bineînt, eles, π.
138 9. Calcul simbolic
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;
• 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).
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)
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
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
ds
= ax2 (sau s0 (a) = ax2 )
da
se va găsi scriind
>> dsolve(’Ds=a*x^2’,’a’)
140 9. Calcul simbolic
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ă
141
MATLAB – L ABORATOARE
Soft Matematic (MATLAB)
Laboratorul 11∗
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
1
Soft Matematic – Laboratorul 11 (MATLAB)
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
% problema 4.b
n = 1:100 ; y_n = n.*sqrt(n)+1;
% introducerea de spatii intre . si operator va conduce la erori
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.
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
% 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
% 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)
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)
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
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
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 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)
x3 = 1; val3 = functia7(x3,4)
suma3 = log(x3+1)
eroarea3 = abs(val3 - suma3)
% 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
%}
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)
%}
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
% 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
%}
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∗
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
(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
(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] ,
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
% 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
% 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)
%}
% 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)
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π] .
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, π] .
7. Determinat, i solut, iile ecuat, iei f (x) = 0 ı̂n intervalele specificate, unde:
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:
∗ 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 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
% 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(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)
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.
∗ 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
val3 = y4(t4_0)
% 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
solutia_comp1 = x1
solutia_comp2 = x2
solutia_comp3 = x3
% 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
% 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)
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
%}
% 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
%}
% introducerea de spatii in expresia matricei z (mai precis spatiile din cadrul expresiilor matematice) va
conduce la erori
end
Soft Matematic (MATLAB)
Laboratorul 20∗
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.
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.
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
∗ 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
% 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
1. Crearea s, i lucrul cu fis, iere de tip script; executarea lor (trei metode) . . . . . . . . . . . . . . . pct.
2. Inserarea de comentarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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.
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