Sunteți pe pagina 1din 39

8.

FUNCŢII MATEMATICE ÎN MATLAB

Funcţiile matematice uzuale şi speciale se apelează cu sintaxa generală:


y=nume_funcţie(argument)
unde:
• nume_funcţie, este numele uneia dintre funcţiile matematice;
• argument, este valoarea pentru care se evaluează funcţia;
• y este variabila în care se returnează rezultatul.
Dacă argumentul este o matrice, funcţiile matematice operează asupra
fiecărui element.

8.1. Funcţii trigonometrice


Principalele funcţii trigonometrice directe, apelabile în Matlab sunt:
• sin(x) , care calculează sinusul argumentului x, dat în radiani;
• cos(x) , care calculează cosinusul argumentului x, dat în radiani;
• tan(x) , care calculează tangenta argumentului x, dat în radiani;
• cot(x) , care calculează cotangenta argumentului x, dat în radiani;
• sec(x) , care calculează secanta argumentului x, dat în radiani;
• csc(x) , care calculează cosecanta argumentului x, dat în radiani.
Dacă, de exemplu, argumentul x este vectorul:
x = [ pi/6 pi/4 pi/3 pi/2
pi/2+pi/6 pi/2+pi/4 pi/2+pi/3 pi
pi+pi/6 pi+pi/4 pi+pi/3 pi+pi/2
3*pi/2+pi/6 3*pi/2+pi/4 3*pi/2+pi/3 2*pi ],
care în radiani este,
x =[ 0.5236 0.7854 1.0472 1.5708
2.0944 2.3562 2.6180 3.1416
3.6652 3.9270 4.1888 4.7124
5.2360 5.4978 5.7596 6.2832],
atunci pentru:
 sin(x) se obţine,
ans =
0.5000 0.7071 0.8660 1.0000
0.8660 0.7071 0.5000 0.0000
-0.5000 -0.7071 -0.8660 -1.0000
-0.8660 -0.7071 -0.5000 -0.0000
 cos(x) se obţine,
ans =
0.8660 0.7071 0.5000 0.0000
170 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

-0.5000 -0.7071 -0.8660 -1.0000


-0.8660 -0.7071 -0.5000 -0.0000
0.5000 0.7071 0.8660 1.0000.
Pentru y = [pi/3 pi/4 pi/6], dacă se calculează:
 tan(y) se obţine,
ans =
1.7321 1.0000 0.5774,
 cot(y) se obţine,
ans =
0.5774 1.0000 1.7321,
 sec(y) se obţine,
ans =
2.0000 1.4142 1.1547,
 csc(y) se obţine,
ans =
1.1547 1.4142 2.0000.

Principalele funcţii trigonometrice inverse, apelabile în Matlab sunt:


• asin(x), care calculează arcsinusul argumentului x;
• acos(x), care calculează arccosinusul argumentului x;
• atan(x), care calculează arctangenta argumentului x;
• atan2(y,x), care calculează arctangenta părţii reale a elementelor x şi y,
cu condiţia ca . -pi <= atan2(y,x) <= pi;
• acot(x), care calculează arccotangenta argumentului x;
• asec(x), care calculează arcsecanta argumentului x;
• acsc(x), care calculează arccosecanta argumentului x.
Dacă pentru x = [ 0 1/2 1], calculând:
 asin(x) se obţine,
ans =
0 0.5236 1.5708,
 acos(x) se obţine,
ans =
1.5708 1.0472 0,
 atan(x) se obţine,
ans =
0 0.4636 0.7854,
 acot(x) se obţine,
ans =
1.5708 1.1071 0.7854.
Funcţii matematice în Matlab 171

8.2. Funcţii hiperbolice


Principalele funcţii hiperbolice directe, apelabile în Matlab sunt:
• sinh(x), care calculează sinusul hiperbolic al argumentului x;
• cosh(x), care calculează cosinusul hiperbolic al argumentului x;
• tanh(x), care calculează tangenta hiperbolică a argumentului x;
• coth(x), care calculează cotangenta hiperbolică a argumentului x;
• sech(x), care calculează secanta hiperbolică a argumentului x;
• csch(x), care calculează cosecanta hiperbolică a argumentului x;
Considerând x=[0 pi/6 pi/2 pi/3 pi] şi calculând:
 sinh(x) se obţine,
ans =
0 0.5479 2.3013 1.2494 11.5487,
 cosh(x) se obţine,
ans =
1.0000 1.1402 2.5092 1.6003 11.5920,
 tanh(x) se obţine,
ans =
0 0.4805 0.9172 0.7807 0.9963,
 coth(x) se obţine,
ans =
Inf 2.0813 1.0903 1.2809 1.0037,
 sech(x) se obţine,
ans =
1.0000 0.8770 0.3985 0.6249 0.0863,
 csch(x) se obţine,
ans =
Inf 1.8253 0.4345 0.8004 0.0866.
Principalele funcţii hiperbolice inverse, apelabile în Matlab, sunt:
• asinh(x), care calculează arcsinusul hiperbolic al argumentului x;
• acosh(x), care calculează arccosinusul hiperbolic al argumentului x;
• atanh(x), care calculează arctangenta hiperbolică a argumentului x;
• acoth(x), care calculează arccotangenta hiperbolică a argumentului x;
• asech(x), care calculează arcsecanta hiperbolică a argumentului x;
• acsch(x), care calculează arccosecanta hiperbolică a argumentului x;
Dacă x = [0 1/2 1], calculând:
 asinh(x) se obţine,
ans =
0 0.4812 0.8814,
 acosh(x) se obţine,
172 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

ans =
0 + 1.5708i -0.0000 + 1.0472i 0,
 atanh(x) se obţine,
ans =
0 0.5493 Inf.
Pentru argumente numere complexe de forma z=x+iy, relaţiile de calcul
sunt:
sin(z) = sin(x)*cosh(y) + i*cos(x)*sinh(y);
cos(z) = cos(x)*cosh(y) - i*sin(x)*sinh(y);
tan(z) = sin(z)/cos(z);
cot(z) = cos(z)/sin(z).

8.3. Funcţii de tip exponenţial


După cum am arătat anterior, ridicarea unui număr a la puterea n se face
prin instrucţiunea a^n. Exponentul n poate avea orice valoare, reală sau complexă.
Pentru a calcula radicalul de ordinul n dintr-un număr a, se utilizează funcţia
putere sub forma a^(1/n). De exemplu, dacă a = 9 şi n=2, atunci a^n este 9^2,
respectiv 81, iar a^(1/n) este 9^(1/2), respectiv 3.
Ridicarea la puterea x a numărului 2 (2x), se poate face prin funcţia
pow2(x). Dacă x este o matrice, atunci rezultatul va fi o matrice de aceleaşi
dimensiuni, funcţia acţionând element cu element. Pentru x=3.1, pow2(x) este
8.5742. Calculul unui număr de forma y=m*2n, se realizează printr-o instrucţiune
de forma y=pow2(m,n). Pentru m=20.1 şi n=3.5, cu comanda y=pow2(m,n) se
obţine 161.2.
Pentru calculul exponenţialei ex (unde e=2.71828182845…), se utilizează
funcţia exp(x), unde x este argumentul. Dacă x=[1 2 –2 –1], atunci exp(x) conduce
la:
ans =
2.7183 7.3891 0.1353 0.3679.
Dacă argumentul este un număr complex de forma z=x+i*y, atunci rezultatul
se calculează cu relaţia: e z = e x (cos(y ) + i ⋅ sin (y )) . Pentru z=2+3*i se obţine:
ans =
-7.3151 + 1.0427i.
Pentru calculul logaritmului natural, al logaritmului în baza 2 sau al
logaritmului zecimal (în baza 10) al numărului a (real, sau complex), sunt
disponibile funcţiile log, log2 şi respectiv log10, apelabile cu sintaxele:
x=log(a); x=log2(a); x=log10(a).
Dacă a = [2 ^2 3^2 2^5 10^3 10^(-2) 2^(-3)], atunci:
log(a) este [1.3863 2.1972 3.4657 6.9078 -4.6052 -2.0794],
Funcţii matematice în Matlab 173

log2(a) este [2.0000 3.1699 5.0000 9.9658 -6.6439 -3.0000], iar


log10(a) este [0.6021 0.9542 1.5051 3.0000 -2.0000 -0.9031].
Atunci când argumentul funcţiei log este un număr complex, de forma
z=x+i*y, rezultatul este calculat cu relaţia: log(z) = log(abs(z)) + i * atan2(y,x).
Funcţia log2 , de argument complex, se calculează cu relaţia:
log2(z) = log2(abs(z)) + i * atan2(y,x)/log(2), iar funcţia log10 prin relaţia,
log10(z) = log(abs(z)) + i * atan2(y,x)/log(10).
Pentru z = 5+ 7* i se obţine că log(z) este 2.1520 + 0.9505i, log2(z) este
3.1047 + 1.3713i, iar log10(z) este 0.9346 + 0.4128i.
Funcţia log2 de argument real X (număr sau vector), poate fi apelată prin
sintaxa [F,E]=log2(x), situaţie în care returnează un număr real F, uzual în
domeniul 0.5 <= abs(F) < 1, şi un număr întreg E, astfel încât X = F .* 2.^E, ceea
ce corespunde funcţiei frexp( ) din ANSI C şi funţiei standard logb( ) din IEEE.

Calculul radicalului de ordinul 2 dintr-un număr a, respectiv a , se


realizează prin utilizarea funcţiei sqrt(a). Dacă numărul a este negativ sau
complex, rezultatul calculului este un număr complex.
De exemplu, pentru a = [9 –4 4+9*i 2], prin sqrt(a) se obţine:
ans =
3 2i 2.6314 + 1.7101i 1.4142.
Determinarea puterii N a numărului 2 care majorează modulul
argumentului P, astfel încât P ≤ 2 N se face prin funcţia N=nextpow2(P), care
returnează cel mai mic număr N, care îndeplineşte condiţia impusă. Dacă P este
vector, funcţia returnează scalarul N, astfel încât 2N majorează numărul de
elemente ale vectorului. Pentru P=19, cel mai mic număr N este obţinut cu relaţia
nextpow2(19), rezultând 5, astfel încât 2^5=32 este numărul majorant.

8.4. Funcţii de tip complex


Construirea unui număr complex, z, dat prin partea reală x şi partea
imaginară y, se face cu instrucţiunea z=complex(x,y), care are ca rezultat z=x+i*y.
De altfel, se poate forma un număr complex şi numai prin instrucţiunea z=x+i*y,
iar în loc de i poate fi şi j. Dacă y lipseşte, atunci instrucţiunea devine complex(x),
iar numerele z sunt complexe, având partea imaginară 0.
Calculul valorii absolute sau a modulului argumentului z = x + y ⋅ i , real
sau imaginar se face prin funcţia abs(z). După cum se ştie, modulul r al unui
număr complex este r = x 2 + y 2 . Pentru x=[2 –3 4+2*i], aplicând funcţia
abs(x), se obţine [ 2.0000 3.0000 4.4721].
Calculul unghiului fazei, respectiv a argumentului ϕ a numărului complex
174 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

z = x + y ⋅ i , respectiv unghiului, în radiani, făcut în planul complex (x – i y), se


realizează prin funcţia angle(z), care este echivalentă cu atan(y/x). În general,
argumentul ϕ este determinat, în afara unui multiplu de 2π , prin
x y
cos(ϕ ) = , sin (ϕ ) = . Cu cele de mai sus, forma trigonometrică a numărului
r r
complex este: z = r (cos(ϕ ) + i sin (ϕ )) . Pentru z=2+3*i, prin angle(z) se obţine
0.9828, acelaşi rezultat ca şi prin atan(3/2).
Partea reală x, a unui număr complex z = x + y ⋅ i , se extrage prin funcţia
real(z), iar partea imaginară prin funcţia imag(z). Pentru z=2+3*i, prin real(z) se
obţine valoarea 2, iar prin imag(z) se obţine 3. Calculul părţii reale şi imaginare a
numerelor complexe, exprimate în formă polară, se poate face şi cu funcţia
unwrap.
Pentru un număr complex z = x + y ⋅ i , conjugatul său este z = x − y ⋅ i şi
poate fi obţinut prin funcţia conj(z). Dacă z=2+3*i, atunci conj(z) este 2-3*i.
Determinarea situaţiei, dacă un vector sau matrice X are toate elementele
numere reale (respectiv dacă partea imaginară a fiecărui element este 0) se
realizează prin funcţia isreal(X), care răspunde prin 1, dacă toate elementele sunt
reale şi prin 0, altfel. Pentru X=[2 i 5+2*i 7] prin isreal(X) se obţine 0, iar pentru
XX=[2 -1 7], cu isreal(XX) se obţine 1.
Sortarea unor numere complexe conjugate perechi (sau reale – partea
conjugată 0), în ordinea crescătoare a părţii reale, se realizează prin funcţia
cplxpair. Dacă X=[8 1+2*i 4 1-2*i 2 3-2*i 3+2*i], atunci funcţia
cplxpair(X), returnează [1+2i 1-2i 3+2i 3-2i 2 4 8].

8.5 Funcţii pentru aproximarea numerelor


Funcţiile Matlab pentru aproximarea cu numere întregi sunt:
• fix – care rotunjeşte la cel mai apropiat întreg spre zero ;
• floor – ce rotunjeşte la cel mai apropiat întreg spre minus infinit (- ∞) ;
• ceil - care rotunjeşte la cel mai apropiat întreg spre plus infinit (+∞) ;
• round - care rotunjeşte la cel mai apropiat întreg.
Funcţiile de mai sus operează asupra fiecărui element al unei matrice sau
vector şi se apelează cu sintaxa nume_funcţie(argument), unde nume_funcţie este
numele uneia dintre funcţiile de mai sus (fix, floor, ceil, round), iar argument
poate fi un scalar, un vector sau o matrice, ale cărui elemente se doresc a fi
rotunjite. Atunci când elementele din argument sunt numere complexe, funcţiile de
mai sus operează independent asupra fiecărei părţi (reală sau imaginară). Dacă
considerăm vectorul, V = [-0.25 -7.2 –2.4-2.6i 0.499 0.501 2.71+3.49i
Funcţii matematice în Matlab 175

11.5i], atunci:
fix(V) este [ 0 -7 -2-2i 0 0 2+3i 11i ];
floor(V) este [ -1 -8 -3-3i 0 0 2+3i 11i ];
ceil(V) este [ 0 -7 -2-2i 1 1 3+4i 12i ];
round(V) este [ 0 -7 -2-3i 0 1 3+3i 12i ].
Pentru aproximarea numerelor reale cu fracţii continue se utilizează
funcţia rat, apelată cu una dintre sintaxele,
[N,D] = rat(x), [N,D] = rat(x,tol),
unde: x este numărul care trebuie aproximat cu fracţii continue ; tol este toleranţa
care se acceptă între numărul x dat şi numărul y (aproximat), astfel încât
y − x ≤ tol , având valoarea implicită, tol=10-6; N, D sunt numărătorul, respectiv
numitorul fracţiei, care aproximează pe x cu toleranţă tol, astfel încât abs(N./D - X)
<= tol*abs(X); y este exprimarea lui x ca fracţie continuă.
Numărul y, rezultat prin funcţia rat, aproximează fiecare element al
1
vectorului x cu un număr de forma: y = d 0 + . De menţionat că
1
d1 +
1
d 2 + ... +
dk
acelaşi algoritm se utilizează şi la apelarea instrucţiunii interne format rat.
Dacă, de exemplu, x = [0.25 1.35 –3.455 1.3456], atunci rat(x) este
ans =
0 + 1/(4)
1 + 1/(3 + 1/(-7))
-3 + 1/(-2 + 1/(-5 + 1/(-18)))
1 + 1/(3 + 1/(-9 + 1/(-3 + 1/(2 + 1/(4))))),
1 1 1
astfel încât: 0.25 = 0 +, 1.35 = 1 + , - 3.455 = −3 + ,
4 1 1
3+ -2+
-7 1
-5+
− 18
1
1.3456 = 1 + , approximate cu toleranţa implicită 10-6.
1
3+
1
-9 +
1
−3+
1
2+
4
Aproximarea numerelor reale cu numere raţionale se realizează prin
apelarea funcţiei rats, cu sintaxa rats(x), utilizată şi în format rat. Pentru aceleaşi
valori ale lui x, ca mai sus, se obţine:
176 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

ans =
1/4 27/20 -691/200 841/625.
Funcţia mod(x,y) calculează modulus (restul cu semn după împăţirea dintre
x şi y), astfel că mod(x,y) = x - y.*floor(x./y) dacă y ~= 0, iar prin convenţie,
mod(x,0) este x. Intrările x şi y trebuie să fie matrice reale de aceeaşi dimensiune,
sau una trebuie să fie scalar.
Funcţia rem(x,y) calculează restul împărţirii lui x la y, element cu element,
astfel că mod(x,y) = x - y.*fix(x./y) dacă y ~= 0, iar prin convenţie, rem(x,0) este
NaN. Intrările x şi y trebuie să fie matrice reale de aceeaşi dimensiune sau una
trebuie să fie scalar.
Dacă se calculează restul împărţirii vectorului x=[1 3 -6], la y=[2 3 4], cu
z=rem(z,y), se ob=[2 3 4], cu z=rem(z,y), se obţine
z=[ 1 0 -2]
Funcţia mod(x,y) are acelaşi semn cu y, atunci când rem(x,y) are semnul lui
x. Cele două funcţii mod(x,y) şi rem(x,y) sunt egale dacă x şi y au acelaşi semn,
dar diferă dacă y sau x au semne diferite. Dacă X=[1.5 9 -4.5] şi Y=[-0.5 -3 4],
atunci mod(X,Y) este [ 0 0 3.5], iar rem(X,Y) este [0 0 -0.5], dar mod(Y,X)
este [1 6 -0.5], iar rem(Y,X) este [-0.5 -3 4]. Considerând X1=[2.5 6 –7] şi
Y1=3, atunci rem(X1,Y1) este [2.5 0 -1], iar rem(Y1,X1) este [0.5 3 3], pe
când mod(X1,Y1) este [2.5 0 2], iar mod(Y1,X1) este [0.5 3 -4].
Funcţia sign(x) asociază fiecărui element al vectorului x elementele –1, 0, 1,
1, x > 0

după următoarea regulă: sign(x ) = 0, x = 0 . Dacă x este complex, atunci
- 1 x < 0

sign(x)=x./abs(x).

8.6. Funcţii pentru aflarea unor numere importante


Factorii primi ai unui număr natural pozitiv N, alţii decât 1, sunt calculaţi
cu funţia factor(N). Dacă N=33, atunci factor(N), găseşte ca factori primi 3 şi 11.
Generarea unei liste cu toate numerele prime mai mici sau egale cu un
număr natural pozitiv N (altele decât 1), se face prin utilizarea funcţiei primes(N).
Dacă N=33, atunci primes(33), produce lista,
ans =
2 3 5 7 11 13 17 19 23 29 31,
care conţine toate numerele prime mai <=N.
Verificarea dacă, un număr natural N sau un element dintr-un vector sau
matrice este prim, se realizează prin utilizarea funcţiei isprime( N), la care se
Funcţii matematice în Matlab 177

obţine răspunsul 1 atunci când este prim şi 0, altfel. De exemplu, pentru


isprime(31) se obţine 1, iar pentru isprime(33) se obţine 0.
Calculul celui mai mare divizor comun G, a două numere întregi a şi b,
se obţine prin utilizarea funcţiei G=gcd(a,b). Pentru a=2310 şi b=273, funcţia
gcd(a,b) găseşte 21, care este cel mai mare divizor comun.
Calculul celui mai mic multiplu comun M, a două numere întregi a şi b,
se realizează prin utilizarea funcţiei M=lcm(a,b). Pentru a=2310 şi b=273, funcţia
lcm(a,b) se găseşte 30030, care este cel mai mic multiplu comun.
Numărul tuturor combinaţiilor a N elemente, luate câte K (K<=N),
respectiv a coeficienţilor binomiali, se află cu instrucţiunea nchoosek(N,K), care
calculează N!/(K!(N-K)!). Pentru N=9 şi K=3, prin nchoosek(N,K), se obţine 84,
iar pentru N=3, K=2, se obţine 3.
Găsirea tuturor permutărilor posibile (fără repetiţie), a numerelor naturale
dintre 1 şi un număr oarecare N (N<15), se obţine cu funcţia perms(1:N), care
are ca rezultat o matrice cu N! linii şi N coloane, conţinând toate permutările
posibile.
Pentru N=3, prin perms(1:3) se obţine:
ans =
3 2 1
2 3 1
3 1 2
1 3 2
2 1 3
1 2 3.
Funcţia factorial(N) realizează produsul tuturor întregilor de la 1 la N, fiind
similară cu funcţia prod(1:N) şi realizând produsul 1*2* … *N. Pentru numere în
dublă precizie, care au peste 15 digiţi, rezultatul este corect pentru N<=21, iar
pentru N>21 sunt corecte primele 15 semne (digiţi). De exemplu, factorial(4) este
1*2*3*4=24.

8.7. Funcţii matematice speciale

8.7.1. Funcţia Gamma, Gamma incompletă


Funcţia Gamma sau funcţia lui Euler de speţa a doua, poate fi definită prin:

• ∫
integrala Γ( x ) = t x −1e −t dt , unde x ∈ ℜ ,
0
sau
178 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

1 x ⋅ ( x + 1) ⋅ ( x + 2 )K ( x + n )
• prin limita şirului = lim .
Γ( x ) n → ∞ n!⋅n x
Principalele proprietăţi ale funcţiei Gamma sunt:
• dacă argumentul x este un întreg, atunci funcţia Gamma este identică cu
funcţia factorial, respectiv n!= Γ(n + 1) ;
• pentru orice z finit, este satisfăcută relaţia de recurenţă Γ( x + 1) = xΓ( x ) ;
• cunoscând valoarea pentru x > 1, valorile pentru x < 1 se determină din
π π ⋅x
ecuaţia complementelor Γ(1 − x ) = = ;
Γ( x )sin (π ⋅ x ) Γ( x + 1)sin (π ⋅ x )
1 1
• pentru x = funcţia Γ  = π .
2 2
În Matlab, funcţia Gamma se apelează cu sintaxa y=gamma(x), unde x este
argumentul iar y este valoarea calculată. Pentru x=2.5 se obţine 1.3293, iar pentru
x=–0.5 se obţine -3.5449.
Pentru x>0 se poate calcula logaritmul natural al funcţiei Gamma cu
instrucţiunea gammaln(x), care corespunde lui log(gamma(x)), însă calculul se
face printr-o metodă directă, fără a calcula gamma(x).
Funcţia Gamma incompletă, gammainc(x,a), este definită de relaţia,
x
1
P ( x, a ) = ∫
Γ( a ) 0
e −t t a−1dt , a > 0, a ∈ ℜ + x ∈ ℜ ,

şi are limitele: P (0, a ) = 0, P (∞, a ) = 1 .


Pentru x=1.25 şi a=0.5, cu gammainc(1.25,0.5) se obţine 0.8862.

Pentru x=[0:0.1:15] şi diverse valori ale lui a, funcţia Gamma incompletă se


obţine prin instrucţiunile:
g_05=gammainc(x,0.5); g_1=gammainc(x,1);
g_3=gammainc(x,3); g_10=gammainc(x,10),
iar valorile sunt prezentate în figura 8.1.
Complementul funcţiei P(x,a), notată cu Q(x,a), este de multe ori confundată
cu funcţia gamma incompletă,
x
Γ( x, a ) 1
Q ( x , a ) = 1 − P ( x, a ) =
Γ( a)
= ∫
Γ( a ) x
e −t t a−1dt , a > 0, a ∈ ℜ + x ∈ ℜ

şi are limitele,
Q(0, a ) = 1, P(∞, a) = 0 .
Funcţii matematice în Matlab 179

Fig. 8.1. Funcţia Gamma incompletă pentru diverse valori ale lui a şi x

8.7.2. Funcţiile Beta şi Beta incompletă


Funcţia Beta, B ( p, q ) , sau funcţia lui Euler de prima speţă, de variabile
complexe p şi q, poate fi definită prin integrala,
1
q −1
B( p, q ) = ∫ t p −1 (1 − t ) dt ,
0

convergentă pentru ℜ( p ) > 0 , ℜ(q ) > 0 .

Principalele proprietăţi ale funcţiei Beta sunt:


• funcţia Beta, B ( p, q ) , este simetrică în raport cu p şi q, B ( p, q ) = B(q, p ) ,
obţinută prin schimbarea de variabilă 1 − t = τ , astfel că
0 1
B( p, q ) = − ∫ (1 − τ ) τ p dτ = ∫ τ q (1 − τ ) dτ = B(q, p ) ;
p p

1 0
180 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

• între funcţiile lui Euler B ( p, q ) şi Γ(z ) există relaţia


Γ( p )Γ(q )
B ( p, q ) = ;
Γ( p + q )
• pentru funcţia lui Euler de prima speţă avem egalitatea,
Γ ( p )Γ(q + 1) Γ ( p + 1)Γ(q )
pB( p, q + 1) = p =q = qB ( p + 1, q ) .
Γ( p + q + 1) Γ( p + 1 + q )

În Matlab, funcţia Beta se apelează cu sintaxa b=beta(p,q), unde p şi q sunt


argumentele, iar b este valoarea calculată. Pentru p=0.5 şi q=1.5 se obţine 1.5708.
Pentru x>0 se poate calcula logaritmul natural al funcţiei beta, cu
instrucţiunea betaln(p,q), care corespunde lui log(beta(p,q)), însă calculul se face
printr-o metodă directă, fără a calcula beta(p,q). Pentru p=0.5 şi q=1.5 se obţine
0.4516.
Funcţia Beta incompletă, betainc(x,p,q), este definită de relaţia,

x p (1 − x )  B( p + 1, n + 1) n+1 
x q
1 ∞

 ∑ B( p + q, n + 1) x 
q −1

B( p, q) ∫0
B inc ( x, p, q ) = t p −1
(1 − t ) dt = 1 +
pB( p, q )  n =0 
cu,
p, q > 0, p,q ∈ ℜ + x ∈ [0,1]
şi limitele:
B inc (0, p, q ) = 0 , B (∞, p, q) = 1 .
inc

Pentru x=[0:0.01:1] şi diverse valori ale lui p şi q, funcţia Beta incompletă se


obţine prin:
b1=betainc(x,0.5,5), b2=betainc(x,1,3),
b3=betainc(x,8,10), b4=betainc(x,0.5,0.5),
iar graficul este prezentat în figura 8.2.
Pentru calculul funcţiei Beta incompletă se utilizează algoritmul din funcţia
betacore, apelată în betainc(x,a,c) prin instrucţiunea betacore(x,a,b).
Funcţii matematice în Matlab 181

Fig. 8.2. Funcţia Beta incompletă pentru diverse valori ale lui p, q şi x

8.7.3. Funcţiile lui Bessel


Printre funcţiile speciale, deosebit de importante sunt funcţiile lui Bessel,
deoarece se întâlnesc în diverse probleme din mai toate domeniile fizicii şi ale
tehnicii.
Ecuaţia diferenţială
( )
x 2 y ′′( x) + xy ′( x) + x 2 − ν 2 y ( x) = 0 ⇔
2
d y ( x) dy ( x)
x2
dx 2
+x
dx
( )
+ x 2 − ν 2 y ( x) = 0
unde ν este un parametru real sau complex, se numeşte ecuaţia lui Bessel, iar
soluţiile acestei ecuaţii se numesc funcţii Bessel.
Funcţiile Bessel se mai numesc şi funcţii cilindrice datorită faptului că apar
la rezolvarea ecuaţiei lui Laplace în coordonate cilindrice, în problemele la limită
din teoria potenţialului (electric, termic, chimic).
Soluţia generală a ecuaţiei lui Bessel pentru ν ≠ n întreg este
y = C1 Jν ( x) + C 2 J −ν ( x)
unde C1 şi C2 sunt constante arbitrare, iar Jν şi J-ν sunt funcţiile Bessel de speţa întâi
şi ordinul ν, respectiv –ν.
Funcţia Bessel de speţa întâi şi ordinul ν, pentru o valoare x, din domeniul de
182 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

olomorfie (x)-T, unde T este o semidreaptă cu originea în x=0, este dată de relaţia
ν +2 p
 x
∞  
Jν ( x) = ∑ (− 1)
p 2 .
p =0 p!Γ(ν + p + 1)
Între funcţiile Bessel cu indici de semne contrare, Jν şi J-ν, există relaţia
J −ν ( x) = (− 1) Jν ( x) .
n

În Matlab, funcţia Bessel de speţa întâi şi ordinul niu (ν) real, pozitiv şi
argumentul x se calculează cu instrucţiunea J=besselj(niu,x). Dacă x şi niu sunt
vectori de dimensiunile m şi respectiv n, atunci J va fi o matrice cu dimensiunea
mxn, în care elementul din poziţia (j,k) este dat de J(j,k)=besselj(niu(j),x(k)), cu
j=1,…,m<=1000, iar k=1,…,n.
O variantă veche de apelare a funcţiei Bessel de speţa întâi şi ordinul niu (ν)
real, pozitiv şi argumentul x era bessela(niu,x).

În figura 8.3 se prezintă grafic valorile funcţiei Bessel de speţa întâi şi de


ordinele –2,-1,0, 1, 2, pentru argumentul x variind între 0 şi 20, cu decrementul 0.1,
calculate cu secvenţa de program:
x=0:0.1:20; niu=[-2 -1 0 1 2]; J_2=besselj(-2,x); J_1=besselj(-1,x);
J0=besselj(0,x); J1=besselj(1,x); J2=besselj(2,x);
plot(x,J_2,'r-',x,J_1,'b:',x,J0,'g.',x,J1,'y-.',x,J2,'c--');grid

Soluţia generală a ecuaţiei lui Bessel pentru ν = n întreg este


y = C1 J n ( x) + C 2Yn ( x)
unde C1 şi C2 sunt constante arbitrare, Jn este funcţia Bessel de speţa întâi şi ordin n
iar Yn este funcţia Bessel de speţa a doua şi ordinul n, numite şi funcţiile lui
Neumann, astfel că uneori sunt notate cu Nn.
2 x 1 n−1 (n − k − 1)! 2 k −n
Pentru n întreg şi pozitiv Yn ( x) = J n ( x ) ln − ∑ 2 k −n x , iar
3 2 π k = 0 2 k!
J ( x )cos nx − J − n ( x )
pentru n neîntreg este o combinaţie liniară, Yn ( x) = n .
sin nx
Funcţiile Bessel de speţa întâi, Jν(x), şi speţa a doua, Y-ν (x), sunt linear
independente oricare ar fi ν.
De menţionat că functiile Bessel de speţa a doua (funcţiile Neumann) sunt
definite şi pentru valori negative ale lui n, iar între acestea există relaţia
Y− n ( x) = (− 1) Yn ( x) .
n

În Matlab, funcţiile Bessel de speţa a doua (funcţiile Neumann) sunt


calculate cu instrucţiunea Y=bessely(niu,x), unde niu este ordinul, iar x ordonatele
Funcţii matematice în Matlab 183

punctelor unde se evaluază funcţia Neumann.

Fig. 8.3. Funcţiile Bessel de speţa întâi şi ordin întreg

Funcţiile Bessel de prima speţă (numite de multe ori de primul sau întâiul
ordin) şi speţa a doua (numite şi de ordinul doi) sunt asemănătoare cu funcţiile
trigonometrice şi, de fapt, funcţia Jν(x) corespunde lui cos(x) şi funcţia Yν(x)
corespunde lui sin(x). Aceasta sugerează deci să se definească pentru funcţiile
cilindrice, funcţii care sunt legate de Jν şi Yν în acelaşi mod cum funcţiile
exponenţiale sunt legate de cele trigonometrice, adică
H ν(1) ( x) = Jν ( x) + iYν ( x ), Hν(2 ) ( x) = Jν ( x) − iYν ( x ),
unde i este unitatea imaginară.
Funcţiile Hν(1) ( x ), Hν( 2 ) ( x) se numesc funcţiile lui Bessel de speţa a treia
(sau de ordinul trei) sau funcţiile lui Hankel. Acestea sunt cunoscute ca funcţiile
Hankel de speţa întâi , Hν(1) ( x ) , respectiv de speţa a doua, Hν(2 ) ( x ) .
Dacă ν ≠ n întreg, atunci
Jν ( x )e − iνπ − J −ν ( x ) J ( x )e iνπ − J −ν ( x )
Hν(1) ( x) = i , H ν( 2 ) ( x ) = −i ν .
sin νπ sinνπ
Schimbând pe ν în − ν , rezultă evident,
H −(1ν) ( x) = e iνπ Hν(1) ( x) , H −(ν2 ) ( x) = e − iνπ Hν(2 ) ( x) .
184 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

În Matlab, funcţiile Bessel de ordinul trei sau funcţiile lui Hankel sunt
calculate cu instrucţiunea H=besselh(niu,k,z), unde niu este ordinul, k este ordinul
sau speţa (k=1 pentru speţa întâi şi k=2 pentru speţa a doua), iar x ordonatele
punctelor unde se evaluază funcţia Hankel.
Valorile funcţiilor Bessel pentru valori foarte mici ale argumentului (|x|<<1)
sunt:
2 4
 x 1 x xn
J 0 (x ) ≈ 1 −   +   ≅ 1 ; J n (x ) ≈ n ;
 2 4 2 2 Π (n )
2 x   1 1 1 
Y0 ( x ) ≈  ln + ln γ ; lnγ = lim1 + + + ... + − ln n  = 0.57722;
π 2  n →∞
 2 3 n 
2 n (n − 1)!
Yn ( x ) ≈ − , n∈ N, n > 0,
x nπ
în care lnγ este constanta Euler-Mascheroni.
Comportarea funcţiilor Bessel pentru valori foarte mari ale argumentului
( x → ∞ ) este dată de formulele asimtotice:
2  π π
J n (x ) ≈ cos x − − n , |x|≅1;
xπ  4 2
2  π π
Yn ( x ) ≈ sin  x − − n , |x|≅1;
xπ  4 2
 π π  π π
2 j  x − 4 − n 2  2 − j  x − 4 − n 2 
H n1 ( x ) ≈ e , H n2 ( x ) ≈ e , |x|≅1.
xπ xπ
Pentru funcţiile lui Bessel sunt valabile următoarele formule de recurenţă:
2n 2n
J n+1 ( x ) = J n ( x ) − J n−1 ( x ), Yn+1 ( x ) = Yn ( x ) − Yn−1 ( x ) ,
x x
d n n
J n ( x ) = J n′ ( x ) = J n ( x ) − J n+1 ( x ) = J n−1 ( x ) − J n ( x ) , J 0′ ( x ) = − J 1 ( x ) ,
dx x x
d n n
Yn ( x ) = Yn′( x ) = Yn ( x ) − Yn+1 ( x ) = Yn−1 ( x ) − Yn ( x ) , Y0′( x ) = −Y1 ( x ) ,
dx x x
1 1 2
J 1 ( x ) = ∫ xJ 0 ( x )dx , Y1 ( x ) = ∫ xY0 ( x )dx , J 02 ( x ) + J 12 ( x ) = 2 ∫ xJ 02 ( x )dx ,
x x x
 n(n − 1) 
2
d 1
2
J n ( x ) = J n′′( x ) =  2
− 1 J n ( x ) + J n+1 ( x ) ,
dx  x  x
Funcţii matematice în Matlab 185

d2  n(n − 1)  1
Y ( x ) = Yn′′( x ) = 
2 n 2
− 1Yn ( x ) + Yn+1 ( x ) .
dx  x  x
Dacă ordinul funcţiei Bessel este un multiplu impar al lui 1/2, atunci funcţia
Bessel de prima speţă (ordinul întâi) poate fi exprimată, sub formă compactă, cu
ajutorul funcţiilor trigonometrice elementare şi al puterilor negative, întregi şi
fracţionale, ale lui x,

2 2
J 1 (x ) = sin x, J 1 ( x ) = cos x,
2
xπ −
2

2 1  2  1 
J 3 (x ) =  sin x − cos x , J 3 ( x ) = −  sin x + cos x ,
2
xπ  x  −
2
xπ  2 
2  1 1  1 1
J 1 (x ) =  An  x  sin x + Bn  x  cos x  , n întreg, iar An  , Bn   sunt
n+
2
xπ        x  x
1
polinoame în de grad cel mult n.
x

Liouville a arătat că acestea sunt singurele funcţii Bessel care pot fi


exprimate prin funcţii elementare, iar toate celelalte sunt funcţii transcendente noi.
Funcţiile Bessel de prima speţă şi de ordin întreg pot fi reprezentaţi printr-o
integrală definită. Astfel,
2π 2π π
1 1 1
J n (x ) = ∫e ∫e ∫ cos(x sin θ − nθ )dθ ,
ix cosθ inθ ix sin θ −inθ
e dθ = e dθ =
i 2π
n
0
2π 0
π 0
π
π 2 1
1 2 2 cos ux
J 0 (x ) =
π ∫ cos(x sin θ )dθ =
0
π ∫ cos(x sin θ )dθ =
0
π∫ 0 1 − u2
du .

De asemenea, funcţiile Bessel de prima speţă şi de ordin întreg, J n ( x ) ,


x 1
ζ − 
2  ζ 
1 e
admit reprezentarea J n ( x ) =
i 2π ∫
C
ζ n+1
dζ , unde C este un cerc cu centrul în

punctul ζ = 0 sau o curbă simplă închisă care înconjură acest punct.


186 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

8.7.4. Dezvoltarea în serie de funcţii Bessel a unei funcţii


oarecare. Ortogonalitatea funţiilor Bessel de prima speţă
şi zerourile lor.
Se poate demonstra că o funcţie oarecare poate fi exprimată sub forma

f ( x ) = ∑ aν J n (ξν x ) , cu 0 ≤ x ≤ 1 , adică poate fi exprimată cu ajutorul unui
ν =1
număr mare de funcţii Bessel de ordinul n. În această expresie ξ1 , ξ 2 , ... ξν ,... sunt
rădăcinile funcţiei J n (ξ ) ordonate după mărime (n>-1), n fiind număr real.
Dacă n este real n>-1, toate zerourile funcţiei J n ( x ) sunt reale, întrucât seria
corespunzătoare are toţi coeficienţii reali. Funcţia J n ( x ) = 0 , cu n real, are o
infinitate de rădăcini reale.
Valorile coeficienţilor le obţinem în modul obişnuit, înmulţind ambii
membrii ai egalităţii cu o asemenea funcţie, încât în membrul drept al egalităţii,
integrând în domeniul 0 ≤ x ≤ 1 , valoarea numai a unei singure integrale să rezulte
diferită de zero. În acest fel, poate fi determinat coeficientul corespunnzător
termenului respectiv.
Funcţiile x J n (ξ1 x ),
x J n (ξ 2 x ), ... x J n (ξν x ), ... , 0 ≤ x ≤ 1 , formează
o mulţime de funcţii ortogonale în domeniul 0 ≤ x ≤ 1 , adică,
1 1


0
x J n (ξ i x ) x J n (ξ k x )dx = ∫ xJ n (ξ i x ) J n (ξ k x )dx = 0, i ≠ k .
0
Coeficienţii dezvoltării în serie
f ( x ) = a1 J n (ξ1 x ) + a2 J n (ξ 2 x ) + ... + an J n (ξ n x ) + ...
îi putem obţine prin înmulţirea ambilor membrii cu funcţia xJ n (ξν x ) , integrând de
la 0 la 1 şi ţinând seama de relaţia de ortogonalitate,
1

∫ xJ (ξ x ) J (ξ x )dx = 0, i ≠ k , astfel că termenii din membrul drept vor fi nuli,


0
n i n k

cu excepţia unuia singur.


Prin urmare, coeficientul alν -lea al dezvoltării în serie este:
1
2
J n′ 2 (ξν ) ∫0
aν = f ( x) xJ n (ξν x )dx .

8.7.5. Funcţiile Bessel modificate


În practică, nu obţinem direct formele canonice ale ecuaţiilor Laplace în
coordonate cilindrice,
Funcţii matematice în Matlab 187

d 2 y ( x) 1 dy ( x)  n 2 
+ + 1 − 2  y ( x) = 0 ⇔
dx 2 x dx  x 
d 2 y ( x) dy ( x) d  d 
x2
dx 2
+x
dx
( )
+ x 2 − n 2 y ( x) = 0 ⇔ x  x  + x 2 − n 2 y ( x) = 0
dx  dx 
( )
ci, în general, trebuie să rezolvăm ecuaţii diferenţiale de forma:
d 2 y ( x) 1 dy ( x)  n2 
+ +  k − 2  y ( x) = 0 ,

dx 2 x dx  x 
care, cu schimbarea de variabilă z = kx ,se reduce la forma canonică.
Soluţia generală a ecuaţiei anterioare se poate scrie sub forma
y = C1 J n (kx) + C 2 J −n (kx) sau y = C1 J n (kx) + C 2Yn (kx) , care, pentru n şi x ,iau
valori complexe.
Pentru cazul paricular k 2 = −1 , ecuaţia anterioară devine
d 2 y ( x) 1 dy ( x)  n2 
+ + 
 − 1 −  y ( x) = 0 ,
dx 2 x dx  x 2 
având soluţia generală de forma,
y = C1I n ( x) + C2 K n ( x) ,
unde I n (x ) este funcţia Bessel modificată de speţa întâi, iar K n ( x ) este funcţia
Bessel modificată de speţa a doua.
Aceste funcţii modificate sunt echivalentele funcţiilor Bessel J n ( x ) şi
Yn ( x) , care diferă printr-un factor constant şi sunt date de expresiile,
I n ( x) = i − n J n (ix ) ≡ (− i ) J n (ix ),
n

π π
K n ( x) = i n+1 [J n (ix ) + iYn (ix )] = [I −n (x ) − I n (x )] ,
2 2 sin nπ
fiind denumite, din această cauză şi funcţiile Bessel de argument pur imaginar.
În Matlab, aceste funcţii sunt calculate cu formula bi=besseli(n,x) şi
bk=besselk(n,x), unde n este ordinul, iar x este argumentul pur imaginar.
Pentru x pur imaginar, având valorile modulului x=[0:0.1:4], se reprezintă în
figura 8.4, funcţiile Bessel modificate de speţa întâi (I) şi a doua (K), de ordinul
n=0,1,2, calculate cu secvenţele Matlab:
x =[0:0.001:3.5]; I_0=besseli(0,x); I_1=besseli(1,x); I_2=besseli(2,x);
x1=[0.01:0.001:3.5]; K_0=besselk(0,x1);
x2=[0.125:0.001:3.5]; K_1=besselk(1,x2);
x3=[0.5:0.001:3.5]; K_2=besselk(2,x3);
plot(x,I_0,x,I_1,'-.',x,I_2,'--',x1,K_0,x2,K_1,'-.',x3,K_2,'--').
188 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

Fig. 8.4. Funcţiile Bessel modificate

Dacă comportarea funcţiilor Bessel de speţa întâi şi a doua seamănă cu aceea


a funcţiilor care descriu mişcarea oscilatorie amortizată, (ceea ce a reieşit şi din
faptul că pentru valori foarte mari ale argumentului ele pot fi înlocuite cu funcţii
sinus, respectiv cosinus de amplitudine descrescătoare), comportarea funcţiilor
Bessel modificate se aseamănă cu aceea a funcţiilor exponenţiale.
Valorile funcţiilor Bessel modificate, pentru valori foarte mici ale
argumentului (|x|<<1) sunt:
2 4 n
 x 1 x 1  x
I 0 (x ) ≈ 1 −   +   ≅ 1; I n (x ) ≈   , n > 0 ;
 2 4 2 n!  2 
xγ 2 n−1 (n − 1)!
K 0 ( x ) ≈ − ln , ln γ = 0.57722; K n ( x ) ≈ − , n∈ N, n ≠ 0 ,
2 xn
în care lnγ este constanta Euler-Mascheroni.
Comportarea funcţiilor Bessel modificate, pentru valori foarte mari ale
argumentului ( x → ∞ ) este dată de formulele asimtotice:
ex π −x
I 0 (x ) ≈ , K 0 (x ) ≈ e , |x|≅1;
2 xπ 2x
Funcţii matematice în Matlab 189

I1 ( x ) 1 K1 ( x ) 1
≈ 1− , ≈ 1+ , |x|≅1.
I 0 (x ) 2 x K 0 (x ) 2x
Pentru funcţiile Bessel modificate, sunt valabile următoarele formule de
recurenţă:
2n 2n
I n+1 ( x ) = − I n ( x ) + J n−1 ( x ), K n+1 ( x ) = K n ( x ) + K n−1 ( x ) , K 0′ ( x ) = − K1 ( x ) ,
x x
d 1 1
I 0 ( x ) = I 0′ ( x ) = I1 ( x ) , I1 ( x ) = ∫ xI 0 ( x )dx , K1 ( x ) = ∫ xK 0 ( x )dx .
dx x x
Verificarea argumentelor funcţiilor Bessel se face cu besschk, apelată sub
forma [MSG,n,x,SIZ] = besschk(n,x), în care în MSG se întoarce un mesaj
referitor la n şi x, specificând dacă sunt numere şi dacă sunt reale, iar în SIZ se
specifică dacă au aceeaşi dimensiune, concomitent cu un mesaj dacă nu au.

8.7.6. Funcţiile lui Thomson


Pe lângă funcţiile lui Bessel, de argument pur real sau pur imaginar, întâlnim
1 π 3
i
şi funcţii de ordinul zero şi de argument i x (respectiv xe ) sau i 2 x (respectiv
2 4

π
i
ixe 4 ), a căror valoare este în general complexă.
Pentru aceste funcţii, cu aplicaţii practice deosebite în electrotehnică, se
folosesc notaţiile introduse de W. Thomson (lord Kelvin):
 i π4   iπ4 

ber ( x) + ibei( x) = J 0  ixe  = I 0  xe  ,

   
 i

  i π4 
ker ( x) + ikei( x) = K 0  − ixe  = K 0  xe  .
 4 

   
 i π4  ∞ p 1  x  2 p
Ţinând seama de I n ( x) = i J n (ix ), avem I 0  xe  = ∑ i
−n
  p=0 ( p!)2  2  ,
 
astfel că:
4 8
 32   12  1  x 1  x
ber ( x) = Re J 0  i x  = Re J 0  i x  ≈ 1 −   +   − ... ,
    (2!)2  2  (4!)2  2 
2 6 10
 32   12  1 x 1  x 1  x
bei( x) = Im J 0  i x  = − Im J 0  i x  ≈ 2   − 2   + 2   − ...
    (1!)  2  (3!)  2  (5!)  2 
Curbele funcţiilor ber(x) şi bei(x) sunt prezentate în figura 8.5 şi sunt
190 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

calculate în Matlab cu instrucţiunile:


x=[0:0.1:10]; ber=real(besselj(0,i^0.5*x)); bei=imag(besselj(0,i^1.5*x));
plot(x,ber,'-.',x,bei); xlabel('x'); ylabel('Functiile lui Thomson').
Prin definiţie, ber(x) şi bei(x) se numesc funcţiile lui Thomson.
Acestea se generalizează pentru ν oarecare prin egalităţile:
 ±i 34π 
berν ( x) ± ibeiν ( x) = Jν  xe ,

 
 ±i



kerν ( x) ± ikeiν ( x) = Kν  − ixe 4 ,

 

 ±i 34π 
her ( x) + ihei( x) = Hν  xe
(1)
.

 

Fig. 8.5. Funcţiile lui Thomson ber(x) şi bei(x)


Funcţii matematice în Matlab 191

8.7.7. Funcţia Airy


Pe lângă funcţiile lui Bessel, de argument pur real sau pur imaginar, întâlnim
şi funcţiile Airy, definite astfel:
• W = airy(Z) - funcţia Airy, Ai(z), a elementelor Z;
• W = airy(0,Z) – identică cu airy(Z);
• W = airy(1,Z) – derivate funcţiei Airy, Ai'(z);
• W = airy(2,Z) – funcţia Airy de speţa a doua, Bi(z);
• W = airy(3,Z) – derivate funcţiei Airy de speţa a doua, Bi'(z).
Dacă argumentul Z este o matrice, rezultatul este de acelaşi tip.
Sub forma [W,IERR] = airy(K,Z), returnează în IERR şi informaţii
referitoare la rezultatul calculelor. Astfel:
• ierr = 1 argument illegal (Illegal arguments);
• ierr = 2 depăşire spre infinit (Overflow. Return Inf.);
• ierr = 3 acurateţe inadecvată (Some loss of accuracy in argument
reduction)
• ierr = 4 rezultatele sunt inadecvate (Complete loss of accuracy, z too
large);
• ierr = 5 nu este convergentă (No convergence. Return NaN).
Relaţiile dintre funcţiile Airy şi Bessel modificate sunt:
1 z
Ai(z) = ⋅ ⋅ K −1 / 3 (ζ )
π 3
z
Bi(z) = ⋅ (I −1 / 3 (ζ ) + I1 / 3 (ζ ))
3
3
2
unde: ζ = ⋅ z 2 .
3
În Matlab, relaţiile sunt:
Ai(z) = 1/pi*sqrt(z/3)*K_1/3(zeta)
Bi(z) = sqrt(z/3)*(I_-1/3(zeta)+I_1/3(zeta))
unde zeta = 2/3*z^(3/2).

8.7.8. Funcţia eroare


Funcţia eroare, erf(x), şi complementara funcţiei eroare, erfc(x), sunt cazuri
speciale ale funcţiei Gamma incomplete, definite prin relaţiile:
x
2 2
erf(x) = ⋅ ∫ e −t dt = P( x 2 ,0.5) ,
π 0
192 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

x
2 2
erfc(x) = ⋅ ∫ e −t dt = 1 − erf(x )
π 0
2
în care P ( x ,0.5) este funcţia Gamma incompletă, iar argumentul x trebuie să fie
real şi x ≥ 0.
Funcţia eroare şi complementara acesteia au limitele,
erf(0) = 0 , erf(∞) = 1 , erfc(0) = 1 , erfc(∞) = 0 ,
şi respectă relaţiile de simetrie :
erf(-x) = −erf(-x) , erfc(-x) = 2 − erfc(x) .
Calculul valorii funcţiei eroare genaralizate, pentru x şi y scalar, vector sau
matrice se face cu relaţia:
y
2 2
erf(x) = ⋅ ∫ e −t dt = erf(y) − erf(x ) .
π x

Inversa funcţiei eroare, erfinv(y), returnează valoarea x pentru valori


cunoscute ale argumentului y şi se apelează cu sintaxa x=erfinv(y). Valorile lui y
trebuie să fie în intervalul [-1 1], iar x rezultă în intervalul (- ∞, + ∞ ) .
Funcţia eroare, acoperitoare pentru fiecare argument x este:
2
erfcx(x) = e x ⋅ erf(x) ,
1 1
care, pentru x foarte mare, este aproximată cu .

π x

8.7.9. Funcţia integrală exponenţială


Funcţia integrală exponenţială, expint, pentru fiecare element x>0, este
definită prin:

e −t
expint(x) = ∫ dt .
x
t
O altă definiţie a funcţiei integraleexponenţială este valoarea principală a
integralei Chauchy, notată Ei şi definită prin:
x
e −t
Ei(x) = ∫ t dt .
−∞
Relaţia dintre cele două definiţii este:
expint(-x+i*0) = -Ei(x) - i*pi, pentru x > 0
Ei(x) = real(-expint(-x)), pentru x > 0.
Funcţii matematice în Matlab 193

8.7.10. Polinoamele şi funcţiile Legendre asociate


În coordonate carteziene x, y, z, ecuaţia lui Laplace ∆u = div grad u = 0 ,
se scrie,
∂2 u ∂2 u ∂2 u
+ + = 0,
∂ x2 ∂ y2 ∂ z 2
iar în coordonate sferice, r, θ , ϕ , această ecuaţie are forma,
1 ∂  ∂U  1 ∂2 U ∂  2 ∂ U 
⋅ ⋅  sin θ ⋅  + ⋅ + ⋅r ⋅  = 0,
sin θ ∂ θ  ∂ θ  sin 2 θ ∂ ϕ 2 ∂ r  ∂r 
unde:
U (r , θ , ϕ ) = u (r ⋅ sin θ ⋅ cos ϕ , r ⋅ sin θ ⋅ sin ϕ , r ⋅ cos θ )
este funcţia obţinută din u ( x, y, z ) prin schimbarea coordonatelor carteziene în
sferice,
x = r ⋅ sin θ ⋅ cos ϕ , y = r ⋅ sin θ ⋅ sin ϕ , z = r ⋅ cosθ .

Funcţiile u ( x, y, z ) , omogene în x, y, z, care satisfac ecuaţia lui Laplace se


numesc funcţii sferice. Gradul de omogenitate al funcţiei u ( x, y, z ) se numeşte şi
ordinul funcţiei sferice.
Dacă u ( x, y, z ) este o funcţie sferică de ordinul n, datorită omogenităţii,
avem
U (r ,θ , ϕ ) = r n ⋅ u (r ⋅ sin θ ⋅ cos ϕ , r ⋅ sin θ ⋅ sin ϕ , r ⋅ cosθ ) = r n ⋅ Fn (θ ,ϕ ) ,
care, introdusă în ecuaţia lui Laplace, scrisă în coordonate sferice şi simplificând cu
r n , conduce la:
1 ∂  ∂F  1 ∂ 2 Fn
⋅ ⋅  sin θ ⋅ n  + ⋅ + n ⋅ (n + 1) ⋅ Fn = 0 .
sin θ ∂ θ  ∂ θ  sin 2 θ ∂ ϕ 2

Funcţiile Fn (θ ,ϕ ) , care verifică ecuaţia Laplace de mai sus, se numesc


funcţii sferice superficiale de ordinul n, deoarece pe sfera cu centrul în origine şi de
rază r = 1 avem:
U (1,θ , ϕ ) = Fn (θ , ϕ ) .
Fiecărei funcţii sferice u ( x, y, z ) = U (r ,θ ,ϕ ) de ordinul n îi corespunde o
funcţie sferică superficială Fn (θ ,ϕ ) şi, reciproc, fiecărei funcţii sferice
superficiale Fn (θ ,ϕ ) îi corespunde o funcţie sferică
u ( x, y, z ) = U (r ,θ ,ϕ ) = r n ⋅ Fn (θ , ϕ )
de acelaşi ordin n.
194 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

De menţionat că schimbarea lui n în p = − n − 1 , lasă ecuaţia anterioară


neschimbată şi prin urmare, dacă U (r ,θ , ϕ ) = r n ⋅ Fn (θ , ϕ ) este o funcţie sferică,
atunci şi funcţia U 1 (r ,θ ,ϕ ) = r − n −1 ⋅ F− n −1 (θ ,ϕ ) este o funcţie sferică.

Polinoamele lui Legendre sau funcţiile lui Legendre de prima speţă sunt
funcţii sferice superficiale, care satisfac ecuaţia lui Laplace. Acestea sunt
polinoame de gradul n în x = cos α , conţinând numai puteri pare sau impare, după
cum n este par sau impar, iar semnele termenilor săi alternează:
n
E 
2
1 ⋅ 3 ⋅ 5L(2n − 2k − 1) n − 2 k
Pn (cos α ) = Pn ( x ) = ∑ (− 1)
k =0
k
⋅ Cnk− k ⋅
2 k (n − k )!
⋅x ,

 n  n

în care E  este partea întreagă a numărului
.

 2  2
De remarcat că, pentru α real, x ∈ [− 1, 1 ] .
Principalele proprietăţi ale polinoamelor lui Legendre sunt:
• pot fi exprimate prin formula Olinde-Rodrigues,
1 dn
Pn ( x ) =
2 n! d x
n n
( n
x2 − 1 , )
sau formula lui Schlafli, ca o integrală pe o curbă oarecare, C, închisă cu x,
un punct interior domeniului mărginit de C,
1 1 ζ 2 −1 ( )n

2 2π ⋅ i ∫C (ζ − x )n+1
Pn ( x ) = n ⋅ dζ ,

• satisfac relaţia de recurenţă, care permite determinarea tuturor


polinoamelor, când se cunosc două dintre ele, cu indici diferind printr-o
unitate,
(n + 1)Pn+1 − (2n + 1)xPn + nPn−1 = 0, n = 1,2,3L ,
• pentru x ∈ [− 1, 1 ] iau valori reale în intervalul [− 1, 1 ] ,
• au toate rădăcinile reale şi distincte, cuprinse în intervalul deschis (− 1 1 ) ,
• polinomul lui Legendre Pn ( x ) este o soluţie a ecuaţiei diferenţiale a lui
Legendre,
d
dx
[( ) ] (
x 2 − 1 y ' − n(n − 1) y = 0 ⇔ x 2 − 1 y"+2 xy '− n(n − 1) y = 0 ,)
• polinoamele lui Legendre formează un sistem de funcţii ortogonale pe
intervalul [− 1, 1 ] ,
Funcţii matematice în Matlab 195

1  0 pentru k ≠ n

∫−1 Pk (x ) ⋅ Pn (x ) ⋅ dx =  2 pentru k = n ,
 2n + 1
ceea ce permite să considerăm seria Fourier a unei funcţii f(x), integrabilă
şi cu pătratul integrabil pe [− 1, 1 ] , faţă de sistemul de funcţii format de

polinoamele Legendre, ∑ a n ⋅ Pn ( x ) cu coeficienţii Fourier generalizaţi
n=0
1
2n + 1
an =
2 ∫ f ( x ) ⋅ P (x ) ⋅ d x
−1
n

De menţionat că, polinomul lui Legendre Pn ( x ) , este o soluţie particulară a


( )
ecuaţiei lui Legendre, x 2 − 1 y"+2 xy '−n(n − 1) y = 0 .

Soluţia generală a ecuaţiei lui Legendre este


 x +1 
y = Pn ( x ) ⋅ z = C ⋅  Pn ( x ) ⋅ ln + K n−1 ( x ) + C1 ⋅ Pn ( x ) ,
 x −1 
x +1
în care polinoamele K n −1 ( x ) se determină dezvoltând funcţia ln în serie
x −1
de puteri.

x +1
Funcţiile Qn ( x ) = Pn ( x ) ⋅ ln + K n−1 ( x ) se numesc funcţiile lui
x −1
Legendre de speţa a doua. Aceste funcţii verifică, evident, ecuaţia lui Legendre şi
satisfac aceleaşi relaţii de recurenţă ca polinoamele lui Legendre.

Funcţiile lui Legendre asociate se construiesc folosind funcţiile lui


Legendre de prima speţă şi de speţa a doua şi sunt :
m
d m Pn ( x ) ,
(
Pn , m ( x ) = 1 − x 2 )
2
dx m
m
d m Q n (x ) ,
(
Q n ,m (x ) = 1 − x 2 ) 2
dx m
unde m şi n iau valorile 0, 1, 2, 3, …, iar m ≤ n .
Funcţiile lui Legendre asociate sunt soluţii ale ecuaţiei diferenţiale:
 m2 
( 2
)
1 − x y"−2 x ⋅ y '+ n(n + 1) − ⋅ y = 0
1− x2 

şi pot fi exprimate sintetic sub forma:
196 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

m
d m Pn ( x ) ,
m
(
Pn , m ( x ) = (− 1 ) ⋅ 1 − x 2 )
2
dx m
în care n este gradul, iar m este ordinul.

Calculul acestor funcţii se face în Matlab prin instrucţiunea


P=legendre(n,x), care permite calculul funcţiilor Legendre de gradul n şi ordinul
m=0, 1, …, n, evaluate pentru fiecare element x. De menţionat că n trebuie să fie
un scalar întreg n < 256, iar x ∈ [− 1, 1 ] , adică -1 <= x <= 1.
Dacă x este un vector cu lungimea L, atunci polinomul P este o matrice de
dimensiune (n+1)*L. Valoarea P(m+1,i) corespunde funcţiilor Legendre asociate
de gradul n şi ordinul m, evaluate în punctul x(i). În general, se returnează o
matrice care are numărul de coloane egal cu lungimea vectorului x, iar numărul de
linii egal cu ordinul sau mai mare cu 1 decât gradul. Fiecare linie conţine funcţiile
lui Legendre de gradul n şi ordinul corespunzând liniei evaluate, pentru fiecare
valoare x. Prima linie (rând) a matricei P returnate conţine polinoamele lui
Legendre de ordinul m=0.
De exemplu:
• legendre(2, 0.0:0.1:0.2) returnează matricea:

| x=0 x = 0.1 x = 0.2


------|---------------------------------------------
m = 0 | -0.5000 -0.4850 -0.4400
m=1| 0 -0.2985 -0.5879
m = 2 | 3.0000 2.9700 2.8800

• setul de instrucţiuni
X = rand(2,4,5); N = 2;
P = legendre(N,X);
returnează o matrice de 3*2*4*5 şi P(:,1,2,3) este la fel ca şi cel dat de
instrucţiunea legendre(N,X(1,2,3)).

Funcţia SP=legendre(n,x,’sch’) calculează funcţiile Schmidt semi-


normalizate, asociate funcţiilor Legendre, definite prin relaţia:
 Pn ( x ) pentru m = 0

SP n , m ( x ) = 
(− 1 )m ⋅ 2⋅
(n − m )! ⋅ P (x ) pentru m > 0
 (n + m )! n , m

De exemplu, instrucţiunea,
P=legendre(2,0:0.1:0.5)
conduce la,
P=
-0.5000 -0.4850 -0.4400 -0.3650 -0.2600 -0.1250
Funcţii matematice în Matlab 197

0 -0.2985 -0.5879 -0.8585 -1.0998 -1.2990


3.0000 2.9700 2.8800 2.7300 2.5200 2.2500
iar instrucţiunea,
P=legendre(2,0:0.1:0.5,'sch')
are ca rezultat,
P=
-0.5000 -0.4850 -0.4400 -0.3650 -0.2600 -0.1250
0 0.1723 0.3394 0.4957 0.6350 0.7500
0.8660 0.8574 0.8314 0.7881 0.7275 0.6495
de unde se observă diferenţa.

Pentru m=1 şi n=1, ecuaţia diferenţială de gradul doi devine:

(1 − x )y"−2 x ⋅ y'+ 2 − 1 −1x


2
2

 ⋅ y = 0 ,

iar soluţiile, pentru x=0:0.01:1 sunt calculate cu relaţia P1=legendre(2,x), pentru
funcţiile Legendre asociate şi relaţia P2=legendre(2,x,'sch'), pentru funcţiile
Schmidt seminormalizate, asociate funcţiilor Legendre.
Reprezentarea grafică este redată în figura 8.6.

P2
0.5

0
y

-0.5

P1

-1

-1.5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x

Fig.8.6. Soluţiile ecuaţiiei de gradul 2 cu funcţii Legendre


198 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

8.7.11. Funcţii eliptice Jacobi


Polinoamele lui Jacobi sunt de forma:
J n (x) =
1

( x − a ) (b − x )
−α β
dn
[(x − a ) α +n
(b − x )β + n ],
(a − b )n (α + 1 )(α + 2 )L (α + n ) d x n
unde α , β sunt două numere reale mai mari decât –1.
Polinomul lui Jacobi J n (x ) este o soluţie a ecuaţiei diferenţiale:
(x − a )(x − b ) ⋅ y"+[(α + 1)(x − b ) + (β + 1)(x − a )]⋅ y'−n(n + α + β + 1) ⋅ y = 0
Totodată, polinoamele lui Jacobi, cuprind drept cazuri particulare, alte
polinoame speciale, astfel:
• pentru α = 0, β = 0, a = −1, b = 1 se obţin polinoamele lui Legendre sub
forma Olinde-Rodrigues;
• dacă α = 0, β = b , se obţine polinomul lui Laguere, până la o constantă ;
b2
• pentru a = −b, α = β = , se obţin polinoamele lui Hermite ;
2
1
• pentru a = −1, b = 1, α = β = − , se obţin polinoamele lui Cebîşev.
2
În Matlab, funcţia [Sn,Cn,Dn] = ellipj(U,M, TOL), returnează valorile
funcţiilor eliptice SN, CN şi DN, evaluate pentru fiecare element al argumentului U
şi parametrului M, cu toleranţa TOL. Vectorii U şi M trebuie să aibă aceeaşi
dimensiune sau unul să fie scalar, iar M are limitele 0 <= M <= 1. Toleranţa poate
lipsi, fiind considerată implicit ca EPS.
Calculul integralei eliptice complete de speţa întâi, K, şi a doua, E, pentru
fiecare element M, cuprins în intervalul 0 <= M <= 1, se face cu instrucţiunea
[K,E] = ellipke(M, TOL), în care toleranţa Tol poate să lipsească, fiind atunci EPS.

8.7.12. Funcţia de repartiţie Laplace


Funcţia densităţii de probabilitate a repartiţiei normale este definită de relaţia
− z2
1
f (z ) = ⋅e 2
2 ⋅π
care, în Matlab, se calculează cu secvenţa,
f=1./sqrt(2*pi)*exp(-z.^2/2),
unde z poate fi vector sau scalar.
Dacă z ∈ [− 10 10] , f (z ) reprezintă densitatea de probabilitate cu repartiţie
normală normată din figura 8.7, pentru care s-a utilizat secvenţa de instrucţiuni:
Funcţii matematice în Matlab 199

z=-10:0.1:10; f=1./sqrt(2*pi)*exp(-z.^2/2);
plot(z,f); grid on; xlabel('z'); ylabel('f(z)').
Calculul funcţiei de repartiţie Laplace,
∞ ∞
1 2
f (z ) = ∫ f ( z )dz = ⋅ e − t dt

−∞ 2 ⋅π −∞
foloseşte secvenţa,
F=trapz(z,1./(sqrt(2*pi))*exp(-z.^2/2))
care, pentru valorile anterioare, rezultă F=1. Limita de integrare, ∞ , se poate lua
un număr între -5 şi -10, fără ca, prin aceasta, să se inducă erori semnificative.

Fig. 8.7. Densitatea de probabilitate cu repartiţie normală normată

8.8. Transformări de coordonate


Dacă în unele probleme de teoria câmpurilor (termice, electrice, magnetice,
barice) se utilizează un sistem de coordonate, nu întotdeauna sistemul cartezian
este cel mai potrivit. De aceea, este necesar să studiem problema reprezentării
funcţiilor scalare şi a funcţiilor vectoriale, precum şi a unor mărimi derivate, în
coordonate oarecare. Mai mult, este necesar să putem transforma un sistem de
coordonate în alt sistem de coordonate.
Fie x, y, z coordonatele carteziene ortogonale ale unui punct arbitrar P (vezi
figura 8.8).
200 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

Poziţia unui punct P0 ( x0 , y 0 , z 0 ) poate fi obţinută ca intersecţia planelor


x = x0 , y = y0 , z = z 0 . Aceste plane se intersectează, două câte două, după
dreptele
y = y0 , z = z0 ;
z = z 0 , x = x0 ;
x = x0 , y = y0 ,
paralele cu axele de coordonate. Fiecărui punct P0 din spaţiu, îi este ataşat un
r r r
triedru i , j , k , care este acelaşi pentru toate punctele din spaţiu.

Fig. 8.8.
În coordonate cilindrice, poziţia unui punct P este caracterizată prin
ρ , ϕ , z , unde ρ este distanţa de la origine la proiecţia P ' a punctului P, pe planul
xOy , ϕ este unghiul format de OP ' cu axa Ox , iar z cota lui P faţă de planul
xOy .
Punctul P0 ( ρ 0 ,ϕ 0 , z 0 ) este intersecţia următoarelor suprafeţe: cilindru
ρ = ρ 0 , semiplanul ϕ = ϕ 0 şi planul z = z 0 (vezi figura 8.9).
Intersecţiile acestor suprafeţe, luate câte două, sunt: semidreapta Cρ , pe care
variază numai ρ , cercul Cϕ , pe care variază numai ϕ şi dreapta C z , pe care
variază numai z.
r r r
Notăm cu u ρ , uϕ , u z vectorii unitari tangenţi la aceste curbe, în P0 şi dirijaţi
în sensul crescător al variabilelor respective. Aceşti vectori sunt determinaţi în
r r
toate punctele din spaţiu, cu excepţia axei Oz , în care u ρ , uϕ au direcţii
Funcţii matematice în Matlab 201

nedeterminate.
r r r
Fiind ortogonali, doi câte doi, u ρ , uϕ , u z formează un triedru nedegenerat,
de referinţă pentru orice punct, variabil cu punctul în care este considerat.

Fig. 8.9.
Între coordonatele cilindrice şi coordonatele carteziene avem relaţiile:
 x = ρ ⋅ cos ϕ

 y = ρ ⋅ sin ϕ
 z=z

cu ρ ≥ 0, 0 ≤ ϕ < 2π .
Funcţia Matlab care realizează această transformare, din coordonate
cilindrice în coordonate carteziene, este pol2cart. Aceasta poate fi apelată prin:
[X,Y,Z] = pol2cart(TH,R,Z)
în care TH este unghiul ϕ , R este raza ρ , iar Z este înălţimea z, iar X, Y, Z sunt
coordonatele carteziene. Matricele TH, R şi Z trebuie să aibă aceeaşi dimensiune
(sau oricare să fie scalar);TH este dat în radiani.
De exemplu, dacă coordonatele punctului sunt TH=pi/6, R=2 şi Z=3, atunci:
[X,Y,Z] = pol2cart(TH,R,Z),
conduce la X = 1.7321, Y = 1.0000, Z = 3.
Pentru plan, transformarea coordonatelor polare în carteziene se face cu
instrucţiunea [X,Y] = pol2cart(TH,R), din care lipseşte Z. Coordonata Z nu suferă
nici o transformare la trecerea dintr-un sistem de coordonate în altul.
Transformarea inversă, din coordonate carteziene în coordonate polare se
face după relaţiile:
202 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

 ρ = x2 + y 2

  y
ϕ = arctan 
 x
 z=z

 y
cu ρ ≥ 0, - π ≤ arctan   < π .
x
Funcţia Matlab care realizează această transformare este cart2pol, care
poate fi apelată prin instrucţiunea:
[TH,R,Z] = cart2pol(X,Y,Z)
sau
[TH,R] = cart2pol(X,Y),
în care X, Y, Z sunt coordonatele carteziene, iar TH este unghiul ϕ , R este raza
ρ , Z este înălţimea z. Matricele X, Y şi Z trebuie să aibă aceeaşi dimensiune (sau
oricare să fie scalar), iar TH este returnat în radiani.
De exemplu, dacă X = 1.7321, Y = 1.0000, Z = 3, atunci prin
instrucţiunea [TH,R,Z] = cart2pol(X,Y,Z), rezultă TH = 0.5236 =pi/6, R = 2.0000,
Z = 3.
În coordonate sferice, un punct P, este dat prin: r = OP , unghiul θ format
de OP cu axa Oz şi unghiul ϕ , pe care îl face proiecţia OP ' a lui OP , pe planul
xOy , cu axa Ox (vezi figura 8.10).
În acest caz, curbele pe care variază numai unul dintre parametri sunt
următoarele: semidreapta C r ce porneşte din origine, semicercul meridian Cθ şi
cercul Cϕ .
Sensul crescător al parametrilor pe aceste curbe va fi indicat, respectiv, prin
r r r
vectorii unitari u r , uθ , uϕ tangenţi curbelor în punctul considerat.
Aceşti vectori sunt determinaţi în toate punctele care nu aparţin axei Oz şi
sunt ortogonali, doi câte doi.
r r r
Triedrul u r , uθ , uϕ poate fi considerat triedru de referinţă şi depinde de
punct.
Între coordonatele sferice şi coordonatele carteziene avem relaţiile:
 x = r ⋅ sin θ ⋅ cos ϕ

 y = r ⋅ sin θ ⋅ sin ϕ
 z = r ⋅ cos θ

cu r ≥ 0, 0 ≤ θ < π , 0 ≤ ϕ < 2π .
Funcţia Matlab care realizează această transformare, din coordonate sferice
Funcţii matematice în Matlab 203

în coordonate carteziene este sph2cart, apelată cu,


[X,Y,Z] = sph2cart(TH,PHI,R),
în care TH este unghiul ϕ , respectiv azimutul, PSI este unghiul θ , respectiv
elevaţia, R este raza r , iar X, Y, Z sunt coordonatele carteziene. Matricele TH,
PHI şi R trebuie să aibă aceeaşi dimensiune (sau oricare să fie scalar), iar TH şi PSI
sunt daţi în radiani.

Fig. 8.10.
De exemplu, dacă TH=pi/6, PHI= pi/4, R=2, atunci prin [X,Y,Z] =
sph2cart(TH,PHI,R), se obţine X= 1.2247, Y = 0.7071, Z = 1.4142.
Transformarea inversă, din coordonate carteziene în coordonate sferice, se
realizează cu relaţiile:


 r = x2 + y2 + z 2

  y
 ϕ = arctan 
 x
  z 
θ = arctan 2 
  2 
 x +y 
cu r ≥ 0, 0 ≤ θ < π , 0 ≤ ϕ < 2π .
204 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

Funcţia Matlab care realizează transformarea coordonatelor carteziene, în


coordonate sferice, este cart2sph, apelată sub forma,
[TH,PHI,R] = cart2sph(X,Y,Z),
în care X, Y, Z sunt coordonatele carteziene, TH este unghiul ϕ , respectiv
azimutul, PSI este unghiul θ , respectiv elevaţia, R este raza r . Matricele X, Y, Z
trebuie să aibă aceeaşi dimensiune (sau oricare să fie scalar), iar TH şi PSI sunt
returnaţi în radiani.
De exemplu, dacă X= 1.2247, Y = 0.7071, Z = 1.4142, atunci prin
[TH,PHI,R] = cart2sph(X,Y,Z) se obţine TH = 0.5236 = pi/6, PHI = 0.7854 = pi/4,
R = 2.0000.

8.9. Calculul produsului unor vectori


Produsul scalar al vectorilor a şi b este numărul obţinut înmulţind produsul
modulelor lor cu cosinusul unghiului format de cei doi vectori (vezi figura 8.11),
a ⋅ b = a ⋅ b ⋅ cos θ .
Cel mai tipic exemplu de produs scalar a doi vectori este lucrul mecanic
produs de o forţă constantă F = b , când punctul său de aplicaţie se deplasează de
la O la A. Dacă se descompune F după direcţia OA şi perpendiculara pe această
direcţie, componenta normală dă un lucru mecanic nul. Întreg lucrul mecanic al
forţei F este dat de componenta după direcţia OA, componentă ce are expresia,
F ⋅ cos θ = b ⋅ cos θ . Lucrul mecanic va fi produsul dintre această componentă şi
π
deplasarea a=OA. Dacă θ < , lucrul mecanic este activ şi se exprimă printr-un
2
π
număr strict pozitiv, iar dacă θ > , lucrul mecanic este rezistent şi se exprimă
2
printr-un număr negativ.
Principalele proprietăţi ale produsului scalar sunt:
• a ⋅ b = b ⋅ a - este comutativ;
• ( ) ( )
λ ⋅ a ⋅ b = λ ⋅ a ⋅ b , în care λ este un scalar oarecare;
• (a + b)⋅ c = a ⋅ c + b ⋅ c - este distributivă faţă de adunare;
• a ⋅ a = a 2 ≥ 0 , egalitatea având loc numai dacă a=0;
• a ⋅ b ≤ a ⋅ b - modulul unui produs scalar este mai mic sau egal cu produsul
modulelor;
• dacă produsul scalar a doi vectori este nul, atunci vectorii nenuli sunt
perpendiculari.

Considerăm vectorii a şi b , figura 8.11, exprimaţi într-un sistem de


Funcţii matematice în Matlab 205

coordonate carteziene, având ca bază vectorii i , j , k , unitari şi ortogonali, adică:


i ⋅ i = j ⋅ j = k ⋅ k = 1, i ⋅ j = j ⋅ k = k ⋅i = 0 .

Fig. 8.11.
Ţinând seama de cele de mai sus, vectorii a şi b vor avea expresiile:
a = a1 ⋅ i + a2 ⋅ j + a3 ⋅ k , b = b1 ⋅ i + b2 ⋅ j + b3 ⋅ k .
Înmulţind scalar aceste sume şi ţinând seama de cele anterioare, se obţine:
a ⋅ b = a1 ⋅ b1 + a2 ⋅ b2 + a3 ⋅ b3 .
Pentru b = a , avem :
2 2 2 2 2 2
a ⋅ a = a 2 = a1 + a 2 + a3 ⇒ a = a1 + a 2 + a3 .
Expresia care dă unghiul a doi vectori este:
a1 ⋅ b1 + a 2 ⋅ b2 + a3 ⋅ b3
cosθ =
2 2 2 2 2 2
a1 + a 2 + a3 ⋅ b1 + b2 + b3

Calculul produsului scalar a doi vectori A şi B, care trebuie să aibă aceeaşi


lungime, se face cu instrucţiunea C = dot(A,B,DIM) sau C = dot(A,B), în care
lipseşte dimensiunea DIM. Dacă DIM=size(A), în vectorul C se întoarce produsul
element cu element dintre A şi B; dacă DIM =1, în vectorul C se întoarce suma
produsului element cu element de pe fiecare coloană, iar dacă DIM =2, se întorce
suma produsului element cu element de pe fiecare linie.
Dacă A şi B sunt vectori coloană, atunci dot(A,B) este acelaşi lucru ca şi
sum(A.*B).
De exemplu, dacă:
A=[ 1 2 3 B=[ 7 8 9
4 5 6] 10 11 12 ]
atunci, C=dot(A,B,3), este:
 7 16 27   1* 7 2 * 8 3 * 9 
C=  ⇔ C= 
40 55 72  4 * 10 5 * 11 6 * 12
C=dot(A,B,1) este,
C = [47 71 99] ⇔ C = [7 + 40 16 + 55 27 + 72] ,
206 SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE

iar C=dot(A,B,2) este:


 50   7 + 16 + 27 
C=  ⇔ C= .
167  40 + 55 + 72
Dacă A este de dimensiunea 1 x N, iar B de dimensiunea N x 1, atunci
produsul scalar poate fi calculat şi prin relaţia sum(A’.*B) sau sum(A.*B’).
Considerând vectorii,
a = 3⋅i − 4⋅ j + 0 ⋅ k , b = 1⋅ i + 2 ⋅ j − 2 ⋅ k ,
atunci produsul scalar este
ab=dot(a,b)=sum(a.*b)=-5,
iar unghiul dintre aceşti vectori este,
alfa=acos(ab/(norm(a)*norm(b)))*180/pi = 109.4712 grade
şi în care,
norm(a)= sqrt(sum(a.^2)); norm(b)= sqrt(sum(b.^2)).

Considerând vectorii a şi b într-un sistem cartezian, având expresiile


anterioare, produsul vectorial al acestora este un vector c , perpendicular pe planul
format de cei doi vectori, având expresia:
i j k
c = a × b = a1 a2 a3 = (a 2 b3 − a3b2 ) ⋅ i + (a3b1 − a1b3 ) ⋅ j + (a1b3 − a 2 b1 ) ⋅ k .
b1 b2 b3
Se observă că acest determinant se dezvoltă întotdeauna după prima linie şi
nu are proprietăţile determinanţilor obişnuiţi.
În Matlab, produsul vectorial este dat de funcţia cross(a,b).
Sensul vectorului c este determinat de sensul trigonometric de aducere a
vectorului a spre vectorul b , sau, în general, de parcurgere a curbei închise
generată de cei doi vectori.
Modulul produsului vectorial este egal cu aria paralelogramului determinat
de cei doi vectori, (vezi şi figura 8.12), sau în general cu aria suprafeţei delimitate:
c = a × b = a ⋅ b ⋅ sin θ
Utilitatea produsului vectorial rezidă în aceea că determină debitul de fluid
ce trece printr-o suprafaţă, delimitată de vectorii a şi b , în unitatea de timp.
Produsul vectorial are următoarele proprietăţi:
• a × b = −b × a - este anticomutativ;
• ( ) ( )
λ ⋅ a × b = λ ⋅ a × b , în care λ este un scalar oarecare;
• (a + b )× c = a × c + b × c - este distributiv faţă de adunare;
• produsul vectorial a doi vectori colineari este nul, deoarece sin θ = 0 ;
Funcţii matematice în Matlab 207

• a × b ≤ a ⋅ b - modulul unui produs scalar este mai mic sau egal cu


produsul modulelor.

Fig. 8.12.

Produsul încrucişat, dintre vectorii A şi B, se calculează cu instrucţiunea


C=cross(A,B), dar vectorii A şi B trebuie să aibă cel puţin 3 elemente, în direcţia
produsului încrucişat.
Dacă A=[1 2 3; 4 5 6; 7 8 9], B=[10 11 12; 13 14 15; 16 17 18], atunci
C=cross(A,B) conduce la C= [-27 -27 -27; 54 54 54; -27 -27 -27].
Considerând vectorii,
a = 5 ⋅ i − 3 ⋅ j − 1⋅ k , b = −1 ⋅ i − 1 ⋅ j − 2 ⋅ k ,
atunci produsul vectorial este
c=cross(a,b)=[ 5 11 -8],
iar unghiul dintre aceşti vectori este
alfa=asin(c/(norm(a)*norm(b)))*180/pi = [20.1838 49.3825 -33.5079] grade.

S-ar putea să vă placă și