Sunteți pe pagina 1din 6

LUCRAREA NR.

CALCULUL SIMBOLIC ÎN MATLAB

În MATLAB pot fi efectuate în mod simbolic o serie de calcule matematice cum ar


fi calculul unor derivate, integrale, limite sau serii Taylor; în cadrul algebrei liniare
determinarea inversei, valorilor proprii, determinantului sau descompunerii unei matrici
simbolice, metode de simplificare a expresiilor algebrice, rezolvarea simbolică şi numerică a
ecuaţiilor algebrice şi diferenţiale, funcţii speciale ş.a.
Toolbox-ul Symbolic Math defineşte un nou tip de date MATLAB numite obiecte
simbolice. Un obiect simbolic este o structură de date de tip şir de caractere ce reprezintă
simbolul utilizat pentru a reprezenta o variabilă, o expresie matematică sau o matrice.

Crearea de variabile şi expresii simbolice


Pentru construirea de variabile şi expresii simbolice se utilizează comanda sym. De
exemplu, comenzile:
a = sym('alpha')
b = sym('beta')
creează o variabilă simbolică a care este tipărită pe ecran alfa şi o variabilă simbolică b ce
este tipărită beta. Dacă se dă comanda a+b, răspunsul va fi:
ans =
alfa+beta
În acelaşi mod se procedează în cazul expresiilor matematice. De exemplu, dacă
1 5
dorim să reprezentăm simbolic o expresie în care apare raportul: , atunci utilizăm
2
comanda:
r = sym('(1+sqrt(5))/2')
Acum pot fi efectuate diferite calcule matematice utilizând variabila r. Spre
exemplu, relaţia:
f = r^2-r-1
returnează răspunsul:
f = (1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
Dacă se dă comanda: simplify(f) se obţine valoarea 0.
Să presupunem că dorim să studiem funcţia pătatică: f=ax2+bx+c. Comanda
f = sym('a*x^2+b*x+c')
asignează expresia simbolică ax2+bx+c variabilei f. În acest caz însă nu se creează variabile
corespunzătoare termenilor a, b, c şi x. Pentru a putea efectua operaţii matematice cu această
expresie trebuie create variabilele în mod explicit, adică:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
sau mai simplu:
syms a b c x (care este mai recomandată deoarece este mai puţin de scris).

Conversiile numerice
Considerăm următoarea mărime constantă:
t = 0.1
Funcţia sym are patru opţiuni pentru o reprezentare simbolică a valorii numerice
aflate în t. Acestea sunt următoarele:
- opţiunea ‘f’ : sym(t,'f') returnează o reprezentare simbolică în virgulă
1
mobilă:
'1.999999999999a'*2^(-4)
- opţiunea ‘r’ : sym(t,'r') returnează forma raţională a numărului 1/10
(aceasta este setarea implicită a funcţiei sym)
- opţiunea ’e’ sym(t,'e') returnează forma raţională a lui t plus diferenţa între
valoarea raţională teoretică a lui t şi valoarea reală în virgulă mobilă
sym(t,'e')
ans = 1/10+eps/40
- opţiunea ‘d’ returnează numărul t pe atâtea cifre zecimale câte specifică
instrucţiunea digits (valoarea implicită fiind de 32 de cifre).
sym(t,'d')
ans = .10000000000000000555111512312578
digits(7)
sym(t,'d')
ans = .1000000
O utilizare importantă a funcţiei sym este conversia unei matrici din formă
numerică în formă simbolică. Dacă avem următoarea matrice:
A = 1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
atunci instrucţiunea
A = sym(A)
conduce la următorul rezultat
A =
[ 1, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]

Crearea de funcţii matematice simbolice


Există două modalităţi de a crea funcţii matematice:
- folosirea expresiilor simbolice;
- crearea de fişiere MATLAB.
Utilizând expresii simbolice se folosesc comenzile următoare:
syms x y z
r = sqrt(x^2 + y^2 + z^2)
t = atan(y/x)
f = sin(x*y)/(x*y)
care generează expresiile simbolice r, t, şi f.
Crearea unui fişier MATLAB care conţine o funcţie simbolică permite o utilizare
mai generală a funcţiilor. De exemplu, crearea funcţiei sin(x)/x poate fi realizată astfel:
function z = sinc(x)
if isequal(x,sym(0))
z = 1;
else
z = sin(x)/x;
end

CALCUL SIMBOLIC

Calculul derivatei
Pentru a calcula derivata simbolică a funcţiei sinus, creăm expresia:
syms a x
f = sin(a*x)
2
după care folosind funcţia diff se calculează derivata acesteia în raport cu x.
diff(f)
ans = cos(a*x)*a
Se poate calcula derivata în raport cu variabila a cu comanda:
diff(f,a)
care afiseaza rezultatul df/da.
ans = cos(a*x)*x
Pentru a calcula derivata de ordinul 2 se utilizează următoarea comandă:
diff(f,x,2)
care afiseaza următorul rezultat:
ans = -sin(a*x)*a^2

Calculul integralei
Dacă f este o expresie simbolică, atunci comanda:
int(f,v)
determină integrala nedefinită a lui f în raport cu v. De asemenea este posibil calculul
integralei definite folosind comanda:
int(f,v,a,b),
unde f este expresia ce trebuie integrată, v, variabila după care se face integrarea, iar a şi b
sunt limitele de integrare.

Calculul limitelor
Dacă f este o expresie simbolică, atunci comanda:
limit(f,x,a) sau limit(f,a), calculează lim f ( x)
x a

iar limit(f,x,a,'left') şi limit(f,x,a,'right') calculează limitele


la dreapta şi la stânga.

Calculul unor serii


Suma unor serii de numere poate fi calculată utilizând comanda symsum. De

1 2
exemplu, suma seriei  2 este
k 1 k 6
syms x k
s1 = symsum(1/k^2,1,inf)
s1 = 1/6*pi^2

Simplificări
Iată trei expresii diferite:
syms x
f = x^3-6*x^2+11*x-6
g = (x-1)*(x-2)*(x-3)
h = x*(x*(x-6)+11)-6
Folosind următorele comenzi ele pot fi puse sub forma obişnuită:
pretty(f), pretty(g), pretty(h)
x3 - 6 x2 + 11 x - 6
(x - 1) (x - 2) (x - 3)
x (x (x - 6) + 11) - 6
Aceste expresii sunt trei reprezentări diferite ale aceleiaşi funcţii matematice.
Fiecare din cele trei forme poate fi preferată într-o anumită situaţie. Prima formă este cea
mai des utilizată reprezentare a unui polinom. Cea de-a doua este forma factorizată, cea care
prezintă rădăcinile polinomului. Cea de-a treia formă este reprezentarea Horner.
Există câteva funcţii ce aplică o serie de identităţi algebrice şi trigonometrice pentru
a transforma o reprezentare a unei funcţii în alta posibil mai simplă sau mai utilă. Aceste
3
funcţii sunt: collect, expand, horner, factor, simplify, şi simple.
 Funcţia collect grupează termenii polinomului în ordine descescătoare a puterilor
variabilei simbolice:
f=(x-1)*(x-2)*(x-3)
collect(f)
x^3-6*x^2+11*x-6
 Funcţia expand asigură distributivitatea înmulţirii faţă de adunare. Iată câteva exemple:

f expand(f)
a*(x + y) a*x+a*y
(x-1)*(x-2)*(x-3) x^3-6*x^2+11*x-6
x*(x*(x-6)+11)-6 x^3-6*x^2+11*x-6
exp(a+b) exp(a)*exp(b)
cos(x+y) cos(x)*cos(y)-sin(x)*sin(y)

 Funcţia horner transformă un polinom în reprezentarea Horner a acestuia.


f= x^3-6*x^2+11*x-6
horner(f)
-6+(11+(-6+x)*x)*x
 Funcţia factor exprimă un polinom cu coeficienţi raţionali în produs de polinoame de
grad minim.
f= x^3-6*x^2+11*x-6
factor(f)
(x-1)*(x-2)*(x-3)
 Funcţia simplify poate fi utilizată pentru simplificarea unor expresii ce conţin identităţi
algebrice, puteri întregi sau fracţionale, funcţii trigonometrice, exponenţiale sau
logaritmice şi funcţii speciale.
f= x*(x*(x-6)+11)-6
simplify(f)
x^3-6*x^2+11*x-6

f=(1-x^2)/(1-x)
simplify(f)
x+1

Rezolvarea ecuaţiilor algebrice


Dacă S este o expresia simbolică, atunci solve(S) determină valorile variabilei
simbolice pentru care S este zero. De exemplu, ecuaţia de gradul II se rezolvă astfel:
syms a b c x
S = a*x^2 + b*x + c;
solve(S)
ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]

Dacă se doreşte rezolvarea unei ecuaţii de forma f(x) = q(x), trebuie folosite şiruri
de caractere între apostroafe:
s = solve('cos(2*x)+sin(x)=1')
s =
[ 0] [ pi] [ 1/6*pi] [ 5/6*pi]

Rezolvarea ecuaţiilor diferenţiale


Funcţia dsolve calculează soluţii simbolice pentru ecuaţii diferenţiale ordinare.
4
Ecuaţiile trebuie specificate prin expresii simbolice ce conţin litera D pentru a nota
diferenţiala. D2, D3, …DN corespund derivatei de ordinul 2, 3 . . . N. În mod implicit,
d2y
variabila independentă este t. Astfel, expresia D2y reprezintă relaţia . Condiţiile iniţiale
dt 2
pot fi specificate prin adăugarea de ecuaţii. Dacă nu sunt specificate condiţiile iniţiale,
soluţiile vor conţine constante de integrare C1, C2, etc.
Exemple:
dsolve('Dy=1+y^2')
ans = tan(t+C1)
Pentru a specifica condiţiile iniţiale se utilizează expresia:
y = dsolve('Dy=1+y^2','y(0)=1')
y = tan(t+1/4*pi)

Observaţie: Variabila y se află în spaţiul de lucru al MATLAB-ului, însă variabila


independentă t trebuie declarată cu comanda syms t , altfel comanda diff(y,t) va da eroare.

Ecuaţiile neliniare pot avea mai multe soluţii, chiar dacă se dau condiţiile iniţiale.
x = dsolve('(Dx)^2+x^2=1','x(0)=0')
x = [-sin(t)]
[ sin(t)]

y = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0','x')
simplify(y)
y = -2/3*cos(x)^2+1/3+4/3*cos(x)

Calculul transformatei Z directe şi inverse


Transformata Z directă pentru un şir de numere  f n n  0 este dată de relaţia:

F ( z )   f n z n
n 0
În MATLAB există două posibilităţi pentru calculul transformatei Z:
F = ztrans(f) sau F(z) = symsum(f(n)/z^n, n, 0, inf),
unde n este variabila simbolică a expresiei f. Introducând în MATLAB liniile de comandă
f = sin(a*n)
F = ztrans(f,w)
se obține pentru transformata Z expresia
F = sin(a)*w/(1-w*cos(a)+w^2)
Transformata Z inversă are următoarea sintaxă:
f = iztrans(F)
Expresia F are z ca variabilă independentă implicită.

Calculul transformatei Laplace directe şi inverse



Transformata Laplace pentru o funcţie f(t) este dată de relaţia: F ( s )   f (t )e  st dt .
0

În MATLAB, pentru calculul transformatei Laplace se utilizează comanda


L = laplace(F) unde expresia simbolică F are pe t ca variabilă independentă implicită.
Funcţia returnată este o funcţie de variabilă complexă s. Pentru funcția original f (t )  t 4 1(t ) ,
introducând în MATLAB liniile de comandă
f = t^4
F = laplace(f)
se obține imaginea Laplace cu expresia
F = 24/s^5
5
c  j
1
Transformata Laplace inversă se calculează cu relaţia f (t )   F ( s )e ds , iar în
st
2j c  j

MATLAB se utilizează comanda: F = ilaplace(L). Pentru funcția de variabilă


1
complexă F ( s)  , introducând în MATLAB liniile de comandă
s2
F = 1/s^2
f = ilaplace(F)
se obține funcția original cu expresia
f = t

TEMĂ:
1. Să se calculeze derivatele de ordinul I si II pentru următoarele funcţii:
x2  y4  5x 2  3 
f ( x)  , g ( x)  tg 

 
 , h( x)  ln sin x 2  4 x  5


2  2x  1 
2. Să se calculeze următoarele integrale:

 

1 1
6
cos( x)  sin( x) x2 1 ln x  1  x 2 ln(1  a 2 x 2 ) arctg (ax)
 
cos( x)  sin( x)
dx , x x4 1
dx , 
1 x2
dx , 0 1  x 2 dx , x
0 1 x2
dx

6
3. Să se calculeze următoarele limite şi serii:
n n 1   1   1
,  ln1  2  , 
lim sin
n
, lim ln
3 n  2n n  2  n  n 1 nn  1 n  n  1  
4. Să se rezolve următoarele ecuaţii diferenţiale:
y   2 y   2 y  sin(2t )  2 cos(2t ) , y (0)  0, y (0)  0;
y’’-3y’+2y = 4t+e3t , y(0)=1, y’(0)=-1
y”’-6y’’+11y’-6y = 0, y’’(0) = 0, y’(0) =1, y(0) = 0

5. Să se rezolve următoarele sisteme de ecuaţii:


 x2 y2  0  x  y  z 1
 2 ,  2
x  y  5 x  y  z  3
2 2 2

6. Să se calculeze transformata Z directă pentru şirurile:


f(n)=1, f(n)=1/n, f(n)=1/n2

7. Să se calculeze transformata Z inversă pentru funcţiile:


1 z 10Tz z
F(z)= , F(z)= , F(z)= , F(z)=
z z    2
z  1 2
( z  a)( z  b)

8. Să se calculeze transformata Laplace directă pentru funcţiile:


f(t)=e-4t+sin(t-2)+t2e-2t, f(t)=sin(at), f(t)=cos(at), f(t)=eatsin(bt)

9. Să se calculeze transformata Laplace inversă pentru funcţiile:


s 1 2s  1 K (T1 s  1)
F (s)  2 , F (s)  3 , F (s)  , F (s) 
s  2s  1 s  27 s ( s  5s  6)
2
T2 s  1

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