0% found this document useful (0 votes)
185 views

Soft Matematic

This document is a table of contents for a book on software mathematics using MATLAB. It lists 6 chapters that will cover introductions to MATLAB, graphics in MATLAB, linear algebra in MATLAB, interpolation in MATLAB, functions of functions, and differential equations in MATLAB. Each chapter is further broken down into sections that will discuss specific topics and include example problems.

Uploaded by

Sun Shn
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
185 views

Soft Matematic

This document is a table of contents for a book on software mathematics using MATLAB. It lists 6 chapters that will cover introductions to MATLAB, graphics in MATLAB, linear algebra in MATLAB, interpolation in MATLAB, functions of functions, and differential equations in MATLAB. Each chapter is further broken down into sections that will discuss specific topics and include example problems.

Uploaded by

Sun Shn
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 178

Software matematic

Radu Tiberiu Trmbit as


ii
Prefat a
Pentru a desc arca sursele din aceast a carte si solut iile problemelor trimitem citi-
torul la pagina de web a autorului: http://www.math.ubbcluj.ro/

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

este o marc a nregistrat a a Mathworks Inc., Natick MA


1.2. Modul calculator 3
>> help elfun
Pentru a obt ine doar un ecran la un moment dat se poate introduce nt ai comanda
more on, adic a
>> more on
>> help elfun
Pentru a trece la urm atoarea pagin a se poate ap asa orice tast a.
O alt a facilitate util a este utilizarea unei comenzi de forma lookfor
cuvant-cheie, care caut a n sierele help un cuv ant cheie. Propunem cititoru-
lui s a testeze lookfor factorization, care d a informat ii despre rutinele de
factorizare a matricelor, deosebit de utile n algebra liniar a.
Pentru ncep atori si cei care predau MATLABdemonstrat iile sunt foarte utile. Un
set cuprinz ator se poate lansa prin comanda
>> demo
Atent ie, ea sterge toate variabilele!

Inafar a de facilitatea de help on-line, exist a un sistem bazat pe hipertext, care


d a detalii asupra asupra celor mai multe comenzi si exemple. El este disponibil prin
comanda doc.
1.2. Modul calculator
Operat iile aritmetice de baz a sunt + -
*
/ si ridicarea la putere . Ordinea
implicit a a operat iilor se poate schimba cu ajutorul parantezelor.
MATLAB recunoste mai multe tipuri de numere:
ntregi, cum are 1362 sau -217897;
reale, de exemplu 1.234, 10.76;
complexe, cum ar 3.21 4.3i, unde i =

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

In simul arile si experimentele cu numere aleatoare este important ca secvent ele de


numere aleatoare s a e reproductibile. Numerele produse de rand depind de starea
generatorului. Starea se poate seta prin comanda rand(state,j). Pentru j=0
generatorul rand este setat n starea init ial a (starea de la lansarea MATLAB). Pentru
ntregi j nenuli, generatorul este setat pe a j-a stare. Starea lui randn se seteaz a
n acelasi mod. Perioadele lui rand si randn, adic a num arul de termeni generat i
nainte ca secvent ele s a nceap a s a se repete este mai mare dec at 2
1492
10
449
.
Matricele se pot construi si n form a de bloc. Din matricea B, denit a prin B=[1
2; 3 4], putem crea
>> C=[B, zeros(2); ones(2), eye(2)]
C =
1 2 0 0
3 4 0 0
1 1 1 0
1.3. Matrice 9
1 1 0 1
Matricele diagonale pe blocuri se pot deni utiliz and funct ia blkdiag, care este
mai usor de utilizat dec at notat ia cu paranteze p atrate. Exemplu:
>> A=blkdiag(2
*
eye(2),ones(2))
A =
2 0 0 0
0 2 0 0
0 0 1 1
0 0 1 1
Funct ia repmat permite construirea de matrice prin repetarea de subblocuri:
repmat(A,m,n) creaz a o matrice de m pe n blocuri n care ecare bloc este o
copie a lui A. Dac a n lipseste, valoarea sa implicit a este m. Exemplu:
>> A=repmat(eye(2),2)
A =
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
Sunt disponibile si comenzi pentru manipularea matricelor; vezi tabela 1.3.
reshape Schimbarea dimensiunii
diag Matrice diagonale si diagonale ale matricelor
blkdiag Matrice diagonal a pe blocuri
tril Extragerea p art ii triunghiulare inferior
triu Extragerea p art ii triunghiulare inferior
fliplr Rotire matrice n jurul axei de simetrie verticale
flipud Rotire matrice n jurul axei de simetrie orizontale
rot90 Rotat ia unei matrice cu 90 de grade
Tabela 1.3: Funct ii de manipulare a matricelor
Funct ia reshape schimb a dimensiunile unei matrice: reshape(A,m,n)pro-
duce o matrice m pe n ale c arei elemente sunt luate coloan a cu coloan a din A. De
exemplu:
>>A=[1 4 9; 16 25 36], B=reshape(A,3,2)
A =
1 4 9
16 25 36
B =
1 25
10 Introducere n MATLAB
16 9
4 36
Funct ia diag lucreaz a cu diagonalele unei matrice si poate avea ca argument
o matrice sau un vector. Pentru un vector x, diag(x) este matricea cu diagonala
principal a x:
>>diag([1,2,3])
ans =
1 0 0
0 2 0
0 0 3
Mai general, diag(x,k) pune x pe diagonala cu num arul k, unde k = 0 nseamn a
diagonala principal a, k > 0 specic a diagonale situate deasupra diagonalei princi-
pale, iar k < 0 diagonale dedesubtul diagonalei principale:
>> diag([1,2],1)
ans =
0 1 0
0 0 2
0 0 0
>> diag([3 4],-2)
ans =
0 0 0 0
0 0 0 0
3 0 0 0
0 4 0 0
Pentru o matrice A, diag(A) este vectorul coloan a format din elementele de pe
diagonala principal a a lui A. Pentru a produce o matrice diagonal a av and aceasi dia-
gonal a ca A se va utiliza diag(diag(A)). Analog cazului vectorial, diag(A,k)
produce un vector coloan a construit din a k-a diagonal a a lui A. Astfel dac a
A =
2 3 5
7 11 13
17 19 23
atunci
>> diag(A)
ans =
2
11
23
>> diag(A,-1)
1.3. Matrice 11
ans =
7
19
tril(A) obt ine partea triunghiular a inferior a lui A (elementele situate pe dia-
gonal a principal a si dedesubtul ei si n rest zero). Analog lucreaz a triu(A) pentru
partea triunghiular a superior. Mai general, tril(A,k) d a elementele situate pe di-
agonala a k-a a lui A si dedesubtul ei, n timp ce triu(A,k) d a elementele situate
pe a k-a diagonal a a lui A si deasupra ei. Pentru A ca mai sus:
>>tril(A)
ans =
2 0 0
7 11 0
17 19 23
>>triu(A,1)
ans =
0 3 5
0 0 13
0 0 0
>>triu(A,-1)
ans =
2 3 5
7 11 13
0 19 23
MATLABposed a un set de funct ii pentru generarea unor matrice speciale. Aceste
matrice au propriet at i interesante care le fac utile pentru construirea de exemple si
testarea algoritmilor. Ele sunt date n tabela 1.4.
Funct ia gallery asigur a accesul la o colect ie bogat a de matrice de test creat a
de Nicholas J. Higham [6]. Pentru detalii vezi help gallery.
1.3.2. Indexarea si notatia ,,:
Pentru a permite accesul si atribuirea la nivel de submatrice, MATLAB are o
notat ie puternic a bazat a pe caracterul ,,:. Ea este utilizat a pentru a deni vectori
care act ioneaz a ca indici. Pentru scalarii i si j, i:j desemneaz a vectorul linie cu
elementele i, i+1, . . . j (pasul este 1). Un pas diferit, s, se specic a prin i:s:j.
Exemple:
>> 1:5
ans =
1 2 3 4 5
>> 4:-1:-2
ans =
12 Introducere n MATLAB
compan matrice companion
gallery colect ie de matrice de test
hadamard matrice Hadamard
hankel matrice Hankel
hilb matrice Hilbert
invhilb inversa matricei Hilbert
magic p atrat magic
pascal matricea Pascal (coecient i binomiali)
rosser matrice simetric a pentru testarea valorilor proprii
toeplitz matrice Toeplitz
vander matrice Vandermonde
wilkinson matricea lui Wilkinson pentru testarea valorilor proprii
Tabela 1.4: Matrice speciale
4 3 2 1 0 -1 -2
>> 0:.75:3
ans =
0 0.7500 1.5000 2.2500 3.0000
Elementele individuale ale unei matrice se acceseaz a prin A(i,j), unde i 1 si
j 1 (indicii zero sau negativi nu sunt admisi n MATLAB). Notat ia A(p:q,r:s)
desemneaz a submatricea const and din intersect ia liniilor de la p la q si coloanelor
de la r la s a lui A. Ca un caz special, caracterul ,,: singur, ca specicator de linie
si coloan a, desemneaz a toate elementele din acea linie sau coloan a: A(:,j) este a
j-a coloan a a lui A, iar A(i,:) este a i-a linie. Cuv antul cheie end utilizat n acest
context desemneaz a ultimul indice n dimensiunea specicat a; astfel A(end,:) se-
lecteaz a ultima linie a lui A.

In ne, o submatrice arbitrar a poate selectat a speci-
c and indicii de linie si coloan a individuali. De exemplu, A([i,j,k],[p,q])
produce submatricea dat a de intersect ia liniilor i, j si k si coloanelor p si q. Iat a
c ateva exemple ce utilizeaz a matricea
>> A = [
2 3 5
7 11 13
17 19 23
]
a primelor nou a numere prime:
>> A(2,1)
ans =
7
>> A(2:3,2:3)
1.3. Matrice 13
ans =
11 13
19 23
>> A(:,1)
ans =
2
7
17
>> A(2,:)
ans =
7 11 13
>> A([1 3],[2 3])
ans =
3 5
19 23
Un caz mai special este A(:)care desemneaz a un vector coloan a ce cont ine toate
elementele lui A, asezate coloan a dup a coloan a, de la prima la ultima
>> B=A(:)
B =
2
7
17
3
11
19
5
13
23
C and apare n partea st ang a a unei atriburi, A(:) completeaz a A, p astr andu-i
forma. Cu astfel de notat ie, matricea de numere prime 3 3, A, se poate deni prin
>> A=zeros(3); A(:)=primes(23); A=A
A =
2 3 5
7 11 13
17 19 23
Funct ia primes returneaz a un vector de numere prime mai mici sau egale cu
argumentul ei. Transpunerea A = A (vezi sect iunea 1.3.3) este necesar a pentru a
ordona numerele prime dup a linii nu dup a coloane.
Legat a de notat ia ,,: este funct ia linspace, care n loc de increment accept a
num ar de puncte: linspace(a,b,n) genereaz a n puncte echidistante ntre a si
b. Dac a n lipseste, valoarea sa implicit a este 100. Exemplu:
14 Introducere n MATLAB
>> linspace(-1,1,9)
ans =
Columns 1 through 7
-1.0000 -0.7500 -0.5000 -0.2500 0 0.2500 0.5000
Columns 8 through 9
0.7500 1.0000
Notat ia [] nseamn a matricea vid a, 0 0. Atribuirea lui [] unei linii sau unei
matrice este un mod de a sterge o linie sau o coloan a a matricei:
>>A(2,:)=[]
A =
2 3 5
17 19 23
Acelasi efect se obt ine cu A = A([1,3],:). Matricea vid a este de asemenea util a
ca indicator de pozit ie ntr-o list a de argumente, asa cum se va vedea n 1.3.4.
Operat ia Sens matricial Sens tablou
Adunare + +
Sc adere - -

Inmult ire * .*

Imp art ire st ang a \ .\

Imp art ire uzual a / ./


Ridicare la putere .
Tabela 1.5: Operat ii pe matrice si tablouri
1.3.3. Operat ii n sens matricial si n sens tablou
Pentru scalarii a si b, operat iile +, -, / and produc rezultate evidente. Pe
l ang a operatorul uzual de mp art ire, cu semnicat ia
a
b
, MATLAB are operatorul de
mp art ire st ang a (backslash \), cu semnicat ia
b
a
. Pentru matrice, toate aceste operat ii
pot realizate n sens matricial (n conformitate cu regulile algebrei matriciale) sau
n sens tablou (element cu element). Tabela 1.5 d a lista lor.
Operat iile de adunare si sc adere sunt identice at at n sens matricial c at si n sens
tablou. Produsul A
*
B este nmult irea matricial a uzual a. Operatorii de mp art ire / si
\ denesc solut ii ale sistemelor liniare: A\B este solut ia X a lui A
*
X = B, n timp ce
A/B este solut ia lui X
*
B = A. Exemple:
>> A=[2,3,5; 7,11,13; 17,19,23]
A =
2 3 5
1.3. Matrice 15
7 11 13
17 19 23
>> A=[1 2; 3 4], B=ones(2)
A =
1 2
3 4
B =
1 1
1 1
>> A+B
ans =
2 3
4 5
>> A
*
B
ans =
3 3
7 7
>> A\B
ans =
-1 -1
1 1

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 particular al vectorilor coloan a x si y, x


*
y este produsul scalar, care
se poate obt ine si cu dot(x,y). Produsul vectorial a doi vectori se poate obt ine cu
cross. Exemplu:
>> x=[-1 0 1]; y=[3 4 5];
>> x
*
y
ans =
2
>> dot(x,y)
ans =
2
>> cross(x,y)
ans =
-4
8
-4
1.3. Matrice 17
La adunarea dintre un scalar si o matrice, MATLAB va expanda scalarul ntr-o
matrice cu toate elementele egale cu acel scalar. De exemplu
>> [4,3;2,1]+4
ans =
8 7
6 5
>> A=[1 -1]-6
A =
-5 -7
Totusi, dac a atribuirea are sens f ar a expandare, atunci va interpretat a n acest mod.
Astfel, dac a comanda precedent a este urmat a de A=1, A va deveni scalarul 1, nu
ones(1,2). Dac a o matrice este nmult it a sau mp art it a cu un scalar, operat ia se
realizeaz a element cu element:
>> [3 4 5; 4 5 6]/12
ans =
0.2500 0.3333 0.4167
0.3333 0.4167 0.5000
Funct iile de matrice n sensul algebrei liniare au numele terminat n m: expm,
funm, logm, sqrtm. De exemplu, pentru A = [2 2; 0 2],
>> sqrt(A)
ans =
1.4142 1.4142
0 1.4142
>> sqrtm(A)
ans =
1.4142 0.7071
0 1.4142
>> ans
*
ans
ans =
2.0000 2.0000
0 2.0000
1.3.4. Analiza datelor
Tabela 1.6 d a funct iile de baz a pentru analiza datelor. Cel mai simplu mod de
utilizare a lor este s a e aplicate unui vector, ca n exemplele
>> x=[4 -8 -2 1 0]
x =
4 -8 -2 1 0
>> [min(x) max(x)]
18 Introducere n MATLAB
max Maximul
min Minimul
mean Media
median Mediana
std Abaterea medie p atratic a
var Dispersia
sort Sortare n ordine cresc atoare
sum Suma elementelor
prod Produsul elementelor
cumsum Suma cumulat a
cumprod Produsul cumulat
diff Diferent a elementelor
Tabela 1.6: Funct ii de baz a pentru analiza datelor
ans =
-8 4
>>sort(x)
ans =
-8 -2 0 1 4
>>sum(x)
ans =
-5
Funct ia sort sorteaz a cresc ator. Pentru un vector real x, se poate face sortarea des-
cresc atoare cu -sort(-x). Pentru vectori complecsi, sort sorteaz a dup a valorile
absolute.
Dac a argumentele sunt matrice, aceste funct ii act ioneaz a pe coloane. Astfel, max
si min returneaz a un vector ce cont ine elementul maxim si respectiv cel minim al
ec arei coloane, sum returneaz a un vector ce cont ine sumele coloanelor, iar sort
sorteaz a elementele din ecare coloan a a unei matrice n ordine cresc atoare. Funct iile
min si max pot returna un al doilea argument care specic a n care componente sunt
situate elementul minim si cel maxim. De exemplu, dac a
A =
0 -1 2
1 2 -4
5 -3 -4
atunci
>>max(A)
ans =
5 2 2
1.3. Matrice 19
>>[m,i]=min(A)
m =
0 -3 -4
i =
1 3 2
Asa cum ne arat a acest exemplu, dac a exist a dou a sau mai multe elemente minimale
ntr-o coloan a, se returneaz a numai indicele primului. Cel mai mic element dintr-o
matrice se poate obt ine aplic and min de dou a ori succesiv:
>>min(min(A))
ans =
-4
sau utiliz and
>> min(A(:))
ans =
-4
Funct iile max si min pot f acute s a act ioneze pe linie printr-un al treilea argument:
>>max (A,[],2)
ans =
2
2
5
Argumentul 2 din max(A,[],2)specic a maximul dup a a doua dimensiune, adic a
dup a indicele de coloan a. Al doilea argument vid [] este necesar, deoarece max sau
min cu dou a argumente returneaz a maximul sau minimul celor dou a argumente:
>>max(A,0)
ans =
0 0 2
1 2 0
5 0 0
Funct iile sort si sum pot si ele f acute s a act ioneze pe linii, printr-un al doilea
argument. Pentru detalii a se vedea help sort sau doc sort.
Funct ia diff calculeaz a diferent e. Aplicat a unui vector x de lungime n produce
vectorul [x(2)-x(1) x(3)-x(2) ... x(n)-x(n-1)] de lungime n-1.
Exemplu
>>x=(1:8).2
x =
1 4 9 16 25 36 49 64
>>y=diff(x)
20 Introducere n MATLAB
y =
3 5 7 9 11 13 15
>>z=diff(y)
z =
2 2 2 2 2 2
1.3.5. Operatori relat ionali si logici
Operatorii relat ionali n MATLAB sunt: == (egal), =(diferit), < (mai mic), >
(mai mare), <= (mai mic sau egal) si >= (mai mare sau egal). De notat c a un singur
egal = nseamn a atribuire.
Comparat ia ntre scalari produce 1 dac a relat ia este adev arat a si 0 n caz contrar.
Comparat iile sunt denite ntre matrice de aceeasi dimensiune si ntre o matrice si un
scalar, rezultatul ind n ambele cazuri o matrice de 0 si 1. La comparat ia matrice-
matrice se compar a perechile corespunz atoare de elemente, pe c and la comparat ia
matrice-scalar se compar a scalarul cu ecare element. De exemplu:
>> A=[1 2; 3 4]; B = 2
*
ones(2);
>> A == B
ans =
0 1
0 0
>>A > 2
ans =
0 0
1 1
Pentru a testa dac a dac a matricele A si B sunt identice, se poate utiliza expresia
isequal(A,B):
>> isequal(A,B)
ans =
0
Mai exist a si alte funct ii logice nrudite cu isequal si al c aror nume ncepe cu
is. O select ie a lor apare n tabela 1.7; pentru o list a complet a a se tasta doc is.
Funct ia isnan este util a deoarece testul x == NaN produce ntotdeauna 0 (false),
chiar dac a x este NaN! (Un NaN este prin denit ie diferit de orice si nu are o relat ie
de ordine cu nimic.)
Operatorii logici n MATLAB sunt: & (si), | (sau), (not), xor (sau exclusiv),
all (adev arat dac a toate elementele unui vector sunt nenule), any (adev arat dac a
cel put in un element al unui vector este nenul). D am c ateva exemple:
>> x = [-1 1 1]; y = [1 2 -3];
>> x>0 & y>0
1.3. Matrice 21
ischar Testeaz a dac a argumentul este sir de caractere(string)
isempty Testeaz a dac a argumentul este vid
isequal Testeaz a dac a tablourile sunt identice
isfinite Testeaz a dac a elementele unui tablou sunt nite
isieee Testez a dac a masina utilizeaz a aritmetica IEEE
isinf Testeaz a dac a elementele unui tablou sunt inf
islogical Testeaz a dac a argumentul este un tablou logic
isnan Test de NaN
isnumeric Testeaz a dac a argumentul este numeric
isreal Testeaz a dac a argumentul este tablou real
issparse Testeaz a dac a argumentul este tablou rar
Tabela 1.7: O select ie de funct ii logice is
*
ans =
0 1 0
>> x>0 | y>0
ans =
1 1 1
>> xor(x>0,y>0)
ans =
1 0 1
>> any(x>0)
ans =
1
>>all(x>0)
ans =
0
De notat c a xor trebuie apelat ca o funct ie: xor(a,b). Operatorii logici and,
or, not si cei relat ionali pot apelat i si n form a funct ional a: and(a,b), . . . ,
eq(a,b), . . . (vezi help ops).
Precedent a operatorilor este rezumat a n tabela 1.8 (vezi help precedence).
MATLABevalueaz a operatorii de precedent a egal a de la st anga la dreapta. Preceden-
t a se poate modica cu ajutorul parantezelor.
De notat c a versiunile MATLAB anterioare lui MATLAB 6 aveau aceeasi
precedent a pentru and si or (spre deosebire de majoritatea limbajelor de progra-
mare). MathWorks recomand a folosirea parantezelor pentru a garanta obt inerea re-
zultatelor identice n toate versiunile MATLAB.
Pentru matrice all returneaz a un vector linie ce cont ine rezultatul lui all apli-
cat ec arei coloane. De aceea all(all(A=B))este un alt mod de a testa egalitatea
matricelor A si B. Funct ia any lucreaz a analog; de exemplu, any(any(A==B))re-
22 Introducere n MATLAB
Nivel de precedent a Operator
1 (cea mai mare) transpusa (.), putere(.), transpusa conjugat a
complex a(), putere matricial a()
2 plus unar (+), minus unar (-), negat ie ()
3 nmult ire (.
*
), mp art ire dreapt a (./), mp art ire
st ang a (.\), nmult ire matricial a (
*
), mp art ire
dreapt a matricial a (/), mp art ire st ang a matricial a
(\)
4 adunare (+), sc adere (-)
5 dou a puncte (:)
6 mai mic (<), mai mic sau egal (<=), mai mare (>),
mai mare sau egal (>=), egal (==), diferit (~=)
7 si logic (&)
8 (cea mai mic a) sau logic (|)
Tabela 1.8: Precedent a operatorilor
turneaz a 1 dac a A si B au cel put in un element egal si 0 n caz contrar.
Comanda find returneaz a indicii corespunz atori elementelor nenule ale unui
vector. De exemplu,
>> x = [-3 1 0 -inf 0];
>> f = find(x)
f =
1 2 4
Rezultatul lui find poate apoi utilizat pentru a selecta doar acele elemente ale
vectorului:
>> x(f)
ans =
-3 1 -Inf
Cu x ca n exemplul de mai sus, putem utiliza find pentru a obt ine elementele nite
ale lui x,
>> x(find(isfinite(x)))
ans =
-3 1 0 0
si s a nlocuim componentele negative ale lui x cu zero:
>> x(find(x<0))=0
x =
0 1 0 0 0
1.3. Matrice 23
C and find se aplic a matricei A, vectorul de indici corespunde lui A privit a ca
un vector coloan a obt inut din asezarea coloanelor una peste alta (adic a A(:)), si
acest vector poate utilizat pentru a indexa A.

In exemplul urm ator se utilizeaz a
find pentru a face zero toate elementele lui A care sunt mai mici dec at elementele
corespunz atoare ale lui B:
>> A = [4 2 16; 12 4 3], B = [12 3 1; 10 -1 7]
A =
4 2 16
12 4 3
B =
12 3 1
10 -1 7
>> f = find(A<B)
f =
1
3
6
>> A(f) = 0
A =
0 0 16
12 4 0

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

Intr-un ciclu imbricat un break iese n ciclul de pe nivelul anterior.


Instruct iunea continue cauzeaz a trecerea controlului la execut ia unui ciclu
for sau while urm atoarei iterat ii, s arind instruct iunile r amase din ciclu. Un exem-
plu trivial este:
for i=1:10
if i < 5, continue, end
disp(i)
end
care aseaz a ntregii de la 5 la 10.
Structura de control cu care ncheiem este instruct iunea switch. Ea const a din
,,switch expresie urmat a de o list a de instruct iuni ,,case expresie instruct iuni,
terminat a opt ional cu ,,otherwise instruct iuni si urmat a de end. Exemplul
urm ator evalueaz a p-norma unui vector x pentru trei valori ale lui p:
switch(p)
case 1
y = sum(abs(x));
case 2
y = sqrt(x
*
x);
case inf
y = max(abs(x));
otherwise
error(p poate fi 1, 2 sau inf.)
end
Funct ia error genereaz a un mesaj de eroare si opreste execut ia curent a. Expresia
ce urmez a dup a case poate o list a de valori delimitate de acolade. Expresia din
switch poate coincide cu orice valoare din list a:
x = input(Enter a real number: )
switch x
case {inf, -inf}
disp(Plus or minus infinity)
case 0
disp(Zero)
otherwise
disp(Nonzero and finite)
end
28 Introducere n MATLAB
Construct ia switch din MATLAB se comport a diferit de cea din C sau C++ :
odat a ce MATLAB a selectat un grup de expresii case si instruct iunile sale au fost
executate, se d a controlul primei instruct iuni de dup a switch, f ar a a nevoie de
instruct iuni break.
1.4.2. Fisiere M
Fisierele M din MATLABsunt echivalentele programelor, funct iilor, subrutinelor
si procedurilor din alte limbaje de programare. Ele ofer a urm atoarele avantaje:
experimentarea algoritmului prin editare, n loc de a retip ari o list a lung a de
comenzi;
nregistrarea permanent a a unui experiment;
construirea de utilitare, care pot utilizate repetat;
schimbul de siere M.
Multe siere M scrise de entuziasti pot obt inute de pe Internet, pornind
de la pagina de web http://www.mathworks.com. Exist a si grupul de stiri
comp.soft-sys.matlab, dedicat MATLAB. (Grupurile de stiri pot citite n
mai multe moduri, inclusiv printr-un web browser.) Se pot obt ine detalii tast and info
la prompterul MATLAB.
Un sier M este un sier text cu extensia (tipul) .m ce cont ine comenzi MA-
TLAB. Ele sunt de dou a tipuri:
Fisiere M de tip script (sau siere de comenzi) nu au nici un argument de
intrare sau iesire si opereaz a asupra variabilelor din spat iul de lucru.
Fisiere M de tip funct ie cont in o linie de denit ie function si pot accepta
argumente de intrare si returna argumente de iesire, iar variabilele lor interne sunt
locale funct iei (nafar a de cazul c and sunt declarate global).
Un sier script permite memorarea unei secvent e de comenzi care sunt utilizate
repetat sau vor necesare ulterior.
Script-ul de mai jos utilizeaz a numerele aleatoare pentru a simula un joc. S a con-
sider am 13 c art i de pic a care sunt bine amestecate. Probabilitatea de a alege o carte
particular a din pachet este 1/13. Act iunea de extragere a unei c art i se implementeaz a
prin generarea unui num ar aleator. Jocul continu a prin punerea c art ii napoi n pachet
si reamestecare p an a c and utilizatorul apas a o tast a diferit a de r sau s-a atins num arul
de repet ari (20).
%JOCCARTI
%Simularea unui joc de carti
1.4. Programarea n MATLAB 29
rand(state,sum(100
*
clock));
for k=1:20
n=ceil(13
*
rand);
fprintf(Cartea extrasa: %3.0f\n,n)
disp( )
disp(Apasati r si Return pentru a continua)
r=input(sau orice litera pentru a termina: ,s);
if r=r, break, end
end
Linia
rand(state,sum(100
*
clock));
reseteaz a de ecare dat a generatorul la o stare diferit a.
Primele dou a linii ale acestui sier script ncep cu simbolul % si deci sunt linii de
comentariu. Ori de c ate ori MATLABnt alneste un % va ignora restul liniei. Aceasta
ne permite s a inser am texte explicative care vor face sierele M mai usor de nt eles.

Incep and cu versiunea 7 se admit blocuri de comentarii, adic a comentarii care s a se


ntind a pe mai multe linii. Ele sunt delimitate prin operatorii %{ si %}. Ei trebuie s a
e singuri pe linie, ca n exemplul:
%{
Comentariu bloc
pe doua linii
%}
Dac a script-ul de mai sus este memorat n sierul joccarti.m, tast and
joccarti se obt ine:
>> joccarti
Cartea extrasa: 7
Apasati r si Return pentru a continua
sau orice litera pentru a termina: r
Cartea extrasa: 3
Apasati r si Return pentru a continua
sau orice litera pentru a termina: a
>>
Fisierele M de tip funct ie permit extinderea limbajului MATLAB prin scrierea de
funct ii proprii care accept a si returneaz a argumente. Ele se pot utiliza n acelasi mod
ca funct iile MATLAB existente, cum ar sin, eye, size, etc.
Sursa MATLAB 1.1 d a o funct ie simpl a care calculeaz a media si abaterea me-
die p atratic a a unei select ii (vector). Acest exemplu ilustreaz a unele facilit at i ale
30 Introducere n MATLAB
Sursa MATLAB 1.1 Funct ia stat
function [med,abmp] = stat(x)
%STAT Media si abaterea medie patratica a unei selectii
% [MED,ABMP] = STAT(X) calculeaza media si abaterea
% medie patratica a selectiei X
n = length(x);
med = sum(x)/n;
abmp = sqrt(sum((x-med).2)/n);
funct iilor. Prima linie ncepe cu cuv antul cheie function urmat de argumentele
de iesire, [med,abmp] si de simbolul =.

In dreapta = urmeaz a numele funct iei,
stat, urmat de argumentele de intrare, n cazul nostru x, ntre paranteze. (

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

a cu metoda lui Newton,


x
k+1
=
1
2
_
x
k
+
a
x
k
_
, x
1
= a,
as and si iterat iile. D am exemple de utilizare:
>> [x,it]=sqrtn(2)
k x_k er. relativa
1: 1.5000000000000000e+000 3.33e-001
2: 1.4166666666666665e+000 5.88e-002
3: 1.4142156862745097e+000 1.73e-003
4: 1.4142135623746899e+000 1.50e-006
5: 1.4142135623730949e+000 1.13e-012
6: 1.4142135623730949e+000 0.00e+000
x =
1.4142
it =
6
>> x=sqrtn(2,1e-4)
k x_k er. relativa
1: 1.5000000000000000e+000 3.33e-001
2: 1.4166666666666665e+000 5.88e-002
3: 1.4142156862745097e+000 1.73e-003
4: 1.4142135623746899e+000 1.50e-006
x =
1.4142
Acest sier M utilizeaz a comanda return, care d a controlul apelantului. Spre
deosebire de alte limbaje de programare, nu este necesar s a se pun a return la
sf arsitul unei funct ii sau al unui script. Funct ia nargin returneaz a num arul de argu-
mente de intrare cu care funct ia a fost apelat a si permite atribuirea de valori implicite
argumentelor nespecicate. Dac a apelul lui sqrtn nu a furnizat o valoare pentru
tol, atunci tol primeste valoarea eps. Num arul de argumente la iesire este retur-
nat de funct ia nargout.
Un sier M de tip funct ie poate cont ine alte funct ii, numite subfunct ii, care pot
s a apar a n orice ordine dup a funct ia principal a (sau primar a). Subfunct iile sunt vizi-
bile numai din funct ia principal a sau din alte subfunct ii. Ele realizeaz a calcule care
32 Introducere n MATLAB
Sursa MATLAB 1.2 Funct ia sqrtn
function [x,iter] = sqrtn(a,tol)
%SQRTN Radical cu metoda lui Newton.
% X = SQRTN(A,TOL) calculeaza radacina patrata a lui
% A prin metoda lui Newton(sau a lui Heron).
% presupunem ca A >= 0.
% TOL este toleranta (implicit EPS).
% [X,ITER] = SQRTN(A,TOL) returneaza numarul de
% iteratii ITER necesare.
if nargin < 2, tol = eps; end
x = a;
iter = 0;
xdiff = inf;
fprintf( k x_k er. relativa\n)
for k=1:50
iter = iter + 1;
xold = x;
x = (x + a/x)/2;
xdiff = abs(x-xold)/abs(x);
fprintf(%2.0f: %20.16e %9.2e\, iter, x, xdiff)
if xdiff <= tol, return, end
end
error(Nu s-a atins precizia dupa 50 de iteratii.)
trebuie separate de funct ia principal a, dar nu sunt necesare n alte siere M, sau su-
prancarc a funct ii cu acelasi nume (subfunct iile au prioritate mai mare). Help-ul pen-
tru o subfunct ie se poate specica pun and numele funct iei urmat de / si numele
subfunct iei.
Pentru a crea si edita siere M avem dou a posibilit at i. Putem utiliza orice editor
pentru siere ASCII sau putem utiliza MATLAB Editor/Debugger. Sub Windows el
se apeleaz a prin comanda edit sau din opt iunile de meniu File-New sau File-Open.
Sub Unix se apeleaz a doar prin comanda edit. Editorul/debugger-ul MATLAB are
diverse facilt at i care ajut a utilizatorul, cum ar indentarea automat a a ciclurilor si
structurilor de control, evident ierea sintaxei prin culori, vericarea perechilor de pa-
ranteze si apostrofuri.
Cele mai multe funct ii MATLAB sunt siere M p astrate pe disc, dar exist a si
funct ii predenite cont inute n interpretorul MATLAB. Calea MATLAB (MATLAB
1.4. Programarea n MATLAB 33
path) este o list a de directori care specic a unde caut a MATLABsierele M. Un sier
M este disponibil numai dac a este pe calea MATLAB. Drumul poate setat si modi-
cat prin comenzile path si addpath, sau prin utilitarul (fereastra) path Browser,
care se apeleaz a din opt iunea de meniu File-Set Path sau tast and pathtool. Un
script (dar nu si o funct ie) care nu este pe calea de c autare se poate executa cu run
urmat de calea complet a p an a la sierul M. Un sier M se poate asa pe ecran cu
comanda type.
Un aspect important al MATLAB este dualitatea comenzi-funct ii.

Inafar a de
forma clasic a, nume, urmat de argumente ntre paranteze, funct iile pot apelate si
sub forma nume, urmat de argumente separate prin spat ii. MATLAB presupune n
al doilea caz c a argumentele sunt siruri de caractere. De exemplu apelurile format
long si format(long) sunt echivalente.
MATLAB 7 permite denirea de funct ii imbricate , adic a funct ii cont inute n
corpul altor funct ii.

In exemplul care urmeaz a, funct ia F2 este imbricat a n funct ia
F1:
function x = F1(p1,p2)
...
F2(p2)
function y = F2(p3)
...
end
...
end
Ca orice alt a funct ie, o funct ie imbricat a are propriul s au spat iu de lucru n care
se memoreaz a variabilele pe care le utilizeaz a. Ea are de asemenea acces la spat iul
de lucru al tuturor funct iilor n care este imbricat a. Astfel, de exemplu, o variabil a
care are o valoare atribuit a ei de funct ia exterioar a poate citit a si modicat a de o
funct ie imbricat a la orice nivel n funct ia exterioar a. Variabilele create ntr-o funct ie
imbricat a pot citite sau modicate n orice funct ie care cont ine funct ia imbricat a.
1.4.3. Argumente funct ie

In multe probleme, cum ar integrarea numeric a, rezolvarea unor ecuat ii opera-


toriale, minimizarea unei funct ii, este nevoie ca o funct ie s a e transmis a ca argument
unei alte funct ii. Aceasta se poate realiza n mai multe feluri, depinz and de modul n
care funct ia apelat a a fost scris a. Vom ilustra aceasta cu funct ia ezplot, care re-
prezint a grac funct ia f(x) peste domeniul implicit [2, 2]. Un prim mod este
transmiterea funct iei printr-o construct ie numit a function handle. Acesta este un tip
de date MATLAB care cont ine toate informat iile necesare pentru a evalua o funct ie.
Un function handle poate creat pun and caracterul @ n fat a numelui de funct ie.
34 Introducere n MATLAB
Astfel, dac a fun este un sier M de tip funct ie de forma cerut a de ezplot, atunci
putem tasta
ezplot(@fun)
fun poate numele unei funct ii predenite:
ezplot(@sin)
Numele unei funct ii poate transmis ca un sir de caractere:
ezplot(exp)
Function handle a fost introdus ncep and cu MATLAB 6 si este de preferat utiliz arii
sirurilor, ind mai ecient si mai versatil. Totusi, ocazional se pot nt alni funct ii care
s a accepte argumente de tip funct ie sub form a de sir, dar nu sub form a de function
handle. Conversia dintr-o form a n alta se poate face cu func2str si str2func
(vezi help function handle). Mai exist a dou a moduri de a transmite o funct ie
lui ezplot: ca expresie ntre apostrofuri,
ezplot(x2-1), ezplot(1/(1+x2))
sau ca obiect inline
ezplot(inline(exp(x)-1))
Un obiect inline este o funct ie denit a printr-un sir si care poate atribuit a unei
variabile si apoi evaluat a:
>> f=inline(exp(x)-1), f(2)
f =
Inline function:
f(x) = exp(x)-1
ans =
6.3891
MATLAB determin a si ordoneaz a argumentele unei funct ii inline. Dac a acest lu-
cru nu este satisf ac ator, argumentele se pot deni si ordona explicit, transmit and lui
inline parametrii suplimentari:
>> f = inline(log(a
*
x)/(1+y2))
f =
Inline function:
f(a,x,y) = log(a
*
x)/(1+y2)
>> f = inline(log(a
*
x)/(1+y2),x,y,a)
f =
Inline function:
f(x,y,a) = log(a
*
x)/(1+y2)

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

In anumite situat ii o funct ie trebuie s a accepte sau s a returneze un num ar va-


riabil, posibil nelimitat, de argumente. Aceasta se poate realiza utiliz and funct iile
varargin si varargout. S a presupunem c a dorim s a scriem o funct ie companb
1.4. Programarea n MATLAB 37
ce construieste matricea companion pe blocuri, de dimensiune mn mn, a matrice-
lelor n n A
1
, A
2
, . . . , A
m
:
C =
_

_
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.

In MATLAB 7 funct ia error se poate apela cu un mesaj de eroare cu format (ca


n sprintf), dup a cum ne arat a exemplul urm ator:
error(File %s not found\n, filename)
sau cu un identicator de mesaj
error(MATLAB:noSuchFile, File %s not found\n,...
filename)
Sursa ultimei erori se poate identica cu lasterr, care returneaz a ultimul mesaj
de eroare sau cu lasterror, care returneaz a o structur a ce cont ine mesajul de
eroare si identicatorul acestuia.
Exemplul urm ator determin a cauza erorii la nmult irea a dou a matrice utiliz and
try-catch si lasterr:
function matrixMultiply2(A, B)
try
A
*
B
catch
errmsg = lasterr;
if(strfind(errmsg, Inner matrix dimensions))
disp(
**
Wrong dimensions for matrix multiply)
else
if(strfind(errmsg, not defined for values of class))
disp(
**
Both arguments must be double matrices)
end
end
end
Dac a dimensiunea matricelor este ilegal a, se asaz a primul mesaj:
>> A = [1 2 3; 6 7 2; 0 1 5];
>> B = [9 5 6; 0 4 9];
>> matrixMultiply2(A, B)
**
Wrong dimensions for matrix multiply
iar dac a funct ia este apelat a cu un argument tablou de celule, al doilea mesaj:
>> C = {9 5 6; 0 4 9};
>> matrixMultiply2(A, C)
**
Both arguments must be double matrices
Pentru detalii a se vedea doc try si [13].
46 Introducere n MATLAB
1.5. Toolbox-urile Symbolic
Toolbox-urile Symbolic Math ncorporeaz a facilit at i de calcul simbolic n me-
diul numeric al MATLAB. Toolbox-urile se bazeaz a pe nucleul Maple

. 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
_

g dx se poate realiza cu comanda int(g,x,-pi,pi). Rezultatul


nu este foarte elegant. Vom calcula acum integrala
_

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.

In exemplul urm ator


>> digits(32)
>> clear, phi1=vpa((1+sqrt(5))/2)
phi1 =
1.6180339887498949025257388711907
>> phi2=vpa((1+sqrt(5))/2), diff=phi1-phi2
phi2 =
1.6180339887498948482045868343656
diff =
.543211520368251e-16
1.5. Toolbox-urile Symbolic 53
discrepant a dintre phi1 si phi2 se explic a prin aceea c a prima atribuire face calcu-
lele n dubl a precizie si converteste rezultatul n vpa, iar a doua utilizeaz a sirul si face
toate calculele n vpa.
Pentru detalii suplimentare asupra Symbolic Math Toolbox trimitem cititorul la
[11].
Probleme
Problema 1.1. Calculat i ecient suma
S
n
=
n

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 continuare vom reprezenta gracul restului Taylor de ordinul al doilea |1 + h +


h
2
/2 exp(h)| al lui exp(h) pentru h = 1, 10
1
, 10
2
, 10
3
, 10
4
. C and h este
mic, aceast a cantitate se comport a ca un multiplu al lui h
3
si deci pe o scar a log-log
valorile vor situate pe o dreapt a cu panta 3. Vom verica aceasta reprezent and restul
si dreapta de referint a cu panta prev azut a cu linie punctat a. Gracul apare n gura
2.3
h=10.[0:-1:-4];
taylerr=abs((1+h+h.2/2)-exp(h));
loglog(h,taylerr,-,h,h.3,--)
xlabel(h), ylabel(|eroare|)
title(Eroarea in aproximarea Taylor de grad 2 a lui exp(h))
box off

In acest exemplu s-au utilizat comenzile title, xlabel si ylabel. Aceste


funct ii aseaz a sirul parametru de intrare deasupra imaginii, axei x si respectiv axei
y. Comanda box off elimin a caseta de pe marginea gracului curent, l as and doar
axele de coordonate. Dac a loglog primeste si valori nepozitive, MATLAB va da
un avertisment si va asa doar datele pozitive. Funct iile nrudite semilogx si
semilogy, scaleaz a doar una din axe.
2.1. Grace bidimensionale 59
10
4
10
3
10
2
10
1
10
0
10
14
10
12
10
10
10
8
10
6
10
4
10
2
10
0
h
|
e
r
o
a
r
e
|
Eroarea in aproximarea Taylor de gradul 2 a lui exp(h)
Figura 2.3: Exemplu cu loglog
Dac a o comand a de asare este urmat a de alta, atunci noua imagine o va nlocui
pe cea veche sau se va suprapune peste ea, depinz and de starea hold curent a. Co-
manda hold on face ca toate imaginile care urmeaz a s a se suprapun a peste cea
curent a, n timp ce hold off ne spune c a ecare imagine nou a o va nlocui pe cea
precedent a. Starea implicit a corespunde lui hold off.
Se pot reprezenta curbe n coordonate polare cu ajutorul comenzii
polar(t,r), unde t este unghiul polar, iar r este raza polar a. Se poate fo-
losi si un parametru suplimentar s, cu aceeasi semnicat ie ca la plot. Gracul unei
curbe n coordonate polare, numit a cardioid a, si care are ecuat ia
r = a(1 + cos t), t [0, 2],
unde a este o constant a real a dat a, apare n gura 2.4 si se obt ine cu secvent a:
t=0:pi/50:2
*
pi;
a=2; r=a
*
(1+cos(t));
polar(t,r)
title(cardioida)
Funct ia fill lucreaz a la fel ca plot. Comanda fill(x,y,c) reprezint a po-
ligonul cu v arfurile x(i), y(i) n culoarea c. Punctele se iau n ordine si ultimul
se uneste cu primul. Culoarea c se poate da si sub forma unui triplet RGB, [r g
b]. Elementele r, g si b, care trebuie s a e scalari din [0,1], determin a nivelul de
60 Grac a n MATLAB
1
2
3
4
30
210
60
240
90
270
120
300
150
330
180 0
cardioida
Figura 2.4: Grac n coordonate polare cardioid a
rosu, verde si albastru din culoare. Astfel, fill(x,y,[0 1 0]) umple poligonul
cu culoarea verde, iar fill(x,y,[1 0 1]) cu magenta. D and proport ii egale de
rosu, verde si albastru se obt in nuant e de gri care variaz a de la negru ([0 0 0]) la
alb ([1 1 1]). Exemplul urm ator deseneaz a un heptagon regulat n gri:
n=7;
t=2
*
(0:n-1)
*
pi/n;
fill(cos(t),sin(t),[0.7,0.7,0.7])
axis square
Rezultatul apare n gura 2.5.
Comanda clf sterge gura curent a, iar close o nchide. Este posibil s a avem
mai multe ferestre guri pe ecran. Cel mai simplu mod de a crea o nou a gur a este
comanda figure. A n-a fereastr a gur a (unde n apare n bara de titlu) poate
f acut a gur a curent a cu comanda figure(n). Comanda close all va nchide
toate ferestrele guri.
De notat c a multe atribute ale unei guri pot modicate interactiv, dup a asarea
gurii, utiliz and meniul Tool al ferestrei sau bara de instrumente (toolbar).

In particu-
lar, este posibil s a se fac a zoom pe o regiune particular a cu ajutorul mouse-ului (vezi
help zoom).
2.1. Grace bidimensionale 61
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
Figura 2.5: Exemplu de utilizare fill
axis([xmin xmax ymin ymax]) Seteaz a limitele axelor x si y
axis auto Returneaz a limitele implicite
axis equal Egaleaz a unit at ile pe axele de coordonate
axis off Elimin a axele
axis square Face caseta axelor p atrat a (cubic a)
axis tight Seteaz a limitele axelor egale cu limitele
datelor
xlim([xmin xmax]) Seteaz a limitele pe axa x
ylim([ymin,ymax]) Seteaz a limitele pe axa y
Tabela 2.2: Unele comenzi pentru controlul axelor
62 Grac a n MATLAB
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
Figura 2.6: Utilizarea axis off
2.1.2. Axe si adnotarea
Diversele aspecte ale unui grac pot controlate cu comanda axis. Unele
opt iuni se dau n tabela 2.2. Axele pot eliminate cu axis off. Raportul dintre
unitatea pe x si cea pe y (aspect ratio) poate f acut egal cu unu, astfel ca cercurile
s a nu par a elipse, cu axis equal. Comanda axis square face caseta axelor
p atrat a.
Gracul din st anga gurii 2.6 a fost obt inut cu
plot(fft(eye(17))), axis equal, axis square
Deoarece gura este situat a n interiorul cercului unitate, axele sunt foarte necesare.
Gracul din dreapta gurii 2.6 a fost generat cu
plot(fft(eye(17))), axis equal, axis off
Comanda axis([xmin xmax ymin ymax]) seteaz a limitele pentru axa x
si respectiv y. Pentru a reveni la set arile implicite, pe care MATLABle alege automat
n funct ie de datele care urmeaz a a reprezentate, se utilizeaz a axis auto. Dac a
se doreste ca una dintre limite s a e aleas a automat de c atre MATLAB, ea se ia -inf
sau inf; de exemplu, axis([-1,1,-inf,0]. Limitele pe axa x sau y se pot seta
individual cu cu xlim([xmin xmax]) si ylim([ymin ymax]).
Exemplul urm ator reprezint a funct ia 1/(x1)
2
+3/(x2)
2
pe intervalul [0,3]:
x = linspace(0,3,500);
plot(x,1./(x-1).2+3./(x-2).2)
grid on
Comanda grid on produce o gril a de linii orizontale si verticale care pornesc de la
diviziunile axelor. Rezultatul se poate vedea n gura 2.7(a). Datorit a singularit at ilor
din x = 1, 2 gracul nu d a prea mult a informat ie. Totusi, execut and comanda
2.1. Grace bidimensionale 63
ylim([0,50])
se obt ine gura 2.7(b), care se focalizeaz a asupra p art ii interesante a primului grac.
0 0.5 1 1.5 2 2.5 3
0
1
2
3
4
5
6
7
8
x 10
5
(a)
0 0.5 1 1.5 2 2.5 3
0
5
10
15
20
25
30
35
40
45
50
(b)
Figura 2.7: Utilizarea lui ylim (dreapta) pentru a schimba limitele automate pe axa
y (st anga).
Exemplul urm ator reprezint a epicicloida
x(t) = (a +b) cos(t) b cos((a/b + 1)t)
y(t) = (a +b) sin(t) b sin((a/b + 1)t)
_
0 t 10,
pentru a = 12 si b = 5.
a = 12; b=5;
t=0:0.05:10
*
pi;
x = (a+b)
*
cos(t)-b
*
cos((a/b+1)
*
t);
y =(a+b)
*
sin(t)-b
*
sin((a/b+1)
*
t);
plot(x,y)
axis equal
axis([-25 25 -25 25])
grid on
title(epicicloida: a=12, b=5)
xlabel(x(t)),
ylabel(y(t))
Rezultatul apare n gura 2.8. Limitele din axis au fost alese astfel ca s a r am an a un
oarecare spat iu n jurul epicicloidei.
Comanda legend(string1,string2,...,stringn,pp) va
atasa unui grac o legend a care pune stringi dup a informat ia cu-
loare/marcaj/stil pentru gracul corespunz ator. Parametrul opt ional pp indic a pozit ia
legendei (vezi help legend). Exemplul care urmeaz a adaug a o legend a unui gra-
c al sinusului si cosinusului (gura 2.9):
64 Grac a n MATLAB
20 10 0 10 20
25
20
15
10
5
0
5
10
15
20
25
Epicicloid: a = 12, b = 5
x(t)
y
(
t
)
Figura 2.8: Epicicloid a
x = -pi:pi/20:pi;
plot(x,cos(x),-ro,x,sin(x),-.b)
h = legend(cos,sin,2);
4 3 2 1 0 1 2 3 4
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
cos
sin
Figura 2.9: Grac cu legend a
Textele se pot include n grace cu ajutorul comenzii text(x, y, s), unde x
si y sunt coordonatele textului, iar s este un sir de caractere sau o variabil a de tip sir.

Incep and cu versiunea 5, MATLAB permite introducerea n interiorul parametrului


s a unor construct ii T
E
X, de exemplu pentru indice, pentru exponent, sau litere
grecesti ( \alpha, \beta, \gamma, etc.). De asemenea, anumite atribute ale textului,
cum ar tipul font-ului, dimensiunea si altele sunt selectabile ncep and cu versiunea
4. Comenzile
plot(0:pi/20:2
*
pi,sin(0:pi/20:2
*
pi),pi,0,o)
text(pi,0, \leftarrow sin(\pi),FontSize,18)
2.1. Grace bidimensionale 65
0 1 2 3 4 5 6 7
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
sin()
Figura 2.10: Exemplu de utilizare text
adnoteaz a punctul de coordonate (, 0) cu sirul sin(). Rezultatul apare n gura
2.10. Aceste facilit at i se pot utiliza si n titluri, legende sau etichete ale axelor, care
sunt obiecte de tip text.

Incep and cu MATLAB 7 primitivele text suport a un subset
puternic L
A
T
E
X. Proprietatea corespunz atoare se numeste Interpreter si poate
avea valorile TeX, LaTeX sau none. Pentru un exemplu de utilizare a macrourilor
L
A
T
E
X a se vedea script-ul graphLegendre.m, pagina ??.
2.1.3. Mai multe grace pe aceeasi gur a
Funct ia MATLAB subplot permite plasarea mai multor imagini pe o gril a n
aceeasi gur a. Utiliz and subplot(mnp), sau echivalent, subplot(m,n,p), fe-
reastra gurii se mparte ntr-un tablou mn de regiuni, ecare av and propriile ei axe.
Comanda de desenare curent a se va aplica celei de-a p-a dintre aceste regiuni, unde
contorul variaz a de-a lungul primei linii, apoi de-a lungul celei de-a doua s.a.m.d. De
exemplu, subplot(425) mparte fereastra gurii ntr-o matrice 4 2 de regiuni
si ne spune c a toate comenzile de desenare se vor aplica celei de-a cincea regiuni,
adic a primei regiuni din al treilea r and. Dac a se execut a mai t arziu subplot(427),
atunci pozit ia (4,1) devine activ a. Vom da n continuare mai multe exemple.
Pentru cei nefamiliarizat i cu graca MATLAB, comanda de reprezentare grac a
a unei funct ii, fplot, este foarte util a. Ea alege n mod adaptiv un num ar sucient
de puncte pentru a produce un grac sucient de precis. Exemplul urm ator genereaz a
gracele din gura 2.11.
subplot(221), fplot(exp(sqrt(x)
*
sin(12
*
x)),[0 2
*
pi])
subplot(222), fplot(sin(round(x)),[0,10],--)
66 Grac a n MATLAB
0 2 4 6
0
2
4
6
8
10
12
0 2 4 6 8 10
1
0.5
0
0.5
1
0.2 0.4 0.6 0.8 1
15
10
5
0
5
10
15
20
0 5 10 15
1
0.5
0
0.5
1
Figura 2.11: Exemple cu subplot si fplot
subplot(223), fplot(cos(30
*
x)/x,[0.01 1 -15 20],-.)
subplot(224)
fplot([sin(x),cos(2
*
x),1/(1+x)],[0 5
*
pi -1.5 -1.5 1.5])

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

grac simplu x-y-z


contour

contur
contourf

contur plin
contour3 contur 3D
mesh

reprezentare wire-frame
meshc

reprezentare wire-frame plus contururi


meshz suprafat a wire-frame cu cortin a
surf

suprafat a plin a
surfc

suprafat a plin a plus contururi


waterfall wire-frame unidirect ional
bar3 bare 3D
bar3h bare 3D orizontale
pie3 grace sector 3D
fill3 poligon umplut tridimensional
comet3 curb a 3D animated a
scatter3 nor de puncte 3D
Aceste funct ii fun au corespondent ezfun
Tabela 2.4: Funct ii grace 3D
2.3. Salvarea si imprimarea gracelor 75
0
20
40
60
80
0
20
40
60
80
10
5
0
5
10
Figura 2.19: Grac surfc al unei matrice ce cont ine NaN-uri.
2.3. Salvarea si imprimarea gracelor
Comanda print permite listarea unui grac la imprimant a sau salvarea lui pe
disc ntr-un format grac sau sub form a de sier M. Formatul ei este:
print -dperiferic -optiuni numefisier
Ea are mai multe opt iuni, care pot vizualizate cu help print. Dintre tipurile de
periferice admise amintim:
- dps - Postscript pentru imprimante alb-negru;
- dpsc - Postscript pentru imprimante color;
- dps2 - Postscript nivelul 2 pentru imprimante alb-negru;
- dpsc2 - PostScript nivelul 2 pentru imprimante color;
- deps - Encapsulated PostScript pentru imprimante alb-negru;
- depsc - Encapsulated PostScript pentru imprimante color;
- deps2 - Encapsulated PostScript nivelul 2 pentru imprimante alb-negru;
- depsc2 - Encapsulated PostScript nivelul 2 pentru imprimante color;
76 Grac a n MATLAB
- djpeg - <nn> - imagine JPEG la nivelul de calitate nn (implicit nn=75).
Dac a imprimanta dumneavoastr a este setat a corespunz ator, comanda print va
trimite cont inutul gurii curente spre ea. Comanda
print -deps2 myfig.eps
creaz a un sier Postscript ncapsulat alb si negru, nivelul 2, numit myfig.eps, care
poate listat pe o imprimant a PostScript sau inclus ntr-un document. Acest sier
poate ncorporat ntr-un document L
A
T
E
X, asa cum se schit eaz a mai jos:
\documentclass{article}
\usepackage[dvips]{graphics}
...
\begin{document}
...
\begin{figure}
\begin{center}
\includegraphics[width=8cm]{myfig.eps}
\end{center}
\caption{...}
\end{figure}
...
\end{document}
Comanda print se poate utiliza si n form a funct ional a (vezi sect iunea 1.4.2,
pagina 33 pentru dualitatea comenzi/funct ii). Pentru a ilustra utilitatea formei
funct ionale, exemplul urm ator genereaz a o secvent a de cinci guri si le salveaz a n
sierele fig1.eps, . . . , fig5.eps:
x = linspace(0,2
*
pi,50);
for i=1:5
plot(x,sin(i
*
x))
print(-deps2,[fig,int2str(i),.eps])
end
Al doilea argument al comenzii print este format prin concatenare, utiliz and
funct ia int2str, care converteste un ntreg n sir. Astfel, de exemplu, pentru i=1,
instruct iunea print este echivalent a cu print(-deps2, fig1.eps).
Comanda saveas salveaz a o gur a ntr-un sier care apoi poate nc arcat de
c atre MATLAB. De exemplu,
saveas(gcf,myfig,fig)
salveaz a gura curent a n format binar FIG, care poate nc arcat n MATLAB cu
comanda open(myfig.fig).
Se pot salva si imprima guri din meniul File al ferestrei gurii.
2.4. Facilit at i grace noi n MATLAB 7 77
2.4. Facilit ati grace noi n MATLAB 7

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

In cazul unui sistem subdeterminat putem e s a nu avem nici o solut ie e s a avem


o innitate.

In ultimul caz, A\b produce o solut ie de baz a cu cel mult k elemente
nenule, unde k este rangul lui A.

In general aceast a solut ie nu are norma euclidian a
minim a; solut ia cu norma minim a se poate calcula cu pinv(A)
*
b. Dac a sistemul
nu are nici o solut ie (este incompatibil), atunci A\b este o solut ie n sensul celor
mai mici p atrate. Exemplul urm ator ilustreaz a diferent a dintre solut ia obt inut a cu \ si
pinv:
>> A = [1 1 1; 1 1 -1], b=[3; 1]
A =
1 1 1
1 1 -1
b =
3
1
>> x=A\b; y = pinv(A)
*
b;
>> [x y]
ans =
2.0000 1.0000
0 1.0000
1.0000 1.0000
>> [norm(x) norm(y)]
ans =
2.2361 1.7321
MATLAB foloseste factorizarea QR cu pivotare pe coloan a. Fie exemplul
>> R=fix(10
*
rand(2,4))
R =
9 6 8 4
2 4 7 0
>> b=fix(10
*
rand(2,1))
b =
8
4
Sistemul are 2 ecuat ii si 4 necunoscute. Deoarece matricea coecient ilor cont ine
ntregi mici, este recomandabil s a as am solut ia n format rat ional. Solut ia particular a
se obt ine cu:
82 Algebr a liniar a n MATLAB
>> format rat
>> p=R\b
p =
24/47
0
20/47
0
O component a nenul a este p(2), deoarece R(:,2) este coloana cu cea mai mare
norm a. Cealalt a este p(4), deoarece R(:,4) r am ane dominant a dup a eliminarea
lui R(:,2).
Solut ia complet a a unui sistem supradeterminat poate caracterizat a prin
ad augarea unui vector arbitrar din spat iul nul al matricei sistemului, care poate
g asit cu funct ia null cu o opt iune care cere o baz a rat ional a
>> Z=null(R,r)
Z =
5/12 -2/3
-47/24 1/3
1 0
0 1
Se poate verica c a R
*
Z este zero si orice vector de forma x=p+Z
*
q, unde q este un
vector arbitrar, satisface R
*
x=b.
3.1.4. Factorizarea LU si Cholesky
Funct ia lu calculeaz a o factorizare LUP cu pivotare part ial a. Apelul
[L,U,P]=lu(A) returneaz a factorii triunghiulari si matricea de permutare. Forma
[L,U]=lu(A) returneaz a L = P
T
L, deci L este o matrice triunghiular a cu liniile
permutate.
>> format short g
>> A = gallery(fiedler,3), [L,U]=lu(A)
A =
0 1 2
1 0 1
2 1 0
L =
0 1 0
0.5 -0.5 1
1 0 0
U =
2 1 0
0 1 2
0 0 2
3.1. Rezolvarea sistemelor de ecuat ii liniare n MATLAB 83
Desi factorizarea LU este denit a si pentru matrice dreptunghiulare, lu accept a la
intrare numai matrice p atratice.
Rezolvarea sistemului Ax=b cu x=A\b cu A p atratic a este echivalent a cu
secvent a MATLAB:
[L,U] = lu(A); x = U\(L\b);
Determinantul si inversa se calculeaz a de asemenea prin factorizare LU:
det(A)=det(L)
*
det(U)=+-prod(diag(U))
inv(A)=inv(U)
*
inv(L)
Comanda chol(A), unde A este hermitian a si pozitiv denit a calculeaz a R ast-
fel nc at A = R

R. Factorizarea Cholesky permite nlocuirea sistemului A


*
x=b
cu R
*
R
*
x=b. Deoarece operatorul \ recunoaste sisteme triunghiulare, sistemul se
poate rezolva rapid cu x=R\(R\R\b). D am un exemplu de factorizare Cholesky:
>> A=pascal(4)
A =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>> R=chol(A)
R =
1 1 1 1
0 1 2 3
0 0 1 3
0 0 0 1
Funct ia chol examineaz a doar partea triunghiular a superior a lui A. Dac a A nu
este pozitiv denit a se d a un mesaj de eroare.

In [R,p]=chol(A), dac a p=0 fac-
torizarea s-a terminat cu succes, iar n caz de esec p este un num ar natural nenul.
Pentru detalii a se vedea help chol sau doc chol.
Funct ia cholupdate modic a factorizarea Cholesky atunci c and matricea ori-
ginal a a fost afectat a de o perturbat ie de rang 1 (adic a cu o matrice de forma +xx

sau xx

, unde x este un vector).


3.1.5. Factorizarea QR

In MATLAB exist a patru variante de factorizare QR complet a sau economic a


si cu sau f ar a permutare de coloane.
Factorizarea complet a QR a unei matrice C de dimensiune mn, m > n produce
o matrice p atratic a m m Q, ortogonal a si o matrice superior triunghiular a R de
dimensiune m n. Forma de apel este [Q,R]=qr(C).

In multe cazuri ultimele
m n coloane nu sunt necesare, deoarece ele sunt nmult ite cu zerouri n port iunea
de jos a lui R. De exemplu pentru matricea C de mai jos:
84 Algebr a liniar a n MATLAB
C =
1 1
1 2
1 3
>> [Q,R]=qr(C)
Q =
-0.5774 0.7071 0.4082
-0.5774 0.0000 -0.8165
-0.5774 -0.7071 0.4082
R =
-1.7321 -3.4641
0 -1.4142
0 0
Factorizarea economic a QR produce o matrice rectangular a m n Q cu coloane
ortonormale si o matrice p atratic a superior triunghiular a R, de dimensiune n n.
Exemplu
>> [Q,R]=qr(C,0)
Q =
-0.5774 0.7071
-0.5774 0.0000
-0.5774 -0.7071
R =
-1.7321 -3.4641
0 -1.4142
Pentru matrice dreptunghiulare mari, cu m n, c astigul de timp si memorie poate
important.

In contrast cu factorizarea LU, factorizarea QR nu necesit a pivotare sau per-


mut ari. O factorizare QR cu pivotare pe coloane are forma AP = QR, unde P este o
matrice de permutare. Strategia de pivotare utilizat a produce un factor Rale c arui ele-
mente diagonale veric a |r
11
| |r
22
| |r
nn
|. Pivotarea pe coloane este util a
pentru detectarea singularit at ilor sau decient elor de rang; detectarea se realizeaz a
prin examinarea elementelor diagonale. Dac a A este apropiat a de o matrice de rang
r < n, atunci ultimele n r elemente ale lui R vor avea ordinul eps
*
norm(A).
Pivotarea se indic a printr-un al treilea parametru de iesire, care este o matrice de
permutare:
>> [Q,R,P]=qr(C)
Q =
-0.2673 0.8729 0.4082
-0.5345 0.2182 -0.8165
-0.8018 -0.4364 0.4082
3.1. Rezolvarea sistemelor de ecuat ii liniare n MATLAB 85
R =
-3.7417 -1.6036
0 0.6547
0 0
P =
0 1
1 0
Dac a combin am pivotarea cu forma economic a, n locul matricei de permutare se
returneaz a un vector:
>> [Q,R,P]=qr(C,0)
Q =
-0.2673 0.8729
-0.5345 0.2182
-0.8018 -0.4364
R =
-3.7417 -1.6036
0 0.6547
P =
2 1
Funct iile qrdelete, qrinsert si qrupdate modic a factorizarea QR c and se
sterge sau se insereaz a o coloan a din matricea original a sau c and matricea este afec-
tat a de o perturbat ie de rang 1.
S a consider am acum un sistem Ax = b, p atratic, unde A este o matrice p atratic a
de ordinul n de forma:
A = (a
i,j
), a
i,j
=
_
_
_
1, pentru i = j sau j = n;
1, pentru i > j;
0, n rest.
De exemplu, pentru n = 6,
A =
_

_
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

Inmult irea si mp art irea polinoamelor se realizeaz a cu conv si deconv. Sintaxa


lui deconv este [q,r]=deconv(g,h), unde g este demp art itul, h mp art itorul,
q c atul si r restul.

In exemplul urm ator vom mp art i x
2
2xx+2 la x2, obt in and
c atul x
2
1 si restul 0. Polinomul init ial se va obt ine apoi cu conv.
>> g = [1 -2 -1 2]; h=[1 -2];
>> [q,r] = deconv(g,h)
q =
1 0 -1
r =
0 0 0 0
>> conv(h,q)+r
ans =
1 -2 -1 2
S a trat am acum problema potrivirii datelor. S a presupunem c a avem m observat ii
(y
i
) m asurate n valorile specicate (t
i
):
y
i
= y(t
i
), i = 1, m.
Modelul nostru este o combinat ie de n funct ii de baz a (
i
)
y(t) c
1

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)).

Incercarea de a calcula o solut ie cu x=inv(A


*
A)
*
A
*
b
esueaz a dac a A
*
A este singular a. Iat a un exemplu care ilustreaz a diversele solut ii.
Matricea
A=[1,2,3; 4,5,6; 7,8,9; 10,11,12];
este decient a de rang. Dac a b=A(:,2), atunci o solut ie evident a a lui A
*
x=b este
x=[0,1,0]. Nici una dintre abord arile de mai sus nu calculeaz a pe x. Operatorul
\ ne d a
>> x=A\b
Warning: Rank deficient, rank = 2 tol = 1.4594e-014.
x =
0.5000
0
0.5000
Aceast a solut ie are dou a componente nenule. Varianta cu pseudoinvers a ne d a
>> y=pinv(A)
*
b
y =
0.3333
0.3333
0.3333
Se observ a ca norm(y)=0.5774<norm(x)=0.7071. A treia variant a esueaz a
complet:
>> z=inv(A
*
A)
*
A
*
b
Warning: Matrix is singular to working precision.
z =
Inf
Inf
Inf
Abordarea bazat a pe ecuat ii normale are mai multe dezavantaje. Ecuat iile nor-
male sunt ntotdeauna mai prost condit ionate dec at sistemul supradeterminat init ial.
92 Algebr a liniar a n MATLAB
Num arul de condit ionare se ridic a de fapt la p atrat
1
:
cond(A
T
A) = cond(A)
2
.

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
+

3.2. Polinoame si potrivirea datelor n MATLAB 93


Solut ia n sensul celor mai mici p a trate se poate g asi cu ajutorul operatorului \:
c=E\y
c =
0.4760
0.3413
Urmeaz a reprezentarea grac a pe puncte echidistante, completat a cu datele originale:
T=[0:0.1:2.5];
Y=[ones(size(T)),exp(-T)]
*
c;
plot(T,Y,-,t,y,o)
xlabel(t); ylabel(y);
Se poate vedea c a Ec = y, dar diferent a este minim a n sensul celor mai mici p atrate
(gura 3.1). Dac a matricea A este decient a de rang (adic a nu are coloane liniar
0 0.5 1 1.5 2 2.5
0.5
0.55
0.6
0.65
0.7
0.75
0.8
0.85
0.9
t
y
Figura 3.1: Ilustrare a potrivirii datelor
independente), atunci solut ia n sensul celor mai mici p atrate a sistemului Ax = b nu
este unic a.

In acest caz operatorul \ d a un mesaj de avertizare si produce o solut ie de
baz a cu cel mai mic num ar posibil de elemente nenule.
Al doilea exemplu are ca date de intrare rezultatele de recens am antelor obt inute
de U. S. Census pentru anii 19002000, din zece n zece ani, exprimate n milioane
de oameni:
94 Algebr a liniar a n MATLAB
t y
1900 75.995
1910 91.972
1920 105.711
1930 123.203
1940 131.669
1950 150.697
1960 179.323
1970 203.212
1980 226.505
1990 249.633
2000 281.422
Se doreste modelarea cresterii populat iei printr-un polinom de gradul al treilea
y(t) = c
1
t
3
+c
2
t
2
+c
3
t +c
4
si predict ia populat iei din 2010.
Dac a ncerc am s a calcul am coecient ii cu c=polyfit(t,y,3), matricea sis-
temului va prost condit ionat a, coloanele ei vor aproape liniar dependente si vom
obt ine mesajul
Warning: Polynomial is badly conditioned. Remove repeated
data points or try centering and scaling as
described in HELP POLYFIT.
Vom scala datele de intrare:
s = (t s)/50.
Noua variabil a este n intervalul [1, 1], iar sistemul va bine condit ionat. Script-ul
MATLAB 3.1, census.m, calculeaz a coecient ii, reprezint a datele si polinomul si
estimeaz a populat ia n 2010. Estimat ia apare si n clar si marcat a cu un asterisc (vezi
gura 3.2).
3.3. Valori si vectori proprii n MATLAB
MATLAButilizeaz a rutine LAPACKpentru a calcula valori si vectori proprii. Va-
lorile proprii ale unei matrice se calculeaz a cu funct ia eig: e=eig(A)pune valorile
proprii ale lui A n vectorul e. Forma [V,D]=eig(A), unde A este matrice p atratic a
de ordinul n, returneaz a n coloanele lui V n vectori proprii ai lui A si n matricea di-
agonal a D valorile proprii ale lui A. Are loc relat ia A
*
V=V
*
D. Nu orice matrice are
n vectori proprii liniari independent i, deci matricea V returnat a de eig poate sin-
gular a (sau datorit a erorilor de rotunjire nesingular a, dar foarte prost condit ionat a).
Matricea din exemplul urm ator are o valoare proprie dubl a 1, dar numai un vector
propriu liniar independent:
3.3. Valori si vectori proprii n MATLAB 95
Sursa MATLAB 3.1 Exemplu de aproximare n sensul celor mai mici p atrate
%CENSUS - exemplu cu recensamantul
% potrivire polinomiala
%datele
y = [ 75.995 91.972 105.711 123.203 131.669 150.697 ...
179.323 203.212 226.505 249.633 281.422];
t = (1900:10:2000); % anii de recensamant
x = (1890:1:2019); % anii de evaluare
w = 2010; % anul de predictie
s=(t-1950)/50;
xs=(x-1950)/50;
cs=polyfit(s,y,3);
zs=polyval(cs,xs);
est=polyval(cs,(2010-1950)/50);
plot(t,y,o,x,zs,-,w,est,
*
)
text(1990,est,num2str(est))
title(Populatia SUA, FontSize, 14)
xlabel(anul, FontSize, 12)
ylabel(milioane, FontSize, 12)
1880 1900 1920 1940 1960 1980 2000 2020
50
100
150
200
250
300
350
312.6914
Populatia SUA
anul
M
i
l
i
o
a
n
e
Figura 3.2: Ilustrarea exemplului cu recens am antul
96 Algebr a liniar a n MATLAB
>> [V,D]=eig([2, -1; 1,0])
V =
0.7071 0.7071
0.7071 0.7071
D =
1 0
0 1
Vectorii proprii sunt scalat i astfel ca norma lor euclidian a s a e egal a cu unu (lu-
cru posibil, c aci dac a x este un vector propriu, atunci orice multiplu al s au este de
asemenea vector propriu).
Dac a A este hermitian a, atunci MATLAB returneaz a valorile proprii sortate
cresc ator si matricea vectorilor proprii unitar a (n limita preciziei de lucru):
>> [V,D]=eig([2,-1;-1,1])
V =
-0.5257 -0.8507
-0.8507 0.5257
D =
0.3820 0
0 2.6180
>> norm(V
*
V-eye(2))
ans =
2.2204e-016

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

In ambele cazuri se poate verica c a U


*
S
*
V este egal a cu A, n limita erorilor de
rotunjire.
Probleme
Problema 3.1. Pentru un sistem av and matricea tridiagonal a s a se implementeze
urm atoarele metode:
(a) eliminarea gaussian a, cu si f ar a pivotare;
(b) descompunerea LU;
100 Algebr a liniar a n MATLAB
(c) descompunerea LUP;
(d) descompunerea Cholesky, dac a matricea este simetric a si pozitiv denit a.
(e) metoda Jacobi;
(f) metoda Gauss-Seidel;
(g) metoda SOR.
Problema 3.2. Implementat i eliminarea gaussian a cu pivotare part ial a n dou a vari-
ante: cu permutare de linii logic a (prin intermediul unui vector de permut ari) si cu
permutare efectiv a a liniilor. Comparat i timpii de execut ie pentru diverse dimensiuni
ale matricei sistemului. Facet i acelasi lucru si pentru descompunerea LUP.
Problema 3.3. Modicat i descompunerea LUP astfel ca s a returneze si valoarea de-
terminantului matricei init iale.
Problema 3.4. Se consider a sistemul
2x
1
x
2
= 1
x
j1
+ 2x
j
x
j+1
= j, j = 2, n 1
x
n1
+ 2x
n
= n
(a) S a se genereze matricea sistemului folosind diag.
(b) S a se rezolve folosind descompunerea lu.
(c) S a se rezolve folosind o rutin a potrivit a din problema 3.1.
(d) S a se genereze matricea cu spdiags, s a se rezolve cu \, compar and timpul
de rezolvare cu timpul necesar pentru rezolvarea aceluiasi sistem cu matrice
dens a.
(e) S a se estimeze num arul de condit ionare al matricei coecient ilor folosind
condest.
Problema 3.5. Modicat i eliminarea gaussian a si descompunerea LUP astfel ca s a
utilizeze pivotarea total a.
Problema 3.6. Scriet i o funct ie MATLAB care s a genereze matrice band a aleatoare
de dimensiune dat a si care s a e diagonal dominante. Testat i metoda lui Jacobi si
metoda SOR pentru sisteme av and astfel de matrice.
3.3. Valori si vectori proprii n MATLAB 101
Problema 3.7. Consider am ecuat ia diferent ial a ordinar a
y

(x) p(x)y

(x) q(x)y(x) = r(x), x [a, b]


cu condit iile pe frontier a y(a) = , y(b) = . Presupunem c a q(x) q > 0.
Pentru a rezolva ecuat ia numeric, o vom discretiza, c aut and solut iile sale pe punctele
echidistante x
i
= a + ih, i = 0, . . . , N 1, unde h = (b a)/(N + 1). Denim
p
i
= p(x
i
), q
i
= q(x
i
), r
i
= r(x
i
) si y
i
y(x
i
). Utiliz and aproximat iile
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

C) este dat a n tabela


4.2. Interpolarea funct iilor de mai multe variabile n MATLAB 117
Temperatura T
i
94 205 371
Densitatea
i
929 902 860
(a) Obt inet i polinomul de interpolare Lagrange corespunz ator acestor date, folo-
sind toolbox-ul Symbolic.
(b) Determinat i densitatea pentru T = 251

prin interpolare Lagrange.


Problema 4.11. Aproximat i
y =
1 +x
1 + 2x + 3x
2
pentru x [0, 5] folosind interpolarea Lagrange, Hermite si spline. Aleget i cinci no-
duri si reprezentat i pe acelasi grac funct ia si interpolant ii. Reprezentat i apoi erorile
de aproximare.
Problema 4.12. Tabela 4.1 d a valorile pentru o proprietate a titanului ca funct ie
de temperatura T. Determinat i si reprezentat i grac o funct ie spline cubic a pentru
T 605 645 685 725 765 795 825
C(T) 0.622 0.639 0.655 0.668 0.679 0.694 0.730
T 845 855 865 875 885 895 905
C(T) 0.812 0.907 1.044 1.336 1.181 2.169 2.075
T 915 925 935 955 975 1015 1065
C(T) 1.598 1.211 0.916 0.672 0.615 0.603 0.601
Tabela 4.1: O proprietate a titanului n funct ie de temperatur a
aceste date utiliz and 15 noduri. C at de bine aproximeaz a spline-ul datele n celelalte
6 puncte?
Problema 4.13. Scriet i o funct ie MATLAB care s a reprezinte grac o suprafat a
f(x, y), f : [0, 1] [0, 1] R ce veric a condit iile
f(0, y) = g
1
(y) f(1, y) = g
2
(y)
f(x, 0) = g
3
(x) f(x, 1) = g
4
(y),
unde g
i
, i = 1, 4 sunt funct ii date denite pe [0, 1].
Problema 4.14. Determinat i interpolant ii bidimensionali produs tensorial si sum a
boolean a corespunz atori unui interpolant Hermite unidimensional cu nodurile duble
0 si 1. Reprezentat i grac acest interpolant, dac a se alege f(x, y) = xexp(x
2
+y
2
).
118 Interpolare n MATLAB
CAPITOLUL 5
Funct ii de funct ii
5.1. Integrare numeric a n MATLAB
MATLAB are dou a funct ii de baz a pentru integrare numeric a, quad si quadl.
Ambele necesit a ca intervalul de integrare [a, b] s a e nit si integrandul s a nu
aib a nici o singularitate pe acest interval. Pentru tratarea limitelor innite sau sin-
gularit at ilor se pot ncerca diverse trucuri cunoscute n analiza numeric a cum ar
schimbarea de variabil a, integrare prin p art i, cuadraturi gaussiene, s.a.m.d. (vezi
[20, 4, 21, 1]).
Cea mai frecvent a form a de apel este q = quad(fun,a,b,tol) (si similar
pentru quadl), unde fun este funct ia de integrat. Ea poate dat a sub form a de
sir de caractere, obiect inline sau function handle. Important este s a accepte la intrare
vectori si s a returneze vectori. Argumentul tol este eroarea absolut a (implicit 10
6
).
Forma q = quad(fun,a,b,tol,trace)cu trace nenul traseaz a (urm a-
reste) valorile [fcount a b-a Q] calculate n timpul aplic arii recursive.
Forma q = quad(fun,a,b,tol,trace,p1,p2,...) transmite argu-
mentele suplimentare p1, p2, . . . , direct lui fun, fun(x,p1,p2,...).

In acest
caz, pentru a utiliza valori implicite ale lui tol sau trace n locul lor pe lista de
parametri se vor trece matrice vide.
Forma [q,fcount] = quad(...) returneaz a num arul de evalu ari de func-
t ii.
S a presupunem c a dorim s a aproxim am
_

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

3, eroarea este mai mic a dec at 10


9
.
5.2. Calculul integralelor duble n MATLAB
Integralele duble pe un dreptunghi pot evaluate cu dblquad. Pentru ilustrare,
s a presupunem c a dorim s a aproxim am integrala
_

0
_
2

(y sin x +xcos y) dxdy


Valoarea exact a a integralei este
2
, dup a cum se poate verica cu toolbox-ul Sym-
bolic:
>> syms x y
>> z=y
*
sin(x)+x
*
cos(y);
>> int(int(z,x,pi,2
*
pi),y,0,pi)
ans = -pi2
Integrandul se poate da ca obiect inline, expresie sir de caractere, sau function
handle. S a presupunem c a integrandul este dat n sierul integrand.m:
function z = integrand(x, y) z = y
*
sin(x)+x
*
cos(y);
Vom utiliza dblquad si vom face si vericarea:
>> Q = dblquad(@integrand, pi, 2
*
pi, 0, pi)
Q =
-9.8696
>> -pi2
ans =
-9.8696
5.3. Ecuat ii neliniare si minimizare 123
Calcul am integrala si cu quaddbl (sursa MATLAB ??):
>> Q2=quaddbl(@integrand,pi,2
*
pi,0,pi)
Q2 =
-9.8696
Integrandul transmis lui dblquad trebuie s a accepte un vector x si un scalar y si
s a returneze un vector. Se pot transmite argumente suplimentare lui dblquad pen-
tru a specica precizia si metoda de integrare unidimensional a (implicit quad). S a
presupunem c a vrem s a calcul am
_
6
4
_
1
0
(y
2
e
x
+xcos y) dxdy
cu precizia 1e-8 si s a folosim quadl n loc de quad:
>> fi=inline(y.2.
*
exp(x)+x.
*
cos(y));
>> dblquad(fi,0,1,4,6,1e-8,@quadl)
ans =
87.2983
Valoarea exact a a integralei calculat a cu Maple sau cu toolbox-ul Symbolic este
152
3
(e 1) +
1
2
(sin 6 sin 4).
Vericare:
>> 152/3
*
(exp(1)-1)+1/2
*
(sin(6)-sin(4))
ans =
87.2983
5.3. Ecuatii neliniare si minimizare
MATLAB are put ine rutine pentru determinarea r ad acinilor unei funct ii de o va-
riabil a. Dac a funct ia este polinomial a, am v azut c a roots(p) returneaz a r ad acinile
lui p, unde p este vectorul coecient ilor ordonat i descresc ator dup a puterile variabi-
lei.
Funct ia fzero determin a o r ad acin a a unei funct ii de o variabil a. Algoritmul fo-
losit de fzero este o combinat ie de metode: njum at at ire, secant a si interpolare in-
vers a p atratic a [15]. Cea mai simpl a variant a de apel a ei este x = fzero(f,x0),
cu x0 scalar, care ncearc a s a g aseasc a un zero al lui f n vecin atatea lui x0. De
exemplu,
124 Funct ii de funct ii
>> fzero(cos(x)-x,0)
ans =
0.7391
Precizia si modul de asare a rezultatelor sunt controlate de un al treilea argument
de intrare, structura options, care se poate seta cu ajutorul funct iei optimset.
Funct ia fzero utilizeaz a dou a c ampuri ale lui options: TolX care d a precizia
(tolerant a) si Display care specic a nivelul de raportare, cu valorile off pentru
nici o iesire, iter pentru iesire la ecare iterat ie, final pentru a asa doar re-
zultatul nal si notify pentru a asa rezultatul numai dac a funct ia nu converge
(implicit). Pentru exemplul precedent, utiliz and Display cu final obt inem:
>> fzero(cos(x)-x,0,optimset(Display,final))
Zero found in the interval [-0.905097, 0.905097] ans =
0.7391
Argumentul de intrare x0 poate si un interval la ale c arui capete funct ia s a aib a
valori de semne contrare. Un astfel de argument este util dac a funct ia are singularit at i.
Vom seta n continuare Display pe final cu comanda
os=optimset(Display,final);
Consider am exemplul (mesajul nu apare):
>> [x,fval]=fzero(tan(x)-x,1,os)
... x =
1.5708
fval =
-1.2093e+015
Cel de-al doilea argument de iesire este valoarea funct iei n zeroul calculat. Deoarece
funct ia f(x) = tan x x are o singularitate n /2 (vezi gura 5.3) vom da ca
argument de pornire un interval ce cont ine un zero, dar f ar a singularit at i:
>> [x,fval]=fzero(tan(x)-x,[-1,1],os)
Zero found in the interval: [-1, 1]. x =
0
fval =
0
Se pot transmite parametrii suplimentari p1,p2,... funct iei f cu apeluri de
forma
x = fzero(f,x0,options,p1,p2,...)
Dac a se doreste ca options s a aib a valori implicite se poate folosi pe pozit ia res-
pectiv a matricea vid a [].
MATLAB nu are nici o funct ie pentru rezolvarea sistemelor de ecuat ii neliniare.
Totusi, se poate ncerca rezolvarea unor astfel de sisteme prin minimizarea sumei
5.3. Ecuat ii neliniare si minimizare 125
3 2 1 0 1 2 3
10
8
6
4
2
0
2
4
6
8
10
x
tan(x)x
Figura 5.3: Singularitate a funct iei f(x) = tan x x, evident iat a cu
ezplot(tan(x)-x,[-pi,pi]),grid
p atratelor reziduurilor. Toolbox-ul Optimization cont ine un rezolvitor de ecuat ii ne-
liniare.
Funct ia fminsearch caut a un minim local al unei funct ii reale de n variabile
reale. O form a posibil a de apel este x=fminsearch(f,x0,options). Structura
options este organizat a la fel ca n cazul lui fzero, dar sunt folosite mai multe
c ampuri. Amintim MaxFunEvals (num arul maxim de evalu ari de funct ii permise),
MaxIter (num arul maxim de iterat ii permise), TolFun (precizia de terminare pen-
tru valoarea funct iei). Valoarea implicit a pentru TolX si TolFun este 1e-4.
Exemplul 5.3.1. Sistemul neliniar din exemplele ?? si ??, adic a
f
1
(x
1
, x
2
, x
3
) := 3x
1
cos(x
1
x
2
)
1
2
= 0,
f
2
(x
1
, x
2
, x
3
) := x
2
1
81(x
2
+ 0.1)
2
+ sin x
3
+ 1.06 = 0,
f
3
(x
1
, x
2
, x
3
) := e
x
1
x
2
+ 20x
3
+
10 3
3
= 0
ar putea rezolvat ncerc and minimizarea sumei p atratelor membrilor st angi:
F(x
1
, x
2
, x
3
) = [f
1
(x
1
, x
2
, x
3
)]
2
+ [f
1
(x
1
, x
2
, x
3
)]
2
+ [f
1
(x
1
, x
2
, x
3
)]
2
.
Funct ia de minimizat este dat a n sierul fminob.m:
function y = fminob(x)
y=(3
*
x(1)-cos(x(2)
*
x(3))-1/2)2+(x(1)2-81
*
(x(2)+0.1)2+...
sin(x(3))+1.06)2+(exp(-x(1)
*
x(2))+20
*
x(3)+(10
*
pi-3)/3)2;
126 Funct ii de funct ii
Vom alege vectorul de pornire x
(0)
= [0.5, 0.5, 0.5]
T
si precizia 10
9
si pentru
x. Comenzile MATLAB si rezultatul lor se dau mai jos
>> os=optimset(Display,final,TolX,1e-9,TolFun,1e-9);
>> [xm,fval]=fminsearch(@fminob,[0.5,0.5,0.5],os)
Optimization terminated:
the current x satisfies the termination criteria using
OPTIONS.TolX of 1.000000e-009 and F(X) satisfies the
convergence criteria using OPTIONS.TolFun of 1.000000e-009
xm =
0.49999999959246
0.00000000001815
-0.52359877559440
fval =
1.987081116616629e-018
Comparativ cu rezolv arile bazate pe metoda lui Newton sau metoda lui Broyden, se
constat a c a timpul de execut ie este mai lung si precizia nu este la fel de bun a (si
datorit a aspectului mai complicat al funct iei obiectiv). Aproximanta obt inut a astfel
poate folosit a ca vector de pornire pentru metoda lui Newton.
Funct ia fminsearch se bazeaz a pe varianta Nelder-Mead a algoritmului sim-
plex. Algoritmul este lent, dar are avantajul c a nu utilizeaz a derivate si este insensibil
la discontinuit at i ale funct iei. Toolbox-ul Optimization cont ine metode mai sosticate
de minimizare.
Probleme
Problema 5.1. S a se aproximeze
_
1
0
sin x
x
dx,
folosind o cuadratur a adaptiv a si metoda lui Romberg. Ce probleme pot s a apar a? S a
se compare rezultatul cu cel furnizat de quad sau quadl.
Problema 5.2. Pornind de la o integral a convenabil a, s a se aproximeze cu 8 zeci-
male exacte, folosind metoda lui Romberg si o cuadratur a adaptiv a.
Problema 5.3. Aproximat i
_
1
1
2
1 +x
2
dx
folosind formula trapezelor si formula repetat a a lui Simpson, pentru diverse valori
ale lui n. Cum variaz a precizia odat a cu n? Reprezentat i grac.
5.3. Ecuat ii neliniare si minimizare 127
Problema 5.4. Funct ia eroare, erf, se deneste prin
erf(x) =
2

_
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(

log(1 + x). log(1 x)

, 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

In multe situat ii, determinarea ultimei valori t


final
a lui tspan este un aspect
important al problemei. Un exemplu este c aderea unui corp asupra c aruia act ioneaz a
fort a gravitat ional a si rezistent a aerului. C and atinge el p am antul? Un alt exemplu
este problema celor dou a corpuri, adic a determinarea orbitei unui corp supus atract iei
146 Ecuat ii diferent iale n MATLAB
Sursa MATLAB 6.2 Problem a stiff cu informat ii despre jacobian
function rcd
%RCD EDO Stiff pentru problema reactie-convectie-difuzie.
% obtinuta prin semidiscretizare cu metoda liniilor
N = 40; a = 1; b = 5e-2;
tspan = [0;2]; space = [1:N]/(N+1);
y0 = 0.5
*
(1+cos(2
*
pi
*
space));
y0 = y0(:);
options = odeset(Jacobian,@jacobian,Jpattern,...
jpattern(N),RelTol,1e-3,AbsTol,1e-3);
[t,y] = ode15s(@f,tspan,y0,options,N,a,b);
e = ones(size(t)); U = [e y e];
waterfall([0:1/(N+1):1],t,U)
xlabel(spa\c{t}iu,FontSize,16,Interpreter,LaTeX)
ylabel(timp,FontSize,16,Interpreter,LaTeX)
% ---------------------------------------------------------
% Subfunctii.
% ---------------------------------------------------------
function dydt = f(t,y,N,a,b)
%F ecuatia diferentiala.
r1 = -a
*
(N+1)/2; r2 = b
*
(N+1)2;
up = [y(2:N);0]; down = [0;y(1:N-1)];
e1 = [1;zeros(N-1,1)]; eN = [zeros(N-1,1);1];
dydt = r1
*
(up-down) + r2
*
(-2
*
y+up+down) + (r2-r1)
*
e1 +...
(r2+r1)
*
eN + y.
*
(1-y);
% ---------------------------------------------------------
function dfdy = jacobian(t,y,N,a,b)
%JACOBIAN Jacobianul.
r1 = -a
*
(N+1)/2; r2 = b
*
(N+1)2;
u = (r2-r1)
*
ones(N,1);
v = (-2
*
r2+1)
*
ones(N,1) - 2
*
y;
w = (r2+r1)
*
ones(N,1);
dfdy = spdiags([u v w],[-1 0 1],N,N);
% ---------------------------------------------------------
function S = jpattern(N)
%JPATTERN sablonul de raritate al jacobianului.
e = ones(N,1);
S = spdiags([e e e],[-1 0 1],N,N);
6.5. Tratarea evenimentelor 147
0
0.2
0.4
0.6
0.8
1
0
0.5
1
1.5
2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
s pat iu
timp
Figura 6.9: Exemplu stiff, cu informat ii despre jacobian
gravitat ionale a unui corp mult mai greu. Care este perioada orbitei? Facilitatea de
prelucrare a evenimentelor a rezolvitorilor din MATLAB furnizeaz a r aspunsuri la
astfel de ntreb ari.
Detect ia evenimentelor n MATLAB presupune dou a funct ii f(t, y) si g(t, y) si
o condit ie init ial a (t
0
, y
0
). Problema este de a g asi o funct ie y(t) si o valoare nal a
t

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

(0). Problema este pentru ce


valori a lui t avem y(t) = 0? Codul pentru funct ia f(t, y) este
function ydot=f(t,y)
ydot = [y(2); -1+y(2)2];
148 Ecuat ii diferent iale n MATLAB
Ecuat ia a fost scris a ca un sistem de dou a ecuat ii de ordinul I, deci g(t, y) = y
1
.
Codul pentru g(t, y) este
function [gstop,isterminal,direction] = g(t,y)
gstop = y(1);
isterminal = 1;
direction = 0;
Primul argument de iesire, gstop, este valoarea pe care dorim s-o anul am. Dac a
al doilea argument de iesire, isterminal, are valoarea 1, rezolvitorul va ter-
mina execut ia dac a gstop este zero. Dac a isterminal = 0, evenimentul este
nregistrat si rezolvarea continu a. direction poate -1, 1 sau 0, dup a cum zeroul
se atinge dac a funct ia este descresc atoare, cresc atoare sau nemonoton a. Calculul si
reprezentarea traiectoriei se poate face cu
function falling_body(y0)
opts = odeset(events,@g);
[t,y,tfinal] = ode45(@f,[0,Inf],y0,opts);
tfinal
plot(t,y(:,1),-,[0,tfinal],[1,0],o)
axis([-0.1, tfinal+0.1, -0.1, max(y(:,1)+0.1)]);
xlabel t
ylabel y
title(Corp in cadere)
text(tfinal-0.8, 0, [tfinal = num2str(tfinal)])
Pentru valoarea init ial a y0=[1; 0] se obt ine
>> falling_body([1;0])
tfinal =
1.65745691995813
si gracul din gura 6.10.
Detect ia evenimentelor este util a n probleme ce presupun fenomene periodice.
Problema celor dou a corpuri este un exemplu bun. Ea descrie orbita unui corp asupra
c aruia act ioneaz a fort a gravitat ional a a unui corp mult mai greu. Utiliz and coordonate
carteziene, u(t) si v(t) cu originea n corpul mai greu, ecuat iile sunt:
u

(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) =

3/2. Iat a codul pentru rezolvare


tspan = [pi/6,pi/4];
[T,Y] = ode15i(@implic,tspan,1/2,sqrt(3)/2);
si pentru ecuat ia diferent ial a
function z=implic(t,y,yp)
z=yp2+y2-1;
Probleme
Problema 6.1. Rezolvat i problema:
y

= 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

= /8 radiani. Calculat i pentru patru s arituri, cu


diferite valori ale vitezei init iale v
0
si ale densit at ii aerului, . Lungimea ec arei
s arituri este x(t
f
), unde timpul n aer, t
f
, este determinat de condit ia y(t
f
) = 0.
160 Ecuat ii diferent iale n MATLAB
(a) S aritur a ,,nominal a la altitudine mare, v
0
= 10 m/s si = 0.94 kg/m
3
.
(b) S aritur a ,,nominal a la nivelul m arii, v
0
= 10 m/s si = 1.29 kg/m
3
.
(c) Abordarea sprinterului la altitudine mare, = 0.94 kg/m
3
. Determinat i v
0
astfel ca lungimea s ariturii s a e egal a cu recordul lui Beamon, 8.90 m.
(d) Abordarea sprinterului la nivelul m arii, = 1.29 kg/m
3
si v
0
valoarea deter-
minat a la punctul (c).
Prezentat i rezultatele complet and tabela urm atoare:
v
0

0
distant a
10 22.5 0.94 ???
10 22.5 1.29 ???
??? 22.5 0.94 8.90
??? 22.5 1.29 ???
Care factor este mai important, densitatea aerului sau viteza init ial a a s aritorului?
Problema 6.9. Rezolvat i problema stiff
y

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

(0) = 0 (nonstiff). S a se reprezinte grac y 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

(0) = 0. At at timp c at x < L dopul este nc a n


sticl a, dar el p ar aseste sticla c and x = L. Integrat i ecuat iile de miscare cu DORPRI5
(tabela ??) si tolerant a 0.000001 pentru a g asi momentul la care dopul este aruncat.
Determinat i de asemenea viteza de expulzare c and
q = 20, L = 3.75cm, d = 5cm, R = 4.
Problema 6.12. Un model simplu al b at ailor inimii umane este dat de
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

You might also like