Soft Matematic
Soft Matematic
tradu.
Radu Tiberiu Trmbit as
iii
iv Prefat a
Cuprins
1. Introducere n MATLAB 1
1.1. Lansarea MATLAB si sistemul de help . . . . . . . . . . . . . . . . 2
1.2. Modul calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Generarea matricelor . . . . . . . . . . . . . . . . . . . . . 6
1.3.2. Indexarea si notat ia ,,: . . . . . . . . . . . . . . . . . . . . 11
1.3.3. Operat ii n sens matricial si n sens tablou . . . . . . . . . . 14
1.3.4. Analiza datelor . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.5. Operatori relat ionali si logici . . . . . . . . . . . . . . . . . 20
1.4. Programarea n MATLAB . . . . . . . . . . . . . . . . . . . . . . 24
1.4.1. Fluxul de control . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.2. Fisiere M . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.3. Argumente funct ie . . . . . . . . . . . . . . . . . . . . . . 33
1.4.4. Num ar variabil de argumente . . . . . . . . . . . . . . . . . 36
1.4.5. Variabile globale . . . . . . . . . . . . . . . . . . . . . . . 38
1.4.6. Recursivitate . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.4.7. Alte tipuri numerice . . . . . . . . . . . . . . . . . . . . . 42
1.4.8. Controlul erorilor . . . . . . . . . . . . . . . . . . . . . . . 44
1.5. Toolbox-urile Symbolic . . . . . . . . . . . . . . . . . . . . . . . . 46
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2. Grac a n MATLAB 55
2.1. Grace bidimensionale . . . . . . . . . . . . . . . . . . . . . . . . 56
2.1.1. Grace de baz a . . . . . . . . . . . . . . . . . . . . . . . . 56
v
vi Cuprins
2.1.2. Axe si adnotarea . . . . . . . . . . . . . . . . . . . . . . . 62
2.1.3. Mai multe grace pe aceeasi gur a . . . . . . . . . . . . . 65
2.2. Grace tridimensionale . . . . . . . . . . . . . . . . . . . . . . . . 67
2.3. Salvarea si imprimarea gracelor . . . . . . . . . . . . . . . . . . . 75
2.4. Facilit at i grace noi n MATLAB 7 . . . . . . . . . . . . . . . . . . 77
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3. Algebr a liniar a n MATLAB 79
3.1. Rezolvarea sistemelor de ecuat ii liniare n MATLAB . . . . . . . . 79
3.1.1. Sisteme p atratice . . . . . . . . . . . . . . . . . . . . . . . 80
3.1.2. Sisteme supradeterminate . . . . . . . . . . . . . . . . . . 80
3.1.3. Sisteme subdeterminate . . . . . . . . . . . . . . . . . . . 81
3.1.4. Factorizarea LU si Cholesky . . . . . . . . . . . . . . . . . 82
3.1.5. Factorizarea QR . . . . . . . . . . . . . . . . . . . . . . . 83
3.2. Polinoame si potrivirea datelor n MATLAB . . . . . . . . . . . . . 87
3.3. Valori si vectori proprii n MATLAB . . . . . . . . . . . . . . . . . 94
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4. Interpolare n MATLAB 107
4.1. Interpolare unidimensional a . . . . . . . . . . . . . . . . . . . . . 107
4.2. Interpolarea funct iilor de mai multe variabile n MATLAB . . . . . 111
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5. Functii de funct ii 119
5.1. Integrare numeric a n MATLAB . . . . . . . . . . . . . . . . . . . 119
5.2. Calculul integralelor duble n MATLAB . . . . . . . . . . . . . . . 122
5.3. Ecuat ii neliniare si minimizare . . . . . . . . . . . . . . . . . . . . 123
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6. Ecuat ii diferent iale n MATLAB 131
6.1. Rezolvitori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.2. Exemple non-stiff . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.3. Opt iuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.4. Ecuat ii stiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
6.5. Tratarea evenimentelor . . . . . . . . . . . . . . . . . . . . . . . . 145
6.6. Ecuat ii implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Bibliograe 165
Indice 167
Lista surselor MATLAB
1.1 Funct ia stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.2 Funct ia sqrtn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.3 Funct ia fd deriv . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4 Funct ia companb . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.5 Funct ia momente . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.6 Funct ia koch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7 Fulgul lui Koch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.1 Reprezentarea grac a a unei funct ii implicite . . . . . . . . . . . . 70
3.1 Exemplu de aproximare n sensul celor mai mici p atrate . . . . . . . 95
6.1 Sistemul lui R ossler . . . . . . . . . . . . . . . . . . . . . . . . . . 137
6.2 Problem a stiff cu informat ii despre jacobian . . . . . . . . . . . . . 146
6.3 Problema celor dou a corpuri . . . . . . . . . . . . . . . . . . . . . 149
6.4 Funct iile fox2 si events pentru problema de urm arire . . . . . . 153
vii
viii LISTA SURSELOR MATLAB
CAPITOLUL 1
Introducere n MATLAB
Cuprins
1.1. Lansarea MATLAB si sistemul de help . . . . . . . . . . . . . . 2
1.2. Modul calculator . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Generarea matricelor . . . . . . . . . . . . . . . . . . . 6
1.3.2. Indexarea si notat ia ,,: . . . . . . . . . . . . . . . . . . 11
1.3.3. Operat ii n sens matricial si n sens tablou . . . . . . . . 14
1.3.4. Analiza datelor . . . . . . . . . . . . . . . . . . . . . . 17
1.3.5. Operatori relat ionali si logici . . . . . . . . . . . . . . . 20
1.4. Programarea n MATLAB . . . . . . . . . . . . . . . . . . . . 24
1.4.1. Fluxul de control . . . . . . . . . . . . . . . . . . . . . 24
1.4.2. Fisiere M . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.3. Argumente funct ie . . . . . . . . . . . . . . . . . . . . 33
1.4.4. Num ar variabil de argumente . . . . . . . . . . . . . . . 36
1.4.5. Variabile globale . . . . . . . . . . . . . . . . . . . . . 38
1.4.6. Recursivitate . . . . . . . . . . . . . . . . . . . . . . . 39
1.4.7. Alte tipuri numerice . . . . . . . . . . . . . . . . . . . 42
1.4.8. Controlul erorilor . . . . . . . . . . . . . . . . . . . . . 44
1.5. Toolbox-urile Symbolic . . . . . . . . . . . . . . . . . . . . . . 46
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1
2 Introducere n MATLAB
MATLAB
1
este un sistem interactiv destinat calculelor numerice. Prima versiune
MATLABa fost scris a n anii 70 de Cleve Moler. MATLABusureaz a sarcina utiliza-
torului de a rezolva problemele numerice. Aceasta permite concentrarea asupra p art ii
creatoare a rezolv arii problemei si ncurajeaz a experimentele. MATLAB utilizeaz a
algoritmi cunoscut i si testat i, n care utilizatorul poate avea ncredere. Operat iile pu-
ternice se pot realiza usor cu un num ar mic de comenzi (de multe ori una sau dou a).
V a putet i programa propriul set de funct ii pentru aplicat ia dumneavoastr a. De ase-
menea, sunt disponibile facilit at i grace excelente, iar imaginile pot inserate n
documente L
A
T
E
X sau Word. Pentru o introducere mai detaliat a n MATLAB a se
vedea [5, 15, 10].
1.1. Lansarea MATLAB si sistemul de help
Sub sistemul de operare Windows, MATLAB se lanseaz a d and un click dublu pe
icon-ul corespunz ator sau select and programul din meniul de start. Prompterul din
fereastra de comand a este indicat prin >>. MATLAB poate utilizat n mai multe
moduri: ca un calculator avansat (c and comenzile sunt introduse n linia de comand a
de la tastatur a), ca un limbaj de programare de nivel nalt si sub form a de rutine
apelate dintr-un limbaj de programare, de exemplu C.
Informat iile de help pot obt inute n mai multe moduri:
din linia de comand a utiliz and comanda help subiect;
dintr-o fereastr a de help separat a, deschis a prin meniul Help;
utiliz and MATLAB helpdesk memorat pe disc sau CD.
Comanda help help da o scurt a descriere a sistemului de help, iar help far a nici
un parametru d a o list a a subiectelor de help. Primele linii arat a astfel
HELP topics:
matlab\general - General purpose commands.
matlab\ops - Operators and special characters.
matlab\lang - Programming language constructs.
matlab\elmat - Elementary matrices and matrix manipulation.
matlab\elfun - Elementary math functions.
matlab\specfun - Specialized math functions.
matlab\matfun - Matrix functions - numerical linear algebra.
Pentru a obt ine informat ii de help despre funct iile elementare se tasteaz a
1
MATLAB
1;
Inf, desemneaz a innitul;
NaN, Not a Number, care se obt ine ca rezultat al unei operat ii ilegale sau al
unei nedetermin ari din analiza matematic a (0/0, /, , etc.).
Notat ia cu exponent este de asemenea utilizat a:
1.3412e + 03 = 1.3412 10
3
= 1341.2
1.3412e 01 = 1.3412 10
1
= 0.13412
4 Introducere n MATLAB
Toate calculele se realizeaz a n virgul a otant a. Formatul n care MATLAB aseaz a
numerele este controlat de comanda format. Tastat i help format pentru o list a
complet a. Tabela urm atoare d a c ateva exemple.
Comanda Exemple de iesiri
format short 31.4162(4 zecimale)
format short e 31.416e+01
format long e 3.141592653589793e+000
format short g 31.4162(4 zecimale)
format bank 31.42(2 zecimale)
Comanda format compact elimin a liniile goale de la iesire si permite s a se
aseze mai mult a informat ie.
Numele de variabile n MATLAB sunt formate din secvent e de litere si cifre,
prima ind o liter a. Exemple: x, y, z525, TotalGeneral. Se face distinct ie ntre
literele mari si cele mici. Exist a si nume speciale, a c aror folosire trebuie evitat a, cum
ar :
- eps = 2.2204e-16 = 2
54
este epsilon-ul masinii care reprezint a cel
mai mare num ar cu proprietatea c a 1+eps nu poate distins de 1;
- pi = .
Dac a se fac calcule cu numere complexe folosirea variabilelor i si j este contraindi-
cat a, deoarece ele desemneaz a unitatea imaginar a. D am c ateva exemple:
>>x = 3-24
x =
-13
>>y = x
*
5
y =
-65
>>eps
ans =
2.2204e-016
Variabila special a ans p astreaz a valoarea ultimei expresii evaluate. Ea poate utili-
zat a n expresii, la fel ca orice alt a variabil a.
>>3-24
ans =
-13
>>ans
*
5
ans =
-65
1.2. Modul calculator 5
cos, sin, tan, csc, sec, cot Funct ii trigonometrice
acos, asin, atan, atan2,
asec, acsc, acot
Funct ii trigonometrice inverse
cosh, sinh, tanh, sech, csch,
coth
Funct ii hiperbolice
acosh, asinh, atanh, asech,
acsch, acoth
Funct ii hiperbolice inverse
log, log2, log10, exp, pow2,
nextpow2
Funct ii exponent iale
ceil, fix, floor, round Rotunjiri
abs, angle, conj, imag, real Complexe
mod, rem, sign Rest, semn
airy, bessel
*
, beta
*
, erf
*
,
expint, gamma
*
, legendre
Funct ii matematice
factor, gcd, isprime, lcm,
primes, nchoosek, perms, rat,
rats
Funct ii din teoria numerelor
cart2sph, cart2pol, pol2cart,
sph2cart
Transform ari de coordonate
Tabela 1.1: Funct ii elementare si funct ii matematice speciale ("fun
*
" indic a
existent a mai multor funct ii al c aror nume ncepe cu fun
Dac a dorim s a suprim am asarea ultimei expresii evaluate, vom pune caracterul
,,; la sf arsitul expresiei. Pe o linie de comand a se pot introduce mai multe expresii.
Ele pot separate prin virgul a, caz n care valoarea expresiei terminat a cu virgul a va
asat a, sau cu ,,;, caz n care valoarea expresiei nu va asat a.
>> x=-13; y = 5
*
x, z = x2+y, z2 = x2-y;
y =
-65
z =
104
Dac a dorim s a salv am variabile, o putem face cu comanda
>>save nume-fisier lista-variabile
unde variabilele din lista-variabile sunt separate prin blanc. Se pot folosi n
numele de variabile construct ii de tip wildcard, desemnate prin *. Rezultatul salv arii
se p astreaz a n sierul nume-fisier de tip .mat, n format binar, specic MA-
TLAB. Variabilele salvate pot nc arcate prin
>>load nume-fisier
6 Introducere n MATLAB
Se pot face salv ari si nc arc ari si n format ascii, n dubl a precizie sau prin ad augare
la un sier existent. Pentru detalii a se vedea help save si help load.
Lista variabilelor utilizate n sesiunea curent a se poate vizualiza cu whos:
>>whos
Name Size Bytes Class
ans 1x1 8 double array
i 1x1 8 double array
v 1x3 24 double array
x 1x1 8 double array
y 1x1 8 double array
z 1x1 8 double array
z2 1x1 8 double array
Grand total is 7 elements using 72 bytes
Comanda
>>diary nume-fisier
salveaz a toate comenzile si rezultatele asate pe ecran (cu except ia celor ale comen-
zilor grace) n sierul nume-fisier. Acest proces de ,,jurnalizare se termin a
prin
>>diary off
MATLAB dispune de un set bogat de funct ii elementare, care apar organizate pe
clase n tabela 1.1.
1.3. Matrice
Matricele sunt tipuri de date fundamentale n MATLAB. Ele sunt de fapt tablouri
multidimensionale n dubl a precizie. Cele mai folosite sunt matricele bidimensionale,
care sunt tablouri bidimensionale cu m linii si n coloane. Vectorii linie (m = 1) si
coloan a (n = 1) sunt cazuri particulare de matrice bidimensionale.
1.3.1. Generarea matricelor
Exist a mai multe moduri de a genera matrice. Unul dintre ele este cel explicit,
care utilizeaz a parantezele p atrate. Ca separatori ntre elemente se folosesc blancul
sau virgula n interiorul unei linii si punctul si virgula sau ,,newline pentru a separa
liniile:
>> A = [5 7 9
1 -3 -7]
A =
5 7 9
1 -3 -7
1.3. Matrice 7
zeros Matricea nul a
ones Matrice format a din elemente 1
eye Matricea identic a
repmat Replicarea si pavarea tablourilor
rand Numere aleatoare distribuite uniform
randn Numere aleatoare distribuite normal
linspace Vector de elemente echidistante
logspace Vector de elemente spat iate logaritmic
Tabela 1.2: Funct ii pentru generarea de matrice
>> B = [-1 2 5; 9 0 5]
B =
-1 2 5
9 0 5
>> C = [0, 1; 3, -2; 4, 2]
C =
0 1
3 -2
4 2
Dimensiunea unei matrice se poate obt ine cu comanda size:
>> v = size(A)
v =
2 3
>> [r, c] = size(A)
r =
2
c =
3
Prima form a returneaz a un vector cu dou a elemente ce cont ine num arul de linii si
respectiv de coloane. A doua pune dimensiunile n variabile separate.
MATLAB are un set util de funct ii pentru construirea unor matrice speciale,
vezi tabela 1.2. Matricele de zerouri, de elemente 1 si matricele identice se obt in
cu funct iile zeros, ones si respectiv eye. Toate au aceeasi sintax a. De exemplu,
zeros(m,n) sau zeros([m,n]) produce o matrice m n de zerouri, n timp
ce zeros(n) produce o matrice n n. Exemple:
>> zeros(2)
ans =
0 0
0 0
8 Introducere n MATLAB
>> ones(2,3)
ans =
1 1 1
1 1 1
>> eye(3,2)
ans =
1 0
0 1
0 0
O situat ie comun a se nt alneste atunci c and se doreste construirea unei matrice
identice sau nule av and o dimensiune egal a cu a unei matrice date A. Aceasta se
poate face cu eye(size(A)). O funct ie nrudit a cu size este funct ia length:
length(A) este cea mai mare dintre dimensiunile lui A. Astfel, pentru un vector
n 1 sau 1 n, x, length(x) returneaz a n.
Funct iile rand si randn genereaz a matrice de numere (pseudo-)aleatoare, uti-
liz and aceeasi sintax a ca si eye. Funct ia rand produce o matrice de numere alea-
toare av and distribut ia uniform a pe intervalul [0,1]. Funct ia randn genereaz a o ma-
trice de numere aleatoare av and distribut ia normal a standard. Apelate f ar a argumente,
ambele funct ii produc un singur num ar aleator.
>> rand
ans =
0.4057
>> rand(3)
ans =
0.9355 0.8936 0.8132
0.9169 0.0579 0.0099
0.4103 0.3529 0.1389
Inmult ire * .*
Inmult irea si mp art irea n sens tablou, sau pe elemente, se specic a pre-
ced and operatorul cu un punct. Dac a A si B sunt matrice de aceeasi dimensiune,
atunci C = A.
*
B nsemn a C(i,j)=A(i,j)
*
B(i,j) iar C = A.\B nseamn a
C(i,j)=B(i,j)/A(i,j). Pentru A si B ca n exemplul precedent:
>> A.
*
B
ans =
1 2
3 4
>> B./A
ans =
1.0000 0.5000
0.3333 0.2500
Inversa unei matrice p atratice nesingulare se obt ine cu funct ia inv, iar determi-
nantul unei matrice p atratice cu det.
Ridicarea la putere este denit a ca putere a unei matrice, dar forma cu punct
face ridicarea la putere element cu element. Astfel, dac a A este o matrice p atratic a,
atunci A2 este A
*
A, dar A.2 se obt ine ridic and la p atrat ecare element al lui A:
>> A2, A.2
ans =
7 10
15 22
16 Introducere n MATLAB
ans =
1 4
9 16
Operat ia . permite ca exponentul s a e un tablou c and dimensiunile bazei si
exponentului coincid, sau c and baza este un scalar:
>> x=[1 2 3]; y=[2 3 4]; Z=[1 2; 3 4];
>> x.y
ans =
1 8 81
>> 2.x
ans =
2 4 8
>> 2.Z
ans =
2 4
8 16
Ridicarea la putere a matricelor este denit a pentru toate puterile, nu numai
pentru ntregi pozitivi. Dac a n<0 este un ntreg, atunci An este denit prin
inv(A)(-n). Pentru p nentreg, Ap este evaluat a utiliz and valorile proprii ale
lui A; rezultatul poate incorect sau imprecis dac a A nu este diagonalizabil a sau c and
A este prost condit ionat a din punct de vedere al valorilor proprii.
Transpusa conjugat a a matricei A se obt ine cu A. Dac a A este real a, atunci
aceasta este transpusa obisnuit a. Transpusa f ar a conjugare se obt ine cu A.. Alter-
nativele funct ionale ctranspose(A) si transpose(A) sunt uneori mai conve-
nabile.
In cazul matricelor, putem utiliza find sub forma [i,j] = find(A), care retur-
neaz a vectorii i si j ce cont in indicii de linie si coloan a ale elementelor nenule.
Rezultatele operatorilor logici si ale funct iilor logice din MATLAB sunt tablouri
de elemente 0 si 1, care sunt exemple de tablouri logice. Astfel de tablouri pot
create si prin aplicarea funct iei logical unui tablou numeric. Tablourile logice pot
utilizate la indexare. Fie exemplul
>> clear
>> y = [1 2 0 -3 0]
y =
1 2 0 -3 0
>> i1 = logical(y)
Warning: Values other than 0 or 1 converted to logical 1(Type
"warning off MATLAB:conversionToLogical" to suppress
this warning.)
>> i1 =
1 1 0 1 0
>> i2 = ( y=0 )
i2 =
1 1 0 1 0
>> i3 = [1 1 0 1 0]
i3 =
1 1 0 1 0
24 Introducere n MATLAB
>> whos
Name Size Bytes Class
i1 1x5 5 logical array
i2 1x5 5 logical array
i3 1x5 40 double array
y 1x5 40 double array
Grand total is 20 elements using 90 bytes
>> y(i1)
ans =
1 2 -3
>> y(i2)
ans =
1 2 -3
>> isequal(i2,i3)
ans =
1
>> y(i3)
??? Subscript indices must either be real positive
integers or logicals.
Acest exemplu ilustreaz a regula c a A(M), unde M este un tablou logic de aceeasi
dimensiune ca si A, extrage elementele lui A corespunz and elementelor lui M cu partea
real a nenul a. Chiar dac a i2 are aceleasi elemente ca i3 (si la comparat ie ele ies
egale), doar tabloul logic i2 poate utilizat la indexare.
Un apel la find poate uneori evitat dac a argumentul s au este un tablou
logic.
In exemplul precedent, x(find(isfinite(x))) poate nlocuit cu
x(isfinite(x)). Se recomand a utilizarea lui find pentru claritate.
1.4. Programarea n MATLAB
1.4.1. Fluxul de control
MATLABare patru structuri de control: instruct iunea if, instruct iunea de ciclare
for, instruct iunea de ciclare whilesi instruct iunea switch. Cea mai simpl a form a
a instruct iunii if este
if expresie
instruct iuni
end
unde secvent a instruct iuni este executat a dac a p art ile reale ale elementelor lui
expresie sunt toate nenule. Secvent a de mai jos interschimb a x si y dac a x este
mai mare dec at y:
if x > y
temp = y;
1.4. Programarea n MATLAB 25
y = x;
x = temp;
end
Atunci c and o instruct iune if este urmat a n aceeasi linie de alte instruct iuni, este
nevoie de o virgul a pentru a separa if-ul de instruct iunea urm atoare:
if x > 0, x = sqrt(x); end
Alternativa se implementeaz a cu else, ca n exemplul
a = piexp(1); c = exp(pi);
if a >= c
b = sqrt(a2-c2)
else
b = 0
end
In ne, se pot introduce teste suplimentare cu elseif (de notat c a nu este nici un
spat iu ntre else si if):
>> if a >= c
b = sqrt(a2-c2)
elseif ac > ca
b = ca/ac
else
b = ac/ca
end
Intr-un test if de forma ,,if condit ie1 & condit ie2, condit ie2 nu este evaluat a
dac a condit ie1 este fals a (asa-numit a evaluare prin scurtcircuit). Acest lucru este util
c and evaluarea lui condit ie2 ar putea da o eroare probabil din cauza unei variabile
nedenite sau a unei dep asiri de indice.
Ciclul for este una dintre cele mai utile construct ii MATLAB, desi codul este
mai compact f ar a ea. Sintaxa ei este
for variabil a = expresie
instruct iuni
end
De obicei, expresie este un vector de forma i:s:j. Instruct iunile sunt executate
pentru variabil a egal a cu ecare element al lui expresie n parte. De exemplu, suma
primilor 25 de termeni ai seriei armonice 1/i se calculeaz a prin
>> s = 0;
>> for i = 1:25, s = s + 1/i; end, s
s =
3.8160
26 Introducere n MATLAB
Un alt mod de a deni expresie este utilizarea notat iei cu paranteze p atrate:
for x = [pi/6 pi/4 pi/3], disp([x, sin(x)]), end
0.5236 0.5000
0.7854 0.7071
1.0472 0.8660
Ciclurile for pot imbricate, indentarea ajut and n acest caz la cresterea li-
zibilit at ii. Editorul-debuger-ul MATLAB poate realiza indentarea automat a. Codul
urm ator construieste o matrice simetric a 5 pe 5 , A, cu elementul (i, j) egal cu i/j
pentru j i:
n = 5; A = eye(n);
for j=2:n
for i = 1:j-1
A(i,j)=i/j;
A(j,i)=i/j;
end
end
Expresia din ciclul for poate o matrice, n care caz lui variabil a i se atribuie
succesiv coloanele lui expresie, de la prima la ultima. De exemplu, pentru a atribui
lui x ecare vector al bazei canonice, putem scrie for x=eye(n), ..., end.
Ciclul while are forma
while expresie
instruct iuni
end
Secvent a instruct iuni se execut a at at timp c at expresie este adev arat a. Exemplul
urm ator aproximeaz a cel mai mic num ar nenul n virgul a otant a:
x = 1;
while x>0, xmin = x; x = x/2; end, xmin
xmin =
4.9407e-324
Execut ia unui ciclu while sau for poate terminat a cu o instruct iune break, care
d a controlul primei instruct iuni de dup a end-ul corespunz ator. Construct ia while
1, ..., end, reprezint a un ciclu innit, care este util atunci c and nu este convenabil s a
se pun a testul la nceputul ciclului. (De notat c a, spre deosebire de alte limbaje, MA-
TLAB nu are un ciclu ,,repeat-until.) Putem rescrie exemplul precedent mai concis
prin
x = 1;
while 1
xmin = x;
x = x/2;
1.4. Programarea n MATLAB 27
if x == 0, break, end
end
xmin
In gene-
ral, putem avea orice num ar de argumente de intrare si de iesire.) Numele de funct ie
trebuie s a e la fel ca al sierului .m n care funct ia este memorat a n cazul nostru
stat.m.
A doua linie a unui sier funct ie se numeste linie H1 sau help 1. Se recomand a ca
ea s a aib a urm atoarea form a: s a nceap a cu un %, urmat f ar a nici un spat iu de numele
funct iei cu litere mari, urmat de unul sau mai multe spat ii si apoi o scurt a descriere.
Descrierea va ncepe cu o liter a mare, se va termina cu un punct, iar dac a este n en-
glez a se vor omite cuvintele the si a. C and se tasteaz a help nume functie,
toate liniile, de la prima linie de comentariu p ana la prima linie care nu este de co-
mentariu (de obicei o linie goal a, pentru lizibilitatea codului surs a) sunt asate pe
ecran. Deci, aceste linii descriu funct ia si argumentele sale. Se convine ca numele de
funct ie si de argumente s a se scrie cu litere mari. Pentru exemplul stat.m avem
>>help stat
STAT media si abaterea medie patratica a unei selectii
[MED,ABMP] = STAT(X) calculeaza media si abaterea
medie patratica a selectiei X
Se recomand a documentarea tuturor funct iilor utilizator n acest mod, oric at de scurte
ar . Este util ca n liniile de comentariu din text sa apar a data scrierii funct iei si datele
c and s-au f acut modic ari. Comanda help lucreaz a similar si pe siere script.
Funct ia stat se apeleaz a la fel ca orice funct ie MATLAB:
>> [m,a]=stat(1:10)
m =
5.5000
a =
2.8723
>> x=rand(1,10);
[m,a]=stat(x)
1.4. Programarea n MATLAB 31
m =
0.5025
a =
0.1466
O funct ie mai complicat a este sqrtn, ilustrat a n sursa 1.2. D andu-se a > 0, ea
calculeaz a
Incep and cu versiunea 7, MATLAB permite funct ii anonime. Ele pot denite n
linii de comand a, siere M de tip funct ie sau script si nu necesit a un sier M. Sintaxa
pentru crearea unei funct ii anonime este
f = @(listaarg)expresie
1.4. Programarea n MATLAB 35
Sursa MATLAB 1.3 Funct ia fd deriv
function y = fd_deriv(f,x,h)
%FD_DERIV Aproximarea derivatei cu diferenta divizata.
% FD_DERIV(F,X,H) este diferenta divizata a lui F cu
% nodurile X si X+ H. H implicit: SQRT(EPS).
if nargin < 3, h = sqrt(eps); end
y = (feval(f,x+h) - feval(f,x))/h;
Instruct iunea de mai jos creaz a o funct ie anonim a care ridic a argumentul ei la p atrat:
sqr = @(x) x.2;
D am si un exemplu de utilizare
a = sqr(5)
a =
25
Pentru a evalua n corpul unei funct ii o funct ie transmis a ca parametru se utili-
zeaz a funct ia feval. Sintaxa ei este feval(fun,x1,x2,...,xn), unde fun
este funct ia, iar x1,x2,...,xn sunt argumentele sale. S a consider am funct ia
fd deriv din sursa 1.3. Aceast a funct ie aproximeaz a derivata funct iei dat a ca prim
argument cu ajutorul diferent ei divizate
f
(x)
f(x +h) f(x)
h
.
C and se tasteaz a
>> fd_deriv(@sqrt,0.1)
ans =
1.5811
primul apel la feval din fd deriv este equivalent cu sqrt(x+h). Putem utiliza
funct ia sqrtn (sursa MATLAB 1.2) n locul funct ie predenite sqrt:
>> fd_deriv(@sqrtn,0.1)
k x_k er. relativa
1: 5.5000000745058064e-001 8.18e-001
2: 3.6590910694939033e-001 5.03e-001
% Restul iesirii lui sqrtn se omite
ans =
1.5811
36 Introducere n MATLAB
Putem transmite lui fd deriv un obiect inline, dar o expresie de tip sir nu
funct ioneaz a:
>> f = inline(exp(-x)/(1+x2));
>> fd_deriv(f,pi)
ans =
-0.0063
>>fd_deriv(exp(-x)/(1+x2),pi)
??Error using==>feval Invalid function name exp(-x)/(1+x2)
Error in ==> C:\radu\sane2\FD_DERIV.M
On line 8 ==> y = (feval(f,x+h) - feval(f,x))/h;
Pentru a face fd deriv s a accepte expresii de tip sir vom insera
f=fcnchk(f);
la nceputul funct iei (n acest mod lucreaz a ezplot si alte funct ii MATLAB, vezi
[15] pentru exemple).
Este uneori necesar s a se ,,vectorizeze un obiect inline sau o expresie de tip sir,
adic a s a se converteasc a nmult irile, ridic arile la putere si mp art irile n operat ii n
sens tablou, astfel ca s a se poat a utiliza argumente vectori si matrice. Acest lucru se
poate realiza cu funct ia vectorize:
>> f = inline(log(a
*
x)/(1+y2));
>> f = vectorize(f)
f =
Inline function:
f(a,x,y) = log(a.
*
x)./(1+y.2)
Dac a fcnchk se apeleaz a cu un argument suplimentar vectorized, ca n
fcnchk(f,vectorized), atunci ea vectorizeaz a sirul f.
MATLAB 7 a simplicat modul de apel al argumentelor de tip funct ie. Se pot
apela funct ii referite cu function handle prin interfat a de apel standard n loc de
feval. Astfel, un function handle va tratat ca si un nume de funct ie
fhandle(arg1, arg2, ..., argn)
Dac a funct ia nu are nici un argument apelul ei are forma
fhandle()
Linia a doua a funct iei fd deriv (sursa 1.3) ar putut scris a n MATLAB 7 sub
forma
y = (f(x+h) - f(x))/h;
1.4.4. Num ar variabil de argumente
_
A
1
A
2
. . . . . . A
m
I 0 0
I
.
.
.
.
.
.
.
.
.
.
.
.
I 0
_
_
.
Solut ia este de a utiliza varargin asa cum se arat a n sursa MATLAB 1.4. C and
Sursa MATLAB 1.4 Funct ia companb
function C = companb(varargin)
%COMPANB Matrice companion pe blocuri.
% C = COMPANB(A_1,A_2,...,A_m) este matricea
% companion pe blocuri corespunzatoare
% matricelor n-pe-n A_1,A_2,...,A_m.
m = nargin;
n = length(varargin{1});
C = diag(ones(n
*
(m-1),1),-n);
for j = 1:m
Aj = varargin{j};
C(1:n,(j-1)
*
n+1:j
*
n) = -Aj;
end
varargin apare n lista de argumente, argumentele furnizate sunt copiate ntr-un
tablou de celule numit varargin. Tablourile de celule (cell arrays) sunt structuri de
date de tip tablou, n care ecare element poate p astra date de tipuri si dimensiuni di-
ferite. Elementele unui tablou de celule pot selectate utiliz and acolade. Consider am
apelul
>> X = ones(2); C = companb(X, 2
*
X, 3
*
X)
C =
-1 -1 -2 -2 -3 -3
-1 -1 -2 -2 -3 -3
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
Dac a inser am o linie ce cont ine doar varargin la nceputul lui companb apelul
de mai sus produce
38 Introducere n MATLAB
varargin =
[2x2 double] [2x2 double] [2x2 double]
Deci, varargin este un tablou de celule 1 3 ale c arui elemente sunt matrice
2 2 transmise lui companb ca argumente, iar varargin{j} este a j-a matrice
de intrare, A
j
. Nu este necesar ca varargin s a e singurul argument de intrare, dar
dac a apare el trebuie s a e ultimul.
Analogul lui varargin pentru argumente de iesire este varargout.
In sursa
MATLAB 1.5 este dat un exemplu care calculeaz a momentele unui vector, p an a la
un ordin dorit. Num arul de argumente de iesire se determin a cu nargout si apoi se
creaz a tabloul de celule varargout ce cont ine iesirea dorit a. Ilustr am cu apelurile
funct iei momente din sursa 1.5:
>> m1 = momente(1:4)
m1 =
2.5000
>> [m1,m2,m3] = momente(1:4)
m1 =
2.5000
m2 =
7.5000
m3 =
25
Sursa MATLAB 1.5 Funct ia momente
function varargout = momente(x)
%MOMENTE Momentele unui vector.
% [m1,m2,...,m_k] = MOMENTE(X) returneaza momentele de
% ordin 1, 2, ..., k ale vectorului X, unde momentul
% de ordin j este SUM(X.j)/LENGTH(X).
for j=1:nargout, varargout(j) = sum(x.j)/length(x); end
1.4.5. Variabile globale
Variabilele din interiorul unei funct ii sunt locale spat iului de lucru al acelei
funct ii. Uneori este convenabil s a cre am variabile care exist a n mai multe spat ii de
lucru, eventual chiar cel principal. Aceasta se poate realiza cu ajutorul instruct iunii
global. Ca exemplu d am codurile pentru funct iile tic si toc (cu unele comentarii
prescurtate). Aceste funct ii pot contoriza timpul, gestion and un cronometru. Variabila
global a TICTOC este vizibil a n ambele funct ii, dar este invizibil a n spat iul de lucru
de baz a (nivel linie de comand a sau script) sau n orice alt a funct ie care nu o declar a
cu global.
1.4. Programarea n MATLAB 39
function tic
% TIC Start a stopwatch timer.
% TIC; any stuff; TOC
% prints the time required.
% See also: TOC, CLOCK.
global TICTOC
TICTOC = clock;
function t = toc
% TOC Read the stopwatch timer.
% TOC prints the elapsed time since TIC was used.
% t = TOC; saves elapsed time in t, does not print.
% See also: TIC, ETIME.
global TICTOC
if nargout < 1
elapsed_time = etime(clock,TICTOC)
else
t = etime(clock,TICTOC);
end
In interiorul unei funct ii, variabilele globale vor apare naintea primei aparit ii a
unei variabile locale, ideal la nceputul sierului. Se convine ca numele de variabile
globale s a e scrise cu litere mari, s a e lungi si sugestive.
1.4.6. Recursivitate
Funct iile pot recursive, adic a ele se pot autoapela, direct sau indirect. Recursivi-
tatea este un instrument puternic, desi nu toate calculele descrise n manier a recursiv a
pot implementate ecient n mod recursiv.
Funct ia koch din sursa MATLAB 1.6 utilizeaz a recursivitatea pentru a desena o
curb a Koch si este inspirat a din [5]. Construct ia de baz a este nlocuirea unui segment
de dreapt a prin patru segmente mai scurte. Partea din st anga sus a gurii 1.1 arat a
rezultatul aplic arii acestei construct ii unei linii orizontale. Imaginea din dreapta jos
ne arat a ce se nt ampl a c and ecare din aceste linii este prelucrat a. Imaginile din
st anga si dreapta jos ne arat a urm atoarele dou a niveluri de recursivitate.
Funct ia koch are trei argumente de intrare. Primele dou a, pl si pr dau coordo-
natele (x, y) ale capetelor segmentului curent si al treilea, level, indic a nivelul de
recursivitate cerut. Dac a level = 0 se deseneaz a un segment; altfel koch se autoa-
peleaz a de patru ori cu level decrementat cu 1 si cu puncte care denesc capetele
celor patru segmente mai scurte.
Figura 1.1 a fost obt inut a cu urm atorul cod:
pl=[0;0]; %left endpoint
pr=[1;0]; %right endpoint
40 Introducere n MATLAB
Sursa MATLAB 1.6 Funct ia koch
function koch(pl,pr,level)
%KOCH Curba Koch generata recursiv.
% Apel KOCH(PL, PR, LEVEL) unde punctele PL si PR
% sunt extremitatea stanga si dreapta
% LEVEL este nivelul de recursivitate.
if level == 0
plot([pl(1),pr(1)],[pl(2),pr(2)]); % Uneste pl si pr.
hold on
else
A = (sqrt(3)/6)
*
[0 1; -1 0]; % matrice rot./scal.
pmidl = (2
*
pl + pr)/3;
koch(pl,pmidl,level-1) % ramura stanga
ptop = (pl + pr)/2 + A
*
(pl-pr);
koch(pmidl,ptop,level-1) % ramura stanga-mijloc
pmidr = (pl + 2
*
pr)/3;
koch(ptop,pmidr,level-1) % ramura mijloc
koch(pmidr,pr,level-1) % ramura dreapta
end
for k = 1:4
subplot(2,2,k)
koch(pl,pr,k)
axis(equal)
title([Koch curve: level = ,num2str(k)],FontSize,16)
end
hold off
Apel and koch cu perechi de puncte echidistante situate pe cercul unitate se
obt ine o curb a numit a fulgul de z apad a al lui Koch (Kochs snowake). Codul este
dat n sursa 1.7. Funct ia snowflake accept a la intrare num arul de laturi edges
si nivelul de recursivitate level. Valorile implicite ale acestor parametrii sunt 7 si
respectiv 4.
In gura 1.2 se dau dou a exemple.
Pentru alte exemple de recursivitate, a se vedea funct iile MATLAB quad si
quadl si sursele din sect iunile ?? si ??, utilizate pentru integrarea numeric a.
1.4. Programarea n MATLAB 41
0 0.2 0.4 0.6 0.8 1
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5
Curba Koch: nivel = 1
0 0.2 0.4 0.6 0.8 1
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5
Curba Koch: nivel = 2
0 0.2 0.4 0.6 0.8 1
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5
Curba Koch: nivel = 3
0 0.2 0.4 0.6 0.8 1
0.2
0.1
0
0.1
0.2
0.3
0.4
0.5
Curba Koch: nivel = 4
Figura 1.1: Curbe Koch create cu funct ia koch.
Sursa MATLAB 1.7 Fulgul lui Koch
function snowflake(edges,level)
if nargin<2, level=4; end
if nargin<1, edges=7; end
clf
for k = 1:edges
pl = [cos(2
*
k
*
pi/edges); sin(2
*
k
*
pi/edges)];
pr = [cos(2
*
(k+1)
*
pi/edges); sin(2
*
(k+1)
*
pi/edges)];
koch(pl,pr,level);
end
axis(equal)
s=sprintf(Koch snowflake, level=%d, edges=%d,level, edges);
title(s,FontSize,16,FontAngle,italic)
hold off
42 Introducere n MATLAB
1 0.5 0 0.5 1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
Koch snowflake, level=4, edges=7
1 0.5 0 0.5 1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
Koch snowflake, level=3, edges=5
Figura 1.2: Fulgi Koch obt inut i cu snowflakes
1.4.7. Alte tipuri numerice
Tipul de date implicit n MATLAB este tipul de date double. Pe l ang a acesta,
MATLAB furmizeaz a si alte tipuri de date, av and scopul n principal de a realiza
economie de memorie. Acestea sunt
int8 si uint8 ntregi pe 8 bit i cu semn si f ar a semn;
int16 si uint16 ntregi pe 16 bit i cu semn si f ar a semn;
int32 si uint32 ntregi pe 32 bit i cu semn si f ar a semn;
single numere n virgul a otant a simpl a precizie (pe 32 de bit i).
Funct iile eye, ones, zeros pot returna date de iesire de tipuri ntregi sau single.
De exemplu,
>> ones(2,2,int8)
returneaz a o matrice 2 2 cu elemente de tipul int8
ans =
1 1
1 1
Funct iile care denesc tipuri de date ntregi au acelasi nume ca si tipul. De exem-
plu
x = int8(5);
atribuie lui x valoarea 5 reprezentat a sub forma unui ntreg pe 8 bit i. Funct ia class
permite vericarea tipului unui rezultat.
1.4. Programarea n MATLAB 43
>>class(x)
ans =
int8
Conversia unui num ar de tip double la un tip ntreg se face prin routunjire la cel
mai apropiat ntreg:
>> int8(2.7)
ans =
3
>>int8(-2.5)
ans =
-3
Funct iile intmax si intmin, av and ca argument un nume de tip ntreg, retur-
neaz a cea mai mare si respectiv cea mai mic a valoare de acel tip:
>> intmax(int16)
ans =
32767
>> intmin(int16)
ans =
-32768
Dac a se ncearc a conversia unui num ar mai mare dec at valoarea maxim a a unui ntreg
de un anumit tip la acel tip, MATLAB returneaz a valoarea maxim a (saturation on
overow).
>> int8(300)
ans =
127
Analog, pentru valori mai mici dec at valoarea minim a, se returneaz a valoarea minim a
de acel tip.
Dac a se realizeaz a operat ii aritmetice ntre ntregi de acelasi tip rezultatul este un
ntreg de acel tip. De exemplu
>> x=int16(5)+int16(9)
x =
14
>> class(x)
ans =
int16
Dac a rezultatul este mai mare dec at valoarea maxim a de acel tip, MATLAB retur-
neaz a valoarea maxim a de acel tip. Analog, pentru un rezultat mai mic dec at valoarea
44 Introducere n MATLAB
minim a, se returneaz a valoarea minim a de acel tip.
In ambele situat ii se d a un mesaj
de avertisment care se poate inhiba (sau reactiva) cu funct ia intwarning.
Dac a A si B sunt tablouri de tip ntreg, mp art irile n sens tablou, A./B si A.\B,
se realizeaz a n aritmetica n dubl a precizie, iar rezultatul se converteste la tipul ntreg
original, ca n exemplul
>> int8(4)./int8(3)
ans =
1
Se pot combina n expresii scalari de tip double cu scalari sau tablouri de tip
ntreg, rezultatul ind de tip ntreg:
class(5
*
int8(3))
ans =
int8
Nu se pot combina scalari ntregi sau tablouri de tip ntreg cu scalari sau tablouri de
un tip ntreg diferit sau de tip single.
Pentru toate operat iile binare n care un operand este un tablou de tip ntreg iar
cel alat este un scalar de tip double, MATLAB realizeaz a operat ia element cu element
n dubl a precizie si converteste rezultatul n tipul ntreg originar. De exemplu,
>> int8([1,2,3,4,5])
*
0.8
ans =
1 2 2 3 4
De notat c a: MATLAB calculeaz a [1,2,3,4,5]
*
0.8 n dubl a precizie si apoi
converteste rezultatul n int8; al doilea si al treilea element din tablou dup a
nmult irea n dubl a precizie sunt 1.6 si 2.4, care sunt routunjite la cel mai apropiat
ntreg, 2.
Tipul single va descris n ??.
Pentru detalii asupra tipurilor nondouble vezi [12, 13].
1.4.8. Controlul erorilor
Instruct iunea try permite s a se testeze dac a o anumit a comand a a generat o
eroare. Forma general a a instruct iunii try-catch este
try
instructiune
...
instructiune
catch
instructiune
...
1.4. Programarea n MATLAB 45
instructiune
end
Se execut a instruct iunile dintre try si catch. Dac a apare o eroare se execut a
instruct iunile dintre catch si end. Aceast a parte trebuie s a trateze eroare ntr-un
anumit mod. Blocurile try-catch se pot imbrica.
. Exist a dou a
toolbox-uri:
Symbolic Math Toolbox care asigur a accesul la nucleul Maple si la pachetul de
algebr a liniar a al Maple utiliz and o sintax a si un stil care sunt extensii naturale
ale limbajului MATLAB.
Extended Symbolic Math Toolbox extinde facilit at ile amintite mai sus pentru
a asigura acces la facilit at ile pachetelor negrace Maple, facilit at ile de progra-
mare si proceduri denite de utilizator.
Toolboxul Symbolic Math deneste un nou tip de date MATLAB numit obiect
simbolic sau sym. Intern, un obiect simbolic este o structur a de date care memoreaz a
o reprezentare sub form a de sir a simbolului. Toolbox-ul Symbolic Math utilizeaz a
obiectele simbolice pentru a reprezenta variabile simbolice, expresii si matrice. Arit-
metica cu care se opereaz a asupra obiectelor simbolice este implicit cea rat ional a.
Obiectele simbolice se construiesc cu ajutorul declarat iei sym. De exemplu,
instruct iunea
x = sym(x);
produce o variabil a simbolic a numit a x. Se pot combina mai multe declarat ii de acest
tip folosind forma syms:
syms a b c x y f g
Exemplele din aceast a sect iune presupun c a s-a executat aceast a comand a.
Derivare. O expresie simbolic a se poate deriva cu diff. S a cre am o expresie
simbolic a:
>> f=exp(a
*
x)
*
sin(x);
Derivata ei n raport cu x se obt ine astfel
>> diff_f=diff(f,x)
diff_f =
a
*
exp(a
*
x)
*
sin(x)+exp(a
*
x)
*
cos(x)
Dac a n este un ntreg, diff(f,x,n) calculeaz a derivata de ordinul n a lui f. De
exemplu, pentru derivata de ordinul al doilea
>> diff(f,x,2)
ans = a2
*
exp(a
*
x)
*
sin(x)+2
*
a
*
exp(a
*
x)
*
cos(x)-exp(a
*
x)
*
sin(x)
1.5. Toolbox-urile Symbolic 47
Pentru detalii suplimentare a se vedea help sym/diff sau doc sym/diff.
Integrare. Pentru a calcula primitiva unei expresii simbolice f se poate folosi
int(f,x).
Ca exemplu, s a calcul am primitiva lui g(x) = e
ax
sin cx:
>> g = exp(-a
*
x)
*
sin(c
*
x);
>> int_g=int(g,x)
int_g =
-c/(a2+c2)
*
exp(-a
*
x)
*
cos(c
*
x)-a/(a2+c2)
*
exp(-a
*
x)
*
sin(c
*
x)
D and comanda diff(int g,x) nu se obt ine g ci o expresie echivalent a, dar
dup a simplicare cu comanda simple(diff(int g,x)) se obt ine un sir de me-
saje care informeaz a utilizatorul asupra regulilor utilizate si n nal
ans = exp(-a
*
x)
*
sin(c
*
x)
Calcului
_
0
xsin xdx:
>> int(x
*
sin(x),x,0,pi)
ans = pi
Dac a Maple nu poate g asi integrala sub forma analitic a, ca n exemplul
>> int(exp(sin(x)),x,0,1)
Warning: Explicit integral could not be found.
ans =
int(exp(sin(x)),x = 0 .. 1)
se poate ncerca o aproximare numeric a:
>> quad(exp(sin(x)),0,1)
ans =
1.6319
Pentru detalii suplimentare a se vedea help sym/int sau doc sym/int.
Substitutii si simplic ari.
Inlocuirea unui parametru cu o valoare sau cu un alt
parametru se realizeaz a cu subs. De exemplu, s a calcul am integrala denit a a lui g
de mai sus pentru a=2 si c=4:
>> int_sub=subs(int_def_g,{a,c},{2,4})
int_sub =
107.0980
A se vedea help sym/int sau doc sym/int.
Funct ia simplify este o funct ie puternic a care aplic a diverse tipuri de identit at i
pentru a aduce o expresie la o form a mai ,,simpl a. Exemplu:
48 Introducere n MATLAB
>> syms h
>> h=(1-x2)/(1-x);
>> simplify(h)
ans = x+1
Funct ia simple este o funct ie neortodox a care are drept scop obt inerea unei expresii
echivalente care s a aib a cel mai mic num ar de caractere. Am dat mai sus un exemplu,
dar mai consider am unul:
>> [jj,how]=simple (cos(x)2+sin(x)2)
jj =
1
how =
simplify
Cel de-al doilea parametru de iesire are rolul de a inhiba mesajele lungi referitoare
la procesul de simplicare.
A se vedea help sym/simplify si help sym/simple sau doc
sym/simplify si doc sym/simple.
Serii Taylor. Comanda taylor este util a pentru a genera dezvolt ari Taylor sim-
bolice n jurul unei valori date a argumentului. Ca exemplu, s a calcul am dezvoltarea
de ordinul 5 a lui e
x
njurul lui x = 0:
>> clear, syms x, Tay_expx=taylor(exp(x),5,x,0)
Tay_expx =
1+x+1/2
*
x2+1/6
*
x3+1/24
*
x4
Comanda pretty scrie o expresie simbolic a ntr-un format apropiat de cel din ma-
tematic a:
>> pretty(Tay_expx)
2 3 4
1 + x + 1/2 x + 1/6 x + 1/24 x
S a compar am acum aproximanta pentru x = 2 cu valoarea exact a:
>> approx=subs(Tay_expx,x,2), exact=exp(2)
approx =
7
exact =
7.3891
>> frac_err=abs(1-approx/exact)
frac_err =
0.0527
1.5. Toolbox-urile Symbolic 49
3 2 1 0 1 2 3
0
2
4
6
8
10
12
14
16
18
x
Taylor
exp
Figura 1.3: Comparat ie ntre exponent ial a si dezvoltarea sa Taylor
Putem compara si grac cele dou a aproximante cu ezplot (a se vedea capitolul
2 pentru o descriere a facilit at ilor grace din MATLAB):
>> ezplot(Tay_expx,[-3,3]), hold on
>> ezplot(exp(x),[-3,3]), hold off
>> legend(Taylor,exp,Location,Best)
Gracul apare n gura 1.3. Funct ia ezplot este o modalitate convenabil a de a
reprezenta grac expresii simbolice.
Pentru detalii suplimentare a se vedea help sym/taylor sau doc
sym/taylor.
Limite. Pentru sintaxa si modul de utilizare a comenzii limit a se vedea help
sym/limit sau doc sym/limit. Ne vom limita la a da dou a exemple simple.
Primul calculeaz a lim
x0
sin x
x
:
>> L=limit(sin(x)/x,x,0)
L =
1
Al doilea exemplu calculez a limitele laterale ale funct iei tangent a n
2
.
>> LS=limit(tan(x),x,pi/2,left)
LS =
Inf
>> LD=limit(tan(x),x,pi/2,right)
LD =
-Inf
50 Introducere n MATLAB
Rezolvarea ecuat iilor. Toolbox-ul Symbolic Math poate rezolva ecuat ii si
sisteme de ecuat ii, inclusiv neliniare. A se vedea help sym/solve sau doc
sym/solve. Vom da c ateva exemple.
Inainte de rezolvarea unei ecuat ii vom sterge
memoria, vom deni simbolurile si ecuat iile. (Este o bun a practic a de a sterge me-
moria nainte de rezolvarea unei noi probleme pentru a evita efectele provocate de
valorile precedente ale unor variabile.)
Vom ncepe cu rezolvarea ecuat iei de gradul al doilea ax
2
+bx +c = 0.
>> clear, syms x a b c
>> eq=a
*
x2+b
*
x+c=0;
>> x=solve(eq,x)
x =
1/2/a
*
(-b+(b2-4
*
a
*
c)(1/2))
1/2/a
*
(-b-(b2-4
*
a
*
c)(1/2))
Este posibil ca la rezolvarea unei ecuat ii s a se obt in a mai multe solut ii (n exemplul de
mai sus s-au obt inut dou a). Se poate selecta una concret a prin indexare, de exemplu
x(1).
S a rezolv am acum sistemul liniar 2x 3y + 4z = 5, y + 4z + x = 10, 2z +
3x + 4y = 0.
>> clear, syms x y z
>> eq1=2
*
x-3
*
y+4
*
z=5;
>> eq2=y+4
*
z+x=10;
>> eq3=-2
*
z+3
*
x+4
*
y=0;
>> [x,y,z]=solve(eq1,eq2,eq3,x,y,z)
x =
-5/37
y =
45/37
z =
165/74
De notat c a ordinea n care se dau variabilele n lista de parametrii de intrare nu este
important a, pe c and ordinea n care se dau variabilele de iesire este important a.
Exemplul urm ator rezolv a sistemul neliniar y = 2e
x
si y = 3 x
2
.
>> clear, syms x y
>> eq1=y=2
*
exp(x); eq2=y=3-x2;
>> [x,y]=solve(eq1,eq2,x,y)
x =
.36104234240225080888501262630700
y =
2.8696484269926958876157155521484
1.5. Toolbox-urile Symbolic 51
Ultimul exemplu rezolv a ecuat ia trigonometric a sinx =
1
2
. Aceasta are o inni-
tate de solut ii. Secvent a de comenzi
>> clear, syms x, eq=sin(x)=1/2;
>> x=solve(eq,x)
d a doar solut ia
x =
1/6
*
pi
Pentru solut iile dintr-un anumit interval, de exemplu [2,3] se poate folosi comanda
simbolic a fsolve:
>> clear, x=maple(fsolve(sin(x)=1/2,x,2..3))
x =
2.6179938779914943653855361527329
Rezultatul este un sir de caractere, care poate convertit n double cu
str2double:
>> z=str2double(x), whos
z =
2.6180
Name Size Bytes Class
ans 1x33 264 double array
x 1x33 66 char array
y 1x1 8 double array
z 1x1 8 double array
Grand total is 68 elements using 346 bytes
Funct ia maple trimite comenzi Maple nucleului Maple. A se consulta help-urile
corespunz atoare si documentat ia.
Aritmetic a cu precizie variabil a (vpa). Exist a trei tipuri de operat ii aritmetice
n toolbox:
numeric operat iile MATLAB n virgul a otant a;
rat ional aritmetica simbolic a exact a Maple;
VPA aritmetica cu precizie variabil a Maple (variable precision arithmetic).
52 Introducere n MATLAB
Aritmetica de precizie variabil a se realizeaz a cu ajutorul funct iei vpa. Num arul de ci-
fre este controlat de variabila Maple Digits. Funct ia digitsaseaz a valoarea lui Di-
gits, iar digits(n), unde n este ntreg seteaz a Digits la n cifre. Comanda vpa(E)
evalueaz a E cu precizia Digits, iar vpa(E,n) evalueaz a E cu n cifre. Rezultatul este
de tip sym.
De exemplu, instruct iunile MATLAB
>> clear
>> format long
1/2+1/3
folosesc modul de calcul numeric pentru a produce
ans =
0.83333333333333
Cu toolbox-ul Symbolic Math, intruct iunea
>> sym(1/2)+1/3
va produce, folosind calculul simbolic
ans =
5/6
Tot n toolbox, cu aritmetica cu precizie variabil a, instruct iunile
>> digits(25)
>> vpa(1/2+1/3)
au ca rezultat
>> ans =
.8333333333333333333333333
Pentru a converti un num ar n precizie variabil a ntr-unul de tip double se poate
folosi funct ia double.
k=1
1
k
2
,
pentru k = 20, 200. C at de bine aproximeaz a S
n
suma seriei
S =
k=1
1
k
2
=
2
6
?
Problema 1.2. Scriet i un sier M de tip funct ie care evalueaz a dezvoltarea MacLa-
urin a funct iei ln(x + 1):
ln(x + 1) = x
x
2
2
+
x
3
3
+ (1)
n+1
x
n
n
+. . .
Convergent a are loc pentru x [1, 1]. Testat i funct ia MATLAB pentru valori ale
lui x din [0.5, 0.5] si vericat i ce se nt ampl a c and x se apropie de -1 sau 1.
Problema 1.3. Scriet i un script MATLABcare citeste un ntreg si determin a scrierea
sa cu cifre romane.
Problema 1.4. Implementat i algoritmul lui Euclid n MATLAB.
Problema 1.5. Implementat i n MATLAB c autarea binar a ntr-un tablou ordonat.
Problema 1.6. Scriet i cod MATLAB care creaz a, pentru o valoare dat a a lui n, ma-
tricea tridiagonal a
B
n
=
_
_
1 n
2 2 n 1
3 3 n 2
.
.
.
.
.
.
.
.
.
n + 1 n 1 2
n n
_
_
.
54 Introducere n MATLAB
Problema 1.7. Care este cea mai mare valoare a lui n cu proprietatea c a
S
n
=
n
k=1
k
2
< L,
unde L este dat? Rezolvat i prin nsumare si utiliz and formula care d a pe S
n
.
Problema 1.8. Generat i matricea H
n
= (h
ij
), unde
h
ij
=
1
i +j 1
, i, j = 1, n,
folosind toolbox-ul Symbolic.
Problema 1.9. S a se genereze matricea triunghiular a a coecient ilor binomiali, pen-
tru puteri merg and de la 1 la un n N dat.
Problema 1.10. Scriet i o funct ie MATLAB care primeste la intrare coordonatele
v arfurilor unui triunghi si subdivizeaz a recursiv triunghiul n patru triunghiuri, dup a
mijloacele laturilor. Subdivizarea continu a p an a c and se atinge un nivel dat.
Problema 1.11. Scriet i o funct ie MATLAB care s a extrag a dintr-o matrice dat a A
o parte care s a e diagonal a pe blocuri, unde blocurile sunt de dimensiune dat a, iar
colt ul din st anga sus al ec arui bloc este situat pe diagonala principal a.
CAPITOLUL 2
Grac a n MATLAB
Cuprins
2.1. Grace bidimensionale . . . . . . . . . . . . . . . . . . . . . . 56
2.1.1. Grace de baz a . . . . . . . . . . . . . . . . . . . . . . 56
2.1.2. Axe si adnotarea . . . . . . . . . . . . . . . . . . . . . 62
2.1.3. Mai multe grace pe aceeasi gur a . . . . . . . . . . . 65
2.2. Grace tridimensionale . . . . . . . . . . . . . . . . . . . . . . 67
2.3. Salvarea si imprimarea gracelor . . . . . . . . . . . . . . . . . 75
2.4. Facilit at i grace noi n MATLAB 7 . . . . . . . . . . . . . . . . 77
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
MATLABare facilit at i grace puternice si versatile. Se pot genera grace si guri
relativ usor, iar atributele lor se pot modica cu usurint a. Nu ne propunem s a m
exhaustivi, ci dorim doar s a introducem cititorul n facilit at ile grace MATLAB care
vor necesare n continuare. Figurile existente pot modicate usor cu utilitarul
Plot Editor. Pentru utilizarea sa a se vedea help plotedit si meniul Tools sau
bara din ferestrele gurilor. Celor care doresc detalii sau s a aprofundeze subiectul le
recomand am [5, 9, 14, 16].
55
56 Grac a n MATLAB
1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
8
(a) Implicit
1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
8
(b) Neimplicit
Figura 2.1: Grace x-y simple
2.1. Grace bidimensionale
2.1.1. Grace de baz a
Funct ia MATLABplot realizeaz a grace bidimensionale simple unind punctele
vecine. Tast and
>>x=[1.5,2.2,3.1,4.6,5.7,6.3,9.4];
>>y=[2.3,3.9,4.3,7.2,4.5,3.8,1.1];
>>plot(x,y)
se obt ine imaginea din st anga gurii 2.1(a), n care punctele x(i), y(i) sunt unite
n secvent a. MATLAB deschide o fereastr a pentru gur a (dac a una nu a fost deja
deschis a ca rezultat al unei comenzi precedente) n care deseneaz a imaginea.
In acest
exemplu se utilizeaz a valori implicite ale unor facilit at i cum ar domeniul pentru
axele x si y, spat iile dintre diviziunile de pe axe, culoarea si tipul liniei.
Mai general, n loc de plot(x,y), putem utiliza plot(x,y,sir), unde
sir este un sir de caractere ce controleaz a culoarea, marcajul si stilul de linie.
De exemplu, plot(x,y,r
*
--) ne spune c a n ecare punct x(i), y(i)
se va plasa un asterisc rosu, punctele ind unite cu o linie rosie ntrerupt a.
plot(x,y,+y) marcheaz a punctele cu un plus galben, f ar a a le uni cu nici o
linie. Tabela 2.1 d a toate opt iunile disponibile. Imaginea din partea dreapt a a gu-
rii 2.1 s-a obt inut cu plot(x,y,kd:), care deseneaz a o linie punctat a neagr a
marcat a cu romburi. Cele trei elemente din sir pot apare n orice ordine; de exem-
plu, plot(x,y,ms--)si plot(x,y,s--m)sunt echivalente. De notat c a
plot accept a mai multe seturi de date. De exemplu,
plot(x,y,g-,b,c,r--)
2.1. Grace bidimensionale 57
deseneaz a n aceeasi gur a gracele pentru x(i), y(i) si b(i), c(i) cu linie
continu a verde si respectiv cu linie ntrerupt a rosie.
Culoare
r rosu
g verde
b albastru
c cian
m magenta
y galben
k negru
w alb
Marcaj
o cerc
*
asteric
. punct
+ plus
x ori
s p atrat
d romb
triunghi n sus
v triunghi n jos
> triunghi dreapta
< triunghi st anga
p pentagram a (stea cu 5 colt uri)
h hexagram a (stea cu 6 colt uri)
Stil de linie
- continu a (implicit)
- - ntrerupt a
: punctat a
-. linie-punct
Tabela 2.1: Opt iuni pentru comanda plot
Comanda plot accept a si argumente matriciale. Dac a x este un vector de dimen-
siune m si Y este o matrice mn, plot(x,Y) suprapune gracele obt inute din x
si ecare coloan a a lui Y. Similar, dac a X si Y sunt matrice de aceeasi dimensiune,
plot(X,Y) suprapune gracele obt inute din coloanele corespunz atoare ale lui X si
Y. Dac a argumentele lui plot nu sunt reale, atunci p art ile imaginare sunt n general
ignorate. Singura except ie este atunci c and plot este apelat cu un singur argument.
Dac a Y este complex, plot(Y) este echivalent cu plot(real(Y),imag(Y). n
cazul c and Y este real, plot(Y) deseneaz a gracul obt inut lu and pe abscis a indicii
punctelor si pe ordonat a Y.
Atributele se pot controla furniz and argumente suplimentare lui plot. Pro-
priet at ile Linewidth (implicit 0.5 puncte) si MarkerSize (implicit 6 puncte)
pot specicate n puncte, unde un punct este 1/72 inch. De exemplu, comanda
>>plot(x,y,m--,LineWidth,3,MarkerSize,5)
produce un grac cu linie cu l at imea 3 puncte si marcaje cu dimensiunea 5 puncte.
Culoarea laturilor marcajului si a interiorului marcajului se poate seta pe una din cu-
lorile din tabela 2.1 cu propriet at ile MarkerEdgeColor si MarkerFaceColor.
Astfel, de exemplu
plot(x,y,o,MarkerEdgeColor,,m)
coloreaz a cercurile (nu si interiorul) n magenta. Gracul din st anga gurii 2.2 s-a
obt inut cu
58 Grac a n MATLAB
1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
8
(a)
1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
8
(b)
Figura 2.2: Dou a grace x-y neimplicite
plot(x,y,m--,LineWidth,3,MarkerSize,5)
iar cel din dreapta cu comanda
plot(x,y,--rs,MarkerSize,20,MarkerFaceColor,g)
Funct ia loglog, spre deosebire de plot, scaleaz a axele logaritmic. Aceast a
facilitate este util a pentru a reprezenta relat ii de tip putere sub forma unei drepte.
In acest exemplu primul apel al lui fplot produce gracul funct iei exp(
xsin 12x)
pe intervalul 0 x 2.
In al doilea apel se selecteaz a stilul de linie ntrerupt a
cu --, n locul celei implicite, continue. Argumentul [0.01 1 -15 20] din
cel de-al treilea apel seteaz a limitele pe axele x si y la 0.01 x 1 si respectiv
15 y 20, iar -. utilizeaz a stilul de linie linie-punct. Ultimul exemplu arat a
cum se pot reprezenta mai multe funct ii la un singur apel.
Sintaxa general a a lui fplot este
fplot(fun,lims,tol,N,LineSpec,p1,p2,...)
cu semnicat ia:
fun este funct ia de reprezentat (function handle, obiect inline sau expresie);
lims d a limitele pe axele x si/sau y;
tol este eroarea relativ a (inplicit 2 10
3
);
se folosesc cel put in N+1 puncte la generarea gracului;
2.2. Grace tridimensionale 67
LineSpec determin a tipul de linie;
p1, p2, ... sunt parametrii adit ionali transmisi lui fun, care trebuie s a
aib a parametrii de intrare x, p1, p2, . . . .
Este posibil s a se obt in a grile neregulate de imagini apel and subplot cu
sabloane de grile diferite. Figura 2.12 a fost generat a cu:
x = linspace(0,15,100);
subplot(2,2,1), plot(x,sin(x))
subplot(2,2,2), plot(x,round(x))
subplot(2,1,2), plot(x,sin(round(x)))
Al treilea argument al lui subplot poate un vector ce specic a mai multe regiuni;
ultima linie se poate nlocui cu
subplot(2,2,3:4), plot(x,sin(round(x)))
In ncheierea acestei sect iuni, tabela 2.3 d a cele mai populare funct ii MATLAB
pentru grace 2D. Funct iile cu numele de forma ezfun sunt variante usor de utilizat
(easy) ale funct iilor fun corespunz atoare.
0 5 10 15
1
0.5
0
0.5
1
0 5 10 15
1
0.5
0
0.5
1
0 5 10 15
0
5
10
15
Figura 2.12: Grile neregulate produse cu subplot
2.2. Grace tridimensionale
Fuct ia plot3 este un analog tridimensional al lui plot. Figura 2.13 a fost
obt inut a cu:
68 Grac a n MATLAB
plot grac x-y simplu
loglog grac cu scar a logaritmic a pe ambele axe
semilogx grac cu scar a logaritmic a pe axa x
semilogy grac cu scar a logaritmic a pe axa x
plotyy grac x-y cu axe y si al st anga si la dreapta
polar grac polar
fplot reprezentare grac a automat a a unei funct ii
ezplot versiune usor de utilizat (easy-to-use) a lui fplot
ezpolar versiune usor de utilizat (easy-to-use) a lui polar
fill umplere poligon
area grac de tip arie plin a
bar grac de tip bar a
barh grac de tip bar a orizontal a
hist histogram a
pie grac cu sectoare de cerc
comet grac x-y animat
errorbar grac cu bare de eroare
quiver c amp de vectori bidimensional
scatter Grac dispersat (nor de puncte)
Tabela 2.3: Funct ii pentru grace 2D
30
20
10
0
10
20
30
30
20
10
0
10
20
30
5
0
5
x(t)
Exemplu plot3
y(t)
z
(
t
)
Figura 2.13: Grac 3D creat cu plot3
2.2. Grace tridimensionale 69
2 1.5 1 0.5 0 0.5 1 1.5 2
1
0.5
0
0.5
1
x
y
sin(3 yx
2
+1)+cos(2 y
2
2 x)
2 1.5 1 0.5 0 0.5 1 1.5 2
1
0.5
0
0.5
1
Figura 2.14: Contururi obt inute cu ezcontour (sus) si contour (jos).
t = -5:0.005:5;
x = (1+t.2).
*
sin(20
*
t);
y = (1+t.2).
*
cos(20
*
t);
z=t;
plot3(x,y,z)
grid on
xlabel(x(t)), ylabel(y(t)), zlabel(z(t))
title({\itExemplu} plot3,FontSize,14)
Acest exemplu utilizeaz a funct iile xlabel, ylabel si title, precum si ana-
logul lor zlabel. De notat si utilizarea notat iei T
E
X n titlu, pentru a produce text
italic. Culoarea, marcajul si stilul de linie pentru plot3 se controleaz a la fel ca pen-
tru plot. Limitele de axe n spat iul tridimensional se determin a automat, dar ele pot
schimbate cu
axis([xmin, xmax, ymin, ymax, zmin, zmax])
Inafar a de xlim si ylim, exist a si zlim, prin care se pot schimba limitele pe axa z.
O facilitate usor de utilizat de desenare a contururilor este oferit a de
ezcontour. Apelul lui ezcontour n exemplul urm ator produce contururi pen-
tru funct ia sin(3y x
2
+ 1) + cos(2y
2
2x) pe domeniul dat de 2 x 2 si
1 y 1; rezultatul se poate vedea n jum atatea de sus a gurii 2.14.
subplot(211)
ezcontour(sin(3
*
y-x2+1)+cos(2
*
y2-2
*
x),[-2,2,-1,1]);
%
x=-2:.01:2; y=-1:0.01:1;
70 Grac a n MATLAB
Sursa MATLAB 2.1 Reprezentarea grac a a unei funct ii implicite
xm=-3:0.2:3; ym=-2:0.2:1;
[x,y]=meshgrid(xm,ym);
f=y.3+exp(y)-tanh(x);
contour(x,y,f,[0,0],k-)
xlabel(x); ylabel(y);
title(y3+ey=tanh(x),FontSize,14)
[X,Y] = meshgrid(x,y);
Z =sin(3
*
Y-X.2+1)+cos(2
*
Y.2-2
*
X);
subplot(212)
contour(x,y,Z,20)
De notat c a nivelurile de contur au fost alese automat. Pentru jum atatea de jos a
gurii 2.14 s-a utilizat funct ia contour.
Int ai se fac init ializ arile x = -2:.01:2
si y = -1:.01:1pentru a obt ine puncte mai apropiate n domeniul respectiv. Apoi
se execut a [X,Y] = meshgrid(x,y), care obt ine matricele X si Y astfel nc at
ecare linie a lui X s a e o copie a lui x si ecare coloan a a lui Y s a e o copie a
vectorului y. (Funct ia meshgrid este foarte util a la preg atirea datelor pentru multe
funct ii MATLAB de grac a 3D.) Matricea Z este apoi generat a prin operat ii de tip
tablou din X si Y; Z(i,j) memoreaz a valoarea funct iei corespunz and lui x(j)
si y(i). Aceasta este forma cerut a de contour. Apelul contour(x,y,Z,20)
spune MATLAB s a priveasc a Z ca ind format a din cote deasupra planului xOy
cu spat ierea dat a de x si y. Ultimul argument de intrare spune c a se vor utiliza 20
de niveluri de contur; dac a acest argument este omis, MATLAB va alege automat
num arul de niveluri de contur.
Funct ia contour se poate utiliza si la reprezentarea funct iilor implicite cum ar
y
3
+ exp(y) = tanh(x).
Pentru a o reprezenta grac, rescriem ecuat ia sub forma
f(x, y) = y
3
+ exp(y) tanh(x)
si desen am conturul pentru f(x, y) = 0 (vezi script-ul 2.1 si gura 2.15).
Pentru aplicat ii n mecanic a ale funct iei contour vezi [8].
Funct ia mesh accept a date n aceeasi form a ca si contour si produce o re-
prezentare de suprafat a de tip cadru de s arm a (wire-frame). Funct ia meshc se
deosebeste de mesh prin aceea c a adaug a un grac de tip contur dedesubtul
suprafet ei. Exemplul de mai jos, care produce gura 2.16, lucreaz a cu suprafat a de-
nit a de sin(y
2
+ x) cos(y x
2
) pentru 0 x, y . Primul grac este generat
2.2. Grace tridimensionale 71
3 2 1 0 1 2 3
2
1.5
1
0.5
0
0.5
1
x
y
y
3
+e
y
=tanh(x)
Figura 2.15: Curb a dat a printr-o funct ie implicit a
cu subplot si mesh(Z). Deoarece nu se d a nici o informat ie pentru abscis a si
ordonat a, mesh utilizeaz a n locul lor indicii de linie si de coloan a. A doua imagine
arat a efectul lui meshc(Z). Pentru cea de-a treia, s-a utilizat mesh(x,y,Z), si
deci gradat iile de pe axele x si y corespund valorilor x si y. Limitele pe axe s-au
specicat cu axis([0 pi 0 pi -5 5]). Pentru ultima imagine s-a utilizat din
nou mesh(Z), urmat a de hidden off, care inhib a asarea liniilor ascunse.
x = 0:0.1:pi; y=0:0.1:pi;
[X,Y]=meshgrid(x,y);
Z=sin(Y.2+X)-cos(Y-X.2);
subplot(221)
mesh(Z)
subplot(222)
meshc(Z)
subplot(223)
mesh(x,y,Z)
axis([0 pi 0 pi -5 5])
subplot(2,2,4)
mesh(Z)
hidden off
Funct ia surf difer a de mesh prin aceea c a produce un grac de suprafat a
cu celulele umplute (colorate), iar surfc adaug a contururi dedesubt.
In exemplul
72 Grac a n MATLAB
0
20
40
0
20
40
2
0
2
0
20
40
0
20
40
2
0
2
0
1
2
3
0
2
5
0
5
0
20
40
0
20
40
2
0
2
Figura 2.16: Grace obt inute cu mesh si meshc
um ator am vizualizat un paraboloid hiperbolic. Imaginile de pe prima linie a gurii
2.17 arat a efectele lui surf si surfc.
In ele apare o scar a de culori, realizat a uti-
liz and colorbar. Harta de culori curent a se poate seta cu colormap; vezi doc
colormap. A treia imagine (pozit ia (2,1)) utilizeaz a funct ia shading cu opt iunea
flat pentru a elimina liniile grilei de pe suprafat a; o alt a opt iune este interp,
care selecteaz a culorile prin interpolare. A patra imagine (pozit ia (2,2)) utilizeaz a
funct ia nrudit a waterfall, care este similar a lui mesh, dar f ar a cadrul de s arm a
pe direct ia coloanelor.
[X,Y]=meshgrid(linspace(-1,1,20)); Z=X.2-Y.2;
FS = FontSize;
subplot(2,2,1), surf(X,Y,Z),
title(\bf{surf},FS,14), colorbar
subplot(2,2,2), surfc(X,Y,Z),
title(\bf{surfc},FS,14), colorbar
subplot(2,2,3), surf(X,Y,Z), shading flat
title(\bf{surf} shading flat,FS,14), colorbar
subplot(2,2,4), waterfall(X,Y,Z)
title(\bf{waterfall},FS,14), colorbar
Gracele tridimensionale din gurile 2.13, 2.16 si 2.17 utilizeaz a unghiurile
de vizualizare implicite ale MATLAB. Acestea pot modicate cu view. Apelul
view(a,b) alege unghiul de rotat ie n sens invers acelor de ceasornic n jurul axei
z (azimutul) de a grade si unghiul fat a de planul xOy (elevat ia) de b grade. Impli-
cit este view(-37.5,30). Instrumentul rotate 3D de pe bara de instrumente
2.2. Grace tridimensionale 73
1
0
1
1
0
1
1
0
1
surf
0.5
0
0.5
1
0
1
1
0
1
1
0
1
surfc
0.5
0
0.5
1
0
1
1
0
1
1
0
1
surf shading flat
0.5
0
0.5
1
0
1
1
0
1
1
0
1
waterfall
0.5
0
0.5
Figura 2.17: Suprafet e desenate cu surf, surfc si waterfall
a gurii fereastr a permite utilizarea mouse-ului pentru schimbarea unghiurilor de ve-
dere.
Este posibil sa vedem un grac 2D ca pe unul 3D, utiliz and comanda view pen-
tru a da unghiurile de vedere, sau mai simplu utiliz and view(3). Figura 2.18 a fost
obt inut a tast and
plot(fft(eye(17))); view(3); grid
Tabela 2.4 d a un rezumat al celor mai populare funct ii pentru grace 3D. Asa
cum indic a tabela, unele funct ii au si variante easy to use al c aror nume ncepe cu
ez.
O tr as atur a comun a tuturor funct iilor grace este aceea c a valorile NaN sunt in-
terpretate ca ,,date lips a si nu sunt reprezentate. De exemplu,
plot([1 2 NaN 3 4])
deseneaz a dou a linii disjuncte si nu uneste punctele 2 si 3, n timp ce
A=peaks(80); A(28:52,28:52)=NaN; surfc(A)
produce gracul surfc cu gaur a din gura 2.19. (Funct ia peaks din MATLAB are
expresia
z = 3
*
(1-x).2.
*
exp(-(x.2) - (y+1).2) ...
- 10
*
(x/5 - x.3 - y.5).
*
exp(-x.2-y.2) ...
- 1/3
*
exp(-(x+1).2 - y.2)
si genereaz a o matrice de cote util a pentru a testa si demonstra facilit at ile grace 3D.)
74 Grac a n MATLAB
1
0.5
0
0.5
1
1
0.5
0
0.5
1
1
0.5
0
0.5
1
Figura 2.18: Vedere 3D a unei imagini 2D.
plot3
contur
contourf
contur plin
contour3 contur 3D
mesh
reprezentare wire-frame
meshc
suprafat a plin a
surfc
In MATLAB 7 s-au introdus instrumente grace noi si s-au perfect ionat unele
facilit at i:
noi interfet e grace interactive pentru crearea si modicarea gracelor f ar a a
introduce cod M;
generare de cod Mdintr-o gur a, permit and reutilizarea gracelor din program;
facilit at i mbun at at ite de adnotare a gracelor, inclusiv desenarea de guri ge-
ometrice, aliniere, legare a adnot arilor de puncte;
Instrumente de explorare a datelor;
posibilitatea de a aplica transform ari cum ar rotat ii, translat ii si scal ari asupra
grupurilor de obiecte grace;
panouri de interfet e utilizator si controale ActiveX accesibile din GUIDE;
suport Handle Graphics
R
mbun at at it si suport pentru asarea unor ecuat ii cu
interfat a complet a T
E
X sau L
A
T
E
X.
Probleme
Problema 2.1 (Curba Lissajous (Bodwitch)). S a se reprezinte curba parametric a:
(t) = (a sin(nt +c), b sin t), t [0, 2],
pentru (a) a = 2, b = 3, c = 1, n = 2, (b) a = 5, b = 7, c = 9, n = 4, (c)
a = b = c = 1, n = 10.
Problema 2.2 (Curba uture). S a se reprezinte curba polar a
r(t) = e
cos(t)
a cos(bt) + sin
5
(ct),
pentru valorile (a) a = 2, b = 4, c = 1/12, (b) a = 1, b = 2, c = 1/4, (c) a = 3,
b = 1, c = 1/2. Experimentat i pentru t n intervale de forma [0, 2k], k N.
Problema 2.3 (Rodoneea sferic a). S a se reprezinte grac curba tridimensional a de-
nit a prin
(t) = a(sin(nt) cos t, sin(nt) sin t, cos(nu)),
pentru valorile (a) a = n = 2, (b) a = 1/2, n = 1, (c) a = 3, n = 1/4, (d) a = 1/3,
n = 5.
78 Grac a n MATLAB
Problema 2.4 (Sfera r asucit a (Corkscrew)). S a se reprezinte grac suprafat a para-
metric a dat a prin
(u, v) = (a cos ucos v, a sin ucos v, a sin v +bu)
unde (u, v) [0, 2) [, ), pentru (a) a = b = 1, (b) a = 3, b = 1, (c) a = 1,
b = 0, (d) a = 1, b = 3/2.
Problema 2.5. S a se reprezinte curba dat a implicit
b
2
y
2
= x
3
(a x),
pentru (a) a = 1, b = 2, (b) a = b = 1, (c) a = 2, b = 1.
Problema 2.6 (Elicoid). S a se reprezinte grac suprafat a parametric a dat a prin
(u, v) = (av cos u, bv sin u, cu +ev)
unde (u, v) [0, 2) [d, d), pentru (a) a = 2, b = c = 1, e = 0, (b) a = 3, b = 1,
c = 2, e = 1.
CAPITOLUL 3
Algebr a liniar a n MATLAB
3.1. Rezolvarea sistemelor de ecuat ii liniare n MATLAB
Fie mnum arul de ecuat ii si n num arul de necunoscute. Instrumentul fundamental
de rezolvare a sistemelor de ecuat ii liniare este operatorul \ (vezi sect iunea 1.3.3).
El trateaz a trei tipuri de sisteme de ecuat ii liniare, p atratice (m = n), supra-
determinate (m > n) si subdeterminate (m < n). Vom reveni asupra sistemelor
supradeterminate vor tratate n capitolul urm ator. Mai general, operatorul \ poate
utilizat pentru a rezolva AX = B, unde B este o matrice cu p coloane; n acest
caz MATLAB rezolv a sistemele AX(:, j) = B(:, j) pentru j = 1 : p. Sistemele de
forma XA = B se pot rezolva cu X = B/A.
Operatorul \ se bazeaz a pe algoritmi diferit i n funct ie de matricea coecient ilor.
Diversele cazuri, care sunt diagnosticate automat prin examinarea matricei sistemului
includ:
matrice triunghiulare sau permut ari de matrice triunghiulare;
matrice simetrice, pozitiv denite;
matrice p atratice nesingulare;
sisteme dreptunghiulare supradeterminate;
sisteme dreptunghiulare subdeterminate.
79
80 Algebr a liniar a n MATLAB
3.1.1. Sisteme p atratice
Dac a A este o matrice p atratic a nesingular a de ordinul n, atunci A\b este solut ia
sistemului Ax=b, calculat a prin factorizare LU cu pivotare part ial a.
In timpul re-
zolv arii, MATLAB calculeaz a rcond(A) si tip areste un mesaj de avertisment dac a
rezultatul este mai mic dec at eps:
x = hilb(15)\ones(15,1)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.543404e-018.
3.1.2. Sisteme supradeterminate
Dac a m > n, n general sistemul Ax = b nu are nici o solut ie. Expresia MA-
TLAB A\b calculeaz a solut ia sistemului n sensul celor mai mici p atrate, adic a mi-
nimizeaz a norma euclidian a a reziduului (adic a norm(A
*
x-b)) peste tot i vectorii
x. Dac a A are rang maxim m, atunci solut ia este unic a. Dac a A are rangul k mai mic
dec at m (n acest caz spunem c a A este decient a de rang), A\b calculeaz a o solut ie
de baz a cu cel mult k elemente nenule (k este determinat si x este calculat utiliz and
factorizarea QR cu pivotare pe coloan a).
In ultimul caz MATLAB d a un mesaj de
avertisment.
Solut ia se mai poate calcula si cu x min=pinv(A)
*
b, unde pinv(A) este
pseudo-inversa lui A. Dac a A este decient a de rang, x min este solut ia unic a de
norm a euclidian a minimal a. Vom reveni asupra acestui tip de sisteme n capitolul
urm ator.
Pseudo-inversa Moore-Penrose a lui A, notat a cu A
+
generalizeaz a not iunea de
invers a pentru matrice dreptunghiulare si deciente de rang. Pseudo-inversa A
+
a lui
A este matricea unic a care satisface condit iile
AA
+
A = A, A
+
AA
+
= A
+
, (A
+
A)
+
= A
+
A, (AA
+
)
+
= AA
+
.
Vom ilustra cu urm atoarele exemple:
>> Y=pinv(ones(3))
Y =
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
>> A=[0 0 0 0; 0 1 0 0; 0 0 2 0]
A =
0 0 0 0
0 1 0 0
0 0 2 0
>> pinv(A)
3.1. Rezolvarea sistemelor de ecuat ii liniare n MATLAB 81
ans =
0 0 0
0 1.0000 0
0 0 0.5000
0 0 0
3.1.3. Sisteme subdeterminate
sau xx
_
1 0 0 0 0 1
1 1 0 0 0 1
1 1 1 0 0 1
1 1 1 1 0 1
1 1 1 1 1 1
1 1 1 1 1 1
_
_
.
O astfel de matrice se poate genera, pentru n dat, cu secvent a
A=[-tril(ones(n,n-1),-1)+eye(n,n-1),ones(n,1)]
86 Algebr a liniar a n MATLAB
S a presupunem c a b s-a init ializat cu b=A
*
ones(n,1). Un astfel de sistem are
solut ia x = [1, 1, . . . , 1]
T
. Operatorul \ ne d a, pentru n=100
>> x=A\b;
>> reshape(x,10,10)
ans =
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 0 0 0 0 1
>> norm(b-A
*
x)/norm(b)
ans =
0.3191
rezultat total eronat, desi A este bine condit ionat a
>> cond(A)
ans =
44.8023
Dac a rezolv am folosind metoda QR, se obt ine
>> [Q,R]=qr(A);
>> x2=R\(Q
*
b);
>> x2
ans =
Columns 1 through 6
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
...
Columns 97 through 100
1.0000 1.0000 1.0000 1.0000
>> norm(b-A
*
x2)/norm(b)
ans =
8.6949e-016
Funct ia linsolve permite rezolvarea mai rapid a a sistemelor de ecuat ii liniare
prin specicarea matricei sistemului. Apelat a sub forma
x = linsolve(A,b,opts)
rezolv a sistemul liniar A
*
x=b, select and un rezolvitor adecvat n funct ie de pro-
priet at ile matricei A, descrise de structura opts. Nu se face nici un test pentru a
3.2. Polinoame si potrivirea datelor n MATLAB 87
verica dac a A are astfel de propriet at i. D am lista numelor de c ampuri si a valorilor
lor posibile.
nume c amp proprietatea matricei
LT triunghiular a inferior
UT triunghiular a superior
UHESS Hessenberg superioar a
SYM simetric a sau hermitian a
POSDEF positiv denit a
RECT dreptunghiular a
TRANSA transpusa (conjugat a) a lui A specic a dac a se rezolv a
A
*
x=b sau Ax=b
Dac a opts lipseste, sistemul se rezolv a cu factorizare LUP, dac a A este p atratic a si
cu factorizare QR cu pivotare n caz contrar. Dac a A este prost condit ionat a n cazul
p atratic sau decient a de rang n caz dreptunghiular, se d a un mesaj de avertisment.
>> A = triu(rand(5,3)); x = [1 1 1 0 0];
>> b = A
*
x;
>> y1 = (A)\b
y1 =
1.0000
1.0000
1.0000
0
0
>> opts.UT = true; opts.TRANSA = true;
>> y2 = linsolve(A,b,opts)
y2 =
1.0000
1.0000
1.0000
0
0
3.2. Polinoame si potrivirea datelor n MATLAB
MATLAB reprezint a un polinom
p(x) = p
1
x
n
+p
2
x
n1
+p
n
x +p
n+1
printr-un vector linie p=[p(1) p(2) ...p(n+1)] al coecient ilor, ordonat i
descresc ator dup a puterile variabilei.
S a consider am trei probleme legate de polinoame:
88 Algebr a liniar a n MATLAB
evaluarea d andu-se coecient ii s a se calculeze valoarea polinomului n unul
sau mai multe puncte;
determinarea r ad acinilor d andu-se coecient ii s a se determine r ad acinile
polinomului;
potrivirea datelor (data tting) d andu-se o mult ime de date (x
i
, y
i
)
m
i=1
s a
se determine un polinom (sau o alt a combinat ie de funct ii de baz a) care ,,se
potriveste cu aceste date.
Evaluarea se face cu ajutorul schemei lui Horner, implementat a n MATLAB prin
funct ia polyval.
In comanda y=polyval(p,x) x poate o matrice, n acest
caz evaluarea f ac andu-se element cu element (deci, n sens tablou). Evaluarea n sens
matricial, adic a obt inerea matricei
p(X) = p
1
X
n
+p
2
X
n1
+p
n
X +p
n+1
,
unde X este o matrice p atratic a se poate face cu comanda Y = polyvalm(p,X).
R ad acinile (reale si complexe) ale polinomului p se pot obt ine cu z =
roots(p). Funct ia poly realizeaz a operat ia invers a, adic a construieste polinomul
cunosc and r ad acinile. Ea accept a ca argument si o matrice p atratic a A, caz n care
p=poly(A) calculeaz a polinomul caracteristic al lui A, adic a det(xI A).
Funct ia polyder calculeaz a coecient ii derivatei unui polinom, f ar a a-l evalua.
Ca exemplu, s a consider am polinomul p(x) = x
2
x 1. R ad acinile lui le
obt inem cu
>> p = [1 -1 -1]; z = roots(p)
z =
-0.6180
1.6180
Veric am, n limitele erorilor de rotunjire, c a acestea sunt r ad acinile:
>> polyval(p,z)
ans =
1.0e-015
*
-0.1110
0.2220
Observ am c a p este polinomul caracteristic al unei anumite matrice 2 2
>> A = [0 1; 1 1]; cp = poly(A)
cp =
1.0000 -1.0000 -1.0000
3.2. Polinoame si potrivirea datelor n MATLAB 89
Teorema Cayley-Hamilton ne spune c a orice matrice satisface polinomul s au carac-
teristic. Aceasta se veric a n limita erorilor de rotunjire:
>> polyvalm(cp, A)
ans =
1.0e-015
*
0.1110 0
0 0.1110
1
(t, ) + +c
n
n
(t, ).
Matricea de proiectare (design matrix) A() va matricea cu elementele
a
i,j
=
j
(t
i
, ),
ale c arei elemente pot depinde de .
In notat ie matricial a, modelul se poate exprima
ca:
y A()c.
Reziduurile sunt diferent ele dintre valorile observate si cele date de model
r
i
= y
i
j=1
c
j
j
(t
i
, )
90 Algebr a liniar a n MATLAB
sau n notat ie matricial a
r = y A()c.
Ne propunem s a minimiz am o anumit a norm a a reziduurilor. Cele mai frecvente ale-
geri sunt
r
2
2
=
m
i=1
r
2
i
sau
r
2
2,w
=
m
i=1
w
i
r
2
i
.
O explicat ie intuitiv a, zic a, a celei de-a doua alegeri ar aceea c a anumite observat ii
sunt mai importante dec at altele si le vom asocia ponderi, w
i
. De exemplu, dac a la
observat ia i eroarea este aproximativ e
i
, atunci putem alege w
i
= 1/e
i
. Deci, avem
de a face cu o problem a discret a de aproximare n sensul celor mai mici p atrate.
Problema este liniar a dac a nu depinde de si neliniar a n caz contrar.
Orice algoritm de rezolvare a unei probleme de aproximare n sensul celei mai
mici p atrate f ar a ponderi poate utilizat la rezolvarea unei probleme cu ponderi prin
scalarea observat iilor si a matricei de proiectare.
In MATLABaceasta se poate realiza
prin
A=diag(w)
*
A
y=diag(w)
*
y
Dac a problema este liniar a si avem mai multe observat ii dec at funct ii de baz a,
suntem condusi la rezolvarea sistemului supradeterminat (vezi sect iunea 3.1.2)
Ac y,
pe care l vom rezolva n sensul celor mai mici p atrate
c = A\y.
Abordarea teoretic a se bazeaz a pe rezolvarea ecuat iilor normale
A
T
Ac = A
T
y.
Dac a funct iile de baz a sunt liniar independente si deci A
T
A nesingular a, solut ia este
c = (A
T
A)
1
A
T
y,
sau
c = A
+
y,
unde A
+
este pseudo-inversa lui A. Ea se poate calcula cu funct ia MATLAB pinv.
Fie sistemul Ax = b arbitrar. Dac a A este o matrice m n cu m > n si are
rangul n, atunci ecare din urm atoarele trei instruct iuni
3.2. Polinoame si potrivirea datelor n MATLAB 91
x=A\b
x=pinv(A)
*
b
x=inv(A
*
A)
*
A
*
b
calculeaz a aceeasi solut ie n sensul celor mai mici p atrate, desi operatorul \ o face
cel mai repede.
Totusi, dac a A nu are rangul complet, solut ia n sensul celor mai mici p atrate nu
este unic a. Exist a mai mult i vectori care minimizeaz a norma Axb
2
. Solut ia calcu-
lat a cu x=A\b este o solut ie de baz a; ea are cel mult r componente nenule, unde r este
rangul lui A. Solut ia calculat a cu x=pinv(A)
*
b este solut ia cu norm a minim a (ea
minimizeaz a norm(x)).
In reprezentarea n virgul a otant a, chiar dac a coloanele lui A sunt liniar indepen-
dente, (A
T
A)
1
ar putea aproape singular a.
MATLAB evit a ecuat iile normale. Operatorul \ foloseste intern factorizarea QR.
Solut ia se poate exprima prin c=R\(Q
*
y).
Dac a baza n care se face aproximarea este 1, t, . . . , t
n
, se poate folosi funct ia
polyfit. Comanda p=polyfit(x,y,n) calculeaz a coecient ii polinomului de
aproximare discret a de grad n n sensul celor mai mici p atrate pentru datele x si y.
Dac a n m, se returneaz a coecient ii polinomului de interpolare.
Vom considera dou a exemple.
O cantitate y este m asurat a n diferite momente de timp, t, pentru a produce
urm atoarele observat ii:
t y
0.0 0.82
0.3 0.72
0.8 0.63
1.1 0.60
1.6 0.55
2.3 0.50
Aceste date pot introduse MATLAB prin
t=[0,0.3,0.8,1.1,1.6,2.3];
y=[0.82,0.72,0.63,0.60,0.55,0.50];
Vom ncerca s a model am datele cu ajutorul unei funct ii de forma
y(t) = c
1
+c
2
e
t
.
Coecient ii necunoscut i se vor calcula prin metoda celor mai mici p atrate. Avem 6
ecuat ii si dou a necunoscute, reprezentate printr-o matrice 6 2
>> E=[ones(size(t)),exp(-t)]
E =
1.0000 1.0000
1.0000 0.7408
1.0000 0.4493
1.0000 0.3329
1.0000 0.2019
1.0000 0.1003
1
Pentru o matrice dreptunghiular a X, num arul de condit ionare ar putea denit prin cond(X) =
XX
+
In exemplul urm ator vom calcula valorile proprii ale matricei lui Frank (neher-
mitian a):
>> F = gallery(frank,5)
F =
5 4 3 2 1
4 4 3 2 1
0 3 3 2 1
0 0 2 2 1
0 0 0 1 1
>> e = eig(F)
e =
10.0629 3.5566 1.0000 0.0994 0.2812
Dac a este valoare proprie a matricei F, atunci 1/ este de asemenea valoare proprie:
>> 1./e
ans =
0.0994 0.2812 1.0000 10.0629 3.5566
Motivul este acela c a polinomul caracteristic este anti-palindromic, adic a termenii
egal dep artat i de extrem sunt numere opuse:
3.3. Valori si vectori proprii n MATLAB 97
>> poly(F)
ans =
1.0000 -15.0000 55.0000 -55.0000 15.0000 -1.0000
Astfel, det(F I) =
5
det(F
1
I).
Funct ia condeig calculeaz a num arul de condit ionare pentru valori proprii.
Acesta se deneste prin
(A) = inf{cond(X) : X
1
AX = diag(
i
)}.
Forma c=condeig(A) returneaz a un vector al numerelor de condit ionare ale va-
lorilor proprii ale lui A. Forma [V,D,s] = condeig(A) este echivalent a cu:
[V,D] = eig(A), s = condeig(A). Un num ar de condit ionare mare indic a
o valoare proprie sensibil a la perturbat ii ale matricei. Exemplul urm ator aseaz a n
prima linie valorile proprii ale matricei lui Frank de ordinul 6 si n a doua linie nu-
merele lor de condit ionare:
>> A = gallery(frank,6);
>> [V,D,s] = condeig(A);
>> [diag(D); s]
ans =
12.9736 5.3832 1.8355 0.5448 0.0771 0.1858
1.3059 1.3561 2.0412 15.3255 43.5212 56.6954
D am n continuare c ateva informat ii despre modul de lucru al funct iei eig. Ea
lucreaz a n mai multe stadii.
Int ai, dac a A este nesimetric a, ea echilibreaz a matricea,
adic a, realizeaz a transform ari de similaritate A Y
1
AY , unde Y este o permutare
a unei matrice diagonale aleas a astfel nc at s a fac a liniile si coloanele lui A de norme
aproximativ egale. Motivarea echilibr arii este aceea c a poate conduce la un calcul mai
precis al vectorilor si valorilor proprii. Totusi, uneori echilibrarea nu este necesar a
si poate inhibat a cu eig(A,nobalance) (a se vedea doc eig pentru un
exemplu).
Dup a echilibrare, eig reduce Ala forma Hessenberg superioar a (sau tridiagonal a
dac a A este hermitian a). Forma Hessenberg se poate calcula cu H = hess(A) sau
[Q,H] = hess(A). Ultima form a d a si matricea unitar a prin care se face transfor-
marea. Comanda T = schur(A) sau [Q,T] = schur(A) produce descompu-
nerea Schur a lui A real a sau complex a, dup a cumA este o matrice real a sau complex a.
Descompunerea Schur complex a a unei matrice reale se poate obt ine cu schur(A,
complex).
MATLAB poate rezolva si probleme de valori proprii generalizate, adic a pro-
bleme de forma: ind date dou a matrice p atratice de ordinul n, Asi B, s a se g aseasc a
scalarii si vectorii x = 0 astfel nc at Ax = Bx. Valorile proprii generalizate se
pot calcula cu e = eig(A,B), iar [V,D] = eig(A,B) returneaz a o matrice
98 Algebr a liniar a n MATLAB
diagonal a D a valorilor proprii si o matrice p atratic a de ordinul n a vectorilor proprii
V astfel nc at A
*
V=B
*
V
*
D. Teoria corespunz atoare este mai complicat a dec at cea a
valorilor proprii standard: putem s a nu avem nici o valoare proprie, putem avea un
num ar nit de valori proprii sau o innitate, sau valori proprii innit de mari. Dac a
B este singular a, se pot obt ine valori proprii NaN. D am un exemplu de rezolvare a
unei probleme proprii generalizate:
>> A = gallery(triw,3), B = magic(3)
A =
1 -1 -1
0 1 -1
0 0 1
B =
8 1 6
3 5 7
4 9 2
>> [V,D]=eig(A,B); V, eigvals = diag(D)
V =
-1.0000 -1.0000 0.3526
0.4844 -0.4574 0.3867
0.2199 -0.2516 -1.0000
eigvals =
0.2751 0.0292 -0.3459
Se numeste descompunere cu valori singulare (singular value decomposition
SVD) descompunerea
A = UV
, (3.3.1)
unde este o matrice diagonal a real a, iar U si V sunt matrice unitare (ortogonale n
cazul real).
Exist a dou a variante de SVD: una complet a, care se aplic a unei matrice dreptun-
ghiulare mn si care returneaz a matricele U de dimensiune mm, de dimensiune
m n si V de dimensiune n n si una economic a sau redus a n care U are dimen-
siunea mn, are dimensiunea n n si V are dimensiunea n n.
SVD este un instrument util de analiz a a aplicat iilor dintr-un spat iu vectorial cu
valori n alt spat iu, posibil de dimensiune diferit a. Dac a A este p atratic a, simetric a si
pozitiv denit a SVD (3.3.1) si descompunerea cu valori proprii coincid. Spre deose-
bire de descompunerea cu valori proprii, SVD exist a ntotdeauna.
Fie matricea
A =
9 4
6 8
2 7
3.3. Valori si vectori proprii n MATLAB 99
Descompunerea sa SVD complet a este
>> [U,S,V]=svd(A)
U =
-0.6105 0.7174 0.3355
-0.6646 -0.2336 -0.7098
-0.4308 -0.6563 0.6194
S =
14.9359 0
0 5.1883
0 0
V =
-0.6925 0.7214
-0.7214 -0.6925
iar cea redus a
>> [U,S,V]=svd(A,0)
U =
-0.6105 0.7174
-0.6646 -0.2336
-0.4308 -0.6563
S =
14.9359 0
0 5.1883
V =
-0.6925 0.7214
-0.7214 -0.6925
(x) p(x)y
(x
i
)
y
i+1
y
i
2h
si
y
(x
i
)
y
i+1
2y
i
+y
i1
h
2
si t in and cont c a y
0
= si y
N+1
= , se ajunge la un sistem liniar tridiagonal.
(a) Scriet i sistemul la care se ajunge prin discretizare si studiat i propriet at ile sale.
(b) Scriet i o funct ie MATLABcare rezolv a numeric ecuat ia diferent ial a cu condit ii
pe frontier a bazat a pe ideea de mai sus. Sistemul se va rezolva printr-o metod a
direct a si una iterativ a (dac a este posibil).
(c) Ar atat i c a sistemul poate transformat ntr-un sistem echivalent a c arui matrice
este simetric a si pozitiv denit a. S a se implementeze si aceast a variant a.
(d) Exploatat i raritatea matricei sistemului.
Testat i pentru problema
y
=
2
x
y
+
2
x
2
y +
sin(ln x)
x
2
, x [1, 2], y(1) = 1, y(2) = 2,
cu solut ia exact a
y = c
1
x +
c
2
x
2
3
10
sin(ln x)
1
10
cos(ln x),
unde
c
2
=
1
70
[8 12 sin(ln 2) 4 cos(ln 2)],
c
1
=
11
10
c2.
102 Algebr a liniar a n MATLAB
Problema 3.8. Aplicat i ideea din problema precedent a la rezolvarea ecuat iei lui Po-
isson unidimensionale
d
2
v(x)
dx
2
= f, 0 < x < 1,
cu condit iile pe frontier a v(0) = v(1) = 0. Rezolvat i sistemul la care se ajunge cu
metoda Cholesky si cu metoda SOR.
Problema 3.9. S a se determine matricea metodei Gauss-Seidel pentru matricea
A =
_
_
2 1
1 2 1
1 2 1
.
.
.
.
.
.
.
.
.
1 2 1
1 2
_
_
.
Problema 3.10. O analiz a de tip element nit a sarcinii pe o structur a ne conduce la
urm atorul sistem
_
_
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
_
_
x =
_
_
15
0
15
0
25
0
_
_
,
unde = 482317, = 2196.05 si = 6708.43. Aici x
1
, x
2
, x
3
reprezint a deplas ari
laterale, iar x
4
, x
5
, x
6
reprezint a deplas ari rotat ionale (tridimensionale) corespunz and
fort ei aplicate (membrul drept).
(a) Determinat i x.
(b) C at de precise sunt calculele? Presupunem nt ai date exacte, apoi
A/A = 5 10
7
.
Problema 3.11. Consider am sistemul
x
1
+x
2
= 2
10x
1
+ 10
18
x
2
= 10 + 10
18
.
(a) S a se rezolve sistemul prin eliminare gaussian a cu pivotare part ial a.
3.3. Valori si vectori proprii n MATLAB 103
(b)
Imp art it i ecare linie cu maximul n modul din linia respectiv a si apoi utilizat i
eliminarea gaussian a.
(c) Rezolvat i sistemul folosind toolbox-ul Symbolic.
Problema 3.12. (a) D andu-se o funct ie f C[a, b], s a se determine s
1
(f; )
S
0
1
() astfel nc at
_
b
a
[f(x) s
1
(f; x)]
2
dx
s a e minim a.
(b) Scriet i o funct ie MATLAB care construieste si rezolv a sistemul de ecuat ii nor-
male de la punctul (a).
(c) Testat i funct ia de mai sus pentru o funct ie si o diviziune alese de dumnea-
voastr a.
Problema 3.13. Calculat i aproximat iile discrete n sensul celor mai mici p atrate ale
funct iei f(t) = sin
_
2
t
_
pe 0 t 1 de forma
n
(t) = t +t(1 t)
n
j=1
c
j
t
j1
, n = 1(1)5,
utiliz and N abscise t
k
= k/(N +1), k = 1, N. De notat c a
n
(0) = 0 si
n
(1) = 1
sunt valorile exacte ale lui f n t = 0 si respectiv t = 1.
(Indicat ie: Aproximat i f(t)t printr-o combinat ie liniar a a polinoamelor
j
(t) =
t(1t)t
j1
, j = 1, n.) Sistemul de ecuat ii normale are forma Ac = b, A = [(
i
,
j
)],
b = [(
i
, f t)], c = [c
j
].
Iesire (pentru n = 1, 2, . . . , 5) :
num arul de condit ionare al sistemului;
valorile coecient ilor;
eroarea maxim a si minim a:
e
min
= min
1kN
|
n
(t
k
) f(t
k
)|, e
max
= max
1kN
|
n
(t
k
) f(t
k
)|.
Executat i de dou a ori pentru
(a) N = 5, 10, 20,
104 Algebr a liniar a n MATLAB
(b) N = 4.
Comentat i rezultatele. Reprezentat i pe acelasi grac funct ia si aproximantele.
Problema 3.14. Determinat i o aproximare discret a n sensul celor mai mici p atrate
de forma
y = exp(x)
pentru datele
x y
0.0129 9.5600
0.0247 8.1845
0.0530 5.2616
0.1550 2.7917
0.3010 2.2611
0.4710 1.7340
0.8020 1.2370
1.2700 1.0674
1.4300 1.1171
2.4600 0.7620
Reprezentat i grac punctele si aproximanta.
Indicat ie: logaritmat i.
Problema 3.15. Determinat i o aproximare discret a n sensul celor mai mici p atrate
de forma
y = c
1
+c
2
x +c
3
sin(x) +c
4
sin(2x)
pentru datele
i x
i
y
i
1 0.1 0.0000
2 0.2 2.1220
3 0.3 3.0244
4 0.4 3.2568
5 0.5 3.1399
6 0.6 2.8579
7 0.7 2.5140
8 0.8 2.1639
9 0.9 1.8358
Reprezentat i grac datele si aproximanta.
3.3. Valori si vectori proprii n MATLAB 105
Problema 3.16. Calculat i valorile proprii ale matricei Hilbert pentru n = 10, 11,
. . . , 20 si numerele de condit ionare corespunz atoare.
Problema 3.17. Matricele
P=gallery(pascal,12)
F=galery(frank,12)
au proprietatea c a dac a este valoare proprie, atunci si 1/ este de asemenea valoare
proprie. C at de bine conserv a valorile proprii aceast a proprietate? Utilizat i condeig
pentru a explica comportarea diferit a a celor dou a matrice.
Problema 3.18. Care este cea mai mare valoare proprie a lui magic(n)? De ce?
Problema 3.19.
Incercat i secvent a de comenzi:
n=100;
d=ones(n,1);
A=diag(d,1)+diag(d,-1);
e=eig(A);
plot(-n/2:n/2,e,.)
Recunoastet i curba rezultat a? At i putea g asi o formul a pentru valorile proprii ale
acestei matrice?
Problema 3.20. Studiat i valorile si vectorii proprii corespunz atori ai matricei la care
se ajunge la problema 3.7. Reprezentat i grac valorile si vectorii proprii pentru un N
dat.
Problema 3.21. Fie T
N
matricea la care se ajunge la discretizarea cu diferent e a
ecuat iei lui Poisson (problema 3.8). Valorile ei proprii sunt
j
= 2
_
1 cos
j
N + 1
_
,
iar vectorii proprii z
j
au componentele
z
j
(k) =
_
2
N + 1
sin
jk
N + 1
.
S a se reprezinte grac valorile si vectorii proprii ai lui T
21
.
Problema 3.22. (a) Implementat i metoda puterii (iterat ia vectorial a).
106 Algebr a liniar a n MATLAB
(b) Testat i funct ia de la punctul precedent pentru matricea si vectorul init ial
A =
_
_
6 5 5
2 6 2
2 5 1
_
_
, x =
_
_
1
1
1
_
_
.
(r) Aproximat i raza spectral a (A) a matricei
A =
_
_
2 0 1
2 10 0
1 1 4
_
_
,
utiliz and metoda puterii si vectorul init ial (1, 1, 1)
T
.
Problema 3.23. Determinat i valorile proprii ale matricei
_
_
_
_
190 66 84 30
66 303 42 36
336 168 147 112
30 36 28 291
_
_
_
_
folosind metoda QR cu dublu pas. S a se compare rezultatul cu cel furnizat de eig.
Problema 3.24. Determinat i descompunerile cu valori singulare ale urm atoarelor
matrice:
_
_
4 0 0
0 0 0
0 0 7
0 0 0
_
_
_
2 1
_
5
4
_
.
CAPITOLUL 4
Interpolare n MATLAB
4.1. Interpolare unidimensional a
MATLAB are funct ii pentru interpolare n una, dou a sau mai multe dimensiuni.
Funct ia polyfit returneaz a coecient ii polinomului de interpolare Lagrange dac a
gradul n este egal cu num arul de observat ii minus 1.
Funct ia interp1 accept a perechi de date x(i), y(i) si un vector xi al punc-
telor n care se face evaluarea. Ea construieste interpolantul corespunz ator datelor x
si y si returneaz a valorile interpolantului n punctele din xi:
yi = interp1(x,y,xi,metoda)
Elementele vectorului x trebuie s a e ordonate cresc ator. Se admit patru tipuri de
interpolant i, precizate de parametrul metoda, care poate avea una din urm atoarele
valori
nearest - interpolare bazat a pe vecinul cel mai apropiat;
linear - interpolare liniar a pe port iuni (metoda implicit a);
spline - interpolare cu spline cubice;
cubic sau pchip - interpolare Hermite cubic a pe port iuni.
Exemplul de mai jos ilustreaz a funct ionarea lui interp1 (sierul exinterp1.m).
x=[-1,-3/4, -1/3, 0, 1/2, 1]; y=x+sin(pi
*
x.2);
xi=linspace(-1,1,60); yi=xi+sin(pi
*
xi.2);
107
108 Interpolare n MATLAB
yn=interp1(x,y,xi,nearest);
yl=interp1(x,y,xi,linear);
ys=interp1(x,y,xi,spline);
%yc=interp1(x,y,xi,pchip);
plot(xi,yi,:,x,y,o,MarkerSize,12); hold on
plot(xi,yl,--,xi,ys,-)
stairs(xi,yn,-.)
set(gca,XTick,x);
set(gca,XTickLabel,-1|-3/4|-1/3|0|1/2|1)
set(gca,XGrid,on)
axis([-1.1, 1.1, -1.1, 2.1])
legend(f,data,linear, spline, nearest,4)
hold off
Exemplul alege sase puncte de pe gracul lui f(x) = x + sin x
2
si calculeaz a
interpolant ii nearest, linear si spline. Nu am inclus n acest exemplu cubic
deoarece gracul obt inut este foarte apropiat de cel obt inut cu spline si s-ar
nc arcat gura. Gracul apare n gura 4.1.
1 3/4 1/3 0 1/2 1
1
0.5
0
0.5
1
1.5
2
f
data
linear
spline
nearest
Figura 4.1: Exemplu de interpolare cu interp1
Interpolarea spline este cea mai neted a, dar interpolarea Hermite pe port iuni
p astreaz a alura. Vom ncerca s a ilustram diferent a dintre interpolarea spline si inter-
polarea Hermite pe port iuni prin exemplul urm ator (expsli cub.m).
x =[-0.99, -0.76, -0.48, -0.18, 0.07, 0.2, ...
0.46, 0.7, 0.84, 1.09, 1.45];
4.1. Interpolare unidimensional a 109
y = [0.39, 1.1, 0.61, -0.02, -0.33, 0.65, ...
1.13, 1.46, 1.07, 1.2, 0.3];
plot(x,y,o); hold on
xi=linspace(min(x),max(x),100);
ys=interp1(x,y,xi,spline);
yc=interp1(x,y,xi,cubic);
h=plot(xi,ys,-,xi,yc,-.);
legend(h,spline,cubic,4)
axis([-1.1,1.6,-0.8,1.6])
Figura 4.2 d a gracul astfel obt inut.
1 0.5 0 0.5 1 1.5
0.5
0
0.5
1
1.5
spline
cubic
Figura 4.2: Interpolare cubic a spline si Hermite pe port iuni
Interpolarea spline si Hermite cubic a pe port iuni se pot realiza si direct, apel and
funct ia spline si respectiv pchip..
D andu-se vectorii x si y, comanda yy = spline(x,y,xx) returneaz a n
vectorul yy valorile spline-ului n punctele din xx. Dac a y este o matrice, se consi-
der a c a avem de-a face cu valori vectoriale si interpolarea se face dup a coloanele lui
y; dimensiunea lui yy este length(xx) pe size(y,2). Funct ia spline cal-
culeaz a interpolantul spline de tip deBoor. Dac a y cont ine cu dou a valori mai multe
dec at x, se calculeaz a interpolantul spline complet, iar prima si ultima valoare din y
se consider a a derivatele n capete. (Pentru terminologia privind tipurile de spline
vezi sect iunea ??).
Exemplul pe care l d amn continuare ia sase puncte de pe gracul lui y = sin(x),
calculeaz a si reprezint a grac spline-ul deBoor si cel complet (vezi gura 4.3).
110 Interpolare n MATLAB
x = 0:2:10;
y = sin(x); yc=[cos(0),y,cos(10)];
xx = 0:.01:10;
yy = spline(x,y,xx);
yc = spline(x,yc,xx);
plot(x,y,o,xx,sin(xx),-,xx,yy,--,xx,yc,-.)
axis([-0.5,10.5,-1.3,1.3])
legend(noduri,sin,deBoor,complet,4)
0 1 2 3 4 5 6 7 8 9 10
1
0.5
0
0.5
1
noduri
sin
deBoor
complet
Figura 4.3: Spline deBoor si complet
Sunt situat ii n care este convenabil s a se lucreze cu coecient ii funct iei
spline (de exemplu dac a nodurile se p astreaz a si xx se modic a). Comanda
pp=spline(x,y) memoreaz a coecient ii ntr-o structur a pp (piecewise polyno-
mial) care cont ine forma, nodurile, matricea coecient ilor (cu 4 coloane pentru spline
cubice), num arul de subintervale, ordinul (gradul plus 1) si dimensiunea. Funct ia
ppval evalueaz a spline-ul folosind o astfel de structur a. Alte prelucr ari de nivel in-
ferior se pot realiza cu mkpp (construct ia unei structuri pp) si unmkpp (detalii despre
componentele unei structuri pp). De exemplu, comanda yy = spline(x,y,xx)
se poate nlocui cu scvent a
pp = spline(x,y);
yy = ppval(pp,xx);
Vom da acum un exemplu de interpolare spline cu date vectoriale si utilizare
ppval. Dorim s a citim interactiv mai multe puncte de pe ecran si s a reprezent am
grac spline-ul parametric care trece prin aceste puncte, cu dou a rezolut ii diferite (s a
4.2. Interpolarea funct iilor de mai multe variabile n MATLAB 111
zicem cu 20 si 150 de puncte intermediare pe curb a). Sursa este cont inut a n script-ul
splinevect.m si o d am n continuare:
axis([0,1,0,1]);
hold on
[x,y]=ginput;
data=[x;y];
t=linspace(0,1,length(x));
tt1=linspace(0,1,20);
tt2=linspace(0,1,150);
pp=spline(t,data);
yy1=ppval(pp,tt1);
yy2=ppval(pp,tt2);
plot(x,y,o,yy1(1,:),yy1(2,:),yy2(1,:),yy2(2,:));
hold off
Citirea punctelor se face interactiv cu ginput. Coecient ii spline-ului se calcu-
leaz a o singur a dat a, iar pentru evaluarea spline-ului se foloseste ppval. Propunem
cititorului s a ncerce acest exemplu.
Funct ia pchip se poate apela n una din formele:
yi = pchip(x,y,xx)
pp = pchip(x,y)
Prima form a returneaz a valori ale interpolantului n xx, iar a doua o structur a
pp. Semnicat ia parametrilor este acceasi ca n cazul funct iei spline. Exemplul
urm ator calculeaz a interpolantul spline deBoor si Hermite cubic pe port iuni pentru
un acelasi set de date (script-ul expchip.m):
x = -3:3;
y = [-1 -1 -1 0 1 1 1];
t = -3:.01:3;
p = pchip(x,y,t);
s = spline(x,y,t);
plot(x,y,o,t,p,-,t,s,-.)
legend({data,pchip,spline},4)
Gracul apare n gura 4.4. Se observ a din nou c a interpolantul spline este mai neted,
dar interpolantul Hermite cubic pe port iuni p astreaz a alura.
4.2. Interpolarea functiilor de mai multe variabile n MA-
TLAB
Exist a dou a funct ii pentru interpolarea bidimensional a n MATLAB: interp2
si griddata. Sintaxa cea mai general a a lui interp2 este
112 Interpolare n MATLAB
3 2 1 0 1 2 3
1.5
1
0.5
0
0.5
1
1.5
data
pchip
spline
Figura 4.4: Exemplu de utilizare pchip si spline
ZI = interp2(x,y,z,XI,YI,metoda)
Aici vectorii x si y cont in coordonatele nodurilor de interpolare, z cont ine valorile
funct iei n noduri, iar XI si YI sunt matrice ce cont in coordonatele punctelor n care
dorim s a facem evaluarea. ZI cont ine valorile interpolantului n punctele XI, YI.
Parametrul metoda poate avea valoarea:
linear interpolare bilinear a (implicit a);
cubic interpolare bicubic a;
nearest interpolare bazat a pe vecinul cel mai apropiat;
spline interpolare spline.
Toate metodele de interpolare cer ca x si y s a e monotone, si s a aib a formatul ca
si cum ar produse de meshgrid. Dac a valorile date n x, y, XI si YI nu sunt
echidistante, ele sunt transformate ntr-un domeniu echidistant nainte de interpolare.
Pentru ecient a, dac a x si y sunt deja echidistante si monotone, metoda se poate da
ntr-una din formele
*
linear,
*
cubic,
*
spline, sau
*
nearest.
D am un exemplu care ncearc a s a interpoleze funct ia peaks pe o gril a de 7 7.
Gener am grila, calcul am valorile funct iei si o reprezent am grac cu
[X,Y]=meshgrid(-3:1:3); Z=peaks(X,Y); surf(X,Y,Z)
4.2. Interpolarea funct iilor de mai multe variabile n MATLAB 113
3
2
1
0
1
2
3
3
2
1
0
1
2
3
6
4
2
0
2
4
6
Figura 4.5: Gracul lui peaks pe o gril a grosier a
Gracul apare n gura 4.5. Calcul am apoi interpolant ii pe o gril a mai n a si i repre-
zent am:
[XI,YI]=meshgrid(-3:0.25:3); ZI1=interp2(X,Y,Z,XI,YI,nearest);
ZI2=interp2(X,Y,Z,XI,YI,linear);
ZI3=interp2(X,Y,Z,XI,YI,cubic);
ZI4=interp2(X,Y,Z,XI,YI,spline); subplot(2,2,1), surf(XI,YI,ZI1)
title(nearest) subplot(2,2,2), surf(XI,YI,ZI2) title(linear)
subplot(2,2,3), surf(XI,YI,ZI3) title(cubic) subplot(2,2,4),
surf(XI,YI,ZI4) title(spline)
Gracele lor apar n gura 4.6. Dac a nlocuim peste tot surf cu contour obt inem
gracele din gura 4.7.
Funct ia griddata are aceeasi sintax a ca si interp2. Datele de intrare sunt
nodurile x si y, care nu mai trebuie s a e monotone si valorile z n noduri. Prin inter-
polare se calculeaz a valorile ZI corespunz atoare nodurilor XI si YI, care de obicei
sunt obt inute cu meshgrid. Argumentul metoda poate avea valorile linear,
cubic, nearest si v4, ultima semnic and o metod a de interpolare specic a
MATLAB 4. Toate metodele except and v4 se bazeaz a pe triangulat ie Delaunay (o
triangulat ie a unei mult imi de puncte care maximizeaz a unghiul minim). Metoda este
util a pentru a interpola valori pe o suprafat a. Exemplul urm ator interpoleaz a puncte
generate aleator, situate pe suprafat a z =
sin(x
2
+y
2
)
x
2
+y
2
. Pentru a nu avea probleme n
origine s-a ad augat un eps la numitor.
x=rand(100,1)
*
16-8; y=rand(100,1)
*
16-8; R=sqrt(x.2+y.2)+eps;
z=sin(R)./R; xp=-8:0.5:8; [XI,YI]=meshgrid(xp,xp);
ZI=griddata(x,y,z,XI,YI); mesh(XI,YI,ZI); hold on
plot3(x,y,z,ko); hold off
Rezultatul apare n gura 4.8, n care punctele generate aleator sunt marcate prin
cercuri, iar interpolantul a fost reprezentat cu mesh.
114 Interpolare n MATLAB
5
0
5
5
0
5
5
0
5
10
nearest
5
0
5
5
0
5
5
0
5
10
linear
5
0
5
5
0
5
5
0
5
10
cubic
5
0
5
5
0
5
10
0
10
spline
Figura 4.6: Interpolant i construit i cu interp2
Probleme
Problema 4.1. S a se reprezinte pe acelasi grac pentru [a, b] = [0, 1], n = 11,
funct ia, interpolantul Lagrange si cel Hermite cu noduri duble n cazurile:
(a) x
i
=
i1
n1
, i = 1, n, f(x) = e
x
si f(x) = x
5/2
;
(b) x
i
=
_
i1
n1
_
2
, i = 1, n, f(x) = x
5/2
.
Problema 4.2. Aceeasi problem a, dar pentru cele patru tipuri de interpolant i spline
cubici.
Problema 4.3. Aleg and diverse valori ale lui n, pentru ecare n astfel ales repre-
zentat i grac funct ia lui Lebesgue pentru n noduri echidistante si respectiv n noduri
Cebsev din intervalul [0, 1].
4.2. Interpolarea funct iilor de mai multe variabile n MATLAB 115
3 2 1 0 1 2 3
3
2
1
0
1
2
3
nearest
3 2 1 0 1 2 3
3
2
1
0
1
2
3
linear
3 2 1 0 1 2 3
3
2
1
0
1
2
3
cubic
3 2 1 0 1 2 3
3
2
1
0
1
2
3
spline
Figura 4.7: Interpolant i construit i cu interp2
10
5
0
5
10
10
5
0
5
10
0.4
0.2
0
0.2
0.4
0.6
0.8
1
Figura 4.8: Interpolare cu griddata
116 Interpolare n MATLAB
Problema 4.4. Fie punctele P
i
R
2
, i = 0, n. S a se scrie:
(a) o funct ie MATLAB care determin a o curb a parametric a polinomial a de grad n
ce trece prin punctele date;
(b) o funct ie MATLAB care determin a o curb a parametric a spline cubic ce trece
prin punctele date, folosind funct ia pentru spline-ul natural sau cea pentru
spline-ul deBoor date n acest capitol.
Testat i cele dou a funct ii citind interactiv punctele cu ginput si reprezent and apoi
grac punctele si cele dou a curbe astfel determinate.
Problema 4.5. S a se determine o cubic a parametric a care trece prin dou a puncte date
si are n acele puncte vectori tangent i dat i.
Problema 4.6. Scriet i o funct ie MATLAB care calculeaz a coecient ii si valoarea
splinelor cubice de tip Hermite, adic a spline cubice de clas a C
1
[a, b] care veric a
s
3
(f, x
i
) = f(x
i
), s
3
(f, xi) = f
(x
i
), i = 1, n.
Reprezentat i pe acelasi grac funct ia f(x) = e
x
2
si interpolantul corespunz ator
pentru 5 noduri echidistandte si 5 noduri Cebsev pe [0,1].
Problema 4.7. Implementat i o funct ie MATLAB care calculeaz a inversa matricei
Vandermode, folosind rezultatele de la paginile ????.
Problema 4.8. [15] Scriet i o funct ie MATLAB pentru calculul coecient ilor unui
spline periodic de clas a C
2
[a, b]. Aceasta nseamn a c a datele trebuie s a verice
f
n
= f
1
si c a interpolantul rezultat trebuie s a e periodic, de perioad a x
n
x
1
.
Condit iile de periodicitate de la capete se pot impune mai usor consider and dou a
puncte suplimentare x
0
= x
1
x
n1
si x
n+1
= x
n
+ x
1
, n care funct ia s a ia
valorile f
0
= f
n1
si respectiv f
n+1
= f
2
.
Problema 4.9. Consider am datele
x = -5:5; y = [0,0,0,1,1,1,0,0,0,0,0];
S a se determine coecient ii aproximantei polinomiale de grad 7 n sensul celor mai
mici p atrate corespunz atoare si s a se reprezinte pe acelasi grac aproximanta si poli-
nomul de interpolare Lagrange.
Problema 4.10. Densitatea sodiului sodiului (n kg/m
3
) pentru trei temperaturi (n
0
xsinxdx. Integrandul l putem p astra
n sierul xsin.m:
119
120 Funct ii de funct ii
function y=xsin(x) y=x.
*
sin(x);
Aproximanta se obt ine astfel:
>> quad(@xsin,0,pi)
ans =
3.1416
Rutina quad este o implementare a unei cuadraturi adaptive de tip Simpson, asa
cum se descrie n sect iunea ?? sau n [15]. quadl este mai precis a si se bazeaz a pe
o cuadratur a de tip Gauss-Lobatto cu 4 puncte (si grad de exactitate 5) si o extensie
a ei de tip Kronrod cu 7 puncte (si grad de exactitate 9), ambele descrise n [3]. Cua-
dratura este adaptiv a. Ambele funct ii dau mesaje de avertisment dac a subintervalele
devin prea mici sau dac a s-au f acut excesiv de multe evalu ari. Astfel de mesaje indic a
posibile singularit at i.
Pentru a ilustra modul de lucru al lui quad si quadl vom aproxima integrala
_
1
0
_
1
(x 0.3)
2
+ 0.01
+
1
(x 0.09)
2
+ 0.04
6
_
dx.
Integrandul este funct ia MATLAB humps, folosit a la testarea rutinelor de integrare
numeric a sau de demo-urile din MATLAB. Vom aplica quad acestei funct ii cu
tol=1e-4. Figura 5.1 reprezint a integrandul si marcheaz a punctele de pe axa x
n care se evalueaz a integrandul; cercurile corespund valorilor integrandului. Figura
arat a c a subintervalele sunt mai mici acolo unde integrandul variaz a mai rapid. Ea
a fost obt inut a modic and funct ia quad din MATLAB. Urm atorul exemplu aproxi-
meaz a integralele lui Fresnel
x(t) =
_
t
0
cos(u
2
) du, y(t) =
_
t
0
sin(u
2
) du.
Acestea sunt ecuat iile parametrice ale unei curbe, numit a spirala lui Fresnel. Ea a fost
reprezentat a n gura 5.2, consider and 1000 de puncte t echidistante din intervalul
[4, 4]. Din motive de ecient a, vom exploata simetria si vom evita integrarea
repetat a pe [0, t], integr and pe ecare subinterval si evalu and integralele cu cumsum:
n = 1000; x = zeros(1,n); y = x;
i1 = inline(cos(x.2)); i2 = inline(sin(x.2));
t=linspace(0,4
*
pi,n);
for i=1:n-1
x(i) = quadl(i1,t(i),t(i+1),1e-3);
y(i) = quadl(i2,t(i),t(i+1),1e-3);
end
x = cumsum(x); y = cumsum(y);
plot([-x(end:-1:1),0,x], [-y(end:-1:1),0,y])
axis equal
5.1. Integrare numeric a n MATLAB 121
0
10
20
30
40
50
60
70
80
90
100
Value of integral = 29.8583
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Figura 5.1: Integrarea numeric a a lui humps prin quad
1 0.5 0 0.5 1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
Figura 5.2: Spirala lui Fresnel
122 Funct ii de funct ii
Pentru a integra funct ii date prin valori, nu prin expresia lor analitic a, se foloseste
funct ia trapz. Ea implementeaz a regula trapezelor (nodurile nu trebuie s a e echi-
distante). Asa cum am v azut n sect iunea ??, aceasta d a rezultate bune la integrarea
funct iilor periodice pe intervale a c aror lungime este un multiplu ntreg al perioadei.
Exemplu:
>> x=linspace(0,2
*
pi,10);
>> y=1./(2+sin(x));
>> trapz(x,y)
ans =
3.62759872810065
>> 2
*
pi
*
sqrt(3)/3-ans
ans =
3.677835813675756e-010
Valoarea exact a a integralei ind
2
3
_
x
0
e
t
2
dt.
Tabelat i valorile acestei funct ii pentru x = 0.1, 0.2, . . . , 1, utiliz and funct ia adquad.
S a se compare rezultatele cu cele furnizate de funct iile MATLAB quad si erf.
Problema 5.5. (a) Utilizat i adquad si funct ia quad din MATLAB pentru a
aproxima
_
2
1
1
sin
_
|t|
dt.
(b) De ce nu apar probleme de tip mp art ire la zero n t = 0?
Problema 5.6. Pentru un num ar p N consider am integrala
I
p
=
_
1
0
(1 t)
p
f(t) dt.
S a se compare formula trapezelor pentru n subintervale cu formula Gauss-Jacobi cu
n noduri si parametrii = p si = 0. Luat i, de exemplu, f(t) = tgt, p = 5(5)20
si n = 10(10)50 n cazul formulei trapezelor si n = 1(1)5 pentru formula Gauss-
Jacobi.
Problema 5.7. Fie
f(x) = ln(1 +x) ln(1 x).
(a) Utilizat i ezplot pentru a reprezenta grac f(x) pentru x [1, 1].
(b) Utilizat i Maple sau toolbox-ul Symbolic pentru a obt ine valoarea exact a a in-
tegralei
_
1
1
f(x) dx.
(c) G asit i valoarea numeric a a expresiei de la (b).
(d) Ce se nt ampl a dac a ncerc am s a utiliz am
adquad(
, 1, 1).
la aproximarea valorii integralei?
(e) Cum evitat i dicultatea? Justicat i solut ia.
128 Funct ii de funct ii
(f) Utilizat i adquad cu diverse precizii (tolerant e). Reprezentat i grac eroarea si
num arul de evalu ari n funct ie de tolerant a.
Problema 5.8. Extindet i algoritmul de Casteljau la cazul bidimensional. Dat i o im-
plementare MATLAB.
Problema 5.9. Extindet i algoritmul Cox - de Boor la cazul bidimensional. Dat i o
implementare MATLAB.
Problema 5.10. Adaptat i rutina quaddbl pentru a aproxima integrale duble de
forma
_
b
a
_
d(x)
c(x)
f(x, y) dy dx
sau
_
d
c
_
b(y)
a(y)
f(x, y) dxdy,
c and domeniul de integrare este simplu n raport cu x sau y.
Problema 5.11. Se consider a integrala dubl a a funct iei f(x, y) = x
2
+y
2
pe dome-
niul eliptic R dat de 5 < x < 5, y
2
<
3
5
(25 x
2
).
(a) S a se reprezinte grac funct ia pe domeniul R.
(b) S a se determine valoarea exact a a integralei utiliz and Maple sau toolbox-ul
Symbolic.
(c) S a se aproximeze valoarea integralei transform and domeniul intr-unul rectan-
gular.
(d) S a se aproximeze valoarea integralei folosind funct iile din problema 5.10.
Problema 5.12. Se consider a funct ia f(x, y) = y cos x
2
si domeniul triunghiular
denit de T = {x 0, y 0, x +y <= 1} si
_ _
T
f(x, y) dxdy.
(a) S a se reprezinte grac funct ia pe T folosind trimesh sau trisurf.
(b) S a se aproximeze valoarea lui I transform and integrala ntr-o integral a pe
p atratul unitate a unei funct ii care este nul a nafara lui T.
5.3. Ecuat ii neliniare si minimizare 129
(c) S a se aproximeze integrala folosind funct iile din problema 5.10.
Problema 5.13. G asit i primele 10 valori pozitive pentru care x = tgx.
Problema 5.14. Investigat i comportarea metodei lui Newton si a secantei pentru
funct ia
f(x) = sign(x a)
_
|x a|.
Problema 5.15 (Adaptat a dup a [15]). Consider am polinomul
x
3
2x 5.
Wallis a folosit acest exemplu pentru a prezenta metoda lui Newton n fat a academiei
franceze. El are o r ad acin a reale n intervalul (2, 3) si o pereche de r ad acini complexe
conjugate.
(a) Utilizat i Maple sau toolbox-ul Symbolic pentru a calcula r ad acinile. Rezulta-
tele sunt ur ate. Convertit i-le n valori numerice.
(b) Determinat i toate r ad acinile cu funct ia roots.
(c) Determinat i r ad acina real a cu fzero.
(d) Determinat i toate r ad acinile cu metoda lui Newton (pentru cele complexe
folosit i valori de pornire complexe).
(e) Se poate utiliza metoda njum at at irii sau a falsei pozit ii la determinarea unei
r ad acini complexe? De ce sau de ce nu?
Problema 5.16. S a se rezolve numeric sistemele
f
1
(x, y) = 1 4x + 2x
2
2y
3
= 0
f
2
(x, y) = 4 +x
4
+ 4y + 4y
4
= 0,
f
1
(x
1
, x
2
) = x
2
1
x
2
+ 0.25 = 0
f
2
(x
1
, x
2
) = x
1
+x
2
2
+ 0.25 = 0,
f
1
(x
1
, x
2
) = 2x
1
+x
2
x
1
x
2
/2 2 = 0
f
2
(x
1
, x
2
) = x
1
+ 2x
2
2
cos(x
2
)/2
3
2
= 0.
130 Funct ii de funct ii
Problema 5.17. S a se rezolve numeric sistemul
9x
2
+ 36y
2
+ 4z
2
36 = 0,
x
2
2y
2
20z = 0,
x
2
y
2
+z
2
= 0
Indicat ie. Sunt patru solut ii. Valori bune de pornire [1, 1, 0]
T
.
Problema 5.18. S a consider am sistemul, inspirat dintr-un exemplu din industria chi-
mic a
f
i
:= a
2
i
+a
i
a
i1
= 0.
Sistemul are n ecuat ii si n + 2 necunoscute. Vom lua a
0
= 5, a
n
= 0.5 mol/litru. S a
se rezolve sistemul pentru n = 10 si valoarea de pornire x=[1:-0.1:0.1].
CAPITOLUL 6
Ecuat ii diferent iale n MATLAB
6.1. Rezolvitori
MATLAB are facilit at i foarte puternice de rezolvare a problemelor cu valori
init iale pentru ecuat ii diferent iale ordinare:
d
dt
y(t) = f(t, y(t)), y(t
0
) = y
0
.
Cel mai simplu mod de a rezolva o astfel de problem a este de a scrie o funct ie care
evalueaz a f si de a apela unul dintre rezolvitorii MATLAB. Informat ia minim a pe
care un rezolvitor trebuie s a o primeasc a este numele funct iei, mult imea valorilor
lui t pe care se cere solut ia si valoarea init ial a y
0
. Rezolvitorii MATLAB accept a
argumente de intrare si iesire opt ionale care permit s a se specice mai mult despre
problema matematic a si modul de rezolvare a ei. Fiecare rezolvitor MATLAB este
conceput s a e ecient n anumite situat ii, dar tot i sunt n esent a interschimbabili.
Tot i rezolvitorii au aceeasi sintax a, ceea ce ne permite s a ncerc am diferite metode
numerice atunci c and nu stim care ar cea mai potrivit a. Sintaxa este
[t,y]=rezolvitor(@fun,tspan,y0,optiuni,p1,p2,...)
unde rezolvitor este unul din rezolvitorii dat i n tabela 6.1.
Argumentele de intrare sunt
fun specic a funct ia din membrul drept.
In versiunile 6.x este un handler
de funct ie, iar n versiunile 5.x este un nume de funct ie (n acest caz se scrie
fun nu @fun);
131
132 Ecuat ii diferent iale n MATLAB
Rezolvitor tip problem a Tip algoritm
ode45 Nonstiff Pereche Runge-Kutta explicit a, cu ordinele
4 si 5
ode23 Nonstiff Pereche Runge-Kutta explicit a, cu ordinele
2 si 3
ode113 Nonstiff Metod a cu mai mult i pasi explicit a, cu ordin
variabil, ordinele de la 1 la 13
ode15s Stiff Metod a cu mai mult i pasi implicit a, cu ordin
variabil, ordinele de la 1 la 15
ode23s Stiff Pereche Rosenbrock modicat a (cu un pas),
cu ordinele 2 si 3
ode23t Stiff Regula implicit a a trapezului, cu ordinele 2
si 3
ode23tb Stiff Algoritm Runge-Kutta implicit, ordinele 2 si
3
Tabela 6.1: Rezolvitori MATLAB pentru ecuat ii diferent iale ordinare
tspan vector ce specic a intervalul de integrare. Dac a este un vector cu
dou a elemente tspan=[t0 tfinal], rezolvitorul integreaz a de la t0 la
tfinal. Dac a tspan are mai mult de dou a elemente rezolvitorul returneaz a
solut iile n acele puncte. Abscisele trebuie ordonate cresc ator sau descresc ator.
Rezolvitorul nu si alege pasii dup a valorile din tspan, ci obt ine valorile n
aceste puncte prin prelungiri continue ale formulelor de baz a care au acelasi
ordin de precizie ca si solut iile calculate n puncte.
optiuni opt iunile permit setarea unor parametrii ai rezolvitorului si se
creaz a cu odeset.
Parametrii de iesire sunt:
t vectorul coloan a al absciselor;
y tabloul solut iilor: o linie corespunde unei abscise, iar o coloan a unei com-
ponente a solut iei.
Dup a optiuni pot s a apar a parametrii variabili, p1, p2, ... care sunt
transmisi funct iei fun la ecare apel. De exemplu
[t,y]=rezolvitor(@fun,tspan,y0,optiuni,p1,p2,...)
apeleaz a
fun(T,Y,flag,p1,p2,...).
6.2. Exemple non-stiff 133
6.2. Exemple non-stiff
S a consider am ecuat ia scalar a
y
(t) = y(t) + 5e
t
cos 5t, y(0) = 0,
pentru t [0, 3]. Membrul drept este cont inut n sierul f1scal.m:
function yder=f1scal(t,y)
%F1SCAL Exemplu de EDO scalara
yder = -y+5
*
exp(-t).
*
cos(5
*
t);
Vom folosi rezolvitorul ode45. Secvent a de comenzi MATLAB
>> tspan = [0,3]; yzero=0;
>> [t,y]=ode45(@f1scal,tspan,yzero);
>> plot(t,y,k--
*
)
>> xlabel(t), ylabel(y(t))
produce gracul din gura 6.1. Solut ia exact a este y(t) = e
t
sin 5t. Veric am
0 0.5 1 1.5 2 2.5 3
0.4
0.2
0
0.2
0.4
0.6
0.8
1
t
y
(
t
)
Figura 6.1: Un exemplu de ecuat ie diferent ial a ordinar a scalar a
aceasta calcul and maximul modulului diferent elor dintre valorile furnizate de ode45
si valorile solut iei exacte calculate n abscisele furnizate de ode45:
>> norm(y-exp(-t).
*
sin(5
*
t),inf)
ans =
3.8416e-004
134 Ecuat ii diferent iale n MATLAB
S a consider am acum ecuat ia pendulului simplu [2, sect iunea 1.4]:
d
2
dt
2
(t) =
g
L
sin(t),
unde g este accelerat ia gravitat ional a si L este lungimea pendulului. Aceast a ecuat ie
de ordinul al doilea se poate transforma ntr-un sistem de ecuat ii de ordinul I, intro-
duc and necunoscutele y
1
(t) = (t) si y
2
(t) = d(t)/dt:
d
dt
y
1
(t) = y
2
(t),
d
dt
y
2
(t) =
g
L
sin y
1
(t).
Aceste ecuat ii sunt codicate n sierul pend.m, dat n continuare:
function yp=pend(t,y,g,L)
%PEND - pendul simplu
%g - acceleratia gravitationala, L - lungimea
yp=[y(2); -g/L
*
sin(y(1))];
Aici, g si L sunt parametrii suplimentari care vor furnizat i lui pend de c atre rezol-
vitor. Vom calcula solut ia pentru t [0, 10] si trei condit ii init iale diferite.
g=10; L=10;
tspan = [0,10];
yazero = [1; 1]; ybzero = [-5; 2];
yczero = [5; -2];
[ta,ya] = ode45(@pend,tspan,yazero,[],g,L);
[tb,yb] = ode45(@pend,tspan,ybzero,[],g,L);
[tc,yc] = ode45(@pend,tspan,yczero,[],g,L);
In apelurile de forma
[ta,ya] = ode45(@pend,tspan,yazero,[],g,L);
[] reprezint a opt iunile, iar urm atorii sunt parametrii suplimentari care vor
transmisi membrului drept. Pentru a obt ine grace de faz a vom reprezenta pe y
2
(t)
n funct ie de y
1
(t). Este sugestiv s a reprezent am pe acelasi grac si c ampul de vec-
tori cu quiver. S aget ile generate de quiver au direct ia gradientului [y
2
, sin y
1
]
si lungimea proport ional a cu norma euclidian a a acestui vector. Imaginea obt inut a
apare n gura 6.2.
[y1,y2] = meshgrid(-5:0.5:5,-3:0.5:3);
Dy1Dt = y2; Dy2Dt = -sin(y1);
quiver(y1,y2,Dy1Dt,Dy2Dt)
hold on
plot(ya(:,1),ya(:,2),yb(:,1),yb(:,2),yc(:,1),yc(:,2))
axis equal, axis([-5,5,-3,3])
xlabel y_1(t), ylabel y_2(t), hold off
6.3. Opt iuni 135
Orice solut ie a ecuat iei pendulului conserv a energia: cantitatea y
2
(t)
2
cos y
1
(t)
este constant a. Vom verica aceasta prin
>> Ec = 0.5
*
yc(:,2).2-cos(yc(:,1));
>> max(abs(Ec(1)-Ec))
ans =
0.0263
5 4 3 2 1 0 1 2 3 4 5
3
2
1
0
1
2
3
y
1
(t)
y
2
(
t
)
Figura 6.2: Grac de faz a pentru ecuat ia pendulului
6.3. Optiuni
Funct ia odeset creaz a o structur a de opt iuni care poate transmis a unui rezol-
vitor. Argumentele lui odeset sunt perechi nume proprietate/valoare proprietate.
Sintaxa este
optiuni=odeset(nume1, valoare1, nume2, valoare2, ...)
Aceasta creaz a o structur a de opt iuni n care propriet at ile cu numele dat primesc o
valoare specicat a. Propriet at ile nespecicate primesc valori implicite. Pentru toate
propriet at ile este sucient s a d am doar caracterele de la nceput care identic a unic
numele propriet at ii. odeset f ar a argumente aseaz a toate numele de propriet at i si
valorile lor posibile; valorile implicite apar ntre acolade:
>> odeset
AbsTol: [ positive scalar or vector {1e-6} ]
RelTol: [ positive scalar {1e-3} ]
NormControl: [ on | {off} ]
OutputFcn: [ function ]
136 Ecuat ii diferent iale n MATLAB
Categoria Numele propriet at ii
Controlul erorii RelTol, AbsTol, NormControl
Iesire rezolvitor OutputFcn, OutputSel, Refine, Stats
Matrice jacobian a Jacobian, JPattern, Vectorized
Controlul pasului InitialStep, MaxStep
Matrice de mas a Mass, MStateDependence, MvPattern,
si DAE MassSingular, InitialSlope
Evenimente Events
specice ode15s MaxOrder, BDF
Tabela 6.2: Propriet at i ale rezolvitorilor
OutputSel: [ vector of integers ]
Refine: [ positive integer ]
Stats: [ on | {off} ]
InitialStep: [ positive scalar ]
MaxStep: [ positive scalar ]
BDF: [ on | {off} ]
MaxOrder: [ 1 | 2 | 3 | 4 | {5} ]
Jacobian: [ matrix | function ]
JPattern: [ sparse matrix ]
Vectorized: [ on | {off} ]
Mass: [ matrix | function ]
MStateDependence: [ none | weak | strong ]
MvPattern: [ sparse matrix ]
MassSingular: [ yes | no | {maybe} ]
InitialSlope: [ vector ]
Events: [ function ]
Modicarea unei structuri de opt iuni se poate realiza cu
optiuni=odeset(optiune-veche,nume1, valoare1,...)
care pozit ioneaz a valorile lui opt iuni pe valorile existente in optiune-veche, iar
pe cele precizate de perechile nume/valoare le actualizeaz a sau cu
options=odeset(optiune-veche, optiune-noua)
care combin a structurile optiune-veche si optiune-noua. Valorile din
optiune-noua diferite de [] le nlocuiesc pe cele din optiune-veche. O
structur a de opt iuni poate interogat a cu comanda:
o=odeget(optiuni,name)
Aceasta returneaz a valoarea propriet at ii specicate sau o matrice nul a dac a valoa-
rea propriet at ii nu este specicat a n structura optiuni. Tabela 6.2 d a tipurile de
propriet at i si numele propriet at ilor.
6.3. Opt iuni 137
Exemplul urm ator rezolv a sistemul lui R ossler [5, sect iunea 12.2],
d
dt
y
1
(t) = y
2
(t) y
3
(t),
d
dt
y
2
(t) = y
1
(t) +y
2
(t),
d
dt
y
3
(t) = b +y
3
(t)(y
1
(t) c),
unde a, b si c sunt parametrii reali. Funct ia care deneste ecuat ia diferent ial a este:
function yd=Roessler(t,y,a,b,c)
%ROESSLER sistemul Roessler parametrizat
yd = [-y(2)-y(3); y(1)+a
*
y(2); b+y(3)
*
(y(1)-c)];
Vom modica eroarea absolut a si cea relativ a cu
options = odeset(AbsTol,1e-7,RelTol,1e-4);
Script-ul Roessler.m (sursa 6.1) rezolv a sistemul lui R ossler pe intervalul t
[0, 100] cu valoarea init ial a y(0) = [1, 1, 1]
T
si cu seturile de parametrii (a, b, c) =
(0.2, 0.2, 2.5) si (a, b, c) = (0.2, 0.2, 5). Rezultatele apar n gura 6.3. Subplot-ul
Sursa MATLAB 6.1 Sistemul lui R ossler
tspan = [0,100]; y0 = [1;1;1];
options = odeset(AbsTol,1e-7,RelTol,1e-4);
a=0.2; b=0.2; c1=2.5; c2=5;
[t,y] = ode45(@Roessler,tspan,y0,options,a,b,c1);
[t2,y2] = ode45(@Roessler,tspan,y0,options,a,b,c2);
subplot(2,2,1), plot3(y(:,1),y(:,2),y(:,3))
title(c=2.5), grid
xlabel(y_1(t)), ylabel(y_2(t)), zlabel(y_3(t));
subplot(2,2,2), plot3(y2(:,1),y2(:,2),y2(:,3))
title(c=5), grid
xlabel(y_1(t)), ylabel(y_2(t)), zlabel(y_3(t));
subplot(2,2,3); plot(y(:,1),y(:,2))
title(c=2.5)
xlabel(y_1(t)), ylabel(y_2(t))
subplot(2,2,4); plot(y2(:,1),y2(:,2))
title(c=5)
xlabel(y_1(t)), ylabel(y_2(t))
221 d a gracul solut iei n subspat iul tridimensional al fazelor pentru c = 2.5 si
subplot-ul 223 d a proiect ia ei pe planul y
1
y
2
. Subplot-urile 222 si 224 dau gra-
cele corespunz atoare pentru c = 5. Vom mai discuta si exemplica opt iunile si n
subsect iunile urm atoare. Pentru detalii a se vedea help odest sau doc odeset.
138 Ecuat ii diferent iale n MATLAB
5
0
5
5
0
5
0
2
4
y
1
(t)
c=2.5
y
2
(t)
y
3
(
t
)
4 2 0 2 4 6
6
4
2
0
2
4
c=2.5
y
1
(t)
y
2
(
t
)
10
0
10
20
10
0
10
0
10
20
y
1
(t)
c=5
y
2
(t)
y
3
(
t
)
10 5 0 5 10 15
10
5
0
5
10
c=5
y
1
(t)
y
2
(
t
)
Figura 6.3: Solut iile sistemului lui R ossler n spat iul fazelor
6.4. Ecuatii stiff
Stiff (t eap an, rigid, dicil, anevoios) este un concept subtil, dicil si impor-
tant n rezolvarea numeric a a ecuat iilor diferent iale ordinare. El depinde de ecuat ia
diferent ial a, de condit iile init iale si de metoda numeric a.
In [15] se d a urm atoarea
caracterizare computat ional a a acestui termen:
,,O problem a este stiff dac a solut ia c autat a variaz a lent, dar exist a solut ii
apropiate care variaz a rapid, astfel c a metoda numeric a trebuie s a utili-
zeze pasi foarte mici pentru a obt ine rezultate satisf ac atoare.
Conceptul de stiffness este o chestiune de ecient a. Metodele nonstiff pot rezolva
problemele stiff, dar ntr-un timp foarte lung.
Exemplul care urmeaz a provine din [15] si este un model al propag arii unei
ac ari. C and se aprinde un chibrit, mingea (sfera) de foc creste rapid p an a c and atinge
dimensiunea critic a. Apoi r am ane la aceast a dimensiune, deoarece volumul de oxi-
gen consumat de combustie n interiorul mingii echilibreaz a volumul disponibil la
suprafat a. Un model simplu este dat de problema cu valori init iale:
y
= y
2
y
3
,
y(0) = , 0 t 2/
(6.4.1)
Funct ia real a y(t) reprezint a raza sferei. Termenii y
2
si y
3
provin din suprafat a si
volum. Solut ia se caut a pe un interval de lungime invers proport ional a cu . Vom
6.4. Ecuat ii stiff 139
ncerca s a rezolv am problema cu ode45. Dac a nu este foarte mic problema nu este
foarte stiff. Alegem = 0.01 si eroarea relativ a 10
4
.
delta=0.01;
F = inline(y2-y3,t,y);
opts = odeset(RelTol,1e-4);
ode45(F,[0,2/delta],delta,opts);
Neav and parametrii de iesire, rezolvitorul reprezint a grac solut ia (vezi gura
6.4). Se observ a c a ea porneste de la 0.1, creste lent p an a c and t se apropie de 1/,
adic a 100 si apoi creste rapid p an a la valoarea 1, ajung andu-se ntr-o stare de echili-
bru. Se utilizeaz a 185 de puncte. Dac a lu am mai mic, de exemplu 0.0001, caracterul
0 20 40 60 80 100 120 140 160 180 200
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Figura 6.4: Propagarea unei ac ari, = 0.1
stiff devine mai pregnat. Se genereaz a 12161 de puncte. Gracul apare n gura 6.5,
n partea de sus.
In partea de jos este un zoom obt inut n vecin atatea st arii de echili-
bru. Figura a fost obt inut a cu script-ul chibrit2.m dat mai jos. Opt iunea Stats
setat a pe on permite obt inerea unor statistici ale rezolvitorului.
delta=1e-4; er=1e-4;
F = inline(y2-y3,t,y);
opts = odeset(RelTol,er,Stats,on);
[t,y]=ode45(F,[0,2/delta],delta,opts);
subplot(2,1,1)
plot(t,y,c-); hold on
h=plot(t,y,bo);
set(h,MarkerFaceColor,b,Markersize,4);
hold off
title ode45
subplot(2,1,2)
plot(t,y,c-); hold on
140 Ecuat ii diferent iale n MATLAB
h=plot(t,y,bo);
set(h,MarkerFaceColor,b,Markersize,4);
axis([0.99e4,1.12e4,0.9999,1.0001])
hold off
De notat c a rezolvitorul ment ine solut ia n limita de eroare cerut a, dar cu pret ul
unui efort foarte mare. Situat ia este si mai dramatic a pentru valori mai mici ale erorii
relative, de exemplu 10
5
sau 10
6
. Init ial problema nu este stiff. Ea devine astfel pe
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
x 10
4
0
0.2
0.4
0.6
0.8
1
1.2
1.4
ode45
1 1.02 1.04 1.06 1.08 1.1 1.12
x 10
4
0.9999
1
1.0001
Figura 6.5: Propagarea unei ac ari, = 0.0001, eroarea relativ a 1e-4 (sus) si un
zoom pe solut ie (jos)
m asur a ce se apropie de starea de echilibru, adic a de valoare y(t) = 1, unde are loc o
crestere rapid a (comparativ cu scara de timp foarte lung a.
Vom utiliza un rezolvitor pentru probleme de tip stiff. Metodele pe care se ba-
zeaz a astfel de rezolvitori sunt metode implicite. La ecare pas rezolvitorii utilizeaz a
operat ii matriciale si rezolv a sisteme de ecuat ii liniare care i ajut a s a prevad a evolut ia
solut iei (desigur c a pentru probleme scalare matricea are dimensiunea 1 pe 1). S a
calcul am solut ia folosind acum rezolvitorul ode23s. Vom modica n script-ul pre-
cedent doar numele rezolvitorului: ode23s n loc de ode45. Gracul obt inut apare
n gura 6.6. Efortul depus de rezolvitor este de aceast a dat a mult mai mic, dup a
cum se poate vedea examin and statisticile generate de rezolvitor. Statistica generat a
de ode23s este n acest caz:
99 successful steps
7 failed attempts
6.4. Ecuat ii stiff 141
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
x 10
4
0
0.2
0.4
0.6
0.8
1
1.2
1.4
ode23s
1 1.02 1.04 1.06 1.08 1.1 1.12
x 10
4
0.9999
1
1.0001
Figura 6.6: Propagarea unei ac ari, = 0.0001, eroarea relativ a 1e-4 (sus) si un
zoom pe solut ie (jos), obt inute cu ode23s
412 function evaluations
99 partial derivatives
106 LU decompositions
318 solutions of linear systems
A se compara cu cea generat a de ode45:
3040 successful steps
323 failed attempts
20179 function evaluations
0 partial derivatives
0 LU decompositions
0 solutions of linear systems
Se poate obt ine solut ia exact a a problemei (6.4.1). Ecuat ia este cu variabile sepa-
rabile. Integr and se obt ine o ecuat ie implicit a care-l d a pe y:
1
y
+ ln
_
1
y
1
_
=
1
+ ln
_
1
1
_
t.
Expresia solut iei exacte este
y(t) =
1
W(ae
at
) + 1
142 Ecuat ii diferent iale n MATLAB
unde a = 1/ 1, iar W este funct ia lui Lambert. Aceasta din urm a este solut ia
ecuat iei funct ionale
W(z)e
W(z)
= z.
Cleve Moler [15] d a o comparat ie foarte plastic a ntre rezolvitorii explicit i si cei
implicit i.
,,Imaginat i-v a c a v a ntoarcet i dintr-o plimbare pe munte. Suntet i ntr-un
canion ngust cu pante abrupte de ambele p art i. Un algoritm explicit va
selecta gradientul local pentru a g asi direct ia de cobor are. Dar urmarea
gradientului n ambele p art i ale drumului v a va trimite viguros nainte
si napoi prin canion, la fel ca ode45. Vet i ajunge n nal acas a, dar
ntunericul se va l asa cu mult timp nainte de a ajunge. Un algoritm im-
plicit v a va t ine cu ochii la drum si va anticipa unde v a va duce ecare
pas. Concentrarea suplimentar a merit a.
Vom considera acum un exemplu datorat lui Robertson si tratat am anunt it n [5,
2]. Sistemul lui Robertson
d
dt
y
1
(t) = y
1
(t) +y
2
(t)y
3
(t),
d
dt
y
2
(t) = y
1
(t) y
2
(t)y
3
(t) y
2
2
(t),
d
dt
y
3
(t) = y
2
2
(t)
modeleaz a react ia ntre trei specii chimice. Sistemul este codicat n funct ia
chem.m, dat a mai jos.
function yprime=chem(t,y,alpha,beta,gamma)
%CHEM - modelul lui Robertson pentru reactii chimice
yprime = [-alpha
*
y(1)+beta
*
y(2)
*
y(3);
alpha
*
y(1)-beta
*
y(2)
*
y(3)-gamma
*
y(2)2;
gamma
*
y(2)2];
Script-ul robertson.m rezolv a sistemul lui Robertson pentru = 0.04, = 10
4
,
= 310
7
, t [0, 3] si condit iile init iale y(0) = [1, 0, 0]
T
. Se utilizeaz a rezolvitorii
ode45 si ode15s, gener andu-se si statistici. Din motive de scar a s-a reprezentat
numai y
2
.
alpha = 0.04; beta = 1e4; gamma = 3e7;
tspan = [0,3]; y0 = [1;0;0];
opts=odeset(Stats,on);
[ta,ya] = ode45(@chem,tspan,y0,opts,alpha,beta,gamma);
6.4. Ecuat ii stiff 143
subplot(1,2,1), plot(ta,ya(:,2),-
*
)
ax = axis; ax(1) = -0.2; axis(ax);
xlabel(t), ylabel(y_2(t))
title(ode45,FontSize,14)
[tb,yb] = ode15s(@chem,tspan,y0,opts,alpha,beta,gamma);
subplot(1,2,2), plot(tb,yb(:,2),-
*
)
axis(ax)
xlabel(t), ylabel(y_2(t))
title(ode15s,FontSize,14)
Gracele lui y
2
apar n gura 6.7. Figura 6.8 cont ine un zoom pe gracul obt inut cu
ode45. Statisticile generate de rezolvitori sunt
0 1 2 3
0
0.5
1
1.5
2
2.5
3
3.5
4
x 10
5
t
y
2
(
t
)
ode45
0 1 2 3
0
0.5
1
1.5
2
2.5
3
3.5
4
x 10
5
t
y
2
(
t
)
ode15s
Figura 6.7: Solut ia y
2
a sistemului lui Robertson, obt inut a cu ode45 (st anga) si
ode15s
2052 successful steps
440 failed attempts
14953 function evaluations
0 partial derivatives
0 LU decompositions
0 solutions of linear systems
pentru ode45 si
33 successful steps
144 Ecuat ii diferent iale n MATLAB
2 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.1
2.55
2.6
2.65
2.7
2.75
2.8
x 10
5
Figura 6.8: Zoom pe solut ia y
2
a sistemului lui Robertson, obt inut a cu ode45
5 failed attempts
73 function evaluations
2 partial derivatives
13 LU decompositions
63 solutions of linear systems
pentru ode15s. De notat c a n calculele de mai sus avem
disp([length(ta),length(tb)])
8209 34
ceea ce ne arat a c a ode45 returneaz a cam de 250 de ori mai multe puncte dec at
ode15s.
Rezolvitorii stiff utilizeaz a informat ii despre matricea jacobian a, f
i
/y
j
, n di-
ferite puncte ale solut iei. Implicit, se genereaz a automat aproximat ii ale jacobianului
utiliz and diferent e nite. Totusi, dac a jacobianul se d a expicit, se obt ine o ecient a
si o robustet e mai mare a codului. Sund disponibile opt iuni care permit s a se speci-
ce o funct ie care evalueaz a jacobianul sau o matrice constant a (Jacobian), dac a
jacobianul este rar si sablonul de raritate (Jspattern), dac a este scris n form a
vectorial a (Vectorized). Pentru a ilustra modul de codicare a jacobianului, vom
considera sistemul
d
dt
y(t) = Ay(t) +y(t). (1 y(t)) +v, (6.4.2)
6.5. Tratarea evenimentelor 145
unde A este o matrice N N si v este un vector N 1 cu
A = r
1
_
_
0 1
1 0 1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1 0
_
_
+r
2
_
_
2 1
1 2 1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1 2
_
_
,
v = [r
1
r2, 0, . . . , 0, r
1
+ r
2
]
T
, r
1
= a/(2x) si r
2
= b/x
2
. Aici a, b si x
sunt parametrii cu valorile a = 1, b = 510
2
si x = 1/(N +1). Acest sistem de
ecuat ii diferent iale ordinare apare la semidiscretizarea prin metoda liniilor a ecuat iei
cu derivate part iale
t
u(x, t) +a
x
u(x, t) = b
2
x
2
u(x, t) +u(x, t)(1 u(x, t)), 0 x 1,
cu condit iile pe frontier a de tip Dirichlet u(0, t) = u(1, t) = 1. Aceast a ecuat ie
cu derivate part iale poate rezolvat a si direct cu pdepe. Componenta y
j
(t) a
sistemului de ecuat ii diferent iale ordinare aproximeaz a u(jx, t). Presupunem c a
ecuat ia cu derivate part iale veric a condit iile u(x, 0) = (1 + cos 2x)/2, pen-
tru care se poate ar ata c a u(x, t) tinde c atre starea de echilibru u(x, t) 1 c and
t . Condit ia init ial a corespunz atoare pentru ecuat ia diferent ial a ordinar a este
(y
0
)
j
= (1 + cos(2j/(N + 1)))/2. Jacobianul pentru ecuat ia diferent ial a ordinar a
are forma A + I 2diag(y(t)), unde I este matricea identic a. Sursa MATLAB 6.2
cont ine o funct ie care implementeaz a si rezolv a sistemul (6.4.2) utiliz and ode15s.
Utilizarea subfunct iilor si a tipurilor function handle face posibil ca ntreg codul s a e
cont inut ntr-un singur sier, numit rcd.m. S-a luat N = 40 si t [0, 2]. Subfunct ia
jacobian evalueaz a jacobianul, jpattern d a sablonul de raritate al jacobianu-
lui sub forma unei matrice rare cu elemente 0 si 1 si f codic a membrul drept al
ecuat iei diferent iale. A j-a coloan a a matricei de iesire y cont ine aproximarea lui
y
j
(t); matricea U a fost creat a ad aug and o coloan a de 1 la ecare cap at al lui y, con-
form condit iilor pe frontier a pentru ecuat ia cu derivate part iale. Gracul produs de
rcd apare n gura 6.9.
6.5. Tratarea evenimentelor
astfel nc at
y
= f(t, y)
y(t
0
) = y
0
si
g(t
, y(t
)) = 0.
Un model simplu al unui corp n c adere este
y
= 1 +y
2
,
cu o condit ie init ial a care d a valori pentru y(0) si y
(t) =
u(t)
r(t)
3
v
(t) =
v(t)
r(t)
3
,
unde r(t) =
_
u(t)
2
+v(t)
2
.
Intreaga rezolvare este cont inut a ntr-un singur sier
de tip funct ie, orbit.m (sursa MATLAB 6.3). Parametrul de intrare, reltol, este
6.5. Tratarea evenimentelor 149
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6
0
0.2
0.4
0.6
0.8
1
t
y
Corp in cadere
tfinal = 1.6575
Figura 6.10: Traiectoria unui corp n c adere
Sursa MATLAB 6.3 Problema celor dou a corpuri
function orbit(reltol)
y0 = [1; 0; 0; 0.3];
opts = odeset(events, @gstop,RelTol,reltol);
[t,y,te,ye] = ode45(@twobody,[0,2
*
pi], y0, opts, y0);
tfinal = te(end)
yfinal = ye(end,1:2)
plot(y(:,1),y(:,2),-,0,0,ro)
axis([-0.1 1.05 -0.35 0.35])
%----------
function ydot = twobody(t,y,y0)
r = sqrt(y(1)2 + y(2)2);
ydot = [y(3); y(4); -y(1)/r3; -y(2)/r3];
%--------
function [val,isterm,dir] = gstop(t,y,y0)
d = y(1:2)-y0(1:2);
v = y(3:4);
val = d
*
v;
isterm = 1;
dir = 1;
150 Ecuat ii diferent iale n MATLAB
eroarea (precizia) relativ a dorit a. Codicarea problemei twobody si funct ia de tra-
tare a evenimentelor gstop sunt date prin subfunct ii (ele pot p astrate la fel de bine
n siere separate). Calculul orbitei se realizeaz a cu ode45. Argumentul de intrare
y0 este un vector cu 4 elemente, care d a pozit ia init ial a si viteza. Corpul usor porneste
din pozit ia (1, 0) si are viteza init ial a (0, 0.3), care este perpendicular a pe vectorul
pozit iei init iale. Argumentul opts este o structur a creat a cu odeset, care specic a
eroarea relativ a (egal a cu reltol) si funct ia de tratare a evenimentelor gstop. Ul-
timul argument al lui ode45 este o copie y0, transmis a at at lui twobody c at si lui
gstop. Vectorul bidimensional d din gstop este diferent a dintre pozit ia curent a si
punctul de pornire. Viteza n pozit ia curent a este dat a de vectorul bidimensional v,
iar cantitatea val este produsul scalar al lui d si v. Expresia funct iei de oprire este
g(t, y) = d
(t)
T
d(t),
unde
d = (y
1
(t) y
1
(0), y
2
(t) y
2
(0))
T
.
Punctele n care g(t, y(t)) = 0 sunt extreme locale ale lui d(t). Pun and dir = 1,
vom indica c a zerourile lui g(t, y) sunt atinse de sus, ceea ce corespunde minime-
lor. Set and isterm = 1, vom indica faptul c a procesul de calcul trebuie oprit la
nt alnirea primului minim. Dac a orbita este periodic a, atunci orice minim al lui d
apare c and corpul se ntoarce n punctul init ial.
Apel and orbit cu o precizie mic a
orbit(2e-3)
se obt ine
tfinal =
2.35087197761946
yfinal =
0.98107659901112 -0.00012519138558
si gracul din gura 6.11(a). Se poate observa din valoarea lui yfinal si din grac
o abatere de la periodicitate. Avem nevoie de o precizie mai bun a. Cu comanda
orbit(1e-6)
se obt ine
tfinal =
2.38025846171798
yfinal =
0.99998593905520 0.00000000032239
Valoarea yfinal este acum sucient de apropiat a de y0, iar gracul arat a mult mai
bine (gura 6.11(b)).
6.5. Tratarea evenimentelor 151
0 0.2 0.4 0.6 0.8 1
0.3
0.2
0.1
0
0.1
0.2
0.3
(a) 2e-3
0 0.2 0.4 0.6 0.8 1
0.3
0.2
0.1
0
0.1
0.2
0.3
(b) 1e-6
Figura 6.11: Orbitele pentru pecizia 2e-3 (st anga) si 1e-6
Vom considera acum o problem a de urm arire [5, sect iunea 12.2]. Presupunem
c a un iepure urmeaz a un drum predenit (r
1
(t), r
2
(t)) din plan si c a o vulpe
urm areste iepurele astfel ca (a) n ecare moment tangenta la drumul vulpii indic a
ntotdeauna spre iepure si (b) viteza vulpii este de k ori viteza iepurelui. Atunci dru-
mul (y
1
(t), y
2
(t)) al vulpii este determinat de sistemul de ecuat ii diferent iale
d
dt
y
1
(t) = s(t)(r
1
(t) y
1
(t)),
d
dt
y
2
(t) = s(t)(r
2
(t) y
2
(t)),
unde
s(t) =
k
_
_
d
dt
r
1
(t)
_
2
+
_
d
dt
r
2
(t)
_
2
_
(r
1
(t) y
1
(t))
2
+ (r
2
(t) y
2
(t))
2
.
De notat c a acest sistem pune probleme atunci c and vulpea se apropie de iepure.
Presupunem c a iepurele urmeaz a spirala de ecuat ie
_
r
1
(t)
r
2
(t)
_
=
1 +t
_
cos(t)
sin(t)
_
,
si c a vulpea porneste din pozit ia y
1
(0) = 3, y
2
(0) = 0. Membrul drept este imple-
mentat prin funct ia fox1:
function yprime = fox1(t,y,k)
%FOX1 urmarire vulpe-iepure.
% YPRIME = FOX1(T,Y,K).
152 Ecuat ii diferent iale n MATLAB
r = sqrt(1+t)
*
[cos(t); sin(t)];
r_p = (0.5/sqrt(1+t))
*
[cos(t)-2
*
(1+t)
*
sin(t);...
sin(t)+2
*
(1+t)
*
cos(t)];
dist = max(norm(r-y),1e-6);
if dist > 1e-4
factor = k
*
norm(r_p)/dist;
yprime = factor
*
(r-y);
else
error(Model ODE prost definit)
end
Dac a distant a dintre vulpe si iepure devine prea mic a se apeleaz a error. Script-ul
de mai jos apeleaz a fox1 si produce gura 6.12. Pozit iile init iale sunt marcate prin
cercuri.
tspan = [0,10]; y0=[3,0]; k=0.75;
[tfox,yfox] = ode45(@fox1,tspan,y0,[],k);
plot(yfox(:,1),yfox(:,2)), hold on
plot(sqrt(1+tfox).
*
cos(tfox),sqrt(1+tfox).
*
...
sin(tfox),--)
plot([3,1],[0,0],o)
axis equal, axis([-3.5,3.5,-2.5,3.1])
legend(Vulpe,Iepure,0), hold off
3 2 1 0 1 2 3
2
1
0
1
2
3
Vulpe
Iepure
Figura 6.12: Exemplu de urm arire
Implementarea de mai sus este nesatisf ac atoare pentru k > 1, adic a atunci c and
vulpea este mai rapid a dec at iepurele.
In acest caz, dac a iepurele este prins n inter-
6.5. Tratarea evenimentelor 153
valul de timp specicat, nici o solut ie nu este asat a. Situat ia se poate evita utiliz and
facilitatea de localizare a evenimentelor, asa cum se poate vedea n script-ul urm ator.
Pozit iile init iale, drumurile celor dou a animale si pozit ia nal a apar n gura 6.13.
tspan = [0,10]; y0=[3,0];
k=1.1;
opt = odeset(RelTol,1e-6,AbsTol,1e-6,Events,@events);
[tfox,yfox,te,ye,ie] = ode45(@fox2,tspan,y0,opt,k);
plot(yfox(:,1),yfox(:,2)), hold on
plot(sqrt(1+tfox).
*
cos(tfox),sqrt(1+tfox).
*
...
sin(tfox),--)
plot([3,1],[0,0],o)
plot(yfox(end,1),yfox(end,2),
*
)
axis equal, axis([-3.5,3.5,-2.5,3.1])
legend(Vulpe,Iepure,0), hold off
Aici s-a utilizat funct ia odeset pentru a seta erorile si a specica funct ia de locali-
zare a evenimentelor. Membrul drept si funct ia de localizare a evenimentelor se dau
n sursa MATLAB 6.4. Ele sunt memorate n siere distincte.
In funct ia de locali-
Sursa MATLAB 6.4 Funct iile fox2 si events pentru problema de urm arire
function yprime = fox2(t,y,k)
%FOX2 simulare urmarire vulpe iepure
% YPRIME = FOX2(T,Y,K).
r = sqrt(1+t)
*
[cos(t); sin(t)];
r_p = (0.5/sqrt(1+t))
*
[cos(t)-2
*
(1+t)
*
sin(t);...
sin(t)+2
*
(1+t)
*
cos(t)];
dist = max(norm(r-y),1e-6);
factor = k
*
norm(r_p)/dist;
yprime = factor
*
(r-y);
function [value,isterminal,direction] = events(t,y,k)
%EVENTS Functie eveniment pentru FOX2.
% Localizare cand vulpea este aproape de iepure.
r = sqrt(1+t)
*
[cos(t); sin(t)];
value = norm(r-y) - 1e-4; % vulpea aproape de iepure.
isterminal = 1; % oprire integrare.
direction = -1; % valoarea descreste catre 0.
zare events se calculeaz a distant a dintre animale minus pragul de eroare 1e-4. S-a
ales direction=-1 pentru c a distant a trebuie s a descreasc a. Parametrii de iesire
154 Ecuat ii diferent iale n MATLAB
3 2 1 0 1 2 3
2
1
0
1
2
3
Vulpe
Iepure
Figura 6.13: Exemplu de urm arire cu capturare
ne spun momentul (te), pozit ia (ye) si care component a a evenimentului apare (ie).
Pentru exemplul nostru se obt ine
>> te,ye,ie
te =
5.0710
ye =
0.8646 -2.3073
ie =
1
ceea ce ne spune c a iepurele a fost capturat la momentul 5.071 n punctul de coordo-
nate (0.8646, 2.3073).
6.6. Ecuatii implicite
Rezolvitorul ode15i, introdus ncep and cu versiunea 7, rezolv a ecuat ii implicite
de forma
f(t, y, y
) = 0
utiliz and o metod a BDF de ordin variabil. Sintaxa minimal a este
[T,Y] = ode15i(odefun,tspan,y0,yp0)
dar sintaxa general a suport a toate facilit at ile celorlalt i rezolvitori. Noutatea este
aparit ia parametrului yp0 care este valoarea y
(t
0
). Trebuie ndeplinit a condit ia de
6.6. Ecuat ii implicite 155
consistent a f(t
0
, y(t
0
), y
(t
0
)) = 0. Se pot obt ine valori consistente cu ajutorul
funct iei decic. S a rezolv am ecuat ia
y
2
+y
2
1 = 0, t [/6, /4],
cu condit ia init ial a y(/6) = 1/2. Solut ia exact a este y(t) = sin(t), iar valoarea de
pornire pentru derivat a y
(/6) =
= 1 y
2
, y(0) = 0.
folosind diferite metode ale c aror tabele Butcher au fost date n acest capitol, precum
si ode23 si ode45. Calculat i eroarea global a, stiind c a solut ia exact a este
y(x) =
e
2x
1
e
2x
+ 1
si vericat i c a este O(h
p
).
Problema 6.2. Rezolvat i ecuat iile si comparat i cu solut iile exacte:
(a)
y
=
1
4
y(1
1
20
y), x [0, 20], y(0) = 1;
cu solut ia exact a
y(x) =
20
1 + 19e
x/4
;
(b)
y
= 0.032 0.4(y
)
2
, x [0, 20], y(0) = 30, y
(0) = 0;
cu solut ia exact a
y(x) =
5
2
log
_
cosh
_
2
2x
25
__
+ 30,
y
(x) =
2
5
tanh
_
2
2x
25
_
.
156 Ecuat ii diferent iale n MATLAB
Problema 6.3. Ecuat ia atractorului Lorenz
dx
dt
= ax +ay,
dy
dt
= bx y xz,
dz
dt
= cz +xy
are solut ii haotice care sunt sensibil dependente de condit iile init iale. Rezolvat i nu-
meric pentru a = 5, b = 15, c = 1 cu condit iile init iale
x(0) = 2, y(0) = 6, z(0) = 4, t [0, 20],
cu tolerant a T = 10
4
. Repetat i pentru
(a) T = 10
5
;
(b) x(0) = 2.1.
Comparat i rezultatele cu cele obt inute anterior.
In ecare caz reprezentat i grac.
Problema 6.4. Evolut ia unei epidemii de grip a ntr-o populat ie de N indivizi este
modelat a de sistemul de ecuat ii diferent iale
dx
dt
= xy +,
dy
dt
= xy y
dz
dt
= y ,
unde x este num arul de indivizi susceptibili de a face infect ia, y este num arul de
infectat i, iar z este num arul de imuni, care include si num arul de bolnavi ref acut i
dup a boal a, la momentul t. Parametrii , , sunt ratele de recuperare, transmisie si
respectiv recontaminare (replenishment) (pe zi). Se presupune c a populat ia este x a,
astfel c a noile nasteri sunt compensate de mort i.
Utilizat i funct iile oderksi ode45 pentru a rezolva ecuat iile cu condit iile init iale
x(0) = 980, y(0) = 20, z(0)=0, d andu-se parametrii = 0.05, = 0.0002, = 0.
Simularea se va termina c and y(t) > 0.9N. Determinat i aproximativ num arul maxim
de persoane infectate si momentul c and apare.
Investigat i efectul (a) variat iei num arului init ial de indivizi infectat i asupra
evolut iei epidemiei si (b) introducerea unei rate de recontaminare nenule.
6.6. Ecuat ii implicite 157
Problema 6.5. [2] C apitanul Kirk
1
si echipajul s au de pe nava spat ial a Enterprise
au esuat f ar a energie pe orbita din jurul unei planetei de tip P am ant Capella III, la
o altitudine de 127 de km. Fr anarea atmosferic a cauzeaz a c aderea orbitei, si dac a
nava atinge straturile dense ale atmosferei, fr anarea excesiv a si nc alzirea datorat a
frec arii va cauza daune ireparabile sistemului de ment inere a viet ii. Ot erul stiint ic,
Mr. Spock, estimeaz a c a reparat iile temporare la motoarele de impuls vor necesita
29 de minute cu condit ia ca ele s a e terminate nainte ca fr anarea s a creasc a la 5g
(1g = 9.81ms
1
). Deoarece Mr. Spock este un geniu matematic, el a decis s a simu-
leze degradarea orbitei prin rezolvarea numeric a a ecuat iilor de miscare cu perechea
de metode incluse DORPRI5. Ecuat iile de miscare ale navei, n condit iile fr an arii
atmosferice, sunt date de
dv
dt
=
GM sin
r
2
cv
2
d
dt
=
_
GM
rv
v
_
cos
r
dz
dt
= v sin
d
dt
=
v cos
r
,
unde
v este viteza tangent ial a (m/s);
este unghiul de reintrare (ntre vitez a si orizontal a);
z este altitudinea (m);
M este masa planetar a (6 10
24
kg);
G este constanta gravitat iei (6, 67 10
11
SI);
c este constanta de fr anare (c = 0.004);
r este distant a p an a la centrul planetei (z + 6.37 10
6
m);
este densitatea atmosferei (1.3 exp(z/7600));
este longitudinea;
t este timpul (s).
1
Personaje din Star Trek, seria I
158 Ecuat ii diferent iale n MATLAB
La momentul t = 0, valorile init iale sunt = 0, = 0 si v =
_
GM/r. Mr.
Spock a rezolvat ecuat iile numeric pentru a g asi istoricul deceler arii si momentul si
locul impactului n care c aderea orbitei nu mai poate prevenit a. Repetat i simula-
rea utiliz and o metod a Runge-Kutta cu pas variabil si estimat i decelerarea maxim a
ncercat a n timpul cobor arii si n alt imea la care apare. Va da c apitanul Kirk ordinul
de abandonare a navei?
Problema 6.6. Cometa Halley si-a atins ultima dat a periheliul (apropierea maxim a
de soare) la 9 februarie 1986. Pozit ia si componentele vitezei n acel moment erau
(x, y, z) = (0.325514, 0.459460, 0.166229)
_
dx
dt
,
dy
dt
,
dz
dt
_
= (9.096111, 6.916686, 1.305721).
Pozit ia este m asurat a n unit at i astronomice (distant a medie de la p am ant la soare),
iar timpul n ani. Ecuat iile misc arii sunt
d
2
x
dt
2
=
x
r
3
,
d
2
y
dt
2
=
y
r
3
,
d
2
z
dt
2
=
z
r
3
,
unde r =
_
x
2
+y
2
+z
2
, = 4
2
, iar perturbat iile planetare au fost neglijate. Re-
zolvat i aceste ecuat ii numeric pentru a determina aproximativ momentul urm atorului
periheliu.
Problema 6.7. Consider am din nou problema orbitei (celor dou a corpuri) scris a sub
forma
y
1
= y
3
y
2
= y
4
y
3
= y
1
/r
3
y
4
= y
2
/r
3
,
cu condit iile init iale
y(0) =
_
1 e, 0, 0,
_
1 +e
1 e
_
T
,
unde r =
_
y
2
1
+y
2
2
. Solut ia reprezint a miscare pe orbit a eliptic a cu excentricitatea
e (0, 1), cu perioada 2.
6.6. Ecuat ii implicite 159
(a) Ar atat i c a solut iile pot scrise sub forma
y
1
= cos E e
y
2
=
_
1 e
2
sin E
y
3
= sin E/(e cos E 1)
y
4
=
_
1 e
2
cos E/(1 +e cos E),
unde E este solut ia ecuat iei lui Kepler
E e sin E = x.
(b) Rezolvat i problema cu oderk si ode45 si reprezentat i grac solut ia, variat ia
lungimii pasului pentru x [0, 20] si o precizie de 10
5
.
(c) Calculat i erorile globale, num arul de evalu ari de funct ii si num arul de respin-
geri pe pas pentru tolerant ele 10
4
, 10
5
, . . . , 10
11
.
Problema 6.8. [15]La jocurile olimpice de la Ciudad de Mexico din 1968 Bob Bea-
mon a stabilit un record mondial la s aritura n lungime de 8.90 metri. Acest record a
dep asit cu 0.80 metri recordul precedent si a rezistat p an a n 1991. Dup a s aritura re-
marcabil a a lui Beamon, mult i au sugerat c a rezistent a redus a a aerului la altitudinea
de peste 2000 de metri a fost un factor important.
Consider am un sistem xat de coordonate carteziene, cu axa orizontal a x, axa
vertical a y si originea pe pragul de b ataie. Singurele fort e care act ioneaz a dup a b ataie
sunt gravitat ia si rezistent a aerodinamic a D, care este proport ional a cu p atratul vi-
tezei. Nu avem v ant, viteza init ial a este v
0
si unghiul cu axa Ox este de
0
radiani.
Ecuat iile care descriu miscarea s aritorului sunt
x
= v cos , y
= v sin,
=
g
v
cos , v
=
D
m
g sin .
Rezistent a este
D =
cs
2
(x
2
+y
2
).
Constantele pentru aceast a problem a sunt accelerat ia gravitat ional a, g = 9.81 m/s
2
,
masa m = 80 kg, coecientul de fr anare c = 0.72, aria sect iunii s aritorului, s = 0.50
m
2
si unghiul init ial
0
= 22.5
1
=
1
y
1
x
2
2
x
3
,
y
2
=
y
1
y
2
2
1
x
1
2x
3/2
,
x [1, 10], cu condit iile init iale y
1
(1) = 1, y
2
= 1, utiliz and un rezolvitor nonstiff
si apoi unul stiff. Sistemul are solut iile exacte y
1
= 1/x
2
, y
2
= 1/
x.
Problema 6.10. Ecuat ia lui van der Pol are forma
y
1
_
1 y
2
1
_
y
1
+y
1
= 0, (6.6.1)
unde > 0 este un parametru scalar.
1. S a se rezolve ecuat ia n cazul c and = 1 pe intervalul [0,20] si condit iile
init iale y(0) = 2 si y
.
2. S a se rezolve ecuat ia pentru = 1000 (stiff), intervalul de timp [0,3000] si
vectorul valorilor init iale [2;0]. S a se reprezinte grac y.
6.6. Ecuat ii implicite 161
Problema 6.11. Un dop de lungime L este pe punctul de a expulzat dintr-o sticl a
ce cont ine un lichid n fermentat ie. Ecuat iile de miscare a dopului sunt
dv
dt
=
_
g(1 +q)
_
_
1 +
x
d
_
+
RT
100
1 +
qx
L(1+q)
_
, x < L;
0, x L
dx
dt
= v,
unde
g accelerat ia gravitat ional a;
q raportul frecare-greutate al dopului;
x deplasarea dopului n g atul sticlei;
t timpul;
d lungimea g atului sticlei
R rata procentual a cu care presiunea creste;
constanta adiabatic a pentru gazul din sticl a ( = 1.4).
Condit iile init iale sunt x(0) = x
= (x
3
Ax +c),
c
= x,
unde x este deplasarea de la echilibru a brei musculare, c(t) este concentrat ia unui
control chimic, iar si A sunt constante pozitive. Se asteapt a ca solut iile s a e peri-
odice. Aceasta se poate vedea reprezent and solut ia n planul fazelor (x pe abscis a, c
pe ordonat a), trebuind s a se obt in a o curb a nchis a. Presupunem c a = 1 si A = 3.
(a) Calculat i x(t) si c(t), pentru 0 t 12 si valorile init iale x(0) = 0.1,
c(0) = 0.1. Reprezentat i iesirea n planul fazelor. Cam c at este perioada?
162 Ecuat ii diferent iale n MATLAB
(b) Repetat i punctul (a) cu x(0) = 0.87, c(0) = 2.1.
Problema 6.13. Concepet i si implementat i o strategie de control al pasului pentru
metoda lui Euler cu un estimator al erorii bazat pe metoda lui Heun. Testat i pe dou a
probleme din acest capitol.
Problema 6.14. [15] Determinat i traiectoria unei ghiulele de tun sferice ntr-un sis-
tem stat ionar de coordonate carteziene, care are o ax a orizontal a x, o ax a vertical a
y si originea n punctul de lansare. Viteza init ial a a proiectilului n acest sistem de
coordonate are m arimea v
0
si face un unghi de
0
radiani cu axa x. Singurele fort e
care act ioneaz a asupra proiectilului sunt gravitat ia si rezistent a aerodinamic a, D, care
depinde de viteza proiectilului relativ a la orice v ant care ar putea prezent. Ecuat iile
care descriu miscarea proiectilului sunt
x
= v cos , y
= v sin ,
=
g
v
cos , v
=
D
m
g sin.
Constantele pentru aceast a problem a sunt: accelerat ia gravitat ional a, g = 9.81m/s
2
,
masa m = 15kg si viteza init ial a v
0
= 50m/s. Se presupune c a v antul este ori-
zontal si viteza sa este o funct ie dat a de timp, w(t). Rezistent a aerodinamic a este
proport ional a cu p atratul vitezei relative la v ant a proiectilului
D(t) =
cs
2
_
(x
w(t))
2
+y
2
_
,
unde c = 0.2 este coecientul de fr anare, = 1.29kg/m
3
este densitatea aerului, iar
s = 0.25m
2
este aria sect iunii transversale a proiectilului.
Consider am patru tipuri de v ant.
Nici un v ant: w(t) = 0 pentru orice t.
V ant stat ionar din fat a: w(t) = 10m/s, pentru orice t.
V ant intermitent din spate: w(t) = 10m/s, dac a partea ntreag a a lui t este
par a si zero n caz contrar.
Vijelie: w(t) este o variabil a aleatoare normal a cu media zero si abaterea medie
p atratic a 10 m/s.
Partea ntreag a a unui num ar se poate calcula cu funct ia MATLAB floor, iar o
variabil a aleatoare cu media 0 si abaterea medie p atratic a sigma se poate genera cu
sigma
*
randn.
6.6. Ecuat ii implicite 163
Pentru ecare din aceste tipuri de v ant realizat i urm atoarele calcule. G asit i cele 17
traiectorii ale c aror unghiuri init iale sunt multiplii de 5 grade, adic a
0
= k/36
radiani, k = 1, 17. Desenat i toate cele 17 traiectorii pe o gur a. Determinat i care
dintre aceste traiectorii are cea mai mare b ataie orizontal a. Pentru acea traiectorie,
determinat i unghiul init ial n grade, timpul de zbor, b ataia orizontal a, viteza la impact
si num arul de pasi executat i de rezolvitor.
Care dintre cele patru tipuri de v ant necesit a mai multe calcule. De ce?
Problema 6.15. [2] Un parasutist sare dintr-un avion ce se deplaseaz a cu viteza v
m/s la altitudinea de y m. Dup a o perioad a de c adere liber a, parasuta se deschide la
n alt imea y
p
. Ecuat iile de miscare ale parasutistului sunt
x
= v cos ,
y
= v sin,
v
= D/M g sin , D =
1
2
C
D
Av
2
,
= g cos /v,
unde x este coordonata orizontal a, este unghiul de cobor are, D este rezistent a ae-
rului, iar A este aria de referint a pentru fort a de tract iune, dat a de
A =
_
, dac a y y
p
;
S, dac a y < y
p
.
Constantele sunt
g = 9.81 m/s, M = 80kg, = 1.2kg/m
3
,
= 0.5m
2
, S = 30m
2
, C
D
= 1.
Utilizat i un rezolvitor adecvat pentru a simula cobor area parasutistului. Folosit i fa-
cilit at i de interpolare pentru a determina n alt imea critic a y
p
. Determinat i momentul
impactului si viteza minim a de cobor are nainte de deschiderea parasutei.
164 Ecuat ii diferent iale n MATLAB
Bibliograe
[1] P. J. Davis, P. Rabinowitz, Numerical Integration, Blaisdell, Waltham, Massa-
chusetts, 1967.
[2] J. Dormand, Numerical Methods for Differential Equations. A Computational
Approach, CRC Press, Boca Raton New York, 1996.
[3] W. Gander, W. Gautschi, Adaptive quadrature - revisited, BIT 40 (2000), 84
101.
[4] W. Gautschi, Numerical Analysis, An Introduction, Birkh auser, Basel, 1997.
[5] D. J. Higham, N. J. Higham, MATLAB Guide, SIAM, Philadelphia, 2000.
[6] Nicholas J. Higham, The Test Matrix Toolbox for MATLAB, Tech. report, Man-
chester Centre for Computational Mathematics, 1995, disponibil via WWW la
adresa http://www.ma.man.ac.uk/MCCM/MCCM.html.
[7] D. Kincaid, W. Cheney, Numerical Analysis: Mathematics of Scientic Compu-
ting, Brooks/Cole Publishing Company, Belmont, CA, 1991.
[8] Mirela Kohr, Capitole speciale de mecanic a, Presa Univ. Clujean a, 2005.
[9] The Mathworks Inc., Natick, Ma, Using MATLAB, 2002.
[10] The Mathworks Inc., Natick, Ma, MATLAB. Getting Started, 2004, Version 7.
[11] The Mathworks Inc., Natick, Ma, MATLAB. Symbolic Math Toolbox, 2004, Ver-
sion 7.
165
166 Bibliograe
[12] The Mathworks Inc., Natick, Ma, MATLAB. The Language of Technical Com-
puting. Mathematics, 2004, Version 7.
[13] The Mathworks Inc., Natick, Ma, MATLAB. The Language of Technical Com-
puting. Programming, 2004, Version 7.
[14] The Mathworks Inc., Natick, Ma, Using MATLAB Graphics, 2004, Version 7.
[15] Cleve Moler, Numerical Computing in MATLAB, SIAM, 2004, disponibil via
www la adresa http://www.mathworks.com/moler.
[16] Shoichiro Nakamura, Numerical Computing and Graphic Vizualization in MA-
TLAB, Prentice Hall, Englewood Cliffs, NJ, 1996.
[17] Dana Petcu, Matematic a asistat a de calculator, Eubeea, Timisoara, 2000.
[18] L. F. Shampine, R. C. Allen, S. Pruess, Fundamentals of Numerical Computing,
John Wiley & Sons, Inc, 1997.
[19] L. F. Shampine, Reichelt R. W., The MATLABODE suite, SIAMJ. Sci. Comput.
18 (1997), no. 1, 122.
[20] D. D. Stancu, G. Coman, P. Blaga, Analiz a numeric a si teoria aproxim arii,
vol. II, Presa Universitar a Clujean a, Cluj-Napoca, 2002, D. D. Stancu, Gh. Co-
man, (coord.).
[21] C. Ueberhuber, Numerical Computation. Methods, Software and Analysis, vol.
I, II, Springer Verlag, Berlin, Heidelberg, New York, 1997.
Indice
\ (operator), 14, 79
: (operator), 11
% (comentariu), 29
axis, 62
blkdiag, 9
break, 27
chol, 83
clf, 60
close, 60
colorbar, 72
colormap, 72
cometarii MATLAB, 29
condeig, 97
continue, 27
contour, 70
conv, 89
cross, 16
dblquad, 122
deconv, 89
demo, 3
det, 15
diag, 10
diary, 6
diff(Symbolic), 46
digits, 52
doc, 3
dot, 16
double, 53
eig, 94
eps, 4
error, 27, 45
eye, 7
ezcontour, 69
fcnchk, 36
feval, 35
figure, 60
fill, 59
find, 22
sier M, 28
funct ie, 28, 29
script, 28
for, 24, 25
format, 4
fplot, 66
fsolve, 51
function handle, 34
funct ii anonime, 35
funct ii imbricate, 33
fzero, 123
167
168 Indice
gallery, 11
global, 39
help, 2
hess, 97
if, 24
Inf, 3
inline, 34
int, 47
int16, 41
int32, 41
int8, 41
interp1, 107
inv, 15, 16
lasterr, 45
lasterror, 45
legend, 63
length, 8
limit, 49
load, 5
logical, 23
loglog, 58
lookfor, 3
lu, 82
maple, 52
matrice
descompunere cu valori singu-
lare, 98
mesh, 70
meshc, 70
meshgrid, 70
NaN, 3
nargin, 31
nargout, 31
obiect inline, 34
ode15i, 154
ode113, 132
ode15s, 132
ode23s, 132
ode23tb, 132
ode23t, 132
ode23, 132
ode45, 132
ones, 7
pchip, 109, 111
pi, 4
pinv, 90
plot, 56
plot3, 67
polar, 59
poly, 88
polyder, 88
polyfit, 92, 107
polyval, 88
polyvalm, 88
ppval, 110
print, 75, 76
qr, 83
quad, 119
quadl, 119
rand, 8
randn, 8
repmat, 9
reshape, 9
roots, 88
save, 5
semilogx, 58
semilogy, 58
simple, 48
simplify, 48
single, 41
size, 7
solve, 50
Indice 169
sort, 18
spline, 109
subfunct ii, 31
subplot, 65
subs, 48
surf, 71
surfc, 71
svd, 99
switch, 24, 27
sym, 46
syms, 46
tablou de celule, 37
taylor, 48
text, 64
tic, 39
title, 58
toc, 39
trapz, 122
tril, 11
triu, 11
try-catch, 45
uint16, 41
uint32, 41
uint8, 41
valori proprii generalizate, 97
varargin, 37
varargout, 37
vectorize, 36
view, 72
vpa, 52
waterfall, 72
while, 24, 26
whos, 6
xlabel, 58, 69
xlim, 62
ylabel, 58
ylim, 62
zeros, 7
170 Indice