Sunteți pe pagina 1din 29

Curs 3

MATLAB
The Language of Technical
Computing

calcul simbolic
polinoame
sisteme de ecuatii liniare
reprezentari grafice
Aproximari numerice
In Matlab avem urmatoarele functii de aproximare numerica.
Precizia aproximarii poate fi adaptata.

inline - definirea functiei
>> g=inline('sin(x)./(sin(x)+cos(x)+4)')

fplot(numef,lm,specl) - graficul functiei utilizator, unde lm este un
vector cu 2 sau 4 valori indicand limitele pentru x si eventual y,iar
specl este specificatorul de linie acelasi ca la comanda plot.

fminbnd(numef,xmin,xmax)- determinarea valorii minime a unei
functii pe un interval, unde [xmin,xmax] indica intervalul in care
cautam valoarea minima.

fzero(numef, x0) -calculul zerourilor(radacinilor) unei functii,
calculeaza o radacina a functiei cea mai aproape de x0.

quad(numef,a,b)- calculul integralei definite, unde a si b sunt
limitele intre care se integreaza. Putem calcula integrale duble sau
triple cu functiile dblquad(numef, ax,bx,ay,by) sau
triplequad(numef,ax,bx,ay,by,az,bz).
Precizia solutiei
In Matlab, solutiile chiar date de formule exacte sunt intotdeauna
aproximative si de aceea este bine ca inainte de a determina
solutia sa calculam precizia solutiei.
Formula preciziei este data de:

p < C * cond(A)* p(calculator) unde

C o constanta 1<C<10 ( recomandabil C=10)


p(calculator) precizia calculatorului, pentru PC-uri ~ 2.2*10-16
cond(A) functia Matlab- numarul de conditie al matricii referitor
la inversare.

Precizia de calcul, in cel mai defavorabil caz: 2.2*10-15 cond(A)

Pentru calcule cu numere foarte mari sau foarte mici folositi


Symbolic Math Toolbox → precizie vs. viteza de calcul
Precizia solutiei
Vrem sa calculam exp(7.0873e002). ans=?

Solutie folosind un mic artificiu:


a = 7.0873e2;
x = a/log(10);
D = floor(x); % D va fi un intreg, puterea lui 10
F = 10^(x-D); % va fi F mantisa

F = 6.27376373225551 % mantisa
D = 307 % exponentul (power of ten)

ans = 6.273763732256170e+307

Symbolic Math Toolbox - functia vpa (S,D)


Tipuri de date in Matlab
Un tip de date defineste un set de valori si operatiile permise pe
aceste valori.

Tipurile de date fundamentale din Matlab:


int16 numar intreg 16-biti
single numar precizie simpla (32 biti)
double numar precizie dubla (implicit 64 biti )
logical numar logical, boolean
char sir de caractere
sym obiect simbolic

Un obiect simbolic este o structura de date care stocheaza


reprezentarea unui simbol – folosit pentru reprezentarea
variabilelor, expresiilor si matricilor simbolice.
Calcul simbolic
Toolbox-ul Symbolic Math - lista completa a functiilor si
comenzilor Matlab pentru calcul simbolic.

Pe cale simbolica putem efectua operatiile de derivare, integrare,
calcularea limitelor, simplificarea expresiilor algebrice si
rezolvarea ecuatiilor.

Rezolvarea unei probleme pe cale simbolica trebuie sa inceapa cu
definirea obiectelor simbolice (simbolurilor), apoi se trece la
implementarea propriu-zisa a solutionarii problemei.

Definirea/crearea obiectelor simbolice se face cu comanda sym (un
obiect) sau syms (mai multe obiecte). Pentru crearea expresiilor
simbolice constante, trebuie folosita comanda sym. ( f = sym('5') e
diferita de f = 5, care nu defineste f ca o expresie simbolica)
Calcul simbolic

Datele numerice duc la rezultate efective, iar datele simbolice dau
un rezultat simbolic.

Forma simbolica este un rezultat exact in timp ce forma numerica
este un rezultat aproximativ (deoarece reprezentarea numerica are
un numar infinit de zecimale dupa virgula)
Exemplu: >> a=1/2+1/3
a =0.8333
>> b=sym(1)/sym(2)+sym(1)/sym(3)
b = 5/6

Intotdeauna putem obtine valoarea numerica a unui simbol cu


comanda double( )

Rezultatele simbolice nu se indenteaza!


Functii/comenzi pentru calcul simbolic

comanda s=sym(x,'optiune') – creaza o variabila simbolica x ce se
stocheaza in s, iar optiunea de reprezentare/afisare poate fi: d (numar
decimal), f (numar real), r (numar rational), e-(numar in forma
rationala plus diferenta intre expresia rationala teoretica si expresia
actuala, reala (a calculatorului) in termeni exponentiali (the floating-
point relative accuracy); real- specifica proprietatile matematice a
variabilei simbolice create.

comanda findsym(f) – determina ce variabile simbolice sunt
prezente in expresia f.

subs(f,x,val) – substituirea/inlocuirea simbolurilor x dintr-o
expresie simbolica f , cu o valoare , val.

collect(f,v) - ordonam in raport cu puterile lui v o expresie f. Daca
variabila v lipseste se considera implicit x.
>> syms x y
>> collect((x+y)*(x^2+y^2+1))
ans =
x^3+y*x^2+(y^2+1)*x+y*(y^2+1)
Functii/comenzi pentru calcul simbolic

expand(f) - scrierea expresiei f cu elementele ei constitutive.
Aceasta functie calculeaza produse de polinoame, desface expresii
trigonometrice, exponentiale sau logaritmice.
>> expand(cos(x+y))
ans =
cos(x)*cos(y)-sin(x)*sin(y)

simplify(f) - simplifica expresia f.
>> simplify((x^2+x-2)/(x-1))
ans =
x+2

[n1,n2]=numden(f) calculeaza f ca o expresie rationala si
calculeaza numaratorul n1 si numitorul n2.Nu face si simplificarile!

solve('eq1', 'eq2', …'eqn', 'var1', 'var2'...'varn')- pentru
rezolvarea ecuatiilor si a sistemelor de ecuatii unde eqn sunt
expresiile simbolice reprezentand ecuatiile, iar varn sunt variabilele
simbolice ale necunoscutelor. Se presupune ca eq=0 (ducem toti
termenii in stanga!)
Functii simbolice
Unele functii simbolice au primit acelasi nume ca cele pentru
calcule pentru simplicitate.

det - functie care calculeaza determinantul unei matrice simbolice.
>>syms a b c d;
>>det([a, b; c, d]) ans = a*d-b*c

inv -functie care calculeaza inversa unei matrice simbolice
numeric sau simbolic. Exemple:
>>A = sym([a b;c d]);
>>inv(A)
ans =
[ d/(a*d-b*c), -b/(a*d-b*c)]
[ -c/(a*d-b*c), a/(a*d-b*c)]

rank - functie care calculeaza rangul maxim al unei matrice simbolice

factor(f)- factorizeaza expresia f. Daca f este un numar intreg face
descompunerea lui f in numere prime.
>> factor(x^3-y^3+x^2-y^2) ans = (x-y)*(x^2+x+y*x+y+y^2)
>> factor(13482) ans= 2 3 3 7 107
>> factor(sym(13482)) ans = (2)*(3)^2*(7)*(107)
Functii simbolice

limit(numef) - calculeaza limita unei functii
- numef este o expresie simbolica a unei functii de variabila x, sau
numele unei astfel de functii. Limita se calculeaza in 0.
>> syms x ; limit(sin(x)/x) ans =1
- limita in alt punct trebuie sa indicam valoarea catre care tinde x.
>> limit((x^2-1)*log(x),2) ans = 3*log(2)
- limite laterale indicand ‚left’- stanga, respectiv ‚right’ -dreapta.
>> limit(1/x,x,0,'left') ans = -Inf
>> limit((2-x-x^2)/(x^2+1),x,inf,'left') ans = -1

diff - derivata unei functii date. Variabila de derivare este considerata
implicit x.
>> diff(x^5*log(x^2+1)) ans = 5*x^4*log(x^2+1)+2*x^6/(x^2+1)
-derivate de ordin superior indic ca argument a lui diff ordinul derivatei
>> diff(x^5*log(x^2+1), 3)
-derivata in functie de alta variabila decat x, indicata intre apostrofi – se
foloseste in calculul derivatelor partiale.
>>diff(t*sin(t^2+1),'t') ans = sin(t^2+1)+2*t^2*cos(t^2+1)
>>f (x, y) = x3 *sin y diff(diff(x^3*sin(y),2),'y') ans = 6*x*cos(y)
Functii simbolice
Functiile int si diff sunt inverse.

int- calculul primitivei unei functii
>>int(5*x^4*log(x^2+1)+2*x^6/(x^2+1)) ans = x^5*log(x^2+1)

Putem calcula si integrale definite indicand limitele de integrat (care pot
fi simboluri):
>> int(3*x^2,sin(t),cos(t)) ans = cos(t)^3-sin(t)^3

Acest lucru ne permite sa facem diverse calcule complexe

>>int(int(3*x^2,sin(t),1),t) ans = t+1/3*sin(t)^2*cos(t)+2/3*cos(t)


ezplot(f)- graficul expresiei f=f(x) in intervalul implicit
-2*pi < x < 2*pi.
Polinoame

Notatia utilizata la polinoame este una simbolica.

Matlab utilizeaza in calcule un vector ce are ca elemente
coeficientii monoamelor.
Ex :se foloseste vectorul p=[1 0 0 0 -5 4] pentru a
reprezenta polinomul: p=x5 - 5x + 4

Avem la stanga coeficientul monomului de grad maxim.

Avem coeficient zero pentru monoamele care lipsesc (cele
de grad 4, 3 si 2).

Numarul elementelor este cu 1 mai mare decat gradul
polinomului (adica 6, 5 fiind gradul polinomului+1).
Manipularea polinoamelor
In Matlab, manipularea polinoamelor se face prin intermediul mai
multor functii aplicate asupra vectorilor coeficientilor:

w=conv(u,v) - inmultirea a doua polinoame, unde u si v sunt
vectorii coeficientilor polinoamelor care se inmultesc, iar w este
vectorul coeficientilor polinomului produs.

[c,r]=deconv(p,q) - impartirea a doua polinoame,unde c este
vectorul coeficientilor catului, iar r este vectorul coeficientilor
restului.

roots(p) -determinarea radacinilor unui polinom

w=poly(v) -determinarea polinomului ale carui radacini sunt
elementele unui vector v

polyval(vcoef,x)-determinarea valorii polinomului reprezentat de
vectorul coeficientilor vcoef, intr-un punct x. (atentie! x poate fi si
un vector!)

w=polyder(p) -derivata polinomului p , unde w sunt coeficientii
rezultati.
Manipularea polinoamelor
Deseori avem nevoie sa determinam un polinom de un anumit grad
care sa aproximeze un set de date experimentale.

Una dintre metodele de aproximare este metoda celor mai mici
patrate (the least squares method)- in care polinomul de gradul n
trebuie generat:

yn(x)= a0xn+a1xn-1+...an-1x+an

astfel incat cei n+1 coeficienti aproximeaza cel mai bine datele
masuratorilor experimentale. n=1- aproximare lineara, n=2-
aproximare patratica etc.

In Matlab acesti coeficienti sunt calculati cu functia polyfit.

Pentru evaluarea acestei aproximari putem folosi functia polyval.
Manipularea polinoamelor


w=polyfit(x,y,n)-determinarea unui polinom de un anumit grad
care sa aproximeze un set de date experimentale in sensul
metodei celor mai mici patrate, unde w este vectorul coeficientilor
polinomului cautat, vectorii x si y sunt vectorii datelor
experimentale, iar n este gradul polinomului cautat.

Exemplu: daca x=0:pi/10:pi, iar y=sqrt(x) atunci polinomul de


gradul 4 ce aproximeaz setul de date este dat de
>> polyfit(x,y,4)
ans =
-0.2969 1.4531 -2.5609 2.3776 0.0183
Adica polinomul:
-0.2969x4 +1.4531x3 - 2.5609x2 + 2.3776x + 0.0183
Manipularea polinoamelor

interp1(x,y,x0, ‚metoda’)-pentru aflarea valorilor prin interpolare
polinomiala , unde x,y sunt vectorii datelor experimentale. X0 este
punctul in care vrem sa aflam valoarea, iar metoda poate fi:
nearest -nearest neighbor interpolation,
linear - linear interpolation (implicit),
spline - piecewise cubic spline interpolation (SPLINE)
cubic - shape-preserving piecewise cubic interpolation
Metodele spline si cubic necesita mai mult timp de calcul dar sunt
mai precise.

Exemplu :pentru functia sqrt(x) in pct 1.1 avem valorile:


>> sqrt(1.1) ans =1.0488
>> interp1(x,y,1.1,'nearest') ans =1.0954
>> interp1(x,y,1.1,'linear') ans =1.0477
>> interp1(x,y,1.1,'spline') ans =1.0489
>> interp1(x,y,1.1,'cubic') ans = 1.0488
Rezolvarea sistemelor de ecuatii liniare

Pe cale numerica, in Matlab se pot rezolva:



sisteme compatibile determinate

sisteme compatibile nedeterminate (se pot gasi maxim 2
solutii particulare)
In rezolvarea sistemelor liniare in Matlab se presupune forma
matriceala:
A*X=b
respectiv,
Y*A=b
A-matricea coeficientilor
b-vectorul coloana al termenilor liberi si
X, Y- vectorul coloana/linie al necunoscutelor.

Un sistem de ecuatii liniare este definit in Matlab prin definirea


matricei A si a vecorului b.
Rezolvarea sistemelor compatibile determinate

Pot fi rezolvate prin doua metode numerice diferite:



Metoda inversarii matriceale

Metoda impartirii la stanga/dreapta

Metoda inversarii matriceale

In cazul unui sistem patratic, solutia sistemului este obtinuta


prin inversarea matricei coeficientilor si inmultirea ei cu
vectorul termenilor liberi:
X = inv(A) * b

respectiv,

Y = b * inv(A)
Rezolvarea sistemelor compatibile determinate
In Matlab, aceasta metoda nu necesita determinarea inversei
matricei coeficienţilor.

S-a introdus operatorul \ care calculeaza solutia sistemelor de


ecuatii liniare prin metoda eliminarii in versiunea Gauss.

Metoda impartirii la stanga /dreapta

X = A\ b
respectiv,
Y=b/A
Soluia cu operatorul / este mult mai rapida decat cu formula clasica
a inversarii, acest fapt devenind observabil atunci cand matricile
sunt de mari dimensiuni. Astfel pentru matrici de ordinul 1000
soluia / a fost de 400 ori mai rapida.
Rezolvarea sistemelor compatibile nedeterminate

In cazul sistemelor compatibile nedeterminate nu se pot


determina pe cale numerica toate solutiile, acestea fiind in
numar infinit.

Se poate determina o solutie particulara folosind una din


urmatoarele doua metode:

Metoda pseudo-inversarii matriceale

Metoda impartirii la stanga/dreapta
Metoda pseudo-inversarii matriceale

Solutia sistemului este obtinuta prin inmultirea pseudo-inversei


matricei coeficientilor cu vectorul termenilor liberi. Se
utilizata pseudo-inversa Moore-Penrose a unei matrici -
functia pinv: X = pinv(A) * b
respectiv,
Y = b * pinv(A)
Rezolvarea sistemelor compatibile nedeterminate

Metoda impartirii la stanga /dreapta

X = A\ b
respectiv,
Y=b/A

In acest caz, aceasta metoda realizeaza cautarea acelei solutii a


sistemului care minimizeaza (in sensul celor mai mici patrate)
norma euclidiana a vectorului A*X-b si care are cel mult rang A
componente nenule.
Rezolvarea sistemelor de ecuaţii liniare folosind
Symbolic Math Toolbox

Metodele de rezolvare precizate anterior sunt valabile si pentru


rezolvarea pe cale simbolica:
1. metoda inversarii / metoda pseudo-inversarii;
2. metoda impartirii la stanga / dreapta.

Rezolvarea pe cale simbolica necesita de obicei studiul sistemului


si efectuarea solutionarii pe cazuri.
Reprezentari grafice in plan 2D

Matlab permite reprezentarea in plan a graficelor de


functii si a suprafetelor poligonale.

Reprezentarile grafice ale functiilor pot fi facute in mai


multe tipuri de coordonate:

carteziene,

polare,

logaritmice,

semilogaritmice
Reprezentari grafice in plan- 2D
O parte din functiile Matlab destinate reprezentarilor
grafice 2D:

plot(x,y, speclinie) - grafice in coordonate X-Y liniare; x
si y sunt vectorii ce definesc punctele de reprezentat, iar
speclinie este un sir de caractere intre ` ` reprezentand tipul
liniei ce uneste punctele definite de x si y, markerul cu care
se reprezinta punctele definite de x si y si culoarea liniei,
toate in aceasta ordine.

line(x,y) -reprezentarea grafica a liniilor poligonale

fill (x,y,s) - reprezentarea grafica a poligoanelor

loglog(x,y,s) -grafice in coordonate X-Y logaritmice

semilogx (x,y,s), semilogy(x,y,s) -grafice in coordonate X-
Y semilogaritmice (in baza 10)

polar(theta,rho,s) -grafice in coordonate polare
Reprezentari grafice in plan - 2D


Tipul de linie poate fi unul din simbolorile:
- continua (implicit) , -- intrerupta, : puncte, -. linie-punct

Tipul marker-ului:
+ ( semnul +), o (cerc), * (asterisc), . (punct), x (cruce),
s (patrat), d (romb), p (pentagon), h (hexagon), ^ (triunghi
cu un varf in sus), v (triunghi cu un varf in jos), > (triunghi
cu un varf la dreapta), < (triunghi cu un varf la stanga)

Culorile pot fi urmatoarele simboluri:
r (rosu), g (verde), b (albastru), c (bleu), m (mov),
y (galben), k (negru), w (alb).
Reprezentari grafice in spatiu- 3D
In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafete
si corpuri 3-dimensionale. O parte din functiile Matlab destinate
reprezentarilor grafice 3D:

plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z sunt
vectorii ce definesc punctele de reprezentat, iar speclinie este un sir
de caractere intre ` ` reprezentand tipul liniei ce uneste punctele
definite de x si y, markerul cu care se reprezinta punctele definite de
x si y si culoarea liniei, toate in aceasta ordine.

mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub forma
unei retele (“mesh”)

surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelor
pline, cu iluminare

contour(x,y,z) , contourf(x,y,z,v) – reprezentarea grafica doar a
liniilor de contur

fill3 - reprezentarea grafica spatiala a poliedrelor

cylinder (y,n), sphere(n), ellipsoid(xc,yc,zc,rx,ry,rz) -
reprezentarea grafica a unor corpuri tridimensionale
Functii auxiliare pentru reprezentari grafice
Cateva functii auxiliare ce pot controla proprietatile modului de
reprezentare:

title - inserarea unui titlu pentru reprezentarea grafica

axes, axis - controlul aparitiei si stabilirea lungimii unitatilor de
reprezentare pe axele sistemului de coordonate

xlabel, ylabel, zlabel - inserarea etichetelor axelor sistemului de
coordonate

text, gtext - plasarea unui text pe grafic la o anumita pozitie, sau
selectata cu mouse-ul.

hold- pastrarea graficului curent si al proprietatilor sale

subplot - impartirea ferestrei de reprezentare grafica in mai multe
regiuni grafice.

grid - suprapunerea unei retele de linii pe grafic

meshgrid -definirea sub forma de retea de puncte a domeniului de
reprezentare 3D a suprafetelor.

colormap - stabilirea sau returnarea matricei de culoare

shading- stabilirea modului de umbrire pentru suprafetele 3D
Bibliografie


Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.

Calcul numeric-grafica-aplicatii M. Ghinea, V Fireteanu.
Mathlab. Ed. Teora 2001

http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf

http://www.mathworks.com/academia/student_center/tutorials/
launchpad.html

Documentatie Octave in format HTML
https://www.gnu.org/software/octave/doc/interpreter/

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