Sunteți pe pagina 1din 6

Cursul 4

CALCULUL SIMBOLIC IN MATLAB

In MATLAB pot fi efectuate in mod simbolic o serie de calcule matematice cum ar fi calculul unor
derivate, integrale, limite sau serii Taylor; in cadrul algebrei liniare determinarea inversei, valorilor
proprii, determinantului sau descompunerii unei matrici simbolice, metode de simplificare a expresiilor
algebrice, rezolvarea simbolica si numerica a ecuatiilor algebrice si diferentiale, functii speciale s.a.
Toolbox-ul Symbolic Math defineste un nou tip de date MATLAB numite obiecte simbolice. Un
obiect simbolic este o structura de date de tip sir de caractere ce reprezinta simbolul utilizat pentru a
reprezenta o variabila, o expresie matematica sau o matrice.
Crearea de variabile si expresii simbolice
Pentru construirea de variabile si expresii simbolice se utilizeaza comanda sym. De exemplu,
comenzile:
a = sym('alpha')
xb= sym('beta')
creeaza o variabila simbolica a care este tiparita pe ecran alfa si o variabila simbolica b ce este tiparita
beta. Daca se da comanda a+b, raspunsul va fi:
ans = alfa+beta
In acelasi mod se procedeaza in cazul expresiilor matematice. De exemplu, daca dorim sa

reprezentam simbolic o expresie in care apare raportul: , atunci utilizam comanda:


r=sym('(1+sqrt(5))/2')
Acum pot fi efectuate diferite calcule matematice utilizand variabila r. Spre exemplu, relatia:
f=r^2-r-1
returneaza raspunsul:
f = (1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
Daca se da comanda: simplify(f) se obtine valoarea 0.
Sa presupunem ca dorim sa studiem functia patatica: f=ax2+bx+c. Comanda
f = sym('a*x^2+b*x+c')
asigneaza expresia simboica ax2 + bx + c variabilei f. In acest caz insa nu se creeaza variabile
corespunzatoare termenilor a, b, c si x. Pentru a putea efectua opeatii matematice cu aceasta expresie
trebuie create variabilele in mod explicit, adica:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
sau mai simplu:
syms a b c x (care este mai recomandata deoarece este mai putin de scris).

1
Conversiile numerice
Consideram urmatoarea marime constanta:
t = 0.1
Functia sym are patru optiuni pentru o reprezentare simbolica a valorii numerice aflate in t. Acestea
sunt urmatoarele:
- optiunea ‘f’ : sym(t,'f')
returneaza o reprezentare simbolica in virgula mobila:
'1.999999999999a'*2^(-4)
- optiunea ‘r’ : sym(t,'r')
returneaza forma rationala a numarului 1/10 (aceasta este setarea implicita a functiei sym)
- optiunea ’e’ sym(t,'e')
returneaza forma rationala a lui t plus diferenta intre valoarea rationala teoretica a lui t si valoarea actuala
in virgula mobila
sym(t,'e')
ans = 1/10+eps/40
- optiunea ‘d’ returneaza numarul t pe atatea cifre zecimale cate specifica instructiunea digits (valoarea
implicita fiind de 32 de cifre). sym(t,'d')
ans = .10000000000000000555111512312578
digits(7)
sym(t,'d')
ans = .1000000
O utilizare importanta a functiei sym este conversia unei matrici din forma numerica in forma
simbolica. Daca avem urmatoarea matrice:
A= 1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
atunci instructiunea
A = sym(A)
conduce la urmatorul rezultat
A=
[ 1, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]
Crearea de functii matematice simbolice
Exista doua modalitati de a crea functii matematice:
-         folosirea expresiilor simbolice;
-         crearea de fisiere matlab.
Utilizand expresii simbolice se folosesc comenzile urmatoare:
syms x y z
2
r = sqrt(x^2 + y^2 + z^2)
t = atan(y/x)
f = sin(x*y)/(x*y)
care genereaza expresiile simbolice r, t, si f.
Crearea unui fisier matlab ce contine o functie simbolica permite o utilizare mai generala a
functiilor. Spre exemplu crearea functiei sin(x)/x poate fi realizata astfel:
function z = sinc(x)
if isequal(x,sym(0))
z = 1;
else
z = sin(x)/x;
end
Calcule simbolice
Calculul derivatei Spre exemplu, pentru a calcula derivata simbolica a functiei sinus, cream expresia:
syms a x
f = sin(a*x)
dupa care folosind functia diff se calculeaza derivata acesteia in raport cu x.
diff(f)
ans = cos(a*x)*a
Se poate calcula derivata in raport cu variabila a cu comanda:
diff(f,a)
care returneaza df/da.
ans = cos(a*x)*x
Pentru a calcula derivata de ordinul 2 se utilizeaza urmatoarea comanda:
diff(f,x,2)
care returneaza urmatorul rezultat:
ans = -sin(a*x)*a^2
Calculul integralei Daca f este o expresie simbolica, atunci comanda:
int(f,v)
determina integrala nedefinita a lui f in raport cu v. De asemenea este posibil calculul integralei definite
folosind comanda:
int(f,v,a,b),
unde f este expresia ce trebuie integrata, v, variabila dupa care se face integrarea, iar a si b sunt limitele
de integrare.
Calculul limitelor
Daca f este o expresie simbolica, atunci comanda:

limit(f,x,a) sau limit(f,a), calculeaza


iar limit(f,x,a,'left') si limit(f,x,a,'right') calculeaza limitele la dreapta si la stanga.
3
Calculul unor serii Suma unor serii de numere poate fi calculata utilizand comanda symsum. Spre

exemplu, suma seriei este


syms x k
s1 = symsum(1/k^2,1,inf)
s1 = 1/6*pi^2
Simplificari Iata 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 urmatorele comenzi ele pot fi puse sub forma obisnuita:
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 reprezentari diferite ale aceleiasi functii matematice. Fiecare din cele trei
forme poate fi preferata intr-o anumita situatie. Prima forma este cea mai des utilizata reprezentare a unui
polinom. Cea de-a doua este forma factorizata, cea care prezinta radacinile polinomului. Cea de-a treia
forma este reprezentarea Horner.
Exista cateva functii ce aplica o serie de identitati algebrice si trigonometrice pentru a transforma o
reprezentare a unei functii in alta posibil mai simpla sau mai utila. Aceste functii sunt: collect, expand,
horner, factor, simplify, si simple.
Functia collect grupeaza termenii polinomului in ordine descescatoare a puterilor variabilei
simbolice:
f=(x-1)*(x-2)*(x-3)
collect(f)
x^3-6*x^2+11*x-6
Functia expand asigura distributivitatea inmultirii fata de adunare. Iata cateva exeple:
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)
Functia horner transforma un polinom in reprezentarea Horner a acestuia.
f= x^3-6*x^2+11*x-6
horner(f)
-6+(11+(-6+x)*x)*x
4
Functia factor exprima un polinom cu coeficienti rationali in produs de polinoame de grad minim.
f= x^3-6*x^2+11*x-6
factor(f)
(x-1)*(x-2)*(x-3)
Functia simplify poate fi utilizata pentru simplificarea unor expresii ce contin identitati algebrice,
puteri intregi sau fractionale, functii trigonometrice, exponentiale sau logaritmice si functii 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 ecuatiilor algebrice
Daca S este o expresia simbolica, atunci solve(S) determina valorile variabilei simbolice pentru care
S este zero. De exemplu, ecuatia de gradul II se rezolva 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))]
Daca se doreste rezolvarea unei ecuatii de forma f(x) = q(x), trebuie folosite siruri de caractere intre
apostroafe:
s = solve('cos(2*x)+sin(x)=1')
s=
[ 0] [ pi] [ 1/6*pi] [ 5/6*pi]

Rezolvarea ecuatiilor diferentiale


Functia dsolve calculeaza solutii simbolice pentru ecuatii diferentiale ordinare. Ecuatiile trebuie
specificate prin expresii simbolice ce contin litera D pentru a nota diferentiala. D2, D3, …DN corespund
derivatei de ordinul 2, 3 . . . N. In mod implicit, variabila independenta este t. Astfel, expresia D2y

reprezinta relatia . Conditiile initiale pot fi specificate prin adaugarea de ecuatii. Daca nu sunt
specificate conditiile initiale, solutiile vor contine constante de integrare C1, C2, etc.
Exemple:
dsolve('Dy=1+y^2')
ans = tan(t+C1)
Pentru a specifica conditiile initiale se utilizeaza expresia:
y = dsolve('Dy=1+y^2','y(0)=1')

5
y = tan(t+1/4*pi)
Observatie: Variabila y se afla in spatiul de lucru al MATLAB-ului, insa variabila independenta t trebuie
declarata cu comanda syms t , altfel comanda diff(y,t) va da eroare.
Ecuatiile neliniare pot avea mai multe solutii, chiar daca se dau conditiile initiale.
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)

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