Sunteți pe pagina 1din 463

1.

SISTEME DE PROGRAME PENTRU


MODELARE I SIMULARE
Pentru a putea rezolva regimurile dinamice, care s includ si sistemele de
reglare in timp real, este necesar ca programele de simulare sa fie rapide, complete,
facile si dezvoltabile. n majoritatea cazurilor, acestea se bazeaz pe experiena si
dezvoltrile limbajului FORTRAN, care dispune de algoritmi numerici robuti i o
librrie de programe foarte dezvoltate. Totui, n ultimii ani, facilitile introduse
de Windows i, n special grafica, sunt superioare, astfel nct au fost dezvoltate
programe specializate, cu posibiliti grafice superioare.
Sistemele industriale care intereseaz aplicaiile inginereti sunt:
Sisteme discrete, la care procesele se desfoar secvenial, precum procesele
de transport, din furnal, de nclziri si rciri etc.
Sisteme de proces, care cuprind procese industriale la scar larg, procese ce
se pot desfura continuu sau n trane. Fluxurile materiale i de energie sunt
esenial continui n timp, ca exemplu lichide, gaze, pulberi.
Sisteme dinamice generalizate, care cuprind sistemele tehnologice complexe
i dezvoltate, precum cele de propulsie (automobile, avioane) sau cele din
unitile energetice. De remarcat c aceste sisteme pot fi foarte mici (precum
circuitele electronice) sau foarte mari (precum centralele electrice).
1.1. Simularea sistemelor discrete
Sistemele discrete se ntlnesc n procesele de producie i manufacturiere i
cuprind multe fluxuri i reele care se combin odat cu componentele care se
asambleaz, compacteaz i stocheaz. Pentru o eficien competitiv, liniile de
producie se optimizeaz, n sensul eliminrii timpilor mori si de ateptare.
De aceste procese se ocup ramura tehnologic COMPUTER
INTEGRATED MANUFACTURING (CIM); pentru ele s-au dezvoltat
urmtoarele chituri de programe:
SIMAN/CINEMA, dezvoltat de Cimulation Centre, Cornbrash, Anglia.
SIMPLE++ , dezvoltat de AESOP Preston, Anglia.
SIMFACTARY/SIMPROCES ,dezvoltat de Coliseum, Camberley, Anglia.
WINTESS ,dezvoltat la AT and TISTEL, Anglia.

Programele cuprind faciliti grafice care s prezinte fluxurile materiale,
structura procesului, strategii de asamblare, logistic etc.

Rezultatele simulrii pot fi prezentate sub form tabelar, grafic, histograme
etc. Au, de asemenea, posibilitatea construirii ierarhice a sistemelor complexe.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 22
1.2. Sisteme de proces
Sistemele de proces au fost dezvoltate cu precdere n industria
petrochimic, farmaceutic, biotehnologii, procese chimice n general, pentru care
s-au dezvoltat module specializate precum: schimbtoare de cldur, coloane de
distilare, reactoare chimice, generatoare.
Programele dezvoltate sunt :
CADAS (Computer Aide Design and Synthesis of industrial proces ),
dezvoltat la SIMRAD ALBATROSS , Konsberg, Norvegia.
ASPEN PLUSS - pentru optimizarea proceselor, dezvoltat la Cambridge,
Anglia.
MAX - orientat cu precdere pentru calculatoare personale, grafic,
Cambridge, Anglia.
SPEEDUP- simuleaz procesele dinamice on-line, Cambridge, Anglia.
1.3. Sisteme dinamice generalizate
Pentru sistemele dinamice generalizate s-au dezvoltat chituri, care s conin
algoritmi de rezolvare (difereniere i integrare) rapizi i robuti, precum i
urmtoarele faciliti: utilizarea eficient a tehnologiei VDU, a Graphical User
Interface (GUI), posibiliti de dezvoltare ierarhic, de prezentare etc.
Noile chituri de simulare au n comun urmtoarele:
Reprezentarea modelelor matematice prin icoane grafice, cu posibilitatea
unirii acestora i introducerii datelor specifice modelului dat.
Simularea se face prin rutine de integrare numeric, bazate pe algoritmi
eficieni si robuti (Rurge-Kutta, Euler, Adams).
Posibiliti grafice: datele pentru i din simulare, afiate cu programe
grafice.
Detectarea erorilor si faciliti de depanare: se realizeaz prin mesaje
imediate sau prin utilizarea unor programe care s detecteze sursa erorilor.
Comunicarea cu utilizatorul se face interactiv, prin pauze ntre simulri,
pentru a analiza rezultatele grafice pariale sau pentru a modifica anumii
parametri ai simulrii.
1.4. Sisteme de programe pentru simulare
Principalele programe pentru simulare sunt:
ACSL (Advance Continuous Simulation Language), care este
structurat pe limbajul FORTRAN i care are posibiliti de dezvoltare
pentru simulare i modelare. Facilitile grafice ale versiunii sub
WINDOWS constau n csue de dialog, posibiliti de help i sunt
disponibile prin PROTOBLOK sau Graphic Modeller. Toate blocurile
Sisteme de programe pentru modelare i simulare 23
sunt cu structur ierarhic i cu pictograme pentru echipamentele de
simulat. Programul este dezvoltat de Rapid DATA Ltd, Anglia. Bazat
pe ACSL este programul MMS, disponibil n catedr.
EASY 5X este versiunea X - Window a lui EASY 5, introdus n 1987
de compania Boeing, pentru analiza sistemelor inginereti. EASY 5X a
fost introdus n 1992 pentru modelarea, simularea, analiza i proiectarea
sistemelor statice i dinamice, liniare i neliniare. Are posibilitatea de a
modela sisteme la scar larg, complexe, continui, hibride, multiple.
Utilizatorul are posibilitatea construirii modelului prin selectarea
blocurilor din librria de componente standardizate sau specializate,
prin luarea cu mouse-ul i mutarea n locul dorit, apoi prin apsarea pe
mouse se poziioneaz. Legtura dintre componente se face prin linii,
care se trag cu mouse-ul de la un bloc la altul.
EASY 5X are facilitai ierarhice de a masca subsistemele n interiorul
unui sistem, apelabile prin apsarea pe mouse. Din pachetul de
programe fac parte si rutinele pentru analiz i rezolvare, de optimizare
a parametrilor, analiz liniar, faciliti de liniarizare ca i de integrare
i difereniere. Rezultatele pot fi plotate on-line interactiv, n timpul
simulrii, sau of-line (la sfrit). Pachetul de programe EASY 5X este
dezvoltat de Boeing SUA.
MATRIXx: este introdus ncepnd din 1983 de Integrated System INC,
Anglia, ajungnd acum la versiunea 4. Acesta poate simula sisteme
continuu discrete, hibride, cu una sau mai multe mrimi variabile.
Editorul graphic, SYSTEM BUILD, introdus n 1984, permite apelarea
facil a blocurilor ca i unirea acestora, prin conectare grafic.
Parametrii modelului pot fi dai i modificai prin acces grafic la csua
acestuia. Dispune de librrii specializate pentru proiectarea controlului
(reglrii), de modele de reducere i optimizare. Parametrii constantelor
pot fi dai n sistem internaional sau anglo-saxon. Are posibiliti de
prezentare grafic a rezultatelor. Sunt diferene mici ntre acesta i
MATLAB. Recent, a fost dezvoltat pachetul XMATH din familia
MATRIXx, care lucreaz pe staii grafice sub X-WINDOWS i care are
posibiliti grafice n 2D i 3D, rutine numerice pentru procesarea
semnalului i funcii de proiectare a controlului.
PSI/C este noua versiune, C, a pachetului original PSI, dezvoltat de
Delft Technical University, Olanda, cu posibiliti grafice scrise n C.
Este un program mai puin avansat, la un pre modest i se preteaz la
aplicaii restrnse sau educaionale.
SIMNON a fost dezvoltat ncepnd cu 1974, la Lund Institute of
Technology, Suedia, ajungnd la versiunea 6. Cea mai important
dezvoltare este interfaa grafic ISEE-SIMNON, prin care se pot
structura modele ierarhice complexe.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 24
SIMULINK/MATLAB, dezvoltat de Math Works Inc, SUA, tiinifice
i inginereti. Fundamental pentru acest program este faptul c lucreaz
cu matrice de dimensiuni arbitrare. MATLAB a fost introdus n 1981,
ajungnd la versiunea 7. Bazat pe algoritmii numerici ai MATLAB, a
fost dezvoltat dup 1992 programul SIMULINK, pentru simularea
dinamic a sistemelor. SIMULINK permite modelarea i analiza
sistemelor dinamice, incluznd modelele liniare, neliniare, continui,
discrete i hibride. Modelele se construiesc simplu, prin copierea
modelelor componente din biblioteca de programe, n spaiul de lucru,
prin intermediul mouse-ului. Unirea blocurilor se face tot cu mouse-ul,
trgnd liniile ntre blocuri. Modificarea parametrilor i alegerea
algoritmului de simulare se face prin clicarea butonului mouse-ului. Are
biblioteci de programe specializate pentru calculul statistic, analiza
semnalului, sisteme neliniare, analiza n frecven, programare liniar
cu restricii, sinteza circuitelor, proiectarea regulatoarelor etc.
Posibilitile de afiare grafic sunt, de asemenea, dezvoltate, putnd
prezenta rezultatele bidimensional sau tridimensional.
VISSIM este un alt produs pentru simularea sistemelor continui, avnd
peste 75 componente predefinite (liniare si neliniare). Este dezvoltat de
Adept Scientific Micro System Ltd, Anglia.
Datorit includerii n pachetul Microsoft Office, Microsoft Excel este
instalat pe majoritatea calculatoarelor care ruleaz una dintre variantele
Windows. Efectuarea unor calcule i grafice n cadrul Microsoft Excel
este recomandabil, deoarece beneficiaz de toate avantajele folosirii
conjugate a aplicaiilor componente Microsoft Office: eficacitate,
transfer facil al informaiilor ntre documente prin copiere, stabilirea
unor legturi ntre copiere i original, ncorporarea de noi date, prin
copierea de informaii existente sau inserare prin intermediul unor
obiecte. ntr-un capitol distinct, se va face o prezentare succint a
acestei aplicaii software, prin descrierea principalelor funcii i modul
n care acestea pot fi utilizate, pentru realizarea unor calcule matematice
complexe, inclusiv pentru modelare i simulare.
1.5. Criterii pentru compararea programelor de simulare
Pentru a compara diferitele produse soft sunt considerate urmtoarele:
1. cerine eseniale
2. cerine dorite
a. Disponibilitatea relativ la subprograme precum:
- faciliti de lucru cu matrice;
- testarea si plotarea rspunsului n frecven i timp;
- analize de stabilitate i senzitivitate;
Sisteme de programe pentru modelare i simulare 25
- determinarea punctului de echilibru;
- rutine pentru procesarea semnalului;
- control robust si opional;
- funcii pentru identificare model, transformare, reducere.
b. Acces la librria cu componente i module apropiate
c. Faciliti de help on-line
d. Compatibilitate staii de lucru / PC
e. Posibilitatea creerii de pictograme
f. Posibiliti de simulare iterativ i animaie
g. Cod de compilare de nalt nivel, optimizat prin convertirea diagramei
bloc, n cod surs, pentru limbajul de compilare.
h. Generarea automat a codului n timp real.

Analiza comparativ a pachetelor EASY 5X, MATLAB/SIMULINK i
MATRIXx este redat n tabelul de mai jos.

FACILITATEA EASY5X MATLAB /
SIMULINK
MATRIXx
Cerine eseniale
a. Capacitatea de simulare a
sistemelor complexe
X X X
b. Diagrame bloc X X X
c. Ecuaii pentru modulele de
baz
X X X
d. Faciliti de inserare din alte
blocuri sau coduri
X X X
e. Simulare interactiv X X X
f. Posibiliti grafice X X X
g. Rutine rapide neevaluat neevaluat neevaluat
h. Utilizare facil X X X
Cerine dorite
a. Disponibilitate subprograme limitat X X
b. Acces librrie componente X X -
c. Help on-line X X X
d. Lucru PC/staii grafice - X X
e. Creare de pictograme X X -
f. Simulare interactiv i
animaie
- X X
g. Cod optimizat X X X
h. Posibiliti de lucru n timp
real
X X X

2. PREZENTARE GENERAL MATLAB

MATLAB (MATrix LABoratory) este un pachet de programe de nalt
performan dedicat calculului numeric i reprezentrilor grafice n domeniul
tiinei i al ingineriei, care integreaz: analiza numeric, calculul matriceal,
procesarea semnalului i reprezentrile grafice ntr-un mediu uor de nvat i
folosit. Elementul de baz cu care opereaz MATLAB este matricea (matrix), cu
care se pot rezolva problemele date, fr a fi necesar cunoaterea unui limbaj de
programare. Cea mai important caracteristic a MATLAB este uurina n operare
i dezvoltarea unor aplicaii specifice domeniului n care lucreaz utilizatorul.
Structural, MATLAB este realizat sub forma unui nucleu de baz, cu
interpretor propriu, n jurul cruia sunt construite aplicaii specifice diferitelor
domenii, numite TOOLBOX (colecii extinse de funcii MATLAB, destinate
rezolvrii unor probleme din domenii variate).
2.1. Ferestre de lucru
MATLAB lucreaz cu dou tipuri de ferestre: o fereastr de comenzi
(Command Window) i o fereastr pentru reprezentri grafice.
Fereastra de comenzi
n momentul declanrii programului, apare fereastra de comenzi. Meniul
principal din bara superioar a acesteia este accesibil prin selecia direct cu
mouse-ul a comenzii dorite sau prin tastarea simultan a tastei Alt i a literei
subliniate a comenzii dorite.
Fiecare comand din meniul principal furnizeaz un meniu specific, n cadrul
acestuia selecia putndu-se face, fie cu mouse-ul, fie prin tastarea literei marcate
special, n fiecare subcomand a respectivului meniu.
O parte din comenzile prezente n meniul principal sunt aliniate sub form de
butoane pe bara imediat inferioar (Bara cu butoane).
Comenzile eseniale i funciile matematice se introduc n dreptul cursorului
MATLAB; tot de aici se pot declana iniierea toolbox-urilor (colecii extinse de
funcii MATLAB, destinate rezolvrii unor probleme specifice anumitor domenii).
n momentul n care capacitatea ecranului este depit din punct de vedere
orizontal sau vertical, este posibil deplasarea cu ajutorul butoanelor de derulare
orizontal i vertical.
n figura urmtoare sunt prezentate componentele principale ale ferestrei de
comenzi descrise anterior:

Prezentare general Matlab 27


Gestionarea fiierelor
Selectnd comanda File, din meniul principal, se obine submeniul de
gestionare a fiierelor, cu urmtoarea list de comenzi:
New provoac descrierea unui alt sub-submeniu cu opiunile: M-File
(deschide o ferestr de editare a unui fiier), Figure (deschide o fereastr
grafic nou), Model (deschide fereastra corespunztoare modelrii n
Simulink);
Open deschide o fereastr de dialog, pentru a selecta un fiier, care va
deveni un fiier de lucru;
Open selection analizeaz fiierele pentru selectare i deschide pe cel
selectat;
Run Script ruleaz comenzile componente ale unui scenariu;
Load Workspace ncarc fiierul specificat, n care au fost salvate anterior
datele din spaiul de lucru;
Save Workspace As deschide o fereastr de dialog, pentru a salva datele
din spaiul de lucru ntr-un fiier, al crui numr trebuie precizat;
Show Workspace prezint coninutul spaiului de lucru;
Show Graphics Property Editor editorul de proprieti grafice ;
Show GUI Layout Tool modificarea interfeei;
Set Path se stabilesc cile ctre directoarele n care se gsesc fiiere sau
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 28
aplicaii MATLAB;
Preferences stabilirea proprietilor ferestrei de comenzi;
Print Setup configurarea caracteristicilor imprimantei i paginii;
Print permite tiprirea documentului;
Exit MATLAB prsirea aplicaiei.
Funcia Edit
Aproape toate comenzilor prezente n submeniul Edit sunt comune cu cele
din meniurile similare ale majoritii editoarelor de texte sub Windows: Undo,
Cut, Copy, Paste, Clear, Select All.
tergerea sesiunii de lucru se realizeaz cu comanda Clear Session.
Selectarea ferestrelor
Trecerea dintr-o fereastr grafic sau de comenzi, ntr-o alt fereastr, se
realizeaz prin selectarea comenzii Windows din meniul principal, urmat de
selectarea uneia dintre ferestrele grafice deschise sau acelei de comenzi.
Editarea programelor
La editarea oricrui program, utilizatorul poate apela help-ul i astfel s
revad parametrii de intrare i ieire ai funciei respective.
n plus, sunt furnizate informaii referitoare la funcionarea MATLAB,
demonstraii i exemple.
Fereastra de reprezentri grafice n Matlab
Fereastra grafic este o form elevat de reprezentare a graficelor; pot exista
mai multe ferestre grafice deschise n acelai timp, dar o singur fereastr de
comenzi.
n fereastra grafic pot fi reprezentate funcii 2D sau 3D, imagini color,
animaie etc.
Gestionarea ferestrelor grafice
Selectarea comenzii File-New-Figure determin trecerea ntr-o fereastr
grafic. Dac se selecteaz comanda Window (din meniul principal), urmat de
opiunea Figure, se trece n fereastra grafic ce conine o reprezentare anterioar.
Editarea graficelor
Selectnd comanda Edit din meniul principal al ferestrei grafice, apare un
submneniu, asemntor cu cel al ferestrei de comand.
Prezentare general Matlab 29
2.2. Funcii de interes general
Funcii pentru intrarea i ieirea din Matlab
Funciile pentru lansarea unei sesiuni de lucru n MATLAB, prsirea
acesteia, precum i asigurarea unor informaii necesare unei funcionri corecte
sunt:
startup fiier M, executat la activarea MATLAB;
matlabrc fiierul principal pentru lansarea MATLAB (conine toate cile
de acces la fiierele de lucru, precum i setrile parametrilor de lucru);
exit, quit ieire din MATLAB.
Funcii pentru control general
Pentru controlul general al mediului de programare MATLAB se utilizeaz
funciile:
help furnizeaz informaii despre funcionarea MATLAB;
what listeaz fiierele *.M, *.MAT i *.MEX din directorul curent;
type listeaz fiierul M menionat;
lookfor ntoarce numele fiierelor care au n prima linie a Help (linia H1)
cuvintele precizate ca argument;
which ntoarce calea spre un fiier sau o funcie MATLAB;
path ntoarce cile utilizate de MATLAB pentru a gsi fiierele apelate;
who listeaz variabile curente din memorie;
whos listeaz variabilele curente, dimensiunile lor, precum i tipul acestora
(reale sau complexe).
Funcii pentru controlul directoarelor i fiierelor
Principalele funcii Matlab cu ajutorul crora se controleaz directoarele i
fiierele sunt:
cd schimb directorul curent;
dir listeaz coninutul directorului curent;
delete terge fiierul precizat de pe disc;
! execut comenzi DOS (precedate de !), fr prsirea MATLAB;
diary salveaz sesiunea de lucru (fr partea grafic) ntr-un fiier text
(ASCII).
Funcii de control ale mrimilor de timp
Controlul mrimilor de timp specifice se realizeaz cu funciile:
clock citete timpul din BIOS-ul computerului;
cputime determin timpul de calcul al CPU;
date citete data din BIOS-ul computerului;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 30
etime cronometreaz intervalul de timp ntre dou evenimente;
tic, toc pornete, respectiv oprete un cronometru.
Funcii asociate ferestrei de comenzi
Fereastra de comenzi se poate controla prin urmtoarele funcii:
clc terge fereastra de comenzi;
home mut cursorul n poziia iniial (prima linie-prima comand);
format opiune seteaz formatul de afiare a datelor, n funcie de opiunea
specificat (short 5 cifre, long 15 cifre, short e 5 cifre + exp, long e
15 cifre + exp, hex hexazecimal, plus plus blanc minus, blank cu 2
zecimale, rat n numere raionale);
echo permite afiarea liniilor de program, n timpul executrii acestora;
more funcie pentru controlul numrului de linie afiat de monitor.
Funcii de control ale variabilelor din memorie
n timpul lucrului, o serie de mrimi sunt reinute n spaiul de lucru sau n
memoria calculatorului. Acestea pot fi controlate cu urmtoarele funcii:
disp (X) afieaz o matrice sau un text, fr a tipri numele acesteea, unde X
este un ir text sau o matrice;
Exemplificare: Urmtoarea secven de MATLAB duce la afiarea unei
matrice cu etichete de coloane:
Nr. Var1 Var2
disp (Nr. Var1 Var2) 1 5 2
for i= 1:4 2 20 4
y=[i,5*i^2, 2^i]; 3 45 8
end. 4 80 10
clear terge toate variabile din spaiul de lucru (clear X Y Z terge doar
variabilele menionate);
pack compacteaz datele din memorie;
size ntoarce dimensiunea unei matrice;
length returneaz lungimea unui vector.
Exemplificare: Pentru matricea X = [1 2 4; 5 7 9], instruciunile:
b = size(X) b = [2 3] - 1 linie i 4 coloane
[m,n] = size (X) m = 2 - 1 linie
d = length (X) n = 3 - 4 coloane
d = 3 - dimensiunea maxim 4

Prezentare general Matlab 31
Variabile speciale i constante Matlab
Variabilele speciale i constantele au o semnificaie deosebit n MATLAB.
Acestea nu pot fi declarate i sunt accesibile global, n orice fiier-M. Variabilele
speciale nu sunt introduse n mod obinuit, fiind accesibile global n orice fiier-M.
Variabilele speciale i constantele introduse n mod uzual n MATLAB sunt:
ans variabil creat automat, reprezentnd rezultatul unui calcul pentru care
nu s-a alocat un nume;
eps variabil permanent, n care este memorat eroarea relativ pentru
calculele efectuate n virgul mobil (2,2204e-016);
pi variabil permanent, care are alocat valoarea 3,14159265358;
1 = i variabil folosit pentru introducerea numerelor complexe (z =x + iy);
j= 1 alternativ a unitii imaginare, i;
inf variabil folosit pentru reprezentarea lui plus infinit n standardul
IEEE, rezultat al mpririi 1,0/0,0;
NaN variabil folosit pentru reprezentarea lui Not-a-Number (NaN), n
aritmetica IEEE, rezultat al mpririi nedefinite 0,0/0,0;
nargin variabil permanent, pentru testarea numrului argumentelor de
intrare ce trebuie introduse pentru apelarea unei funcii;
nargout variabil permanent, pentru testarea numrului argumentelor de
ieire ale unei funcii;
flops ntoarce numrul de operaii, n virgul mobil, efectuate de
calculator;
computer variabil folosit pentru obinerea informaiilor referitoare la
tipul calculatorului i numrul maxim de elemente pe care le poate gestiona
versiunea de MATLAB;
realmax reprezint cea mai mare valoare pozitiv, n virgul mobil, care
poate fi folosit n calcule (1,7977e+-308);
realmin reprezint cea mai mic valoare pozitiv, n virgul mobil, care
poate fi folosit n calcule (2,2251e+-308);
isieee funcie care returneaz 1, dac computerul lucreaz n standard IEEE
i 0, n caz contrar;
version, ver funcii cu care se determin versiunea MATLAB sau a
toolbox-urilor.
Importul i exportul fiierelor de date
Pentru importul i exportul fiierelor de date sunt urmtoarele funcii mai
importante:
load ncarc varibilele dintr-un fiier de pe disc; sintaxa este load
nume_fiier-format_date (ASCII sau BINAR);
save salveaz variabilele de pe disc ntr-un fiier de date; sintaxa este save
nume_fiier-format_date (ASCII sau BINAR).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 32
2.3. Obiecte Matlab
Matrice, vectori i scalari
MATLAB-ul utilizeaz numai un singur tip de obiecte, matrice numerice
rectangulare, cu elemente reale sau complexe. Astfel, scalarii sunt asimilai
matricelor 1x1 (1linie x 1coloan), iar vectorii sunt asimilai matricelor 1xn sau
nx1.

Cea mai simpl metod de definire a matricelor mici, const n utilizarea unei
liste explicite, respectnd urmtoarele reguli:
- elementele unei linii trebuie separate prin blank-uri sau virgule;
- liniile se separ prin ;;
- elementele matricei sunt cuprinse ntre [].

Astfel secvena A=[1 2; 3 4] ntoarce rezultatul:
A =
1 2
3 4
Pentru matricele mari, la care datele de intrate nu ncap pe o singur linie, se
poate nlocui ; cu Enter, ca n exemplul urmtor:
A =[ 1 2
3 4]
Un alt mod de definire const n apelarea unui fiier de tip ASCII, cu extensia
.m, deja creat. Acest fiier trebuie s fie organizat ca o matrice rectangular
complet:
1 2
3 4
Elementele matricelor pot fi numere reale sau complexe, precum i orice
expresie MATLAB. De exemplu, din secvena : x=[-1.3 sqrt(3) (1+2+3)*4/5],
rezult: x =[ -1.3000 1.7321 4.8000].
Elementul unei matrice x, aflat la intersecia dintre linia i i coloana j este
identificat cu notaia x(i,j). Astfel: a = x(2) a = 1.7321.

Fie A1 i A2 cele dou matrice utilizate. Cu secvena urmtoare:
A1 = [1 2; 3 4] A =
A2 = [5 6; 7 8] 1 2
A = [A1; A2] 3 4
5 6
Prezentare general Matlab 33
Declaraii i variabile
Instruciunile n MATLAB apar sub forma: variabil = expresie. Expresiile
sunt compuse din operatori sau alte caractere speciale, din funcii i nume de
variabile. Dac numele variabilei i semnul egal sunt omise, programul creeaz
automat o variabil cu numele ans, ca n exemplul: 3/4 ntoarce, ans = 0.7500.
Orice instruciune este, n mod normal, terminat cu Enter. Dac ultimul
caracter al acesteia este ; executat, tiprirea nu este executat. Astfel, secvena:
A= [1 2 3; 4 5 6; 7 8 9] ;
introduce matricea A, dar nu o afieaz.
Dac expresia este mai lung i nu ncape pe o linie, se utilizeaz semnul
, urmat de Enter, precizndu-se astfel c instruciunea continu pe
urmtoarea linie. Astfel, instruciunea:
S=1+2+3+
4+5+6;
evalueaz suma celor ase numere i o atribuie variabilei S. Spaiile dintre semnele
=,+, i - i numere sunt opionale.
Numele de variabile i funcii au ca prim caracter o liter, urmat de litere,
cifre sau _. MATLAB reine doar primele 19 caractere din numele variabilei i
face distincie ntre litere mari i mici, deoarece funcia caesesen este activat
automat la activarea programului.
Numere i expresii aritmetice
MATLAB utilizeaz pentru reprezentarea numerelor notaia zecimal
american, cu punct zecimal.
Calculatoarele care utilizeaz aritmetica n virgul mobil IEEE, au precizia
relativ a numerelor eps, aproximat cu 16 cifre semnificative. Limitele
numerelor folosite n MATLAB sunt: 10
-308
i 10
308
.
Operatorii aritmetici utilizai sunt:
+ adunarea;
- scderea;
* nmulirea;
/ mprirea la dreapta;
\ mprirea la stnga (1/4 = 4\1);
^ ridicarea la putere.
Structura programelor Matlab
Fiierele-M conin instruciuni MATLAB i au extensia .m i constau ntr-o
succesiune de instruciuni MATLAB, cu posibilitatea apelrii altor fiiere-M,
precum i a apelrii recursive.
Un program MATLAB poate fi scris sub forma fiierelor script sau
function. Aceste tipuri de fiiere (.m) permit crearea unor funcii noi, care le pot
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 34
completa pe cele deja existente. Prin aceast facilitate, MATLAB-ul poate fi extins
la aplicaii specifice utilizatorului, care are posibilitatea s scrie noi proceduri.
Fiierele script
Este un fiier extern care conine o secven de comenzi MATLAB, executat
n momentul apelrii numelui fiierului. Fiierele script sunt folosite pentru
rezolvarea unor probleme care cer comenzi succesive att de lungi, nct ar putea
deveni greoaie pentru lucrul n mod interactiv. Dup execuia complet a unui
fiier script, variabilele cu care acesta a operat rmn n zona de memorie a
aplicaiei.
Fiierele function
Dac prima linie a fiierului-M conine cuvntul function, fiierul respectiv
este declarat ca fiier funcie (spre deosebire de script n el se poate lucra cu
argumente). Fiierele funcie sunt utilizate pentru extinderea MATLAB, prin
crearea de noi funcii. La terminarea execuiei unei funcii, n memoria
calculatorului rmn doar variabilele de ieire ale acesteea.
Forma general a primei linii a unui fiier funcie este:
function [param_ieire]=nume_funcie(param_intrare)
unde: - function declar fiierul ca fiier funcie;
- nume_funcie numele funciei;
- param_ieire parametrii de ieire trebuie separai cu virgul i cuprini
ntre paranteze drepte;
- param_intrare - parametrii de intrare trebuie separai cu virgul i cuprini
ntre paranteze rotunde.
Exemplificare: Un fiier care calculeaz media aritmetic, numit medie.m:
function m = medie (x)
n=length (x);
m = sum (x)/n;
y = [Media numerelor este: , num2str(m) ];
disp (y).
2.4. Instruciuni i funcii de control
Instruciuni de control logic
Matlab prezint urmtoarele instruciuni de control logic:
if - instruciunile pentru execuia condiionat;
else instruciune asociat if;
elseif - instruciune asociat if;
for instruciune pentru crearea ciclurilor cu numr specificat de pai;
while instruciune pentru crearea ciclurilor cu condiie logic;
Prezentare general Matlab 35
break instruciune pentru terminarea forat a unui ciclu;
return returneaz execuia la funcia precizat;
error instruciune pentru afiarea unui mesaj de eroare;
end instruciune pentru nchiderea ciclurilor for, while i if.
Operatori relaionali i logici
n cazul unui algoritm este uneori nevoie de o selecie a grupului de
instruciuni a cror execuie este condiionat de valoarea de adevr a unei expresii.
Instruciunile condiionale utilizeaz operatori relaionali i logici.
Operatorii relaionali compar dou matrice, element cu element, returnnd o
matrice de aceeai dimensiune cu a matricelor care se compar, cu elementele 1,
cnd relaia este ADEVRAT i 0 cnd este FALS.


Operatori relaionali Semnificaie
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
= = identic
- = diferit


Pentru combinarea a dou sau mai multe expresii logice se utilizeaz
operatori logici.


Operatorii logici Simbol MATLAB Prioritatea
NU _ 1
I & 2
SAU | 3

MATAB conine funcii pentru testarea unor condiii relaionale i logice n
tablouri de date sau matrice.
Acestea sunt des utilizate, asociate cu instruciunea if:
exist- verific dac variabilele sau funciile argument sunt definite;
any-testeaz dac cel puin un element al unei matrice verific o condiie
logic;
find - returneaz indicii elementelor diferite de zero;
isnan - testeaz dac elementele unei matrice sunt NaN;
isinf - testeaz dac elemntele unei matrice sunt infinite;
finite testeaz dac elementele unei matrice sunt finite.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 36
Caractere speciale
Caracterul : sau colon este larg utilizat pentru:
a genera valori cu pas liniar constant sau cu pas constant dat;
a selecta o matrice, rndul sau coloana acesteia;
producerea unei liste de argumente.

Parantezele rotunde, simbolizate prin ( ), sunt folosite:
n calculele aritmetice sau logice, pentru a grupa operaiile i unde in
locul tuturor tipurilor de paranteze (rotunde, drepte, acolade);
pentru a indica elementul unui vector sau matrice ;
pentru a grupa argumentele unei funcii.

Parantezele drepte, simbolizate prin [ ], sunt utilizate pentru:
formarea vectorilor i matricelor, prin indicarea elementelor acestora;
stocarea unei matrice goale;
schimbarea unui rnd sau coloane dintr-o matrice;
concatenarea vectorilor i a matricelor.

Caracterul @ este utilizat pentru a crea o funcie implicit, apelabil ca i o
variabil.

Punctul, cu simbolul . este folosit pentru:
scrierea numerelor zecimale;
operaii cu tablouri, pentru a indica c operatorii de nmulire, de
ridicare la putere, de mprire la dreapta, de mprire la stnga, sau de
transpunere, lucreaz element cu element ;
n cmpuri de acces, cnd se lucreaz cu structuri.

Atribuirea unei variabile Var a valorii unei expresii se realizeaz prin
utilizarea semnului egal, =.

3. FUNCII DE BAZ N UTILIZAREA MATLAB
3.1. Funcii ce furnizeaz informaii generale despre
MATLAB
Aceste funcii sunt :
help care furnizeaz informaii generale despre MATLAB i funciile
acestuia, avnd urmtoarele posibiliti:
tastnd help, se obine o list a tuturor directoarelor din cile
de lucru MATLAB;
help topic, unde topic poate fi o comand sau un director.
Dac topic este o comand, help prezint informaii despre
acea comand, iar dac este nume de director, prezint un
tabel cu funciile coninute n acesta. De exemplu, help exp
prezint coninutul helpului funciei exponeniale.
helpwin deschide o fereastr pentru navigare:
helpwin topic deschide o fereastr help i prezint pe display
textul help pentru topica dat. Conexiunile sunt create pentru
funciile la care se face referire n liniile funciei specificate.
helpdesk deschide o pagin Web, care trimite (pe Internet) la helpul
MATLAB ;
demo ruleaz programe demonstrative, precum demo toolbox signal
sau demo matlab language;
ver ofer informaii despre versiunea programelor MATLAB,
SIMULINK i TOOLBOX (pachete de funcii specializate pentru un
anumit subdomeniu);
whatsnew prezint fiierele readme, care conin informaii utile despre
funcii sau toolbox;
readme prezint noutile din versiunea actual a MATLAB,
SIMULINK, TOOLBOX sau o anumit funcie specific.
La apelarea funciei help nume, se afieaz, pentru programele existente n
Matlab, prima linie a fiierelor coninute n calea de cutare, care sunt citite din
fiierul contents.m al acestuia. Dac nume este numele unui director, se afieaz
liniile de comentariu ale fiierului contents.m, localizat n acest director. Dac
fiierul contents.m nu are comentariu, funcia help afieaz toate fiierele
coninute n director. Dac nume este numele unei funcii, instruciunea help
afieaz liniile primului comentariu al fiierului respectiv. Aceste linii de
comentariu conin %, ca prim semn i se termin printr-o linie goal sau o linie
de comand.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 38
3.2. Funcii pentru manipularea spaiului de lucru
MATLAB
Pentru manipularea variabilelor din spaiul de lucru MATLAB se utilizeaz
urmtoarele funcii specifice:
who prezint o list a variabilelor curente din spaiul de lucru iar who
global variabilele din spaiul de lucru global ; who a* listeaz toate
variabilele din spaiul de lucru care ncep cu a; who file nume fiier
listeaz variabilele din fiierul. Mat, specificat prin nume fiier.
whos este asemntoare cu who, dar listeaz variabilele curente n
format long, incluznd dimensiunea, numrul de bii i clasa acestora,
ca de exemplu :
Name Size Bytes Class
a 1x5 40 double array
b 1x5 40 double array (sau poate fi
complex)
clear terge din memorie toate variabilele i funciile sau numai
variabilele (clear variabile), ori funciile (clear funcie) ;
pack compacteaz memoria spaiului de lucru, salveaz toate
variabilele pe disc, terge variabilele din memorie i apoi le rencarc
(este de preferat mrirea memoriei virtuale din Windows - Control
Panel). De menionat c, n timpul utilizrii MATLAB-ului se creeaz
i se terg continuu variabile din memoria calculatorului, astfel nct
zona de memorie continu neocupat se reduce, ceea ce poate face
imposibil stocarea unei variabile mari, dar mai mic dect cea total
disponibil, astfel c poate s apar mesajul Out of memory, ce face
necesar comanda pack.
load ncarc variabilele din fiierul de date matlab.mat pe disc, avnd
urmtoarele cazuri particulare :
load nume_fiier ncarc datele din fiiere n format binar,
cu extensia *.mat;
load nume_fiier .ext-mat ncarc datele din fiiere n format
binar, cu extensie;
load nume_fiier -ascii ncarc datele din fiiere n format
ASCII, fr extensie;
load nume_fiier .ext-ascii ncarc date ASCII cu extensie.
save salveaz variabilele din spaiul de lucru pe disc n fiierul
matlab.mat, avnd urmtoarele cazuri particulare:
save nume_fiier salveaz toate variabile din spaiul de lucru
n fiierul nume_fiier.mat;
save nume_fiier A B C salveaz numai variabilele A B C
Funcii Matlab de interes general 39
din spaiul de lucru, n fiierul nume_fiier.mat;
save nume_fiier.ext A B C - ascii salveaz n format ASCII
cu 8 digii, numai variabilele A B C din spaiul de lucru, n
fiierul nume_fiier.ext;
save nume_fiier.ext A B C ascii - double salveaz n
format ASCII cu 16 digii, numai variabilele A B C din spaiul
de lucru, n fiierul nume_fiier.ext;
save nume_fiier.ext A B C ascii double -tabs salveaz n
format ASCII cu 16 digii, numai variabilele A B C, separate
prin TAB-uri, n fiierul nume_fiier.ext.
quit nchide MATLAB ,fr a salva spaiul de lucru .
3.3. Manipularea comenzilor i a funciilor
Pentru manipularea comenzilor i a funciilor se utilizeaz urmtoarele funcii
specifice:
what prezint fiierele specifice MATLAB dintr-un director. Funcia
what prezint de asemenea fiierele cu extensie *.m, *.mat, *.mex din
directorul curent de lucru. Apelat singur, funcia what prezint
fiierele *.mex din directorul c:\MATLAB\bin.
type fiier_nume.m listeaz fiierul specificat, asemntor cu aceeai
comand din Dos.
edit creeaz o nou fereastr de editare, iar edit fiier.extensie deschide
fiierul text specificat; de regul extensia este m sau txt.
open nume_fiier deschide fiierul specificat;
which nume_fiier localizeaz funcia sau fiierul al crui nume este
specificat.
lookfor returneaz toate fiierele cu extensia .m din directorul Matlab,
iar lookfor cuvinte_cutate_n_prima_linie_de_help returneaz numai
acele fiiere care au n prima linie a helpului lor cuvntul respectiv.

De exemplu, instruciunea which ifft returneaz C:\MATLAB\toolbox\
matlab\datafun\ifft.m, iar instruciunea lookfor ifft returneaz:
IFFT Inverse discrete Fourier transform.
IFFT2 Two-dimensional inverse discrete Fourier transform.
IFFTN N-dimensional inverse discrete Fourier transform.
IFFTSHIFT Inverse FFT shift.
vifft.m: % function yout = vifft(yin)
inmem listeaz funciile din memorie. De exemplu, dac dup o
instruciune de tergere (clear all), se tasteaz instruciunea de calcul a
erorii, erf(0.5), atunci m=inmem returneaz toate funiile m.file
utilizate pentru calculul erf, respectiv
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 40
m =
'repmat'
'erfcore'
'erf'.
mex compileaz funciile de tip mex, putnd s i le editeze, n funcie
de parametrii introdui;
pcode fun1.m, care creeaz un pseudocod din funcia de tip m, func1.m,
dorit.
3.4. Manipularea i cutarea cilor de lucru
Principala funcie care controleaz cile de cutare este path. Aceasta
constituie mediul variabil al sistemului de operare, n care se pot predefini, pot fi
schimbai sau pot fi adugai directorii proprii, n calea de cutat. Instruciunea
p=path afieaz setarea cilor de cutare curente ale MATLAB-ului, setat n
fiierele startup.m sau matlabrc.m. Fiierul matlabrc.m este apelat automat, la
lansarea n execuie a Matlab-ului, iar fiierul startup.m poate fi apelat la lansare,
permind apelarea unor fiiere suplimentare, care s condiioneze lansarea
propriu-zis.
Dac se dorete schimbarea cii de cutare, la una precizat n variabila p,
atunci se execut instruciunea path(p).
Adugarea unei noi ci, notate cu pnou, la cele existente p (operaie numit
concatenarea cilor de cutare p cu pnou) se face cu instruciunea: path(p,pnou).
Instruciunea path(path,pnou) adaug calea pnou la cele existente, iar instruciunea
path(pnou,path) renun la calea pnou.
De exemplu, cu instruciunea path(path,C:\MATLAB\Lucru) se adaug o
nou cale de cutare (C:\MATLAB\Lucru) la cele existente.

Instruciunea addpath nume_director adaug la calea de cutare ntregul
director; de exemplu, adugarea directorului work, din driverul D, la calea de
cutare, se face cu instruciunea addpath d:\work.
tergerea unui director din calea de cutare se realizeaz cu instruciunea
rmpath nume_director; de exemplu, tergerea din calea de cutare a directorului
work, din driverul D, se execut cu instruciunea rmpath d:\work.

Modificarea cii de cutare, prin interfaa grafic (GUI) se execut tastnd
instruciunea editpath, care deschide Path Browser, iar adugarea sau tergerea se
realizeaz prin clicarea mouse-ului, poziionat pe Path, i apoi pe Add to path
(pentru adugare) sau Remove from Path (pentru tergere).
Prsirea sesiunii de lucru Matlab se poate face prin comenzile exit sau quit,
scrise explicit sau nchiderea pur si simplu a programului. Acest procedeu de
prsire a unei sesiuni de lucru determin pierderea variabilelor din aplicaia
curent.
Funcii Matlab de interes general 41
3.5. Controlul ecranului, a directoarelor i a
sistemului de operare
Funcia echo permite afiarea n timpul apelrii pentru rulare, a tuturor
programelor de tip m apelate (pentru echo on) sau renunarea la derularea pe
monitor a instruciunilor (pentru echo off). Atunci cnd se dorete s fie vizualizat
numai un singur program, se utilizeaz instruciunea echo program on.
tergerea ecranului se realizeaz cu instruciunea clc, iar poziionarea
cursorului n locaia corespunztoare primei linii i primei coloane de pe monitor se
realizeaz cu instruciunea home.
Pentru controlul numrului de linii afiate pe ecran se utilizeaz instruciunea
more. Afiarea succesiv a n linii dintr-un program sau matrice de date, se execut
cu instruciunea more(n). Cu tasta Enter se trece la urmtoarea secven, de n
linii, iar cu tasta q se prsete modul de afiare, cu numr impus de linii.

Salvarea pe disc a sesiunii de lucru (comenzile introduse de la tastatur i
rspunsurile sistemului Matlab) se face cu instruciunea diary nume_fiier, fiierul
fiind de tip ASCII. nchiderea fiierului nume_fiier se face cu instruciunea diary
off, iar dac acesta exist deja, atunci sesiunea de lucru se anexeaz la sfritul
acestuia.
Fiierul format se poate deschide cu Notepad sau pe ecranul sesiunii
Matlab, tastnd instruciunea (existent i n Dos) type nume_fiier. Dac nu a fost
specificat nume_fiier, funcia diary nregistreaz sesiunea de lucru ntr-un fiier,
cu nume implicit diary.
Funcia dir afieaz numele fiierelor din directorul curent sau din cel
precizat, ca argument n instruciunea dir precizat.
tergerea unui fiier (text sau grafic) se realizeaz cu instruciunea delete
nume_fiier. Instruciunea lucreaz asemntor ca i n Dos sau Windows, astfel
nct se pot terge toate fiierele avnd o anumit extensie, prin comanda delete
*.extensie. Se precizeaz c aceste fiiere, o dat terse, nu mai pot fi refcute de o
instruciune, precum undelete, sau din Recycle Bin.
Funcia cd returneaz numele directorului curent, dac se apeleaz cu sintaxa
cd, revine spre rdcin cu instruciunea cd.., sau schimb directorul, dac se
apeleaz cu instruciunea cd cale\nume_director.
Returnarea numelui directorului curent se poate face i cu instruciunea pwd,
iar atunci cnd numele se asociaz cu o variabil s, se tasteaz s=pwd, la care se
rspunde, de exemplu:
s =
C:\MATLAB\bin.

MATLAB-ul utilizeaz pentru reprezentarea numerelor notaia zecimal
convenional, cu punct zecimal. Puterea este un factor de scal inclus ca sufix, ca
i n notaia tiinific. Printre posibilele reprezentri ale numerelor n Matlab
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 42
avem:
3 -978 0.0001
9.6789875 1.52163e-021 4.12345e011.
Calculele care utilizeaz aritmetica n virgul mobil IEEE, au precizia
relativ a numerelor eps, aproximat cu 16 digii (semne) semnificativi, ca de
exemplu: 1.797693134862316e+308. Limitele numerelor folosite n Matlab sunt:
10
-308
< numar < 10
308
.

MATLAB-ul permite utilizatorului dou moduri de control al afirii datelor
pe ecran, respectiv a numrului de cifre i spaierea dintre ele. La lansarea Matlab,
afiarea numerelor se face n format scurt, cu 5 cifre semnificative.
Trecerea de la un format la altul se poate face fie selectnd succesiv,
File/Preferences/Numeric Format/Opiune (n versiunea 5) sau Option/Numeric
Format/Opiune (n versiunea 4), fie tastnd comanda format opiune, unde
opiune poate fi una dintre variantele: Short / Long / Short e / Long e / Short g /
Long g / Hex / Plus (ori +) / Bank / Rat.
Formatele de afiare din opiune sunt exemplificate mai jos:

Opiune Rezultat Exemplu
Short Maximum 7 cifre semnificative dintre
care max. 4 cifre zecimale
17.1717
Long 15 cifre zecimale semnificative i max.
3 pentru partea ntreag i semn
17.171717171717171
Short e 5 cifre semnificative + exponent 1.7172e+001
Long e Semn + 1cifr ntreag + 15 cifre
zecimale + exponent
1.717171717171717e+001
Short g 5 cifre semnificative i numai dac este
necesar i exponent
17.172
Long g 15 cifre semnificative i pe ct posibil
fr scriere exponenial + exponent,
dac este strict necesar
17.1717171717172
Hex hexazecimal 40312BF5A814AFD7
Plus (+) + pentru valorile pozitive, - pentru
negative sau zero.
Partea imaginar este ignorat
+
Bank Dou zecimale 17.17
Rat Expresie raional 1700/99

Dac toate elementele unei matrice sunt numere ntregi, atunci matricea este
afiat ntr-un format fr zecimale. Cnd cel puin un element nu este numr
ntreg, formatul de afiare este ales automat, pentru a putea prezenta toate
elementele, dac nu a fost preselectat un anumit format dintre cele de mai sus.
Pentru formatele short i long, dac cel puin un element al matricei este mai
Funcii Matlab de interes general 43
mare dect 1000 sau mai mic dect 0.001, afiarea se face cu un factor de scal
comun pentru toate elementele.
Instruciunea format compact suprim liniile libere i afieaz rezultatele
ntr-un format mai compact, iar format loose afieaz rezultatele ntr-un mod mai
degajat, cu linii libere.

Copierea unui fiier surs, ntr-un fiier destinaie, se face cu instruciunea
copyfile (surs, destinaie). De menionat c att fiierul surs, ct i cel destinaie
se gsesc n directorul de lucru. Dac se dorete specificarea explicit c destinaia
este un fiier ce poate fi doar citit, atunci se tasteaz instruciunea copyfile(surs,
destinaie, 'read'). Controlul operaiei se realizeaz cu instruciunea
status=copyfile(), care returneaz 1, dac fiierul este copiat sau 0, altfel.

Instruciunea getenv('nume') caut n spaiul de lucru variabila caracter nume,
returnnd ' ' dac aceasta exist.
Pentru a crea un nou director, n directorul curent, se utilizeaz instruciunea
mkdir(nume_director), iar crearea directorului n unul existent se realizeaz cu
instruciunea mkdir(director_existent, nume_director).

Executarea comenzilor Dos, fr prsirea Matlab-ului, se face cu comanda
! sau dos. Semnul de exclamare !, plasat la nceputul unei linii de program
Matlab, indic mediului de programare c urmtoarele linii de intrare sunt
introduse din sistemul de operare Dos. Executarea unei comenzi Dos (de exemplu
deschiderea editorului DOS 5.0 din DOS Windows) se poate face cu instruciunea!
edit &, sau dos('edit &'), iar deschiderea editorului Notepad, cu returnarea
controlului imediat la Matlab, se poate realiza cu instruciunea dos('notepad file.m
&'). Comanda corect returneaz n Matlab ans =0.
Instruciunea web deschide browserul de dialog Internet, specificat n URL
(Uniform Resource Locator). De exemplu, web http://www.mathworks.com
ncarc adresa The MathWorks Web n browser, iar web mailto:email_address
permite citirea e-mailului.
Pentru obinerea informaiilor referitoare la tipul calculatorului i numrului
maxim de elemente pe care le poate gestiona versiunea respectiv de Matlab, se
utilizeaz instruciunea, [calculator, elemente] = computer, obinndu-se:
calculator = PCWIN (PC lucrnd sub Windows); elemente = 268435455.
3.6. Funcii de control ale datelor i ale timpului
Funcia date citete data din Setup-ul calculatorului i o returneaz sub form
de semne, n formatul dd-mmm-yyyy, unde dd-ziua, mmm-luna, yyyy-anul. De
exemplu, dup tastarea instruciunii date, se obine ans= 29-Oct-2004.
Funcia clock returneaz un vector linie, de ase elemente, coninnd data i
timpul n format zecimal, aezate n ordinea [year month day hour minute seconds].
De exemplu, la tastarea clock, se obine 2000 10 29 22 27 39.33, iar dac se
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 44
utilizeaz instruciunea fix(clock), atunci secundele sunt rotunjite la valoare
ntreag.
Convertirea unei serii de date numerice D, n semne puse sub un anume
format, specificat n DATEFORM, se face cu instruciunea datestr
(D,DATEFORM). Semnele sunt n acord cu cele din DATEFORM (tabelul de mai
jos), iar dac lipsesc se consider implicit 1, 16 sau 0, dup cum D conine data i
timpul. De exemplu: n = datenum('19-May-1995') returneaz n = 728798; n =
datenum(1994,12,19) returneaz n = 728647; n = datenum(1994,12,19,18,0,0)
returneaz n = 728647.75.
Acest numr, n ,este dat i de funcia now, care afieaz data i timpul ca
numr, pus sub forma zi-lun-an or:minit:secund, prin comanda datestr(now).
Inversa acestei funcii, cea care convertete un set de date n semne (strings),
este datetick.

Numr DATEFORM Semnul DATEFORM Exemplu
0 'dd-mmm-yyyy
HH:MM:SS'
01-Mar-2000
15:45:17
1 'dd-mmm-yyyy' 01-Mar-2000
2 'mm/dd/yy' 03/01/00
3 'mmm' Mar
4 'm' M
5 'mm' 3
6 'mm/dd' 03/01
7 'dd' 1
8 'ddd' Wed
9 'd' W
10 'yyyy' 2000
11 'yy' 00
12 'mmmyy' Mar00
13 'HH:MM:SS' 15:45:17
14 'HH:MM:SS PM'
3:45:17 PM
15 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM
17 'QQ-YY' Q1-00
18 'QQ' Q1

Gsirea datei, ca numr ntr-o serie de zile, unde ziua 1 corespunde la 1
ianuarie anul 0, se realizeaz cu instruciunea datenum(S), unde S este un semn
DATEFORM, ca mai jos. De exemplu: n = datenum('19-May-1995') returneaz n
= 728798; n = datenum(1994,12,19) returneaz n = 728647, iar n = datenum
(1994,12,19,18,0,0) returneaz n = 728647.75.
Funcii Matlab de interes general 45
Funcia datevec(semn) returneaz componentele datei cuprinse n semn, care
este dat sub una dintre formele din tabelul prezentat anterior. De exemplu, dac d =
'12/24/1984' i t = 725000.00, atunci c = datevec(d) sau c = datevec(t) produce c =
[1984 12 24 0 0 0], iar [y,m,d,h,mi,s] = datevec(d) returneaz y=1984, m=12,
d=24, h=0, mi=0, s=0.

Funcia eomday(an,lun) returneaz ultima zi din luna anului introdus. De
exemplu, eomday(2001,2) returneaz 28.

Pentru gsirea zilei din sptmn, se utilizeaz instruciunea [D,W] =
weekday(T), unde ,T, este semnul coninnd data, iar ,D, este asociat conform zilei
din sptmn astfel: 1-Sun; 2-Mon; 3-Tue; 4-Wed; 5-Thu; 6-Fri; 7-Sat. De
exemplu [d,w] = weekday(728647) sau [d,w] = weekday('19-Dec-1994')
returneaz d = 2 i w = Mon.

Funcia calendar(an,lun) returneaz o matrice de 6 pe 7, coninnd
calendarul lunii din an specificat (prima zi fiind smbt) sau din luna curent,
dac se tasteaz numai calendar. De exemplu, calendar(2000,10) produce pe
ecran
Oct 2000
S M Tu W Th F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 0 0 0 0
0 0 0 0 0 0 0.

Determinarea timpului de calcul al procesorului (CPU), n secunde, se
realizeaz cu instruciunea cputime, apelat n secvena t=cputime; pentru calculul
msurat ca timp se utilizeaz cputime-t, ca de exemplu:
t=cputime; tfph(100,500) ; x=cputime-t
x =
0.1600.

Pentru pornirea cronometrului sistemului de calcul se utilizeaz funcia tic,
iar pentru oprirea cronometrului, funcia toc. Aceste funcii se utilizeaz mpreun
n secvena tic; operaia msurat ca timp; t=toc, ca de exemplu:
tic; tfph(100,500); x=toc
x =
0.1000.

Cronometrarea intervalului de timp dintre dou evenimente se realizeaz cu
funcia etime. Intervalul se msoar dintre timpul iniial, t0, i timpul final ,t1, cu
funcia clock, iar cei doi vectori (t0, t1) au 6 elemente, respectiv [An Lun Zi Or
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 46
Minut Secund]. Secvena de instruciuni este:
t0 = clock; operaie msurat; t1=etime(clock,t0),
ca de exemplu:
t0=clock; tfph(100,500); t1=etime(clock,t0)
t1 =
0.1100.

Introducerea unor pauze, nainte de executarea unor instruciuni, se realizeaz
prin funcia pause(n), unde, n, este numrul de secunde de pauz.
Dac ntr-un program se gsesc astfel de instruciuni i se dorete anularea
aciunii acestora, se tasteaz pause off, iar reconsiderarea efectului acestei
instruciuni se realizeaz prin pause on.
3.7. Instruciuni pentru depanarea programelor
Programele de tip, funcie.m, pot avea anumite erori de scriere n limbaj
Matlab astfel c, uneori, este necesar s se apeleze i la instruciuni specializate,
care s indice erorile pe care nu le putem observa la citirea programului.
Instruciunea debug listeaz toate comenzile utile depanrii programelor.
Oprirea temporar a execuiei unei funcii de tip m (de exemplu func1.m),
pentru a examina local, ca i cnd instruciunile ar fi introduse de la tastatur, se
execut prin instruciunea dbstop, apelat sub una dintre cele ase forme:
dbstop in func1.m at linia_numr, care are ca efect oprirea execuiei la
linia indicat, prin numrul anterior;
dbstop in func1.m at subfun, care are ca efect oprirea execuiei la
apelarea subfunciei indicate n interiorul funciei principale;
dbstop in func1.m, avnd ca efect oprirea execuiei la prima linie,
executabil din func1.m;
dbstop if error, ce are ca efect oprirea execuiei, dac apare o eroare;
dbstop if warning, are ca efect oprirea execuiei la apariia unei erori
minore, de avertizare;
dbstop if naninf sau dbstop if infnan cauzeaz oprirea execuiei, dac
din execuie este obinut o valoare infinit (Inf) sau este ntlnit o
operaie ilegal (NaN).

De menionat c prepoziiile at, in, if sunt opionale.
Anularea instruciunii dbstop se face prin funcia dbclear, ntlnit sub opt
forme:
dbclear in func1.m at linia_numr, ce are ca efect anularea comenzii
dbstop corespunztoare;
dbclear in func1.m at subfun, care anuleaz comanda dbstop
corespondent;
dbclear all in func1.m ce are ca efect anularea efectului oricrei
Funcii Matlab de interes general 47
comenzii dbstop, relativ la funcia func1.m;
dbclear in func1.m anuleaz numai prima comand dbstop;
dbclear all anuleaz toate comenzile dbstop;
dbclear if error i dbclear if warning care anuleaz comanda dbsop,
rednd controlul n spaiul de lucru;
dbclear if naninf sau dbclear if infnan anuleaz comanda dbstop
corespunztoare.

Pentru a continua execuia, dup ntlnirea unei instruciuni dbstop sau
dbstep, se utilizeaz funcia dbcont, care are efect pn la urmtoarea instruciune
de oprire.
Schimbarea spaiului de lucru, cnd se lucreaz n modul debug, se face cu
instruciunile dbdown i dbup.
Prezentarea comenzii de debug, ntlnit ntr-o funcie de tip m, se face cu
instruciunea [st,i]=dbstack, unde ,st, este numele funciei, iar ,i, linia din program
(aceasta este negativ, dac nu exist nici o funcie).
Listarea tuturor instruciunilor de debug prezente se realizeaz prin comanda
dbstatus.

Executarea, pas cu pas, a unei funcii program se realizeaz cu instruciunea
dbstep, apelat sub trei forme:
dbstep, prin care programul se execut linie dup linie;
dbstep nr_linii, prin care se execut un numr de linii specificat;
dbstep in subfunct, prin care subfuncia chemat este executat pas cu
pas.

Listarea numrului de linii asociate prin debug, unei funcii date, se face prin
instruciunea dbtype funcia_dat sau dbtype funcia_dat lstart:lend, unde lstart
este linia de la care se afieaz (listeaz) pe ecran, iar lend este linia pn unde se
afieaz.
Prsirea modului de lucru debug se realizeaz tastnd comanda dbquit, care
red comanda spaiului de lucru, fr a termina depanarea programului.
Modificarea contextului spaiului de lucru curent, pentru lucru n modul
debug, se realizeaz cu instruciunea dbup.
3.8. Instruciuni ce furnizeaz informaii despre
profilul funciilor executate
Profilul funciilor executate este evideniat prin funcia profile, apelat cu
instruciunea,
profile on
care pornete gsirea profilului i terge nregistrrile anterioare, referitoare la
profil.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 48
Dup funcia profile, pot urma unul sau mai multe argumente, care s
detalieze acest profil, la un anumit nivel (level),
profile on detail level
n care level poate fi:
mmex (sau lipsi n mod normal), cnd se dau informaii despre funciile
de tip M, subfunciile de tip M, funciile de tip MEX;
builtin, cnd se dau informaii i despre funciile interne;
operator, cnd se dau informaii i despre operatorii interni precum +,
-, :, ^.
Ieirea total din acest mod de lucru se face prin comanda profile off.

Funcia profil viewer oprete cutarea profilului i deschide browser-ul
grafic al profilului, care este un fiier HTML.
Considernd secvena de instruciuni,
profile on -detail builtin
hfpt(100,500)
profile viewer
se obine profilul care d urmtoarele informaii:
data generrii, de exemplu Generated 17-Nov-2004 11:34:00;
numrul de fiiere chemate, de exemplu ,Number of files called: 11;
un tabel, cupriznd 5 coloane: Filename, File Type, Calls, Total
TimeTime, Plot.
Prin clicarea mouse-ului pe numele funciei, se obin informaii pentru fiecare
linie a programului, astfel:
Coloana 1 (red), prezint timpul total de execuie a liniei, n secunde;
Coloana 2 (blue), evideniaz numrul de chemri ale liniei;
Coloana 3 prezint informaii referitoare la faptul, dac comanda este
accelerat (semnul ".") sau neaccelerat (semnul "x");
Coloana 4 d numrul liniei.

tergerea informaiilor referitoare la profilul anterior memorat se execut prin
comanda profile clear.

Generarea raportului privind funciile apelate, durata de timp total i pe
instruciune, se realizeaz cu comanda profile report.
4. OPERATORI I CARACTERE SPECIALE MATLAB
4.1. Declaraii i variabile
Matlab-ul este un limbaj de expresii, care sunt introduse i interpretate. Deci,
MATLAB-ul este un limbaj care interpreteaz i evalueaz instruciunile introduse
de utilizator. Aceste instruciuni au, de cele mai multe ori, forma:
Variabil=expresie
sau, mai simplu:
expresie.
Expresiile sunt compuse din operatori sau alte caractere speciale, din funcii
i nume de variabile.
Terminarea unei instruciuni, introdus de la tastatur, se realizeaz prin
apsarea tastei Enter, dup care, limbajul MATLAB execut instruciunea
introdus.
Pe ecran este afiat rezultatul expresiei (de exemplu, 3/4) sub forma:
Variabil =
0.7500.
Atunci cnd expresia este aa de mare nct nu ncape pe o singur linie, se
utilizeaz semnul (trei puncte), urmat de Enter, pentru a preciza c
instruciunea continu pe linia urmtoare. Astfel, instruciunea:
S=1+2+3+4
5+6+7+8
evalueaz suma celor 8 numere i rspunde:
S=
36.
Spaiile dintre semnele =, +, - i numere, sunt opionale.
Dac numele variabilei i semnul egal (Variabil =) sunt omise, Matlab-ul
creeaz automat o variabil ans, creia i atribuie valoarea expresiei evaluate, ca
de exemplu:
ans =
0.7500.
Prin urmare, o variabil introdus fr nominalizare este atribuit variabilei
ans (answer).
n variabila ans este memorat n permanen valoarea ultimei variabile
creia nu i s-a atribuit un nume.
Pe de alt parte ,n urma instruciunilor succesive:
a=10;
a=20;
n variabila a se afl valoarea 20.
Dac ultimul caracter al acesteia este ; instruciunea este executat, dar
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 50
afiarea pe ecran (tiprirea) este suprimat.
Numele de variabile i funcii au ca prim caracter o liter, urmat de litere,
cifre sau caracterul _ (liniu de subliniere). Dei se pot folosi oricte caractere,
Matlab-ul reine ca nume de variabile numai primele 19 caractere.
Matlab-ul face deosebirea ntre literele mari i mici, astfel nct a i A
sunt dou variabile distincte. Funcia casesen permite trecerea Matlab-ului n
modul senzitiv/nesenzitiv, n vederea separrii literelor mari de cele mici. Numele
de funcii este obligatoriu s fie redate cu litere mici. La lansare, Matlab-ul
lucreaz n modul senzitiv, adic face distincia ntre literele mari i cele mici, dar
cu comanda,
casesen off
trece n modul nesenzitiv, iar revenirea se face cu comanda:
casesen on.
4.2. Operatori aritmetici
MATLAB-ul utilizeaz operatorii aritmetici consacrai cunoscui.
Operaiile aritmetice dintre doi scalari sunt cele prezentate n tabelul 4.1.
Tabelul 4.1
Forma operatorilor MATLAB pentru scalari
Operaia Forma algebric Forma MATLAB
Adunarea a+b a+b
Scderea a-b a-b
nmulirea a x b a*b
mprirea la dreapta a:b a/b
mprirea la stnga b:a a\b
Ridicarea la putere a
b
a^b

Expresiile aritmetice pot fi evaluate i rezultatul memorat n variabilele
specificate. Dac, de exemplu
a=5 ;
b=6 ;
atunci,
a+b
ans =
11
a-b
ans =
-1
Operatori i caractere speciale Matlab 51
a*b
ans =
30
a/b
ans =
0.8333
b\a
ans =
0.8333
a^b
ans =
15625.

Limitele variabilelor memorate au un interval foarte mare, fiind cuprinse
ntre o valoare minim, realmin (adesea 10
-308
) i o valoare maxim, realmax
(adesea 10
308
). Uneori, este posibil ca rezultatul unei expresii s depeasc aceste
limite, iar valoarea calculat nu poate fi memorat.
Dac rezultatul unui calcul este mai mic dect 10
-308
, calculatorul
nregistreaz valoarea zero, iar dac este mai mare dect 10
308
,se nregistreaz
(n Matlab se returneaz Inf).
Rezultatul mpririi cu zero este, firesc, , iar n acest caz se afieaz
mesajul de atenionare,
Warning: Divide by zero.
ans =
Inf
i calculele continu cu operandul .

Ordinea operaiilor n MATLAB este aceeai cu cea a operaiilor aritmetice
standard, cunoscut din matematica elementar, respectiv:
1 parantezele;
2 ridicarea la putere;
3 nmulirea i mprirea ;
4 adunarea i scderea.

Operatorul + semnific adunarea din aritmetic, respectnd regulile
cunoscute. Astfel, doi scalari se adun pur i simplu:
4+5
ans =
9.

Calculele aritmetice asupra tablourilor de date MATLAB pot fi operaii
dup regulile calculului matriceal (adic operaii cu matrice) sau operaii dup
regulile calculului scalar (adic operaii cu tablouri). Operatorii folosii n calculele
aritmetice cu tablouri i matrice sunt prezentai n tabelul 4.2.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 52
Operaiile cu tablouri sunt operaii aritmetice ntre elementele situate n
aceeai poziie a tablourilor, cunoscute sub numele de operaii element cu element.
Pentru efectuarea operaiilor cu tablouri se folosesc aceiai operatori ca n
operaiile cu scalari, precedai de semnul punct, ., semn ce indic efectuarea
operaiilor n ordinea element cu element. Dac unul dintre operanzi este un scalar,
acesta opereaz cu fiecare element al tabloului.
Atunci cnd n stnga se afl un scalar, ntre acesta i operatorii care au n
componen punctul (.*, .^, ./, .\) se las un blank pentru a nu interpreta punctul
care indic operarea cu tablouri ca punct zecimal.
Tabelul 4.2.
Operatori aritmetici MATLAB
Operaia Scalari Matrice Tablouri
Adunarea + + +
Scderea - - -
nmulirea * * .*
mprirea la dreapta / / ./
mprirea la stnga \ \ .\
Ridicarea la putere ^

^ .^
Transpunerea .

Pentru exemplificarea calculelor cu tablouri se consider matricele A, B i
scalarul p, dai de:
A=[1 2 3]; B=[4 5 6]; p=7.
Matricele diferen se calculeaz cu secvenele Matlab,
C=A-B; D=A-p; E=p-A; F=A-B-p;
iar rezultatele sunt:
C = [ -3 -3 -3]; D=[ -6 -5 -4]; E=[ 6 5 4] ; F=[ -10 -10 -10].
Matricele sum se calculeaz cu secvenele Matlbab,
C=A+B; D=A+p; E=p+A; F=A+B+p;
iar rezultatele sunt:
C = [5 7 9]; D=[ 8 9 10]; E=[ 8 9 10] ; F=[ 12 14 16].
Considernd matricele A i B ca tablouri, se poate exemplifica nmulirea
acestora, prin secvenele Matlab,
C= A.*B; D=A.*p; E=p.*A; F=p.*A.*B;
iar rezultatele sunt:
C = [4 10 18]; D=[ 7 14 21]; E=[ 7 14 21] ; F=[ 28 70 126].
Operaia de mprire la dreapta, element cu element, a matricelor A i B,
considerate ca tablouri, se poate exemplifica prin secvenele Matlab,
C= A./B; D=A./p; E=p./A; F=p./A./B;
Operatori i caractere speciale Matlab 53
iar rezultatele sunt:
C = [0.25 0.40 0.50]; D=[0.1429 0.2857 0.4286]; E=[7.000 3.500
2.3333] ; F=[ 1.7500 0.7000 0.3889].
Operaia de mprire la stnga, element cu element, a matricelor A i B,
considerate ca tablouri, se poate exemplifica prin secvenele Matlab,
C= A.\B; D=A.\p; E=p.\A; F=p.\A.\B;
iar rezultatele sunt:
C = [4.0 2.5 2.0]; D=[ 7.0000 3.5000 2.3333]; E=[ 0.1429 0.2857
0.4286] ; F=[ 28.0000 17.5000 14.0000].
Ridicarea la putere, element cu element a matricelor A i B, considerate ca
tablouri, se poate exemplifica prin secvenele Matlab,
C= A.^B; D=A.^p; E=p.^A; F=p.^A.^B;
iar rezultatele sunt:
C = [1 32 729]; D=[ 1 128 2187]; E=[ 7 49 343] ;
F= 1.0e+015 * [ 0.0000 0.0000 1.6284].
Operaia de transpunere a unui tablou, simbolizat de operatorul .' (punct
apostrof), face ca un tablou X, de dimensiuni m x n, s devin un tablou Y, cu
dimensiunea n x m. Dac, de exemplu,
X=[ 1 1+i
2 2-i
3 3+i ],
atunci,
Y=[ 1 2 3
1+ i 2-i 3+i].


Adunarea a dou matrice este posibil numai dac matricele sunt de acelai
tip. De meionat c o matrice este un sistem de numere aezate ntr-un tablou
dreptunghiular, cu un numr oarecare de linii i de coloane. Numerele din tablou se
numesc elementele matricei. O matrice cu p linii i n coloane se spune c este de
tipul {p, n}. Dac p sau n sunt egali cu 1, atunci avem matrice de tipul {1, n},
respectiv {p, 1}, care mai sunt cunoscute i ca vectori (coloan, respectiv linie).
n general, suma a dou matrice de acelai tip, oricare ar fi natura
elementelor lor, este tot o matrice, de acelai tip. Elementele sumei se obin
adunnd elementele corespunztoare din cele dou matrice. Dac notm cu a
ij

elementul generic al matricei [a], cu b
ij
elementul generic al matricei [b] i c
ij

elementul generic al matricei sume [c], atunci avem:
[c] = [a]+[b],
ceea ce se reduce la,
c
ij
= a
ij
+ b
ij
pentru toate valorile luate de i i j.

De exemplu, dac:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 54
A=[1 2 3];
B=[5 6 7];
atunci la tastarea comenzii,
A+B
se rspunde
ans =
6 8 10.
n exemplul urmtor:
a=[1 2 3
4 5 6];
b=[7 8 9
10 11 12];
iar,
a+b
este:
ans =
8 10 12
14 16 18.
Dac ns,
BB=[8 9];
atunci la tastarea comenzii,
A+BB
interpretorul Matlab rspunde
??? Error using ==> +
Matrix dimensions must agree.

O variant a operatorului este Plus, care semnific adunarea a dou
matrice, ale cror dimensiuni sunt agreate, lucrnd cu matricele ca simboluri.
De exemplu, dac se tasteaz,
c=plus(a,b)
sistemul rspunde:
c =
8 10 12
14 16 18.
O instruciune posibil pentru sintaxa +A este uplus, astfel c, dac
uplus(A)
sistemul rspunde:
ans =
1 2 3.

Operatorul - sau Minus, semnific X- Y i permite scderea unei matrice
Y din X. Toate considerentele fcute la adunare rmn valabile. Matricele trebuie
s fie de acelai tip (s aib aceleai dimensiuni) sau X, Y s fie scalari.
Operatori i caractere speciale Matlab 55
Dac, de exemplu,
X=[10 11 12
13 14 15];
Y=[1 1 1
1 1 1];
atunci la tastarea comenzii
X-Y
se rspunde:
ans =
9 10 11
12 13 14.
Atunci cnd X i Y sunt tratate ca obiecte, pentru sintaxa X-Y, se
utilizeaz instruciunea minus. Astfel:
Z=minus(Y,X)
este:
Z=
-9 -10 -11
-12 -13 -14.
Instruciunea posibil pentru sintaxa -X este uminus, astfel c, dac
uminus(X)
sistemul rspunde:
ans =
-10 -11 -12
-13 -14 -15.

nmulirea a dou matrice M1 cu M2 se face prin utilizarea operatorului *
sau mtimes. Dac, de exemplu,
M1=[4 5 6
7 8 9];
M2=[10 13
11 14
12 15];
atunci instruciunea,
M1*M2
face ca sistemul s rspund
ans =
167 212
266 338.
Utilizarea instruciunii mtimes, cnd matricele M1 i M2 sunt considerate ca
obiecte, este M=mtime(M1,M2), la care se obine :
M =
167 212
266 338.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 56
De menionat c, pentru orice scalar (care este o matrice de 1-pe-1) nu se
face nici o restricie, putnd fi nmulit oricnd cu un alt scalar sau o alt matrice,
dar pentru dou matrice X i Y trebuie ca numrul de coloane ale matricei X s fie
egal cu numrul de rnduri ale matricei Y.

nmulirea, element cu element, a dou matrice X i Y, care trebuie s aib
aceeai dimensiune, se realizeaz cu instruciunea .*, sau times, cnd aceste
matrice sunt considerate obiecte. Dac, de exemplu,
X =[ 2 3 4 5
7 8 9 10
11 12 13 14];
Y=[2 2 2 2
2 2 2 2
2 2 2 2];
atunci instruciunea,
X.*Y
conduce la,
ans =
4 6 8 10
14 16 18 20
22 24 26 28.
De menionat c, una dintre matrice poate fi un scalar, cu care se poate
nmuli la stnga sau la dreapta o matrice. De exemplu, dac se tasteaz,
2.* X
sau
X.*2
se obine,
ans =
4 6 8 10
14 16 18 20
22 24 26 28.

Ridicarea la putere a unei matrice se face prin utilizarea operatorului ^, sau
a instruciunii mpower(A,B), pentru sintaxa A ^ B, cnd A i B sunt obiecte.
Instruciunea Z = X^y semnific ridicarea la puterea y (un scalar) a matricei
X, matrice ce este ntotdeauna ptrat. Pentru ridicarea la putere simbolic, se
utilizeaz instruciunea Z=power(X,y).
Dac y este un ntreg mai mare dect unu (y>1), ridicarea la putere se
efectueaz prin multiplicare. Pentru alte valori ale lui y, calculul utilizeaz valori
proprii i vectori proprii. Se recomand utilizarea acestei instruciuni numai pentru
puteri numere naturale ntregi, mai mari dect unu. Pentru y = 2 i
X=[4 5
6 7]
Operatori i caractere speciale Matlab 57
atunci,
Z=X^y
este,
Z =
46 55
66 79.
Elementele matricei Z sunt obinute astfel,
Z= [ 4^2+6*5 4*5+7*5
6*4+7*6 6*5+7*7].
Instruciunea Z = x^Y semnific x la puterea Y, unde Y este o matrice
ptrat i x este un scalar, iar calculele se fac folosind vectori i valori propii. Cu
x=3;
Y =[ 4 5
6 7]
pentru
Z=x.^Y
se obine,
Z =
81 243
729 2187.
Atunci cnd X i Y sunt matrice, instruciunea Z= X^Y este eronat.

Ridicarea la putere a dou tablouri, element cu element, se poate face
utiliznd operatorul .^ sau power. Instruciunea,
Z = X.^Y
reprezint ridicarea fiecrui element din tabloul X la puterea indicat de valoarea
elementului din aceeai poziie a tabloului Y, adic: Z(i,j)=X(i,j).^Y(i,j).
Dac, de exemplu:
X=[1 2 3
4 5 6];
Y=[3 3 3
3 3 3];
atunci comanda X.^Y
conduce la,
ans =
1 8 27
64 125 216.
Se observ c X i Y trebuie s aib aceeai dimenesiune sau unul s fie
scalar, ca n exemplu:
Z=5 .^X
Z =
5 25 125
625 3125 15625.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 58
Dac matricele sunt considerate ca obiecte, atunci ridicarea la putere a
acestora se face cu instruciunea C=power(X,Y), rezultnd:
C =
1 8 27
64 125 216.
Pentru mprirea la stnga a dou matrice se utilizeaz operatorul \,
respectiv backslash, astfel nct A\B nseamn mprirea matricei A cu B, ceea
ce este acelai lucru, atunci cnd este posibil, cu A
-1
*B, adic inv(A)*B. Dac A
este o matrice ptrat cu N linii i N coloane (de NxN), iar B este un vector coloan
de N elemente sau o matrice cu acelai numr N de coloane, rezultatul X=A\B este
soluia ecuaiei A*X=B, calculat prin eliminarea Gausian. De menionat c,
pentru calcul simbolic, se utilizeaz instruciunea mldivide(A,B), pentru sintaxa
A\B.
De exemplu dac,
A =[ 10 25 3
4 5 6
7 8 9];
B =[ 2
3
4];
atunci,
X=A\B
sau
X=mldivide(A,B)
conduce la,
X =
-0.6216
0.2432
0.7117.
Dac maticea B este cu acelai numr de coloane,
B = [ 2 5
3 6
4 7];
atunci,
X=A\B
rezult,
X =
-0.6216 -2.4865
0.2432 0.9730
0.7117 1.8468.
Atunci cnd matricea A este singular sau determinantul acesteia este zero,
apare un mesaj de eroare. De exemplu, dac
Operatori i caractere speciale Matlab 59
A =[ 1 2 3
4 5 6
7 8 9]
atunci,
X=A\B
face ca pe ecran, naintea rezultatului, s apar mesajul,
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.055969e-018.
X =
-3.3333
5.6667
-2.0000.
Pentru a calcula inversa matricei A se poate utiliza instruciunea
A\eye(size(A)).
Considernd,
A =[ 1 20 3
4 5 6
7 8 9];
atunci,
A\eye(size(A)),
produce inversa matricei A, respectiv:
ans =
-0.0278 -1.4444 0.9722
0.0556 -0.1111 0.0556
-0.0278 1.2222 -0.6944.
Dac matricea A are dimensiunile MxN, unde M< sau > N, iar B este un
vector coloan de M componente sau o matrice cu acelai numr de coloane, atunci
X=A\B este soluionat prin metoda celor mai mici ptrate, X fiind soluia
sistemului de ecuaii A*X=B. Rangul efectiv al matricei A se determin prin
descompunere ortogonal triunghiular QR, cu pivotare.

Pentru mprirea la dreapta, a dou matrice, se utilizeaz operatorul /,
respectiv slash, astfel nct A/B nseamn mprirea matricei B cu A, ceea ce
este acelai lucru, atunci cnd este posibil, cu A*B
-1
, adic A* inv(B), dar mult mai
precis A/B = (B'\A')'. Pentru calculul simbolic se utilizeaz instruciunea
mrdivide(A,B), pentru sintaxa A/B, unde A i B sunt considerate obiecte. Dac,
A = [ 10 25 35
45 55 75
85 95 100];
B = [ 100 2 3
200 5 6
7 8 9];
atunci la instruciunea A/B
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 60
compilatorul Matlab rspunde,
ans =
12.2810 -6.2287 3.9477
23.3788 -11.7577 8.3788
-12.2469 6.1604 11.0865.
Operaia de mprire la stnga, element cu element, ntre dou tablouri, este
simbolizat prin operatorul .\, astfel c A.\B, reprezint mprirea element cu
element. n calculul simbolic, pentru sintaxaA.\B se utilizeaz instruciunea
ldivide(A,B). Matricele A i B trebuie s aib aceleai dimensiuni sau una dintre
ele s fie un scalar. Dac,
A = [ 10 25 35
45 55 75
85 95 100];
iar,
B=5;
atunci,
C=A.\B sau C=ldivide(A,B)
conduce la,
C =
0.5000 0.2000 0.1429
0.1111 0.0909 0.0667
0.0588 0.0526 0.0500.
Pe de alt parte, instruciunile
D=B.\A sau D=ldivide(B,A)
au ca rezultat,
D =
2 5 7
9 11 15
17 19 20.
Pentru matricele de mai sus, instruciunea A.\D sau ldivide(A,D), conduce la:
ans =
0.2000 0.2000 0.2000
0.2000 0.2000 0.2000
0.2000 0.2000 0.2000.
Operaia de mprire la dreapta, element cu element, ntre dou tablouri este
simbolizat prin operatorul ./, astfel c A./B, reprezint mprirea element cu
element a matricelor respective. n calculul simbolic, pentru sintaxaA./B, se
utilizeaz instruciunea rdivide(A,B). Matricele A i B trebuie s aib aceleai
dimensiuni sau una dintre ele s fie un scalar. Dac,
A = [ 10 25 35
45 55 75
85 95 100];
Operatori i caractere speciale Matlab 61
iar B=5;
atunci C=A./B sau C=rdivide(A,B)
conduce la,
C =
2 5 7
9 11 15
17 19 20.
Pe de alt parte instruciunile,
D=B./A sau D=rdivide(B,A)
au ca rezultat,
D =
0.5000 0.2000 0.1429
0.1111 0.0909 0.0667
0.0588 0.0526 0.0500.
Pentru matricele de mai sus, instruciunea A./D sau rdivide(A,D), conduce
la:
ans =
20 125 245
405 605 1125
1445 1805 2000.

Instruciunea kron(X,Y) permite calculul produsului tensorial Kronecker
dintre X i Y. Acesta se obine prin nmulirea componentelor lor, n toate modurile
posibile, dar ine seama i de simbolul lui Kronecker,

=
j i
j i
i
i
pentru , 1
pentru , 0
. De
exemplu dac,
X = [ 2 4 6
8 10 12];
Y = [ 3 3];
atunci comanda,
kron(X,Y)
conduce la,
ans =
6 6 12 12 18 18
24 24 30 30 36 36.
Se reamintete c, n general, cu tensorii
l
m
k
j i
b a ,
,
se pot forma produsele,
l
m
k
j i
kl
m j i
b a c
, , ,
= , sau
, , ,
k
j i
l
m
lk
j i m
a b d = , dup cum cei doi tensori se consider ntr-
o ordine sau alta.
Dac X i Y sunt matrice rare, atunci sunt multiplicate numai elementele ce
nu sunt zero.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 62
4.3. Operatori relaionali
Operatorii relaionali, prezentai n tabelul 4.3, compar element cu element
dou matrice, de exemplu A cu B i returneaz o matrice C, a crei elemente sunt
1, dac relaia este adevrat i 0, dac relaia este fals.
Matricele A i B trebuie s aib aceleai dimensiuni sau una dintre ele s fie
un scalar. n mod obinuit, n programele de calcul numeric Matlab, operatorii
relaionali sunt semne matematice consacrate, iar structura instruciunii este:
C=A operator relaional B
De menionat c, pentru calculul simbolic, cnd matricele sunt considerate
ca obiecte, structura instruciunii Matlab este:
C=operator relaional (A,B)
Tabelul 4.3
Operatori relaionali MATLAB
Semnificaia Forma pentru calcul numeric Forma pentru calcul simbolic
Egal == eq
Diferit ~= ne
Mai mic < lt
Mai mare > gt
Mai mic sau egal <= le
Mai mare sau egal >=

ge

Pentru exemplificarea funcionrii operatorilor relaionali, se consider
urmtoarele matrice A i B, precum i scalarul BB:
A = [ 10 25 35; 45 55 75; 85 95 100];
B = [ 10 15 35; 14 55 70; 85 90 100];
BB=55,
calculndu-se matricea rezultat, C.

Pentru instruciunea egalitate, C=A==B sau C=eq(A,B), se obine,
C =
1 0 1
0 1 0
1 0 1,
iar dac se compar cu BB, prin instruciunea C=A==BB sau C=eq(A,BB), se
obine,
C =
0 0 0
0 1 0
0 0 0.
Operatori i caractere speciale Matlab 63

Pentru instruciunea diferit, C=A~=B sau C=ne(A,B), se obine,
C =
0 1 0
1 0 1
0 1 0,
iar dac se compar cu BB prin instruciunea C=A~=BB, sau C=ne(A,BB), se
obine,
C =
1 1 1
1 0 1
1 1 1.

Pentru instruciunea mai mic, C=A<B sau C=lt(A,B), se obine,
C =
0 0 0
0 0 0
0 0 0,
iar dac se compar cu BB, prin instruciunea C=A<BBsau C=lt(A,BB), se obine,
C =
1 1 1
1 0 0
0 0 0.

Pentru instruciunea mai mare, C=A>B sau C=gt(A,B), se obine,
C =
0 1 0
1 0 1
0 1 0,
iar dac se compar cu BB, prin instruciunea C=A>BB sau C=gt(A,BB), se obine,
C =
0 0 0
0 0 1
1 1 1.

Pentru instruciunea mai mic sau egal, C=A<=B sau simbolic C=le(A,B), se
obine,
C =
1 0 1
0 1 0
1 0 1,
iar dac se compar cu BB, prin instruciunea C=A<=BB sau C=le(A,BB), se
obine,
C =
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 64
1 1 1
1 1 0
0 0 0.

Pentru instruciunea mai mare sau egal, C=A>=B sau C=ge(A,B), se obine,
C =
1 1 1
1 1 1
1 1 1,
iar dac se compar cu BB, prin instruciunea C=A>=BB sau C=ge(A,BB), se
obine,
C =
0 0 0
0 1 1
1 1 1.

4.4. Operatori logici
Operatorii logici au prioritate mai mic dect operatorii relaionali sau
aritmetici. ntr-o expresie, se evalueaz mai nti relaiile care conin operatori
relaionali i aritmetici i apoi cele cu operatori logici.

Aceti operatori, prezentai n tabelul 4.4, compar, cu excepia operatorului
negaie- NU, dou matrice A cu B (de obicei cele calculate cu operatorii relaionali
i care au elementele 0 sau 1), sau o matrice A i un scalar BB.

Operatorul negaie, avnd simbolul ~ sau not, acioneaz numai asupra
unui element (matrice sau scalar), sub forma, de exemplu ~A sau not(A).
De menionat c ceilali operatori logici au, pentru calculul numeric,
simboluri matematice consacrate, iar structura instruciunii este:
C=A operator logici B

Pentru calculul simbolic, cnd matricele sunt considerate ca obiecte,
structura instruciunii Matlab este:
C=operator logici (A,B)

Ordinea de prioritate a operatorilor logici n expresii este:
Nu, respectiv ~ sau not prioritate 1 n expresii logice;
i, respectiv & sau and prioritate 2 n expresii logice;
Sau, respectiv | sau or prioritate 3 n expresii logice.


Operatori i caractere speciale Matlab 65
Tabelul 4.4
Operatori logici MATLAB
Semnificaia Forma pentru
calcul numeric
Forma pentru
calcul simbolic
Nu ~ not
i & and
Sau | or
Sau exclusiv gt
Caut un element diferit de zero any
Caut ca orice element s fie diferit de zero

all


Pentru dou expresii logice simple E1 i E2 i operatorii logici principali,
tabela de adevr este redat n tabelul 4.5.
Tabelul 4.5
Tabela de adevr a operatori logici
E1 E2 ~E1 E1&E2 E1 | E2
ADEVRAT ADEVRAT FALS ADEVRAT ADEVRAT
ADEVRAT FALS FALS FALS ADEVRAT
FALS ADEVRAT ADEVRAT FALS ADEVRAT
FALS FALS ADEVRAT FALS FALS

De reinut c, n Matlab, orice valoare diferit de zero este considerat
adevrat logic, adic 1.
Pentru exemplificarea modului de aciune a operatorilor logici, considerm
dou matrice A i B, ct i scalarii AA, BB, ca de exemplu:
A = [ 11 0 22; 1 15 1; 0 4 1];
B = [ 12 0 23; 1 14 1; 0 4 1];
AA = 1; BB = 0.

Pentru instruciunea logic de negare nu, simbolizat prin ~ sau not, se
obine,
C = ~A = not(A) = [ 0 1 0; 0 0 0; 1 0 0];
C = ~B = not(B) = [ 0 1 0; 0 0 0; 1 0 0];
C = ~AA = not(AA) = 0;
C = ~BB = not(BB) = 0;
din care se observ c, n matricea rezultat, C, sunt egale cu 1 numai acele
elemente care sunt iniial zero, iar celelalte diferite de zero devin, prin negare, nule.


SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 66
Pentru instruciunea logic i, cu simbolul & sau and, se obine,
C = A&B = and(A,B) = [ 1 0 1; 1 1 1; 0 1 1];
C = A&AA = and(A,AA) = [ 1 0 1; 1 1 1; 0 1 1];
C = A&BB = and(A,BB) = [ 0 0 0; 0 0 0; 0 0 0];
C = AA&BB = and(AA,BB) = 0.

Pentru instruciunea logic sau, cu simbolul | sau or, se obine,
C = A | B = or (A,B) = [ 1 0 1; 1 1 1; 0 1 1];
C = A | AA = or (A,AA) = [ 1 1 1; 1 1 1; 1 1 1];
C = A | BB = or (A,BB) = [ 1 0 1; 1 1 1; 0 1 1];
C = AA | BB = or (AA,BB) = 1.

Pentru instruciunea logic diferen simetric sau exclusiv, cu simbolul
xor, se obine,
C = xor (A,B) = [ 0 0 0; 0 0 0; 0 0 0];
C = xor (A,AA) = [ 0 1 0; 0 0 0; 1 0 0];
C = xor (A,BB) = [ 1 0 1; 1 1 1; 0 1 1];
C = xor (AA,BB) = 1,
din care se observ c rezultatul este 1, cnd unul dintre elementele matricelor
comparate nu este zero, dar nu simultan.

Cutarea, dac un element al vectorului este zero, se realizeaz cu
instruciunea avnd simbolul any. Pentru un vector, aceasta returneaz 1, dac un
element al vectorului nu este negativ, altfel returnnd 0. Pentru matrice, operatorul
any lucreaz asupra ntregii matrice, dac se specific dimensiunea (sub forma
any(A,DIM), cu DIM dimensiunea matricei) sau, dac nu se specific, numai
asupra coloanelor, returnnd un vector rnd.
De exemplu,
C = any (A,3) = [ 1 0 1; 1 1 1; 0 1 1];
C = any (A) = [ 1 1 1];
C = any (B,3) = [ 1 0 1; 1 1 1; 0 1 1];
C = any (A,AA) = [ 1 1 1].

Cutarea, dac toate elementele vectorului sunt zero, se face cu instruciunea
avnd simbolul all. Pentru un vector, aceasta returneaz 1, dac un element al
vectorului nu este negativ, altfel returnnd 0. Pentru matrice, operatorul any
lucreaz asupra ntregii matrice, dac se specific dimensiunea (sub forma
all(A,DIM), cu DIM dimensiunea matricei) sau, dac nu se specific, numai
asupra coloanelor, returnnd un vector rnd.
De exemplu,
C = all (A,3) = [ 1 0 1; 1 1 1; 0 1 1];
C = all (A) = [ 0 0 1];
C = all (B,3) = [ 1 0 1; 1 1 1; 0 1 1];
C = all (A,AA) = [ 0 0 1].
Operatori i caractere speciale Matlab 67
4.5. Caractere speciale
Instruciunea : sau colon este larg utilizat n programele Matlab pentru:
a genera valori cu pas liniar constant sau cu pas constant dat;
a selecta o matrice, rndul sau coloana acesteia;
producerea unei liste de argumente.
Generarea valorilor cu pas liniar constant, ntre o valore J i K, se face cu
instrucunea J:K sau colon (J,K),
la fel ca i [J, J+1, ..., K], cu condiia ca J > K.
De exemplu, dac J=4, K=12, atunci:
J:K sau colon(J,K)
conduce la,
ans =
4 5 6 7 8 9 10 11 12.
Generarea valorilor, ntre J i K cu pas constant dat, notat cu D, se
realizeaz cu instruciunea,
J:D:K sau colon (J,D,K),
care sunt la fel ca i [J, J+D, ..., J+m*D], cu condiia ca, dac J > K ,atunci D<0, iar
dac J<K, atunci D>0.
Dac, de exemplu, J=-20, K=+11, iar D=3, atunci:
ans =
-20 -17 -14 -11 -8 -5 -2 1 4 7 10.
Considernd matricea,
A = [ 11 14 4 8
12 13 2 10
15 16 7 5],
atunci,
instruciunea A(:), conduce la selectarea tuturor elementelor matricei,
puse sub forma unei coloane, aranjnd coloanele unele sub altele:
ans =
11
12
15
14
13
16
4
2
7
8
10
5,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 68
instruciunea A(:,2), conduce la selectarea tuturor elementelor coloanei
specificate, respectiv 2:
ans =
14
13
16,
iar instruciunea A(3,:), conduce la selectarea tuturor elementelor liniei
3:
ans =
15 16 7 5.
Producerea unei liste de argumente, utilizate n alte subprograme, se face cu
instruciunea C{:}, care este la fel cu C{1},C{2},...,C{end} i este valid la
chemare prin ( ) sau [ ]. Parantezele, de toate felurile, sunt larg utilizate n structura
programelor Matlab.
Parantezele rotunde, simbolizate prin ( ), sunt folosite:
n calculele aritmetice sau logice, pentru a grupa operaiile i unde in
locul tuturor tipurilor de paranteze (rotunde, drepte, acolade);
pentru a indica elementul unui vector sau matrice sau elementele
vectorului X, mai mari sau mai mici dect o valoare (fie aceasta >0.5),
prin instruciunea X(>0.5);
pentru a grupa argumentele unei funcii.
Parantezele drepte, simbolizate prin [ ], sunt utilizate pentru:
formarea vectorilor i matricelor, prin indicarea elementelor acestora,
elemente separate neaprat prin blank sau , , pentru elementele unei
linii i prin ;, coloanele, ca de exemplu [6.9 9.4 sqrt(2)], sau
[6.9,9.4,sqrt(2)], pentru linie, iar pentru coloane [6.9;9.4;sqrt(2)];
stocarea unei matrice goale, ca de exemplu matricea de dimensiuni 0x0,
prin instruciunea A=[];
schimbarea unui rnd sau coloane dintr-o matrice, de exemplu dac
matricea A este,
A = [ 1 2 3
4 5 6
7 8 9
10 11 12
13 14 15],
atunci prin instruciunea A([1,5],:) = A([5,1],:), n matricea A, se schimb
rndul 1 cu rndul 5, obinndu-se:
A = [ 13 14 15
4 5 6
7 8 9
10 11 12
1 2 3];
Operatori i caractere speciale Matlab 69
concatenarea (unirea) vectorilor i matricelor, prin instruciuni de forma
[A B; C], care presupune c numrul de rnduri ale lui A este egal cu
numrul de rnduri ale lui B, iar numrul de coloane ale lui A plus
numrul de coloane ale lui B este egal cu numrul de coloane ale lui C,
ca de exemplu dac:
A = [ 5 6 B = [ 7 8 9 C = [ 11 14 16 3 2
10 12]; 1 4 17 ]; 22 25 30 41 42];
atunci [A B; C] este:
ans =
5 6 7 8 9
10 12 1 4 17
11 14 16 3 2
22 25 30 41 42

Concatenarea orizontal a unei matrice A cu o matrice B, care au acelai
numr de rnduri, se obine prin instruciunea [A B], ori [A,B], iar pentru obiecte,
prin instruciunea horzcat(A,B). De exemplu, cu A i B de mai sus, prin
instruciunea [A,B] sau [A B], se obine:
ans =
5 6 7 8 9
10 12 1 4 17.

Concatenarea vertical se realizeaz prin instruciuni de forma [A;BB] i
impune ca numrul de coloane a celor dou matrice s fie acelai, iar pentru
obiecte, prin instruciunea vertcat(A,BB). Dac matricea A anterioar i BB=[7 8;
1 4], prin instruciunea [A;BB], se obine:
ans =
5 6
10 12
7 8
1 4.

Parantezele de tip acolade, simbolizate prin { }, sunt utilizate similar ca i
parantezele drepte, cu deosebirea c acestea se refer la obiecte, specificnd
coninutul csuelor acestora. De exemplu, prin instruciunea {magic(3),6.9,'hello'}
se obine o matrice cu trei elemente,
ans =
[3x3 double] [6.9000] 'hello'.
iar prin instruciunea {'This' 'is' 'a';'two' 'row' 'cell'} se obine o matrice de 2x3
celule,
ans =
'This' 'is' 'a'
'two' 'row' 'cell'.

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 70
Caracterul @ este utilizat pentru a crea o funcie implicit, apelabil ca i
o variabil, n lista de argumente intrate ntr-o funcie, denumit, function_handle.
n ea sunt stocate informaiile referitoare la funcia din context.
De exemplu:
f = @humps;
creeaz o function_handle f pentru funcia 'humps'.
x = fminbnd(f,1,2);
cheam function_handle f ,ca argument n funcia 'fminbnd'.

Cnd funcia 'humps' este chemat n funcia 'fminbnd', aceasta este
determinat n contextul n care f a fost creat, fa de cazul cnd f este argument n
funcia feval, cnd aceast funcie este evaluat pentru argumentul x.

Punctul, cu simbolul . este folosit n Matlab pentru:
scrierea numerelor zecimale, ca de exemplu 1.25 sau 0.125e1;
operaii cu tablouri, pentru a indica c operatorii de nmulire, .*, de
ridicare la putere, .^, de mprire la dreapta, . /, de mprire la
stnga, .\, sau de transpunere, . , lucreaz element cu element ;
n cmpuri de acces, cnd se lucreaz cu structuri.


Trecerea din subdirectorul curent n directorul din faa acestuia (mai
cuprinztor) se face prin utilizarea a dou puncte, cd ... De exemplu, dac ne
aflm n subdirectorul bin din directorul Matlab, D:\MATLAB\bin, atunci aceasta
se realizeaz prin comanda cd .., obinndu-se: D:\MATLAB.

Continuarea unei linii de program, pe o alt linie, se realizeaz prin utilizarea
a trei puncte, , dup un blank, ca de exemplu:
a = sin(pi/2)+tg(pi/3)+
2+5/6.

Separarea indicilor unei matrice, a elementelor de pe linie sau a
argumentelor unei funcii se face prin virgul, ,.

Atribuirea unei variabile Var a valorii expresiei 3+4 se realizeaz prin
utilizarea semnului egal, =, adic Var=3+4.

Pentru a indica terminarea rndurilor unei matrice sau a suprimrii scrierii pe
ecran, se utilizeaz punct i virgula, ; .

nceperea unei linii de comentariu se realizeaz prin utilizarea semnului
procent, %, astfel c, dup acesta, orice text scris va fi ignorat de ctre
compilatorul limbajului Matlab.

Chemarea unei instruciuni, specific sistemului de operare sau a unui
program extern Matlab, se face prin utilizarea semnului exclamrii, !, naintea
Operatori i caractere speciale Matlab 71
instruciunii.

Semnul apostrof, , se utilizeaz n Matlab pentru:
scrierea unui ir de caractere n codul ASCII, ca de exemplu prin
a='Exemplu' se obine a=Exemplu;
transpunerea unei matrice.


Dat fiind o matrice [a], de tipul {p, n}, transpusa sa, [a]
t
, este matricea
obinut din aceasta, schimbndu-i liniile n coloane i coloanele n linii, cu
pstrarea ordinii lor. Linia j a matricei [a] devine coloana j a matricei [a]
t
, iar
coloana i a a matricei [a] devine linia i a matricei [a]
t
. Pentru o matrice dat
j i
a a
,
= , transpusa acesteea, a
t,
se obine prin nlocuirea liniilor cu coloanele de
acelai rang, astfel c
i j t
a a
,
= .
Transpusa unei matrice cu o singur coloan este o matrice cu o singur
linie, iar transpusa unei matrice cu o singur linie are numai o coloan. De
menionat c transpusa transpusei, coincide cu matricea iniial, transpusa sumei
este egal cu suma transpuselor i transpusa matricei produs este egal cu produsul
transpuselor, n ordine schimbat.
Dat fiind o matrice cu un numr oarecare de linii sau coloane, ale crei
elemente sunt numere reale sau complexe, conjugata sa este matricea format prin
nlocuirea fiecrui element cu imaginarul su.

Prin definiie, matricea cu toate elementele numere reale este o matrice
real. Deoarece imaginarul conjugat al unui numr real este el nsui, iar numerele
reale complexe, care coincid cu conjugatele lor, sunt numere reale, urmeaz c: o
matrice real este egal cu conjugata sa i, reciproc, dac o matrice este egal cu
conjugata sa, matricea este real.

n Matlab, pentru matricea complex
A = [ 1.0000 + 2.0000i 5.0000 4.0000 + 1.0000i
7.0000 10.0000 + 3.0000i 0 + 6.0000i
12.0000 + 4.0000i 8.0000 9.0000 +19.0000i],
matricea transpus neconjugat se obine cu instruciunea,
A.' sau transpose(A)
rezultnd,
ans =
1.0000 + 2.0000i 7.0000 12.0000 + 4.0000i
5.0000 10.0000 + 3.0000i 8.0000
4.0000 + 1.0000i 0 + 6.0000i 9.0000 +19.0000i
iar matricea transpus complex conjugat se obine cu instruciunea,
A' sau ctranspose(A)
rezultnd,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 72
ans =
1.0000 - 2.0000i 7.0000 12.0000 - 4.0000i
5.0000 10.0000 - 3.0000i 8.0000
4.0000 - 1.0000i 0 - 6.0000i 9.0000 -19.0000i.
4.6. Operatori la nivelul biilor de informaie
Principalele instruciuni care permit lucrul cu informaia, la nivelul biilor
sunt: bitand, bitcmp, bitor, bitmax, bitxor, bitset, bitget, bitshift.

Cel mai mare ntreg suportat de calculatorul pe care se ruleaz Matlab-ul
este aflat prin instruciunea bitmax. Pentru calculatoarele care lucreaz cu
aritmetic IEEE, cel mai mare ntreg este 2
53
-1, respectiv 9.0072e+015. Pentru a
verifica dac maina pe care se ruleaz programul lucreaz cu aritmetic IEEE, se
execut instruciunea isieee, la care rspunsul trebuie s fie 1. Cu aritmetic IEEE
lucreaz calculatoarele de tip PC, majoritatea staiilor UNIX i Macintosh, iar cele
de tip VACS sau Cray, nu.

Instruciunea bitand(A,B), returneaz informaia I, de la nivelul biilor
pentru argumentele A i B, bitor(A,B) returneaz informaia ORI, iar
bitxor(A,B) informaia ORI exlusiv. Aceste argumente, trebuie s conin ntregi
nenegativi mai mici dect bitmax.

Bitul complement al lui A, funcie de un ntreg N, nenegativ, se obine prin
instruciunea bitcmp(A,N).

Instruciunea bitset(A,BIT,V) seteaz biii pozitivi, BIT, n A, la valoarea V
(sau 1 dac V lipsete), dar A trebuie s fie un numr ntreg < 52 (pentru IEEE).

Gsirea valorii pozitive a biilor lui A se realizeaz prin instruciunea
bitget(A,BIT), iar gsirea valorii lui A, mprit la K bii (sau multiplicarea cu
2^K) i rotunjire, se execut prin instruciunea bitshift(A,K).

4.7. Operatori pentru stabilirea proprietilor
Unirea fr repetiie i sortarea elementelor a doi vectori, A i B, se
realizeaz prin instruciunea union(A,B).
Dac A=[ 1 2 8 9] i B=[ 4 5 7], atunci comanda union(A,B), conduce la:
ans =
1 2 4 5 7 8 9.
Pentru dou matrice A i B, cu acelai numr de coloane, combinarea
rndurilor acestora, far repetiie, se poate face prin instruciunea union(A,B,rind).
Dac A=[1 2 3; 4 5 6], iar B=[7 8 9; 2 3 10], atunci instruciunea union(A,B,2)
Operatori i caractere speciale Matlab 73
conduce la:
ans =
1 2 3
2 3 10
4 5 6
7 8 9.

Gsirea valorilor unui vector (cu valori numerice sau semne), care nu se
repet, aranjate n ordine cresctoare, se poate face cu instruciunea unique(A).
Considernd vectorul A=[1 2 10 2 8 9 14 2 1 8 11] i vectorul aa='textul este
acesta' atunci instruciunea:
unique(A), conduce la,
ans =
1 2 8 9 10 11 14,
iar unique(aa) la,
ans =
acelsta.

Valorilor comune a doi vectori, fr a se repeta, aranjate n ordine
cresctoare, se gsesc cu instruciunea intersect(A,B). Considernd vectorul A=[1
2 10 2 8 9 14 2 1 8 11] i vectorul B =[ 3 2 6 8 4 10] atunci instruciunea:
intersect(A,B), conduce la,
ans =
2 8 10.

Valorile diferite ale unui vector, fr a se repeta, aranjate n ordine
cresctoare, se gsesc cu instruciunea setdiff(A,B). Considernd instruciunea:
setdiff(A,B), conduce la,
ans =
1 9 11 14.

Valorilor unui vector, fr a se repeta, aranjate n ordine cresctoare, se
gsesc cu instruciunea setxor(A,B). Prin instruciunea setxor(A,B) se obine,
ans =
1 3 4 6 9 11 14.

Pentru a verifica dac un element este membru, se utilizeaz ismember.
5. LIMBAJUL MATLAB - INSTRUCIUNI
I FUNCII DE CONTROL SPECIFICE
Programele MATLAB sunt scrise pentru a realiza numai pai secveniali,
operaiile fiind executate una dup alta.
5.1. Instruciuni de control logic
Uneori, este necesar repetarea unui set de instruciuni, atta timp ct o
condiie nu este realizat sau repetarea unui grup de instruciuni, de un anumit
numr de ori. Alteori, este necesar terminarea normal sau forat a unui ciclu sau
rentoarcerea execuiei la o funcie precizat. Nu lipsit de interes este i afiarea
unor mesaje de eroare.
Instruciunile de control logic (condiionale) utilizeaz operatori relaionali i
operatori logici.
Instruciuni condiionate
n cadrul unui algoritm este deseori necesar o selecie a grupului de
instruciuni ce urmeaz a fi executate, condiionate de valoarea de adevr a unei
expresii. Grupul de instruciuni care se repet este numit i corpul ciclului.
Instruciunea if poate fi implementat ca instruciune if simpl; poate
include clauzele else sau elseif.
Forma general a unei instruciuni if simpl, este:
if expresie logic
grup de instruciuni
end

Dac expresia logic este adevrat, se execut grupul de instruciuni
cuprinse ntre if i end. Dac expresia logic este fals, se trece la prima
instruciune, care urmeaz dup instruciunea end.
Pentru o citire mai uoar, ct i pentru o urmrire a grupurilor de instruciuni
care se execut, se procedeaz la decalarea (deplasarea ) acestora, lucru realizat
automat, de editorul intern al Matlab.
Un exemplu de utilizare a instruciunii if simpl este secvena Matlab:
if a < 10
b=b+1
c=c+a
end.
Dac a este un scalar i dac a<10, b se incrementeaz cu 1, iar c cu a.
Instruciunea if poate fi inclus n interiorul altei instruciuni if, ca n
exemplul urmtor:
Limbajul Matlab instruciuni i funcii de control specifice 75
if expresie_logic_A
grupul_de_instriciuni_1
if expresie_logic_B
grupul_de_instruciuni_2
end
grupul_de_instruciuni_3
end
grupul_de_instruciuni_4

Atta timp ct expresie_logic_A este 1 (ADEVRAT), se execut
grupul_de_instruciuni_1 i grupul_de_instruciuni_3. Dac i expresie_logic_B
este 1 (ADEVRAT), se execut grupul_de_instruciuni_2, naintea executrii
grupului de instruciuni 3. Dac expresie_logic_B este 0 (FALS), nu se execut
grupul_de_instruciuni_2, chiar dac expresia logic A continu s fie adevrat.
Dac expresie_logic_A este 0 (FALS), se trece la grupul de instruciuni
4,fr a mai executa grupurile de instruciuni 13. De altfel, grupul de instruciuni
4 se execut indiferent de valoarea de adevr a expresiilor logice A i/sau B.
Pentru a evidenia grupurile de instruciuni care se execut, funcie de
condiiile pe care le ndeplinesc, se utilizeaz identarea (deplasarea instruciunilor
respective spre dreapta cu cteva spaii).
Fie urmtorul exemplu de utilizare a instruciunilor condiionale if
succesive:
b=0
a=1
if a < 10
b=b+a
c=b+a
a=a+b
if b < a
b=b+a
end
c=c.^2
a=a+1
end
d=a*b+c*a

n exemplul de mai sus, a=1 i deci a<10, astfel c, se execut instruciunile,
b=b+a
c=b+a
a=a+b
rezultnd b=1, c=2, a=2.
Cum b<a, se execut instruciunea b=b+a, rezultnd b=3 i apoi se trece la
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 76
grupul de instruciuni,
c=c.^2
a=a+1
dup care se execut instruciunea,
d=a*b+c*a
rezultnd, n final, a=3, c=4 i d=21.

Dac a este un vector sau o matrice, condiia a<10 este adevrat numai dac
fiecare element al lui a este mai mic de 10. Dac a i b sunt vectori sau matrice,
atunci <a numai dac fiecare pereche (b, a) verific aceast condiie.
Dac a sau b este scalar, comparaia se face ntre fiecare element al matricei
cu scalarul extins la o matrice.

Clauza else este utilizat pentru a executa un set de instruciuni, dac
expresia logic este ADEVRAT i un alt set de instruciuni, dac expresia
logic este FALS.
Forma general a instruciunii if, combinat cu clauza else (numit i
instruciunea if-else) este:
if expresie_logic_A
grupul_de_instriciuni_1
else
grupul_de_instruciuni_2
end

Dac expresia logic A este adevrat, se execut grupul de instruciuni 1, iar
dac este fals, se execut grupul de instruciuni 2.
Un exemplu de aplicare a instruciunii if-else este cel pentru descrierea
funciei,

( )

2. y dac , y y 2
2 y dac , 2 y y 3
g(y)
2
3 2

< +
>
=
a crei descriere MATLAB este:
if y >= 2
g(y)=3*y^2*(y-2)^3
else
g(y)=2*y+2
end

Clauza elseif se utilizeaz dac funcia de calculat are mai multe niveluri
de instruciuni if-else i este mai dificil determinarea expresiei logice adevrate.
Structura general a utilizrii clauzei elseif este:
if expresie_logic_A
grupul_de_instriciuni_1
elseif expresie_logic_B
Limbajul Matlab instruciuni i funcii de control specifice 77
grupul_de_instruciuni_2
elseif expresie_logic_C
grupul_de_instruciuni_3
end

Modul de evaluare este urmtorul:
dac expresia logic A este adevrat, este executat numai grupul de
instruciuni 1;
dac expresia logic A este fals i expresia logic B este adevrat, se
execut numai grupul de instruciuni 2 ;
dac expresiile logice A i B sunt false, iar expresia logic C este
adevrat, se execut numai grupul de instruciuni C ;
dac mai multe expresii logice sunt adevrate, prima instruciune logic
adevarat determin grupul de instruciuni care este executat prima dat ;
dac nici o expresie logic nu este adevrat, nu se execut nici un grup de
instruciuni din structura if-elseif.

Clauza elseif poate fi combinat cu clauza else ntr-o structur general de
forma:
if expresie_logic_A
grupul_de_instriciuni_1
elseif expresie_logic_B
grupul_de_instruciuni_2
elseif expresie_logic_C
grupul_de_instruciuni_3
else
grupul_de_instruciuni_4
end

Dac nici o expresie logic (AC) nu este adevrat, se execut grupul de
instruciuni 4.

De exemplu, dac trebuie generat o matrice X cu n linii i n+1 coloane, ale
crei elemente sunt:

j i dac , 1
j i dac 0,
j i dac , 1 -
X

>
=
<
=

Cu secvena Matlab:
n=4;
for i=1:n
for j=1:n+1
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 78
if i==j
X(i,j)=0
elseif i<j
X(i,j)=-1
else
X(i,j)=1
end
end
end
se obine,
X =
0 -1 -1 -1 -1
1 0 -1 -1 -1
1 1 0 -1 -1
1 1 1 0 -1.
Instruciuni pentru ncheierea ciclurilor
Instruciunea care ncheie ciclurile (if, for, while, switch, try) este end,
fiecare pentru o instruciune de deschidere a unui ciclu.
End mai este utilizat i ca ultim index ntr-o matrice sau pornind de la
acesta, s poat identifica elementele matricei, avnd ca baz ultimul element. n
acest context, pentru X=[1 2 3 4; 5 6 7 8; 9 10 11 12], rezult c end este 12, iar:
X(end)=12, X(end-3)=X(9)=11, X(end-10)=X(2)=5.
Instruciuni repetitive
Instruciunea for este folosit pentru repetarea unui grup de instruciuni din
corpul buclei, de un anumit numr de ori, cunoscut iniial.
Forma general a instruciunii for este:
for index=expresie
grupul de instruciuni
end
unde: index este numele contorului, expresie este un scalar, un vector sau o
matrice, iar grupul de instruciuni sunt, una sau mai multe expresii Matlab.
n aplicaii, de cele mai multe ori, index=expresie este de forma:
k=valoare_iniial : pas : valoare_final,
unde k este indexul cont, valoare_iniial este prima valoare a lui k, pas este pasul
la care este calculat indexul, iar valoare_final este cea mai mare valoare pe care o
poate lua k.
La fiecare pas este calculat indexul k, care este folosit n grupul de
instruciuni. Dac expresie este o matrice, atunci ciclarea se face pe coloane.
Pentru un ciclu for, cu pasul negativ sau nentreg, se genereaz mai nti un
vector cu pasul i limitele dorite i apoi se citesc valorile acestuia, n cadrul buclei
Limbajul Matlab instruciuni i funcii de control specifice 79
for.
La folosirea buclei for trebuie respectate urmtoarele reguli:
indexul buclei for trebuie s fie o variabil;
dac expresia este o matrice goal, bucla nu se execut i se va trece la
urmtoarea instruciune, dup instruciunea end;
dac expresia este un scalar, bucla se execut o singur dat, cu indexul
dat de valoarea scalarului ;
dac expresia este un vector linie, bucla se execut de attea ori cte
elemente are vectorul i de fiecare dat, indexul are valoarea egal cu
urmtorul element din vector ;
dac expresia este o matrice, indexul va avea la fiecare iteraie valorile
coninute n urmtoarea coloan a matricei ;
la terminarea ciclurilor for, indexul are ultima valoare utilizat;
dac se utilizeaz operatorul : pentru a definii expresia, sub forma:
for k=k_init : pas : k_final
bucla se execut de 1
pas
k_init k_final
+
(


= n ori, dac n este pozitiv
i nu se execut dac n este negativ. Am notat prin [] valoarea ntreag
a numrului.

De exemplu, instruciunea,
for k=3:5:95
se execut de 9 1 8 1
11
3 95
= + = +
(


= n ori. Prin aceasta, valorile lui k sunt : 3, 14,
25, 36, 47, 58, 69, 80, 91. Bucla nu se va executa pentru valori mai mari dect 95.
Ca exemplu de aplicare a instruciunii for, considerm generarea matricei
Hilbert de ordinul 4, ale crei elemente sunt date de expresia
1 j i
1
j) H(i,
+ +
= .
Secvena Matlab este:
n=4;
for i=1:n;
for j=1:n;
H(i,j)=1/(i+j+1);
end
end
care conduce la,
H =
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
0.2000 0.1667 0.1429 0.1250
0.1667 0.1429 0.1250 0.1111
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 80

Instruciunea while este o structur care se utilizeaz pentru reperatea unui
set de instruciuni, atta timp ct o condiie specificat este adevrat. Formatul
general al acestei instruciuni de control este:
while expresie
grup de instruciuni
end
Grupul de instruciuni se execut ct timp expresie are toate elementele
nenule, iar expresie are de obicei forma:
expresie_1 condiie expresie_2,
unde condiie este unul dintre operatorii relaionali: ==, <, >, <=, >=, or ~=.
Cnd condiia este verificat (expresia este adevrat logic), se execut
grupul de instruciuni. Dup ce se execut grupul de instruciuni, condiia este
retestat. Cnd condiia este din nou adevrat, grupul de instruciuni se execut
iar. Cnd condiia este fals, se trece la urmtoarea instruciune dup instruciunea
end. Dac expresia este totdeauna adevrat logic (valoarea acesteia este diferit de
zero), bucla devine infinit; dintr-o bucl infinit se iese forat, prin apsarea
concomitent a tastelor [ Ctrl]+[C].
De exemplu, dac A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16], atunci
secvena Matlab:
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F; F = A*F/N; N = N + 1;
end
conduce la:
N =
98
F =
0.0111 0.0125 0.0140 0.0155
0.0256 0.0289 0.0323 0.0357
0.0401 0.0454 0.0507 0.0560
0.0546 0.0618 0.0690 0.0762
E =
1.0e+015 *
0.3523 0.3990 0.4456 0.4923
0.8140 0.9218 1.0296 1.1374
1.2757 1.4447 1.6136 1.7825
1.7375 1.9675 2.1976 2.4276.
Instruciunea break
Instruciunea break se utilizeaz pentru a iei dintr-o bucl, nainte ca aceasta
s se fi terminat. Se recomand a fi utilizat dac o condiie de eroare este detectat
n interiorul buclei. Instruciunea break nceteaz execuia ciclurilor for i while.
Limbajul Matlab instruciuni i funcii de control specifice 81
n cazul unor cicluri intercalate, break comand ieirea din ciclul cel mai
interior. Se apeleaz cu sintaxa:
break
Pentru exemplificare, considerm secvena:
for i=1:10
a(i)=i*10
break
b(i)=a(i)+5
end
care calculeaz numai a(1), rezultnd:
a =
10
Instruciunea continue
Instruciunea continue transfer controlul la urmtoarea iteraie din bucla for
sau while n care apare, srind celelalte instruciuni rmase ntre aceasta i end.
Este util pentru cazul unor bucle mari, cnd trebuie srite anumite instruciuni.
Pentru a exemplifica modul de lucru, se dau dou secvene scurte:
fr instruciunea continue:
for i=1:10
a(i)=i*10
b(i)=a(i)+5
end
cnd se calculeaz,
a =
10 20 30 40 50 60 70 80 90 100
b =
15 25 35 45 55 65 75 85 95 105
cu instruciunea continue :
for i=1:10
a(i)=i*10
continue
b(i)=a(i)+5
end
cnd se calculeaz numai a, nu i b.

Blocuri de instruciuni
Blocul switch, funcie de valoarea expresiei switch_expr, permite transferul
execuiei unei anumite secvene din cadrul unui bloc ce se gsete ntre dou
expresii: case case_expr, case {case_expr1, case_expr2, case_expr3,...}, sau
otherwise. Forma general a instruciunii switch este:
switch switch_expr
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 82
case case_expr,
statement, ..., statement
case {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
otherwise
statement, ..., statement
end

Dac case este de forma case {case_expr1, case_expr2, case_expr3,...},
atunci trebuie s fie adevrat cel puin una dintre case_expr1, case_expr2,
case_expr3,. Dac nici una dintre case_expr nu este adevrat, se execut
secvena dintre otherwise i end, dac aceast secven exist. Nu se execut dect
o secven valabil i apoi se iese din bloc.
De menionat c, switch_expr poate fi scalar sau caracter (string). Dac este
scalar, atunci se transfer controlul secvenei pentru care case_expr= switch_expr.
Dac switch_expr este de tip caracter, se execut setul de instruciuni care ncep cu
case, pentru care instructiunea strcmp(switch_expr,case_expr) are valoarea 1.
Instruciunea strcmp(S1,S2) compar semnele S1 i S2 i, dac sunt la fel,
returneaz 1 i 0, dac sunt diferite. Dac S1 i S2 sunt matrice celule de semne,
acestea trebuie s aib aceeai dimensiune, iar comparaia se face pentru fiecare
celul n parte. Semnele S1 i S2 sunt din setul de caractere internaionale.
Considernd c METHOD este o variabil de tip caracter, un exemplu de
aplicare a blocului switch este:
switch lower(METHOD)
case {'linear','bilinear'}
disp('Method is linear')
case 'cubic'
disp('Method is cubic')
case 'nearest'
disp('Method is nearest')
otherwise
disp('Unknown method.')
end

Un alt bloc de instruciuni este blocul try-catch. Blocul try are forma
general:
try
statement; ..., statement;
catch
statement; ...; statement;
end

n mod normal, se execut numai seturile de instruciuni dintre try i catch.
Limbajul Matlab instruciuni i funcii de control specifice 83
Dac se ntlnete o eroare pn la instruciunea catch, atunci aceasta este captat
n lasterr i se va executa setul de instruciuni dintre catch i end. Dac i n
aceast secven se ntlnete o eroare, execuia se oprete i eroarea este memorat
n lasterr. Controlul execuiei se transfer unui alt eventual bloc try-catch.
Instruciunea lasterr memoreaz ultima eroare ntlnit n execuia Matlab.
Chemat simplu lasterr, ea returneaz ultima eroare ntlnit. Chemat lasterr(''),
reseteaz matricea erorilor, pregtind-o pentru urmtoarea secven de rulare.
Instruciunea return
Instruciunea return comand o ieire normal din fiierul de tip M
(nume_fiier*m) ctre funcia care l-a apelat sau ctre tastatur. Se apeleaz cu
sintaxa:
return
Un exemplu de aplicare este:
function d = det(A)
if isempty(A)
d = 1;
return
else
...
end
5.2. Instruciuni pentru evaluare i execuie
Funcia eval execut o expresie Matlab dat sub form de caractere, s, putnd
fi apelat sub forma eval(s). De exemplu, apelat sub forma,
eval('sin(pi/3)')
evalueaz sin(pi/3) i returneaz rezultatul
ans =
0.8660
Dac expresia Matlab lucreaz cu matrice, atunci evaluarea se face pentru
orice element al matricei, ca de exemplu:
x=[1 2 3 4 5] ; eval('x.^2+x+2'), care d rezultatul,
ans =
4 8 14 22 32
Un alt exemplu este selectarea programului de executat, funcie de numrul
introdus de la tastatur:
D = ['odedemo '
'quaddemo'
'fitdemo '];
n = input('Select a demo number: ');
eval(D(n,:))

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 84
Funcia evalc este asemntoare cu eval, cu deosebirea c expresia s, sub
form de caractere, este preluat printr-o comand window i este returnat ntr-o
matrice de ieire, T, avnd liniile separate. Apelarea se face cu sintaxa T=evalc(s).
Apelarea se face asemntor cu eval.
De notat c la apelarea lui evalc sunt inactive comenzile diary, more i input.

Funcia feval execut o anumit funcie, specificat sub form de caractere i
returneaz mrimile de ieire. Structura general este de forma:
[y1,..,yn] = feval(F,x1,...,xn)
n care x1,...,xn sunt argumentele de intrare pentru funcia F, dat sub form de
character, iar y1,..,yn sunt argumentele de ieire ale funciei F.
Un exemplu de mod de apelare este:
[hm,hv,hmol]=feval('Haert',35)
care are acelai rezultat,
hm =
309.5269
hv =
400.0208
hmol =
8.9661e+003
ca i [hm,hv,hmol]=Haert(35).

Funcia evalin evalueaz o expresie din spaiul de lucru, fiind apelat cu
sintaxa [X,Y,Z,...] = evalin(WS,'expression'), n care WS este spaiul de lucru pe
care se gsete 'expression'. Spaiul de lucru WS poate fi 'caller' sau 'base'. Este
similar cu eval, cu excepia faptului c se menine controlul spaiului de lucru de
pe care se evalueaz expresia.
Un exemplu de apelare este [hm,hv,hmol]=evalin('caller','Haert(35)'), care
calculeaz aceleai mrimi ca i anterior.

Funcia builtin evalueaz numai funciile interne ale Matlab, fiind pentru
acestea asemntoare cu feval. Sintaxa de apelare este:
[y1,..,yn] = builtin(F,x1,...,xn)
n care x1,...,xn sunt argumentele de intrare pentru funcia F, dat sub form de
caractere, iar y1,..,yn sunt argumentele de ieire ale funciei F.
De exemplu,
builtin('sin',pi/3)
conduce la:
ans =
0.8660,
la fel ca i feval('sin',pi/3).

Funcia assignin(WS, name,V) atribuie variabilei name o valoare V n
Limbajul Matlab instruciuni i funcii de control specifice 85
spaiul de lucru WS, care poate fi 'caller' sau 'base'.
De exenplu, prin:
assignin('caller','b',15)
variabila b primete valoarea,
b =
15

Funcia run execut n mod normal un program Matlab, fr s fie explicit
chemat sub forma run nume_fiier, ci numai prin tastarea numelui fiierului i
apsarea tastei Enter. Pentru a se putea rula programul, acesta trebuie s se
gseasc n calea de lucru Matlab, fapt ce se poate obine, fie prin utilizarea
instruciunii addpath, care adaug directorul n calea de lucru, fie prin utilizarea
comenziicd care schimb directorul de lucru, acolo unde este nume_fiier.
5.3. Funcii i variabile specifice
Un fiier script este un fiier extern, avnd extensia m, care conine o
secven de comenzi Matlab, ca de exemplu nume_fiier.m. Din aceast cauz, mai
sunt denumite fiiere de tip M. Prin apelarea numelui fiierului, se execut secvea
Matlab coninut n acesta. Dup execuia complet a unui fiier script, variabilele
cu care acesta a operat rmn n zona de memorie a aplicaiei. Aceste fiiere nu
permit integrarea n programe mari, realizate pe principiul modularizrii. Fiierele
script sunt folosite pentru rezolvarea unor probleme care cer comenzi succesive
att de lungi, nct ar putea deveni greoaie pentru lucrul n mod interactiv, adic n
modul linie de comand.
Un exemplu de program script este cel pentru calculul randamentului pompei
de alimentare, care vehiculeaz un debit de ap:
d= 120; x=d.*3.6;
c=[-2.394344424806420e-013 1.204969248337818e-009 ...
-2.493067720884727e-006 2.359430867915677e-003 ...
-1.006032839331329e-002];
eta=c(1).*x.^4+c(2).*x.^3+c(3).*x.^2+c(4).*x+c(5);
end
n care: c constantele curbei debitului, d [kg/s] este debitul de ap vehiculat de
pompa de alimentare, iar eta randamentul pompei, care depinde de debit.

Fiierele funcie sunt un tip special de fiiere M, care conin n prima linie
cuvntul function, prin care fiierul respectiv este declarat ca fiier funcie. O
funcie difer de un script prin faptul c poate lucra cu argumente (de intrare
i/sau ieire). Variabilele definite i manipulate n interiorul unui fiier funcie sunt
localizate la nivelul acestuia. Prin urmare, la terminarea execuiei unei funcii, n
memoria calculatorului nu rmn dect variabilele de ieire ale acesteia.
Fiierele funcie sunt utilizate pentru extinderea Matlab-ului, adic pentru
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 86
crearea unor noi funcii Matlab. Forma general a primei linii a unui fiier funie
este:
function [param_ieire]=nume_funcie(param_intrare)
unde:
function cuvntul cheie obligatoriu care declar fiierul de tip funcie;
param_iesire parametrii de ieire care trebuie separai prin virgul i
cuprini ntre paranteze drepte, iar dac funcia nu are parametrii de ieire
atunci parantezele drepte i semnul egal nu mai au sens;
nume_funcie numele functiei, adica numele sub care se salveaz fiierul,
iar acesta nu trebuie s fie identic cu al unei funcii Matlab existente;
param_intrare parametrii de intrare care trebuie separai prin virgul i
nchii ntre paranteze rotunde, iar dac funcia nu are parametrii de intrare
aceste paranteze nu mai au sens.

Aceste fiiere pot fi adugate ca funcii noi n structura Matlab. Comenzile i
funciile care sunt utilizate de noua funcie sunt nregistrate ntr-un fiier cu
extensia *.m. Prima linie a fiierului trebuie s conin definiia sintactic a noii
funcii. De exemplu, fiierul de mai sus, care calculeaz randamentul pompei de
alimentare funcie de debit, se poate numi etapa.m, fiind de forma:
function eta=etapa(d)
% function eta=etapa(d)
% d [ kg/s ] - debit apa vehiculat de Pompa de alimentare PA
% eta [ - ] - randament Pompa de Alimentare PA
x=d.*3.6;
c=[-2.394344424806420e-013 1.204969248337818e-009 ...
-2.493067720884727e-006 2.359430867915677e-003 ...
-1.006032839331329e-002];
eta=c(1).*x.^4+c(2).*x.^3+c(3).*x.^2+c(4).*x+c(5);
end

Din exemplele anteriore, se observ i diferena dintre un fiier funcie i un
fiier script.

Dac considerm funcia existent, stat.m, care calculeaz deviaia statistic,
function [mean,stdev] = stat(x)
%STAT Interesting statistics.
n = length(x);
mean = sum(x) / n;
stdev = sqrt(sum((x - mean).^2)/n);
putem defini o nou funcie avg.m, care calculeaz media,
function mean = avg(x,n)
%MEAN subfunction
mean = sum(x)/n;
ce poate fi chemat n stat.m, aceasta devenind:
Limbajul Matlab instruciuni i funcii de control specifice 87
function [mean,stdev] = stat(x)
%STAT Interesting statistics.
n = length(x);
mean = avg(x,n);
stdev = sqrt(sum((x-avg(x,n)).^2)/n);
Prin urmare, o funcie poate fi chemat n interiorul altei funcii, ceea ce
permite o mare flexibilitate n rezolvarea unor probleme complexe.

Definirea unei variabile globale se face prin instruciunea global, care are
urmtoarea sintax:
global X Y Z,
n care variabilele Z, Y i Z sunt definite global.
n mod normal, fiecare funcie Matlab, definit printr-un fiier de tip m, are
variabile locale, care nu pot fi utilizate n alte funcii i care nu apar n spaiul de
lucru. Pentru ca mai multe funcii s lucreze cu aceeai valoare a unei variabile,
calculat ntr-o funcie sau din spaiul de lucru, aceasta este declarat de tip global.


Dac la momentul declarrii variabilei, aceasta nu are alocat o valoare,
atunci se iniializeaz pentru ea o matrice goal, n care urmeaz a se introduce
valoarea calculat la momentul apelrii funciei, n care i se aloc o valoare. Fr a
fi strict necesar, variabilele globale sunt de regul definite cu litere mari.

Verificarea faptului dac o variabil este de tip global se face prin
instruciunea isglobal, care are urmtoarea sintax:
isglobal(A)
care returneaz 1, dac A este declarat de tip global i 0, altfel.

n mod normal, dup chemarea unei funcii, variabilele locale sunt terse din
memorie. Prin comanda persistent X Y Z, se rein n memorie variabilele locale
X, Y i Z dintr-o funcie oarecare, dup ce aceasta a fost chemat. Variabilele
persistente sunt similare cu variabilele locale, cu deosebirea c acestea pot fi create
i schimbate numai n funcia n care au fost definite, prevenindu-se modificarea
lor n alte funcii Matlab, unde pot avea acelai nume (X, Y, Z). Numele
variabilelei persistente nu trebuie s fie acelai cu al unei variabile din spaiul de
lucru.
Variabilele persistente sunt terse din memorie, cnd fiierul de tip m este
modificat sau prin comanda mlock.

Comanda mlock previne tergerea fiierului de tip m din memorie, printr-o
comand clear.

Comanda mfilename, d numele fiierului de tip m executat n momentul
respectiv. Cnd comanda este executat ntr-un fiier, atunci la execuia acestuia,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 88
prima dat se d i numele fiierului de tip m, sub care este salvat funcia.
De exemplu, funcia car, d cldurile specifice ale CaO solid,
function [cp,cpm]=cpcao(t)
% function [cp,cpm]=cpcao(t)
% Cldurile specifice masice i molare reale, a CaO solid
% funcie de temperatur, dup Hayhurst
% cp [ kJ/(kg.K) ] - cldura specific masic real la p=const.
% cpm [kJ/(kmol.K)] - cldura specific molar real la p=const.
% t [ grd. C ] - temperatura > 298 K si < 3020 K
% Mmol [ kg/kmol ] - masa molar CaO solid.
Mmol=56.8; tk=t+273.15; a=48.86; b=4.52e-3; c=-6.53e+5;
cpm=a+b.*tk+c./tk.^2; cp=cpm./Mmol; format
mfilename
apelat cu comanda,
[cp,cpm]=cpcao(50)
conduce la,
ans =
cpcao
cp =
0.7758
cpm =
44.0674

Dac schimbm numele fiierului m din cpcao.m n ,de exemplu, cap.m,
atunci putem apela funcia de mai sus cu,
cp,cpm]=cap(50)
care va avea ca rezultat:
ans =
cap
cp =
0.7758
cpm =
44.0674

Cnd comada mfilename este apelat singur, ca de exemplu,
mfilename
atunci va returna o matrice goal,
ans =
[]

Crearea unei liste de variabile, lists, separate prin virgul, dintr-o matrice de
tip celul sau structurarea unei liste se poate face:
prin comanda C{:} sau S.name ;
cu paranteze, n partea de chemare a funciei : myfun(x,y,C{:}) sau
Limbajul Matlab instruciuni i funcii de control specifice 89
myfun(x,y,S.name) ;
cu paranteze drepte, n partea de ieire, care produce o cocatenare
orizontal : [C{:}] sau [S.name]
cu paranteze drepte [C{:}] = myfun sau [S.name] = myfun ;
cu acolade n partea de construcie a celulei : {C{:}} sau {S.name}

n toate cazurile de mai sus, C{:} este la fel ca i C{1},C{2},...,C{end}, iar
S.name este la fel ca i S(1).name,S(2).name,...,S(end).name. Dac C sau S sunt o
matrice de 1-pe-1, atunci se produce sau extrage un singur element, iar pentru mai
multe elemente se utilizeaz : , ca de exemplu C{1:5} sau S(2:3).name.
De exemplu:
C = {1 2 3 4}
A = [C{:}]
B = cat(2,C{:})
[S(1,3,:).FIELD] = magic(4)
conduce la:
C =
[1] [2] [3] [4]
A =
1 2 3 4
B =
1 2 3 4
S =
1x3 struct array with fields:
FIELD
iar S.FIELD este,
ans =
[]
ans =
[]
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

Verificarea existenei unei variabile sau funcii se execut prin comanda
exist, avnd structura,
exist('A')
la care se returneaz :
0 ,dac A nu exist ;
1, dac A este o variabil din spaiul de lucru ;
2, dac A este un fiier de tip m n directorul cutat sau A este numele
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 90
directorului ;
3, dac A este un fiier de tip mex n directorul n care se caut ;
4, dac A este un fiier de tip mdl n directorul n care se caut ;
5, dac A este o funcie intern a Matlab ;
6, dac A este un fiier de tip p n directorul n care se caut ;
7, dac A este un director ;
8 ,dac A este din clasa Java.

Instruciunea exist('A') sau exist('A.ext') returneaz 2, dac numele 'A' sau
'A.ext' i extensia este P sau MEX.
Prin exist('a', 'var'), caut numai variabila a n fiierul n care este comanda
sau n spaiul de lucru.
Instruciunea exist('A',builtin) caut numai funciile interne, iar cu
exist('A', 'file') se caut numai fiiere sau directoare.
Prin exist('A', 'dir') se caut numai existena directoarelor, iar cu exist('A',
'class') se verific existena fiierelor de tip Java.
Atunci cnd rezultatul cutrii este nul, se returneaz 0.

Prin instruciunea munlock('fun') se terge din memorie fiierul fun, de tip
m, avnd ca efect similar cu cel al comenzii clear, fr ns a-l terge permanent.

Comanda mislocked('fun') returneaz 1, dac numele 'fun' este n memorie
i 0, altfel.

Operatorii precedeni versiunii rulate momentan sunt identificai cu comanda
precedente, care, de regul, se refer numai la operatorii interni (built-in).
Operatorii interni, ordonai dup trie, n ordinea, de la cel mai puternic
(highest) spre cel mai slab (lowest), sunt:
1. transpunerea (.'), putere (.^), conjugatul complex, transpusa ('), matrice
la putere (^);
2. adunare matrice (+), scdere matrice (-), negaie logic (~);
3. multiplicare (.*), mprire la dreapta (./), mprire la stnga (.\),
multiplicare matrice (*), mprire la dreapta matrice (/), mprire la
stnga matrice (\);
4. adunare (+), scdere (-);
5. operatorul a dou puncte sau colon (:);
6. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal, cu
(>=), egal (==), nu este egal (~=);
7. operatorul logic i - and (&);
8. operatorul logic sau - or (|)

Pentru a vedea dac numele unei variabile este valid n Matlab, se utilizeaz
Limbajul Matlab instruciuni i funcii de control specifice 91
instruciunea,
Isvarname(S)
unde S, este numele variabilei. De menionat c numele unei variabile Matlab
trebuie sa nceap cu o liter i poate avea pn la 31 de semne diferite (litere i/sau
numele), separate cel mult prin liniu jos (underscore).
5.4. Argumente de intrare
Verificarea dac numrul argumentelor de intrare ale unei funcii este corect
ales la apelare, se face cu instruciunea:
MSG = nargchk(low,high,N),
care returneaz un mesaj de eroare, dac N-, numrul de argumente de intrare nu
este cuprins ntre low i high. Dac numrul de argumente se ncadreaz n
domeniul respectiv, se returneaz o matrice vid.

Pentru testarea numrului argumentelor de intrare, ce trebuie introduse pentru
apelarea unei funcii, este disponibil variabila permanent nargin, care se
apeleaz cu sintaxa:
nargin(fun),
unde fun, este numele funciei creia i se caut numrul de argumente. Se returnez
numrul variabilelor de intrare, iar dac funcia nu are intrri, se returneaz un
numr negativ.
Pentru hfpt(p,t), avnd 2 argumente, se obine:
nargin('tfph')
ans =
2

Pentru testarea numrului argumentelor de ieire, ce pot fi introduse pentru
apelarea unei funcii, este disponibil variabila permanent nargout, care se
apeleaz cu sintaxa:
nargout(fun),
unde fun, este numele funciei creia i se caut numrul de argumente de ieire. Se
returnez numrul variabilelor de ieire, iar dac funcia nu are ieiri, se returneaz
un numr negativ.
Pentru hfpt(p,t), avnd un argument, se obine:
nargout('tfph')
ans =
1.
Lista variabilelor de intrare este dat prin variabila varargin, care poate
avea orice numr de argumente de intrare ale funciei. Variabila varargin este o
matrice, ce conine argumentele opionale ale funciei. Ea trebuie declarat ultim
argument de intrare (scris numai cu litere mici) i colecteaz toate argumentele de
intrare,
function myplot(x,varargin)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 92
plot(x,varargin{:})
La apelarea prin comanda,
myplot(sin(0:.1:1),'color',[.5 .7 .3],'linestyle',':')
rezult o matrice de 1 x 4 care conine valorile: 'color', [.5 .7 .3], 'linestyle', and ':'.
Lista variabilelor de ieire este dat prin variabila varargout, care poate
avea orice numr de argumente de ieire ale funciei. Variabila varargout este o
matrice ce conine argumentele opionale ale funciei. Ea trebuie declarat ultim
argument de ieire (scris numai cu litere mici) i colecteaz toate argumentele de
ieire. De exemplu, funcia,
function [s,varargout] = mysize(x)
nout = max(nargout,1)-1;
s = size(x);
for i=1:nout, varargout(i) = {s(i)}; end

returneaz dimensiunea vectorului argumentelor, respectiv:
[s,rows,cols] = mysize(rand(4,5));

returneaz,
s = [4 5], rows = 4, cols = 5.
Numele argumentului (variabilei) de intrare este memorat n variabila
inpuitname. Dac considerm funcia,
function y = myfun(a,b)
disp(sprintf('My first input is "%s".' ,inputname(1)))
disp(sprintf('My second input is "%s".',inputname(2)))
y = a+b;
then
x = 5; myfun(x,5)
aceasta produce,
My first input is "x".
My second input is "".
Dac nu exist nici un nume al variabilei de intrare, ca la apelrile:
a(1), varargin{:}, eval(expr) etc.,
atunci se returneaz o matrice goal.
5.5. Mesaje pe display
Afiarea unor mesaje, la ntlnirea unei erori, se face prin instruciunea
error, care se apeleaz cu sintaxa: error( 'MSG').
Dup afiarea textului 'MSG', controlul este redat tastaturii. Cele mai
frecvente mesaje sunt: <component>[:<component>]:<mnemonic>, unde
<component> i <mnemonic> sunt alfanumerice.
De exemplu, pentru a verifica c o funcie (aici numit test) este apelat
corect, ca numr de argumente de intrare (aici 2), se procedeaz astfel:
Limbajul Matlab instruciuni i funcii de control specifice 93
function test(x,y)
if nargin ~=2
error('Numrul argumentelor de intrare greit')
end.
Afiarea unui mesaj de avertizare, care nu ntrerupe execuia programului,
se face cu instruciunea warning('MSG'), care permite afiarea pe ecran a
mesajului de avertizare MSG, care poate fi 'MATLAB:divideByZero'.
Prin comanda warning off se suprim afiarea oricrui mesaj, iar prin
comanda warning on, se afieaz toate mesajele de avertizare. Comanda warning
backtrace este la fel ca i comanda warning on, cu deosebirea c fiierul
numeroteaz liniile de mesaje de avertizare. Prin instruciunea warning debug se
pornete depanatorul i are ca efect stoparea programului, ca i instruciunea
dbstop if warning, oprind rularea la ntlnirea unei erori.
Prin comanda warning once, se prezint pe ecran orice informaie
referitoare la graficele din sesiunea de lucru. Prin comanda warning always, se
dau mesaje privind compatibilitatea graficelor executate. La executarea comenzii
warning debug, se activeaz debuger-ul, similar ca i la comanda dbstop if
warning.
Pentru setarea argumentului de stare, ARG, la una din strile on, off,
backtrace sau debug i rentoarcerea strii n mrimea de ieire, S, se utilizeaz
comanda,
S=warning(ARG),
iar pentru a marca mesajul de atenionare cel mai frecvent, se utilizeaz comanda,
[S,F]= warning(ARG),
unde ,n F, este reinut mesajul cel mai frecvent.
Afiarea pe ecran a ultimului mesaj de eroare ntlnit se face prin comanda
lasterr. Dac nu a fost ntlnit nici o eroare, se afieaz o matrice vid,
ans =
''
iar la intlnirea unei erori, de exemplu mrimea c este nedefint, se afieaz:
ans =
Undefined function or variable 'c'.
Pentru afiarea pe ecran a ultimului mesaj de avertizare, se utilizeaz
comanda lastwarn, care returneaz o matrice vid, dac nu s-a ntlnit nici un
mesaj de avertizare,
ans =
''
sau coninnd mesajul de averizare,
Warning: File:C:\MATLABR12\work\bunem\CPCAO.M Line: 13 Column: 1
Unmatched "end".
Afiarea pe ecran a unei informaii coninute ntr-o matrice X, se face cu
comanda disp('X'), astfel :
disp(' Presiunea absolut a aburului viu, pab [ bar ]')
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 94
care are ca efect afiarea pe ecran :
Presiunea absolut a aburului viu, pab [ bar ]
Pentru a afia pe ecran o matrice, se utilizeaz comanda display. Pentru
obiectul X, funcia este chemat cu display, apeleaz funcia disp, ca n exemplu,
X = inline('sin(x)')
pentru care se obine,
X =
Inline function:
X(x) = sin(x)
n mod normal, funcia display(X) apeleaz funcia disp, n cadrul unor
bucle, precum,
function display(X)
if isequal(get(0,'FormatSpacing'),'compact')
disp([inputname(1) ' =']);
disp(X)
else
disp(' ')
disp([inputname(1) ' =']);
disp(' ');
disp(X)
end
Scrierea datelor n format se face cu instruciunea fprintf, care are structura,
COUNT = printf(FID,FORMAT,A,...)
unde:
COUNT este numrul de bii scrii succesiv, care de cele mai multe ori
lipsete;
FID este un un numr ntreg, asociat pentru identificarea fiierului n care se
scrie, care poate fi ieirea standard, respectiv ecranul, cnd FID=1 sau este
omis, sau 2 pentru erorile standard;
FORMAT, este formatul de scriere ;
A, este matricea care trebuie scris.
Identificatorul FID al fiierului ,se obine prin funcia fopen.
Formatul de scriere este un caracter specific limbajului C, precedat de
caracterul %, ce arat nceputul conversiei specificate, astfel nct, s poat fi
scrise datele din matricea A. Principalele formate de scriere sunt d, i, o, u, x, X, f,
e, E, g, G, c i s.
Conversia datelor controleaz notaia, alinierea, semnele (digii)
semnificative, mrimea cmpului i alte aspecte ale formatului de scriere. Acest
format poate conine i caractere speciale neprintabile, precum \n,\r,\t,\b,\f, \\, care
produc o linie nou, rentoarcerea cursorului la cap de rnd (carriage return), tab
orizontal, backspace, form liber i beckslash.
Prin urmare, conversia ncepe ntotdeauna cu caracterul % i conine
Limbajul Matlab instruciuni i funcii de control specifice 95
urmtoarele elemente opionale sau obligatorii,
semne, opionale, care controleaz alinierea, respectiv :
caracterul -, care poziioneaz datele la stnga i justificat, iar dac
lipsete poziionarea, se face la dreapta;
caracterul +, care scrie ntotdeauna semnul datei (plus,+, sau minus,-);
caracterul 0, care scrie n spaiile libere zero (0);
mrimea i precizia cmpului,opional, precum :
mrimea cmpului n digii, ca de exemplu 6 (prin %6f);
precizia, prin precizarea numrului de digii aflai dup punctual
zecimal, ca de exemplu 3 (prin %6.3f);
formatul de conversie obligatoriu, care poate fi :
semnul c, pentru un singur caracter;
semnul d, pentru notaia zecimal;
semnul e, pentru scrierea sub forma lui exponenial, cu litera e mic;
semnul E, pentru scrierea sub form exponenial, cu litera E mare;
semnul f, pentru notaia cu punct zecimal sau virgul fix;
semnul g, o form mai compact dect formatele e sau f,
nescriind zerourile nesemnificative;
semnul G, asemntor cu g, dar utiliznd notaia G;
semnul o, pentru date n baza opt (octagonal);
semnul s pentru caractere;
semnul u, pentru date n baza decimal;
semnul x, pentru date hexazecimale, utiliznd litere a-f;
semnul X, pentru date hexazecimale, utiliznd litere A-F;
subtipul de format de scriere, opional, utilizat n special pentru date n
dubl precizie i baza octogonal, zecimal sau hexagonal, ca de exemplu,
punnd caracterul b, naintea caracterului x ('%bx').

Formatul fprintf este vectorizat pentru cazul n care datele nu sunt scalare,
fiind repetat de cte ori e necesar.
De exemplu, setul de instruciuni,
x = 0:.1:1; y = [x; exp(x)];
fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f 12.8f\n',y); fclose(fid);
create de fiierul text, numit exp.txt, coninnd un scurt tabel al funciei
exponeniale,
0.00 1.00000000
0.10 1.10517092
0.20 1.22140276
0.30 1.34985881
0.40 1.49182470
0.50 1.64872127
0.60 1.82211880
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 96
0.70 2.01375271
0.80 2.22554093
0.90 2.45960311
1.00 2.71828183

Comanda,
fprintf('A unit circle has circumference %g.\n',2*pi)
afieaz pe ecran,
A unit circle has circumference 6.28319.
Pentru a introduce un apostrof, ca semn ntre caractere, se utilizeaz de dou
ori apostroful, ca, de exemplu, fprintf(1,'Its Friday.\n'), care scrie It's Friday.
Prin setul de comenzi:
B = [8.8 7.7; 8800 7700];
fprintf(1,'X este %4.2f metri sau %8.3f mm\n',9.9,9900,B);
se obine,
X este 9.90 metri sau 9900.000 mm
X este 8.80 metri sau 8800.000 mm
X este 7.70 metri sau 7700.000 mm.
Conversia unor date ,n 32 bii, n date hexazecimale, se face astfel:
a = [6 10 14 44];
fprintf('%9X\n',a + (a<0)2^32)
rezultnd,
6
A
E
2C.
Scrierea datelor formatate dintr-o matrice A, n variabila Matlab S, utiliznd
un anume FORMAT, ca cel specificat anterior, se realizeaz cu funcia sprintf
apelat,
[S,ERRMSG] = sprintf(FORMAT,A,...)
n care, ERRMSG este un mesaj de eroare, ntlnit la conversie sau dac matricea
A e vid.

Funcia sprintf este asemntoare funciei fprintf, cu deosebirea c
returneaz datele n format Matlab.
De exemplu,
sprintf('%0.5g',(1+sqrt(5))/2) conduce la 1.618
sprintf('%0.5g',1/eps) conduce la 4.5036e+15
sprintf('%15.5f',1/eps) conduce la 4503599627370496.00000
sprintf('%d',round(pi)) conduce la 3
sprintf('%s','hello') conduce la hello
sprintf('The array is %dx%d.',2,3) conduce la The array is 2x3.
sprintf('\n') este linie de terminare a caracterelor.
Limbajul Matlab instruciuni i funcii de control specifice 97
5.6. Intrri (inputuri) interactive
Introducerea datelor de la tastatur se realizeaz prin instruciunea input,
care d comanda utilizatorului, ca de exemplu:
n=input('introducei numrul proiectului, n= ')
care conduce la afiarea pe ecran a mesajului,
introducei numrul proiectului, n=
dup care, Matlab ateapt introducerea numrului n, iar dac se introduce 1 i se
execut Enter, atunci se rspunde prin,
n=1.

Prin comanda input, se poate aloca o anumit valoare, introdus de la
tastatur, unei variabile, aici sim, prin comanda: sim=input('puterea
transformatorului este:').
Pentru valori alfanumerice, variabile de tip caracter, comanda este de forma:
input('Comentariu ','s'). Semnul s poate conine unul sau mai multe semne '\n',
ceea ce indic saltul la urmtoarea linie.

Chemarea tastaturii ntr-un fiier de tip M, se realizeaz prin comanda
keyboard, care trece controlul acesteia, iar revenirea la programul respectriv se
face dup introducerea datei cerute (sau nu), dar oligatoriu prin executarea
comenzii RETURN. Funcia este util n depanarea unor programe.
Funcia pause conduce la ateptarea unui rspuns din partea utilizatorului.
Apelat sub forma pause(n), se face o pauz de n secunde (poate fi i numr
fracional de forma lui k*0.01), pn la urmtoarea instruciune.
Comanda pause off dezactiveaz orice alt comand pause sau pause(n),
pn la ntlnirea, eventual, a comenzii pause on.
Crearea meniurilor pentru interfee grafice se realizeaz cu funcia uimenu,
iar crearea elementelor de control pentru interfee grafice se execut prin comanda
uicontrol. O explicitare a acestor comenzi este redat n capitolul de grafic.
5.7. Tipuri de date
5.7.1. Conversii de date
Setarea indicatorului ir de caractere se obine cu funcia setstr, care
returneaz caracterul corespunztor lui n din setstr(n), n fiind in intervalul 32127,
pentru precizie simpl i 0255, pentru precizie dubl.
Detectarea irurilor de caractere se realizeaz cu funcia isstr, care lucreaz
logic.

Formarea matricei ir de caractere, din iruri individuale, se execut cu
funcia str2mat, apelat cu sintaxa
S=str2mat(s1,s2,...)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 98
rezultnd numrul de linii ale matricei S, egal cu numrul irurilor individuale,
s1,s2,..., iar numrul de coloane este egal cu dimensiunea celui mai mare ir
component.

Introducerea unui numr de spaii, n, se realizeaz cu funcia blanks(n), iar
eliminarea spaiilor goale din irul S, cu funcia deblank(S).

Crearea unui ir de caractere se realizeaz prin instruciunea char, care se
poate apela:
S = char(X), transform irul X, ce conine elemente ntregi, pozitive, ntr-
un ir de caractere, n intervalul 0-65535, iar prin double, transformm
irul de caractere n numeric ;
S = char(C), unde C, este o parte a irului; plaseaz fiecare element al lui
C, ntr-o coloan a irului de caractere S, iar pentru a transforma napoi, se
utilizeaz cellstr ;
S = char(t1,t2,t3,..), formeaz caracterele irului S, ce conine textele
t1,t2,t3,pe coloan, iar fiecare parametru al textului, ti, poate fi nsi un
ir de caractere.

Pentru a afia pe monitor irul de caractere ASCII, de la 3 la 32, se utilizeaz
comanda,
ascii = char(reshape(32:127,32,3)'),
rezultnd,
ascii =
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
' a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Conversia literelor mici dintr-un ir de caractere, s, n litere mari, S, se
realizeaz cu S=upper(s).
Conversia literelor mari dintr-un ir, S, n litere mici, s, se execut cu
s=lower(S).
Verificarea dac, ntr-un ir de caractere, S, sunt literele alfabetului, se face
cu F=isletter(S), care lucreaz logic, ntorcnd 1, pentru adevrat i 0, pentru fals.
Compararea a dou iruri de caractere se realizeaz cu funcia strcmp,
apelat,
F=strcmp(S1,S2)
care compar irul S1 cu irul S2 i returneaz F=1, dac este adevrat i F=0, dac
este fals. Funcia lucreaz n modul senzitiv, incluznd n comparaie, spaiile
dintre caractere i tipul caracterelor, mari sau mici, folosite la scriere.

Cutarea unui ir de caractere, S2, ntr-un alt ir de caractere, S1, se
realizeaz cu,
M=findstr(S1,S2)
rezultnd poziia M, de la care ncepe irul S2 n irul S1.
Limbajul Matlab instruciuni i funcii de control specifice 99

Conversia unui numr, X, ntr-un ir de caractere, S, se obine cu
S=num2str(X), iar funcia invers este X=str2num(S).

Conversia unui ntreg, I, ntr-un ir de caractere, S, se realizeaz prin
S=int2str(I).

Conversia numerelor zecimale ntregi, n, la numere hexazecimale, h, se
face prin h=dec2hex(n), iar trecerea invers se execut cu funcia n=hex2dec('h').

Transformarea datelor n dubl precizie se realizeaz cu instruciunea
double(x), care determin o valoare n dubl precizie pentru x. Dac x este deja un
ir n dubl precizie, instruciunea double nu mai are efect. Double este chemat
de expresii de forma for, if i while loops, dac expresia nu este deja de precizie
dubl.
Transformarea n precizie simpl se realizeaz cu funcia single,
B = single(A)
transform matricea A n precizie simpl, returnnd valorile n B. Matricea A poate
fi de orice form numeric (chiar i precizie dubl). Dac A este deja de precizie
simpl, single nu are efect. Precizia simpl necesit un spaiu de stocare mai mic
dect precizia dubl, dar are o precizie slab.
Transformarea unui vector, X, ntr-un ntre, fr semn se face cu funciile,
uint8, uint16, uint32. Dac X este deja un numr ntreg far semn, din aceeai
clas, uint... nu are nici un efect.
Apelate, i=uint..., acestea acioneaz astfel:
uint8 utilizeaz 1 byt pe element, pentru ntregi ntre 0 i 255 ;
uint16 utilizeaz 2 byi pe element, pentru ntregi de la 0 la 65 535 ;
uint32 utilizeaz 4 byi pe element, pentru ntregi ntre 0 i 4 294 967 295.

Transformarea unui vector, X, ntr-un ntreg cu semn se face cu funciile,
int8, int16, int32. Dac X este deja un numr ntreg cu semn, din aceeai clas,
int... nu are nici un efect.
Apelate, i=int..., acestea acioneaz astfel:
int8 utilizeaz 1 byt pe element, pentru ntregi ntre -128 i 128 ;
int16 utilizeaz 2 byi pe element, pentru ntregi de la -32 768 la 32 767 ;
int32 utilizeaz 4 byi pe element, pentru ntregi ntre -2147483648 i
21474836470.

Scrierea datelor dintr-o matrice sau vector A, ntr-un format dorit, se face cu
funcia sprintf, care se apeleaz cu sintaxa: S=sprintf('format',A).
Parametrul de control, irul 'format', conine specificaia de conversie i poate
fi de forma,
% -d.p tip_format
n care,
semnul - este opional i specific alinierea la stnga, iar dac lipsete,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 100
alinierea se face la dreapta;
d este numrul minim de cifre (cmpuri) aferente datei respective;
p este numrul de cmpuri folosite pentru partea zecimal;
tip_format poate fi unul din caracterele:
e notaie exponenial ; f - notaie n virgul fix ;
g - formatele scurte ale lui e sau f, fr zerourile nesemnificative ;
\n - linie nou ; \t - tab orizontal ; \b - backspace ;
\r - carriage return (de la cap de rnd) ;
\f - form feed ; \\ backslash ; \ - apostrof.
5.7.2. Construirea unui obiect n linia de comand
Construirea unui obiect n linie, se realizeaz cu funcia inline, care se poate
apela cu una dintre sintaxele:
inline(expr), construiete o funcie de tip obiecte pentru Matlab, coninnd
expresia expr, iar argumentul de intrare al funciei astfel construite este
determinat automat din expresia, expr, care se compar cu expresiile
Matlab valide, iar dac nu exist nici un caracter, se utilizeaz variabila x ;
inline(expr,arg1,arg2, ...), construiete o funcie care are argumentele de
intrare specificate de arg1, arg2,.... i, n acest caz, pot fi utilizate i
multicaractere ;
inline(expr,n), construiete o funcie cu n argumente, de n variabile.

Funcia inline este realizat practic de trei comenzi, care i determin modul
n care este creat,
char(fun), transform funcia linie, ntr-un ir de caractere, care sunt
identificate de formula fun;
argnames(fun), returneaz numele argumentelor de intrare ale liniei de
obiecte fun, din irul de celule;
formula(fun), returneaz formula pentru obiectul fun.
De exemplu comanda g = inline('t^2') conduce la:
g =
Inline function:
g(t) = t^2
comanda g = inline('sin(2*pi*f + theta)') conduce la,
g =
Inline function:
g(f,theta) = sin(2*pi*f + theta)
comanda g = inline('sin(2*pi*f + theta)', 'f', 'theta') conduce la,
g =
Inline function:
g(f,theta) = sin(2*pi*f + theta)
iar comanda g = inline('x^P1', 1) conduce la,
Limbajul Matlab instruciuni i funcii de control specifice 101
g =
Inline function:
g(x,P1) = x^P1
5.7.3. Funcii specifice irului de celule i structurilor
Crearea unui ir de celule se realizeaz prin cell, care se apeleaz cu una
dintre sintaxele:
c = cell(n), creeaz un ir de celule de forma n x n, afind un mesaj de
eroare, dac n nu este ntreg ;
c = cell(m,n) sau c = cell([m,n]), determin un ir m-n al matricei goale, iar
argumentele m i n trebuie s fie scalare ;
c = cell(m,n,p,...) sau c = cell([m n p ...]), creeaz un ir de celule m-n-p-
al matricei goale, dar argumentele m,n,p, trebuie s fie scalare ;
c = cell(size(A)), determin un ir de celule de dimensiunea lui A,
coninnd toate matrice goale ;
c = cell(javaobj), transform irul Java sau obiectele Java, javaobj, ntr-un
ir de celule n Matlab, iar elementele rezultate din irul de celule vor putea
fi recunoscute de Matlab.

De exemplu, pentru a crea un ir de celule care are aceeai dimensiune ca a
irului A, se utilizeaz secvena,
A = ones(2,2); c = cell(size(A)),
Rezultnd:
c =
[] []
[] []
Urmtorul exemplu transform un ir din obiecte al java.lang.String ntr-un
ir de celule din Matlab,
strArray = java_array('java.lang.String',3);
strArray(1) = java.lang.String('one'); strArray(2) = java.lang.String('two');
strArray(3) = java.lang.String('three'); cellArray = cell(strArray)
rezultnd:
cellArray =
'one'
'two'
'three'

Aplicarea unei funcii fiecrui element dintr-un ir se realizeaz cu cellfun,
apelat:
D = cellfun('fname',C), aplicat elementelor din irul C, al funciei fname,
determin un rezultat D, care este un ir dublu, n sensul c, fiecare
element din D conine valoarea returnat de fname, prin corespondena cu
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 102
irul C, iar D are aceeai dimensiune cu C ;
D = cellfun('size',C,k), determin dimensiunea fiecrui element, k, din C ;
D = cellfun('isclass',C,'classname'), determin adevarat pentru fiecare
element din C, care aparine unei clase i fals, pentru obiectele ce aparin
unei subclase.

Funcia 'fname'poate fi:
'isreal' - verific dac elementele celulei sunt reale;
'isempty' - verific dac elementele celulei sunt goale;
'islogical' - verific dac elementele celulei sunt elemente logice;
'length' - determin lungimea celulei;
'ndims' -determin numrul de dimensiuni ale celulei;
'prodofsize'-determin numrul de elemente din celul.

De exemplu, considerm irul de celule de forma 2-3, format prin setul de
instruciuni,
C{1,1} = [1 2; 4 5]; C{1,2} = 'Name'; C{1,3} = pi; C{2,1} = 2 + 4i;
C{2,2} = 7; C{2,3} = magic(3);
rezultnd celula C =
[2x2 double] 'Name' [ 3.1416]
[2.0000+ 4.0000i] [ 7] [3x3 double].
Verificarea, dac elementele sunt reale, se realizeaz cu D =
cellfun('isreal',C), rezultnd,
D = [ 1 1 1
0 1 1 ].
Lungimea elementelor celulei rezult cu len = cellfun('length',C), obinnd:
len = [ 2 4 1
1 1 3 ].
Determinarea elementelor duble ale celulei se realizeaz cu,
isdbl = cellfun('isclass',C,'double'),
rezultnd,
isdbl = [ 1 0 1
1 1 1 ].

Afiarea elementelor celulei se realizeaz cu funcia celldisp, care, aplicat
celulei C, de mai sus, este celldisp(C) i conduce la,
C{1,1} = [ 1 2 ; 4 5 ];
C{2,1} = [ 2.0000 + 4.0000i ];
C{1,2} = [ Name ];
C{2,2} = [ 7 ];
C{1,3} = [ 3.1416 ];
C{2,3} = [ 8 1 6 ; 3 5 7 ; 4 9 2 ].

Limbajul Matlab instruciuni i funcii de control specifice 103
Afiarea sau plotarea elementelor unei celule se execut cu comanda
cellplot, care se poate apela:
cellplot(c), afieaz o fereastr cu un grafic, reprezentat de coninutul lui
c, elementele fiind reprezentate de vectori i iruri de valori scalare i texte
scurte ;
cellplot(c,'legend') afieaz n plus, o legend, avnd culori diferite pentru
date de la double, char, sparse, structure i altele.

Transformarea unui ir de celule al unei matrice, ntr-o matrice simpl, se
realizeaz cu cell2mat, care se poate apela cu m = cell2mat(c).
Dac,
C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]}
adic,
C = [ 1] [1x3 double]
[2x1 double] [2x3 double]
prin,
M = cell2mat(C)
rezult,
M =
1 2 3 4
5 6 7 8
9 10 11 12.

Transformarea unei matrice obinuite, ntr-o matrice de celule, se realizeaz
cu comanda mat2cell, care se poate apela,
c = mat2cell(x,m,n)
i mparte n mai multe pri cele dou dimensiuni ale matricei x, returnnd irul de
celule, c, iar vectorii m i n specific numarul de linii i coloane.
Dac,
x=[1 2 3 4; 5 6 7 8; 9 10 11 12]
cu comanda,
c=mat2cell(x,[1 2],[2 2])
se obine,
c=
[1x2 double] [1x2 double]
[2x2 double] [2x2 double].

Transformarea unui ir numeric ntr-un ir de celule se realizeaz cu funcia
num2cell, care se poate apela,
C = num2cell(A), transform matricea A ntr-un ir de celule, plasnd
fiecare element din A ntr-o celul separat, iar irul de celule, C, va avea
aceeai dimensiune cu matricea A ;
C = num2cell(A,dims), transform matricea A ntr-un ir de celule, plasnd
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 104
dimensiunile specificate de dims, ntr-o celul separat, iar C are aceeai
dimensiune cu A, exceptnd cazul cnd dimensiunea este 1.

Dac A=[1 2 3; 4 5 6; 7 8 9], prin C=num2cell(A) se obine:
C =
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]

Administrarea intrrilor i ieirilor se realizeaz cu funcia deal, care se
apeleaz,
[Y1,Y2,Y3,...] = deal(X) copiaz intrrile unice n ieiri, fiind acelai lucru
ca i Y1 = X, Y2 = X, Y3 = X, ... ;
[Y1,Y2,Y3,...] = deal(X1,X2,X3,...) este acelai lucru ca i Y1 = X1; Y2 =
X2; Y3 = X3;

Pentru exemplificare, se prezint utilizarea funciei deal pentru a copia
coninutul irului de celule, C, n patru variabile separate de ieire, a,b,c,d, astfel:
C = {rand(3) ones(3,1) eye(3) zeros(3,1)}; [a,b,c,d] = deal(C{:}).

Realizarea unei structuri se execut cu funcia struct, apelat cu una dintre
sintaxele:
s = struct('field1',{},'field2',{},...) determin o structur goal, cu
cmpurile field1, field2, ... ;
s = struct('field1',values1,'field2',values2,...) determin o structur ir, cu
specificarea cmpurilor i a valorilor, cu observaia c valorile values1,
values2 etc. trebuie s fie un ir de celul de aceeai dimensiune sau celule
scalare, iar elementele corespunztoare irurilor de valori sunt plasate ntr-o
structur corespunztoare de elemente ir, cu dimensiunea rezultatului ca i
cea a valorilor irului de celule.

De exemplu, comanda
s = struct('type',{'big','little'},'color',{'red'},'x',{3 4})
determin o structur de ir s,
s =
1x2 struct array with fields:
type
color
x
n care,
s(1) =
type: 'big'
color: 'red'
x: 3
Limbajul Matlab instruciuni i funcii de control specifice 105
s(2) =
type: 'little'
color: 'red'
x: 4

Transformarea unui ir de celule ntr-o structur de tip ir, care s conin
informaia din celule, se realizeaz cu funcia cell2struct, apelat:
s = cell2struct(c,fields,dim)
n care, argumentele cmpurilor specific numele cmpului din structura irului, c,
astfel c fields poate fi un ir de celule, iar dim controleaz care valoare a irului de
celule este folosit n crearea structurii irului. Lungimea lui c este specificat de
numrul cmpurilor de nume fields; cu alte cuvinte, urmtoarele relaii trebuie s
fie adevrate:
size(c,dim) == length(fields) % dac cmpul este un ir de celule;
size(c,dim) == size(fields,1) % dac cmpul este un ir (vector);

Dac un ir de celule, c, conine informaii, (de exemplu cele trei coloane
indic numele, genul, greutatea)
c = {'birch','betula',65; 'maple','acer',50}
c =
'birch' 'betula' [65]
'maple' 'acer' [50]
pentru a pune aceste informaii ntr-o structur denumit 'nume', 'gen', 'greutate', se
folosete funcia cell2struct,
fields = {'nume', 'gen', 'greutate'};
s = cell2struct(c, fields, 2);
rezultnd:
s(1)= s(2)=
nume: 'birch' nume: 'maple'
gen: 'betula' gen: 'acer'
greutate: 65 greutate: 50

Vizualizarea structurii irului transformat se realizeaz cu funcia struct2cell,
apelat,
c = struct2cell(s)
care transform o structur s, de forma m x n (cu p cmpuri), ntr-o structur de
forma p x m, pe c iruri de celule c, iar dac structura lui s este multidimensional,
irul de celule c are dimensiunea [p size(s)].
Apelat pentru exemplul anterior, c=struct2cell(s), rezult,
c=
'birch' 'maple'
'betula' 'acer'
[ 65] [ 50]

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 106
Verificarea dac un vector sau ir oarecare este un ir de celule se realizeaz
cu funcia iscell, astfel:
tf = iscell(A)
care returneaz un rspuns logic true (sau 1), dac A este un ir de celule i false
(sau 0), dac nu este.

Pentru a crea un ir de obiecte Java, se utilizeaz funcia Matlab
javaArray, care are urmtoarea sintax:
A = javaArray('element_class', m, n, p, ...)
n care primul argument, element_class, este numele elementelor din ir, iar
argumentele (m,n,p,) sunt elementele fiecrei dimensiuni din ir.
Un ir care a fost creat cu javaArray este echivalent cu irul creat de codul
Java. Funcia javaArray nu memoreaz orice ir, ntr-un grup de elemente create, ci
acest lucru se face separat.
5.7.4. Funcii specifice irului multidimensional
Determinarea numrului de dimensiuni ale irului A se realizeaz cu
funcia n=ndims(A), rezultnd numrul n. Numrul dimensiunilor dintr-un ir este
mereu mai mare sau egal cu 2. Dimensiunea lui A este determinat pentru fiecare
mrime prin size(A,dim) = 1, iar n general ndims(x) este length(size(x)).

Concatenarea irurilor se realizeaz cu funcia cat, care se apeleaz:
C = cat(dim,A,B) concateneaz sirurile A i B ;
C = cat(dim,A1,A2,A3,A4,...) concateneaz intrrile irurilor
(A1,A2,A3,A4) ;
C= cat(2,A,B) este acelai lucru ca i [A,B], iar cat(1,A,B) este acelai
lucru ca i [A;B].

Sintaxa cat(dim,C{:}) sau cat(dim,C.field) este modul de a concatena celula
sau structura irului ce conine matrice numerice, ntr-o singur matrice.

Generarea unui ir multidimensional, pentru realizarea unei reele (grid), se
realizeaz cu funcia ngrid, care se apeleaz,
[X1,X2,X3,...] = ndgrid(x1,x2,x3,...), transform domeniul specificat de
vectorii x1,x2,x3, n irul X1,X2,X3, care poate fi folosit pentru a
evalua funciile cu mai muli parametri i interpolri multiple ;
[X1,X2,...] = ndgrid(x) este acelai lucru ca i [X1,X2,...] = ndgrid(x,x,...).

Funcia ndgrid este asemntoare cu meshgrid, exceptnd faptul c ordinea
celor dou intrri este schimbat. Astfel, [X1,X2,X3] = ndgrid(x1,x2,x3) produce
acelai rezultat ca i [X2,X1,X3] = meshgrid(x2,x1,x3).

Permutarea dimensiunilor unui ir multidimensional se realizeaz cu funcia
permute apelat,
Limbajul Matlab instruciuni i funcii de control specifice 107
B = permute(A,order)
rearanjeaz dimensiunile lui A, care sunt specificate vector; B are aceleai valori ca
i A, dar ordinea este rearanjat, iar toate elementele din order trebuie s fie unice.

Inversarea permutrii realizate se execut cu funcia ipermute apelat,
A = ipermute(B,order)
care rearanjeaz dimensiunea lui B, deci permute(A,order) va produce B, care are
aceleai valori ca i A, dar ordinea elementelor este schimbat. Toate elementele
din order trebuie s fie unice.
Funciile permute i ipermute sunt utile pentru iruri multidimensionale.

Schimbarea dimensiunilor unui ir se realizeaz cu funcia shiftdim, care se
poate apela:
B = shiftdim(X,n) schimb dimensiunea lui X ; cnd n este pozitiv,
schimb dimensiunea la stnga, iar cnd n este negativ, schimb
dimensiunea ctre dreapta ;
[B,nshifts] = shiftdim(X) determin irul B, cu acelai numr de elemente
ca i X, iar dac X este scalar, shiftdim nu are efect.

Comanda shiftdim este asemntoare comenzilor sum sau diff, care sunt
aplicate pentru monodimensiuni.
Pentru exemplificare, se recomand secvena,
a = rand(1,1,3,1,2);
[b,n] = shiftdim(a); % b este 3-pe-1-pe-2 i n este 2.
c = shiftdim(b,-n); % c == a.
d = shiftdim(a,3); % d este 1-pe-2-pe-1-pe-1-pe-3.

nlturarea monodimensiunilor unui ir se realizeaz cu funcia squeeze,
care se apeleaz,
B = squeeze(A)
ce returneaz un ir B cu aceleai elemente ca i A, dar cu o singur
monodimensiune, size(A,dim) = 1.
6. GENERAREA I MANIPULAREA VECTORILOR
I A MATRICELOR
Dei n MATLAB nu exist instruciuni pentru declararea tipurilor de
variabile, iar matricele se autodimensioneaz n timpul utilizrii, pentru a crete
viteza de lucru, se procedeaz la crearea unei matrice goale. Acest lucru se
realizeaz la nceputul sesiunii de lucru sau la apelarea unei funcii program.
Declararea unei matrice goale (fie aceasta G) se realizeaz, dup cum s-a
artat, cu instruciunea G = [ ], prin care se aloc G o matrice de dimensiuni 0x0.
Orice matrice goal trebuie s aib cel puin una din dimensiuni zero. Pentru
a testa dac o matrice G este goal, se folosete funcia isempty(G), care
returneaz 1, dac matricea este goal i 0, n caz contrar.
6.1. Generarea vectorilor
Pentru generarea vectorilor cu pas liniar este necesar cunoaterea limitelor
intervalului (minim i maxim) i a pasului dintre dou elemente.
Cunoscnd valoarea minim a intervalului (vmin) i pe cea maxim (vmax),
far a se indica pasul, atunci acesta se consider egal cu unitatea, iar secvena de
instruciuni pentru generarea vectorului V este V=vmin:vmax , ca de exemplu:
V=10.45:15.8
rezultnd
V =
10.4500 11.4500 12.4500 13.4500 14.4500 15.4500.
Se observ c valoarea iniial i final pot fi numere reale, cu condiia ca
vmin<vmax.
Dac se cunosc limitele intervalului (vmin i vmax) i pasul (pas) dintre dou
elemente, generarea vectorului se face cu instruciunea V=vmin:pas:vmax, ca de
exemplu:
V=10.45:1.5:15.8
rexultnd
V =
10.4500 11.9500 13.4500 14.9500.
Numrul de elemente ale vectorului rezultant V este:
1
pas
vmax vmin
N +
(


= , unde [ ] semnific partea ntreag a rezultatului
expresiei dintre paranteze. Instruciunea presupune c dac pas>0, atunci
vmin<vmax, iar dac pas<0, atunci vmin>vmax. De exemplu:
x=2:5:25
rezultnd
Generarea i manipilarea vectorilor i a matricelor 109
x =
2 7 12 17 22
sau,
x=-20:3:4
rezultnd
x =
-20 -17 -14 -11 -8 -5 -2 1 4
sau,
x=4:-3:-5
rezultnd
x =
4 1 -2 -5
sau
x=-14:-3:-25
rezultnd
x =
-14 -17 -20 -23
sau
x=-4:1
rezultnd
x =
-4 -3 -2 -1 0 1
sunt corecte, n timp ce urmtoarele instruciuni:
x=3 : -1 : 4
i
x=-5 :2 :-10
sunt incorecte.
Generarea unui vector, avnd N elemente cu pas liniar, ntre vmin i vmax, se
poate realiza cu instruciunea X=linspace(vmin,vmax,N), ca de exemplu:
X=linspace(2.7,7,4)
rezultnd
X =
2.7000 4.1333 5.5667 7.0000.
Pasul liniar dintre dou elemente, generate cu linspace este:
1 N
vmax vmin
pas

= . Dac valoarea N este omis, atunci aceasta este considerat


implicit egal cu 100. Dup cum am artat anterior, valorile limitelor intervalului
nu sunt supuse nici unei restricii.
Generarea unui vector X, de N elemente, cu pas logaritmic, ntre limita
inferioar lmin i superioar lmax, se realizeaz cu funcia
X=logspace(lmin,lmax,N). Vectorul X conine N elemente, distribuite logaritmic
ntre decadele [10
lmin
10
lmax
]. Dac numrul de elemente este omis, se genereaz un
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 110
vector cu 50 elemente distribuite logaritmic ntre [10
lmin
10
lmax
]. Dac lmax=pi
(adic ), atunci elementele vectorului sunt distribuite ntre 10
lmin
i . Asupra
valorilor limitelor nu se face nici o restricie i acestea pot fi date n orice ordine.
Dac lmin >lmax, vectorul generat va fi ordonat descresctor.
De exemplu, generarea unui vector cu N=5 elemente distribuite logaritmic
ntre 10
-2
i 10
2
se realizeaz cu instruciunea x=logspace(-2,2,5), rezultnd
x =
0.0100 0.1000 1.0000 10.0000 100.0000.
Generarea unui vector cu N=5 elemente, distribuite logaritmic n intervalul
[10
-2
pi], se face prin instruciunea
x=logspace(-2,pi,5),
rezultnd
x =
0.0100 0.0421 0.1772 0.7462 3.1416.

Generarea unei reele (mesh) se execut prin funcia meshgrid, care
transform un domeniu specificat prin vectorii x i y, n tablourile X i Y, care pot
fi folosite, att la evaluarea funciilor de dou variabile, ct i pentru reprezentrile
grafice n dou, 2D, sau trei, 3D, dimensiuni.
Sintaxa de apelare a funciei este [X,Y] = meshgrid(x,y), iar atunci cnd
vectorii x i y sunt egali, apelarea se face prin [X,Y] = meshgrid(x).
Funcia returneaz n tablourile X i Y perechile de coordonate ale tuturor
punctelor din domeniul definit de vectorii x i y. Vectorii x i y sunt de forma:
x = x
min
: x : x
max
, y = y
min
: y : y
max

mesh-ul rezultat din divizarea domeniului fiind reprezentat n figura 6.1.

Fig. 6.1. Mesh-ul rezultat prin divizarea domeniului x-y
De exemplu, generarea tablourilor X i Y pentru domeniul 3x6, -2y4,
cu pasul x=3 i y=2, se face cu instruciunea: [X,Y]=meshgrid(-3:3:6, -2:2:4),
obinndu-se rexultatul,
Generarea i manipilarea vectorilor i a matricelor 111
X =
-3 0 3 6
-3 0 3 6
-3 0 3 6
-3 0 3 6
Y =
-2 -2 -2 -2
0 0 0 0
2 2 2 2
4 4 4 4.
Dac este necesar ca pentru domeniul de mai sus s se evalueze funcia
x^2+y^2 i s se traseze graficul acesteia, prezentat n figura6.2, atunci
instruciunile care permit acest lucru sunt:
[X,Y] = meshgrid(-3:3:6, -2:2:4); Z=X.^2+Y.^2; mesh(Z).

Fig. 6.2. Reprezentarea funciei x
2
+y
2
pe domeniului x-y
Spaierea pentru rspunsul n frecven, similar cu meshgrid, dar n spaiul 2
D, se realizeaz cu funcia freqspace, apelat cu sintaxa,
[F1,F2]=freqspace(n)
n care:
F1, F2 vectorii de dimensiunea n x n;
n- numrul de puncte.
Dac n este impar, atunci vectorii F = (-1+1/n:2/n:1-1/n), iar dac este par,
atunci F = (-1 :2/n:1-2/n).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 112
6.2. Instruciuni care permit obinerea unor informaii
de baz despre variabile i matrice
Pentru determinarea dimensiunilor unei matrice, X, se utilizeaz funcia
size, apelat cu sintaxa :
[m,n]=size(X)
care rentoarce vector linie cu dou componente [m,n], care conine numrul de
linii m i numrul de coloane n, ale matricei X. Considernd matricea X de forma,
X =
1 2 3 4
5 6 7 8
9 10 11 12,
prin instruciunea [m,n]=size(X) se obine,
m =
3
n =
4,
respectiv m=3 coloane i n=4 linii.
O instruciune de forma [M1,M2,M3,...,MN] = size(X), returneaz lungimile
primelor N dimensiuni ale lui X.
Printr-o instruciune de forma m = size(X,DIM), se returneaz lungimea
dimensiunii specificate prin scalarul DIM. De exemplu, prin instruciunea
m=size(X,1) se gsete numrul de rnduri, respectiv m=3.
Lungimea unui vector sau dimensiunea maxim a unei matrice, se obine cu
instruciunea a=length(X), rezultnd :
a = 4.
Aceast instruciune, length, este echivalent cu instruciunea max(size(X)),
doar c aceast ultim form nu este posibil de aplicat matricelor goale.

Numrul de dimensiuni n, ale unei matrice X, sau vector, se determin prin
instruciunea n=ndims(X). Pentru matricea X de mai sus se obine n=2. O
instruciune similar lui ndims este length(size(X)).

Vizualizarea (afiarea) unei matrice sau a unui vector text, notat generic cu
X, pe dispay (ecran), fr s tipreasc numele acesteia, se face prin funcia
disp(X).
Dac X=[1 2 3 4 ; 5 6 7 8], atunci prin comanda disp(X), pe ecran va aprea,
1 2 3 4
5 6 7 8,
iar dac Xx=['Acest text apare pe ecran'], prin comanda disp(Xx), pe ecran apare,
Acest text apare pe ecran.

Pentru creterea vitezei de lucru se procedeaz la crearea unei matrice goale
Generarea i manipilarea vectorilor i a matricelor 113
cu instruciunea,
X=[ ]
prin care se aloc lui X, matricea de dimensiuni 0 x 0.
Orice matrice goal trebuie s aib cel puin una dintre dimensiuni zero.
Verificarea faptului c o matrice este goal se realizeaz prin instruciunea
isempty(matrice), care va avea rezultatul 1, dac este goal sau zero, altfel..Dac
considerm matricele Y=[] i YY=[1 2; 3 4], cu instruciunea isempty(Y) se obine
1, iar cu instruciunea isempty (YY), se obine 0. Matricea goal nu are nici un
element, astfel c prod(size(Y))==0.

Pentru a verifica dac dou sau mai multe matrice sunt egale, se utilizeaz
instruciunea isequal(A, B, , C), n care A, B, C sunt matricele ce trebuie
verificate. Atunci cnd toate elementele corespunnztoare sunt egale, rezultatul
este 1, iar altfel este 0.

Verificarea faptului, dac o matrice sau vector A conine valori numerice, se
realizeaz folosind instruciunea isnumeric(A), la care se returneaz 1, atunci cnd
elementele sunt numerice i 0, altfel. Dac A=[1 2; 3 4] atunci prin isnumeric(A)
se obine 1, iar pentru B=[' acest text '; 'nu este numeric'] prin isnumeric(B) se
obine 0.

Pentru a verifica dac o variabil A (matrice sau vector), este de tip logic se
utilizeaz instruciunea islogical(A), la care rspunsul trebuie s fie 1, dac este de
tip logic i 0, dac nu. De exemplu, dac A=[1 10; 15 20], atunci islogical(A) va fi
0, iar pentru B=~A, islogical(B) va fi 1.

Convertirea unei variabile numerice A n variabil logic, se face prin
instruciunea logical(A).
6.3. Generarea matricelor elementare
Matricea nul sau matricea zero, pe care o vom nota cu O, este o matrice cu
toate elementele zero:
(
(
(
(

=
0 .... 0 0
.... .... .... ....
0 .... 0 0
0 .... 0 0
O .
Aceast matrice zero poate fi generat cu funcia zeros, care se apeleaz cu
una dintre sintaxele:
O=zeros(n), O=zeros(m,n) sau O=zeros(size(A)),
unde m i n sunt scalari, iar A este o matrice oarecare.
Dac funcia zeros este apelat cu un singur argument scalar, atunci matricea
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 114
generat este o matrice ptrat, avnd dimensiunea argumentului. De exemplu,
dac n=4, atunci la comanda O=zeros(4), se obine:
O = 0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0.
Atunci cnd funcia zeros este apelat cu dou argumente scalare (m, n),
matricea generat are m linii i n coloane. Dac m=3 i n=4, atunci cu
instruciunea O=zeros(4,3), se obine:
O = 0 0 0
0 0 0
0 0 0
0 0 0.
Funcia zeros apelat cu instruciunea O=zeros(size(A)), produce o matrice
zero, de aceleai dimensiuni cu cele ale matricei A.
Considernd matricea A = [ 1 2 3; 4 5 6], atunci prin instruciunea
O=zeros(size(A)), se obine:
O =
0 0 0
0 0 0.
Matricea unitar, pe care o vom nota cu U, este o matrice cu toate
elementele 1:
(
(
(
(

=
1 .... 1 1
.... .... .... ....
1 .... 1 1
1 .... 1 1
U .
Generarea matricei unitate se face cu funcia ones, ce poate fi apelat cu una
dintre sintaxele:
U=ones(n), U=ones(m,n) sau U=ones(size(A)),
unde m i n sunt scalari, iar A este o matrice oarecare.
Dac funcia ones este apelat cu un singur argument scalar, atunci matricea
generat este o matrice ptrat, avnd dimensiunea argumentului. De exemplu,
dac n=4, atunci la comanda U=ones(4), se obine:
U =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1.
Atunci cnd funcia ones este apelat cu dou argumente scalare (m, n),
matricea generat are m linii i n coloane. Dac m=3 i n=4, atunci cu
instruciunea U=ones(4,3), se obine:
Generarea i manipilarea vectorilor i a matricelor 115
U =
1 1 1
1 1 1
1 1 1
1 1 1.

Funcia ones, apelat cu instruciunea U=ones(size(A)), produce o matrice
zero de aceleai dimensiuni cu cele ale matricei A.
Considernd matricea A = [ 1 2 3; 4 5 6], atunci prin instruciunea
U=ones(size(A)), se obine:
U =
1 1 1
1 1 1.
Printr-o instruciune de forma U=ones(m, n, , p), se poate obine o
matrice unitate de m x n x x p dimensiuni.

Matricea identitate sau unitate, pe care o vom nota cu I, se genereaz cu
una dintre sintaxele:
I=eye(n), I=eye(m,n) sau I=eye(size(A)),
unde m i n sunt scalari, iar A este o matrice oarecare.

Matricea identitate este o matrice care are elementele de pe diagonala
principal egale cu unu, iar toate celelalte egale zero:
(
(
(
(

=
1 .... 0 0
.... .... .... ....
0 .... 1 0
0 .... 0 1
I .
Elementele sale sunt:

=
j i
j i
I
ij
pentru , 1
, pentru , 0
.
Dac funcia eye este apelat cu un singur argument scalar, atunci matricea
generat este o matrice ptrat, avnd dimensiunea argumentului. De exemplu,
dac n=4, atunci la comanda I=eye(4), se obine:
I =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1.

Atunci cnd funcia eye este apelat cu dou argumente scalare (m, n),
matricea generat are m linii i n coloane.
Dac m=3 i n=4, atunci cu instruciunea I=eye(4,3), se obine:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 116
I =
1 0 0
0 1 0
0 0 1
0 0 0.
Funcia eye, apelat cu instruciunea I=eye(size(A)), produce o matrice
identitate de aceleai dimensiuni cu cele ale matricei A.
Considernd matricea A = [ 1 2 3; 4 5 6], atunci prin instruciunea
I=eye(size(A)), se obine:
I =
1 0 0
0 1 0.
Generarea matricelor cu numere aleatoare se poate face utiliznd funcia
rand, pentru numere aleatoare, cu distribuie uniform n intervalul (0,1) sau
funcia randn, pentru numere aleatoare cu distribuie normal (Gaussian), de
medie zero i variant unu.

Instruciunile pentru generarea matricelor cu numere aleatoare au formele,
pentru distribuia uniform,
Ru = rand(n), Ru = rand(m,n), Ru = rand(size(A)),
pentru distribuia normal,
Rn = randn(n), Rn = randn(m,n), Rn = randn(size(A)),
unde m i n sunt scalari, iar A este o matrice oarecare.
Apelate cu un singur argument scalar, funciile rand sau randn genereaz
matrice ptrate de numere aleatoare, avnd dimensiunea argumentului. Dac m=3,
atunci prin comanda Ru=rand(3), se obine,
Ru =
0.1124 0.3459 0.5733
0.2915 0.6931 0.2175
0.4433 0.3445 0.0443,
iar prin comanda Rn=randn(3),
Rn =
-0.1567 -1.0565 0.5287
-1.6041 1.4151 0.2193
0.2573 -0.8051 -0.9219.
Atunci cnd funciile rand sau randn sunt apelate cu dou argumente scalare
(m, n), matricea generat are m linii i n coloane.
Dac m=3 i n=4, atunci cu instruciunea Ru = rand(4,3), se obine,
Ru =
0.2898 0.8921 0.7216
0.4357 0.0167 0.6730
0.3234 0.0562 0.3465
0.8637 0.1458 0.1722,
Generarea i manipilarea vectorilor i a matricelor 117
iar cu instruciunea Rn = randn(4,3),
Rn =
-0.6918 -1.4410 0.8156
0.8580 0.5711 0.7119
1.2540 -0.3999 1.2902
-1.5937 0.6900 0.6686.
Funciile rand i randn, apelate cu instruciunea Ru=rand(size(A)), sau
Rn=randn(size(A)), produc matrice cu numere aleatoare de aceleai dimensiuni cu
cele ale matricei A.
Considernd matricea A = [ 1 2 3; 4 5 6], atunci prin instruciunea
Ru=rand(size(A)), se obine:
Ru =
0.4565 0.8214 0.6154
0.0185 0.4447 0.7919,
iar prin instruciunea Rn=randn(size(A)),
Rn =
0.5913 0.3803 -0.0195
-0.6436 -1.0091 -0.0482.
Prin instruciuni de forma:
Ru = rand(m, n, , p), sau Ru = rand(m, n, , p)
se poate obine o matrice cu numere aleatoare de m x n x x p dimensiuni.
De menionat c la orice alt apelare a instruciunilor de mai sus, se obin
matrice cu alte numere aleatoare, fiind 35 de stri ale generatorului de numere
aleatoare, cu distribuie uniform n intervalul [2^(-53), 1-2^(-53)].
Pentru simularea experienelor care comport aceleai condiii, se genereaz
serii de numere aleatoare identice, la care se controleaz parametrul de iniializare
al generatorului, notat seed, prin instruciunile rand('seed',n) sau randn('seed',n),
unde n este valoarea atribuit lui seed. De exemplu, prin instruciunile,
rand('seed',33); rand(2),
se va obine, la orice apelare, aceeai matrice de numere aleatoare cu distribuie
uniform,
ans =
0.9260 0.5630
0.1365,
iar prin setul de instruciuni,
randn('seed',33); randn(2),
se va obine, la orice apelare, aceeai matrice de numere aleatoare cu distribuie
normal,
ans =
0.1885 1.2282
-1.6564 -1.9732.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 118
6.4. Instruciuni pentru manipularea matricelor
Schimbarea dimensiunilor unei matrice sau transformarea unei matrice A, de
m rnduri i n coloane, ntr-o matrice B, de l rnduri i p coloane, prin
ordonarea, ncepnd cu elementele de pe coloane, se realizeaz prin instruciunea
B=reshape(A,l,p).
Pentru ca operaia de redimensionare s fie posibil, trebuie ca l x p = m x n.
Dac matricea A are m=3 rnduri i n=6 coloane,
A = [ 1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18],
prin instruciunea B=reshape(A,6,3) se obine,
ans =
1 3 5
7 9 11
13 15 17
2 4 6
8 10 12
14 16 18,
iar prin instruciunea B=reshape(A,2,9) se obine,
ans =
1 13 8 3 15 10 5 17 12
7 2 14 9 4 16 11 6 18.
Se observ c, elementele matricei B, n ordinea succesiv a coloanelor i pe
fiecare coloan de sus n jos, sunt elementele matricei A originale, citite de sus n
jos i de la stnga la dreapta.

Instruciunea diag permite gsirea diagonalelor unei matrice i a matricei
diagonale.
Pentru exemplificarea modului de aciune a acestei instruciuni, se consider
matricea A, descris anterior, respectiv:
A = [ 1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18].

Prin aplicarea adecvat a instruciunii diag se determin:
diagonala principal, cu instruciunea diag(A) sau diag(A,0), rezultnd o
matrice coloan cu aceste elemente,
ans =
1
8
15
Generarea i manipilarea vectorilor i a matricelor 119
diagonalele deasupra diagonalei principale, respectiv cele care au ca prim
element numrul coloanei, nd, specificat n instruciunea diag(A,nd),
astfel c pentru diag(A,2) rezult,
ans =
3
10
17
elementele de pe diagonalele de sub diagonala principal, prin
instruciunea diag(A,-nd), astfel c, pentru diag(A,-1) se obine,
ans =
7
14.

Crearea, prin extragerea dintr-o matrice dat A, a unei matrice superior
triunghiulare se face utiliznd instruciunea tril, iar crearea unei matrice inferior
triunghiulare se realizeaz cu comanda triu.

Sintaxele de apelare a funciilor tril i triu, pentru matricea A, sunt tril(A,k)
i triu(A,k), unde k indic diagonala matricei A, cu urmtoarea semnificaie:
k=0 sau k omis, pentru diagonala principal ;
k > 0, indic diagonala k, de deasupra diagonalei principale ;
k < 0, pentru diagonala k, de sub cea principal.

Pentru matricea A, prin instruciunea tril(A) sau tril(A,0) se obine,
ans = 1 0 0 0 0 0
7 8 0 0 0 0
13 14 15 0 0 0,
iar prin instruciunea triu(A) sau triu(A,0),
ans = 1 2 3 4 5 6
0 8 9 10 11 12
0 0 15 16 17 18.
Pentru diagonala 2, de deasupra diagonalei principale, extragerea matricei
inferioare se face cu instruciunea tril(A,2),
ans = 1 2 3 0 0 0
7 8 9 10 0 0
13 14 15 16 17 0,
iar a matricei superioare cu triu(A,2),
ans = 0 0 3 4 5 6
0 0 0 10 11 12
0 0 0 0 17 18.

Pentru prima diagonal de sub diagonala principal, extragerea matricei
diagonale inferioare se face prin tril(A,-1),
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 120
ans =
0 0 0 0 0 0
7 0 0 0 0 0
13 14 0 0 0 0,
iar a celei superioare prin triu(A,-1),
ans =
1 2 3 4 5 6
7 8 9 10 11 12
0 14 15 16 17 18.

Inversarea ordinii coloanelor unei matrice, de la stnga la dreapta, sau
rotirea matricei n jurul axei verticale se realizeaz cu instruciunea fliplr(B),
unde B este matricea asupra creia se acioneaz. Elementele matricei rezultate
sunt obinute prin pivotarea matricei argument n jurul ultimei coloane, operaie
prin care aceasta devine prima coloan. Instruciunea flipdim(B,2) conduce la
acelai rezultat.
Dac B=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci prin comanda fliplr(B) sau
flipdim(B,2) se obine,
ans =
4 3 2 1
8 7 6 5
12 11 10 9.

Rotirea matricei n jurul axei orizontale sau inversarea ordinii liniilor
unei matrice, de sus n jos se realizeaz cu instruciunea flipud(B), unde B este
matricea asupra creia se acioneaz. Elementele matricei rezultate sunt obinute
prin pivotarea matricei argument n jurul ultimei linii, operaie prin care aceasta
devine prima linie. Acelai rezultat se obine i prin utilizarea instruciunii
flipdim(B,1).
Dac B=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci prin comanda flipud(B) sau
flipdim(B,1) se obine,
ans =
9 10 11 12
5 6 7 8
1 2 3 4.

Rotirea unei matrice A, cu multipli de 90 grade, se face prin instruciunea
rot90(A,k), unde k sunt multipli de 90, numere naturale. Dac k lipsete, atunci
rotirea se face cu 90, n sens trigonometric.
Atunci cnd k >=1, rotirea se face n sens trigonometric (invers sensului
orar), iar dac k <=0, rotirea se face n sens orar. Atunci cnd k=0, mu se realizeaz
nici o rotire.
Considernd matricea A = [ 1 2 3; 4 5 6; 7 8 9], prin instruciunea rot90(A)
sau rot90(A,1), se realizeaz rotirea cu 90 n sens trigonometric,
Generarea i manipilarea vectorilor i a matricelor 121
ans =
3 6 9
2 5 8
1 4 7,
iar prin instruciunea rot90(A,-2) sau rot90(A,6) se obine rotirea cu 180 n sens
orar i cu 540 n sens trigonometric,
ans =
9 8 7
6 5 4
3 2 1.

Determinarea indicilor elementelor unui vector X care sunt diferite de zero
sau verific o condiie, se realizeaz prin instruciunea find(X). Pentru vectorul
X=[1 0 2 3 0 5 0 7], instruciunea a=find(X) va returna indicii elementelor lui X
diferii de zero, respectiv:
a =
1 3 4 6 8.

Pentru o matrice A ca argument, funcia fiind analizeaz coloan cu coloan
elementele acesteia, returnnd indicii diferii de zero, ce au valori cuprinse n
intervalul 1 mxn, n care m este numrul de linii iar n, de coloane, al matricei A.
Dac A = [ 1 0 3; 4 -5 0; 0 8 9], atunci prin comanda a=find(A) se obine,
a = [1 ; 1 ; 2 ; 5 ; 6 ; 7 ; 9 ].

Instruciunea [l,c]=find(A) permite returnarea numrului liniei (vectorul l) i
al coloanei (vectorul c) matricei argument A ,care conine elemente diferite de zero,
l =
1
2
2
3
1
3
c =
1
1
2
2
3
3.
Returnarea i a vectorului V, al elementelor diferite de zero (eliminnd
elemente diferite de zero), se face cu instruciunea
[l,c,V]=find(A),
rezultnd,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 122
V =
1
4
-5
8
3
9.
Atunci cnd este necesar determinarea poziiei indicilor unor elemente dintr-o
matrice, care ndeplinesc o anumit condiie, de exemplu, mai mari dect o valoare
dat v, se utilizeaz inctruciunea [l,c]=find(A>v). Dac v=4, atunci prin comanda
[l,c]=find(A>4) se obine:
l =
3
3
c =
2
3.

Ultimul indice al unei linii sau coloane dintr-o matrice sau ultimul indice al
unui vector, poate fi desemnat prin end. Dac, de exemplu V=[1 2 0 7 9 10 11 4],
atunci V(end)=4, iar V(end-2)=10. Pentru matricea,
A = [ 1 2 3 4
5 6 7 8
9 10 11 12],
A(2:end, :) este,
5 6 7 8
9 10 11 12,
iar A(2:end, 2:end-1) este,
6 7
11.

Gsirea indicelui liniar dintr-o matrice, de dimensiuni oarecare, se face prin
instruciunea ind=sub2ind(siz,i1,i2,,in), care returneaz un indice echivalent
ind, ce corespunde aezrii n matricea iniial de dimensiune siz (dat sub forma
[siz]=size(A), unde A este matricea iniial) i de indici i1,i2,,in, care corespund
celor n dimensiuni ale matricei iniiale A.
Inversa funciei de mai sus, prin care se gsesc indicii i1,i2,,in, cnd se
dau, dimensiunea iniial a matricei siz i indicele liniar ind, este funcia
[siz,i1,i2,,in]=sub2ind(siz,nd).

Funcia ind2sub este utilizat pentru determinarea valorii indicelui dintr-o
matrice, ce verific o anumit proprietate, fiind apelat, de exemplu, sub forma:
[I,J] = ind2sub(size(A),find(A>5)).
Dac,
Generarea i manipilarea vectorilor i a matricelor 123
A =
1 2 3 4 5 6
7 8 9 10 11 12,
atunci,
[I,J] = ind2sub(size(A),find(A>9)),
conduce la:
I =
2
2
2

J =
4
5
6.

6.5. Extragerea elementelor individuale ale unui vector
sau ale unei matrice i a submatricelor acesteia
Elementele individuale ale unui vector se apeleaz prin numele vectorului,
urmat de numrul elementului dorit, pus ntre paranteze rotunde. De exemplu,
pentru vectorul A=[1 2 3 4 5 6 7 8 9], elementul al cincelea se extrage cu comanda
A(5), rezultnd:
ans =
5.
Modificarea valorii unui element al vectorului se face, prin atribuirea noii
valori elementului respectiv, A(i)=v, unde i este elementul, iar v valoarea atribuit.
Dac se dorete ca elementul al patrulea al vectorului A s fie suma dintre
elementul al treilea i al cincelea, atunci aceasta se realizeaz prin instruciunea,
A(4)=A(3)+A(5),
rezultnd:
A =
1 2 3 8 5 6 7 8 9.

Pentru extragerea vectorilor cu elemente succesive, decupate din ali vectori,
se utilizeaz o instruciune de forma A(i:j), care selecteaz elementele [i, i+1, , j]
ale vectorului A, iar dac i > j, atunci vectorul rezultat este nul. De exemplu, pentru
A=[1 2 3 4 5 6 7 8 9 10 11], prin instruciunea A(4:7) se obine,
ans =
4 5 6 7,
iar prin instruciunea A(7:4) rezult o matrice goal,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 124
ans =
Empty matrix: 1-by-0.
Extragerea elementelor unui vector, aflate la un pas dat, unul de altul, se
realizeaz prin instruciunea A(i:p:j), avnd ca rezultat un vector cu elementele [i,
i+p, i+2p, , j], sau un vector nul, dac p>0 i i>j sau dac p<0 i i<j. De
exemplu, prin comanda A(3:2:11) se obine:
ans =
3 5 7 9 11.

Elementele individuale ale unei matrice se apeleaz cu numele acesteia,
urmat de doi indici (primul specificnd linia, iar al doilea coloana), cuprini ntre
paranteze rotunde i separai de virgul.
Pentru a specifica faptul c sunt extrase toate liniile sau toate coloanele
matricei originale, se folosesc : ca prim indice, respectiv al doilea indice. Indicii
pot fi i vectori, ceea ce permite definirea unor submatrice. De menionat c, M(:,:),
este ntreaga matrice M dat.
Dac considerm matricea:
M = [ 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20],
atunci elementul de pe linia 3 i coloana 2 va fi apelat prin M(3,2), rezultnd
valoarea 10.
Extragerea unei submatrice B, de dimensiuni 4x1, constnd din primele 4
elemente din coloana a 3-a a matricei M, se face cu instruciunea B=M(1:4,3),
rezultnd:
B =
3
7
11
15.
Pentru extragerea unei matrice C, care s conin elementele liniilor 2:4 i
coloanelor 1:3, se utilizeaz instruciunea C=M(2:4,1:3), obinndu-se:
C =
5 6 7
9 10 11
13 14 15.

Utiliznd dou puncte n locul primului indice, se extrag toate elementele
liniei, iar dou puncte n locul celui de al doilea, toate coloanele.
Astfel, prin instruciunea D=M(:,2), se extrage, din matricea M, o submatrice
D, care conine toate liniile (datorit semnului : ) din coloana a 2-a, respectiv,
Generarea i manipilarea vectorilor i a matricelor 125
D =
2
6
10
14
18,
iar prin instruciunea E=M(3,:) se extrage matricea E, care conine toate coloanele
din linia 3,
E =
9 10 11 12.

Inversarea coloanelor unei matrice date M, se face cu instruciunea
M=M(:,nc:-1:1), unde nc este numrul maxim de coloane, calculat prin
instruciunea [nl,nc]=size(M). Pentru matricea anterioar, cu [nl,nc]=size(M) se
obine,
nl = 5
nc = 4,
astfel c, inversarea coloanelor se face prin instruciunea M=M(:,nc:-1:1),
rezultnd,
M =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20.

Pentru inversarea liniilor unei matrice date M, se utilizeaz instruciunea
M=M(nl:-1:1,:), unde nl este numrul maxim de linii. Pentru matricea M iniial
se obine,
M =
17 18 19 20
13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4.

Crearea matricelor mari, precum i manipularea acestora se poate face uor,
prin utilizarea unor vectori ca indici. De exemplu, cu instruciunea A(:,
[2,4,6])=B(:,1:3) se nlocuiesc coloanele 2, 4 i 6 ale matricei A cu primele 3
coloane ale matricei B.

Pentru extragerea din matricea M, obinut anterior, a tuturor liniilor pentru
care elementul dintr-o anumit coloan (fie aceasta 4), ndeplinete o anumit
condiie (de exemplu este mai mare dect 6), se formeaz vectorul ajuttor, pe care
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 126
l notm cu L, care conine toate liniile i coloana specificat, care ndeplinesc
condiia, cu instruciunea:
L=X(:,4) > 6,
rezultnd:
L =
1
1
1
1
0.
Acesta permite apoi identificarea elementelor matricei M, care ndeplinesc
condiia pus, prin instruciunea Y=M(L,:), rezultnd matricea Y, de elemente:
Y =
17 18 19 20
13 14 15 16
9 10 11 12
5 6 7 8.
Duplicarea unei matrice A de M ori, pe linii i N ori pe coloane, se realizeaz
cu instruciunea: B = repmat(A,M,N). De exemplu, dac A=[1 2; 3 4], atunci
instruciunea B = repmat(A,2,3), conduce la:
B =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4.

6.6. Matrice specializate
6.6.1. Companionul matriceal
Generarea companionului matriceal al unui polinom P, dat, se face cu
instruciunea compan(p), unde p este un vector cu coeficienii polinomiali scrii n
ordinea descresctoare a puterilor.
Pentru polinomul:
) 1 ( ) ( ) 1 ( ... ) 3 ( ) 2 ( ) 1 ( ) (
2 2 1
+ + + + + + + =

n p x n p x n p x p x p x p x P
n n n

prima linie a companionulul este:
) 1 (
) 1 (
,
) 1 (
) (
,
) 1 (
) 1 (
, ... ,
) 1 (
) 3 (
,
) 1 (
) 2 (
p
n p
p
n p
p
n p
p
p
p
p +
.
Dup cum se observ, prima linie a companionului este constituit din
numere reprezentnd ctul cu semn schimbat dintre coeficienii polinomiali,
ncepnd cu puterea (n-1), pn la termenul liber i coeficientul polinomial al
Generarea i manipilarea vectorilor i a matricelor 127
puterii n.
Valorile proprii ale companionului unui vector p, ai crui coeficieni
polinomiali sunt dai de funcia eig(compan(p)), sunt rdcinile polinomului.
Deci, pentru a determina rdcinile r ale unui polinom, n Matlab, se poate
utiliza expresia r = eig(compan(p)).
Pentru un polinom dat,
1 ) (
2 3
+ + + = x x x x p ,
vectorul p, care conine coeficienii acestuia este,
p = [1 1 1 1],
astfel nct, companionul polinomului, notat cu b, se determin cu,
b=compan(p),
rezultnd,
b = [ -1 -1 -1 ; 1 0 0 ; 0 1 0 ].
Pentru determinarea rdcinilor polinomului, notate cu r, se gsesc valorile
proprii ale acestuia cu relaia,
r=eig(b),
sau direct din vectorul p prin relaia,
r=eig(compan(p)),
rezultnd rdcinile polinomului:
x = [ -1 +i i].
6.6.2. Matricea Hadamard
Matricea Hadamard este o matrice ptrat neortogonal, cu toate elementele 1
sau 1, aezate ntr-o astfel de succesiune nct, linia j este identic cu coloana j.
Pentru a determina matricea Hadamard, pe care o notm cu Ha, de ordinul n, se
exect comanda,
Ha=hadamard(n),
unde ordinul n aparine numerelor naturale pozitive i trebuie s fie divizibil cu 4,
adic rem(n,4)=0, sau ca n, n/12 ori n/20 s fie o putere a lui 2.
Pentru n=8, matricea Hadamard este Ha=hadamard(8), respectiv:
Ha =
1 1 1 1 1 1 1 1
1 -1 1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
1 -1 -1 1 1 -1 -1 1
1 1 1 1 -1 -1 -1 -1
1 -1 1 -1 -1 1 -1 1
1 1 -1 -1 -1 -1 1 1
1 -1 -1 1 -1 1 1 -1.
Utilizarea practic a matricei Hadamard se gsete n trasarea liniilor de
nivel cu funcia contour(hadamard(n)), funcia contour fiind folosit la trasarea
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 128
grafic a conturului. De exemplu, pentru matricea de mai sus, conturul este redat n
figura 6.1.

1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8

Fig. 6.1. Conturul a 8 nivele.

O proprietate important a matricei Hadamard este c Ha'*Ha = n*eye(n).
Matricea Hadamard se poate ortogonaliza prin nmulirea cu un scalar de
forma . ,
2
1
N k
k
Prin urmare, pentru matricea anterioar, lund k=4, se obine
matricea Hadamard ortogonalizat, Hao, cu instruciunea,
Hao=
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
0.5 -0.5 0.5 -0.5 0.5 -0.5 0.5 -0.5
0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 -0.5
0.5 -0.5 -0.5 0.5 0.5 -0.5 -0.5 0.5
0.5 0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5
0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5
0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5
0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5.

6.6.3. Matricea Hankel
Matricea Hankel este o matrice antisimetric i antidiagonal, generat cu
una dintre sintaxele: H=hankel(c) sau H=hankel(c,l).
O matrice A este simetric dac matricea transpus este egal cu matricea
Generarea i manipilarea vectorilor i a matricelor 129
iniial (A'=A) i antisimetric, dac transpusa este A' = - A. Este evident c o
matrice de mxn, definit prin
j i
a A
,
= cu m i ,..., 2 , 1 = i n j ,..., 2 , 1 = ,este
simetric dac
i j j i
a a
, ,
= i antisimetric, dac
i j j i
a a
, ,
= .
Atunci cnd funcia hankel este apelat cu un singur vector ca argument,
matricea returnat este o matrice Hankel ptrat, a crei coloan i prim linie sunt
elementele vectorului argument i toate elementele de sub antidiagonal sunt nule.
Dac c=[5 4 1 2 3], atunci matricea Hankel corespunztoare va fi, H=hankel(c),
respectiv,
H =
5 4 1 2 3
4 1 2 3 0
1 2 3 0 0
2 3 0 0 0
3 0 0 0 0,
de unde se observ c prima coloan i prima linie sunt elementele vectorului
argument c, iar toate elementele de sub prima antidiagonal sunt nule. Totodat,
antidiagonalele paralele cu antidiagonala principal au aceleai elemente.
Dac funcia Hankel este apelat cu doi vectori ca argument, de dimensiuni m
i n, matricea returnat este o matrice Hankel, cu dimensiunea mxn. La aceast
matrice, prima coloan este definit de primul vector argument, iar ultima linie este
definit prin elementele celui de-al doilea vector argument. De menionat c,
ultimul element al primului vector (respectiv prima coloan) difer de primul
element al celui de-al doilea vector (ultima linie) ; elementul coloanei (primul
vector) are prioritate fa de elementul liniei. Pentru vectorii dai:
c = [ 11 4 8] i l = [ 2 7 9 3],
se genereaz matricea Hankel cu instruciunea H=hankel(c,l), rezultnd,
H =
11 4 8 7
4 8 7 9
8 7 9 3,
unde se observ prioritatea ultimului element al vectorului, care definete prima
coloan, fa de primul element al vectorului, care definete ultima linie.
6.6.4. Matricea Hilbert
Matricea Hilbert este o matrice slab condiionat, ale crei elemente sunt
definite de relaia:
. ,..., 2 , 1 , ,..., 2 , 1 ,
1
1
) ( m j n i
j i
n Hi = =
+
= ,
fiind unul dintre cele mai faimoase exemple de matrice band.
Dac n=5, atunci matricea Hilbert va fi Hi=hilb(5), respectiv:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 130
Hi =
1 0.5 0.33333 0.25 0.2
0.5 0.33333 0.25 0.2 0.16667
0.33333 0.25 0.2 0.16667 0.14286
0.25 0.2 0.16667 0.14286 0.125
0.2 0.16667 0.14286 0.125 0.11111.
O utilizare eficient a matricei Hilbert se gsete n nlocuirea buclele for i
do prin segmente vectorizate.
6.6.5. Inversa matricei Hilbert
n general, inversa unei matrice se obine prin urmtoarele operaii:
1. se formeaz matricea care are ca elemente complemenii algebrici ai
elementelor matricei date;
2. se ia transpusa acesteia;
3. se mparte matricea obinut cu determinantul matricei iniiale.
Principala proprietate a matricei inverse este aceea c produsul dintre o
matrice i inversa sa este matricea unitate.
Funcia care calculeaz matricea Hilbert invers, de ordinul n, este
invhilb(n). Pentru matricea Hilbert anterioar, Hi=hilb(5), matricea invers este,
iHi=invhilb(5),
respectiv,
iHi =
25 -300 1050 -1400 630
-300 4800 -18900 26880 -12600
1050 -18900 79380 -117600 56700
-1400 26880 -117600 179200 -88200
630 -12600 56700 -88200 44100.
Dac se verific proprietatea anterioar, se constat c Hi*iHi este practic
matricea unitate, respectiv eye(5),
ans =
1 0 0 0 0
0 1 0 0 0
1.4211e-014 0 1 -3.638e-012 0
0 0 0 1 0
0 0 0 0 1.
Se precizeaz c algoritmul implementat pentru inversarea matricei Hilbert
este deficitar pentru n>15 i, prin aceasta, se atrage atenia c este necesar o
verificare atent a algoritmilor de rezolvare i condiiilor de aplicare utilizai.
Pentru n=25, dac se verific proprietatea anterioar,
d=hilb(25)*invhilb(25)-eye(25), se obin valori total inacceptabile cu o diferen
maxim de 3.4588e+018.
Generarea i manipilarea vectorilor i a matricelor 131
6.6.6. Ptratul magic
Ptratul magic de ordinul n, cu n>3, este o matrice de nxn, construit cu
ntregi de la 1 la n
2
, care are suma elementelor de pe fiecare linie, coloan,
diagonal i anti-diagonal principal, egal. Ptratul magic are suma scalat
dublu stocastic.

Funcia care genereaz ptratul magic (matrice pe care o notm cu Pmag) de
ordinul n este: Pmg=magic(n). Perntru n = 5, se obine:
Pmg =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9,
care are suma elementelor liniilor, coloanelor, diagonalei principale i
antidiagonalei, egal cu 65.
6.6.7. Matricea Pascal
Matricea Pascal conine elementele triunghiului lui Pascal. Triunghiul lui
Pascal conine coeficienii binomiali ai descompunerii ( )
n
b a + , respectiv:
( ) , ...
1 1 2 1 2 1 n n n
n
n
n
n
n
n n
b ab C b a C b a C a b a + + + + + = +


pentru orice numr natural n.
De exemplu, triunghiul lui Pascal, cu coeficienii descompunerii unui
polinom de ordinul patru, are urmtoarea form:
0 1
1 1 1
2 1 2 1
3 1 3 3 1
4 1 4 6 4 1.

Pentru numerotarea liniilor triunghiului lui Pascal, ncepnd cu zero (ca n
exemplu de mai sus), fiecare linie din triunghi va conine numrul n i coeficienii
decompunerii binomului ( )
n
b a + . De exemplu, linia 3 conine coeficienii
descompunerii binomului ( )
3
b a + , respectiv 1, 3, 3, 1.

Funcia Pascal se apeleaz cu sintaxa P=pascal(n). De multe ori, apelarea
funciei Pascal se face cu una dintre sintaxele:
P1=abs(pascal(n,1)),
sau,
P2=abs(pascal(n,2)).

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 132
Dac n=5, atunci matricele Pascal de ordinul 5 sunt:
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70,
P1 =
1 0 0 0 0
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1,
P2 =
0 0 0 0 1
0 0 0 1 4
0 0 1 3 6
0 1 2 3 4
1 1 1 1 1.
Matricea P1 conine elementele triunghiului Pascal ordonate pe linie, n
partea triunghiular, din colul stng. Dac P1=pascal(n,1), atunci rezult factorul
Cholesky, ca o matrice triunghiular inferioar.
Matricea P2 conine elementele triunghiului lui Pascal ordonate pe coloan,
n partea triunghiular din colul drept.
Pentru extragerea coeficienilor descompunerii binomiale ( )
9
b a + , se
folosete secvena n=9; P=abs(pascal(n+1,1)); Coef=P(n+1,1:n+1), rezultnd,
Coef = [ 1 9 36 84 126 126 84 36 9 1 ].
6.6.8. Matricea Rosser
Matricea Rosser este o matrice de 8x8 cu elemente ntregi, fiind utilizat n
algoritmii care lucreaz cu valori proprii. Apelarea acestei matrice se face prin
comanda rosser, rezultnd:
ans =
611 196 -192 407 -8 -52 -49 29
196 899 113 -192 -71 -43 -8 -44
-192 113 899 196 61 49 8 52
407 -192 196 611 8 44 59 -23
-8 -71 61 8 411 -599 208 208
-52 -43 49 44 -599 411 208 208
-49 -8 8 59 208 208 99 -911
29 -44 52 -23 208 208 -911 99.
Generarea i manipilarea vectorilor i a matricelor 133
6.6.9. Matricea Toeplitz
Matricea Toeplitz, generat de funcia toeplitz, este definit prin vectorii
elementelor primei coloane i ai primei linii. O matrice Toeplitz simetric este
definit doar de un singur vector ca argument. Funcia toeplitz se poate apela cu
una dintre sintaxele:
T1=toeplitz(c)
sau
T2=toeplitz(c,l).
Dac matricea Toeplitz este generat de funcia toeplitz(c), apelat cu un
singur vector argument, atunci matricea returnat este ptrat, avnd ca elemente
ale primei linii i primei coloane elementele vectorului argument, iar pe diagonala
principal i pe toate diagonalele paralele cu aceasta se gsesc elementele definite
n linia sau coloana respectiv. De exemplu, dac c=[1 2 3 4 5 6], atunci
T1=toeplitz(c) , este:
T1 =
1 2 3 4 5 6
2 1 2 3 4 5
3 2 1 2 3 4
4 3 2 1 2 3
5 4 3 2 1 2
6 5 4 3 2 1.
Matricea T1 este simetric i hermitic.
Atunci cnd matricea Toeplitz este generat prin T2=toeplitz(c,l), matricea
generat este nesimetric i va avea dimensiunea mxn, unde m este lungimea
vectorului c, iar n este dimensiunea vectorului l. La aceast matrice prima coloan
este definit de primul vector argument (vectorul c), iar prima linie de elementele
celui de-al doilea vector argument (vectorul l). Dac primul element al primului
vector (prima coloan) difer de primul element al celui de-al doilea vector (prima
linie), elementul coloanei are prioritate fa de elementul liniei. De exemplu, dac
c=[1 2 3 4 5 6] i l=[8 9 10 11], atunci T2=toeplitz(c,l) devine:
T2 =
1 9 10 11
2 1 9 10
3 2 1 9
4 3 2 1
5 4 3 2
6 5 4 3.
6.6.10. Matricea Vandermonde
Matricea Vandermonde este definit de expresia ( ) ( )
j n
i c j i V

= , , unde c,
este vectorul cu n elemente, asociat penultimei coloane. Coloana j a matricei
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 134
Vandermonde este A(:,j)=C^(n-j). Generarea matricei Vandermonde se face prin
funcia vander(c), unde c este un vector argument dat.
Dac c = [1 2 3 4 5], atunci V = vander(c) este:
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
5 5 5 5 5
4 4 4 4 4
3 3 3 3 3
2 2 2 2 2
1 1 1 1 1

1 5 25 125 625
1 4 16 64 256
1 3 9 27 81
1 2 4 8 16
1 1 1 1 1
V = =
6.6.11. Matricea Wilkinson
Matricea Wilkinson este o matrice larg utilizat n testarea valorilor proprii
ale matricelor, fiind o matrice simetric, tridiagonal, cu perechi de valori proprii.
Matematric, matricea Wilkinson de ordinul n are elementele definite prin
relaia:
( )

+ =
=
+
=
altfel ,
j i ,
j , i
i n-
i,j W
0
1 1
2
1 2
.
Generarea matricei Wilkinson se face cu comanda W=wilkinson(n), unde
n este ordinul. Cea mai frecvent matrice Wilkinson este cea de ordinul 7, generat
prin wilkinson(7) i avnd ca rezultat
ans =
3 1 0 0 0 0 0
1 2 1 0 0 0 0
0 1 1 1 0 0 0
0 0 1 0 1 0 0
0 0 0 1 1 1 0
0 0 0 0 1 2 1
0 0 0 0 0 1 3.
O alt matrice Wilkinson, frecvent utilizat, este cea de ordinul 21, generat
cu instruciunea wilkinson(21).
6.6.12. Matrice de testare
Pentru testarea tipurilor de matrice se utilizeaz instruciunea gallery, apelat
cu sintaxa :
[out1,out2,...] = gallery('matname', param1, param2, ...),
Generarea i manipilarea vectorilor i a matricelor 135
unde : out1,out2 sunt parametrii de ieire, 'matname' este unul dintre numele de
matrice de mai jos, iar param1, param2 sunt parametrii de intrare.
Sunt disponibile urmtoarele tipuri de matrice, 'matname' , respectiv :
cauchy, chebspec, chebvand, chow, circul, clement, compar, condex, cycol, dorr,
dramadah, fiedler, forsythe, frank, gearmat, grcar, hanowa, house, invhess, invol,
ipjfact, jordbloc, kahan, kms, krylov, lauchli, lehmer, lesp, lotkin, minij, moler,
neumann, orthog, parter, pei, poisson, prolate, randcolu, randcorr, rando, randhess
randsvd, redheff, riemann, ris, rosser, smoke, toeppd, tridiag, triw, vander, wathen,
wilk.
n plus , gallery (3) este o matrice band condiionat de 3 x 3, iar gallery(5)
este util n problemele cu valori proprii, gsind uor vectorii i valorile proprii.
6.7. Instruciuni, variabile i constante specifice
Instruciunea end este utilizat pentru ncheierea ciclurilor for, while,
switch, try i a segmentului de comand if. Fr aceast instruciune, dup
una dintre comenzile for, while, switch, try sau if, se ateapt introducerea unei
linii de comenzi Matlab pentru a face parte din corpul de instruciuni precizate
anterior. Fiecare end introdus ncheie ultima comand for, while, switch, try sau if
tastat.
De menionat c end este i ultimul index al unui vector sau matrice,
notat cu X, adic end = size(X,k), unde k este indexul coloanei, pentru matrice.
De exemplu, dac X=[1 2 3 4 5 6 7 0 8 9], atunci elementul al treilea,
ncepnd de la sfrit spre nceput, se afl cu comanda X(end-2), rezultnd 0.
Dac considerm vectorul A=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci:
A(end), este ultimul element al matricei A, respectiv, 12;
A(1,end), este ultimul element al liniei 1, respectiv 4;
A(end,1), este ultimul element al coloanei 1, respectiv 9;
A(2,3:end) prezint elementele liniei 2 de la coloana 3 pn la ultima
coloan, respectiv 7 i 8.

Atunci cnd unei expresii nu i se asociaz nici o variabil, Matlabul creeaz
automat variabila de lucru ans, care va avea ntotdeauna ultima valoare calculat.
n aceast variabil ans, creat automat, este returnat rezultatul calculelor
expresiei.

Variabila permanent, n care este memorat eroarea relativ pentru calculele
efectuate n virgul mobil, este eps. Valoarea implicit este eps=2.2204e-016, dar
poate fi redefinit la oricare alt valoare, prin instruciunile pinv i rank.

Cea mai mare valoare pozitiv n virgul mobil, care poate fi folosit n
calcule, este memorat n variabila realmax, avnd valoarea 1.7977e+308.

Cea mai mic valoare pozitiv n virgul mobil, care poate fi folosit n
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 136
calcul, respectiv 2.2251e-308, este memorat n variabila realmin.

Variabilei matematice cunoscute , i este asociat variabila permanent pi,
cu valoarea: pi = 4*atan(1) = imag(log(-1)) = 3.1415926535897....

Pentru introducerea numerelor complexe, ca de exemplu,
i z 2 1 1 2 1 + = + = , se utilizeaz pentru partea imaginar, ca variabile
predefinite i sau j, . 1 = = j i Este posibil ca variabilei imaginare s i fie
ataat o variabil predefinit utilizrii sale, de exemplu , s z 2 1+ = .

Pentru reprezentarea lui + n aritmetica IEEE, rezultat al mpririi
0
1
sau
al depirii celui mai mare numr, la operaia de ridicare la putere
1000
e , se
folosete variabila inf.

Variabila pentru reprezentarea lui Not-a-Number (NaN), n aritmetica IEEE,
rezultat al mpririi nedefinite
0
0
, sau

este notat NaN.


Testarea dac elementele unui vector sau matrice sunt NaN se face cu funcia
isnan.
Pentru o matrice dat oarecare X, prin comanda Y=isnan(X) se returneaz o
matrice Y, de aceleai dimensiuni cu matricea argument X, avnd 1 pe poziia n
care elementele maticei X sunt NaN i 0, n caz contrar.
De exemplu, dac X=[-15 NaN 20; 2 pi Inf; -Inf 0 NaN], prin instruciunea
Y=isnan(X), se obine:
Y =
0 1 0
0 0 0
0 0 1.

Testarea i determinarea poziiei elementelor infinite dintr-o matrice sau
vector se face cu funcia isinf, apelat cu sintaxa Y=isinf(X).
n matricea Y, de aceleai dimensiuni cu matricea iniial X, se returneaz 1
pe poziia elementelor infinite din X i 0, n caz contrar.
Pentru matricea X de mai sus, prin comanda Y=isinf(X) se obine:
Y =
0 0 0
0 0 1
1 0 0.

Determinarea poziiei elementelor finite dintr-o matrice sau vector se face cu
funcia isfinite, apelat cu sintaxa Y=isfinite(X).
n matricea Y, de aceleai dimensiuni cu matricea iniial X, se returneaz 1
Generarea i manipilarea vectorilor i a matricelor 137
pe poziia elementelor finite din X i 0, n caz contrar.
Pentru matricea X de mai sus, prin comanda Y=isinf(X) se obine:
Y =
1 0 1
1 1 0
0 1 0.

Funcia flops, returneaz numrul de operaii n virgul mobil efectuate de
calculator.
Adunrile i scderile sunt contorizate, fiecare cte o operaie, dac se
efectueaz ntre numere reale, i dou operaii, dac se efectueaz ntre valori
complexe.
nmulirile i mpririle sunt considerate fiecare cte o operaie, dac
rezultatul este real i 6 operaii, dac acesta este complex.
Aducerea la zero a contorului operaiilor efectuate se realizeaz prin
comanda flops(0).

7. ALGEBR NUMERIC LINIAR
7.1. Analiz matriceal
De notat c, n MATLAB, indicii matricei ncep ntotdeauna cu 1 i nu cu
0; de aici rezult c elementele matricei A(1, 1), B(1, 1) i C(1, 1) corespund
mulimilor matematice (elementele matricelor) A(0, 0), B(0, 0) i C(0,0).
7.1.1. Urma unei matrice
Urma unei matrice A, A Ur , este, prin definiie, suma elementelor de pe
diagonala principal,

=
=
n
i
i i
a
1
,
Ur A .
Urma produsului a dou matrice este independent de ordinea factorilor,
) ( Ur ) ( Ur
,
1
,
1
,
1
,
1
A B B A = = =

= = = =
j i
n
i
i j
n
j
i j
n
j
j i
n
i
b b b a .
De meionat c urma unei matrice este nealterat de o transformare
ortogonal i c aceasta este totodat i suma valorilor proprii ale lui A.
n Matlab, se calculeaz cu funcia trace(A), care este similar cu
sum(diag(A)).
Considernd matricea A=[1 2 3; 4 5 6; 7 8 9], atunci urma acesteia,
calculat cu trace(A), este 15, la fel ca i cu sum(diag(A)).
7.1.2. Calculul normelor vectorilor i ale matricelor
Conceptele de norm vectorial, norm matriceal i raz spectral a unei
matrice, joac un rol important n analiza matriceal.
Prin definiie, norma euclidian sau lungimea vectorului x este
( )
1/2
n
1 i
2
i
1/2
x
|
|

\
|
= =

=
x x x
T

unde x i x
T
sunt, prin definiie:
[ ]
n
T
n
x x x
x
x
x
... ,
...
2 1
2
1
=
(
(
(
(

= x x .
Normele vectorilor i ale matricelor se calculeaz cu funcia norm, apelat
cu una dintre sintaxele:
Algebr numeric liniar 139
n=norm(X) sau n=norm(X,p),
unde p=1, 2, inf, sau fro.
Pentru o matrice, X, sunt definite urmtoarele tipuri de norme:
norma 1 a lui X, respectiv cea mai mare sum a elementelor de pe
coloan, N j 1 cu , x max X
N
1 k
jk
|

\
|
=

=
, calculat cu funcia
norm(X,1), care este egal cu max(sum(abs((X))));
norma 2, sau raza spectral a lui X, definit prin aceea c toate valorile
proprii (reale, pentru matrice real simetrice i complexe, pentru matrice
real nesimetrice) se nscriu ntr-un cerc, de raz egal cu maximul
valorilor proprii n modul, ntr-un plan (real sau complex), cu centrul n
origine, respectiv ( ) N i 1 cu , max X X
i
2
= = , unde este raza
spectral, iar
i
sunt valorile singulare, calculat cu funcia norm(X)
sau norm(X,2), egal cu max(svd(X));
norma infinit a lui X, sau cea mai mare sum a elementelor de pe
linie, respectiv N k 1 cu , x max X
N
1 j
jk

|
|

\
|
=

, calculat cu
funcia norm(X,inf), egal cu max(sum(abs((X')))) ;
norma Frobenius, calculat cu funcia norm(X,fro), definit cu
relaia
2
NN
2
22
2
11
N
1 k j,
jk
F
... x X x x x + + + =
|
|

\
|
=

=
i egal cu
sqrt(sum(diag(X'*X))).

Pentru cazul matricelor rare (sparse) sau foarte mari, se recomand
utilizarea funciei normest(X), n locul funciei norm(X), sau norm(X,2). Aceast
funcie se poate utiliza sub forma [nrm,cnt] = normest(X,tol), unde nrm norma,
cnt numrul de iteraii, iar tol eroarea relativ, avnd valoarea implicit 10
-6
.
Considernd matricea X=[1 2 3; 4 5 6; 7 8 9], atunci: norm(X)= 16.8481;
norm(X,1)=18; norm(X,2)= 16.8481; norm(X,'fro')= 16.8819; norm(X,inf)=24, iar
[nrm,cnt] = normest(X,1e-9) conduce la nrm=16.8481, cnt=4.

Pentru un vector V, pot fi definite urmtoarele tipuri de norme:
norma, norma 2 sau lungimea vectorului definit de relaia
2
N
2
2
2
1
2
N
1 k
k
2
V ... V V V V + + + = |

\
|
=

=
se calculeaz cu
funcia norm(V) sau norm(V,2) ;
norma de gradul p sau lungimea de ordinul p, definit cu relaia
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 140
p
p
N
p
2
p
1
p
p
N
1 k
k
p
V ... V V V V + + + = |

\
|
=

=
, se calculeaz cu
norm(V,p), egal cu sum(abs(V).^P)^(1/P);
valoarea maxim n modul, respectiv ( ) N k 1 , V max V
k
=

,
este calculat cu funcia norm(V,inf) ;
valoarea minim n modul, respective ( ) N k 1 , V min V
k
=

,
este calculat cu funcia norm(V,-inf) .

Considernd vectorul V=[-10 12 0 11 15 25], atunci:
norm(V)=34.8569; norm(V,2)= 34.8569; norm(V,3)= 28.4630; norm(V,inf)=25;
norm(V,-inf)=0.
7.1.3. Determinantul unei matrice
O matrice ptrat este o matrice care are numrul de linii egal cu numrul
de coloane. Dac tipul su este {n, n}, se spune c matricea este de ordinul n. Fie o
matrice ptrat de ordinul n, [ ]
ij
a A = , cu elementele n R (sau C).

Determinantul format cu elementele maticei [ ]
ij
a A = , pstrndu-le
poziia, se numete determinantul matricei A i se noteaz cu
[ ]
ij ij
a A a A det , det , , , fiind calculat n Matlab cu funcia det(A).
Considernd matricele A=[1 2; 3 4] i B=[1 2 3; 4 5 6; 7 8 9],
determinanii acestora sunt: det(A)=-2 i det(B)=0.

O matrice B se numete singular dac det(B)=0, iar dac determinantul
det(A)0, matricea A este nesingular (sau nedegenerat).
Determinantul produsului a dou matrice ptrate, de ordinul n, este egal cu
produsul determinanilor celor dou matrice,
det(A*B)=det(B*A)=det(A)*det(B) .
7.1.4. Rangul unei matrice
Considerm o matrice A, dreptunghiular, mxn i p, un numr natural,
astfel nct,
n m p ,
. Dac alegem din A, p linii
p
i i i ,..., ,
2 1
i p coloane
p
j j j ,..., ,
2 1
, oarecare, obinem, nlturnd elementele matricei care nu se gsesc
pe liniile i coloanele alese, o matrice ptrat, M, de ordinul p
(
) , min( , ,..., 2 , 1 n m q q p = =
,
Algebr numeric liniar 141
(
(
(
(
(

=
p p p p
p
p
j i j i j i
j i j i j i
j i j i j i
a a a
a a a
a a a
M
...
... ... ... ...
...
...
2 1
2 2 2 1 2
1 2 1 1 1
.
n modul acesta, cu liniile i coloanele matricei A se poate forma un numr
de
( ) ( )! ! ! !
! !
p n p p m p
n m
C C
p
n
n
m

= matrice de ordinul p. Determinanii acestor
matrice se numesc determinanii de ordinul p ai matricei A. Dac 0 A , atunci nu
toi aceti determinani sunt nuli.
Se observ c, dac toi determinanii de ordinul s sunt nuli, atunci toi
determinanii de ordin superior lui s sunt nuli, deoarece, dezvoltnd determinanii
de ordinul s+1, de exemplu, dup o linie sau coloan, coeficienii elementelor
respective sunt determinani de ordinul s, care sunt nuli. Dac 0 A , exist un
numr ) , min( n m q r = , astfel nct cel puin un determinant al matricei A, de
ordinul r, este diferit de zero i toi determinanii de ordin r+1 sunt nuli. Numrul
r, care ndeplinete aceast condiie, se numete rangul matricei A. Dac A=0,
rangul matricei A este zero, r=0.
Calculul rangului se efectueaz cu funcia r=rank(A) sau r=rank(A,tol),
unde tol este eroarea relativ, avnd valoarea implicit 10
-6
sau tol = max(size(A))
* norm(A) * eps.
De exemplu, dac A=[2 3 1 4 -1; 1 4 -2 1 6; 1 -1 3 3 -7], atunci
rangul matricei este rank(A)=2. Toi determinanii de ordinul trei sunt nuli,
deoarece, dac n matricea A scdem linia a doua din linia nti, obinem linia a
treia. Aceast operaie, fiind efectuat n toi determinanii de ordinul trei, arat c
toi sunt nuli. Rangul matricei este doi, deoarece matricea format cu primele dou
linii i coloane, [2 3; 1 4], are determinantul diferit de zero.
Rangul matricei este egal cu ordinul determinantului.
7.1.5. Matricea transpus
Considernd [ ]
ij
a A = , o matrice n m , deci n j m i ,... 2 , 1 , ,..., 2 , 1 = = ,
atunci, prin definiie, matricea care se obine din A, prin nlocuirea liniilor cu
coloanele de acelai rang, se numete matricea transpus i se noteaz cu A
t
sau A
T
,
iar n Matlab se calculeaz i se noteaz cu A' sau transp(A). Pentru transpusa
neconjugat, se utilizeaz transpose(A).
Din definiie rezult c [ ]
ji t
a A = , m i n j ,..., 2 , 1 , ,... 2 , 1 = = . Dac,
B = [ 2 3 1 4 -1
1 4 -2 1 6
1 -1 3 3 -7 ],
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 142
atunci:
B' = [ 2 1 1
3 4 -1
1 -2 3
4 1 3
-1 6 -7].
O matrice ptrat A, se spune c este simetric dac elementele simetrice
fa de diagonala principal sunt egale,
ji ij
a a = i c este antisimetric dac
ji ij
a a = . Prin urmare:
o matrice simetric este egal cu transpusa sa, deoarece
ji ij
a a = ;
ntr-o matrice antisimetric, elementele de pe diagonala principal sunt
nule, 0 =
ii
a (pentru a putea satisface definiia
ji ij
a a = ) ;
transpusa unei matrice antisimetric este opusa matricei iniiale, A'= -A;
dac A'= -A atunci, matricea A este antisimetric ;
traspusa transpusei este matricea iniial, (A') ' = A ;
transpusa sumei a dou matrice este suma transpuselor, (A+B) '=A'+B' ;
transpusa produsului a dou matrice este (A*B) '= B' * A';
orice matrice ptrat poate fi considerat ca suma a dou matrice, una
simetric, cealalt antisimetric, iar aceast descompunere este unic.

Dat fiind o matrice, cu un numr oarecare de linii sau coloane, ale crei
elemente sunt numere reale sau complexe, conjugata sa este matricea format prin
nlocuirea fiecrui element cu imaginarul su conjugat. n matematica clasic, se
utilizeaz notaia A
*
.
Matricea adjunct a unei matrice este conjugata transpusei sale. Conjugata
unei matrice este obinut prin nlocuirea fiecrui element cu imaginarul su
conjugat.
n general, un numr complex, Z, este scris ca suma dintre o parte real i
una imaginar,
Z = x + i*y = real(Z) + i*imag(Z)
astfel nct, conjugatul lui Z este:
conj(Z) = x - i*y = real(Z) - i*imag(Z)
De exemplu, pentru matricea X,
X = [1+i 2-i ; 3+2*i 1-2*i]
conjugata este,
conj(X) = [1 - i 2 + i; 3 2 i 1 + 2 i].
Se numete matrice real, o matrice care are toate elementele numere reale.
innd seama de cele anterioare, rezult c o matrice real este egal cu
conjugata sa i, reciproc, dac o matrice este egal cu conjugata sa, matricea este
real.
Matricea conjugat are urmtoarele proprieti evidente:
Algebr numeric liniar 143
conj(X+Y)=conj(X)+conj(Y) - conjugata sumei a dou matrice este egal
cu suma conjugatelor;
conj(X*Y)=conj(X)*conj(Y) conjugata produsului este produsul
conjugatelor;
transpose(conj(X))= conj(transpose(X)) i totodat conj(X')= (conj(X))';
conj(conj(X)) = X.

Matricea adjunct a unei matrice este conjugata transpusei sale. Dac,
X =[ 1.0000 + 1.0000i 2.0000 - 1.0000i
3.0000 + 2.0000i 1.0000 - 2.0000i ]
transpusa acestei matrice (neconjugat) este,
XT=transp(X) = [ 1.0000 + 1.0000i 3.0000 + 2.0000i
2.0000 - 1.0000i 1.0000 - 2.0000i ]
iar conjugate transpusei este,
Xa=conj(XT)=conj(transp(X)) = X' = [ 1.0000 - 1.0000i 3.0000 - 2.0000i
2.0000 + 1.0000i 1.0000 + 2.0000i ]
care este matricea adjunct, notat X
+
, care se vede c n Matlab este: X
+
= X'.

Din proprietile matricelor transpuse i ale matricelor conjugate, rezult
proprietile:
(X+Y)' = X'+Y' ;
(X*Y)' = Y'*X' ;
(X')' = X .

Se numete matrice hermitic sau autoadjunct, o matrice ptrat care este
egal cu adjuncta sa, Z
+
=Z = Z' . n particular, matricea hermitic are toate
elementele de pe diagonala principal reale, iar cele simetrice fa de aceast
diagonal sunt imaginar conjugate.
Urmtoarele matrice sunt hermitice sau autoadjuncte:
Z=[ 1 1-i ; 1+i -3], ZZ=[3 -i 2+3*i ; i 0 5 ; 2-3*i 5 1].
Principalele proprieti ale matricelor hermitice sunt:
dac o matrice hermitic are toate elementele reale, matricea este simetric,
adic a
ij
= a
ji
;
suma a dou matrice hermitice este tot o matrice hermitic;
produsul a dou matrice hermitice este tot o matrice hermitic, dac i
numai dac, cele dou matrice sunt permutabile.
7.1.6. Matricea invers i pseudoinvers
Pentru o matrice ptrat [ ]
ij
a A = , de ordinul n, nesingular, deci det(A)0,
matricea de ordinul n este
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 144
(

=
(
(
(
(
(
(
(

A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
ji
nn n n
n
n
det
det
...
det det
... ... ... ...
det
...
det det
det
...
det det
2 1
2 22 12
1 21 11
1
,
unde
ji
A este complementul algebric al lui
ij
a , din determinantul [ ]
ij
a i se numete
matricea invers a matricei A, fiind notat cu A
-1
. Notarea matricei inverse cu A
-1
este
justificat prin faptul c, n compunerea transformrilor A i A
-1
, acestea se comport
ca puterile unui numr real sau complex, dac convenim s notm transformarea
unitate i, cu A
0
,
A
-1
*A = A*A
-1
= A
0
= I = [1] ,
respectiv,
inv(A)*A = A*inv(A) = ones(size(A)) .
Principalele proprieti ale matricei inverse sunt:
A
-1
*A = A*A
-1
= A
0
= I = [1] - produsul dintre o matrice i inversa sa este
egal cu matricea unitate;
reciproc, dac avem dou matrice, astfel nct A*B = I =[1], atunci una
este inversa celeilalte;
det(A
-1
) = det(inv(A)) = 1/det(A) - inversa unei matrice proprii este tot o
matrice proprie;
(A
-1
)
-1
= inv(inv(A)) = A - inversa matricei inverse este matricea iniial;
(A*B)
-1
= B
-1
* A
-1
, respectiv inv(A*B) = inv(B)*inv(A)

Fie matricele,
A = [ cos (pi/3) -sin (pi/3) ; sin (pi/3) cos (pi/3) ];
B= [ 1 -1 i ; 0 1 0 ; i 3 1] ,
transpusele sunt,

A' = [ cos (pi/3) sin (pi/3) ; -sin (pi/3) cos (pi/3) ]
B' = [ 1 0 -i ; -1 1 3 ; -i 0 1 ]
iar inversele sunt,
inv(A) = ( A
-1
) = [ cos (pi/3) sin (pi/3) ; -sin (pi/3) cos (pi/3) ]
inv(B) = ( B
-1
) = [0.5 0.5 + 1.5 i - 0.5 i ; 0 1 0; - 0.5 i -1.5-0.5 i 0.5 ]
de unde se verific uor c A*inv(A) = [1] i B*inv(B) = [1] .
Instruciunea inv(X), returneaz un mesaj de avertizare, dac matricea X
este singular sau band.

Pseudoinversa sau inversa generalizat, Moore-Penrose, a unei matrice,
se calculeaz cu funcia pinv, apelat cu sintaxa:
B=pinv(A),
Algebr numeric liniar 145
sau
B=pinv(A,tol),
unde tol este tolerana, care are valoarea implicit (cnd lipsete la apelare),
tol = max(size(A)) * norm(A) * eps,
cu eps, depinznd de acurateea calculelor n virgul mobil.
Se utilizeaz, de regul, pentru rezolvarea sistemelor de ecuaii liniare, n
sensul celor mai mici ptrate.
Matricea B este de aceleai dimensiuni ca i matricea A' i verific patru
condiii:
ABA = A
BAB = B
AB este hermitic
BA este hermitic.
De exemplu, calculul pseudoinversei matricei A=[1 2 3; 4 5 6; 7 8 9],
conduce la,
B = pinv(A) =
[ -0.6389 -0.1667 0.3056
-0.0556 0.0000 0.0556
0.5278 0.1667 -0.1944 ],
A*B*A = A =
[ 1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000 ]
B*A*B = B =
[ -0.6389 -0.1667 0.3056
-0.0556 0.0000 0.0556
0.5278 0.1667 -0.1944 ]
iar A*B i B*A sunt matrice hermitice i n acest caz sunt egale ntre ele fiind,
[ 0.8333 0.3333 -0.1667
0.3333 0.3333 0.3333
-0.1667 0.3333 0.8333 ].

Dac matricea A este ptrat i nesingular, funcia pinv(A) consum un
timp de calcul mai mare dect inv(A).
Dac matricea A nu este ptrat sau este ptrat i singular, atunci nu
exist invers, inv(A). n acest caz, pinv(A) are unele, dar nu toate, proprieti ale
lui inv(A).
Dac matricea A are mai multe rnduri dect coloane i rangul matricei
este mai mic dect minimul dintre rnduri i coloane, atunci problema celor mai
mici ptrate, de minimizare a norm(A*x-b), nu are soluie unic. Se obin dou
infiniti de soluii date de:
x=pinv(A)*b
i
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 146
y=A\b,
care se disting prin aceea c norm(x) este mai mic dect norma oricrei alte soluii, iar
y are, pe ct posibil, componente diferite de zero.
De exemplu, matricea generat de,
A = magic(8); A = A(:,1:6)
este o matrice de 8-pe-6 care are rank(A) = 3.
A = [ 64 2 3 61 60 6
9 55 54 12 13 51
17 47 46 20 21 43
40 26 27 37 36 30
32 34 35 29 28 38
41 23 22 44 45 19
49 15 14 52 53 11
8 58 59 5 4 62 ]

Termenul liber, din partea dreapt, este:
b = 260*ones(8,1) = [ 260; 260; 260; 260; 260; 260; 260; 260 ].
7.1.7. Baz ortogonal i baz ortonormal
Dup cum se cunoate, doi vectori x, y sunt ortogonali, dac produsul lor
scalar este nul.
nt-un spaiu euclidian, real sau complex, deseori se prefer ca baz un
sistem de vectori,
n
e e e ,..., ,
2 1
, ortogonali doi cte doi , avnd fiecare norma egal
cu 1,
( )

=
j i
j i
e e
j i
daca , 1
daca , 0
, .
Dac numai prima condiie este ndeplinit, se spune c
n
e e e ,..., ,
2 1

formeaz o baz ortogonal. Dac sunt ndeplinite amndou condiiile, baza este
ortonormal.
Cu vectorii unei baze oarecare,
n
u u u ,..., ,
2 1
, se poate construi ntotdeauna o
baz ortonormal,
( )

=
j i
j i
u u
j i
daca , 1
daca , 0
,
iar vectorii bazei sunt ortogonali doi cte doi i au norma ( ) 1 , = =
i i i
u u u .
n Matlab, funcia care realizeaz o baz ortogonal pentru o matrice A
este orth(A). Ea se apeleaz cu sintaxa:
Q=orth(A),
n care numrul de coloane ale lui Q este egal cu rangul matricei A.
Baza ortogonal are proprietatea c Q'*Q = I .

Algebr numeric liniar 147
Obinerea unei baze ortogonale, Z, pentru un spaiu nul al matricei A, prin
descompunerea n valori proprii, se face prin funcia null, apelat prin:
Z = null(A) sau Z=null(A, 'r')
unde r este o baz raional avnd elemente mici ntregi, astfel nct A*Z s aib
elemente neglijabile, size(Z,2) = 1, iar Z'*Z = I.
De exemplu, dac
A=[1 2 3;4 5 6; 7 8 9]
atunci,
z=null(A) = [ -0.4082 ; 0.8165 ; -0.4082 ]
size(z,2)= 1
z'*z = 1
z=null(A,'r') = [ 1 ; -2 ; 1 ]

Descompunerea unei matrice, A, n vederea determinrii rangului, se face
cu funcia rref, apelat cu sintaxa,
[R,jb] = rref(A) su [R,jb] = rref(A,TOL)
unde r=length(jb) este rangul matricei A, A(:,jb) este matricea luat ca baz la
determinarea rangului; R(1:r,jb) este matricea identitate de r x r; x(jb), sunt numrul de
variabile independente; TOL este tolerana impus la determinarea rangului.
Dac A=[1 2 3 4; 5 6 7 8; 9 10 11 12 ; 13 14 15 16; 17 18 19 20]
atunci prin comanda,
[R,jb]=rref(A)
rezult:
R=[ 1 0 -1 -2 ; 0 1 2 3 ; 0 0 0 0 ; 0 0 0 0 ; 0 0 0 0 ]
jb=[ 1 2 ] ; R(1:2,jb) = [ 1 0 ; 0 1 ]
A(:,jb) = [1 2 ; 5 6 ; 9 10 ; 13 14 ; 17 18 ].

Unghiul dintre dou subspaii este calculat cu funcia subspace. Prin
urmare, subspace(A,B) d unghiul dintre coloanele matricei A i matricei B.
Atunci cnd A i B sunt vectori de lungime unitar, atunci subspace(A,B)
este identic cu acos((A'*B).
Dac unghiul este mic, atunci cele dou subspaii sunt practic liniar
dependente. Funcia este util pentru evidenierea diferenelor ce nu sunt cauzate de
fluctuaia erorilor statistice, n dou experimente succesive (A i B), aplicate
aceluiai fenomen fizic.
7.2. Condiionarea unei matrice
Importana cunoaterii condiionrii unei matrice rezid n faptul c
rezultatele obinute prin calcul numeric au ntotdeauna erori de rotunjire, fiind, prin
urmare, soluiile unei probleme perturbate.
Determinarea condiionrii are la baz teoria matematic a perturbaiilor.
Se spune c o funcie f(x) este ru condiionat, dac pentru un x
1,
apropiat de x,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 148
funcia f(x
1
) difer mult de f(x). Invers, o funcie se spune c este bine condiionat,
dac pentru un x
1
apropiat de x, funcia f(x
1
) este apropiat de f(x). Din pcate,
termenii apropiai sunt calitativi i, pentru a putea fi cuantificai, este necesar
utilizarea numerelor de condiionare.

Numrul de condiionare al unei matrice indic sensibilitatea soluiei unui
sistem de ecuaii liniare i d indicaii despre precizia rezultatelor la inversarea
matricelor i la rezolvarea ecuaiilor liniare. O matrice bine condiionat este o
matrice relativ insensibil la aceste mici perturbaii.

Numrul de condiionare al unei matrice, calculat ca raportul dintre cea mai
mare i cea mai mic valoare singular a acesteia, se determin cu funcia cond,
care se apeleaz cu sintaxa:
c=cond(X,p)
unde c este numrul de condiionare al matricei X, n norma p, care poate fi 1, 2, inf sau
'fro', dup norma calculat, astfel nct, norm(X,p) * norm(inv(X),p).

O funcie mai performant, care calculeaz numrul de condiionare, c,
dup un algoritm din codul de calcul LAPACK, este rcond, care se apeleaz cu
sintaxa:
c=rcond(X).

Estimarea celui mai mic numr de condiionare se realizeaz cu funcia
condest, care se apeleaz cu sintaxa:
c = condest(X).

Dac considerm, iniial, sistemul de ecuaii:

= +
= +
095 . 1 152 . 1
543 . 6 917 . 6 6
2 1
2 1
x x
x x

i un sistem perturbat,

= +
= +
095 . 1 152 . 1
543 . 6 912 . 6 6
2 1
2 1
x x
x x

atunci, cu secvena Matlab,
A1=[6 6.917; 1 1.152]; A2=[6 6.912; 1 1.152]; c1=cond(A1);
c2=cond(A2);
d1=condest(A1);d2=condest(A2);r1=rcond(A1);r2=rcond(A2);
se obine:
c1 = 1.7234e+004, c2 = 3.1875e+016, d1 = 2.0845e+004, d2 = Inf,
r1 = 4.7972e-005, r2 = 0,
de unde rezult c sistemul este ru-condiionat.
Dac se rezolv cele dou sisteme (iniial si perturbat), folosind secvena,
A1=[6 6.917; 1 1.152]; A2=[6 6.912; 1 1.152]; b=[6.543; 1.095];
x1=A1\b; x2=A2\b;
Algebr numeric liniar 149
se obin soluiile:
x1=[ 7.3158 -5.4000] ; x2= [Inf Inf];
de unde se observ diferenele foarte mari ntre acestea, datorate slabei condiionri.
7.3. Generarea unei matrice rare
Generarea unei matrice rare i afiarea coeficienilor se realizeaz cu
funcia sparse, care se apeleaz cu una dintre sintaxele:
S = sparse(A), transform o matrice plin ntr-o form rar, nlturnd
toate elementele egale cu zero, iar dac o matrice S este deja rar, atunci
sparse(S) napoiaz tot S ;
S = sparse(i,j,s,m,n,nzmax), folosete vectorii i, j i s pentru a genera
matricea de m x n, de forma S(i(k),j(k)) = s(k), cu spaii alocate pentru
nzmax, diferit de zero ; vectorii i, j, i s au toi aceeai lungime, dar sunt
mai mici dect 2^31-1, iar oricare element din s, ce apare i n i sau j, este
adugat ;
S= sparse(i,j,s,m,n), folosete nzmax = length(s) ;
S =sparse(i,j,s), folosete m = max(i) i n = max(j), calculai nainte s fie
nlturate zerourile, deci una dintre coloanele [i j s] poate fi [m n o] ;
S= sparse(m,n) sau sparse([],[],[],m,n,0), genereaz ultima matrice rar, de
forma m x n.

Aplicarea operatorilor specifici Matlab (aritmetici, logici, etc.) pe matricea
rar, detemin apariia unei matrice rare, iar n cazul unor combinaii de matrice
rare i ntregi, se va obine o matrice ntreag.
Excepiile apar atunci cnd rezultatul este o structur rar; de exemplu,
A.*S este cel puin o matrice rar ca i S.
De exemplu,
S = sparse(1:n,1:n,1)
genereaz o reprezentare rar, de forma n x n, fa de
S = sparse(eye(n,n))
care va genera o matrice complet, n x n, cu multe dintre elementele sale egale cu zero.

Utilitatea matricelor rare se relev la matrice foarte mari, ca de exemplu,
cazul unei matrice B = sparse(10000,10000,pi), cu care poate opera Matlabul, pe
cnd cu matricea complet, full(B), nu poate opera, datorit memoriei insuficiente,
aceasta necesitnd 800 megabytes.

Reasamblarea unei matrice rare se face prin succesiunea de instruciuni,
[i,j,s] = find(S); [m,n] = size(S); S = sparse(i,j,s,m,n);
sau, dac ultima linie i coloan are elemente diferite de zero,
[i,j,s] = find(S); S = sparse(i,j,s).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 150
7.4. Ecuaii liniare
Fie sistemul de ecuaii liniare:
1 1 1 1 11
... ... b x a x a x a
n n j j
= + + + +
...........................................................
i n in j ij i
b x a x a x a = + + + + ... ...
1 1

...........................................................
m n mn j mj m
b x a x a x a = + + + + ... ...
1 1

de m ecuaii liniare cu n necunoscute, m i n fiind dou numere naturale oarecare.
Dac notm,
;
....
....
B ;
....
....
X ;
... ...
.. .......... ..........
... ...
.. .......... ..........
... ...
A
1 1
1
1
1 1 11
|
|
|
|
|
|

\
|
=
|
|
|
|
|
|
|

\
|
=
|
|
|
|
|
|
|

\
|
=
m
i
n
j
mn mj m
in ij i
n j
b
b
b
x
x
x
a a a
a a a
a a a

atunci sistemul de ecuaii liniare se poate scrie, matriceal, sub forma: A*X = B.
Un ir ordonat de numere,
0 0
2
0
1
,..., ,
n
x x x , care satisfac relaiile:
; ,..., 2 , 1 ; ... ...
0 0 0
1 1
m i b x a x a x a
i n in j ij i
= = + + + +
se numete soluie a sistemului. Numerele
0 0
2
0
1
,..., ,
n
x x x , care verific sistemul, se mai
numesc i rdcinile sistemului.
Dac sistemul admite o soluie unic, se numete compatibil determinat, iar
dac admite cel puin dou soluii, se numete compatibil nederminat. Dac
sistemul nu are soluii, este incompatibil.
n cazul n care sistemul este compatibil nedeterminat, poate avea o
infinitate simpl, dubl, ... , multiplu de ordinul r de soluii (sau un numr finit, n
numere ntregi).

Deoarece nu toi
ij
a sunt nuli, rangul matricei A, cu m linii i n coloane,
format cu coeficienii necunoscutelor, va fi 1 p . Presupunem c unul dintre
determinanii de ordinul p, diferit de zero, este chiar
pp p p
p
p
p
... a a a
... a a a
... a a a
2 1
2 22 21
1 12 11

..... .......... ..........


=
Algebr numeric liniar 151
ceea ce este ntotdeauna posibil s se realizeze, schimbnd, la nevoie, att ordinea
ecuaiilor, ct i indicii necunoscutelor.
Determinantul 0
p
, se numete determinantul principal al sistemului.
Evident, exist i ali determinani de ordinul p diferii de zero, ns toi
determinanii de ordinul p+1, p+2, ..., p+q, cu q=min(m,n) ce se pot forma cu
liniile i coloanele matricei A, sunt nuli.
Putem ntotdeauna aranja necunoscutele i schimba ordinea ecuaiilor,
astfel nct
p
s fie format cu coeficienii primelor p necunoscute, luate din
primele p ecuaii.
Ecuaiile care intervin n formarea determinantului principal se numesc
ecuaii principale, iar necunoscutele
p
n
x x x ,..., ,
2 1
, cu ale cror coeficieni se
formeaz determinantul principal, se numesc necunoscute principale.
Celelalte ecuaii i necunoscute se numesc secundare.
Se numete determinant caracteristic, un determinant de ordinul p+1 din
A, obinut prin completarea determinantului principal,
p
, cu o coloan format
din termenii liberi corespunztori ai ecuaiilor principale i cu o linie format cu
coeficienii necunoscutelor principale i cu termenul liber al unei ecuaii secundare,

( )
1 1 , 1 1 , 1
2
1
1
1
....
...


+ + +
+

=
p p p
p
p
p
b a a
b
b
b
D , ,
( )
m m m
p
p
p m
p
b a a
b
b
b
D
1 1
2
1
1
....
...

+
.

Dac n m p < (sau m n p < ) vom putea forma p m determinani,
numii determinani caracteristici.
Conform teoremei lui Rouch, un sistem liniar de m ecuaii cu n
necunoscute este compatibil, dac i numai dac, toi determinanii caracteristici
sunt nuli.
Dac toi determinanii caracteristici sunt nuli, dar:
n>p, exist n-p necunoscute secundare, care apar ca parametri n soluiile
gsite ,
0 0
2
0
1
,..., ,
p
x x x , i avem
p n
soluii, iar sistemul este compatibil
nedeterminat;
n=p, nu avem necunoscute secundare, iar sistemul este compatibil
determinat;
m=n=p, nu exist determinani caracteristici (formal putem spune c sunt
nuli),
sistemul este compatibil determinat, cu soluie unic.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 152
Dac cel puin unul dintre determinanii caracteristici este diferit de zero,
sistemul este incompatibil sau imposibil, respectiv nu are soluii.

Analiza soluiilor unui sistem de ecuaii liniare se poate face mai comod
aplicnd teorema Kronecker-Capelli, care se bazeaz, n esen, pe rangul
matricelor A i B. Dac notm p=rang A i q=rang (A|B), atunci, pentru ca
sistemul de m ecuaii cu n necunoscute s fie complet compatibil, este suficient ca:
rang A = rang (A|B),
( ) ;
... ...
.. .......... ..........
... ...
... ... .......... ..........
... ...
B | A ;
... ...
.. .......... ..........
... ...
.. .......... ..........
... ...
A
1
1
1 1 1 11
1
1
1 1 11
|
|
|
|
|
|
|
|

\
|
=
|
|
|
|
|
|
|

\
|
=
m mn mj m
i in ij i
n j
mn mj m
in ij i
n j
b a a a
b a a a
b a a a
a a a
a a a
a a a

sau n Matlab,
p=rank(A)==rank([A,B]).
Funcia rank se poate apela i sub forma:
p=rank(A,tol),
unde tol este tolerana, care are valoarea implicit (cnd lipsete la apelare),
tol = max(size(A)) * norm(A) * eps,
cu eps depinznd de acurateea calculelor n virgul mobil.

Dac:
m=n=p, sistemul este compatibil determinat, cu soluie unic;
p = q < n, sistemul este compatibil nedeterminat, cu
p n
soluii;
p < q, sistemul este incompabitil sau nedeterminat i nu va avea nici o
soluie.

Una dintre metodele de rezolvare a sistemelor de n ecuaii, cu n
necunoscute, const n mprirea matricelor.
Soluiile unui sistem de ecuaii liniare de forma,
A*X=B
pot fi determinate n Matlab, prin instruciunile:
X=B/A mprirea la dreapta
sau
X=A\B mprirea la stnga.
De meionat c mprirea la stnga este mai rapid dect mprirea la
dreapta. Pentru un sistem de 1000 ecuaii cu 1000 necunoscute, ai crui coeficieni
i termeni liberi sunt numere aleatoare, cu secvena Matlab,
A=rand(1000); B=rand(1000);
tic; X=A\B; ts=toc
tic; X=B/A; td=toc
Algebr numeric liniar 153
s-au obinut, pe un calculator PC 1.7 MHz, timpi: ts=2.614 s i td=2.663 s, n cele dou
variante de mprire, la stnga i la dreapta.

O alt cale de rezolvare a sistemelor de n ecuaii, cu n necunoscute,
const n folosirea matricei inverse.
Deoarece det(A)0, matricea A este nesingular i are deci, o invers A
-1
,

A det
A
1 ji
A
=


calculat n Matlab cu inv(A).
Dac n sistemul, A*X=B, nmulim la stnga cu A
-1
, avem X=A
-1
*B,
respectiv n Matlab, X=inv(A)*B.
Relund acelai sistem, de 1000 ecuaii cu 1000 necunoscute, cu
coeficienii i termenii liberi numere aleatoare, timpul de calcul rezult din,
A=rand(1000); B=rand(1000);
tic; X=inv(A); ti=toc
i, pentru acelai calculator, este ti= 2.1430 s.

O serie de metode de rezolvare a sistemelor de ecuaii sunt cunoscute ca
fiind metode prin triunghiularizare. Din aceast categorie fac parte: factorizarea
Cholesky, factorizarea LU, factorizarea QR etc.
O matrice ptrat A, de forma,


..... .......... ..........


A
2 1
2 22 21
1 12 11
|
|
|
|
|

\
|
=
nn n n
n
n
... a a a
... a a a
... a a a

poate fi descompus sub forma,
A = Ls + D +Us,
cu:

0 ...
... ... ... ... ...
0 0 ... 0
0 0 ... 0 0
Ls
1 2 1
21
|
|
|
|
|

\
|
=
nn n n
a a a
a
;
0 ... 0 0
... ... ... ... ...
0 0 ... 0
0 0 ... 0
D
12
11
|
|
|
|
|

\
|
=
nn
a
a
a
;

0 ... 0 0 0
... ... ... ... ...
... 0 0
... 0
Us
2 23
1 13 12
|
|
|
|
|

\
|
=
n
n
a a
a a a

Matricea Ls, care conine elemente diferite de zero numai sub diagonala
principal, se numete strict inferior triunghiular. Similar, matricea Us, care
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 154
conine elemente diferite de zero doar deasupra diagonalei principale, se numete
strict superior triunghiular. Matricea D este evident diagonal.
O matrice L, definit ca, L=Ls+D se numete inferior triunghiular.

n acest caz, este evident c det(L)=det(D) i, dac det(D)0, atunci exist
inversa matricei L, respectiv L
-1
, care este de forma,
L
-1
= L' + D'
i este de asemenea inferior triunghiular.
Asemntor, dac U=Us+D i dac U
-1
exist, ea este superior
triunghiular.
Pentru un sistem liniar neomogen, L*x = b, avnd matricea L a
coeficienilor sistemului inferior triunghiular,

...
... ... ... ... ...
0 ... 0
0 ... 0 0
L
3 2 1
22 21
11
|
|
|
|
|

\
|
=
nn n n n
l l l l
l l
l
,
...
x
2
1
|
|
|
|
|

\
|
=
n
x
x
x
,
...
b
2
1
|
|
|
|
|

\
|
=
n
b
b
b
,
componentele vectorului x, soluiile sistemului, pot fi gsite prin substituie nainte,
respectiv:
( ) . 1,2,..., ;
1
x ;
1
x ; x
1
1
1 21 2
22
2
11
1
1
n m x l b
l
x l b
l l
b
m
j
j mj m
mm
m
=
|
|

\
|
= = =

=

Un caz mai complicat, dar i mai instructiv, este cazul n care matricea A
este produsul unei matrice inferior triunghiulare L, cu o matrice superior
triunghiular U. Prin urmare, avem
A*x = L*U*x = b.

Pentru rezolvare, se introduce un vector auxiliar definit ca
z=U*x
ceea ce face ca ecuaia iniial s devin
L*z = b,
care este de forma anterioar, avnd necunoscutele:
( ) . 1,2,..., ;
1
z ;
1
z ; z
1
1
1 21 2
22
2
11
1
1
n m z l b
l
z l b
l l
b
m
j
j mj m
mm
m
=
|
|

\
|
= = =

=

Odat vectorul z cunoscut, ecuaia z=U*x (care este identic cu U*x=z)
avnd,

... 0 0 0
... ... ... ... ...
... 0
...
U
2 23 22
1 13 12 11
|
|
|
|
|

\
|
=
nn
n
n
u
u u u
u u u u
,
...
x
2
1
|
|
|
|
|

\
|
=
n
x
x
x
,
...
z
2
1
|
|
|
|
|

\
|
=
n
z
z
z
,
Algebr numeric liniar 155
din care, din ultima linie, rezult,

11
n
x
u
z
n
= ,
i n general,
1. ,..., 1 , ;
1
1
=
|
|

\
|
=

+ =
n n m x u z
u
x
n
m j
j mj m
mm
m

Se remarc faptul c, n acest caz, se utilizeaz o substituie nainte i apoi
o substituie napoi.
Cazuri particulare ale acestui caz general sunt atunci cnd matricea
sistemului este o matrice tridiagonal, o matrice tridiagonal simetric sau o matrice
multidiagonal.
O matrice tridiagonal este, prin definiie, o matrice care are dou diagonale
secundare adiacente diagonalei principale, toate cu elemente diferite de zero. Se
ntlnete, de regul, la aproximaia difuziei multigrupale monodimensionale.
Matricea tridiagonal simetric are elementele simetrice nepozitive i se mai
numete i matrice Stieltjes.
O matrice ptrat de ordinul n, multidiagonal, este o matrice cu un numr
m, impar de diagonale, m<n, de elemente diferite de zero. O astfel de matrice poate
fi adus la forma unei matrice quasitridiagonale, prin utilizarea unor submatrice
adecvate.

Factorizarea Cholesky este o metod de rezolvare a unui sistem de ecuaii
liniare, de forma A*x=B, cu matricea A pozitiv definit.
Un sistem dat, avnd forma matriceal,
A*x-B=0
prin metoda Cholescky, se nlocuiete cu un sistem echivalent,
R'*R *x=B
n care R este o matrice unic, superior triunghiular, nesingular, care satisface relaia:
A=R'*R.
Factorizarea Cholesky utilizeaz numai matricea superior triunghiular, iar
cea inferior triunghiular este considerat ca fiind transpusa complex conjugat a
celei superioare, astfel c, A este o matrice hermitic.
Funcia Matlab, care factorizeaz Cholesky, este chol, apelat cu sintaxa:
R=chol(A),
care necesit ca A s fie pozitiv definit, altfel returnnd numai un mesaj de eroare.
Exemple de matrice pozitiv definite sunt,
A1=[3 2+i 3-i;-2-i 8 5; 6 3+i 7]; A2=pascal(5)
pentru care,
R1 = [ 1.7321 1.1547 + 0.5774i 1.7321 - 0.5774i
0 2.5166 1.3245 + 0.6623i
0 0 1.2140 ],
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 156
R2 = [ 1 1 1 1 1
0 1 2 3 4
0 0 1 3 6
0 0 0 1 4
0 0 0 0 1 ].
Factorizarea Cholesky, pentru coeficienii binomului lui Pascal, i
aranjeaz ntr-o matrice superior triunghiular.
Dac matricea nu este pozitiv definit, ca de exemplu,
A3=[1 2 3 4;5 6 7 8; 9 10 11 12; 13 14 15 16]
atunci se utilizeaz apelarea funciei chol sub forma,
[R3,p]=chol(A3),
care conduce la,
R3 = [ 1.0000 2.0000 3.0000
0 1.4142 0.7071
0 0 1.2247 ]
p=4,
astfel nct:
R'*R = A(1:q,1:q) , q = p-1.
Rezolvarea unui sistem de ecuaii,
A*x=B,
se realizeaz cu secvena Matlab:
R=chol(A); x=R\R\b.

Pentru o matrice X, factorizarea incomplet Cholesky, aplicabil pentru
matrice rare i factorizarea Cholesky infinit este realizat, n Matlab, cu una dintre
sintaxele:
R = cholinc(X,dtol), n care, dtol este un scalar nenegativ, ce evideniz
tolerana permis la factorizarea incomplet, iar dac dtol=0,, se realizeaz
factorizarea complet;
R = cholinc(X,opt), n care, opt poate fi dtol, michol (0 pentru factorizarea
Cholesky nemodificat i 1 pentru modificat ) sau rdiag (0, n mod normal
sau 1, cnd se foreaz R ca o matrice cu zero pe diagonala principal);
R = cholinc(X,'0'), care realizeaz o factorizare incomplet Cholesky, a
unei matrice rare simetric pozitive, care nu garanteaz existena lui R i
putnd aprea un mesaj de eroare;
[R,p] = cholinc(X,'0'), evit mesajul de eroare i dac p=0, atunci R exist,
altfel R'*R corespunde cu X , pentru primele q=p-1 linii i coloane;
R = cholinc(X,'inf'), care produce o factorizare Cholosky infinit, ceea ce
presupune c, la ntlnirea unui pivol egal cu zero, atunci se completeaz
Inf pe diagonal, iar pe rnduri 0, iar X este pozitiv semidefinit, astfel c,
la ntlnirea unui pivot negativ, acesta se nlocuiete cu Inf.

Modificarea factorizrii Cholesky se realizeaz cu funcia cholupdate.
Algebr numeric liniar 157
Dac R=chol(A) este factorizarea Cholesky inial a matricei A, atunci
R1=cholupdate(R,x) returneaz o matrice superior triunghiular, rezultat din
factorizarea matricei A + X*X', cu X un vector coloan. Funcia lucreaz numai cu
matrice pline, nu rare.

Prin factorizarea LU (lower-upper), o matrice ptrat este descompus sub
forma produsului a dou matrice triunghiulare: una inferior triunghiular, matricea
L, cu elemente 1 pe diagonala principal i cealalt, matricea U, superior
triunghiular.
Factorizarea LU a unei matrice se realizeaz n Matlab cu funcia lu, care
se apeleaz cu una dintre sintaxele:
[L,U]=lu(X), cnd se returneaz o matrice superior triunghiular U i o
matrice inferior triunghiular permutat L, astfel nct X=L*U;
[L,U,P]=lu(X), cnd se returneaz o matrice superior triunghiular U, o
matrice inferior triunghiular permutat L i permutarea matriceal P, astfel
nct L*U=P*X.

Factorizarea LU este utilizat n Matlab pentru obinerea inversei unei
matrice, cu funcia inv i pentru calculul determinantului, cu funcia det.
S considerm sistemul A*x=b unde,
A = [ 1 1 2 1 1 2 b = [ 0
3 -1 -2 1 -2 1 -6
-1 1 3 -1 4 2 6
1 2 -1 2 -1 -3 1
-2 -3 1 -2 -3 -1 6
1 -2 4 2 -1 4 ] -1 ].

Prin factorizarea LU,
[L1,U1] = lu(A) sau [L,U,P] = lu(A)
obinem:
L1 = [ 0.3333 -0.3636 0.5283 0.5143 0.8676 1.0000
1.0000 0 0 0 0 0
-0.3333 -0.1818 0.4717 1.0000 0 0
0.3333 -0.6364 -0.1132 -0.5429 1.0000 0
-0.6667 1.0000 0 0 0 0
0.3333 0.4545 1.0000 0 0 0 ],

U1 = [ 3.0000 -1.0000 -2.0000 1.0000 -2.0000 1.0000
0 -3.6667 -0.3333 -1.3333 -4.3333 -0.3333
0 0 4.8182 2.2727 1.6364 3.8182
0 0 0 -1.9811 1.7736 0.4717
0 0 0 0 -1.9429 -2.8571
0 0 0 0 0 1.7647 ],

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 158
L = [ 1.0000 0 0 0 0 0
-0.6667 1.0000 0 0 0 0
0.3333 0.4545 1.0000 0 0 0
-0.3333 -0.1818 0.4717 1.0000 0 0
0.3333 -0.6364 -0.1132 -0.5429 1.0000 0
0.3333 -0.3636 0.5283 0.5143 0.8676 1.0000 ],

U = [ 3.0000 -1.0000 -2.0000 1.0000 -2.0000 1.0000
0 -3.6667 -0.3333 -1.3333 -4.3333 -0.3333
0 0 4.8182 2.2727 1.6364 3.8182
0 0 0 -1.9811 1.7736 0.4717
0 0 0 0 -1.9429 -2.8571
0 0 0 0 0 1.7647 ],

P = [ 0 1 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 1 0 0 0
0 0 0 1 0 0
1 0 0 0 0 0 ].

Se observ c L1*U1 este identic cu A, iar L*U este identic cu P*A..
Inversa matricei A, calculat cu funcia inv, este egal cu produsul
inverselor, respectiv:
inv(A) = inv(U1)*inv(L1) i inv(P*A) = inv(U)*inv(L).
De asemenea, pentru determinani, sunt valabile relaiile:
det(A) = det(L1)*det(U1) i det(P*A) = det(L)*det(U).
Rezolvarea sistemelor de ecuaii A*x = b, prin factorizarea Lu, presupune
soluionarea succesiv a sistemelor:
y=L1\b i x=U1\y,
rezultnd,
x = [2 -1 3 -2 1 -3 ].
Pentru o matrice X, factorizarea incomplet LU, luinc, aplicabil pentru
matrice rare, este realizat n Matlab cu una dintre sintaxele:
[L,U,P] = luinc(X,dtol) sau [L,U] = luinc(X,dtol) , n care dtol este un
scalar nenegativ, ce evideniaz tolerana permis la factorizarea LU
incomplet, aplicabil fiecrei coloane a lui X, iar dac dtol=0, se
realizeaz factorizarea LU complet;
[L,U,P] = luinc(X,opt) sau [L,U] = luinc(X,opt) , n care opt poate fi dtol,
milu (0, pentru factorizarea LU nemodificat i 1, pentru modificat) sau
udiag (0, n mod normal sau 1, cnd se foreaz U ca o matrice cu zero pe
diagonala principal);
[L,U] = luinc(X,'0'), care realizeaz o factorizare incomplet LU a unei
matrice rare, simetric pozitive, fr a da permutarea;
Algebr numeric liniar 159
[L,U,P] = luinc(X,'0'), prezint i matricea de permutare i se bazeaz pe
algoritmul de pivotare parial.

Factorizarea QR este o descompunere a unei matrice, A, ca produsul
dintre o matrice ortonormal, Q, cu o matrice superior triunghiular, R, astfel nct
A = Q*R.
Factorizarea QR se utilizeaz pentru rezolvarea sistemelor de ecuaii liniare
cu mai multe ecuaii dect necunoscute. Cea mai bun soluie a unor astfel de
sisteme, A*x = b, n sensul celor mai mici ptrate, este calculat cu x = A\b, care
utilizeaz implicit aceast factorizare.
Prin utilizarea factorizrii QR, cu funcia Matlab qr, soluia este calculat
n doi pai:
y=Q`*b i apoi x=R\y.
Apelarea funciei qr se poate face cu una dintre sintaxele:
[Q,R]=qr(A), returneaz matricea triunghiular superioar R, de aceeai
dimensiune cu A i matricea unitar Q, astfel nct, A = Q*R.
[Q,R,E]=qr(A), returneaz matricea de permutare E, a matricei
superior triunghiulare R, cu elementele diagonalei descresctoare i
matricea unitar Q, astfel nct A*E = Q*R, cu meniunea c, matricea E
are coloanele aranjate n ordinea descrescatoare a abs(diag(R));
[Q,R]=qr(A,0), realizeaz o descompunere economic a matricei A,
care, dac este de mxn, cu m>n, lucreaz numai cu primele n coloane;
[Q,R,E]=qr(A,0), realizeaz o descompunere economic a matricei A,
prezentnd i vectorul de permutare E, avnd coloanele aezate n ordinea
descresctoare a abs(diag(R)), astfel nct Q*R = A(:,E);
R = qr(A), returneaz numai matricea R, care R = chol(A'*A).

Pentru matrice rare, versiunea QR nu permut coloanele.
Soluia sistemului A*x=b, prin metoda celor mai mici ptrate, bazat pe
descompunerea QR, se afl fie ntr-un pas,
x = R\(R'\(A'*b))
fie succesiv,
r = b - A*x
e = R\(R'\(A'*r))
x = x + e;
De exemplu, descompunerea QR a matricei aceleiai matrice A, utilizat la
descompunerea LU, conduce la:
Q = [ -0.2425 0.1866 -0.4555 0.2090 -0.5768 0.5679
-0.7276 -0.3466 0.2364 0.4411 -0.1208 -0.2923
0.2425 0.2666 -0.5238 0.5303 0.0392 -0.5595
-0.2425 0.4133 0.0328 -0.5493 -0.4742 -0.4927
0.4851 -0.5999 0.0671 0.0150 -0.6101 -0.1670
-0.2425 -0.4932 -0.6758 -0.4227 0.2325 -0.0919 ],
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 160
R = [ -4.1231 -0.7276 1.4552 -3.1530 1.2127 -1.4552
0 4.4125 -1.1198 0.6132 3.8260 -2.0530
0 0 -5.6239 -1.1158 -2.5818 -4.5909
0 0 0 -1.8541 2.3748 1.8616
0 0 0 0 1.8936 1.7669 ]
astfel nct soluia se obine prin,
R\(R'\(A1'*b))
sau secvenial,
r = b - A*x ; e = R\(R'\(A'*r)) ; x = x + e;
rezultnd x = [2 -1 3 -2 1 -3 ], la fel ca i prin metoda LU.

Modificarea factorizrii QR iniiale se realizeaz cu funcia qrupdate, care
se apeleaz [Q1,R1] = qrupdate(Q,R,U,V), care returneaz factorizarea matricei
A + U*V', iar matricele U i V sunt de tipul coloan.

tergerea unei coloane din factorizarea QR se realizeaz cu funcia
qrdelete, care se apeleaz cu sintaxa:
[Q,R]=qrdelete(Q0,R0,j),
unde Q0 i R0 sunt factorizrile iniiale, [Q0,R0]=qr(A), iar Q i R sunt factorizrile
obinute dup ce din matricea A, a fost tears coloana j, respectiv elementele A(:,j).

Inserarea unei coloane n factorizarea QR se realizeaz cu funcia
qrinsert, care se apeleaz cu sintaxa:
[Q,R]=qrdelete(Q0,R0,j),
unde Q0 i R0 sunt factorizrile iniiale, [Q0,R0]=qr(A), iar Q i R sunt factorizrile
obinute dup ce, n matricea A, a fost inserat coloana j, respectiv elementele A(:,j),
dup ultima coloan a matricei iniiale.

Gsirea planului de rotaie al unei matrice X, de 2 x 2, se realizeaz cu
funcia planerot, apelat sub forma [G,Y]=planerot(X), care returneaz dou
matrice ortogonale, astfel c Y = G*X i Y(2) = 0.

Realizarea factorizrii QZ, pentru valori proprii generalizate, se
realizeaz cu funcia qz. Apelarea funciei se face cu:
[AA, BB, Q, Z, V] = qz(A,B); pentru matricele ptrate A i B, produce
matricele quasitriunghiulare superioare AA i BB, matricele unitare Q i
Z, astfel nct Q*A*Z = AA i Q*B*Z = BB, i matricea vectorilor
proprii generalizai, V.

Dac matricele iniiale, A i B, sunt complexe, atunci AA i BB sunt
triunghiulare.

Factorizarea unei matrice la forma Hessenberg, se realizeaz prin funcia
hess. Forma Hessenberg a unei matrice are elementele de sub prima diagonal nule
i aceleai valori proprii, ca matricea original. Dac matricea iniial este
Algebr numeric liniar 161
simetric sau hermitic, atunci matricea Hessenberg are form tridiagonal. Se
apeleaz:
H=hess(A) aduce la forma Hessenberg, H, matricea iniial A;
[H,P]=hess(A) calculeaz o matrice unitar P i o matrice Hessenberg
H, astfel nct A = P*H*P' i P'*P = eye(size(P)).

Dac considerm matricea X, de test a valorilor proprii, de 3 x 3,
X = [ -149 -50 -154 ; 537 180 546 ; -27 -9 -25 ]
forma Hessenberg are elementul (3,1) zero,
hess(X) = [ -149.0000 42.2037 -156.3165
-537.6783 152.5511 -554.9272
0 0.0728 2.4489 ]

Factorizarea unei matrice la forma Schur, se realizeaz cu funcia schur.
Descompunerea Schur produce o matrice quasitriunghiular T i o matrice unitar
U, astfel nct, X = U*T*U' i U'*U = eye(size(U)), n care matricea iniial X,
trebuie s fie ptrat. Sintaxele de apelare sunt: [U,T] = schur(X), T = schur(X).
Pentru aceeai matrice X, de mai sus, descompunera Schur este:
schur(X) = [ 1.0000 7.1119 815.8706
0 2.0000 -55.0236
0 0 3.0000 ].
Pentru matricea X complex, forma Schur este superior triunghiular, cu
valorile proprii pe diagonal.

Transformarea matricei de ieire de forma Schur, din real n complex,
pentru o matrice de intrare X real, se face cu funcia rsf2csf, apelat sub forma:
[U,T]=rsf2csf(U0,T0),
unde U0 i T0 sunt matricele Schur iniiale din [U0,T0]=schur(X), iar U, T
sunt cele finale, complexe, respectiv o matrice superior triunghiular, cu valorile
proprii pe diagonal.

Aplicarea metodei celor mai mici ptrate la rezolvarea unui sistem de
ecuaii liniare omogene, cu restricii nenegative, se realizeaz n Matlab de ctre
funcia lsqnonneg. Aceasta se apeleaz cu una dintre sintaxele:
X=lsqnonneg(C,d), cu C i d reale, care returneaz un vector X, ce
minimizeaz norm(C*X-d), atunci cnd X >= 0;
X=lsqnonneg(C,d,x0), utilizeaz x0 (x0>0) ca punct de plecare al soluiei;
X=lsqnonneg(C,d,x0,tol) utilizeaz o toleran impus la aflarea soluiei;
altfel aceasta este 10*max(size(C))*norm(C,1)*eps, cu eps=2.2204e-016.

Aplicarea metodei celor mai mici ptrate la rezolvarea unui sistem de
ecuaii liniare omogene, cu covarian oarecare, se realizeaz n Matlab de ctre
funcia lscov.
Aceasta se apeleaz cu una dintre sintaxele:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 162
X=lscov(A,B,V), returneaz vectorul X, ca soluie a ecuaiei A*X=B+E,
unde E este o funcie de distribuie normal, cu media zero i covaraina V,
iar matricea A este de dimensiuni mxn, cu m>n, astfel nct, vectorul X
minimizeaz (A*X-B)'*inv(V)*(A*X-B) i soluia sistemului este dat de
X=inv(A'*inv(V)*A)*A'*inv(V)*B;
[X,DX]=lscov(A,B,V), returneaz erorile standard ale lui X n DX, erori
calculate cu relaiile
mse=B'*(inv(V)-inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n)
dx = sqrt(diag(inv(A'*inv(V)*A)*mse)).

7.5. Vectori i valori proprii
n foarte multe aplicaii, apar situaii n care se pune problema
determinrii acelor valori ale unei constante , pentru care exist soluii nebanale
ale unui sistem de ecuaii liniar omogen, de forma:
1 1 1 1 11
... ... x x a x a x a
n n j j
= + + + +
...........................................................
i n in j ij i
x x a x a x a = + + + + ... ...
1 1

...........................................................
n n nn j nj n
x x a x a x a = + + + + ... ...
1 1

de n ecuaii liniare cu n necunoscute, avnd matricea A simetric.

Dac un vector 0 x are proprietatea c x x = A , se spune c x
reprezint o direcie proprie a transformrii A, iar numrul (real sau complex),
este o valoare proprie a acestei transformri.
Denumirea de direcie proprie a transformrii este justificat prin aceea c,
dac x satisface relaia x x = A , aceeai proprietate o va avea orice vector x k ,
unde k este un numr oarecare, real sau complex. Acest fapt este o consecin a
proprietilor transformrii liniare, ( ) ( ) x k x k x A k x k = = = A .
O astfel de problem este cunoscut ca o problem cu valori i vectori
proprii. Valorile lui , pentru care exist soluii nebanale, se numesc valori
proprii sau caracteristice ale matricei A a coficienilor sistemului, iar soluiile
vectori corespunztoare se cunosc sub denumirea de vectori proprii sau
caracteristici ai matricei A.
Forma matriceal a sistemului x x = A este echivalent cu,
( ) 0 I - A = x
unde I, este matricea identitate, calculabil n Matlab cu eye(A). Aceast matrice este
denumit uneori i unitate, are toate elementele de pe diagonala principal egale cu 1,
iar celelalte nule. Se mai noteaz i cu [1] sau [e], avnd elementele,
Algebr numeric liniar 163

=
j i
j i
e
ij
dac , 1
dac , 0

Acest sistem omogen posed soluii nebanale, dac i numai dac,
determinantul matricei coeficienilor se anuleaz, adic matricea I - A este
singular,
( ) 0
...
... ... ... ...
...
...
I - A
2 1
2 22 21
1 12 11
=

= =


nn n n
n
n
a a a
a a a
a a a
P
Aceast condiie necesit ca s fie o rdcin a ecuaiei algebrice de mai
sus, cunoscut sub denumirea de ecuaie caracteristic a transformrii A sau
ecuaie secular. Fiind de gradul n n , va avea n rdcini, fie distincte, fie unele
dintre ele confundate. Aceste rdcini sau soluii
n
,..., ,
2 1
, sunt valorile proprii
ale matricei sau transformrii A. Polinomul ( ) P , se numete polinomul
caracteristic al transformrii liniare A.
Corespunztor cu fiecare valoare proprie
k
, exist cel puin un vector
soluie
k
x , a sistemului x x = A , determinat pn la o constant arbitrar.
n continuare, se enun principalele teoreme i proprieti ale valorilor
proprii.
Dac o transformare liniar A, are n direcii proprii, reprezentate prin
vectorii
n
u u u ,..., ,
2 1
, liniar independeni, aceti vectori pot fi luai ca baz a
spaiului, iar matricea transformrii A, n aceast baz, va avea forma diagonal,
[ 0 ,..., 0 ,
1
; 0 ,..., , 0
2
; ... ;
n
,..., 0 , 0 ].
Reciproc, dac matricea transformrii A, n baza
n
u u u ,..., ,
2 1
, are form
diagonal, atunci
n
,..., ,
2 1
sunt valorile proprii, iar
n
u u u ,..., ,
2 1
reprezint
direciile proprii corespunztoare.
Dac valorile proprii
n
,..., ,
2 1
sunt distincte, direciile proprii
corespunztoare sunt reprezentate prin vectorii
n
u u u ,..., ,
2 1
, liniar independeni.
Valorile proprii ale unei transformri liniare autoadjuncte (hermitice), sunt
reale.
La dou valori proprii distincte, ale unei transformri autoadjuncte,
corespund dou direcii proprii ortogonale.
ntr-un spaiu euclidian cu n dimensiuni (matricea A de nxn), o
transformare autoadjunct (hermitic) are n direcii proprii, ortogonale, dou cte
dou. Vectorii
n
e e e ,..., ,
2 1
, care reprezint cele n direcii proprii ale transformrii
A, ortogonale dou cte dou, pot fi luai de lungime unitate,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 164
( )

=
j i
j i
e e
j i
pentru , 1
pentru , 0
, . Drept consecin, matricea A, fa de aceast baz are
forma diagonal, [ 0 ,..., 0 ,
1
; 0 ,..., , 0
2
; ... ;
n
,..., 0 , 0 ].
Un caz particular de matrice hermitic l formeaz matricele simetrice
reale. n acest caz, transformarea are n direcii proprii ortogonale, dou cte dou i
valorile proprii reale. Transformarea se va reprezenta printr-o matrice care poate fi
adus la forma diagonal. Pe diagonala principal, n noua matrice, vor figura
valorile proprii, nu ntotdeauna distincte.
Valorile proprii ale transformrilor unitare au modulul egal cu 1.
Orice transformare unitar ntr-un spaiu euclidian cu n dimensiuni are n
direcii proprii ortogonale, dou cte dou. Matricea transformrii, raportat la
aceste direcii, va avea form diagonal.

n Matlab, calculul valorilor i al vectorilor proprii ai unei matrice ptrate
se realizeaz cu funcia eigs, care se apeleaz cu una dintre sintaxele:
E=eigs(A) returneaz un vector E, care conine valorile proprii ale
matricei ptrate A;
[V,D]=eigs(A) returneaz o matrice diagonal D, care conine valorile
proprii ale matricei A i o matrice V, modal, ale crei coloane sunt
vectorii proprii, astfel nct A*V = V*D;
[V,D] = eigs(A,'nobalance') returneaz valorile i vectorii proprii, fr a
executa o balansare, deoarece dac matricea conine elemente mici,
comparabile cu erorile de rotunjire, balansarea le scaleaz, fcndu-le la
fel de semnificative ca celelalte elemente ale matricei originale i, acest
fapt, ar conduce ,n final, la vectori proprii incoreci.

n cazul matricelor nesimetrice de ordinul n, pentru care A
T
A (sau n
Matlab A'A), dac valorile proprii sunt distincte, atunci exist n vectori proprii,
liniar independeni asociai.
Dac matricea are numai valori proprii de ordinul nti (valorile proprii
sunt distincte), atunci vectorii proprii sunt independeni. Dac vectorii proprii nu
sunt independeni, atunci matricea original este neregulat.
Dac valorile proprii ale unei matrice nesimetrice de ordin n nu sunt toate
distincte, atunci setul de vectori proprii asociai poate s nu fie de rang n. n cazul
n care vectorii proprii ai matricei A nesimetrice nu formeaz un set complet, este
totui posibil s gsim un set complet de ali vectori, denumii vectori principali,
care mpreun cu setul vectorilor proprii, vor determina un set complet de vectori.
Dac multiplicitatea unei rdcini este k, avem n-k+1 vectori proprii i nu putem
gsi mai mult dect k-1 vectori principali independeni.
i pentru matrice nesimetrice exist ntotdeauna o matrice Jordan, aproape
diagonal (avnd valoarea proprie multipl
k
, pe diagonala principal i 1, pe
diagonala adiacent superioar).
Algebr numeric liniar 165
Dac toate valorile proprii ale matricei A sunt pozitive, matricea A se
numete pozitiv definit. Invers, dac toate valorile proprii ale matricei A sunt
negative, matricea A se numete negativ definit.

Valorile i vectorii proprii generalizai determin soluiile nebanale ale
ecuaiei:
x B x = A
unde A i B sunt matrice ptratice de ordinul n, iar este un scalar.
Valorile lui , care satisfac ecuaia, se numesc valori proprii generalizate
i valorile x, corespunztoare, sunt vectorii proprii generalizai.
Dac B este o matrice nesingular, det(B)0, adic matrice iversabil,
problema calculului valorilor i al vectorilor proprii se reduce la o problem
standard de valori proprii, prin nlocuirea lui A cu B
-1
*A, dearece ecuaia este
echivalent cu:
x x = .A B
-1
.
Calculul vectorilor i valorilor proprii generalizate se realizeaz cu funcia
eig, apelat cu sintaxa:
V=eig(A) returneaz un vector V, care conine valorile proprii
generalizate;
[V,D] = eig(A,B) produce o matrice diagonal D, care conine valorile
proprii ale matricei A i o matrice V, modal, ale crei coloane sunt
vectorii proprii, astfel nct A*V = B*V*D;
[V,D] = eig(A,B,'chol') se aplic la matricele A, B, simetrice, utiliznd
factorizarea Cholesky, pentru B;
[V,D] = eig(A,B,'qz') se aplic la matricele A, B, utiliznd factorizarea
QZ.

De exemplu, considernd A=[ -2 1 0 ; 1 -2 1; 0 1 -2], atunci
[V,D]=eig(A), conduce la:
V = [ 0.500 -0.707 -0.500 ; -0.707 0.000 -0.707; 0.500 0.707 -
0.500]
D=[ -3.41 0 0; 0 -2.00 0 0 0 -0.59].

Pentru calculul valorilor proprii generalizate se utilizeaz funcia eig, care
permite redarea unui set de ase valori proprii generalizate i, n plus, se poate
utiliza i n cazul matricelor mari i/sau rare.

Transformarea matricelor de ieire, V i D, ale funciei eig(X), cu X real,
din forma complex diagonal n forma real, se realizeaz cu funcia cdf2rdf,
apelat sub forma [V,D]=cdf2rdf(V,D). n forma complex diagonal, matricea D
are valori proprii complexe sub diagonal. n form real, valorile proprii
complexe formeaz un bloc diagonal de 2 x 2.

Analiza inial a acurateei determinrii valorilor proprii se realizeaz cu
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 166
funcia balance, apelat cu:
[T,B] = balance(A),
unde T i B sunt transformrile de similaritate, astfel c B = T\A*T, i normele pe linii
i coloane s fie egale. Matricea T este o matrice diagonal de permutare.

Calculul valorilor singulare ale unei matrice se realizeaz cu funcia svd,
fiind i un mijloc sigur de determinare a rangului unei matrice. Funcia svd se
apeleaz cu una dintre sintaxele:
S1=svd(X), cnd se returneaz un vector S1, care conine valorile
singulare ale matricei X;
[U,S,V]=svd(X), care returneaz o matrice diagonal S, cu aceleai
dimensiuni ca X, avnd elementele diagonale nenegative (care sunt i
valorile singulare), n ordine descresctoare i matricele unitare U i V,
astfel nct X= U*S*V' ;
[U,S,V]=svd(X,0), realizeaz un calcul mai rapid al valorilor singulare,
considernd, n cazul unei matrice X, de m x n, cu m>n, numai primele n
coloane, pentru U i S de n x n.

Descompunerea n valori singulare a matricei X=[1 2;3 4;5 6;7 8] se poate
realiza cu
S1=svd(X) ; [U,S,V]=svd(X) ; [U0,S0,V0]=svd(X,0);
rezultnd:
S1 = [ 14.2691 ; 0.6268];
U = [ -0.1525 -0.8226 -0.3945 -0.3800
-0.3499 -0.4214 0.2428 0.8007
-0.5474 -0.0201 0.6979 -0.4614
-0.7448 0.3812 -0.5462 0.0407 ]
S = [ 14.2691 0 ; 0 0.6268 ; 0 0; 0 0 ]
V = [ -0.6414 0.7672 ; -0.7672 -0.6414 ]
U0 = [ -0.1525 -0.8226 ; -0.3499 -0.4214 ; -0.5474 -0.0201; -0.7448
0.3812 ]
S0 = [ 14.2691 0 ; 0 0.6268 ] ; V0 = [ -0.6414 0.7672 ; -0.7672 -
0.6414 ]

Calculul valorilor singulare generalizate se realizeaz cu funcia gsvd.
Funcia gsvd se apeleaz cu relaia
[U,V,X,C,S] = gsvd(A,B),
care returneaz matricele unitare U i V ale matricei, de regul, ptrate X i matricele
diagonale nenegative C i S, astfel nct:
A = U*C*X'
B = V*S*X'
C'*C + S'*S = I.
Matricele A i B trebuie s aib acelai numr de coloane, dar pot avea
Algebr numeric liniar 167
numr de linii (rnduri) diferite. Dac A este de m x p i B de n x p, atunci U este
de m x m, V este de n x n i X este de p x q, unde q=min(m+n,p).
Funcia gsvd apelat SIGMA = gsvd(A,B) returneaz vectorul valorilor
singulare generalizate, adic sqrt(diag(C'*C)./diag(S'*S)).

Pentru manipularea valorilor i a vectorilor proprii ai unor matrice mari sau
rare, calculate cu eigs, se utilizeaz funcia svds, n locul funciei svd.

Calculul coeficienilor unui polinom, avnd date rdcinile, se realizeaz
cu funcia poly, care se apeleaz cu sintaxele:
c=poly(r) cnd returneaz un vector linie, c, coninnd coeficienii
polinomului, n ordinea descresctoare a puterilor, iar r este un vector ce
conine rdcinile polinomului;
c=poly(A) returneaz coeficienii c, n ordinea descresctoare, ai
polinomului caracteristic al matricei A, de tipul n x n .

Calculul coeficienilor unui polinom, la care se cunosc valorile proprii, se
realizeaz cu funcia polyeig.

Calculul numrului de condiionare, innd seama de valorile proprii ale
unei matrice, se obine cu funcia condeig, care se apeleaz frecvent,
[V,D,s] = condeig(A)
care este echivalent cu: [V,D] = eig(A); s = condeig(A).

7.6. Funcii de matrice
Exponeniala unei matrice iniiale ,X, se calculeaz cu funcia expm.
Calculul se face utiliznd aproximaia Pade, iar apelarea cu Y=expm(X), Y fiind
matricea exponenial a lui X. Dac X are un set de vectori proprii V, cu valorile
proprii corespondente D, atunci:
[V,D]=eig(X)
expm(X)=V*diag(exp(diag(D)))/V.
De menionat c, exponeniala unei matrice, funcia expm(X), este
diferit de funcia exp(X), care calculeaz element cu element.
Sunt disponibile trei variante de calcul:
Y=expm1(X), care este identic cu expm, iar calculul se face cu
aproximaia Pade;
Y=expm2(X), la care calculul exponenialei este cel clasic, prin serii
Taylor, dar carculul este lent i cu erori;
Y=expm3(X), calculul se efectueaz prin intermediul vectorilor i
valorilor proprii i diagonalizare, dar poate da erori dac matricea X nu
are un set de vectori proprii liniar independeni.

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 168
Considerm matricea X= [ 1 1 0 ; 0 0 2 ; 0 0 -1 ]. Aplicnd diversele
funcii de calcul ale exponenialei, obinem:
exp(X) = [ 2.7183 2.7183 1.0000
1.0000 1.0000 7.3891
1.0000 1.0000 0.3679 ],
expm(X) = [ .7183 1.7183 1.0862
0 1.0000 1.2642
0 0 0.3679 ].
Pentru acest caz, toate varianteleexpm1, expm2, expm3, conduc la acelai
rezultat.
Logaritmul unei matrice ,X, se calculeaz cu funcia logm(X) i este inversa
funciei expm(X). Dac X are valori proprii negative, atunci rezultatul este complex.
Dac logaritmul matricei nu se calculeaz cu suficient precizie, se d un mesaj de
eroare. Pentru a evita mesajul de eroare, se prefer apelarea funciei sub forma,
[L,esterr] = logm(A),
care returneaz eroarea rezidual egal cu norm(expm(L)-A)/norm(A).
Dac X este real simetric sau hermitic complex, atunci are log(X).
Unele matrice, ca de exemplu A=[0 1 ; 0 0], nu au logaritm, nici real i nici
complex i, prin urmare, funcia log(A) nu returneaz nimic.
Pentru majoritatea cazurilor,
logm(expm(X)) = X = expm(logm(X)).
Calculele se efectueaz dup algoritmul Parlett, care utilizeaz
descompunerea (factorizarea) Schur.
Radicalul unei matrice A este calculat de funcia sqrtm. Apelat sub
forma X=sqrtm(A), aceasta calculeaz radicalul matricei A, astfel nct X*X = A.
Matricea X este unic, dac valorile proprii ale prii reale nu sunt negative. Dac o
valoare proprie a prii reale este negativ, atunci rezultatul este complex.
Dac matricea A este singular, aceasta poate s nu aib matrice radical i,
n acest caz, se d un mesaj de eroare. Apelat cu dou argumente, [X,
RESNORM] = sqrtm(A), nu d nici un mesaj de eroare, ci returneaz reziduu
norm(A-X^2,'fro')/norm(A,'fro').
Apelat cu trei argumente de ieire,
[X, ALPHA, CONDEST] = sqrtm(A),
returneaz factorul de stabilitate, ALPHA i numrul de condiionare, CONDEST, al
matricei. Reziduu norm(A-X^2,'fro')/norm(A,'fro') este aproximat de N*ALPHA*EPS,
iar norma relativ Frobenius, a erorii lui X este aproximat de
N*ALPHA*CONDEST*eps, unde N = max(size(A)).
Funcia general de evaluare a unei matrice, A, este funm i este apelat
sub forma:
F=funm(A,fun),
unde fun poate fi expm, logm, sqrtm sau o alt funcie intern, ca de exemplu sin,
introdus ca funcie handler, @.
8. FUNCII MATEMATICE N MATLAB
Funciile matematice uzuale i speciale se apeleaz cu sintaxa general:
y=nume_funcie(argument)
unde:
nume_funcie, este numele uneia dintre funciile matematice;
argument, este valoarea pentru care se evalueaz funcia;
y este variabila n care se returneaz rezultatul.
Dac argumentul este o matrice, funciile matematice opereaz asupra
fiecrui element.
8.1. Funcii trigonometrice
Principalele funcii trigonometrice directe, apelabile n Matlab sunt:
sin(x) , care calculeaz sinusul argumentului x, dat n radiani;
cos(x) , care calculeaz cosinusul argumentului x, dat n radiani;
tan(x) , care calculeaz tangenta argumentului x, dat n radiani;
cot(x) , care calculeaz cotangenta argumentului x, dat n radiani;
sec(x) , care calculeaz secanta argumentului x, dat n radiani;
csc(x) , care calculeaz cosecanta argumentului x, dat n radiani.

Dac, de exemplu, argumentul x este vectorul:
x = [ pi/6 pi/4 pi/3 pi/2
pi/2+pi/6 pi/2+pi/4 pi/2+pi/3 pi
pi+pi/6 pi+pi/4 pi+pi/3 pi+pi/2
3*pi/2+pi/6 3*pi/2+pi/4 3*pi/2+pi/3 2*pi ],
care n radiani este,

x =[ 0.5236 0.7854 1.0472 1.5708
2.0944 2.3562 2.6180 3.1416
3.6652 3.9270 4.1888 4.7124
5.2360 5.4978 5.7596 6.2832],
atunci pentru:
sin(x) se obine,
ans =
0.5000 0.7071 0.8660 1.0000
0.8660 0.7071 0.5000 0.0000
-0.5000 -0.7071 -0.8660 -1.0000
-0.8660 -0.7071 -0.5000 -0.0000

cos(x) se obine,
ans =
0.8660 0.7071 0.5000 0.0000
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 170
-0.5000 -0.7071 -0.8660 -1.0000
-0.8660 -0.7071 -0.5000 -0.0000
0.5000 0.7071 0.8660 1.0000.
Pentru y = [pi/3 pi/4 pi/6], dac se calculeaz:
tan(y) se obine,
ans =
1.7321 1.0000 0.5774,
cot(y) se obine,
ans =
0.5774 1.0000 1.7321,
sec(y) se obine,
ans =
2.0000 1.4142 1.1547,
csc(y) se obine,
ans =
1.1547 1.4142 2.0000.


Principalele funcii trigonometrice inverse, apelabile n Matlab sunt:
asin(x), care calculeaz arcsinusul argumentului x;
acos(x), care calculeaz arccosinusul argumentului x;
atan(x), care calculeaz arctangenta argumentului x;
atan2(y,x), care calculeaz arctangenta prii reale a elementelor x i y,
cu condiia ca . -pi <= atan2(y,x) <= pi;
acot(x), care calculeaz arccotangenta argumentului x;
asec(x), care calculeaz arcsecanta argumentului x;
acsc(x), care calculeaz arccosecanta argumentului x.

Dac pentru x = [ 0 1/2 1], calculnd:
asin(x) se obine,
ans =
0 0.5236 1.5708,
acos(x) se obine,
ans =
1.5708 1.0472 0,
atan(x) se obine,
ans =
0 0.4636 0.7854,
acot(x) se obine,
ans =
1.5708 1.1071 0.7854.

Funcii matematice n Matlab 171
8.2. Funcii hiperbolice
Principalele funcii hiperbolice directe, apelabile n Matlab sunt:
sinh(x), care calculeaz sinusul hiperbolic al argumentului x;
cosh(x), care calculeaz cosinusul hiperbolic al argumentului x;
tanh(x), care calculeaz tangenta hiperbolic a argumentului x;
coth(x), care calculeaz cotangenta hiperbolic a argumentului x;
sech(x), care calculeaz secanta hiperbolic a argumentului x;
csch(x), care calculeaz cosecanta hiperbolic a argumentului x;

Considernd x=[0 pi/6 pi/2 pi/3 pi] i calculnd:
sinh(x) se obine,
ans =
0 0.5479 2.3013 1.2494 11.5487,
cosh(x) se obine,
ans =
1.0000 1.1402 2.5092 1.6003 11.5920,
tanh(x) se obine,
ans =
0 0.4805 0.9172 0.7807 0.9963,
coth(x) se obine,
ans =
Inf 2.0813 1.0903 1.2809 1.0037,
sech(x) se obine,
ans =
1.0000 0.8770 0.3985 0.6249 0.0863,
csch(x) se obine,
ans =
Inf 1.8253 0.4345 0.8004 0.0866.

Principalele funcii hiperbolice inverse, apelabile n Matlab, sunt:
asinh(x), care calculeaz arcsinusul hiperbolic al argumentului x;
acosh(x), care calculeaz arccosinusul hiperbolic al argumentului x;
atanh(x), care calculeaz arctangenta hiperbolic a argumentului x;
acoth(x), care calculeaz arccotangenta hiperbolic a argumentului x;
asech(x), care calculeaz arcsecanta hiperbolic a argumentului x;
acsch(x), care calculeaz arccosecanta hiperbolic a argumentului x;

Dac x = [0 1/2 1], calculnd:
asinh(x) se obine,
ans =
0 0.4812 0.8814,
acosh(x) se obine,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 172
ans =
0 + 1.5708i -0.0000 + 1.0472i 0,
atanh(x) se obine,
ans =
0 0.5493 Inf.

Pentru argumente numere complexe de forma z=x+iy, relaiile de calcul
sunt:
sin(z) = sin(x)*cosh(y) + i*cos(x)*sinh(y);
cos(z) = cos(x)*cosh(y) - i*sin(x)*sinh(y);
tan(z) = sin(z)/cos(z);
cot(z) = cos(z)/sin(z).
8.3. Funcii de tip exponenial
Dup cum am artat anterior, ridicarea unui numr a la puterea n se face
prin instruciunea a^n. Exponentul n poate avea orice valoare, real sau complex.
Pentru a calcula radicalul de ordinul n dintr-un numr a, se utilizeaz funcia
putere sub forma a^(1/n). De exemplu, dac a = 9 i n=2, atunci a^n este 9^2,
respectiv 81, iar a^(1/n) este 9^(1/2), respectiv 3.

Ridicarea la puterea x a numrului 2 (2
x
), se poate face prin funcia
pow2(x). Dac x este o matrice, atunci rezultatul va fi o matrice de aceleai
dimensiuni, funcia acionnd element cu element. Pentru x=3.1, pow2(x) este
8.5742. Calculul unui numr de forma y=m*2
n
, se realizeaz printr-o instruciune
de forma y=pow2(m,n). Pentru m=20.1 i n=3.5, cu comanda y=pow2(m,n) se
obine 161.2.

Pentru calculul exponenialei e
x
(unde e=2.71828182845), se utilizeaz
funcia exp(x), unde x este argumentul. Dac x=[1 2 2 1], atunci exp(x) conduce
la:
ans =
2.7183 7.3891 0.1353 0.3679.
Dac argumentul este un numr complex de forma z=x+i*y, atunci rezultatul
se calculeaz cu relaia: ( ) ( ) ( ) y sin i y cos e e
x z
+ = . Pentru z=2+3*i se obine:
ans =
-7.3151 + 1.0427i.

Pentru calculul logaritmului natural, al logaritmului n baza 2 sau al
logaritmului zecimal (n baza 10) al numrului a (real, sau complex), sunt
disponibile funciile log, log2 i respectiv log10, apelabile cu sintaxele:
x=log(a); x=log2(a); x=log10(a).
Dac a = [2 ^2 3^2 2^5 10^3 10^(-2) 2^(-3)], atunci:
log(a) este [1.3863 2.1972 3.4657 6.9078 -4.6052 -2.0794],
Funcii matematice n Matlab 173
log2(a) este [2.0000 3.1699 5.0000 9.9658 -6.6439 -3.0000], iar
log10(a) este [0.6021 0.9542 1.5051 3.0000 -2.0000 -0.9031].
Atunci cnd argumentul funciei log este un numr complex, de forma
z=x+i*y, rezultatul este calculat cu relaia: log(z) = log(abs(z)) + i * atan2(y,x).
Funcia log2 , de argument complex, se calculeaz cu relaia:
log2(z) = log2(abs(z)) + i * atan2(y,x)/log(2), iar funcia log10 prin relaia,
log10(z) = log(abs(z)) + i * atan2(y,x)/log(10).
Pentru z = 5+ 7* i se obine c log(z) este 2.1520 + 0.9505i, log2(z) este
3.1047 + 1.3713i, iar log10(z) este 0.9346 + 0.4128i.
Funcia log2 de argument real X (numr sau vector), poate fi apelat prin
sintaxa [F,E]=log2(x), situaie n care returneaz un numr real F, uzual n
domeniul 0.5 <= abs(F) < 1, i un numr ntreg E, astfel nct X = F .* 2.^E, ceea
ce corespunde funciei frexp( ) din ANSI C i funiei standard logb( ) din IEEE.

Calculul radicalului de ordinul 2 dintr-un numr a, respectiv a , se
realizeaz prin utilizarea funciei sqrt(a). Dac numrul a este negativ sau
complex, rezultatul calculului este un numr complex.
De exemplu, pentru a = [9 4 4+9*i 2], prin sqrt(a) se obine:
ans =
3 2i 2.6314 + 1.7101i 1.4142.

Determinarea puterii N a numrului 2 care majoreaz modulul
argumentului P, astfel nct
N
2 P se face prin funcia N=nextpow2(P), care
returneaz cel mai mic numr N, care ndeplinete condiia impus. Dac P este
vector, funcia returneaz scalarul N, astfel nct 2
N
majoreaz numrul de
elemente ale vectorului. Pentru P=19, cel mai mic numr N este obinut cu relaia
nextpow2(19), rezultnd 5, astfel nct 2^5=32 este numrul majorant.
8.4. Funcii de tip complex
Construirea unui numr complex, z, dat prin partea real x i partea
imaginar y, se face cu instruciunea z=complex(x,y), care are ca rezultat z=x+i*y.
De altfel, se poate forma un numr complex i numai prin instruciunea z=x+i*y,
iar n loc de i poate fi i j. Dac y lipsete, atunci instruciunea devine complex(x),
iar numerele z sunt complexe, avnd partea imaginar 0.

Calculul valorii absolute sau a modulului argumentului i y x z + = , real
sau imaginar se face prin funcia abs(z). Dup cum se tie, modulul r al unui
numr complex este
2 2
y x r + = . Pentru x=[2 3 4+2*i], aplicnd funcia
abs(x), se obine [ 2.0000 3.0000 4.4721].

Calculul unghiului fazei, respectiv a argumentului a numrului complex
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 174
i y x z + = , respectiv unghiului, n radiani, fcut n planul complex (x i y), se
realizeaz prin funcia angle(z), care este echivalent cu atan(y/x). n general,
argumentul este determinat, n afara unui multiplu de 2 , prin
( ) ( )
r
y
sin ,
r
x
cos = = . Cu cele de mai sus, forma trigonometric a numrului
complex este: ( ) ( ) ( ) sin cos r z i + = . Pentru z=2+3*i, prin angle(z) se obine
0.9828, acelai rezultat ca i prin atan(3/2).

Partea real x, a unui numr complex i y x z + = , se extrage prin funcia
real(z), iar partea imaginar prin funcia imag(z). Pentru z=2+3*i, prin real(z) se
obine valoarea 2, iar prin imag(z) se obine 3. Calculul prii reale i imaginare a
numerelor complexe, exprimate n form polar, se poate face i cu funcia
unwrap.

Pentru un numr complex i y x z + = , conjugatul su este i y x z = i
poate fi obinut prin funcia conj(z). Dac z=2+3*i, atunci conj(z) este 2-3*i.

Determinarea situaiei, dac un vector sau matrice X are toate elementele
numere reale (respectiv dac partea imaginar a fiecrui element este 0) se
realizeaz prin funcia isreal(X), care rspunde prin 1, dac toate elementele sunt
reale i prin 0, altfel. Pentru X=[2 i 5+2*i 7] prin isreal(X) se obine 0, iar pentru
XX=[2 -1 7], cu isreal(XX) se obine 1.

Sortarea unor numere complexe conjugate perechi (sau reale partea
conjugat 0), n ordinea cresctoare a prii reale, se realizeaz prin funcia
cplxpair. Dac X=[8 1+2*i 4 1-2*i 2 3-2*i 3+2*i], atunci funcia
cplxpair(X), returneaz [1+2i 1-2i 3+2i 3-2i 2 4 8].
8.5 Funcii pentru aproximarea numerelor
Funciile Matlab pentru aproximarea cu numere ntregi sunt:
fix care rotunjete la cel mai apropiat ntreg spre zero ;
floor ce rotunjete la cel mai apropiat ntreg spre minus infinit (- ) ;
ceil - care rotunjete la cel mai apropiat ntreg spre plus infinit (+) ;
round - care rotunjete la cel mai apropiat ntreg.

Funciile de mai sus opereaz asupra fiecrui element al unei matrice sau
vector i se apeleaz cu sintaxa nume_funcie(argument), unde nume_funcie este
numele uneia dintre funciile de mai sus (fix, floor, ceil, round), iar argument
poate fi un scalar, un vector sau o matrice, ale crui elemente se doresc a fi
rotunjite. Atunci cnd elementele din argument sunt numere complexe, funciile de
mai sus opereaz independent asupra fiecrei pri (real sau imaginar). Dac
considerm vectorul, V = [-0.25 -7.2 2.4-2.6i 0.499 0.501 2.71+3.49i
Funcii matematice n Matlab 175
11.5i], atunci:
fix(V) este [ 0 -7 -2-2i 0 0 2+3i 11i ];
floor(V) este [ -1 -8 -3-3i 0 0 2+3i 11i ];
ceil(V) este [ 0 -7 -2-2i 1 1 3+4i 12i ];
round(V) este [ 0 -7 -2-3i 0 1 3+3i 12i ].

Pentru aproximarea numerelor reale cu fracii continue se utilizeaz
funcia rat, apelat cu una dintre sintaxele,
[N,D] = rat(x), [N,D] = rat(x,tol),
unde: x este numrul care trebuie aproximat cu fracii continue ; tol este tolerana
care se accept ntre numrul x dat i numrul y (aproximat), astfel nct
tol x y , avnd valoarea implicit, tol=10
-6
; N, D sunt numrtorul, respectiv
numitorul fraciei, care aproximeaz pe x cu toleran tol, astfel nct abs(N./D - X)
<= tol*abs(X); y este exprimarea lui x ca fracie continu.
Numrul y, rezultat prin funcia rat, aproximeaz fiecare element al
vectorului x cu un numr de forma:
k
2
1
0
d
1
... d
1
d
1
d y
+ +
+
+ = . De menionat c
acelai algoritm se utilizeaz i la apelarea instruciunii interne format rat.
Dac, de exemplu, x = [0.25 1.35 3.455 1.3456], atunci rat(x) este
ans =
0 + 1/(4)
1 + 1/(3 + 1/(-7))
-3 + 1/(-2 + 1/(-5 + 1/(-18)))
1 + 1/(3 + 1/(-9 + 1/(-3 + 1/(2 + 1/(4))))),
astfel nct:
4
1
0 0.25 + = ,
7 -
1
3
1
1 1.35
+
+ = ,
18
1
5 -
1
2 -
1
3 3.455 -

+
+
+ = ,
4
1
2
1
3
1
9 -
1
3
1
1 1.3456
+
+
+
+
+ = , approximate cu tolerana implicit 10
-6
.

Aproximarea numerelor reale cu numere raionale se realizeaz prin
apelarea funciei rats, cu sintaxa rats(x), utilizat i n format rat. Pentru aceleai
valori ale lui x, ca mai sus, se obine:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 176
ans =
1/4 27/20 -691/200 841/625.

Funcia mod(x,y) calculeaz modulus (restul cu semn dup mpirea dintre
x i y), astfel c mod(x,y) = x - y.*floor(x./y) dac y ~= 0, iar prin convenie,
mod(x,0) este x. Intrrile x i y trebuie s fie matrice reale de aceeai dimensiune,
sau una trebuie s fie scalar.

Funcia rem(x,y) calculeaz restul mpririi lui x la y, element cu element,
astfel c mod(x,y) = x - y.*fix(x./y) dac y ~= 0, iar prin convenie, rem(x,0) este
NaN. Intrrile x i y trebuie s fie matrice reale de aceeai dimensiune sau una
trebuie s fie scalar.
Dac se calculeaz restul mpririi vectorului x=[1 3 -6], la y=[2 3 4], cu
z=rem(z,y), se ob=[2 3 4], cu z=rem(z,y), se obine
z=[ 1 0 -2]

Funcia mod(x,y) are acelai semn cu y, atunci cnd rem(x,y) are semnul lui
x. Cele dou funcii mod(x,y) i rem(x,y) sunt egale dac x i y au acelai semn,
dar difer dac y sau x au semne diferite. Dac X=[1.5 9 -4.5] i Y=[-0.5 -3 4],
atunci mod(X,Y) este [ 0 0 3.5], iar rem(X,Y) este [0 0 -0.5], dar mod(Y,X)
este [1 6 -0.5], iar rem(Y,X) este [-0.5 -3 4]. Considernd X1=[2.5 6 7] i
Y1=3, atunci rem(X1,Y1) este [2.5 0 -1], iar rem(Y1,X1) este [0.5 3 3], pe
cnd mod(X1,Y1) este [2.5 0 2], iar mod(Y1,X1) este [0.5 3 -4].

Funcia sign(x) asociaz fiecrui element al vectorului x elementele 1, 0, 1,
dup urmtoarea regul: ( )

<
=
>
=
0 x 1 -
0 x 0
0 x 1,
x sign , . Dac x este complex, atunci
sign(x)=x./abs(x).

8.6. Funcii pentru aflarea unor numere importante
Factorii primi ai unui numr natural pozitiv N, alii dect 1, sunt calculai
cu funia factor(N). Dac N=33, atunci factor(N), gsete ca factori primi 3 i 11.

Generarea unei liste cu toate numerele prime mai mici sau egale cu un
numr natural pozitiv N (altele dect 1), se face prin utilizarea funciei primes(N).
Dac N=33, atunci primes(33), produce lista,
ans =
2 3 5 7 11 13 17 19 23 29 31,
care conine toate numerele prime mai <=N.

Verificarea dac, un numr natural N sau un element dintr-un vector sau
matrice este prim, se realizeaz prin utilizarea funciei isprime( N), la care se
Funcii matematice n Matlab 177
obine rspunsul 1 atunci cnd este prim i 0, altfel. De exemplu, pentru
isprime(31) se obine 1, iar pentru isprime(33) se obine 0.

Calculul celui mai mare divizor comun G, a dou numere ntregi a i b,
se obine prin utilizarea funciei G=gcd(a,b). Pentru a=2310 i b=273, funcia
gcd(a,b) gsete 21, care este cel mai mare divizor comun.

Calculul celui mai mic multiplu comun M, a dou numere ntregi a i b,
se realizeaz prin utilizarea funciei M=lcm(a,b). Pentru a=2310 i b=273, funcia
lcm(a,b) se gsete 30030, care este cel mai mic multiplu comun.

Numrul tuturor combinaiilor a N elemente, luate cte K (K<=N),
respectiv a coeficienilor binomiali, se afl cu instruciunea nchoosek(N,K), care
calculeaz N!/(K!(N-K)!). Pentru N=9 i K=3, prin nchoosek(N,K), se obine 84,
iar pentru N=3, K=2, se obine 3.

Gsirea tuturor permutrilor posibile (fr repetiie), a numerelor naturale
dintre 1 i un numr oarecare N (N<15), se obine cu funcia perms(1:N), care
are ca rezultat o matrice cu N! linii i N coloane, coninnd toate permutrile
posibile.
Pentru N=3, prin perms(1:3) se obine:
ans =
3 2 1
2 3 1
3 1 2
1 3 2
2 1 3
1 2 3.

Funcia factorial(N) realizeaz produsul tuturor ntregilor de la 1 la N, fiind
similar cu funcia prod(1:N) i realiznd produsul 1*2* *N. Pentru numere n
dubl precizie, care au peste 15 digii, rezultatul este corect pentru N<=21, iar
pentru N>21 sunt corecte primele 15 semne (digii). De exemplu, factorial(4) este
1*2*3*4=24.

8.7. Funcii matematice speciale
8.7.1. Funcia Gamma, Gamma incomplet
Funcia Gamma sau funcia lui Euler de spea a doua, poate fi definit prin:
integrala ( )


=
0
1
dt e t x
t x
, unde x ,
sau
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 178
prin limita irului
( )
( ) ( ) ( )
x
n
n n
n x x x x
x
+ + +
=


!
2 1
lim
1 K
.

Principalele proprieti ale funciei Gamma sunt:
dac argumentul x este un ntreg, atunci funcia Gamma este identic cu
funcia factorial, respectiv ( ) 1 ! + = n n ;
pentru orice z finit, este satisfcut relaia de recuren ( ) ( ) x x x = + 1 ;
cunoscnd valoarea pentru x > 1, valorile pentru x < 1 se determin din
ecuaia complementelor ( )
( ) ( ) ( ) ( ) x x
x
x x
x
+

=

=

sin 1 sin
1 ;
pentru
2
1
= x funcia = |

\
|

2
1
.

n Matlab, funcia Gamma se apeleaz cu sintaxa y=gamma(x), unde x este
argumentul iar y este valoarea calculat. Pentru x=2.5 se obine 1.3293, iar pentru
x=0.5 se obine -3.5449.

Pentru x>0 se poate calcula logaritmul natural al funciei Gamma cu
instruciunea gammaln(x), care corespunde lui log(gamma(x)), ns calculul se
face printr-o metod direct, fr a calcula gamma(x).

Funcia Gamma incomplet, gammainc(x,a), este definit de relaia,

>

=
+

x
a t
x a a dt t e
a
a x P
0
1
, 0 ,
) (
1
) , ( ,
i are limitele: ( ) 1 ) , ( , 0 , 0 = = a P a P .
Pentru x=1.25 i a=0.5, cu gammainc(1.25,0.5) se obine 0.8862.

Pentru x=[0:0.1:15] i diverse valori ale lui a, funcia Gamma incomplet se
obine prin instruciunile:
g_05=gammainc(x,0.5); g_1=gammainc(x,1);
g_3=gammainc(x,3); g_10=gammainc(x,10),
iar valorile sunt prezentate n figura 8.1.
Complementul funciei P(x,a), notat cu Q(x,a), este de multe ori confundat
cu funcia gamma incomplet,

>

= =
+

x
x
a t
x a a dt t e
a a
a x
a x P a x Q , 0 ,
) (
1
) (
) , (
) , ( 1 ) , (
1

i are limitele,
( ) 0 ) , ( , 1 , 0 = = a P a Q .
Funcii matematice n Matlab 179

Fig. 8.1. Funcia Gamma incomplet pentru diverse valori ale lui a i x

8.7.2. Funciile Beta i Beta incomplet
Funcia Beta, ( ) q p B , , sau funcia lui Euler de prima spe, de variabile
complexe p i q, poate fi definit prin integrala,
( ) ( )


=
1
0
1 1
1 , dt t t q p B
q p
,
convergent pentru ( ) 0 > p , ( ) 0 > q .

Principalele proprieti ale funciei Beta sunt:
funcia Beta, ( ) q p B , , este simetric n raport cu p i q, ( ) ( ) p q B q p B , , = ,
obinut prin schimbarea de variabil = t 1 , astfel c
( ) ( ) ( )

= = =
0
1
1
0
) , ( 1 1 , p q B d d q p B
p q p p
;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 180
ntre funciile lui Euler ( ) q p B , i ( ) z exist relaia
( )
( ) ( )
( ) q p
q p
q p B
+

= , ;
pentru funcia lui Euler de prima spe avem egalitatea,
( )
( ) ( )
( )
( ) ( )
( )
( ) q p qB
q p
q p
q
q p
q p
p q p pB , 1
1
1
1
1
1 , + =
+ +
+
=
+ +
+
= + .

n Matlab, funcia Beta se apeleaz cu sintaxa b=beta(p,q), unde p i q sunt
argumentele, iar b este valoarea calculat. Pentru p=0.5 i q=1.5 se obine 1.5708.

Pentru x>0 se poate calcula logaritmul natural al funciei beta, cu
instruciunea betaln(p,q), care corespunde lui log(beta(p,q)), ns calculul se face
printr-o metod direct, fr a calcula beta(p,q). Pentru p=0.5 i q=1.5 se obine
0.4516.
Funcia Beta incomplet, betainc(x,p,q), este definit de relaia,
( )
( )
( )
( )
( )

+ +
+ +
+

= =

=
+
x
n
n
q p
q p inc
x
n q p B
n p B
q p pB
x x
dt t t
q p B
q p x B
0
0
1 1 1

1 ,
1 , 1
1
,
1
1
) , (
1
) , , (
cu,
] 1 , 0 [ , 0 , >
+
x p,q q p
i limitele:
( ) 0 , , 0 = q p B
inc
, 1 ) , , ( = q p B
inc
.

Pentru x=[0:0.01:1] i diverse valori ale lui p i q, funcia Beta incomplet se
obine prin:
b1=betainc(x,0.5,5), b2=betainc(x,1,3),
b3=betainc(x,8,10), b4=betainc(x,0.5,0.5),
iar graficul este prezentat n figura 8.2.

Pentru calculul funciei Beta incomplet se utilizeaz algoritmul din funcia
betacore, apelat n betainc(x,a,c) prin instruciunea betacore(x,a,b).

Funcii matematice n Matlab 181

Fig. 8.2. Funcia Beta incomplet pentru diverse valori ale lui p, q i x
8.7.3. Funciile lui Bessel
Printre funciile speciale, deosebit de importante sunt funciile lui Bessel,
deoarece se ntlnesc n diverse probleme din mai toate domeniile fizicii i ale
tehnicii.
Ecuaia diferenial
( )
( ) 0 ) (
) ( ) (
0 ) ( ) ( ) (
2 2
2
2
2
2 2 2
= + +
= + +
x y x
dx
x dy
x
dx
x y d
x
x y x x y x x y x


unde este un parametru real sau complex, se numete ecuaia lui Bessel, iar
soluiile acestei ecuaii se numesc funcii Bessel.
Funciile Bessel se mai numesc i funcii cilindrice datorit faptului c apar
la rezolvarea ecuaiei lui Laplace n coordonate cilindrice, n problemele la limit
din teoria potenialului (electric, termic, chimic).
Soluia general a ecuaiei lui Bessel pentru n ntreg este
) ( ) (
2 1
x J C x J C y

+ =
unde C
1
i C
2
sunt constante arbitrare, iar J

i J
-
sunt funciile Bessel de spea nti
i ordinul , respectiv .
Funcia Bessel de spea nti i ordinul , pentru o valoare x, din domeniul de
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 182
olomorfie (x)-T, unde T este o semidreapt cu originea n x=0, este dat de relaia
( )
( )

=
+
+ +
|

\
|
=
0
2
1 !
2
1 ) (
p
p
p
p p
x
x J

.
ntre funciile Bessel cu indici de semne contrare, J

i J
-
, exist relaia
( ) ) ( 1 ) ( x J x J
n

=

.
n Matlab, funcia Bessel de spea nti i ordinul niu () real, pozitiv i
argumentul x se calculeaz cu instruciunea J=besselj(niu,x). Dac x i niu sunt
vectori de dimensiunile m i respectiv n, atunci J va fi o matrice cu dimensiunea
m
x
n, n care elementul din poziia (j,k) este dat de J(j,k)=besselj(niu(j),x(k)), cu
j=1,,m<=1000, iar k=1,,n.
O variant veche de apelare a funciei Bessel de spea nti i ordinul niu ()
real, pozitiv i argumentul x era bessela(niu,x).

n figura 8.3 se prezint grafic valorile funciei Bessel de spea nti i de
ordinele 2,-1,0, 1, 2, pentru argumentul x variind ntre 0 i 20, cu decrementul 0.1,
calculate cu secvena de program:
x=0:0.1:20; niu=[-2 -1 0 1 2]; J_2=besselj(-2,x); J_1=besselj(-1,x);
J0=besselj(0,x); J1=besselj(1,x); J2=besselj(2,x);
plot(x,J_2,'r-',x,J_1,'b:',x,J0,'g.',x,J1,'y-.',x,J2,'c--');grid

Soluia general a ecuaiei lui Bessel pentru n = ntreg este
) ( ) (
2 1
x Y C x J C y
n n
+ =

unde C
1
i C
2
sunt constante arbitrare, J
n
este funcia Bessel de spea nti i ordin n
iar Y
n
este funcia Bessel de spea a doua i ordinul n, numite i funciile lui
Neumann, astfel c uneori sunt notate cu N
n
.
Pentru n ntreg i pozitiv ( )
( )


=
1
0
2
2
! 2
! 1 1
2
ln
3
2
) (
n
k
n k
n k n n
x
k
k n x
x J x Y

, iar
pentru n nentreg este o combinaie liniar,
( ) ( )
nx
x J nx x J
x Y
n n
n
sin
cos
) (

= .
Funciile Bessel de spea nti, J

(x), i spea a doua, Y


-
(x), sunt linear
independente oricare ar fi .
De menionat c functiile Bessel de spea a doua (funciile Neumann) sunt
definite i pentru valori negative ale lui n, iar ntre acestea exist relaia
( ) ) ( 1 ) ( x Y x Y
n
n
n
=

.
n Matlab, funciile Bessel de spea a doua (funciile Neumann) sunt
calculate cu instruciunea Y=bessely(niu,x), unde niu este ordinul, iar x ordonatele
Funcii matematice n Matlab 183
punctelor unde se evaluaz funcia Neumann.

Fig. 8.3. Funciile Bessel de spea nti i ordin ntreg

Funciile Bessel de prima spe (numite de multe ori de primul sau ntiul
ordin) i spea a doua (numite i de ordinul doi) sunt asemntoare cu funciile
trigonometrice i, de fapt, funcia J

(x) corespunde lui cos(x) i funcia Y

(x)
corespunde lui sin(x). Aceasta sugereaz deci s se defineasc pentru funciile
cilindrice, funcii care sunt legate de J

i Y

n acelai mod cum funciile


exponeniale sunt legate de cele trigonometrice, adic
( )
( )
( )
( ), ) ( ) ( , ) ( ) (
2 1
x iY x J x H x iY x J x H

= + =
unde i este unitatea imaginar.
Funciile
( ) ( )
) ( ), (
2 1
x H x H

se numesc funciile lui Bessel de spea a treia
(sau de ordinul trei) sau funciile lui Hankel. Acestea sunt cunoscute ca funciile
Hankel de spea nti ,
( )
) (
1
x H

, respectiv de spea a doua,


( )
) (
2
x H

.
Dac n ntreg, atunci
( )
( ) ( )

sin
) (
1
x J e x J
i x H
i

= ,
( )
( ) ( )

sin
) (
2
x J e x J
i x H
i

= .
Schimbnd pe n , rezult evident,
( ) ( )
) ( ) (
1 1
x H e x H
i

,
( ) ( )
) ( ) (
2 2
x H e x H
i

= .
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 184
n Matlab, funciile Bessel de ordinul trei sau funciile lui Hankel sunt
calculate cu instruciunea H=besselh(niu,k,z), unde niu este ordinul, k este ordinul
sau spea (k=1 pentru spea nti i k=2 pentru spea a doua), iar x ordonatele
punctelor unde se evaluaz funcia Hankel.

Valorile funciilor Bessel pentru valori foarte mici ale argumentului (|x|<<1)
sunt:
( ) 1
2 4
1
2
1
4 2
0

|

\
|
+
|

\
|

x x
x J ; ( )
( ) n
x
x J
n
n
n

2
;
( ) ; 57722 . 0 ln
1
...
3
1
2
1
1 lim ln ; ln
2
ln
2
0
= |

\
|
+ + + + = |

\
|
+

n
n
x
x Y
n


( )
( )
0 , ,
! 1 2
>

n N n
x
n
x Y
n
n
n

,
n care ln este constanta Euler-Mascheroni.
Comportarea funciilor Bessel pentru valori foarte mari ale argumentului
( x ) este dat de formulele asimtotice:
( ) ,
2 4
cos
2
|

\
|

n x
x
x J
n
|x|1;
( ) ,
2 4
sin
2
|

\
|

n x
x
x Y
n
|x|1;
( ) ( ) ,
2
,
2
2 4 2 2 4 1
|

\
|
|

\
|




n x j
n
n x j
n
e
x
x H e
x
x H |x|1.

Pentru funciile lui Bessel sunt valabile urmtoarele formule de recuren:
( ) ( ) ( ) ( ) ( ) ( ) x Y x Y
x
n
x Y x J x J
x
n
x J
n n n n n n 1 1 1 1
2
,
2
+ +
= = ,
( ) ( ) ( ) ( ) ( ) ( ) x J
x
n
x J x J x J
x
n
x J x J
dx
d
n n n n n n
= = =
+ 1 1
, ( ) ( ) x J x J
1 0
= ,
( ) ( ) ( ) ( ) ( ) ( ) x Y
x
n
x Y x Y x Y
x
n
x Y x Y
dx
d
n n n n n n
= = =
+ 1 1
, ( ) ( ) x Y x Y
1 0
= ,
( ) ( )dx x xJ
x
x J

=
0 1
1
, ( ) ( )dx x xY
x
x Y

=
0 1
1
, ( ) ( ) ( )dx x xJ
x
x J x J

= +
2
0 2
2
1
2
0
2
,
( ) ( )
( )
( ) ( ) x J
x
x J
x
n n
x J x J
dx
d
n n n n 1
2 2
2
1
1
1
+
+
(

= = ,
Funcii matematice n Matlab 185
( ) ( )
( )
( ) ( ) x Y
x
x Y
x
n n
x Y x Y
dx
d
n n n n 1 2 2
2
1
1
1
+
+
(

= = .

Dac ordinul funciei Bessel este un multiplu impar al lui 1/2, atunci funcia
Bessel de prima spe (ordinul nti) poate fi exprimat, sub form compact, cu
ajutorul funciilor trigonometrice elementare i al puterilor negative, ntregi i
fracionale, ale lui x,

( ) ( ) , cos
2
, sin
2
2
1
2
1
x
x
x J x
x
x J

= =


( ) ( ) , cos
2
1
sin
2
, cos sin
1 2
2
3
2
3
|

\
|
+ = |

\
|
=

x x
x
x J x x
x x
x J


( ) ntreg, , cos
1
sin
1 2
2
1
n x
x
B x
x
A
x
x J
n n
n
(

\
|
+ |

\
|
=
+

iar
|

\
|
|

\
|
x
B
x
A
n n
1
,
1
sunt
polinoame n
x
1
de grad cel mult n.

Liouville a artat c acestea sunt singurele funcii Bessel care pot fi
exprimate prin funcii elementare, iar toate celelalte sunt funcii transcendente noi.

Funciile Bessel de prima spe i de ordin ntreg pot fi reprezentai printr-o
integral definit. Astfel,
( ) ( )

= = =


0
2
0
sin
2
0
cos
sin cos
1
2
1
2
1
d n x d e e d e e
i
x J
in ix in ix
n n
,
( ) ( ) ( )


= = =
1
0
2
2
0 0
0
1
cos 2
sin cos
2
sin cos
1
du
u
ux
d x d x x J

.

De asemenea, funciile Bessel de prima spe i de ordin ntreg, ( ) x J
n
,
admit reprezentarea ( )
+
|
|

\
|

=
C
n
x
n
d
e
i
x J

1
1
2
2
1
, unde C este un cerc cu centrul n
punctul 0 = sau o curb simpl nchis care nconjur acest punct.


SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 186
8.7.4. Dezvoltarea n serie de funcii Bessel a unei funcii
oarecare. Ortogonalitatea funiilor Bessel de prima spe
i zerourile lor.
Se poate demonstra c o funcie oarecare poate fi exprimat sub forma
( ) ( )

=
=
1

x J a x f
n
, cu 1 0 x , adic poate fi exprimat cu ajutorul unui
numr mare de funcii Bessel de ordinul n. n aceast expresie ,... ... , ,
2 1
sunt
rdcinile funciei ( )
n
J ordonate dup mrime (n>-1), n fiind numr real.
Dac n este real n>-1, toate zerourile funciei ( ) x J
n
sunt reale, ntruct seria
corespunztoare are toi coeficienii reali. Funcia ( ) 0 = x J
n
, cu n real, are o
infinitate de rdcini reale.
Valorile coeficienilor le obinem n modul obinuit, nmulind ambii
membrii ai egalitii cu o asemenea funcie, nct n membrul drept al egalitii,
integrnd n domeniul 1 0 x , valoarea numai a unei singure integrale s rezulte
diferit de zero. n acest fel, poate fi determinat coeficientul corespunnztor
termenului respectiv.
Funciile ( ) ( ) ( ) 1 0 , ... , ... , ,
2 1
x x J x x J x x J x
n n n
, formeaz
o mulime de funcii ortogonale n domeniul 1 0 x , adic,
( ) ( ) ( ) ( ) k i dx x J x J x dx x J x J x
k n i n k n i n
= =

, 0 x
1
0
1
0
.
Coeficienii dezvoltrii n serie
( ) ( ) ( ) ( ) ... ...
2 2 1 1
+ + + + = x J a x J a x J a x f
n n n n n

i putem obine prin nmulirea ambilor membrii cu funcia ( ) x xJ
n
, integrnd de
la 0 la 1 i innd seama de relaia de ortogonalitate,
( ) ( ) k i dx x J x J x
k n i n
=

, 0
1
0
, astfel c termenii din membrul drept vor fi nuli,
cu excepia unuia singur.
Prin urmare, coeficientul al -lea al dezvoltrii n serie este:
( )
( )dx x J x x f
J
a
n
n

=
1
0
2
) (
2
.
8.7.5. Funciile Bessel modificate
n practic, nu obinem direct formele canonice ale ecuaiilor Laplace n
coordonate cilindrice,
Funcii matematice n Matlab 187
( ) ( ) 0 ) ( 0 ) (
) ( ) (
0 ) ( 1
) ( 1 ) (
2 2 2 2
2
2
2
2
2
2
2
= +
|

\
|
= + +
=
|
|

\
|
+ +
x y n x
dx
d
x
dx
d
x x y n x
dx
x dy
x
dx
x y d
x
x y
x
n
dx
x dy
x dx
x y d

ci, n general, trebuie s rezolvm ecuaii difereniale de forma:
0 ) (
) ( 1 ) (
2
2
2
2
=
|
|

\
|
+ + x y
x
n
k
dx
x dy
x dx
x y d
,
care, cu schimbarea de variabil kx z = ,se reduce la forma canonic.
Soluia general a ecuaiei anterioare se poate scrie sub forma
) ( ) (
2 1
kx J C kx J C y
n n
+ = sau ) ( ) (
2 1
kx Y C kx J C y
n n
+ = , care, pentru n i x ,iau
valori complexe.
Pentru cazul paricular 1
2
= k , ecuaia anterioar devine
0 ) ( 1
) ( 1 ) (
2
2
2
2
=
|
|

\
|
+ + x y
x
n
dx
x dy
x dx
x y d
,
avnd soluia general de forma,
) ( ) (
2 1
x K C x I C y
n n
+ = ,
unde ) (x I
n
este funcia Bessel modificat de spea nti, iar ) (x K
n
este funcia
Bessel modificat de spea a doua.
Aceste funcii modificate sunt echivalentele funciilor Bessel ) (x J
n
i
) (x Y
n
, care difer printr-un factor constant i sunt date de expresiile,
( ) ( ) ( ), ) ( ix J i ix J i x I
n
n
n
n
n
=


( ) ( ) [ ] ( ) ( ) [ ] x I x I
n
ix iY ix J i x K
n n n n
n
n
= + =


sin 2 2
) (
1
,
fiind denumite, din aceast cauz i funciile Bessel de argument pur imaginar.
n Matlab, aceste funcii sunt calculate cu formula bi=besseli(n,x) i
bk=besselk(n,x), unde n este ordinul, iar x este argumentul pur imaginar.
Pentru x pur imaginar, avnd valorile modulului x=[0:0.1:4], se reprezint n
figura 8.4, funciile Bessel modificate de spea nti (I) i a doua (K), de ordinul
n=0,1,2, calculate cu secvenele Matlab:
x =[0:0.001:3.5]; I_0=besseli(0,x); I_1=besseli(1,x); I_2=besseli(2,x);
x1=[0.01:0.001:3.5]; K_0=besselk(0,x1);
x2=[0.125:0.001:3.5]; K_1=besselk(1,x2);
x3=[0.5:0.001:3.5]; K_2=besselk(2,x3);
plot(x,I_0,x,I_1,'-.',x,I_2,'--',x1,K_0,x2,K_1,'-.',x3,K_2,'--').
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 188

Fig. 8.4. Funciile Bessel modificate

Dac comportarea funciilor Bessel de spea nti i a doua seamn cu aceea
a funciilor care descriu micarea oscilatorie amortizat, (ceea ce a reieit i din
faptul c pentru valori foarte mari ale argumentului ele pot fi nlocuite cu funcii
sinus, respectiv cosinus de amplitudine descresctoare), comportarea funciilor
Bessel modificate se aseamn cu aceea a funciilor exponeniale.

Valorile funciilor Bessel modificate, pentru valori foarte mici ale
argumentului (|x|<<1) sunt:
( ) 1
2 4
1
2
1
4 2
0

|

\
|
+
|

\
|

x x
x I ; ( ) 0 ,
2 !
1
>
|

\
|
n
x
n
x I
n
n
;
( ) ; 57722 . 0 ln ,
2
ln
0
=
x
x K ( )
( )
0 , ,
! 1 2
1

n N n
x
n
x K
n
n
n
,
n care ln este constanta Euler-Mascheroni.
Comportarea funciilor Bessel modificate, pentru valori foarte mari ale
argumentului ( x ) este dat de formulele asimtotice:
( )
x
e
x I
x
2
0
, ( )
x
e
x
x K

2
0

, |x|1;
Funcii matematice n Matlab 189

( ) x x I
x I
2
1
1
) (
0
1
,
( ) x x K
x K
2
1
1
) (
0
1
+ , |x|1.

Pentru funciile Bessel modificate, sunt valabile urmtoarele formule de
recuren:
( ) ( ) ( ) ( ) ( ) ( ) x K x K
x
n
x K x J x I
x
n
x I
n n n n n n 1 1 1 1
2
,
2
+ +
+ = + = , ( ) ( ) x K x K
1 0
= ,
( ) ( ) ( ) x I x I x I
dx
d
1 0 0
= = , ( ) ( )dx x xI
x
x I

=
0 1
1
, ( ) ( )dx x xK
x
x K

=
0 1
1
.
Verificarea argumentelor funciilor Bessel se face cu besschk, apelat sub
forma [MSG,n,x,SIZ] = besschk(n,x), n care n MSG se ntoarce un mesaj
referitor la n i x, specificnd dac sunt numere i dac sunt reale, iar n SIZ se
specific dac au aceeai dimensiune, concomitent cu un mesaj dac nu au.
8.7.6. Funciile lui Thomson
Pe lng funciile lui Bessel, de argument pur real sau pur imaginar, ntlnim
i funcii de ordinul zero i de argument x i
2
1
(respectiv
4

i
xe ) sau x i
2
3
(respectiv
4

i
ixe ), a cror valoare este n general complex.
Pentru aceste funcii, cu aplicaii practice deosebite n electrotehnic, se
folosesc notaiile introduse de W. Thomson (lord Kelvin):
|
|

\
|
=
|
|

\
|
= +
4
0
4
0
) ( bei ) ( ber

i i
xe I ixe J x i x ,
|
|

\
|
=
|
|

\
|
= +
4
0
4
3
0
) ( ei ) ( ker

i i
xe K ixe K x ik x .
innd seama de ( ), ) ( ix J i x I
n
n
n

= avem
( )

=
|

\
|
=
|
|

\
|
0
2
2
4
0
2 !
1
p
p
p
i
x
p
i xe I

,
astfel c:

( ) ( )
...
2 ! 4
1
2 ! 2
1
1 Re Re ) ( ber
8
2
4
2
2
1
0
2
3
0
|

\
|
+ |

\
|

|
|

\
|
=
|
|

\
|
=
x x
x i J x i J x ,
( ) ( ) ( )
...
2 ! 5
1
2 ! 3
1
2 ! 1
1
Im Im ) ( bei
10
2
6
2
2
2
2
1
0
2
3
0
|

\
|
+ |

\
|
|

\
|

|
|

\
|
=
|
|

\
|
=
x x x
x i J x i J x

Curbele funciilor ber(x) i bei(x) sunt prezentate n figura 8.5 i sunt
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 190
calculate n Matlab cu instruciunile:
x=[0:0.1:10]; ber=real(besselj(0,i^0.5*x)); bei=imag(besselj(0,i^1.5*x));
plot(x,ber,'-.',x,bei); xlabel('x'); ylabel('Functiile lui Thomson').

Prin definiie, ber(x) i bei(x) se numesc funciile lui Thomson.
Acestea se generalizeaz pentru oarecare prin egalitile:
|
|

\
|
=

4
3
) ( bei ) ( ber


i
xe J x i x ,
|
|

\
|
=

4
3
) ( kei ) ( ker


i
ixe K x i x ,
|
|

\
|
= +

4
3
) 1 (
) ( hei ) ( her

i
xe H x i x .

Fig. 8.5. Funciile lui Thomson ber(x) i bei(x)

Funcii matematice n Matlab 191
8.7.7. Funcia Airy
Pe lng funciile lui Bessel, de argument pur real sau pur imaginar, ntlnim
i funciile Airy, definite astfel:
W = airy(Z) - funcia Airy, Ai(z), a elementelor Z;
W = airy(0,Z) identic cu airy(Z);
W = airy(1,Z) derivate funciei Airy, Ai'(z);
W = airy(2,Z) funcia Airy de spea a doua, Bi(z);
W = airy(3,Z) derivate funciei Airy de spea a doua, Bi'(z).

Dac argumentul Z este o matrice, rezultatul este de acelai tip.
Sub forma [W,IERR] = airy(K,Z), returneaz n IERR i informaii
referitoare la rezultatul calculelor. Astfel:
ierr = 1 argument illegal (Illegal arguments);
ierr = 2 depire spre infinit (Overflow. Return Inf.);
ierr = 3 acuratee inadecvat (Some loss of accuracy in argument
reduction)
ierr = 4 rezultatele sunt inadecvate (Complete loss of accuracy, z too
large);
ierr = 5 nu este convergent (No convergence. Return NaN).
Relaiile dintre funciile Airy i Bessel modificate sunt:
( )

3 / 1
3
1
Ai(z)

= K
z

( ) ( ) ( )
3 / 1 3 / 1
3
Bi(z) I I
z
+ =


unde:
2
3
3
2
z = .
n Matlab, relaiile sunt:
Ai(z) = 1/pi*sqrt(z/3)*K_1/3(zeta)
Bi(z) = sqrt(z/3)*(I_-1/3(zeta)+I_1/3(zeta))
unde zeta = 2/3*z^(3/2).
8.7.8. Funcia eroare
Funcia eroare, erf(x), i complementara funciei eroare, erfc(x), sunt cazuri
speciale ale funciei Gamma incomplete, definite prin relaiile:
) 5 . 0 , (
2
erf(x)
2
0
2
x P dt e
x
t
= =

,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 192
) erf(x 1
2
erfc(x)
0
2
= =


x
t
dt e


n care ) 5 . 0 , (
2
x P este funcia Gamma incomplet, iar argumentul x trebuie s fie
real i 0 x .
Funcia eroare i complementara acesteia au limitele,
0 erf(0) = , 1 ) erf( = , 1 erfc(0) = , 0 ) erfc( = ,
i respect relaiile de simetrie :
erf(-x) erf(-x) = , erfc(x) 2 erfc(-x) = .

Calculul valorii funciei eroare genaralizate, pentru x i y scalar, vector sau
matrice se face cu relaia:
) erf(x erf(y)
2
erf(x)
2
= =


y
x
t
dt e

.

Inversa funciei eroare, erfinv(y), returneaz valoarea x pentru valori
cunoscute ale argumentului y i se apeleaz cu sintaxa x=erfinv(y). Valorile lui y
trebuie s fie n intervalul [-1 1], iar x rezult n intervalul ( ) + , - .

Funcia eroare, acoperitoare pentru fiecare argument x este:
erf(x) erfcx(x)
2
=
x
e ,
care, pentru x foarte mare, este aproximat cu
x
1 1

.
8.7.9. Funcia integral exponenial
Funcia integral exponenial, expint, pentru fiecare element x>0, este
definit prin:


=
x
t
dt
t
e
expint(x) .
O alt definiie a funciei integraleexponenial este valoarea principal a
integralei Chauchy, notat Ei i definit prin:

=
x t
dt
t
e
Ei(x) .
Relaia dintre cele dou definiii este:
expint(-x+i*0) = -Ei(x) - i*pi, pentru x > 0
Ei(x) = real(-expint(-x)), pentru x > 0.

Funcii matematice n Matlab 193
8.7.10. Polinoamele i funciile Legendre asociate
n coordonate carteziene x, y, z, ecuaia lui Laplace 0 grad div = = u u ,
se scrie,
0






2
2
2
2
2
2
=

z
u
y
u
x
u
,
iar n coordonate sferice, r, , , aceast ecuaie are forma,
0




sin
1


sin
sin
1
2
2
2
2
=
|

\
|

+
|

\
|

r
U
r
r
U U


,
unde:
( ) ( ) cos , sin sin , cos sin , , = r r r u r U
este funcia obinut din ( ) z y x u , , prin schimbarea coordonatelor carteziene n
sferice,
cos z , sin sin y , cos sin = = = r r r x .

Funciile ( ) z y x u , , , omogene n x, y, z, care satisfac ecuaia lui Laplace se
numesc funcii sferice. Gradul de omogenitate al funciei ( ) z y x u , , se numete i
ordinul funciei sferice.
Dac ( ) z y x u , , este o funcie sferic de ordinul n, datorit omogenitii,
avem
( ) ( ) ( ) , cos , sin sin , cos sin , ,
n
n n
F r r r r u r r U = = ,
care, introdus n ecuaia lui Laplace, scris n coordonate sferice i simplificnd cu
n
r , conduce la:
( ) 0 1


sin
1


sin
sin
1
2
2
2
= + +

+ |

\
|

n
n n
F n n
F F


.

Funciile ( ) ,
n
F , care verific ecuaia Laplace de mai sus, se numesc
funcii sferice superficiale de ordinul n, deoarece pe sfera cu centrul n origine i de
raz 1 = r avem:
( ) ( ) , , , 1
n
F U = .
Fiecrei funcii sferice ( ) ( ) , , , , r U z y x u = de ordinul n i corespunde o
funcie sferic superficial ( ) ,
n
F i, reciproc, fiecrei funcii sferice
superficiale ( ) ,
n
F i corespunde o funcie sferic
( ) ( ) ( ) , , , , ,
n
n
F r r U z y x u = =
de acelai ordin n.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 194
De menionat c schimbarea lui n n 1 = n p , las ecuaia anterioar
neschimbat i prin urmare, dac ( ) ( ) , , ,
n
n
F r r U = este o funcie sferic,
atunci i funcia ( ) ( ) , , ,
1
1
1

=
n
n
F r r U este o funcie sferic.

Polinoamele lui Legendre sau funciile lui Legendre de prima spe sunt
funcii sferice superficiale, care satisfac ecuaia lui Laplace. Acestea sunt
polinoame de gradul n n cos = x , coninnd numai puteri pare sau impare, dup
cum n este par sau impar, iar semnele termenilor si alterneaz:
( ) ( ) ( )
( )
( )
k n
k
n
E
k
k
k n
k
n n
x
k n
k n
C x P P
2
2
0
! 2
1 2 2 5 3 1
1 cos

|

\
|
=


= =

L
,
n care
|
|
|

\
|
2
n
E este partea ntreag a numrului
2
n
.
De remarcat c, pentru real, [ ] 1 , 1 x .
Principalele proprieti ale polinoamelor lui Legendre sunt:
pot fi exprimate prin formula Olinde-Rodrigues,
( ) ( )
n
n n
x
x n
x P 1
d
d
! 2
1
2
n
n
= ,
sau formula lui Schlafli, ca o integral pe o curb oarecare, C, nchis cu x,
un punct interior domeniului mrginit de C,
( )
( )
( )
+

=
C
n
n
n n
x i
x P

d
1
2
1
2
1
1
2
,
satisfac relaia de recuren, care permite determinarea tuturor
polinoamelor, cnd se cunosc dou dintre ele, cu indici diferind printr-o
unitate,
( ) ( ) L 3 , 2 , 1 , 0 1 2 1
1 1
= = + + +
+
n nP xP n P n
n n n
,
pentru [ ] 1 , 1 x iau valori reale n intervalul [ ] 1 , 1 ,
au toate rdcinile reale i distincte, cuprinse n intervalul deschis ( ) 1 1 ,
polinomul lui Legendre ( ) x P
n
este o soluie a ecuaiei difereniale a lui
Legendre,
( ) [ ] ( ) ( ) ( ) 0 1 ' 2 " 1 0 1 ' 1
d
d
2 2
= + = y n n xy y x y n n y x
x
,
polinoamele lui Legendre formeaz un sistem de funcii ortogonale pe
intervalul [ ] 1 , 1 ,
Funcii matematice n Matlab 195
( ) ( )

=
+

n k
n
n k
x x P x P
n k
pentru
1 2
2
pentru 0
d
1
1
,
ceea ce permite s considerm seria Fourier a unei funcii f(x), integrabil
i cu ptratul integrabil pe [ ] 1 , 1 , fa de sistemul de funcii format de
polinoamele Legendre,
( )

0 n
n n
x P a
cu coeficienii Fourier generalizai
( ) ( ) x x P x f
n
a
n n
d
2
1 2
1
1

+
=



De menionat c, polinomul lui Legendre ( ) x P
n
, este o soluie particular a
ecuaiei lui Legendre, ( ) ( ) 0 1 ' 2 " 1
2
= + y n n xy y x .

Soluia general a ecuaiei lui Legendre este
( ) ( ) ( ) ( ) x P C x K
x
x
x P C z x P y
n n n n
+
(

+
= =
1 1
1
1
ln ,
n care polinoamele ( ) x K
n 1
se determin dezvoltnd funcia
1
1
ln

+
x
x
n serie
de puteri.

Funciile ( ) ( ) ( ) x K
x
x
x P x Q
n n n 1
1
1
ln

+

+
= se numesc funciile lui
Legendre de spea a doua. Aceste funcii verific, evident, ecuaia lui Legendre i
satisfac aceleai relaii de recuren ca polinoamele lui Legendre.

Funciile lui Legendre asociate se construiesc folosind funciile lui
Legendre de prima spe i de spea a doua i sunt :
( ) ( )
( )
m
n
m m
m n
x
x P
x x P
d
d
1
2
2
,
=
,
( ) ( )
( )
m
n
m m
m n
x
x Q
x x Q
d
d
1
2
2
,
=
,
unde m i n iau valorile 0, 1, 2, 3, , iar n m .
Funciile lui Legendre asociate sunt soluii ale ecuaiei difereniale:
( ) ( ) 0
1
1 ' 2 " 1
2
2
2
=
(

+ + y
x
m
n n y x y x
i pot fi exprimate sintetic sub forma:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 196
( ) ( )
( )
m
n
m m
m
m n
x
x P
x x P
d
d
1 1 ) (
2
2
,
=
,
n care n este gradul, iar m este ordinul.

Calculul acestor funcii se face n Matlab prin instruciunea
P=legendre(n,x), care permite calculul funciilor Legendre de gradul n i ordinul
m=0, 1, , n, evaluate pentru fiecare element x. De menionat c n trebuie s fie
un scalar ntreg n < 256, iar [ ] 1 , 1 x , adic -1 <= x <= 1.
Dac x este un vector cu lungimea L, atunci polinomul P este o matrice de
dimensiune (n+1)*L. Valoarea P(m+1,i) corespunde funciilor Legendre asociate
de gradul n i ordinul m, evaluate n punctul x(i). n general, se returneaz o
matrice care are numrul de coloane egal cu lungimea vectorului x, iar numrul de
linii egal cu ordinul sau mai mare cu 1 dect gradul. Fiecare linie conine funciile
lui Legendre de gradul n i ordinul corespunznd liniei evaluate, pentru fiecare
valoare x. Prima linie (rnd) a matricei P returnate conine polinoamele lui
Legendre de ordinul m=0.
De exemplu:
legendre(2, 0.0:0.1:0.2) returneaz matricea:

| x = 0 x = 0.1 x = 0.2
------|---------------------------------------------
m = 0 | -0.5000 -0.4850 -0.4400
m = 1 | 0 -0.2985 -0.5879
m = 2 | 3.0000 2.9700 2.8800

setul de instruciuni
X = rand(2,4,5); N = 2;
P = legendre(N,X);
returneaz o matrice de 3*2*4*5 i P(:,1,2,3) este la fel ca i cel dat de
instruciunea legendre(N,X(1,2,3)).

Funcia SP=legendre(n,x,sch) calculeaz funciile Schmidt semi-
normalizate, asociate funciilor Legendre, definite prin relaia:
( )
( )
( )
( )

>
+


=
=
0 pentru
!
!
2 1
0 pentru ) (
) (
,
,
m x P
m n
m n
m x P
x SP
m n
m
n
m n

De exemplu, instruciunea,
P=legendre(2,0:0.1:0.5)
conduce la,
P =
-0.5000 -0.4850 -0.4400 -0.3650 -0.2600 -0.1250
Funcii matematice n Matlab 197
0 -0.2985 -0.5879 -0.8585 -1.0998 -1.2990
3.0000 2.9700 2.8800 2.7300 2.5200 2.2500
iar instruciunea,
P=legendre(2,0:0.1:0.5,'sch')
are ca rezultat,
P =
-0.5000 -0.4850 -0.4400 -0.3650 -0.2600 -0.1250
0 0.1723 0.3394 0.4957 0.6350 0.7500
0.8660 0.8574 0.8314 0.7881 0.7275 0.6495
de unde se observ diferena.

Pentru m=1 i n=1, ecuaia diferenial de gradul doi devine:
( ) 0
1
1
2 ' 2 " 1
2
2
=
(

+ y
x
y x y x ,
iar soluiile, pentru x=0:0.01:1 sunt calculate cu relaia P1=legendre(2,x), pentru
funciile Legendre asociate i relaia P2=legendre(2,x,'sch'), pentru funciile
Schmidt seminormalizate, asociate funciilor Legendre.
Reprezentarea grafic este redat n figura 8.6.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-1.5
-1
-0.5
0
0.5
1
x
y
P1
P2

Fig.8.6. Soluiile ecuaiiei de gradul 2 cu funcii Legendre
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 198
8.7.11. Funcii eliptice Jacobi
Polinoamele lui Jacobi sunt de forma:

( )
( ) ( )
( )( ) ( )
( ) ( ) [ ]
n n
n
n
n n
x b a x
x n
x b a x
b a
x J
+ +


+ + +

=


d
d
2 1
1
) (
L
,
unde , sunt dou numere reale mai mari dect 1.
Polinomul lui Jacobi ) (x J
n
este o soluie a ecuaiei difereniale:
( )( ) ( )( ) ( )( ) [ ] ( ) 0 1 ' 1 1 " = + + + + + + + y n n y a x b x y b x a x
Totodat, polinoamele lui Jacobi, cuprind drept cazuri particulare, alte
polinoame speciale, astfel:
pentru 1 , 1 , 0 , 0 = = = = b a se obin polinoamele lui Legendre sub
forma Olinde-Rodrigues;
dac b , 0 = = , se obine polinomul lui Laguere, pn la o constant ;
pentru
2
,
2
b
b a = = = , se obin polinoamele lui Hermite ;
pentru
2
1
, 1 , 1 = = = = b a , se obin polinoamele lui Cebev.

n Matlab, funcia [Sn,Cn,Dn] = ellipj(U,M, TOL), returneaz valorile
funciilor eliptice SN, CN i DN, evaluate pentru fiecare element al argumentului U
i parametrului M, cu tolerana TOL. Vectorii U i M trebuie s aib aceeai
dimensiune sau unul s fie scalar, iar M are limitele 0 <= M <= 1. Tolerana poate
lipsi, fiind considerat implicit ca EPS.

Calculul integralei eliptice complete de spea nti, K, i a doua, E, pentru
fiecare element M, cuprins n intervalul 0 <= M <= 1, se face cu instruciunea
[K,E] = ellipke(M, TOL), n care tolerana Tol poate s lipseasc, fiind atunci EPS.

8.7.12. Funcia de repartiie Laplace
Funcia densitii de probabilitate a repartiiei normale este definit de relaia
( )
2
2
2
1
z
e z f


care, n Matlab, se calculeaz cu secvena,
f=1./sqrt(2*pi)*exp(-z.^2/2),
unde z poate fi vector sau scalar.
Dac [ ] 10 10 z , ( ) z f reprezint densitatea de probabilitate cu repartiie
normal normat din figura 8.7, pentru care s-a utilizat secvena de instruciuni:
Funcii matematice n Matlab 199
z=-10:0.1:10; f=1./sqrt(2*pi)*exp(-z.^2/2);
plot(z,f); grid on; xlabel('z'); ylabel('f(z)').
Calculul funciei de repartiie Laplace,
( ) ( )


= = dt
t
e dz z f z f
2
2
1


folosete secvena,
F=trapz(z,1./(sqrt(2*pi))*exp(-z.^2/2))
care, pentru valorile anterioare, rezult F=1. Limita de integrare, , se poate lua
un numr ntre -5 i -10, fr ca, prin aceasta, s se induc erori semnificative.

Fig. 8.7. Densitatea de probabilitate cu repartiie normal normat
8.8. Transformri de coordonate
Dac n unele probleme de teoria cmpurilor (termice, electrice, magnetice,
barice) se utilizeaz un sistem de coordonate, nu ntotdeauna sistemul cartezian
este cel mai potrivit. De aceea, este necesar s studiem problema reprezentrii
funciilor scalare i a funciilor vectoriale, precum i a unor mrimi derivate, n
coordonate oarecare. Mai mult, este necesar s putem transforma un sistem de
coordonate n alt sistem de coordonate.
Fie x, y, z coordonatele carteziene ortogonale ale unui punct arbitrar P (vezi
figura 8.8).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 200
Poziia unui punct ( )
0 0 0 0
, , z y x P poate fi obinut ca intersecia planelor
0
x x = ,
0
y y = ,
0
z z = . Aceste plane se intersecteaz, dou cte dou, dup
dreptele
0 0
, z z y y = = ;
0 0
, x x z z = = ;
0 0
, y y x x = = ,
paralele cu axele de coordonate. Fiecrui punct
0
P din spaiu, i este ataat un
triedru k j i
r r r
, , , care este acelai pentru toate punctele din spaiu.

Fig. 8.8.

n coordonate cilindrice, poziia unui punct P este caracterizat prin
z , , , unde este distana de la origine la proiecia ' P a punctului P, pe planul
xOy , este unghiul format de ' OP cu axa Ox , iar z cota lui P fa de planul
xOy .
Punctul ( )
0 0 0 0
, , z P este intersecia urmtoarelor suprafee: cilindru
0
= , semiplanul
0
= i planul
0
z z = (vezi figura 8.9).
Interseciile acestor suprafee, luate cte dou, sunt: semidreapta

C , pe care
variaz numai , cercul

C , pe care variaz numai i dreapta


z
C , pe care
variaz numai z.
Notm cu
z
u u u
r r r
, ,

vectorii unitari tangeni la aceste curbe, n
0
P i dirijai
n sensul cresctor al variabilelor respective. Aceti vectori sunt determinai n
toate punctele din spaiu, cu excepia axei Oz , n care

u u
r r
, au direcii
Funcii matematice n Matlab 201
nedeterminate.
Fiind ortogonali, doi cte doi,
z
u u u
r r r
, ,

formeaz un triedru nedegenerat,
de referin pentru orice punct, variabil cu punctul n care este considerat.

Fig. 8.9.
ntre coordonatele cilindrice i coordonatele carteziene avem relaiile:

=
=
=
z z
y
x


sin
cos

cu 2 0 , 0 < .
Funcia Matlab care realizeaz aceast transformare, din coordonate
cilindrice n coordonate carteziene, este pol2cart. Aceasta poate fi apelat prin:
[X,Y,Z] = pol2cart(TH,R,Z)
n care TH este unghiul , R este raza , iar Z este nlimea z, iar X, Y, Z sunt
coordonatele carteziene. Matricele TH, R i Z trebuie s aib aceeai dimensiune
(sau oricare s fie scalar);TH este dat n radiani.
De exemplu, dac coordonatele punctului sunt TH=pi/6, R=2 i Z=3, atunci:
[X,Y,Z] = pol2cart(TH,R,Z),
conduce la X = 1.7321, Y = 1.0000, Z = 3.

Pentru plan, transformarea coordonatelor polare n carteziene se face cu
instruciunea [X,Y] = pol2cart(TH,R), din care lipsete Z. Coordonata Z nu sufer
nici o transformare la trecerea dintr-un sistem de coordonate n altul.

Transformarea invers, din coordonate carteziene n coordonate polare se
face dup relaiile:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 202

=
|

\
|
=
+ =
z z
x
y
y x
arctan
2 2


cu < |

\
|

x
y
arctan - , 0 .
Funcia Matlab care realizeaz aceast transformare este cart2pol, care
poate fi apelat prin instruciunea:
[TH,R,Z] = cart2pol(X,Y,Z)
sau
[TH,R] = cart2pol(X,Y),
n care X, Y, Z sunt coordonatele carteziene, iar TH este unghiul , R este raza
, Z este nlimea z. Matricele X, Y i Z trebuie s aib aceeai dimensiune (sau
oricare s fie scalar), iar TH este returnat n radiani.
De exemplu, dac X = 1.7321, Y = 1.0000, Z = 3, atunci prin
instruciunea [TH,R,Z] = cart2pol(X,Y,Z), rezult TH = 0.5236 =pi/6, R = 2.0000,
Z = 3.
n coordonate sferice, un punct P, este dat prin: OP r = , unghiul format
de OP cu axa Oz i unghiul , pe care l face proiecia ' OP a lui OP , pe planul
xOy , cu axa Ox (vezi figura 8.10).
n acest caz, curbele pe care variaz numai unul dintre parametri sunt
urmtoarele: semidreapta
r
C ce pornete din origine, semicercul meridian

C i
cercul

C .
Sensul cresctor al parametrilor pe aceste curbe va fi indicat, respectiv, prin
vectorii unitari

u u u
r
r r r
, , tangeni curbelor n punctul considerat.
Aceti vectori sunt determinai n toate punctele care nu aparin axei Oz i
sunt ortogonali, doi cte doi.
Triedrul

u u u
r
r r r
, , poate fi considerat triedru de referin i depinde de
punct.
ntre coordonatele sferice i coordonatele carteziene avem relaiile:

=
=
=



cos
sin sin
cos sin
r z
r y
r x

cu 2 0 , 0 , 0 < < r .
Funcia Matlab care realizeaz aceast transformare, din coordonate sferice
Funcii matematice n Matlab 203
n coordonate carteziene este sph2cart, apelat cu,
[X,Y,Z] = sph2cart(TH,PHI,R),
n care TH este unghiul , respectiv azimutul, PSI este unghiul , respectiv
elevaia, R este raza r , iar X, Y, Z sunt coordonatele carteziene. Matricele TH,
PHI i R trebuie s aib aceeai dimensiune (sau oricare s fie scalar), iar TH i PSI
sunt dai n radiani.

Fig. 8.10.

De exemplu, dac TH=pi/6, PHI= pi/4, R=2, atunci prin [X,Y,Z] =
sph2cart(TH,PHI,R), se obine X= 1.2247, Y = 0.7071, Z = 1.4142.

Transformarea invers, din coordonate carteziene n coordonate sferice, se
realizeaz cu relaiile:

|
|

\
|
+
=
|

\
|
=
+ + =
2 2
2 2 2
arctan
arctan
y x
z
x
y
z y x r


cu 2 0 , 0 , 0 < < r .

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 204
Funcia Matlab care realizeaz transformarea coordonatelor carteziene, n
coordonate sferice, este cart2sph, apelat sub forma,
[TH,PHI,R] = cart2sph(X,Y,Z),
n care X, Y, Z sunt coordonatele carteziene, TH este unghiul , respectiv
azimutul, PSI este unghiul , respectiv elevaia, R este raza r . Matricele X, Y, Z
trebuie s aib aceeai dimensiune (sau oricare s fie scalar), iar TH i PSI sunt
returnai n radiani.
De exemplu, dac X= 1.2247, Y = 0.7071, Z = 1.4142, atunci prin
[TH,PHI,R] = cart2sph(X,Y,Z) se obine TH = 0.5236 = pi/6, PHI = 0.7854 = pi/4,
R = 2.0000.

8.9. Calculul produsului unor vectori
Produsul scalar al vectorilor a i b este numrul obinut nmulind produsul
modulelor lor cu cosinusul unghiului format de cei doi vectori (vezi figura 8.11),
cos = b a b a .
Cel mai tipic exemplu de produs scalar a doi vectori este lucrul mecanic
produs de o for constant b F = , cnd punctul su de aplicaie se deplaseaz de
la O la A. Dac se descompune F dup direcia OA i perpendiculara pe aceast
direcie, componenta normal d un lucru mecanic nul. ntreg lucrul mecanic al
forei F este dat de componenta dup direcia OA, component ce are expresia,
cos cos = b F . Lucrul mecanic va fi produsul dintre aceast component i
deplasarea a=OA. Dac
2

< , lucrul mecanic este activ i se exprim printr-un


numr strict pozitiv, iar dac
2

> , lucrul mecanic este rezistent i se exprim


printr-un numr negativ.
Principalele proprieti ale produsului scalar sunt:
a b b a = - este comutativ;
( ) ( ) b a b a = , n care este un scalar oarecare;
( ) c b c a c b a + = + - este distributiv fa de adunare;
0
2
= a a a , egalitatea avnd loc numai dac a=0;
b a b a - modulul unui produs scalar este mai mic sau egal cu produsul
modulelor;
dac produsul scalar a doi vectori este nul, atunci vectorii nenuli sunt
perpendiculari.

Considerm vectorii a i b , figura 8.11, exprimai ntr-un sistem de
Funcii matematice n Matlab 205
coordonate carteziene, avnd ca baz vectorii i , j , k , unitari i ortogonali, adic:
0 , 1 = = = = = = i k k j j i k k j j i i .

Fig. 8.11.
innd seama de cele de mai sus, vectorii a i b vor avea expresiile:
,
3 2 1 3 2 1
k b j b i b b k a j a i a a + + = + + = .
nmulind scalar aceste sume i innd seama de cele anterioare, se obine:

3 3 2 2 1 1
b a b a b a b a + + = .
Pentru a b = , avem :

2
3
2
2
2
1
2
3
2
2
2
1
2
a a a a a a a a a a + + = + + = = .
Expresia care d unghiul a doi vectori este:
2
3
2
2
2
1
2
3
2
2
2
1
3 3 2 2 1 1
cos
b b b a a a
b a b a b a
+ + + +
+ +
=

Calculul produsului scalar a doi vectori A i B, care trebuie s aib aceeai
lungime, se face cu instruciunea C = dot(A,B,DIM) sau C = dot(A,B), n care
lipsete dimensiunea DIM. Dac DIM=size(A), n vectorul C se ntoarce produsul
element cu element dintre A i B; dac DIM =1, n vectorul C se ntoarce suma
produsului element cu element de pe fiecare coloan, iar dac DIM =2, se ntorce
suma produsului element cu element de pe fiecare linie.
Dac A i B sunt vectori coloan, atunci dot(A,B) este acelai lucru ca i
sum(A.*B).
De exemplu, dac:
A = [ 1 2 3 B = [ 7 8 9
4 5 6] 10 11 12 ]
atunci, C=dot(A,B,3), este:
(

=
(

=
12 * 6 11 * 5 10 * 4
9 * 3 8 * 2 7 * 1
C
72 55 40
27 16 7
C
C=dot(A,B,1) este,
[ ] [ ] 72 27 55 16 40 7 C 99 71 47 C + + + = = ,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 206
iar C=dot(A,B,2) este:
(

+ +
+ +
=
(

=
72 55 40
27 16 7
C
167
50
C .
Dac A este de dimensiunea 1 x N, iar B de dimensiunea N x 1, atunci
produsul scalar poate fi calculat i prin relaia sum(A.*B) sau sum(A.*B).
Considernd vectorii,
2 2 1 , 0 4 3 k j i b k j i a + = + = ,
atunci produsul scalar este
ab=dot(a,b)=sum(a.*b)=-5,
iar unghiul dintre aceti vectori este,
alfa=acos(ab/(norm(a)*norm(b)))*180/pi = 109.4712 grade
i n care,
norm(a)= sqrt(sum(a.^2)); norm(b)= sqrt(sum(b.^2)).

Considernd vectorii a i b ntr-un sistem cartezian, avnd expresiile
anterioare, produsul vectorial al acestora este un vector c , perpendicular pe planul
format de cei doi vectori, avnd expresia:
( ) ( ) ( ) k b a b a j b a b a i b a b a
b b b
a a a
k j i
b a c + + = = =
1 2 3 1 3 1 1 3 2 3 3 2
3 2 1
3 2 1
.
Se observ c acest determinant se dezvolt ntotdeauna dup prima linie i
nu are proprietile determinanilor obinuii.
n Matlab, produsul vectorial este dat de funcia cross(a,b).
Sensul vectorului c este determinat de sensul trigonometric de aducere a
vectorului a spre vectorul b , sau, n general, de parcurgere a curbei nchise
generat de cei doi vectori.
Modulul produsului vectorial este egal cu aria paralelogramului determinat
de cei doi vectori, (vezi i figura 8.12), sau n general cu aria suprafeei delimitate:
sin = = b a b a c
Utilitatea produsului vectorial rezid n aceea c determin debitul de fluid
ce trece printr-o suprafa, delimitat de vectorii a i b , n unitatea de timp.
Produsul vectorial are urmtoarele proprieti:
a b b a = - este anticomutativ;
( ) ( ) b a b a = , n care este un scalar oarecare;
( ) c b c a c b a + = + - este distributiv fa de adunare;
produsul vectorial a doi vectori colineari este nul, deoarece 0 sin = ;
Funcii matematice n Matlab 207
b a b a - modulul unui produs scalar este mai mic sau egal cu
produsul modulelor.

Fig. 8.12.

Produsul ncruciat, dintre vectorii A i B, se calculeaz cu instruciunea
C=cross(A,B), dar vectorii A i B trebuie s aib cel puin 3 elemente, n direcia
produsului ncruciat.

Dac A=[1 2 3; 4 5 6; 7 8 9], B=[10 11 12; 13 14 15; 16 17 18], atunci
C=cross(A,B) conduce la C= [-27 -27 -27; 54 54 54; -27 -27 -27].

Considernd vectorii,
2 1 1 , 1 3 5 k j i b k j i a = = ,
atunci produsul vectorial este
c=cross(a,b)=[ 5 11 -8],
iar unghiul dintre aceti vectori este
alfa=asin(c/(norm(a)*norm(b)))*180/pi = [20.1838 49.3825 -33.5079] grade.


9. ANALIZA DATELOR I TRANSFORMATA
FOURIER
9.1. Operatori de baz
9.1.1. Maximul i minimul
Determinarea elementului maxim dintr-un vector se face cu funcia max,
apelat cu una dintre sintaxele:
C = max(A) - restituie cel mai mare element dintre diferitele dimensiuni ale
unui sir; dac A este un vector, atunci max(A) restituie cel mai mare
element din A, iar dac A este matrice, max(A) consider coloanele matricei
A ca fiind vectori, returnnd un vector linie ce conine elementul maxim de
pe fiecare coloan;
C = max(A, B) - restituie un ir de aceeai dimensiune ca A i B, cu elementele
cele mai mari luate din A i B;
C = max(A, [], dim) - restituie cel mai mare element din A, precizat de
dimensiunea scalar, dim, ca de exemplu, max(A, [], 1) prezint valoarea
maxim din prima linie a lui A;
[C , I] = max (A) - gsete indicii valorilor maxime ale lui A i le restituie n
vectorul de ieire I.

Funcia max ignor elementele NaN.
Pentru Z numr complex, funcia max restituie numrul complex cu cel mai
mare modul, calculat cu max (abs(Z)).

Determinarea elementului minim dintr-un vector se face cu funcia min,
apelat cu una dintre sintaxele:
C = min(A) - restituie cel mai mic element dintre diferitele dimensiuni ale
unui ir; dac A este un vector, atunci min(A) restituie cel mai mic element
din A, iar dac A este matrice, min(A) consider coloanele matricei A ca
fiind vectori, returnnd un vectorul linie ce conine elementul minim de pe
fiecare coloan;
C = min(A, B) - restituie un ir de aceeai dimensiune ca A i B, cu elementele
cele mai mici luate din A i B;
C = min(A, [], dim) - restituie cel mai mic element din A, precizat de
dimensiunea scalar, dim, ca de exemplu, max(A, [], 1) prezint valoarea
minim din prima linie a lui A;
[C , I] = min (A) - gsete indicii valorilor minime ale lui A i le restituie n
vectorul de iesire I.

Analiza datelor i transformata Fourier 209
Funcia min ignor elementele NaN.
Pentru Z numr complex, funcia min restituie numrul complex cu cel mai mic
modul, calculat cu min (abs(Z)).

Dac considerm A=[2 8 7; 7 4 3; 1 8 9] i B=[1 2 5; 6 7 3; 4 2 3], atunci:
C=max(A) returneaz C=[7 8 9],
C=min(A) returneaz C=[ 1 4 3],
C=max(A,B) returneaz C=[2 8 7; 7 7 3; 4 8 9],
C=min(A,B) returneaz C=[ 1 2 5; 6 4 3; 1 2 3],
C=max(A, [], 2) returneaz C=[8; 7; 9],
C=min(A, [], 2) returneaz C= [2; 3; 1],
[C,I]=max(A) returneaz C=[7 8 9] i I=[2 1 3],
[C,I]=min(A) returneaz C=[1 4 3] i I=[3 2 2],
[C,I]=max(B) returneaz C=[6 7 5] i I=[2 2 1];
[C,I]=min(B) returneaz C=[1 2 3] i I=[1 1 2].

Dac Z=[2+i 3-i 2+5i -4-2i], atunci,
max(Z) este 2+5i, ceea ce corespunde numrului cu cel mai mare modul,
calculat cu max(abs(Z), deoarece:
abs(Z)=[ 2.2361 3.1623 5.3852 4.4721]
iar,
min(Z) este 2+i, ceea ce corespunde numrului cu cel mai mic modul, calculat
cu abs(min(Z)).
9.1.2. Media i mediana
Media aritmetic, m, a unui ir de date
N
x x x ,..., ,
2 1
este dat de relaia:
N
x x x
N
x
m
N
N
k
k
+ + +
= =

=
...
2 1 1
,
iar n Matlab se calculeaz apelnd funcia mean.
Funcia mean se poate apela cu una dintre sintaxele:
m=mean(A) ce restituie valoarea medie dintre elementele diferitelor
dimensiuni ale irului A; dac A este vector, mean(A) restituie valoarea
medie a lui A, iar dac A este matrice, mean (A) consider coloanele lui A
ca vectori, restituind vectorul coloan ce conine elementul mediu;
m = mean (A, dim) restituie valoarea medie din elementele lui A, precizat de
dimensiunea scalar, dim.

Dac A = [1 2 4 4; 3 4 6 6; 5 6 8 8; 5 6 8 8], atunci:
mean(A)=[3.5 4.5 6.5 6.5],
mean(A,2) =[2.75 4.75 6.75 6.75].

Mediana, med, unui ir de date este elementul de la mijlocul acestui ir ordonat
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 210
cresctor. Dac irul are un numr N impar de valori, atunci valoarea median este
elementul din poziia (N+1)/2, iar dac irul are un numr N par de valori, atunci
valoarea median este media elementelor din poziiile (N/2) i (N/2+1), adic:

=
|

\
| +
+ |

\
|
+ = |

\
| +
=
natural. numar , 2 par, dac ,
2
2
1
2
natural numar 1, 2 impar, dac ,
2
1
k k N N
N
x
N
x
k k N N
N
x
med
Funcia care calculeaz valoarea median a unui ir de date este median i se
poate apela cu una dintre sintaxele:
med=median(A) ce restituie valoarea median din elementele de diferite
dimensiuni ale irului; dac A este vector, median(A) restituie valoarea
median a lui A, iar dac A este matrice, median (A) consider coloanele lui
A ca vectori, restituind un vector linie de valoare median;
med=median(A,dim) restituie valorile mediane ale lui A, precizate de
dimensiunea scalar dim.

De exemplu, dac A = [1 2 4 4; 3 4 6 6; 5 6 8 8; 5 6 8 8] atunci:
median(A) = [ 4 5 7 7],
median(A,2) = [ 3; 5; 7; 7].
9.1.3. Sortarea elementelor unui vector sau matrice
Sortarea elementelor unui vector sau matrice n ordine cresctoare se face n
Matlab, apelnd funcia sort, cu una dintre sintaxele:
B=sort(A) - sorteaz elementele de diferite dimensiuni ale irului A i
aranjeaz aceste elemente n ordine cresctoare, dac A este vector, iar dac
A este o matrice, sorteaz fiecare coloan a lui A n ordine cresctoare cu
observaia c, dac elementele sunt numere complexe, acestea se sorteaz n
ordinea cresctoare a modulului, abs(A), iar pentru module egale n ordinea
cresctoare a unghiului de faz, angle(A) pe intervalul [-,];
B=sort(A, dim) sorteaz elementele din A precizate de dimensiunea scalar
dim, iar dac dim este un vector, sortarea lucreaz iterativ pe dimensiunile
specificate, astfel c sort(A,[1 2] ) este echivalent cu (sort (A, 2), 1);
[B,IX] = sort (A , ) restituie i un sir de indici IX, cu size (IX) = size (A),
iar B = A(IX), dac A este un vector, ns dac A este o matrice m x n,
atunci fiecare coloan a lui A este un vector permutare a respectivei coloane
a lui A, respectiv dat de setul de instruciuni:
for j = 1:n; B(:,j) = A(IX(:,j),j); end

De exemplu sortarea unei matrice A = [ 3 7 5; 0 4 2 ] pe cele dou dimensiuni i
apoi a treia oar, se returneaz i un ir de indici pentru rezultatul sortat, se face cu
secvenele:
Analiza datelor i transformata Fourier 211
sort(A,1) = [ 0 4 2; 3 7 5];
sort(A,2) = [ 3 5 7; 0 2 4];
[B,IX] = sort(A,2), conduce la
B = [ 3 5 7; 0 2 4]; IX = [ 1 3 2; 1 3 2].

Sortarea liniilor unei matrice sau vector coloan n ordine cresctoare se face cu
sortrows, apelat cu una dintre sintaxele:
B = sortrows (A) sorteaz liniile lui A ca pe un grup n ordine cresctoare,
iar dac elementele lui A sunt numere complexe, acestea se sorteaz n
ordinea cresctoare a modulului, abs(A), iar pentru module egale n ordinea
cresctoare a unghiului de faz, angle(A) pe intervalul [-,];
B = sortrows (A, col) sorteaz matricea pe baza coloanelor specificate n
vectorul coloan, col, spre exemplu, sortrows (A, [2 3] ) sorteaz coloanele
lui A prin a doua coloan, i unde acestea sunt egale, sorteaz mai departe la
a treia coloan;
[B,index] = sortrows(A) returneaz i un ir de indici, astfel c dac A este
un vector coloan B=A(index), iar dac A este o matrice de m x n, atunci B=
A(index,:).

Fiind dat o matrice de 5 pe 5, A = ['one ';'two ';'three';'four ';'five '], prin
comanda B = sortrows(A) i C = sortrows(A,1) se obine:
B = [ five ; four ; one ; three ; two ], C=[ four ; five ;one ; two ; three ].
9.1.4. Sume i produse
Suma, S, a elementelor unui vector X este dat de relaia matematic

=
=
N
i
i
X S
1
i se calculeaz n Matlab cu funcia sum, care se poate apela cu una dintre
sintaxele:
B = sum (A) restituie suma elementelor unui ir, dac A este vector sau,
dac A este o matrice, un vector linie ce conine suma elementelor matricei
de pe fiecare coloan;
B = sum(A,dim) calculeaz suma coloanei lui A indicat de scalarul dim;
sum(diag(X)) este urma matricei X.

Ptratul magic de ordinul n este dat de funcia Matlab magic(n) i are egal
suma elementelor de pe fiecare linie, coloan i diagonal. Pentru verificare, se
consider M=magic(5), care prin sum(M) calculeaz suma coloanelor, prin sum(M')
calculeaz suma liniilor, cu sum(diag(M)), suma diagonalei principle, iar cu
sum(diag(M')), suma celeilalte diagonale, rezultnd valoarea fiecreia de 65.

Suma cumulat, S
j
, a unui vector X este dat de relaia matematic
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 212
N j X S
j
k
k j
,..., 2 , 1 ,
1
= =

=
, i se calculeaz n Matlab cu funcia cumsum, apelat cu
una dintre sintaxele:
B=cumsum(A) returneaz, dac A este un vector, un vector B ce conine
sume cumulative ale elementelor vectorului A, iar dac A este o matrice, se
returneaz o matrice B de aceeai marime cu A, coninnd sume cumulative
pentru fiecare coloan a lui A;
B=cumsum(A,dim) returneaz sume cumulative ale elementelor pentru
dimensiunea, dim, specificat.

De exemplu, pentru A= [1 2 3; 4 5 6], cumsum(A,1)=[1 2 3; 5 7 9],
cumsum(A,2)=[1 3 6; 4 9 15], cumsum(A)=[1 2 3; 5 7 9], iar cumsum(A,3)=A.

Produsul, P, a elementelor unui vector X este dat de relaia matematic

=
=
N
i
i
X P
1
i se calculeaz n Matlab cu funcia prod, care se poate apela:
B = prod(A) restituie produsul elementelor unui ir, dac A este vector sau,
dac A este o matrice, un vector linie ce conine produsul elementelor
matricei de pe fiecare coloan;
B = prod(A,dim) consider produsul dintre elementele lui A precizate de
dimensiunea scalar, dim.

De exemplu, produsul de pe fiecare coloan a ptratului magic de ordinul 3,
M=magic(3)=[ 8 1 6; 3 5 7; 4 9 2], este un vector B= prod(M)=[ 96 45 84 ], iar
produsul elementelor din fiecare coloan se obine cu prod(M,2) = [ 48; 105; 72].

Produsul cumulat, P
j
, a unui vector X este dat de relaia matematic
N j X P
j
k
k j
,..., 2 , 1 ,
1
= =

=
, i se calculeaz n Matlab cu funcia cumprod, apelat cu
una dintre sintaxele:
B=cumprod(A) returneaz, dac A este un vector, un vector B ce conine
produse cumulative ale elementelor vectorului A., iar dac A este o matrice,
se returneaz o matrice B de aceeai mrime cu A coninnd produse
cumulative pentru fiecare coloan a lui A;
B=cumprod(A,dim) returneaz produse cumulative ale elementelor pentru
dimensiunea, dim, specificat.

De exemplu, pentru A= [1 2 3; 4 5 6], cumprod(A,1)=[1 2 3; 4 10 18],
cumsum(A,2)=[1 2 6; 4 20 120], cumsum(A)=[1 2 3; 5 7 9], iar cumprod(A,3)=A.

Analiza datelor i transformata Fourier 213
9.1.5. Eliminarea valorilor nedefinite sau a datelor eronate
Din operaii matematice nedefinite, precum
0
0
sau

, conform conveniilor
IEEE pentru calculul n virgul mobil, apare variabila special Matlab denumit NaN
(Not-a-Number), iar din operaii de mprire de forma
0
1
sau depirea celui mai mare
numr posibil de reprezentat, din operaii de ridicri la putere sau exponent, apare
variabila Inf (Infinity). Operaiile ce includ un operator NaN returneaz operatorul
NaN, iar cele care includ numai operatorul Inf returneaz operatorul inf. Alteori, poate
fi necesar eliminarea unor valori ce depesc anumite limite i n mod deosebit
eliminarea unor date statistice msurate sau observate care nu se nscriu n plaja de
erori.
Pentru calcule viitoare, atunci cnd este posibil, este necesar eliminarea acestor
valori dintr-un set de valori, de regul un vector.
O etap important n acest proces o constituie identificarea poziiilor ocupate de
aceste valori n cadrul unui vector X. Indicii ecestor elemente sunt gsii cu
instruciunea find, iar eliminarea din acest vector i crearea unui alt vector se face prin
utilizarea unor operatori logici, de regula de negare.
De exemplu:
I=find(isnan(X), identific poziiile ocupate de valorile NaN;
I=find(isinf(X), identific poziiile ocupate de valorile Inf;
I=find(X>X0), reine numai valorile mai mari dect X0.
X=X(~isnan(X)), elimin valorile NaN,
X=X(~isinf(X)), elimin valorile inf.

Pentru eliminarea tuturor liniilor ce conin o valoare nedefinit, dintr-o matrice
X=[4 7 8; 4 NaN inf; 2 0/0 14; 6 3 9] se utilizeaz secvena
Y=X(find(~any(isnan(X)')),:), rezultnd Y=[4 7 8; 6 3 9].
Eliminarea datelor eronate ce nu ndeplinesc o condiie impus se face n mod
asemntor.
De exemplu, eliminarea coloanelor unei matrice ce conin cel puin un element
care se abate de la valoarea medie cu mai mult de trei ori abaterea standard (legea
statistic trei sigma).
Dac X=[7 8 900; 1 5 9;7 1 2], secventa Matlab ce realizeaz dezideratul de mai
sus este:
med=mean(X); sigma=std(X);
[n,m]=size(X); e=ones(n,1);dist=abs(X-e*med);
mc=dist<3*e*sigma;
YY=X(:,find(all(mcond))); cel=m-length(find(all(mc))),
i cul cel este zero, toate valorile sunt bune.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 214
9.2. Caracterizarea datelor aleatoare
9.2.1. Variabil aleatoare. Valoare medie. Deviaie standard.
Varian.
n practic apar nenumrate experiene concrete, crora se poate ataa un sistem
de evenimente. Se numete sistem de evenimente o mulime de evenimente care pot
aprea dintr-o anumit experien. Un sistem de evenimente poate fi mulimea tuturor
evenimentelor care corespund unei experiene date sau numai o parte oarecare a sa.
Totodat, un sistem de evenimente poate fi finit sau infinit, dup cum conine un numr
finit sau infinit de evenimente. Un cmp de evenimente este o mulime ce conine
elementul sigur sau total, contrarul unui eveniment oarecare, elementul imposibil i
reuniunea unor evenimente.
Dup definiia clasic, probabilitatea este raportul dintre numrul cazurilor
favorabile i numrul cazurilor posibile, n ipoteza c toate cazurile sunt egal
favorabile. Astfel, probabilitatea ca la o aruncare cu zarul s apar faa 5 este 1/6.
Frecvena ca s apar una dintre feele cu un numr par de puncte este 3/6=1/2.
Aceast definiie clasic a probabilitii este insuficient, deoarece, chiar pentru
cmpuri finite de evenimente, nu ntotdeauna se poate vorbi de cazuri egal posibile.
Astfel dac zarul nu este complet simetric, fie din punct de vedere geometric, fie n
privinta repartiiei masei, nu mai putem presupune c apariia oricrei fee este egal
posibil. Frecvena este numrul de evenimente favorabile dintr-un ir de evenimente,
iar frecvena relativ este raportul cazurilor favorabile i cazurilor totale. De exemplu,
lund la ntmplare 100 piese, se constat c 93 corespund standardului, iar 7 nu, sunt
rebuturi. Frecvena absolut este 93, iar frecvena relativ 0.93. Repetnd operaia,
obinem alte frecvene, de exemplu 0.97, 0.98, 0.95, 0.94 etc. Cu ct vom repeta
aceast operaie de un numr mai mare de ori, cu att vom putea aprecia mai bine c
frecvenele sunt grupate n jurul unui numr, de exemplu 0.95. Acest numr se numete
probabilitatea ca, lund o pies la ntmplare, acea pies s fie reuit.
Se numete variabil aleatoare (ntmpltoare sau statistic) o funcie X definit
pe un sistem complet de evenimente. La aruncarea unui zar poate aprea una dintre
cele ase fee. Dac notm cu (1) evenimentul apariiei feei cu un punct, cu (2) apariia
feei cu dou puncte etc, atunci sistemul {(1), (2), (3), (4), (5), (6)} este un sistem
complet de evenimente. Probabilitile celor ase evenimente sunt toate egale cu 1/6.
Pe acest sistem de evenimente definim o variabil aleatoare X cu valorile
6 5 4 3 2 1
, , , , , x x x x x x . Probabilitatea cu care variabila x
k
ia fiecare valoare, la apariia
unui eveniment, este 1/6.
Ansamblul format din valorile variabilei aleatoare X i probabilitile
elementelor corespunztoare se numete distribuia variabilei X i se noteaz
|
|

\
|
n
n
p p p
x x x
X
,..., ,
,..., ,
2 1
2 1
, care n exemplu anterior devine:
|
|

\
|
6
1
6
1
6
1
6
1
6
1
6
1
6 5 4 3 2 1
X .
Analiza datelor i transformata Fourier 215
Se numete valoare medie (sau speran matematic) a unei variabile aleatoare X
numrul:

=
=
=
=

=
+ + +
+ + +
= =
n
k
k k
n
k
k
n
k
k k
n
n n
x p
p
x p
p p p
x p x p x p
x X M
1
1
1
2 1
2 2 1 1
...
...
) (
deoarece

=
=
n
k
k
p
1
1. Se observ c valoarea medie a variabilei X este media
ponderat a valorilor sale, cu ponderile
n
p p p + + + ...
2 1
. Contribuia unei valori x
k

n determinarea valorii medii x este cu att mai mare, cu ct probabilitatea p
k
este
mai mare.
Valoarea medie x a variabilei X este cuprins ntre cea mai mic i cea mai mare
valoare pe care le ia X.

Valoarea medie de ordinul k a variabilei X se noteaz cu
k
M i este:
( ) [ ] ( )
k
k
n n
k k
k
k
k
x p x p x p X M M
1
2 2 1 1
1
... + + + = = .
Valoarea medie de ordinul al doilea, pentru k=2,
2 2
2 2
2
1 1 2
...
n n
x p x p x p M + + + = se numete i valoarea medie ptratic a
variabilei X.
Valoarea medie de ordinul 1 (k=1) este chiar valoarea medie ) (
1
X M M = .
Valoarea medie de ordinul k = -1 este media armonic,
1
2
2
1
1
1
...

|
|

\
|
+ + + =
n
n
x
p
x
p
x
p
M , care pentru
n
p p p
n
1
...
2 1
= = = = , devine:
n
x x x M
N 1
...
1 1
2 1 1
+ + + =

.
Pentru k = 0 se obine media geometric,
n
p
n
p p
x x x M = ...
2 1
2 1 0
, care pentru
n
p p p
n
1
...
2 1
= = = = , se reduce la:
n
n
x x x M = ...
2 1 0
.

Se numete abatere a variabilei X, variabila aleatoare x X U = , care ia valorile
x x u
k K
= , adic:
x x u
p p p
u u u
U
k k
n
n
=
|
|

\
|
,
,..., ,
,..., ,
2 1
2 1
. Valoarea medie a abaterii, M(U), este nul.
Prin urmare, M(U) nu ne poate da nici o indicaie asupra mprtierii valorilor x
k

ale variabilei X. Pentru a stabilii un indicator al mprtierii sau dispersiei acestor valori
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 216
se poate considera variabila U , care se numete abatere absolut a variabilei X,
avnd distribuia
|
|

\
|
n
n
p p p
u u u
U
,..., ,
,..., ,
2 1
2 1
.

Momentul de ordinul k al variabilei X se noteaz cu ( )
k
X M i este:
( ) ntreg. , ...
2 2 1 1
k x p x p x p X M
k
n n
k k k
+ + + =
Se numete moment centrat de ordinul k al variabilei aleatoare U momentul de
ordinul k al abaterii sale x X U = , adic ( )

=
=
n
i
k
i i
k
x p U M
1
. n practica prelucrii
statistice a datelor prezint interes mai ales momentele centrate de primele patru ordine
i n special momentul de ordinul doi.
Momentul centrat de ordinul doi al variabilei X se noteaz cu D(X),
2 2
sau ), ( X D i se numete dispersia sau variana variabilei aleatoare X,

=
= = =
n
i
i i
u p X D
1
2 2 2
) ( .
Rdcina ptrat a dispersiei,
2 2
2 2
2
1 1
...
n n
u p u p u p + + + = = ,
se numte abaterea medie ptratic sau deviaia standard a variabilei X.
Dispersia (variana) i abaterea medie ptratic (deviaia standard) sunt
indicatorii cei mai utilizai pentru a caracteriza mprtierea valorilor unei variabile
aleatoare. Acestea dau o indicaie asupra gradului de concentrare a valorilor unei
variabile aleatoare X n jurul valorii medii.
Principalele proprieti i consecine ale definiiilor anterioare sunt:
dac X i Y sunt dou variabile aleatoare independente, atunci
( ) ) ( ) ( Y D X D Y X D + = + ;
pentru orice variabil aleatoare X i orice constant k, ( ) ) (
2
X D k X k D = ;
dac variabilele aleatoare
n
X X X ,..., ,
2 1
sunt independente i
n
,..., ,
2 1

sunt constante, atunci
( ) ) ( ... ) ( ) ( ...
2
2
2
2 1
2
1 2 2 1 1 n n n n
X D X D X D X X X D + + + = + + + ;
valoarea medie ptratic a unei variabile aleatoare X este mai mare dect
modulul valorii sale medii, deoarece ( ) 0 X D , rezult
( ) ( ) x X M x X M
2
2
2
, care se mai poate scrie i

n n n n
x p x p x p x p x p x p + + + + + + ... ...
21 2 1 1
2 2
2 2
2
1 1
;
dac
2
este dispersia variabilei aleatoare X, probabilitatea ca modulul
abaterii s ia valori mai mari dect un numr 0 > L este mai mic dect
Analiza datelor i transformata Fourier 217
2
2
L

, respectiv ( )
2
2
L
L x X P

(inegalitatea lui Cebev).

Funcia ce calculeaz, n Matlab, deviaia standard este std, care se apeleaz cu
una dintre sintaxele:
s= std(X), unde X este un vector i restituie deviaia standard folosind ecuaia
2
1
2
1
_
1
1
|
|

\
|
|

\
|

=
n
i
i
x x
n
s ; dac X este un model oarecare dintr-o distribuie
normal, s
2
este cea mai bun estimare, iar dac X este o matrice, se restituie
un vector linie coninnd deviaia standard a elementelor de pe fiecare
coloan a lui X;
s= std(X, flag) pentru flag = 0, este similar cu std ( X), iar pentru flag =1, se
restituie deviaia standard folosind ecuaia
2
1
2
1
_
1
|
|

\
|
|

\
|
=

=
n
i
i
x x
n
s ;
s= std(X, flag, dim) calculeaz deviaia standard a coloanei matricei X precizat
prin dimensiunea scalar dim.
n relaiile de mai sus valoarea medie se calculeaz cu relaia

=
=
n
i
i
x
n
x
1
_
1
, unde n
este numrul elementelor.
De exemplu, pentru matricea X=[ 1 5 9; 7 15 22], avem:
s = std(X,0,1) = [ 4.2426 7.0711 9.1924],
s = std(X,0,2) = [ 4.000; 7.5056].

Calculul dispersiei sau al varianei se poate face n Matlab prin apelarea funciei
var, cu una dintre sintaxele:
v=var(X) - restituie dispersia vectorului X, iar pentru matrice este un vector
linie coninnd dispersia fiecrei coloane, lund ponderi egale cu N-1, unde
N este numrul de valori;
v=var(X,1) calculeaz momentul de ordinul doi normalizat pentru N;
v=var(X,W) calculeaz dispersia (momentul centrat de ordinul doi) folosind
un vector de ponderi W pozitiv, avnd numrul de elemente egal cu numrul
de linii din X, cu excepia cazului cnd W = 1.

Dispersia (variana), calculat cu funcia var este ptratul deviaiei standard,
calculat cu std.

Pentru caracterizarea unei distribuii, n statistic se utilizeaz mediana i
dominanta, definite prin frecvenele constatate experimental. Mediana unei variabile
este valoarea pentru care funcia de repartiie este 1/2 i valoarea medie a abaterilor
absolute n raport cu aceasta este minim. Valoarea variabilei care are cea mai mare
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 218
frecven de apariie se numete dominant sau valoare modal.
9.2.2. Corelaie
Pentru dou variabile aleatoare X, Y, definite pe dou sisteme complete de
evenimente, avnd abaterile U i respectiv V, valoarea medie a produsului V U se
numete corelaia variabilelor X i Y i se noteaz, de regul, cu
XY
C ,
) ( V U M C
XY
= .
ntre corelaia
XY
C , valoarea medie a produsului Y X i valorile medii ale celor
dou variabile exist relaia,
y x Y X M Y M X M Y X M C
XY
= = ) ( ) ( ) ( ) ( .
Principalele consecine ale corelaiei sunt:
dac dou variabile aleatoare X, Y au corelaia nul, atunci valoarea medie a
produsului Y X este egal cu produsul y x al valorilor lor medii i
reciproc dac y x Y X M = ) ( , cele dou variabile aleatoare X, Y au
corelaia nul;
dac dou variabile aleatoare X, Y sunt independente, corelaia lor este nul,
dar reciproca nu este adevrat;
dac corelaia
XY
C ete nul, se spune c cele dou variabile nu sunt corelate
sau c sunt necorelate.

Coeficientul de corelaie sau raportul de corelaie a dou variabile aleatoare X, Y
este raportul,
) ( ) (
) (
2 2
V M U M
V U M C
Y X
XY

=

,
unde
X
i
Y
sunt abaterile medii ptratice ale celor dou variabile X, Y.
Coeficientul de corelaie satisface inegalitile 1 1 .
Funcia Matlab cov, calculeaz covariana definit ca,
( ) ( ) [ ]
2 2 1 1 2 1
) , cov( = x x E x x ,
unde E este probabilitatea matematic i
i i
Ex = .
Ea poate fi apelat cu una dintre sintaxele:
C=cov(x) unde x este un vector ce returneaz multiplicitatea elementelor
vectorului, pentru o matrice n care fiecare linie este cunoscut i fiecare
coloan este variabil, C este o matrice covariant;
diag(cov(x)) este un vector ce arat variana (abaterea) de pe fiecare
coloan, iar sqrt(diag(cov(x)) este un vector ce prezint abaterea standard;
C=cov(x,y), unde x si y sunt vectori coloan de lungimi egale, este
echivalent cu cov([x y])
Pentru exemplificare, considerm A = [-1 1 2 ; -2 3 1 ; 4 0 3]. Variana este
Analiza datelor i transformata Fourier 219
v=diag(cov(A))'=[ 10.3333 2.3333 1]. Comparnd vectorul v cu matricea covariant:
C=cov(A)=[ 10.3333 -4.1667 3; -4.1667 2.3333 -1.5; 3 -1.5 1], se observ c
elementele diagonale, C(i,i), reprezint variabilele pentru coloanele matricei A.
Elementele ce nu sunt pe diagonal, elementele C(i,j) reprezint covariantele
coloanei i i j.
Calculul coeficienilor de corelaie dintre dou seturi de date se face cu funcia
corrcoef, care poate fi apelat:
R=corrcoef(X) returneaz o matrice R care este relaia de corelare a
matricei C=cov(X), dat de relaia ( )
( )
) , ( ) , (
,
,
j j C i i C
j i C
j i R

= , coninnd
corelarea coeficienilor din intrarea matricei X, ale crei linii sunt mrimi
obsevate, iar coloanele mrimi variabile, cu observaia c corrcoef(x) este
funcia de corelaie a zerourilor, ce reprezint zerourile lui xcof(x,coef) ce
se afl ntr-un ir ptratic;
R=corrcoef(x,y) sau R=corrcoef([x,y]), unde x i y sunt vectori coloan;
[R,P]=corrcoef() returneaz i matricea P, cu p valori pentru testarea
ipotezei de corelare, fiecare valoare p d probabilitatea unei corelaii
aleatoare, unde corelaia corect este zero, astfel c dac P(i,j) este mic, de
exemplu 0.05, atunci corelaia R(i,j) este semnificativ;
[R,P,RLO,RUP]=corrcoef() returneaz i matricele RLO i RUP, cu
aceeai marime ca i R, coninnd limite mai mici sau mai mari dect 95%
din interval pentru fiecare coeficient.

Pentru exemplificare, se prezint secvena de generare a datelor aleatoare facnd
corelaia dintre coloana a patra i alte coloane.
x = randn(30,4); % date necorelate;
x(:,4) = sum(x,2); % introduce corelaia;
[r,p] = corrcoef(x) % calculeaz corelaia simpl i valorile p;
[i,j] = find(p<0.05); % gsete corelaiile semnificative;
ind=[i,j] % afieaz indicii liniilor i coloanelor.
Cu acestea se obine:
r =[ 1.0000 -0.3566 0.1929 0.3457
-0.3566 1.0000 -0.1429 0.4461
0.1929 -0.1429 1.0000 0.5183
0.3457 0.4461 0.5183 1.0000];
p =[ 1.0000 0.0531 0.3072 0.0613
0.0531 1.0000 0.4511 0.0135
0.3072 0.4511 1.0000 0.0033
0.0613 0.0135 0.0033 1.0000];
ind= [ 4 2 ; 4 3 ; 2 4 ; 3 4].


SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 220
Un alt exemplu este dat de gsirea coeficienilor de corelaie dintre funciile:
x=4+2*t, y=4*t, z=2*cos(t), pe intervalul t=[0, 5]. Secvena Matlab este:
t=0:0.1:5; x=4+2*t; y=4*t; z=2*cos(t); Rxy=corrcoef(x,y); Rxz=corrcoef(x,z).
Se obine Rxy=[ 1 1 ; 1 1], Rxz = [1 -0.6405; -0.6405 1], de unde se observ
c ntre x i y este o dependen liniar, deoarece Rxy(1,2)=R(2,1)=1, iar ntre x i z nu
este o relaie liniar, deoarece Rxz(1,2)=Rxz(2,1)=-0.64051.

Pentru calculul unghiului dintre dou subspaii, A i B, se utilizeaz funcia
subspace, apelat cu sintaxa theta = subspace(A,B), care gsete unghiul dintre
subspaiile specificate. Dac A i B sunt vectori coloan de lungime unitate, se obine
acelai rezultat ca atunci cnd se folosete acos(A*B). Dac unghiul dintre dou
subspaii este mic, cele dou sunt aproximativ dependente lineare.
Pentru exemplificare, considerm dou subspaii ale matricei Hadamard, ale
crei coloane sunt ortogonoale, H = hadamard(8), cu A = H(:,2:4) i B = H(:,5:8). Cu
theta = subspace(A,B) se obine theta = 1.5708.
9.2.3. Histograme
Pentru prelucrri statistice se utilizeaz histogramele, care sunt un tip special de
grafice. O histogram arat distribuia unor valori date. Funcia ce realizeaz o
histogram este hist, care se poate apela:
n=hist(Y), care depoziteaz elementele unui vector Y n 10 containare
egale i restituie elementele din fiecare container ca pe un vector linie, iar
dac Y este o matrice m x p, hist consider coloanele lui Y ca pe vectori i
restituie o matrice p x n de ordin 10, fiecare coloan n conine rezultatele ce
corespund coloanei respective din matricea Y;
n=hist(Y,x), unde x este un vector, restituie distribuiia dintre lungimea x, cu
centrul specificat de x, spre exemplu, dac x este un vector de 5 elemente, se
distribuie elementele luiY n 5 compartimente centrate pe axa x;
n=hist(Y,nbins), unde nbins este un scalar, folosesc nbins numere ale
compartimentului.

Toate elementele dintr-un vector Y, sau dintr-o coloan a matricei Y sunt grupate
n funcie de gradul lor, iar fiecare grup este nfiat ca un compartiment. Histograma
axei x reflect gradul valorilor din Y, iar histograma axei y nfieaz numrul
elementelor care rmn n interiorul grupurilor; deci, histograma pe axa y aranjeaz de
la 0 la cel mai mare numr de elemente care se afl n orice compartiment.

Calcularea unei histograme se face apelnd funcia histc, cu una dintre sintaxele:
n=histc(X,edges) calculeaz numrul valorilor din vectorul X care se
nimeresc ntre elementele vectorului, vector care trebuie s conin valori
monotone, n(k) calculeaz valoarea X(i) dac X(i) < edges(k+1), iar pentru
X se returneaz o matrice cu histograme calculate pentru fiecare coloan;
n=histc(X,edges,dim) opereaz n dimensiunea dim a matricei X;
Analiza datelor i transformata Fourier 221
[n,bin]=histc() returneaz, de asemenea, o matrice de m x n atunci se
utilizeaz, pentru calcul, for j=1:N, n(k,j) = sum(bin(:,j)==k); end.
9.3. Filtrri i convoluii
9.3.1. Filtre digitale
Funcia de filtrare filtreaz o secven de date folosind un filtru digital, care
lucreaz att pentru intrrile reale ct i pentru cele complexe. Filtrarea datelor cu un
filtru de impuls cu rspuns infinit (IIR) sau cu un filtru de impuls cu rspuns finit (FIR)
se face cu funcia filter. Aceasta implementeaz direct ecuaia diferenial,
) n - y(n 1) ( ) 1 ( 2 -
) ( ) 1 ( ) 1 ( ) 2 ( ) ( ) 1 ( ) (
a
+
+ + + + =
a
b b
n a n y ) a(
n n x n b n x b n x b n y
L
L

sau, n transformat Z
( )
( )
( )
( ) z X
z n a z a
z n b z b b
z Y
a
b
n
a
n
b

+ + + +
+ + +
=


1 ) 2 ( 1
1 ) 2 ( ) 1 (
1
1
L
L

Dac a(1) nu este egal cu 1, funcia filter normeaz coeficientii cu a(1), iar dac
a(1) este egal cu zero, se restituie o eroare.

Apelarea funciei filter se face cu una dintre sintaxele :
Y = filter(b,a,X) filtreaz datele din vectorul X cu filtrul caracterizat de
vectorul coeficient al numrtorului b i de vectorul coeficient al
numitorului a; iar dac X este o matrice, funcia filter actionaz asupra
coloanelor lui X;
[Y,zf] = filter(b,a,X) returneaz i condiiile finale, zf, a ntrzierii filtrului,
cu meniunea c zf este un vector de dimensiune max(size(a),size(b)) sau o
matrice cu cte o valoare pentru fiecare coloan a lui X;
[Y,zf] = filter(b,a,X,zi) accept condiii iniiale, zi, i returneaz condiiile
finale, zf, cu meniunea c, condiiile iniiale sunt un vector cu dimensiunea
length max(length(a),length(b))-1;
[...] = filter(b,a,X,[],dim) opereaz n dimensiunea specificat de dim.

Pentru exemplificare, se menioneaz c se poate folosi funcia filter pentru a
gsi media curent fr a folosi un for loop. Acest exemplu gsete media curent a
unui vector cu 16 elemente, folosind o mrime de fereastr egal cu 5.
Secvena Matlab este,
data = [1:0.2:4]';
windowSize = 5; filter(ones(1,windowSize)/windowSize,1,data),
rezultnd
[ 0.20; 0.44; 0.72; 1.04; 1.4; 1.6; 1.8; 2; 2.2; 2.4; 2.6; 2.8; 3; 3.2; 3.40; 3.60].

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 222
Funcia filter2 realizeaz o filtrare digital bi-dimensional, fiind apelat cu
sintaxa:
Y = filter2(h,X), filtreaz datele n X cu un filtrul bi-dimensional n matricea
h, calculeaz rezultatul, Y, folosind o corelare bidimensional i restituie
partea central a corelaiei, care este de aceeai mrime cu X;
Y= filter2 (h,X, 'shape') restituie acea parte din Y care este precizat de
parametru de form, 'shape', care poate fi:
'same' restituie partea central a corelaiei, iar n acest caz, Y
este de aceeai mrime cu X, fiind opiunea implicit;
'valid' restituie doar acele pri ale corelaiei care sunt
calculate fr vrfuri ce sunt aplatizate spre zero, iar n acest
caz Y este mai mic dect X;
'full' restituie corelaia bi-dimensioanla n ntregime i, n
acest caz, Y este mai mare dect X.

Funcia filter2 rotete filtrul matricei cu 180 de grade, pentru a crea o convoluie
kernel, utiliznd funcia conv2 pentru a calcula convoluia bidimensional a filtrului. n
mod standard filter2 extrage partea central a convoluiei, care are aceeai mrime ca
matricea de intrare, i o restituie ca fiind rezultatul convoluiei.
9.3.2. Convoluii
Din punct de vedere algebric, convoluia este aceeai operaie ca i multiplicarea
a dou polinoame, avnd coeficienii u i v, care sunt vectori.
Funcia ce realizeaz convoluii (multiplicri) de polinoame este conv, care se
apeleaz cu sintaxa w = conv(u,v) i convoluioneaz vectorii u i v.
Dac m = length (u) i n = length (v), atunci w este un vector de lungime m+n-1
al crui element k ,este:
) 1 ( ) ( ) ( j k v j u k w
j
+ =


Suma este pentru toate valorile lui j, ceea ce conduce la indici permii pentru
) ( j u i v(k+1-j), mai precis j = max(1,k+1-n): min(k,m). Cnd m=n , rezult:
w(1) = u(1)*v(1)
w(2) = u(1)*v(2)+u(2)*v(1)
w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1)
...
w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1)
...
w(2*n-1) = u(n)*v(n)

Teorema convoluiei spune, n mare, c convoluionnd dou secvene, este
similar cu a multiplica forma lor Fourier. Pentru a fi mai precis, este necesar ca cei doi
vectori s tind spre zero i s se ignore erorile neaproximate. Astfel, dac
X = fft([x zeros(1,length(y)-1)]),
Analiza datelor i transformata Fourier 223
i
Y = fft([y zeros(1,length(x)-1)]),
atunci
conv(x,y) = ifft(X.*Y).

Pentru a realiza o convoluie bi-dimensional se utilizeaz funcia conv2, care
folosete o implementare formal direct a unei ecuaii de convoluie bi-dimensional
n form spaial. Dac a i b sunt funcii a dou variabile discrete, n
1
i n
2
, atunci
formula pentru convoluia bi-dimensional a lui a i b este:

=
=
1 2
)
2 2
,
1 1
( )
2
,
1
( )
2
,
1
(
k k
k n k n b k k a n n c .
n practic, conv2 calculeaz convoluia pentru intervale finite i se apeleaz cu
una dintre sintaxele:
C = conv2(A, B) calculeaz convoluia bidimensional a matricelor A i B,
iar dac una dintre aceste matrice descrie un filtru de impuls de rspuns
bidimensional finit, celelalte matrice sunt filtrate n dou dimensiuni,
mrimea lui C n fiecare dimensiune este egal cu suma dimensiunilor
corespunztoare intrrilor matricei, minus unu, adic, dac mrimea lui A
este [ma,na] i mrimea lui B este [mb,nb], atunci mrimea lui C este
[ma+mb-1, na+nb-1]
C = conv2(hcol, hrow, A) convoluioneaz A prima dat cu vectorul hcol cu
coloanele matricei i apoi cu vectorul hrow cu coloanele, cu meniunea c
hcol i hrow sunt vectori;
C= conv2(A,B,'shape') restituie aceea parte din bi-convoluie care este
precizat de parametru de form, 'shape', care poate fi:
'full' restituie ntreaga convoluie bi-dimensional;
'same' restituie partea central a convoluiei de aceeai mrime
cu A;
'valid' restituie doar acele pri ale convoluiei care sunt
calculate fr vrfuri, ce sunt aplatizate spre zero, iar n acest
caz C are marimea [ma-mb+1, na-nb+1], unde (size(A)>=size
(B) ), iar n caz contrar se rentoarce un vector vid, [].

Pentru a realiza o convoluie N-dimensional se utilizeaz funcia convn, care se
apeleaz cu una dintre sintaxele:
C = convn(A, B) - calculeaz o convoluie N-dimensionala a vectorilor A i
B, iar mrimea rezultatului este size(A) + size (B)-1;
C= convn(A,B,'shape') restituie o subseciune a convoluiei N-
dimensionale, aa cum este precizat de parametru de form, 'shape', care
poate fi:
'full' restituie ntreaga convolutie N-dimensional, opiunea
implicit;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 224
'same' restituie partea central a N-convoluiei de aceeai
mrime cu A;
'valid' restituie doar acele pri ale N-convoluiei care pot fi
calculate fr a se presupune c irul A tinde spre zero, iar
dimensiunea rezultatului este max(size(A)-size(B) + 1, 0).

Realizarea deconvoluia sau divizarea polinomial se utilizeaz funcia deconv,
care se apeleaz cu sintaxa:
[q, r] = deconv (v,u),
care realizeaz deconvoluia vectorilor u i v (se mparte v la u), folosind o divizare
prelungit. Ctul este restituit ntr-un vector q, iar restul ca un vector r, adic: v =
conv (u, q) +r.
Dac u i v sunt vectori cu coeficieni polinomiali, a face convoluia celor doi
este echivalent cu a nmuli cele dou polinoame, iar deconvoluia este mprirea
polinoamelor. Rezultatul mpririi lui v la u este ctul q i restul r.
Pentru u = [1 2 3 4] ; v = [10 20 30];
convoluia este c = conv(u,v) = [ 10 40 100 160 170 120 ].
Pentru a ajunge din nou la u se utilizeaz deconvoluia,
[q,r] = deconv(c,u)
rezultnd, q = [ 10 20 30 ], r = [ 0 0 0 0 0 0]
adic un ct egal cu v i un rest egal cu zero.

Pentru a nltura valoriile medii sau formele lineare ale vectorilor sau matricelor,
de obicei pentru prelucrarea Fourier, FFT se utilizeaz funcia detrend, care se poate
apela
y=detrend(x) - nltur forma cea mai rectilinie care se potriveste vectorului
x i l restituie n y, iar dac x este o matrice, se nltur forma linear din
fiecare coloan;
y=detrend(x, 'constant'), nltur valoarea medie din vectorul x, sau dac x
este o matrice, din fiecare coloan a matricei;
y=detrend(x, 'linear',bp), nltur forma continu din vectorul x, sau dac x
este o matrice, din fiecare coloan a matricei; vectorul bp conine indicii
colurilor (breakpoint) dintre segmentele lineare adiacente. Acesta este
definit ca fiind punctul de informaie pe care l mpart dou segmente.
9.4. Transformata Fourier
9.4.1. Seria i integrala Fourier
n studiul fenomenelor periodice din tehnic (acustic, electrotehnic, teoria
reactorilor nucleari, termohidraulic) sunt ntlnite seriile trigonometrice.
Pentru orice regim tranzitoriu, rspunsul unui sistem la o excitaie oarecare se
poate cunoate dac se cunoate expresia rspunsului, dup trecerea regimului dinamic,
Analiza datelor i transformata Fourier 225
la o excitaie sinusoidal cunoscut, care ar aciona n locul excitaiei oarecare.
Toate funciile periodice pot fi descompuse n serii trigonometrice i, prin
extensie, mrind perioada, i orice funcie neperiodic.
Dup cum se cunoate, se numete serie trigonometric o serie de funcii de
forma:
( )

=
+ +
1
0
sin cos
k
k k
t k b t k a a
unde
k k
b a a , , ,
0
sunt constante reale, iar t o variabil real. Deoarece funciile
x cos , x sin sunt periodice de perioad 2 , funciile t k cos , t k sin , cu k
numr natural, au perioada

2 1
= =
k k
T
T
k
.
Prin urmare, dac seria trigonometric este convergent ntr-un punct t
0
, iar suma
seriei este S(t
0
), seria va fi convergent i n punctele t
0
+ nT, cu n ntreg i S(t
0
+
nT)=S(t
0
). Din aceasta rezult c este suficient s cunoatem natura seriei ntr-un
interval [ ] T + , pentru a putea spune care este natura seriei pentru orice t real i
dac seria trigonometric este convergent pe intervalul [ ] T + , , ea va fi
convergena pentru toate valorile reale ale lui t.
n ipoteza c a
1
i b
1
nu sunt amndoi nuli, suma seriei,
( )

=
+ + =
1
0
sin cos ) (
k
k k
t k b t k a a t S
va fi definit pe toat axa real i va fi o funcie periodic de perioad

2
= T , cu
T

2
= pulsaia micrii periodice.
Orice funcie periodic f(t) se poate reprezenta printr-o serie de forma,
( )

=
+ + =
1
0
sin cos ) (
k
k k
t k b t k a a t f ,
care, dac coeficienii sunt,

L , 3 , 2 , 1 , d sin ) (
2
, d cos ) (
2
, d ) (
1
0
= = = =

+ + +
k t t k t f
T
b t t k t f
T
a t t f
T
a
T
k
T
k
T


se numete serie Fourier a funciei f(t) chiar dac suma seriei nu este convergent
n nici un punct sau, convergent fiind, suma sa nu este egal cu f(t) pentru nici o
valoare a lui t.
Dezvoltarea n serie Fourier a unei funcii periodice cu perioada T este,
( )

=
+ =
0
1 1
sin cos ) (
k
k k
t k B t k A t f ,
unde
T

2
1
= este pulsaia armonicei fundamentale, iar coeficienii sunt,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 226
L , 3 , 2 , 1 , d sin ) (
2
, 0
, d cos ) (
2
, d ) (
1
2
2
1 0
2
2
1
2
2
0
= = =
= =


k t t k t f
T
B B
t t k t f
T
A t t f
T
A
T
T
k
T
T
k
T
T


Pentru funcia neperiodic se deduce dezvoltarea analoag,
( ) ( ) d sin d cos ) (
0 0
t b t a t f


+ =
n care coeficienii, denumii i densiti spectrale ale amplitudinii, sunt:
( ) u u u f b u u u f a d sin
1
) ( , d cos ) (
1
) ( = =



Coeficienii A
k
i B
k
din seria Fourier reprezint amplitudinile armonicilor
superioare de ordinul k, n cosinus, respectiv sinus. n integrala Fourier amplitudinile
oscilaiilor de pulsaie , n sinus, respectiv cosinus, sunt ( ) d a respectiv ( ) d b .
Mrimile ( ) a i ( ) b sunt densitile amplitudinilor, adic amplitudinile ( ) d a ,
respectiv ( ) d b , ale oscilaiilor de pulsaii cuprinse ntre i d , raportate la d .
La un spectru continuu amplitudinea armonicei cu o anumit pulsaie are o
valoare infinit mic, iar la un spectru discret de armonice amplitudinea acestora are o
valoare finit.
n concluzie, suma armonicelor n sinus, ( ) t a cos d , respectiv cosinus
( ) t b cos d , reprezint cu att mai exact valoarea funciei neperiodice, cu ct se
alege mai mic intervalul de diviziune d .
Pentru a deduce forma complex a seriei, respectiv a integralei Fourier, se
utilizeaz formulele lui Euler pentru sinus i cosinus, obinndu-se pentru o functie f(t)
periodic, relaia:
( ) ( )
( )


+
=
+

=
n
T
T
u t jn
u e u f t f
2
2
-
1
d
2
1
1

.
Dac perioada T crete la infinit, se ajunge la cazul funciilor neperiodice. Pentru
T foarte mare pulsaia fundamental devine foarte mic i se noteaz cu , astfel c
funcia devine,
( ) ( )
( )


+
=
+

=
n
T
T
u t jn
u e u f t f
2
2
-
d
2
1

.
Din aceste relaii se observ c la o valoare determinat a lui t valoarea integralei
este o funcie de mrimea n . Considernd o ax pe care se iau punctele
Analiza datelor i transformata Fourier 227
= n , , 2 , L , atunci n fiecare dintre aceste puncte se poate determina
funcia
( ) ( )
( )

2
2
-
d
T
T
u t j
u e u f u

,
n care t are rolul de parametru.
Suma, ( )

+
=

n
t n , se apropie cu att mai mult de valoarea integralei
( )

+
-
d , tu , cu ct diviziunile
T

2
= devin mai mici, astfel c, la limit, pentru
T i d , suma se transform n integrala,

( ) ( ) ( )


d
2
1
d d
2
1
-
t j t j u j
e j F e u e u f t f =
(

=

+

+

+


cu ( ) ( )

=
-
dt e t f j F
u j

Funcia ( ) j F asociat funciei f(t), prin relaia anterioar, se numete
transformata Fourier a funciei f(t), asocierea nsi se numete transformare
Fourier, respectiv,
( ) ( )

d
2
1
t j
e j F t f =

+


Sunt uzuale notaiile:
( ) ( ) t f j F F = i ( ) ( ) ( ) j F j F t f
1
= F ,
cu F transformata Fourier i F
-1
inversa transfomatei Fourier sau transformata
Fourier invers.
Cu aceste notaii sunt valabile relaiile:
( ) ( )
0
0
t j
e j F t t f


= F , ( ) ( )
0
(
0

= j F e t f
t j
F , ( ) ( ) j F j
t
f
n
n
n
=
d
d
F .
Comportarea unui sistem liniar se descrie prin funcia de sistem, numit i
funcie de transfer,
( ) ( )
( )

j
e A j H

=
Prin definiie, aceast funcie de transfer nmultit cu complexul conjugat
0
0
t j
e K

al unei excitaii armonice pur cosinusoidale, d complexul rspunsului
armonic de regim permanent, ( )
0
0
t j
e j H K

.
Funcia de transfer, ( ) j H , nmulit cu transformata Fourier, ( ) j F , a
funciei de excitaie d transformata Fourier a rspunsului, ( ) j G , n condiii iniiale
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 228
de zero i pentru funcii de excitaie nule la t<0,
( ) ( ) ( ) j H j F j G = ,
denumit i spectrul complex al rspunsului.
Deoarece spectrul complex al funciei treapt unitate, sau funcia lui Dirac, este
( ) 1 = t F , funcia de transfer nu este altceva dect transformata Fourier a
rspunsului sistemului la o excitaie impuls Dirac, adic este transformata Fourier a
funciei treapt unitate.

Funciile Matlab X=fft(x) i x=ifft(X) introduc transformata Fourier discret
(DFT - Discrete Fourier Fransform), X, i inversa transformatei Fourier, x, date de
vectori de lungime N, calculat printr-un algoritm de transformare Fourier rapid (FFT
- Fast Fourier Transform) :
( ) ( )
( )( ) 1 1
1

=

=
k n
N
n
n x k X , ( ) ( )
( )( ) 1 1
1
1

=

=
k n
N
N
n
k X
N
n x , unde
N
j
N
e

2
.
Relaia dintre DFT i coeficienii Fourier n:
( ) ( )
( )
( )
( )
|

\
|


+ |

\
|


+ =

= t N
n t k
k b
t N
n t k
k a a n x
N
k d
2
sin
d
2
cos
2
1
0

,
este,
N
X
a
) 1 (
0
= , ( )
( )
N
k X real
k a
) 1 (
2
+
= , ( )
( )
N
k X imag
k b
) 1 (
2
+
=
unde x este lungimea N a semnalului discret eationat la timpul t cu spaiul dt.

Calculul transformatei Fourier discret se face cu funcia Matlab, fft, care se
apeleaz cu una dintre sintaxele:
Y=fft(X) returneaz o transformat Fourier discret (DFT) a vectorului X,
dac X este o matrice, se returneaz transformata Fourier pentru fiecare
coloan a matricei, iar dac X este un ir multidimensional, se va aplica
pentru prima dimensiune;
Y=fft(X,n) returneaz n puncte DFT, dac lungimea lui X este mai mic
dect n, X este completat cu zerouri, dac lungimea lui X este mai mare
dect n, irul X va fi trunchiat, iar cnd X este o matrice, lungimea
coloanelor se regleaz n aceeai manier;
Y=fft(X,[],dim) i Y=fft(X,n,dim) aplic operatorul FFT pentru dimensiunea
dim.

O aplicaie cunoscut a transformatelor Fourier este aceea de a gsi frecvena
componentelor unui semnal. Considerm frecvena de 1000 Hz. Generm un semnal
cuprins ntre 50 i 120 Hz i perturbat cu zgomote aleatoare:
t = 0:0.001:0.6; x = sin(2*pi*50*t)+sin(2*pi*120*t);
X = x + 2*randn(size(t)); plot(1000*t(1:50),y(1:50));
title('Semnal perturbat'); xlabel('Timp [ms]'); ylabel('X').
Dup cum se observ din figura 9.1, este dificil s identificm frecvena
Analiza datelor i transformata Fourier 229
componentelor uitndu-ne la semnalul original.

Fig.9.1. Semnalul original perturbat

Convertind domeniul de frecven, transformata Fourier discret a semnalului de
zgomot, Y, este gsit pentru n=512 cu transformata Fourier rapid (FFT):
Y = fft(X,512);
Puterea spectrului, Pyy, o msur a puterii ce variaz cu frecvena, este
reprezentat n figura 9.2 i a fost calculat cu secvena:
Pyy = Y. conj(Y) / 512; f = 1000*(0:256)/512;
plot(f,Pyy(1:257)) ; title('Frecventa lui X');
ylabel('Puterea Pyy'); xlabel('frequency (Hz)').

Acesta reprezint frecvena coninut de un domeniu de current continuu ce
include frecvena Nyquist, (semnalul produce vrfuri puternice).

Calcularea transformatei Fourier discrete n dou dimensiuni se face cu funcia
Matlab fft2, care se apeleaz cu una dintre secvenele:
Y = fft2(X) returneaz transformata Fourier discret cu dou dimensiuni
(DFT) a lui X, calculate cu algoritmul transformatei Fourier rapide (FFT),
iar Y are aceeai dimensiune cu X;
Y = fft2(X,m,n) reduce X, sau amortizeaza X cu zerourile create de un ir de
la m la n nainte de a fi transformat, iar rezultatul este de la m la n.

De menionat c fft2(X) poate fi calculat mai simplu cu fft(fft(X).').' , prin
calculul ntr-o dimensiune DFT a fiecarei coloane X.

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 230
Calculul transformatei Fourier discrete de n dimensiuni se face cu funcia Matlab
fftn.
Pentru orice X , ifft(fft(X)) este egal cu X cu o eroare aleatoare. Dac X este real,
ifft (fft(X) ) poate s aib mici pri imaginare.

Fig.9.2. Puterea spectrului dup transformata Fourier discret

Algoritmul pentru ifft(X) este acelai ca la fft(X), exceptnd semnul schimbat i
scala factorului n=length(X). Ca i la fft, timpul de execuie depinde de lungimea
tranformatei. Este mai rapid pentru puterea a doua. Este aproape la fel de rapid pentru
iruri care au factori primi doar numere mici. Este de cteva ori mai lent pentru iruri
care sunt numere prime sau care au un numr mare de factori primi.
Funcia fftn se apeleaz cu una dintre sintaxele:
Y = fftn(X) returneaz transformata Fourier discret (DFT) a lui X, calculat
cu algoritmul transformatei Fourier rapide multidimensionale (FFT), iar
rezultatul Y are aceeai dimensiune cu X;
Y = fftn(X,siz) amortizeaz X cu zerourile siz, pentru a crea un ir
multidimensional de mrime egal cu cea dinaintea aplicrii transformatei,
iar Y are dimensiuneaz siz.

Calculul se poate face i apelnd funcia fft pentru fiecare dimensiune, astfel:
Y = X; for p = 1:length(size(X)); Y = fft(Y,[],p); end.

Calculul transformatei Fourier discret invers se face cu funcia ifft, apelat
cu una dinte sintaxele:
y = ifft (X) restituie transformata Fourier invers discret (DFT- discret
Fourier transform) a vectorului X, calculat cu algoritmul rapid al
Analiza datelor i transformata Fourier 231
transformatei Fourier (FFT), iar dac X este o matrice, se restituie inversa
fiecarei coloane a matricei;
y = ifft (X,n) restituie n puncte ale inversei DFT a vectorului X;
y = ifft ( X, [], dim) i y = ifft (X,n,dim) restituie inversa DFT a lui X de pe
partea cealalt a dimensiuni dim.

Transformata Fourier discret inversa bidimensional se determin cu funcia
ifft2, care se apeleaz cu sintaxele:
Y = ifft2 (X) restituie transformata Fourier discret invers bidimensional
(DTF) a lui X, calculat cu un algoritm rapid al transformatei Fourier (FFT),
rezultatul Y este de aceeai dimensiune cu X;
Y = ifft2 (X, m ,n ) restituie inversa transformatei Fourier m pe n a matricei
X.

Pentru orice X, ifft2(fft2(X)) este egal cu X cu o eroare aleatoare. Dac X este
real, ifft2(fft2(X) ) poate s aib mici pri imaginare.

Algortimul pentru ifft2(X) este acelai ca i la fft2(X), exceptnd semnul
schimbat i scala factorilor [m,n] = size (X). Timpul de execuie pentru ifft2 depinde de
lungimea transformrii. Este mai rapid pentru puterea a doua, este aproape la fel de
rapid pentru iruri care au doar factori primi numere mici. Este ceva mai lent pentru
iruri care sunt numere prime sau care au factori primi numere mari.

Inversa multidimensional a transformatei Fourier discrete este dat de funcia
ifftn, apelat cu sintaxele:.
Y = ifftn (X) restituie inversa n-dimensional a transformatei Fourier
discrete (DFT) a lui X, calculat cu un algoritm rapid multidimensional a
transformatei Fourier (FFT-Fast Fourier Transform), iar rezultatul, Y, este
de aceeai dimensiune cu X;
Y = ifftn (X,siz) l tinde pe X spre zero, sau l trunchiaz, pentru a crea un ir
mutidimensional de marime siz, nainte de a realiza tranformata invers, iar
dimensiunea rezultatului Y este siz.

Funcia ifftn(X) este echivalent cu urmtoarea secven Matlab:
Y = X; for p = 1:length(size(X)); Y = ifft(Y,[],p); end.

Aceasta calculeaz inversa unidimensional din cadrul fiecrei dimensiuni a lui
X. Timpul de calcul pentru ifftn depinde de lungimea transformatei; este mai rapid
pentru puterea a doua, este aproape la fel de rapid pentru iruri care au factori primi ct
mai mici i este puin mai lent pentru iruri de numere prime sau care au factori primi
numere mari.

Deplasarea componentei de frecven zero a transformatei Fourier discret la
centrul spectrului se realizeaz cu funcia fftshift, care se apeleaz cu sintaxele:
Y=fftshift(X) rearanjeaz ieirile lui fft, fft2 i fftn, deplasnd componenta
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 232
de frecven zero n centrul irului, fiind util n vizualizarea unei
transformate Fourier cu component de frecven zero, n mijlocul
spectrului; pentru vectori, fftshift (X) schimb jumtatea stng cu cea
dreapt a lui X, pentru matrice schimb cadranele 1 i 3 din X cu cadranele 2
i 4, iar pentru iruri cu mai multe dimensiuni, schimb jumatile de
spaii din X din cadrul fiecrei dimensiuni;
Y=fftshift(X,dim) aplic operaia fftshift n cadrul dimensiunii dim.

Deplasarea inversei transformatei Fourier discret la centru se face cu funcia
ifftshift, acre se apeleaz cu sintaxa:
ifftshift(X) inverseaz rezultatele lui fftshift, dac X este un vector,
inverssnd jumtatea stang cu cea dreapta a lui X, iar pentru matrice,
inverseaz primul cadran cu al treilea i al doilea cadran cu al patrulea i
dac X este un ir multidimensional, se inverseaz jumatile de intervale
ale lui X din fiecare dimensiune;
ifftshift( X, dim) aplic operaia ifftshift n cadrul dimensiunii dim.

10. MAXIMELE I MINIMELE UNEI FUNCII
Punctele de maxim sau minim local se numesc puncte de maxim sau minim
relativ sau puncte de extrem ori extremum relativ i, n general, sunt punctele n
care se anuleaz prima derivat. Un punct de minim local (sau maxim local) nu
este n mod necesar un punct de minim (sau maxim) absolut, adic nu este un punct
n care funcia ia valoarea cea mai mic (sau cea mai mare) din interval.
10.1. Maximele i minimele unei funcii de o variabil
Pentru o funcie oarecare R I f : , cu R I interval, spunem c :
punctul I x
0
este un punct de maxim (local) pentru f, dac exist o
vecintate V a lui
0
x , astfel nct ( ) ( )
0
x f x f , pentru orice
I V x I ;
punctul I x
0
este un punct de minim (local) pentru f, dac exist o
vecintate V a lui
0
x , astfel nct, ( ) ( )
0
x f x f , pentru orice
I V x I .

Punctele de maxim sau minim local sunt puncte de maxim sau minim relativ,
denumite i puncte de extremum relativ, ; un punct de maxim local (sau minim
local) nu este n mod necersar un punct de maxim absolut (sau minim absolut),
adic este un punct n care funcia ia valoarea cea mai mare( sau cea mai mic).
Conform teoremei lui Fermat, dac o funcie R I f : are derivat ntr-un
punct,
0
x , din interiorul intervalului I i dac
0
x este punct de maxim sau minim
local pentru funcia f, atunci derivata sa este nul n punctul
0
x , 0 ) (
0
'
= x f . Dac
punctul
0
x este unul dintre capetele intervalului I, punctul
0
x poate fi punct de
extremum, fr ca derivata s se anuleze n punctul
0
x . De menionat c reciproca
teoremei lui Fermat nu este n general adevrat, adic o funcie derivabil ntr-un
punct
0
x , care are derivata nul n punctul
0
x , nu are n punctul
0
x n mod necesar
un extremum.
Pentru o funcie R I f : , continu pe intervalul [a, b], cu a < b i
derivabil pe intervalul (a, b), pentru care f(a)=f(b), conform teoremei lui Rolle
exist un punct ( ) b a c , , astfel nct 0 ) ( = c f , respectiv un punct de extremum
local.
Punctele de extremum, dintr-un interval n care f este derivabil, se gsesc
printre punctele n care se anuleaz derivata nti. ntr-un astfel de punct
0
x , n
care funcia este continu, avem :
un punct de minim, dac derivata la stnga punctului
0
x este negativ,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 234
iar la dreapta lui
0
x este pozitiv;
un punct de maxim, dac derivata la stnga punctului
0
x este pozitiv,
iar la dreapta lui
0
x este negativ;
nu este punct de extremum dac derivata are acelai semn la stnga i la
dreapta punctului
0
x .

Condiiile necesare i suficiente de extremum se obin cu ajutorul
derivatelor de ordin superior. Dac o funcie f este derivabil de 1 + n ori, 2 n
ntr-un punct I x
0
, astfel nct,
( ) ( ) ( ) ( ) 0 , 0 , , 0 , 0
0
) (
0
) 1 (
0 0
= = =

x f x f x f x f
n n
L ,
atunci
0
x este :
punct de maxim dac n=2m i ( ) 0
0
) (
< x f
n
;
punct de minim dac n=2m i ( ) 0
0
) (
> x f
n
;
punct de inflexiune doar dac n=2m+1 i ( ) 0
0
) (
< x f
n
.

Pentru determinarea minimului unei funcii de o singur variabil, n Matlab,
se utilizeaz funcia fminbnd. Funcia utilizeaz algoritmul de interpolare
parabolic. La versiunile anterioare, Release 12 (Matlab 6), se utiliza funcia fmin.
Funcia fminbnd se apeleaz cu una dintre sintaxele :
x = fminbnd(fun,x1,x2) returneaz valoarea x, pentru care funcia
descris de fun are valoarea minim n intervalul x1 < x < x2;
x = fminbnd(fun,x1,x2,options) minimizeaz, innd seama de
parametrii de optimizare specificai n structura options, care sunt, n
general, precizai de utilizator prin funcia optimset; aceste opiuni
sunt: Display (poate fi 'off', cnd nu apare pe display nimic, 'iter', cnd
este afiat fiecare iteraie, 'final', cnd se afieaz ultima iteraie sau
opiunea standard 'notify', cnd se dau informaii dac soluia nu
converge), TolX (eroarea acceptat pentru soluie), MaxFunEval
(numrul maxim de funcii de evaluare alocat) i MaxIter (numrul
maxim de iteraii dorite);
x = fminbnd(fun,x1,x2,options,P1,P2,...) transfer argumentele
adiionale P1, P2 etc., funciei obiectiv, fun(x,P1,P2,...) i, dac nu sunt
setate opiuni, se utilizeaz vectorul gol, [];
[x,fval] = fminbnd(...) returneaz valorile funciei obiectiv, fval, cu care
este calculat funcia fun, n punctul x;
[x,fval,exitflag] = fminbnd(...) returneaz un indicator, exitflag, care
descrie conditiile de ieire i care poate fi: >0 dac funcia converge la
soluia x, 0 dac a fost depit numrul maxim de funcii de evaluare,
<0 dac funcia nu converge la soluia x;
[x,fval,exitflag,output] = fminbnd(...) returneaz indicatorul output,
Maximele i minimele unei funcii 235
care d informaii referitoare la algoritmul utilizat, numrul de funcii
de evaluare i numrul de iteraii.

Pentru exemplificare se determin coordonatele minimului funciei,
( ) 5 2
2 3
+ = x x x x f
n intervalul (0, 1). Secvena Matlab poate fi:
f = inline('x.^3+x^2-2*x-5'); x = fminbnd(f, 0, 2);
rezultnd punctul de minim, x= 0.5486 i valoarea minim a funciei f(x)= -5.6311.
10.2. Maximele i minimele unei funcii de p variabile
Pentru o funcie oarecare ( )
p
p
R I x x x f : , , ,
2 1
L , cu
p
R I interval,
spunem c :
punctul ( ) I a a a
p
, , ,
2 1
L este un punct de minim local al funciei,
( )
p
x x x f , , ,
2 1
L , dac exist o vecintate V a lui ( )
p
a a a , , ,
2 1
L , astfel
nct, pentru orice ( ) I V x x x
p
I L , , ,
2 1
, s fie adevrat relaia
( ) ( )
p p
a a a f x x x f , , , , , ,
2 1 2 1
L L ;
punctul ( ) I a a a
p
, , ,
2 1
L este un punct de maxim local al funciei,
( )
p
x x x f , , ,
2 1
L , dac exist o vecintate V a lui ( )
p
a a a , , ,
2 1
L , astfel
nct, pentru orice ( ) I V x x x
p
I L , , ,
2 1
, s fie adevrat relaia
( ) ( )
p p
a a a f x x x f , , , , , ,
2 1 2 1
L L .

Maximele i minimele, aa cum sunt definite, sunt maxime sau minime locale
sau relative i se mai numesc i extreme relative.
Pentru o funcie ( )
p
x x x f , , ,
2 1
L , definit pe
p
R I , care are n punctul
( )
p
a a a , , ,
2 1
L un extremum i derivate pariale, atunci n acest punct derivatele
pariale se anuleaz,
( ) ( ) ( ) 0 , , , , , 0 , , , , 0 , , ,
2 1 2 1 2 1
2 1
= = =
p x p x p x
a a a f a a a f a a a f
p
L L L L .
Soluiile sistemului,
0 , , 0 , 0
2 1
=

p
x
f
x
f
x
f
L ,
formeaz mulimea punctelor staionare ale funciei ( )
p
x x x f , , ,
2 1
L .
Se observ c, pe mulimea punctelor staionare difereniala de ordinul nti
se anuleaz, ( ) 0 , , , d
2 1
=
p
x x x f L , i reciproc, punctele care anuleaz difereniala
de ordinul nti sunt puncte staionare. Punctele de extremum ale funciei
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 236
( )
p
x x x f , , ,
2 1
L se gsesc printre punctele staionare ale ei.
Pentru o funcie ( )
p
x x x f , , ,
2 1
L , definit pe
p
R I , derivabil parial de
trei ori pe I i punctul ( )
p
a a a , , ,
2 1
L o soluie a sistemului
0 , , 0 , 0
2 1
=

p
x
f
x
f
x
f
L ,
dac pentru orice
( )
j i
p
ij
x x
a a a f
A

=
, , ,
2 1
2
L
numerele:

11 1
A = ,
22 21
12 11
2
A A
A A
= , ... ,
pp p p
p
p
p
A A A
A A A
A A A
2 1
2 22 21
1 12 11
L L L L
L
L
= , sunt pozitive
atunci funcia ( )
p
x x x f , , ,
2 1
L are n punctul ( )
p
a a a , , ,
2 1
L un minim;

11
1
*
A = ,
22 21
12 11
2
*
A A
A A
= , ... , ( )
pp p p
p
p
p
A A A
A A A
A A A
2 1
2 22 21
1 12 11
*
1
L L L L
L
L
= , sunt
pozitive, atunci funcia ( )
p
x x x f , , ,
2 1
L are n punctul ( )
p
a a a , , ,
2 1
L un
maxim.

Pentru determinarea minimului unei funcii de mai multe variabile n
vecintatea unui vector de start,
0
x , n Matlab se utilizeaz funcia fminsearch.
Funcia utilizeaz algoritmul simplex Nelder-Mead. La versiunile anterioare,
Release 12 (Matlab 6), se utiliza funcia fmins. Funcia fminsearch se apeleaz cu
una dintre sintaxele :
x = fminsearch (fun,x0) returneaz un vector x, care este o minimizare
local a lui fun, n vecintatea vectorului de start x0;
x = fminsearch (fun,x0,options) minimizeaz innd seama de
parametrii de optimizare specificai n structura options, care sunt, n
general, precizai de utilizator prin funcia optimset; aceste opiuni
sunt: Display (poate fi 'off', cnd nu apare pe display nimic, 'iter', cnd
este afiat fiecare iteraie, 'final', cnd se afieaz ultima iteraie, sau
opiunea standard 'notify', cnd se dau informaii dac soluia nu
converge), TolX (eroarea acceptat pentru soluie), MaxFunEval
(numrul maxim de funcii de evaluare alocat) i MaxIter (numrul
maxim de iteraii dorite);
x = fminsearch (fun,x0,options,P1,P2,...) transfer argumentele
Maximele i minimele unei funcii 237
adiionale P1, P2 etc., funciei obiectiv, fun i dac nu sunt setate
opiuni, se utilizeaz vectorul gol, [];
[x,fval] = fminsearch (...) returneaz valorile funciei obiectiv, fval, cu
care este calculat funcia fun n punctul x;
[x,fval,exitflag] = fminsearch (...) returneaz un indicator, exitflag, care
descrie conditiile de ieire i care poate fi: >0 dac funcia converge la
soluia x, 0 dac a fost depit numrul maxim de funcii de evaluare,
<0 dac funcia nu converge la soluia x;
[x,fval,exitflag,output] = fminsearch (...) returneaz indicatorul output
care d informaii referitoare la algoritmul utilizat, numrul de funcii
de evaluare i numrul de iteraii.

Un exemplu clasic pentru testarea minimizrii multidimensionale este
funcia banana a lui Rosenbrock,
( ) ( ) ( )
2
1
2
2
1 2 2 1
1 100 , x x x x x f + =
care are minimul 0, n punctul (1,1). Punctul tradiional de plecare pentru cutarea
soluiei, x
0
, este (-1.2,1).
Funcia se poate da ca o funcie Matlab, de tip m prin secvena,
function f = banana(x); f = 100*(x(2)-x(1)^2)^2+(1-x(1))^2,
iar prin,
[x,fval] = fminsearch(@banana,[-1.2, 1])
rezult x = [1.0000 1.0000 ] i fval =8.1777e-010, ceea ce indic faptul c minimul
a fost gsit cu o eroare foarte mic, ce tinde spre zero.
Modificarea locaiei punctului de minim n punctul [a, a
2
], se face prin
adugarea unui parametru a funciei banana iniiale, astfel:
function f = banana(x,a); if nargin < 2, a = 1; end ;
f = 100*(x(2)-x(1)^2)^2+(a-x(1))^2;
Transferarea opiunilor prin funcia optimset se realizeaz cu secvena,
[x,fv,ex,out]=fminsearch(@banana, [-1.2, 1],optimset('TolX',1e-8), sqrt(2));
care transfer funciei banana parametrul a=sqrt(2) i gsete minimul cu mai mult
acuratee, rezultnd:
x =
1.4142 2.0000
fval =
2.4034e-018
ex =
1
op =
iterations: 128
funcCount: 247
algorithm: 'Nelder-Mead simplex direct search',
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 238
ceea ce arat punctul de minim al funciei, x, valoarea funciei obiectiv, fval, faptul
c funcia converge la soluie, ex=1>0, numrul de iteraii, 128, numrul de funcii
de evaluare, 247 i algoritmul utilizat, 'Nelder-Mead simplex cu cutare direct.
10.3. Calculul zerourilor funciilor de o variabil real
Calculul zerourilor unei funcii de o variabil real este, n esen, gsirea
valorilor variabilei pentru care valoarea funciei este zero. Pentru aceasta, se
pornete de la constatarea c, dac pentru o valoare x
0,
funcia este f(x
0
)=0, atunci
semnul funciei pentru un x<x
0
difer de semnul funciei pentru x<x
0
, funcia
schimbnd semnul.
Ca o regul general, se consider o valoare oarecare x
0
i se caut zeroul cel
mai apropiat de aceast valoare, considernd un interval ce include punctul x
0
i
micornd acest interval, pn la eroarea dorit. Cutarea soluiei se poate face prin
metoda tangentei sau a lui Newton, metoda secantei, metoda biseciei, metoda de
interpolare ptratic invers.
n Matlab, calculul zerourilor unei funcii de o variabil real se face cu
funcia fzero, care se apeleaz cu una dintre sintaxele:
x = fzero (fun,x0) returneaz zeroul funciei fun, cel mai apropiat de
vecintatea valorii scalare de start, x0, iar dac nu se gsete un punct n
care funcia schimb semnul, se afieaz NaN, cu meniunea c, x
0

poate fi un vector cu dou dimensiuni, care d intervalul n care funcia
schimb semnul i atunci, n mod cert, se va gsi un zero al funciei ;
x = fzero (fun,x0,options) caut zeroul, innd seama de parametrii de
optimizare specificai n structura options, care sunt, n general,
precizai de utilizator prin funcia optimset; aceste opiuni sunt
Display (poate fi 'off', cnd nu apare pe display nimic, 'iter', cnd este
afiat fiecare iteraie, 'final', cnd se afieaz ultima iteraie sau
opiunea standard 'notify', cnd se dau informaii dac soluia nu
converge), TolX (eroarea acceptat pentru soluie);
x = fzero (fun,x0,options,P1,P2,...) transfer argumentele adiionale P1,
P2 etc., funciei obiectiv, fun i dac nu sunt setate opiuni, se utilizeaz
vectorul gol, [];
[x,fval] = fzero (...) returneaz valorile funciei obiectiv, fval, cu care
este calculat funcia fun, n punctul x;
[x,fval,exitflag] = fzero (...) returneaz un indicator, exitflag, care
descrie condiiile de ieire i care poate fi: >0 indic dac funcia are
Maximele i minimele unei funcii 239
un zero, <0 nu are soluie, funcia nu se anuleaz sau se anuleaz la
infinit;
[x,fval,exitflag,output] = fzero (...) returneaz indicatorul output, care
d informaii referitoare la algoritmul utilizat, numrul de funcii de
evaluare i numrul de iteraii.

Se reamintete c zerourile unui polinom pot fi calculate i cu funcia roots.
Pentru exemplificare, se determin zeroul funciei f(x)=sinx, cel mai apropiat
de x
0
=3. Deoarece funcia considerat este predefinit n Matlab, rezultatul se
obine cu secvena,
X=fzero(sin,3)
rezultnd: X=3.1416.
10.4. Rezolvarea sistemelor de ecuaii nelineare
Rezolvarea unui sistem de ecuaii neliniare de forma 0 ) ( = X F , unde X
poate fi sub forma unui vector sau o matrice, prin metoda celor mai mici ptrate, se
realizeaz cu funcia fsolve, care se apeleaz cu una dintre sintaxele:
x = fsolve(fun,x0) consider soluiile iniiale, de pornire, x0 i rezolv
ecuaia descris de fun;
x = fsolve(fun,x0,options) minimizeaz funcia fun, innd seama de
parametrii de optimizare, specificai n structura options;
x = fsolve(fun,x0,options,P1,P2,...) transfer funciei fun parametrii P1,
P2, de care aceasta depinde, iar n cazul cnd opiunile sunt cele
predefinite, n locul lui options se introduce o matrice goal, [ ];
[x,fval] = fsolve(fun,x0) calculeaz i valoarea funciei obiectiv fval, cu
care s-a gsit soluia x, a funciei fun;
[x,fval,exitflag] = fsolve(...) calculeaz valoarea exitflag, care descrie
condiia de ieire;
[x,fval,exitflag,output] = fsolve(...) returneaz o structur de ieire
output, care conine informaiile referitoare la metoda de optimizare;
[x,fval,exitflag,output,jacobian] = fsolve(...) calculeaz Jacobianul
funciei fun, pentru soluia x.

Funcia fun descrie sistemul de ecuaii ce urmeaz a fi rezolvat, avnd ca
parametrii de intrare vectorul x i ca parametrii de ieire, vectorul F. Funcia fun
poate fi specificat i chemnd o funcie definit anterior, respectiv cu sintaxa:
x = fsolve(@myfun,x0)
unde myfun este funcia Matlab definit anterior, ca de exemplu F = myfun(x).
Dac se dorete calcularea Jacobianului, atunci trebuie stabilit parametrul
on, cu ajutorul secvenei:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 240
options = optimset('Jacobian','on')
i funcia fun trebuie s returneze, ca al doilea argument, matricea J, coninnd
valorile Jacobianului, la soluia x.
n cazul n care se urmrete calcularea funciei obiectiv i a Jacobianului
pentru soluia x, secvena Matlab este
function [F,J] = myfun(x)
F = ...
if nargout > 1
J = ...
end

Dac funcia fun returneaz un vector (o matrice), avnd m componente i x
are lungimea n, unde n este dimensiunea lui x0, atunci Jacobianul, J, este o matrice
de dimensiune mxn, unde J(i,j) este derivata parial a funciei F(i), n raport cu
x(j).
Parametrul de ieire existflag , descrie convergena sistemului, avnd
urmtoarele valori de ieire:
>0 - funcia a convers ctre soluia x;
0 - numrul maxim de evaluri ale funciei i iteraii a fost depit;
<0 - funcia nu a convers ctre o soluie.

Structura output, conine informaiile legate de optimizare, avnd urmtoarele
specificaii:
iterations - returneaz numrul de iteraii;
funcCount - numrul de evaluri ale funciei;
algorithm - algoritmul utilizat;
cgiterations numrul de iteraii, Preconditioned Conjugate Gradients
(PCG) (pentru algoritmi de mari dimensiuni);
stepsize - pasul de simulare folosit n final (pentru algoritmi de mari
dimensiuni);
firstorderopt - msura optimalitii de primul grad (pentru algoritmi de
mari dimensiuni). Pentru probleme de mari dimensiuni, optimalitatea de
primul grad este norma la infinit a gradientului g=J
T
F.

Pentru exemplificare, se consider sistemul de ecuaii:
2
1
2 1
2 1
2
2
x
x
e x x
e x x

= +
=

care, pentru rezolvare n Matlab ,la o soluie iniial x0=[-5 -5], se scrie
0 2
0 2
2
1
2 1
2 1
= +
=

x
x
e x x
e x x

Maximele i minimele unei funcii 241
Funcia Matlab care descrie ecuaiile de mai sus este
function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];

Stabilizindu-se algoritmul de optimizare, secvena funciei fsolve este
x0 = [-5; -5;
options=optimset('Display','iter');
[x,fval] = fsolve(@myfun,x0,options)
care afieaz numrul de iteraii necesare pentru ca sistemul s convearg i
celelalte caracteristici specificate n output.
Valorile lui x i ale funciei fval sunt:
x =
0.5671
0.5671.

fval =
1.0e-006 *
-0.4059
-0.4059.
11. CALCULE NUMERICE CU POLINOAME
11.1. Polinoame. Funcii raionale.
Funciile elementare sunt funcii relativ simple, cu care se construiesc
majoritatea funciilor compuse ntlnite n aplicaii.
Polinomul este cea mai simpl funcie elementar, cu o singur variabil i
poate fi exprimat prin urmtoarea form general:

1
2
1
1
2 1
1
1
1
) (
+

+
=
+
+ + + + + + + = =

n n n
k
k
n n
n
i
i n
i
A x A x A x A x A x A x A x P L L
unde x este variabila, real sau complex, iar A
i,
sunt coeficienii polinomului, reali
sau compleci.
Polinomul este o funcie olomorf (derivabil) pe orice domeniu mrginit.
n Matlab, polinoamele sunt reprezentate printr-un vector linie, care conine
coeficienii n ordinea descresctoare a puterilor variabilei, avnd indicii de la 1 la
n-1, cum se observ i din relaia de mai sus.
De exemplu, reprezentarea Matlab a polinomului,
i x x x x p + + + + + = 2 6 5 4 3 2
2 3 4
1

este dat de vectorul,
p1=[2 3 4 5 6+2i ].

Se numete funcie raional un ct de dou polinoame,
( )
1
2
1
1
2 1
1
2
1
1
2 1
) (
) (
+

+ + + + + + +
+ + + + + + +
= =
p p p
k
k
p p
n n n
k
k
n n
B x B x B x B x B x B
A x A x A x A x A x A
x Q
x P
x R
L L
L L

n particular, dac Q(x) este de gradul zero, R(x) se reduce la un polinom,
deci i polinomul este o funcie raional. Se spune c polinomul este o funcie
raional ntreag.
Presupunem c polinoamele P(x) i Q(x) nu au rdcini comune, deci fracia
R(x) este ireductibil.
Fie a, b, ..., l, rdcinile polinomului Q(x) i , , , L , ordinele lor de
multiciplitate. Polinomul Q(x), poate fi descompus n factori sub forma,
( ) ( ) ( ) ( ) p l x b x a x B x Q = + + + =

L L ;
1

i atunci funcia R(x),
( )
( ) ( ) ( )

l x b x a x B
A x A x A
x Q
x P
x R
n
n n

+ + +
= =
+

L
L
1
1
1
2 1
) (
) (
,
este definit pentru orice x, de modul finit, cu excepia punctelor a, b, ..., l, n care
numitorul ia valoarea zero.
Calcule numerice cu polinoame 243
n orice domeniu mrginit, funcia raional nu are alte singulariti dect
punctele n care numitorul ia valoarea zero, puncte n care funcia nu este definit.
Aceste singulariti, de fapt rdcinile polinomului de la numitor, sunt poli, care, n
cazul de mai sus, sunt a, b, ..., l. Ordinul de multiciplitate al fiecrui pol este egal
cu ordinul de multiciplitate al rdcinii respective, care, n cazul de mai sus, sunt
, , , L .
Funciile raionale nu au alte singulariti n tot planul, inclusiv n punctul de
la infinit, dect poli.
11.2. Operaii cu polinoame
Cum polinomul este o funcie elementar, pentru dou polinoame P1(x) i
P2(x), sunt valabile operaiile de la funcii, respectiv:
suma a dou polinoame este tot un polinom, P(x)=P1(x)+P2(x);
diferena a dou polinoame este tot un polinom, P(x)=P1(x)-P2(x);
produsul a dou polinoame este tot un polinom, P(x)=P1(x) x P2(x);
ctul a dou polinoame este tot un polinom, P(x)=P1(x) : P2(x).

Operaiile aritmetice de adunare i scdere a polinoamelor presupun
adunarea i scderea coeficienilor de acelai ordin.
Esenial, pentru a opera cu polinoame n Matlab, este faptul ca polinoamele
s aib acelai ordin, adic lungimea vectorilor coeficienilor s fie aceeai. Din
aceast cauz, polinomului cu grad mai mic i se vor completa coeficienii cu zero.
Dac, de exemplu,
( ) 1 4 3 2
2 3 4
1
+ + + = x x x x p , ( ) x x x x p + + = 2 3 2
2 3
2
,
polinomul sum este,
( ) ( ) ( ) 1 2 7 5 2
2 3 4
2 1
+ + + + = + = x x x x x p x p x p
s
,
iar polinomul diferen este,
( ) ( ) ( ) 1 2 2
2 3 4
2 1
+ + + = = x x x x x p x p x p
d
.
n Matlab, pentru a opera vectorii corespunztori lui p1 i p2 sunt:
p1 = [ 2 3 4 0 1]; p2= [0 2 3 2 0 ];
astfel nct s poat s se efectueze,
ps = p1+p2 = [ 2 5 7 2 1 ] i pd = p1-p2 = [ 2 1 1 -2 1 ].

nmulirea sau mprirea unui polinom cu un scalar const n mutiplicarea
coeficienilor acestuia cu un scalar, respectiv n nmulirea unui vector, al
coeficienilor polinomului cu scalarul respectiv.
Prin urmarea pentru a nmuli polinomul P cu scalarul k, pentru a obine
polinomul P
k
, adic:
( )

+
=
+
+
=
+
= =
1
1
1
1
1
1
) (
n
i
i n
i
n
i
i n
i k
x A k x A k x P
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 244
se nmulesc numai coeficienii polinomului cu scalarul k.
Deoarece asupra scalarului k nu s-a fcut nici o restricie, putem presupune c
acesta este de forma
r
k
1
= i prin urmare, operaia de nmulire cu k este identic
cu operaia de mprire a polinomului P(x) la r.
n Matlab, nmulirea polinomului p1 cu k=3, pentru a obine polinomul p3,
se scrie:
p1 = [ 2 3 4 0 1]; k=3; p3 = k*p1 = [6 9 12 0 3 ],
iar nmulirea cu
5
1 1
= =
r
k , respectiv mprirea la r=5, se scrie:
p1 = [ 2 3 4 0 1]; k=1/5; p3 = k*p1 sau p3 = p1 / r = [0.4 0.6 0.8 0 0.2].

nmulirea a dou polinoame, ( ) x u , ( ) x v este echivalent unei operaii de
convoluie.
Funcia ce realizeaz convoluii (multiplicri) de polinoame este conv, care
se apeleaz cu sintaxa, w = conv(u,v) i convoluioneaz vectorii u i v.
Dac m = length (u) i n = length (v), atunci w, este un vector de lungime
m+n-1, al crui element k ,este:
) 1 ( ) ( ) ( j k v j u k w
j
+ =


Suma este pentru toate valorile lui j, ceea ce conduce la indici permii pentru
u( j ) i v(k+1-j), mai precis j = max(1,k+1-n): min(k,m). Cnd m=n , rezult:
w(1) = u(1)*v(1)
w(2) = u(1)*v(2)+u(2)*v(1)
w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1)
...
w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1)
...
w(2*n-1) = u(n)*v(n)

Apelarea practic, n Matlab, pentru a nmuli polinomul p1 cu polinomul p2,
pentru a obine polinomul pm se face cu secvena,
p1 = [ 2 3 4 0 1]; p2= [0 2 3 2 0 ]; pm=conv(p1,p2),
obinnd,
pm = [0 4 12 21 18 10 3 2 0 ]
ceea ce corespunde, matematic, polinomului ( ) x p
m
,
( ) ( ) ( ) x x x x x x x x p x p x p
m
+ + + + + + = = 2 3 10 18 21 12 4
2 3 4 5 6 7
2 1


Conform teoremei mpririi cu rest a dou polinoame, oricare ar fi
polinoamele, u i 0 v , exist polinoamele unice, q i r, astfel nct,
v r r q v u grad grad , < + = ,
Polinomul u se numete demprit, v mpritor, q ct i r rest.
Calcule numerice cu polinoame 245

mprirea sau divizarea a dou polinoame este echivalent unei operaii de
deconvoluie, pentru care n Matlab, se utilizeaz funcia deconv, care se apeleaz
cu sintaxa:
[q, r] = deconv (v,u),
care realizeaz deconvoluia vectorilor u i v (se mparte v la u), folosind o divizare
prelungit. Ctul este restituit ntr-un vector q, iar restul ca un vector r, adic: v =
conv (u, q) +r.
Dac u i v sunt vectori cu coeficieni polinomiali, a face convoluia celor doi
este echivalent cu a nmuli cele dou polinoame, iar deconvoluia este mprirea
polinoamelor. Rezultatul mpririi lui v la u este ctul q i restul r.
Pentru,
u = [1 2 3 4] ; v = [10 20 30];
convoluia este,
c = conv(u,v) = [ 10 40 100 160 170 120 ].
Pentru a ajunge din nou la u, se utilizeaz deconvoluia,
[q,r] = deconv(c,u)
rezultnd,
q = [ 10 20 30 ], r = [ 0 0 0 0 0 0]
adic un ct egal cu q=v i un rest r egal cu zero.
11.3. Evaluarea polinoamelor
Evaluarea polinoamelor este strns legat de evaluarea funciilor. La funcii,
evaluarea se poate face ntr-un punct, lucrnd cu scalari sau n mai multe puncte,
lucrnd vectorial sau cu tablouri.
Lucrnd scalar, evaluarea polinomului 1 3 2 ) (
2 3
+ + + = x x x x f , pentru
x=2, se realizeaz cu secvena Matlab:
x=2; f=2*x^3+x^2+3*x+1;
rezultnd f=27.
n cazul lucrului cu tablouri, ce constituie specificitatea Matlab, programul se
execut mai rapid dect ansamblul calculelor pentru fiecare valoare scalar n
parte, dar, n acest caz, sintaxa evalurii presupune plasarea unui punct naintea
operatorilor nmulire, mprire sau ridicare la putere. Dimensiunea matricei n
care se returneaz valorile polinomului este identic cu cea a matricei care conine
punctele n care se face evaluarea. Secvena de evaluarea a polinomului f(x), pentru
x=[-2 -1 0 1 2 3], n acest caz este:
x = [-2 -1 0 1 2 3]; f = 2.*x.^3+x.^2+3.*x+1;
rezultnd, f = [-17 -3 1 7 27 73 ].
De menionat c punctele de evaluare x pot s aparin unui interval, fiind
distribuite uniform pe acesta i astfel, polinomul se evalueaz pe un interval, a-b,
cu pasul dorit, x = a:pas:b.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 246

Special pentru evaluarea polinoamelor se utilizeaz funcia polyval, care se
apeleaz cu una dintre sintaxele:
y = polyval (p, x) restituie valoarea unui polinom de grad n evaluat la x,
argumentul de intrare p este un vector de lungime n+1, ale crui elemente
sunt coeficienii n ordine descrescatoare a puterilor polinomului ce este
evaluat, iar x poate fi o matrice sau un vector i atunci, funcia polyval
evalueaz p la fiecare element a lui x;
y = polyval (p, x, [], mu) folosete ( )
2 1
/ = x x n locul lui x, calculat
funcie de
1
= mean (x) i
2
= std (x), funcia calculnd opional i
parametrii de centrare i de gradare mu = [
1,

2
] ;
[y, delta] = polyval (p, x, S) i [ y, delta] = polyval (p, s, S, mu) folosesc
structura de ieire opional S, generat de polyfit pentru a produce erorile
estimate, y delta; dac erorile din datele de intrare ale funciei polyfit
sunt independente, cu o variaie constant, atunci y delta conine cel
puin 50 % din anticipri.

Pentru evaluarea polinomului ( ) 1 2 3
2
+ + = x x x p , n punctele x = 5, 7, 9 se
utilizeaz secvena,
p = [3 2 1]; v=polyval(p,[5 7 9]),
rezultnd,
v = [ 86 162 262].

Evaluarea unei matrice polinomiale se face cu funcia polyvalm, care se
apeleaz:
Y = polyvalm (p, X) calculeaz un polinom n sensul unei matrice, fiind
acelai lucru cu a substitui matricea X, n polinomul p.

Matricele Pascal sunt formate din triunghiul Pascal al coeficienilor
binomiali. Mai jos, este prezentat o matrice Pascal de ordinul 4,
X = pascal(4) ; X = [ 1 1 1 1 ; 1 2 3 4 ; 1 3 6 10 ; 1 4 10 20 ],
la care polinomul su caracteristic poate fi produs cu funcia poly,
p = poly(X) ; p = [ 1 -29 72 -29 1 ],
care reprezint polinomul 1 29 72 29
2 3 4
+ + x x x x
De menionat c matricea Pascal are o proprietate special i anume, aceea c
vectorul coeficienilor unui polinom caracteristic este palindromic, adic este la
fel i nainte i napoi.
Calcularea acestui polinom, matricea Pascal, element cu element, nu este
foarte important, dar calculul n sensul unei matrice este important, conducnd la o
matrice cu toate elementele zero i aceasta este verificarea teoremei Cayley-
Hamilton, ce spune c o matrice satisface propria sa ecuaie caracteristic.
Calcule numerice cu polinoame 247
11.4. Calculul rdcinilor sau al coeficienilor
polinomului cnd se cunosc rdcinile
Prin definiie, un numr C se numete rdcin a polinomului P(x),
dac i numai dac 0 ) ( = P . Numrul se numete rdcin multipl de ordinul
p a polinomului 0 ) ( x P , dac i numai dac ( )
p
x divide pe P, iar ( )
1 +

p
x
nu-l divide pe P. Dac p=1, rdcina se numte simpl, iar dac p=2 ea se numete
rdcin dubl.
Pentru un polinom oarecare, P(x), calculul rdcinilor este echivalent cu
rezolvarea ecuaiei P(x)=0. Dac polinomul P(x) este de gradul n, atunci va avea n
rdcini, care pot fi reale sau complexe.
Atunci cnd coeficienii polinomului sunt numere reale, rdcinile complexe
sunt perechi de numere complexe conjugate. Orice polinom de grad impar are cel
puin o rdcin real. Numrul rdcinilor reale simple este egal cu numrul de
variaii de semn ale irului lui Rolle, al polinomului P. irul lui Rolle se
construiete punnd n ordine cresctoare de la la + , rdcinile derivatei
polinomului,
'
P , inclusiv punctele de la infinit.
Determinarea rdcinilor polinomului se face, n Matlab, cu funcia roots,
care se apeleaz cu sintaxa,
r = roots(c)
n care c, este vectorul coeficienilor polinomului, iar r, vectorul coninnd
rdcinile polinomului. Vectorul coeficienilor polinomului, c, conine coeficienii
unui polinom, ordonai n ordine descrescatoare a puterilor. Dac c are n+1
componente, polinomul pe care l reprezint este de forma:
1 1
...
+
+ + +
n n
n
c s c s c .
De exemplu, polinomul:
27 72 6
2 3
s s s
este reprezentat n MATLAB prin vectorul,
c = [1 -6 -72 -27]
Rdcinile acestui polinom sunt restituite ntr-un vector coloan, astfel:
r = roots(p)
r = 12.1229
-5.7345
-0.3884.

Dac se cunosc rdcinile unui polinom, atunci determinarea coeficienilor
se face cu funcia Matlab poly, care se apeleaz cu sintaxa c = poly(r), r fiind
vectorul, rdcini ale polinomului, iar c fiind vectorul, coeficienii polinomului.
Apelat cu sintaxa,
p = poly (A)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 248
unde A este o matrice de n x n, ce restituie un vector rnd ale crui n+1 elemente
sunt coeficienii polinomului caracteristic, ( ) A I s det . Coeficienii sunt ordonai
n ordinea descresctoare a puterilor; dac un vector c, are n+1 componente,
polinomul pe care l reprezint este
1 1
...
+
+ + +
n n
n
c s c s c .
Matlab afieaz polinoamele ca vectori rnd, coninnd coeficienii ordonai
descresctor, n funcie de puteri. Ecuaia caracteristic a matricei:
A = [ 1 2 3 ; 4 5 6 ; 7 8 0 ],
este restituit ntr-un vector rnd de funcia p = poly(A), rezultnd,
p = [ 1 -6 -72 -27 ]
Rdcinile acestui polinom sunt restituite ntr-un vector coloan de funcia
roots,
r = roots(p),
rezultnd r = [ 12.1229 ; -5.7345 ; -0.3884 ].
Funciile roots i poly sunt funcii reciproce, care realizeaz trecerea de la
coeficienii polinomului, la rdcini sau de la rdcini la coeficienii polinomului.
Pentru ca cele dou funcii s fie reciproce, este necesar ca valoarea coeficientului
celui mai mari puteri s fie 1.
Pentru a exemplifica aceasta se consider polinomul,
5 3 4 2 ) (
2 3 4
+ + + = x x x x x P .
Rdcinile polinomului sunt aflate cu secvena de instruciuni,
C = [ 1 2 -4 3 5]; r = roots(C),
rezultnd r = [ -3.3345 ; 1.0410 + 0.9605i ; 1.0410 - 0.9605i ; -0.7474].
Revenirea la coeficienii polinomului se face prin, C1=poly(r), obinndu-se:
C1 = [1.0000 2.0000 -4.0000 3.0000 5.0000 ] identic cu C.
Evalund polinomul P(x), definit de vectorul C, al coeficienilor, n punctele
definite de rdcinile r, cu secvena V=polyval(C,r) se obine V= [ 0 0 0 0 ], ceea
ce confirm faptul c r, sunt rdacinile polinomului.
11.5. Reziduuri
Dac z=a este un pol sau un punct singular izolat al funciei f(z), ntr-o
coroan circular R a z < < , cu 0 > arbitrar de mic, funcia f(z) este
olomorf, cu att mai mult dac f(z) este de forma unui polinom. Fie , un cerc cu
centrul n a i de raz , coninut n aceast coroan circular, R < < .
Prin definiie, valoarea integralei ( )

z z f d nmulit cu
i 2
1
se numete
reziduul funciei f(z), relativ la polul sau punctul singular esenial izolat z=a, i se
noteaz ) ( rez a f , adic ( )

= z z f
i
a f d
2
1
) ( rez

. n loc de reziduul relativ la


Calcule numerice cu polinoame 249
punctul a, se mai spune uneori reziduul n punctul a.
Reziduul unei funcii f(z), relativ la punctul a, se poate obine ntotdeauna din
dezvoltarea n serie Laurent n jurul punctului a, fie c acesta este un pol al
funciei, fie c este un punct singular esenial izolat. Seria Laurent a funciei f(z)
este,
( )
( )
( )

+
+
=
=

= = L , 2 , 1 , 0 , d
2
1
cu , ) (
1
k
a
f
i
c a z c z f
k
k
k
k
k

.
Dac k=-1, rezult
1
) ( rez

= c a f , unde c
-1
este coeficientul lui
a z
1
din
dezvoltarea n serie Laurent a funciei f(z) n jurul punctului a.
Calculul reziduului relativ la un pol se poate face i pe alte ci.
Dac a este un pol al funciei f(z) i p este ordinul su de multiciplitate,
conform definiiei polului, funcia ( ) ( ) ( ) z f a z z
p
= are n z=a un punct ordinar
i ( ) 0 z , iar reziduul devine:
( )
( )
( )
( )
( )
( ) ( ) [ ]
( )
( )
( ) ( ) ( ) [ ]

= = =

>

=
=

1 , a - z d
2
1
1 , a - z
! 1
1

! 1
1
d
2
1
) ( rez
a z
1 - p
a z
1
p z f a z
a z
z
i
p z f
p
a
p
z
a z
z
i
a f
p
p p
p

.
Dup cum rezult din relaia de mai sus, pentru calculul reziduului este
necesar simplificarea cu z-a, care uneori poate fi dificil.
De aceea, se prefer ca f(z) s se scrie ca un ct de dou funcii, g(z) i h(z),
olomorfe ntr-o vecinatate a punctului a, respectiv
) (
) (
) (
z h
z g
z f = .
Funcia Matlab, residue, transform ctul polinoamelor ntr-o reprezentare a
reziduurilor polilor i napoi. Aceasta se poate apela cu una dintre sintaxele:
[r,p,k] = residue(b,a) gsete reziduurile, polii i termenii direci ai unei
dezvoltri pariale, a unei fracii, a unui raport ntre cele 2 polinoame, b(z)
i a(z), de forma
( )
( )
1
2
3
1
2 1
1
2
3
1
2 1
+

+

+ + + +
+ + + +
=
n
n n n
m
m m m
a z a z a z a
b z b z b z b
z a
z b
L
L
, unde b
j


i a
j

sunt elementele de ordinul j ale vectorilor de intrare b i a, iar r este
vectorul coloan al reziduurilor, p este vectorul coloan al polilor i k este
vectorul linie al termenilor liberi;
[b,a] = residue(r,p,k) returneaz coeficienii polinoamelor b i a,
numrtor i numitor, al cror raport are rezidurile r, polii p, i termenii
liberi k.

Dac nu exist poli multipli, atunci:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 250

( )
( )
( ) z k
p z
r
p z
r
p z
r
z a
z b
n
n
+

+ +

= ...
2
2
1
1
,
i numrul de poli n este n = length(a)-1 = length(r) = length(p).
Coeficientul termenului liber este nul dac length(b) < length(a), iar n caz
contrar, acesta are dimensiunea: length(k) = length(b)-length(a)+1.
Dac p(j) = = p (j+m-1) este un pol cu gradul de multiplicitate m, atunci
dezvoltarea va include i termenii de forma
( ) ( )
m
j
m j
j
j
j
j
p z
r
p z
r
p z
r

+ +

+ + 1
2
1
... .
Pentru calculul efectiv, se obin mai nti polii cu ajutorul funciei roots.
Apoi, dac fracia nu este corespunztoare, este gsit termenul direct k, folosind
funcia deconv, care realizeaz o divizare polinomial. n cele din urm,
reziduurile sunt determinate calculnd polinomul cu rdcinile individuale gsite.
Pentru rdcini care se repet, funcia residue apeleaz funcia intern resi2, care
calculeaz reziduurile n locurile n care acestea se gsesc.
Din punctul de vedere al calculului numeric, dezvoltarea parial a unei
fracii a unui polinom reprezint o problem pus greit. Dac polinomul de la
numitor a(z), este n apropiere de un polinom cu mai multe rdcini, atunci
schimbri minore, inclusiv erori ntmpltoare, pot s provoace schimbri majore
n polii i reziduurile calculate.
Pentru exemplificarea modului de lucru a funciei residue, se consider
fracia a dou polinoame, exprimat astfel:

( )
( ) 3 8 4
7 2 3 5
3
2 3
+ +
+ +
=
z z
z z z
z a
z b
.
Prin urmare, b=[ 5 3 -2 7], a=[-4 0 8 3] i atunci [r,p,k]=residue(b,a), conduce
la: r = [ -1.4167 ; -0.6653 ; 1.3320], p = [ 1.5737; -1.1644; -0.4093], k = -1.25.
Aplicnd transformarea invers, [b,a] = residue(r,p,k), se obine,
b = [ -1.25 -0.75 0.50 -1.75], a = [ 1.00 -0.00 -2.00 -0.75 ],
iar rezultatul poate fi exprimat ca:
75 . 0 00 . 2
75 . 1 50 . 0 75 . 0 25 . 1
) (
) (
3
2 3

+
=
z z
z z z
z a
z b
.
11.5.1. Utilitare pentru funcii de transfer
Modelul de stare liniar, sub form vectorial, a unui sistem dinamic este:

+ =
+ =
) ( ) (
) ( ) (
t u D x C t y
t u B x A t x&

unde: A matricea de stare; B matricea stare intrare; C matricea stare ieire; u
perturbaia; t timpul.
Transformarea parametrilor unui sistem dinamic n funcie de transfer se
realizeaz cu ss2tf, care se apeleaz cu sintaxa:
Calcule numerice cu polinoame 251
[N,D] = ss2tf(A,B,C,D,iu),
unde vectorul N, conine coeficienii numrtorului, iar vectorul D, coeficienii
numitorului, n ordinea descresctoare a puterilor.
Funcia ss2tf transform sistemul dinamic,

+ =
+ =
u D x C y
u B x A x&

n funcia de transfer H,
( ) ( )
( ) A I s
A I s C B A I s
D B A I s C
s D
s N
s H

+
= + = =

det
det det
) (
) (
) (
) (
1
.

Funia tf2ss realizeaz transformarea invers i se apeleaz cu sintaxa:
[A,B,C,D] = tf2ss(N,D).

Transformarea unui sistem ntr-o funcie de transfer de tip z, zero-poli,

( )( ) ( )
( )( ) ( )
n
n
p s p s p s
z s z s z s
k
s p
s z
s H


= =
L
L
2 1
2 1
) (
) (
) (
se face cu funcia ss2zp, care se apeleaz,
[z,p,k] = ss2zp(A,B,C,D,u).

Funia zp2ss realizeaz transformarea invers i se apeleaz cu sintaxa:
[A,B,C,D] = zp2ss(z,p,k)

Transformarea funciei parametrilor n poli-zerouri, respectiv din forma,
m m
m
n n
n
a s a s a
b s b s b
s a
s b
s H
+ + +
+ + +
= =

1
1
1
1
1
1
) (
) (
) (
L
L

n forma,
( )( ) ( )
( )( ) ( )
n
n
p s p s p s
z s z s z s
k
s p
s z
s H


= =
L
L
2 1
2 1
) (
) (
) (
se realizeaz cu funcia tf2zp, care se apeleaz cu sintaxa:
[z,p,k] = tf2zp(b,a)

Transformarea invers este realizat de funcia zp2tf, care se apeleaz cu
sintaxa:
[b,a] = zp2tf(z,p,k).
11.6. Derivata unui polinom
Polinomul, fiind cea mai comun funcie, este derivabil ntr-un punct x
0
, dac
limita,
( )
( ) x f
x x
x f x f
x x
'
0
0
) (
lim
0
=

,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 252
exist n R i este finit.
Funcia Matlab, polyder, returneaz derivatele unui polinom i se poate
apela cu una dintre sintaxe:
D = polyder (C), unde C este vectorul linie al coeficienilor polinomului,
n ordinea descresctoare a puterilor variabilei, iar D este vectorul linie al
coeficienilor polinomului derivat;
D = polyder (A, B), returneaz n vectorul D(x), derivatele produsului
) ( ) ( x B x A , astfel ca ( ) ) ( ) ( ) ( ) ( ) ( ) ( ) (
'
x B x A x B x A x B x A x D + = = ;
[M, N] = polyder (A, B), returneaz n vectorii M i N, coeficienii
numrtorului i numitorului derivatei raportului polinoamelor
) (
) (
x B
x A
,
respectiv,
2
' '
)) ( (
) ( ) ( ) ( ) (
) (
) (
) (
) (
x B
x B x A x B x A
x B
x A
x N
x M
=
|
|

\
|
= .

Pentru calculul derivatei polinomului P(x)=x
3
+2x
2
+3x+4, secvena Matlab
este:
P=[1 2 3 4] ; D=polyder(P),
obinndu-se D=[3 4 3], respectiv polinomul P

(x)=3x
2
+4x+3.
Derivata produsului ( ) ( ) x x x x + + + 2 9 6 3
2 2
este obinut cu secvena:
a = [3 6 9]; b = [1 2 0]; k = polyder(a,b),
rezultnd k = [ 12 36 42 18 ], care reprezint polinomul 18 42 36 12
2 3
+ + + x x x .

Integrarea polinomului din punct de vedere analitic se face cu funcia
polyint, care se poate apela:.
polyint(p,k) restituie un polinom reprezentnd integrala polinomului p,
folosind o constant scalar de integrare, k;
polyint (p), presupune constanta de integrare k = 0.

12. INTERPOLAREA I APROXIMAREA
DATELOR
12.1. Cutarea n tabele
La ora actual, din ce n ce mai muli parametri ai unor echipamente i
dispozitive sunt normalizai i prezentai tabelar, astfel nct, de multe ori, este
necesar cutarea valorilor n tabele de date. Cu att mai mult, tabelele sunt
utilizate n calcule economice.
Operaia prin care, o anumit valoare este citit dintr-un tabel existent, este
cunoscut sub denumirea de cutarea n tabele.
Pentru calculele termodinamice se utilizeaz frecvent tabelele
termodinamice de proprieti. n aceste tabele, parametrii termodinamici pot fi
exprimai n funcie de o singur mrime (de regul presiune sau temperatur)
domeniul saturat, sau funcie de doi parametri (de obicei presiunea i temperatura)
domeniul apei sau al aburului.
Cutarea datelor n aceste tabele unidimensionale se realizeaz cu funcia
table1, care se apeleaz cu sintaxa:
Z = table1 (tab, x), unde x este valoarea pentru care se citesc datele din
tabelul tab.
Tabelul tab trebuie s fie organizat ca o matrice, care are n prima coloan
valorile lui x (abcisa ordonat cresctor), iar cele n variabile oarecare sunt n
coloanele de la 2 la n + 1. Dac valoarea x se gsete ntre dou valori din prima
coloan a tabelului tab, funcia returneaz o valoare interpolat liniar.
Pentru a utiliza funcia table1, prima coloan a tabelului unidimensional din
care se citesc datele trebuie s fie monoton, iar valoarea lui x trebuie s se afle
ntre prima i ultima valoare din prima coloan a acestuia, adic ntre x
min
i x
max
.
Fiind dat tabelul,

x -5 -3 -1 0 2 5 7 10 15
y 14 12 9 7 4 8 10 15 20

Pentru a citi valorile y, care corespund lui x1 = -3 i x2 = 6, din tabelul
unidimensional de mai sus, se creeaz matricea coloan M, care are ca prim
coloan elementele lui x, ordonate cresctor, iar a doua coloan elementele lui y, n
ordinea de asociere cu x. Citirea din acest tabel al valorilor y1 i y2, ce corespund
lui x1 i x2, se face cu instruciunile:
M = [-5 -3 -1 0 2 5 7 10 15 ; 14 12 9 7 4 8 10 15 20];
y1=table1(M',-3); y1=table1(M',6),
obinndu-se: y1 = 12, y2 = 9, din care se observ c pentru valorile ce nu se regsesc
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 254
n tabel, se utilizeaz o interpolare liniar.
De menionat c n ultimele variante de Matlab s-a renunat la aceast
funcie, fiind nlocuit cu interp1 sau interp1q.

Cutarea datelor n tabele bidimensionale se face cu funcia table2 care se
apeleaz cu sintaxa:
Z = table2 (tab, x, y),
n care tab este tabelul bidimensional ,din care se citesc datele corespunztoare perechii
x i y.
Tabelul bidimensional tab, din care se citesc datele, trebuie s fie organizat
ca o matrice, care are n prima coloan valorile x (ordonate cresctor), iar n prima
linie valorile y (ordonate cresctor). Celelalte elemente din tabel sunt valorile Z,
asociate perechilor (x, y), iar elementul Z(1, 1) = 0.
Dac valoarea x sau y se gsete ntre dou valori din prima coloan sau linie
a tabelului tab, funcia table2 returneaz o valoare interpolat liniar.
Fie tabelul bidimensional,

y
x
1 2 3 4 5
1 7 9 11 13 15
2 8 10 14 15 17
3 4 5 8 4 6
4 1 5 7 9 11

Formarea acestui tabel se poate face cu
M=[0 1 2 3 4 5; 1 7 9 11 13 15; 2 8 10 14 15 17; 3 4 5 8 4 6; 4 1 5 7 9 11],
iar cutarea valorilor ce corespund perechilor x=2, y=3 i x=3.5, y=2.5, se face cu
table2(M,2,3); table2(M,3.5,2.5),
rezultnd valoarea 14 i respectiv 6.25, de unde se verific faptul c, pentru valori
intermediare se procedeaz la o interpolare liniar.

Pentru a utiliza funcia table2, prima linie i prima coloan a tabelului
bidimensional M, din care se citesc datele, trebuie s fie monotone. Valorile
utilizate pentru x trebuie s se afle ntre prima i ultima valoare din prima coloan
(ntre x
min
i x
max
), iar cele pentru y trebuie s se afle ntre prima i ultima valoare
din prima linie (ntre y
min
i y
max
).
De menionat c n ultimele variante de Matlab s-a renunat la aceast
funcie, fiind nlocuit cu interp2, care este o funcie de interpolare bidimensional.

Interpolarea datelor este similar cutrii n tabele, cu deosebirea c, pentru
valori intermediare se folosesc alte metode de estimare, altele dect cea liniar
utilizat n cadrul cutrii n tabele.

Interpolarea i aproximarea datelor 255
12.2. Interpolarea datelor
Multe metode numerice se refer la calculul unor funcii prin elaborri de
tabele de valori discrete sau prin rezolvri aproximative ale unor ecuaii
funcionale, prin algoritmi adaptai convenabil, n care un rol deosebit l au
controlul propagrii erorilor, viteza de convergen, ca i stabilitatea algoritmilor
respectivi. n plus, pentru calculele dinamice i de conducere n timp real a
proceselor energetice, timpul de calcul este foarte important.
n multe astfel de probleme se folosesc instrumente matematice profunde,
chiar dac acestea se traduc n ultim instan n programe de efectuare succesiv a
ctorva operaii fundamentale aritmetice sau logice. Un loc aparte, n cadrul
metodelor numerice, l au interpolrile de funcii, utilizate curent n diverse tipuri
de msurtori i prelucrri de date.
Pentru un interval fixat, R I i
p
x x x x < < < < L
2 1 0
puncte aparinnd lui
I, se poate defini o funcie teoretic R I f : , ale crei valori
i
y , sunt cunoscute
numai n nodurile
i
x , p i x f y
i i
= 0 ), ( .
Orice funcie R I F : astfel nct, ( ) p i y x F
i i
= 0 , , se numete
funcie de interpolare a lui f, sau echivalent, funcie de interpolare asociat tabelei
de p+1 valori,

0
x
1
x
2
x ...
p
x
0
y
1
y
2
y ...
p
y

Evident c o astfel de funcie nu este unic, iar graficul ei trece prin punctele
( ) p i y x
i i
0 , , . De exemplu, n cazul interpolrii liniare, graficul lui F este linia
poligonal cu vrfurile ( ) p i y x
i i
0 , , .
O alt funcie de interpolare asociat tabelei anterioare este polinomul lui
Lagrange de interpolare, care este un polinom P, de p P grad , cu coeficieni
reali, astfel nct ( ) p i y x P
i i
= 0 , i ( ) ) (x P x f pentru orice I x .
Se demonstreaz uor c polinomul Lagrange de interpolare, asociat unei
tabele de valori, exist i este unic. Pentru orice j, p j 0 , notnd
cu
j
L polinomul
( )
( ) ( )( ) ( )
( ) ( )( ) ( )
n j j j j j j
n j j
j
x x x x x x x x
x x x x x x x x
x L


=
+
+
L L
L L
1 1 0
1 1 0
,
atunci polinomul Lagrange ( ) x P , asociat tabelei de interpolare este
( ) ( )

=
=
p
j
j j
x L y x P
0
.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 256
Un avantaj al reprezentrii prin polinoamele Lagrange o constituie faptul c
polinoamele
j
L depind numai de alegerea nodurilor de interpolare, dar la adugarea
unor noi noduri, calculul lui
j
L trebuie refcut, ceea ce este un defect.
Polinomul
j
L depinde de x, ca i polinomul ( ) x P , i, prin urmare, funcia de
aproximare este un polinom de x, pentru care se pot apoi calcula valorile n orice
punct x, nu numai n noduri, ci i ntre noduri, justificnd astfel termenul de
interpolare.
Pentru tabela,
0 1 2 4
1 0 0 -3
avem 3 , 0 , 0 , 1 , 3
3 2 1 0
= = = = = y y y y p i
( )
( )( )( )
( )( )( )
( )( )( )
( )( )( ) 8
8 14 7
4 2 1
4 2 1
2 3
3 0 2 0 1 0
3 2 1
0
+
=


=


=
x x x x x x
x x x x x x
x x x x x x
x L ,
( )
( )( )( )
( )( )( )
( )( )
3
4 2
3 1 2 1 0 1
3 2 0
1

=


=
x x x
x x x x x x
x x x x x x
x L ,
( )
( )( )
4
4 1
2

=
x x x
x L , ( )
( )( )
24
2 1
3

=
x x x
x L .
Cu acestea, polinomul de interpolare este
( ) ( ) ( ) 4 8 5
4
1
) ( 3 ) (
2 3
3 0
0
+ = = =

=
x x X x L x L x L y x P
p
j
j j
.
Pe baza algoritmului de mai sus, se poate scrie relativ uor o funcie care s
interpoleze prin metoda polinoamelor lui Lagrange.

n ultimii ani a aprut o noiune nou, strns legat de interpolarea
polinomial, anume cea de funcie spline, polinomial pe poriuni i suficient de
neted. Mai precis, dac [ ] b a I , = este un interval i b x x x a
n
= < < < =
+1 1 0
: L
este o diviziune cu n noduri interioare, o funcie R I s : se numete spline de
ordinul k ( 1 k ), relativ la , dac funcia s este de clas ) (
1
I C
k
i n orice
interval [ ]
1
,
+ i i
x x , cu n i 0 , s coincide cu un polinom (funcie polinomial) cu
coeficieni reali de grad k.
Ca urmare, orice polinom este funcie spline, nu i reciproc. De exemplu,
pentru R fixat, funcia
( )

pentru 0,
pentru ,

>
=


x
x x
f
k

este spline de ordinul k i nu este polinom, deoarece are o infinitate de zerouri, fr a fi
funcie nul.
Deoarece mulimea funciilor spline, de ordinul k, relativ la o diviziune
Interpolarea i aproximarea datelor 257
b x x x a
n
= < < < =
+1 1 0
L , este un spaiu vectorial real de dimensiune 1 + + k n ,
pentru determinarea unei funcii spline se impun 1 + + k n condiii.
Aplicnd acest fapt, rezult c, dac R I f : este o funcie de clas
) (
1
I C
k
, atunci exist o funcie spline unic s, de ordin 2k-1, astfel nct s fie
verificate urmtoarele n+2k condiii:
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )

= = =
= = =
= =


b f b s b f b s b f b s
a f a s a f a s a f a s
x f x s x f x s
k k
k k
n n
) 1 ( ) 1 (
) 1 ( ) 1 (
1 1
, , ,
, , ,
, ,
L
L
L
.
Aproximarea ( ) ( ) x s x f pentru orice I x este mult mai precis dect cea
cu polinoame Lagrange.

Funcia Matlab spline realizeaz interpolarea cubic spline i se apeleaz cu
sintaxa:
yy = spline(x,y,xx),
n care x sunt valorile n care este dat funcia, un interval [a, b] mai rar, y valorile
funciei sau nsi funcia, xx este o diviziune interioar b x x x a
n
= < < < =
+1 1 0
: L
cu n noduri, iar yy sunt valorile funciei spline calculate n punctele xx, interioare
intervalului [a, b]. Vectorul x specific punctele n care este dat valoarea lui y i
trebuie s fie ordonate cresctor. Dac y este o matrice, atunci interpolarea este
realizat pentru fiecare linie a lui y i, n acest caz, length(x) trebuie s fie egal cu
size(y, 2) , iar yy este size(y, 1) cu length(xx ).
Aceast funcie este opusul funciei interp(x, y, xx, 'spline ), care realizeaz
interpolarea pentru fiecare coloan a matriciei y i la care, length(x) trebuie s fie
egal cu size(y,1), iar yy-ul, care rezult, are length (xx) cu size(y,2).
Dac y conine dou valori n plus dect numrul de intrri ale lui x, atunci
prima i ultima valoare ale lui y sunt folosite ca pant pentru funcia 'spline' cubic.
Cu alte cuvinte:
f(x) = y(:,2:end-1), df(min(x)) = y(:,1), df(max(x)) = y(:,end)

Pentru exemplificare, se genereaz o curb sinus, apoi se realizeaz o curb
spline pe o reea mai fin de 4 ori i se traseaz graficul din figura 12.1. Secvena
Matlab este:
x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx);
plot(x,y,'o',xx,yy); xlabel('x') ; ylabel('y').

Urmtorul exemplu ilustreaz folosirea canelurilor complete, acolo unde
sunt recomandate pantele finale. Sunt impuse pante egale cu zero la capatele
interpolantului, la valori ale unei anumite distribuii,
x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0]; cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-') ; xlabel('x') ; ylabel('y'),
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 258
avnd graficul redat n figura 12.2.

Fig. 12.1. Interpolarea spline a funciei sin

Fig. 12.2. Interpolarea spline cu pante finale
Extrapolarea populaiei SUA, la nivelul anului 2000, pe baza datelor de
recensmnt, din perioada 19001990 ,se face cu secvena:
t = 1900:10:1990;
p = [ 75.995 91.972 105.711 123.203 131.669 ...
150.697 179.323 203.212 226.505 249.633 ]; spline(t,p,2000),
rezultnd 270.606 persoane. Dup cum se observ din acest exemplu, xx pot fi i
punctele n care se calculeaz funcia spline.
Interpolarea i aproximarea datelor 259
Secvena Matlab,
x = pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1];
pp = spline(x,y); yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or'), axis equal
genereaz graficul din figura 12.3 sub forma unui cerc, cu 5 puncte: y(:,2),...,y(:,6)
notate cu o- uri. Se observ c y-ul conine cu dou valori mai multe dect x, iar
acestea, y(: , 1) i y ( : , end) sunt folosite ca pante finale.

Fig. 12.3. Interpolarea spline a unui cerc prin 5 puncte

Evaluarea polinomului de interpolare spline, n nodurile reelei, se face cu
funcia ppval, apelat cu,
v = ppval (pp, xx)
care restituie valoarea n punctele xx ale polinomului coninut de pp, aa cum este
construit de funcia spline.
Apelat sub forma,
v = ppval (xx, pp)
restituie acelai rezultat, dar poate fi folosit i pentru a fi chemat ca funcie argument de
ctre alte funcii, ca de exemplu fminbnd, fzero i quand.
Pentru exemplificare, comparm rezultatele integrrii funciei cos,
a = 0; b = 10; int1 = quad(@cos,a,b,[],[]),
care are ca rezultat,
int1 = -0.5440,
cu rezultatul integrarii polinomului pp, ce aproximeaz funcia cos prin interpolarea
spline a valorilor x i y,
x = a:b; y = cos(x); pp = spline(x,y); int2 = quad(@ppval,a,b,[],[],pp),
avnd ca rezultat,
int2 = -0.5485,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 260
cu observaia c int1 calculeaz integrala funciei cosinus pe intervalul [a, b], n timp ce
int2 furnizeaz integrala pe acelai interval, dar a polinomului pp.

Interpolarea periodic utilizeaz polinoame Hermite de interpolare i se
realizeaz cu funcia pchip, care se apeleaz cu una dintre sintaxele:
yi=pchip(x,y,x) restituie vectorul yi, ce conine elemente ce corespund
elementelor lui xi, determinate prin metoda interpolrii spline cubice
dintre vectorul x, vectorul punctelor de calcul, i vectorul y, vectorul
datelor y cunoscute, iar dac y este o matrice, atunci interpolarea este
efectuat pentru fiecare coloan a lui y i yi, length(xi)-x-size(y,2);
pp=pchip(x,y) returneaz o structur polinomial, care este folosit de
funcia ppva1, unde x poate fi un vector linie sau coloan, y este un
vector linie sau coloan cu aceeai lungime ca i x, sau o matrice cu
coloane length(x).

Funcia pchip gsete valori ale funciei interpolate, de la baza P(x) la
punctele intermediare, ca de exemplu:
pe fiecare subinterval x
k
x x
k+1
, P(x) este o interpolare cu polinoame
Hermite cubice, care dau valori i pante precise pentru cele dou puncte
mrginae;
P(x) interpoleaz y, de exemplu P(x
j
)=y
j
, i prima derivat P(x) este
continu, derivata a doua P(x) este probabil necontinu, putnd sri la
x
j
;
pantele pentru x
j
sunt alese astfel nct, P(x) conserv forma i ine cont
de monotonicitate, ceea ce nseamn c, pe intervalele n care datele sunt
monotone, exist P(x), iar n punctele n care variabila are punct de
extrem local, P(x) nu exist.

De menionat c, dac y este o matrice, P(x) se aplic pentru fiecare coloan
a lui y.
Comparnd funcia spline cu funcia pchip se desprind urmtoarele:
polinoamele spline S(x,) sunt construite n acelai mod ca i P(x);
spline alege pantele x
j
diferite, cu alte cuvinte fcnd ca S(x) continu,
dar determin un rezultat incert, pentru S(x) continu;
spline determin multe rezultate corecte, dac datele conin o funcie
incert;
pchip nu depete cea mai mic oscilaie, dac data este incert;
pchip este mai puin costisitoare, ca timp de calcul, de reglat;
cele dou funcii sunt la fel de costisitoare de evaluat.

Pentru compararea funciei spline cu pchip, respectiv a interpolrii spline
cubic cu cea cu polinoamele lui Hermite, se prezint grafic n figura 12.4, att
valorile iniiale, ct i funciile spline s i pchip p, realizate cu secvena Matlab:
Interpolarea i aproximarea datelor 261
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('date','p - pchip','s - spline',4); xlabel('x'); ylabel('y').

Fig. 12.4. Comparea interpolrii cu funciile spline i pchip

Realizarea unei interpolri de tip unidimensional sau pe baza unui tabel, se
face cu funcia interp1, care poate fi apelat cu una dintre secvene:
yi = interp1(x,y,xi) restituie vectorul yi, ce conine elementele
corespunztoare lui x,i determinate prin metoda interpolrii cubice dintre
vectorul x, care specific abscisa i y, care specific ordonata, iar dac y
este o matrice, atunci interpolarea este executat pentru fiecare coloan a
lui y, rezultnd un yi cu length(xi)-x-size(y,2);
yi = interp1(y,xi) presupune c x=1:N, unde N este lungimea vectorului
y sau size(y,i), pentru cazul cnd y este matrice;
yi = interp1(x,y,xi, 'method') interpoleaz folosind urmtoarele metode,
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'linear' - interpolare linear, care este metoda implicit, cnd nu se
specific;
o 'spline' - interpolare spline cubic;
o 'pchip' - interpolarea cubic cu polinoamele lui Hermite;
o 'cubic' asemenea cu 'pchip';
o 'v5cubic' interpolare cubic utilizat n versiunea Matlab 5;
metodele 'nearest', 'linear' i 'v5cubic' returneaz NaN pentru fiecare
element a lui xi, care este n afara intervalului lui x, dar toate celelalte
metode extrapoleaz i n afara intervalului de valori;
yi = interp1(x,y,xi,method,'extrap') folosete metode speciale pentru
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 262
interpolarea n afara intervalului;
yi = interp1(x,y,xi,method,extrapval) determin o valoare scalar n
afara intervalului de valori, NaN i 0 sunt adesea folosite pentru
extrapval.

Funcia interp1 este o comand de interpolare ntre puncte. Ea gsete valori
pentru punctele intermediare, pentru o dimensiune a funciei f(x). Funcia f(x) este
redat n figura 12.5, prezentnd i relaia dintre vectorii x, y, xi i yi.

Fig. 12.5. Compararea interpolrii cu funciile spline i pchip
Interpolarea este acelai lucru cu cutarea n tabele. n acest sens, tabelul
este [x, y] i cutarea n elementele lui xi i x este realizat de interp1, care este
ajutat de locaia lor i returneaz valori yi, ce sunt interpolate n elementele lui y.

Funcia
yi = interp1(x,y,xi)
lucreaz asemntor cu interp1, dar este mai rapid dect aceasta, pe spaii neuniforme,
deoarece nu verific intrrile. Pentru folosirea interp1q, x trebuie s fie vector coloan
descresctor monoton i y trebuie s fie un vector coloan sau matrice ,avnd lungimea
liniei length(x).

Pentru exemplificare, se genereaz un traseu sinusoidal prin 11 puncte i
apoi se interpoleaz, pentru o abscis mai fin, cu 41 puncte, cu secvena
x = 0:10; y = sin(x); xi = 0:.25:10;
yi = interp1(x,y,xi);
plot(x,y,'o',xi,yi) ;
gtext('linear'); hold on;
yi = interp1(x,y,xi,'spline');
plot(x,y,xi,yi) ;
xlabel('x') ; ylabel('y') ; gtext('spline');
rezultnd curba din figura 12.6.
Pentru doi vectori, reprezentnd recensmntul din anii 1900 pna n 1990 ai
populaiei SUA, n milioane de oameni,
t = 1900:10:1990;
p = [ 75.995 91.972 105.711 123.203 131.669...
150.697 179.323 203.212 226.505 249.633];
Interpolarea i aproximarea datelor 263
expresia p75=interp1(t,p,1975) interpoleaz ntre datele din recensmnt, pentru a afla
populatia din 1975, obinnd p75= 214.8585.

Fig.12.6. Comparaia ntre metoda 'linear' i 'spline'
Uneori este mai convenabil s gndim interpolarea ca un tabel, unde datele
sunt stocate ntr-un singur tabel. Dac proporiile recensmntului sunt stocate ntr-
un tabel simplu, de 5 pe 2,
tab = [ 1950 150.697
1960 179.323
1970 203.212
1980 226.505
1990 249.633 ]
atunci populatia din 1975, obinut din tabel, din matricea tab, este:
p = interp1(tab(:,1),tab(:,2),1975)
p = 214.8585.

Interpolarea unidimensional, folosind metoda transformatei Fourier
(FFT - Fast Fourier Transform) se realizeaz cu funcia interpft, apelat cu una
dintre sintaxele:
y=interpft(x,n) calculeaz un vector y, ce conine valorile periodice ale
funciei x, alctuit din n egaliti;
y=interpft(x,n,dim) calculeaz doar pentru dimensiunile specificate.
Dac length(x)=m i x este n intervalul dx, atunci noua selecie pentru y este
dy=dx*m/n. De reinut este faptul c n nu poate fi mai mic dect m.
Dac x este o matrice, interpft calculeaz pe coloana lui x, returnnd
matricea y cu acelai numr de coloane ca i x, dar cu n linii.
Funcia interpft folosete metoda FFT. Vectorul originar x este transformat
ntr-un domeniu Fourier, folosind fft i apoi se transform napoi, n mai multe
puncte.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 264
Pentru exemplificare, se consider datele obinute cu funcia cosinus pentru
10 pai pe perioad, |

\
|
=
10
2
cos
k
y

i se interpoleaz pentru un k dublu,
verificnd apoi valorile obinute. Aceasta se realizeaz cu secvena,
k= 0 : 9; x = cos (2*pi*k/10); y1 = interpft (x, 20); k1 = 0 : 19;
y2 = cos (2*pi*k1/20); d = max (y1 - y2) ;
i se obine rezultatul: d = 3.3307e-016.
Diferena maxim ntre valorile interpolate i cele reale este egal cu ordinul
de mrime al celui mai mic numr reprezentabil n calculator.
Interpolarea datelor n dou dimensiuni, se realizeaz cu funcia interp2,
care se apeleaz cu una dintre sintaxe:
ZI=interp2(X,Y,Z,XI,YI) returneaz matricea ZI, ce conine elementele
corespunztoare lui XI i YI i este determinat din interpolarea n dou
dimensiuni, a funciei specifice a matricei X, Y i Z, cu observaia c X i
Y trebuie s fie monotone i regulate, ca i cum ar fi produse de funcia
meshgrid, iar matricele X i Y specific punctele la care se cunoate data
Z, iar n afara intervalului valorile returnate sunt NaN; Xi i YI pot fi
matrice, n cazul n care se returneaz valorile lui Z, corespunzatoare
punctelor (XI(i,j),YI(i,j));
ZI=interp2(Z,XI,YI) presupune X=1:n i Y=1:m, unde [m,n]=size(Z);
ZI=interp2(Z,ntimes) dezvolt Z, prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv, ntimes;
ZI=interp2(Z) comanda este similar cu interp2(Z,1);
ZI=interp2(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode,
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'linear' - interpolare bilinear, care este metod implicit, cnd nu
se specific;
o 'spline' - interpolare spline cubic;
o 'cubic' - interpolare bicubic.
Funcia interp2 realizeaz interpolarea dintre puncte. Dac gsete valori cu
dou dimensiuni a funciei f(x,y) calculeaz valoarea dintre puncte, dup cum se
prezint n figura 12.7.

Fig.12.7. Interpolarea cu interp2
Interpolarea i aproximarea datelor 265
Interpolarea face acelai lucru ca i cutarea n tabel, dar n acest caz tabelul
este tab=[NaN,Y:X,Z] i interp2 folosete valorile XI n X, YI n Y, i se obine ZI,
n Z.
Pentru exemplificare, se interpoleaz maximul unei funcii, cu o reea mai
fin i se prezint n figura 12.8,
[X,Y] = meshgrid(-3:.25:3); Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3); ZI = interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15); hold off
axis([-3 3 -3 3 -5 20]).

Fig.12.8. Interpolarea maximului unei funcii

n variantele anterioare de Matlab, mai existau funciile: interp4, care
interpola dup o lege biliniar, funcia interp5, care interpola dup o lege bicubic
i table2, care realiza cutarea n tabele bidimensionale. n versiunile mai noi,
aceste funcii au fost nlocuite de ctre interp2.

Interpolarea valorilor tridimensionale sau cutarea n tabele
tridimensionale, se realizeaz cu funcia interp3, care se apeleaz cu una dintre
sintaxele:
VI=interp3(X,Y,Z,V,XI,YI,ZI), unde X, Y, Z specific punctele unde este
dat V, interpoleaz pentru a gsi VI, valorile funciilor tridimensionale V,
la punctele vectorilor XI, YI i ZI, iar XI, YI, ZI trebuie s fie vectori de
aceeai dimensiune; argumentele vectorilor care nu au aceeai mrime
sau amndoi sunt vectori linie sau coloan, sunt trecui prin meshgrid,
creat de vectorul Y1, Y2, Y3;
VI=interp3(V,XI,YI,ZI) presupune X=1:N, Y=1:M, Z=1:P, unde
[M,N,P]=size(V);
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 266
VI=interp3(V,ntimes) dezvolt V prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv ntimes;
VI=interp3(V), comanda este similar cu interp3(V,1);
ZI=interp3(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode:
o 'linear' - interpolare bilinear, care este metoda implicit, cnd nu
se specific;
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'cubic' - interpolarea cubic;
o 'spline' - interpolare spline.

n afara domeniului specificat, funcia interp3 returneaz NaN.
Pentru exemplificare, se genereaz cu funcia Matlab flow, profilul unui jet
submersibil ntr-un rezervor infinit, se stabilesc punctele de calcul egal distanate
pe cele trei direcii, cu meshgrid i apoi se vizualizeaz fiecare volum (fagure), cu
funcia slice, fiind redat i n figura 12.9,
[x,y,z,v] = flow(10); [xi,yi,zi] = meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);
vi = interp3(x,y,z,v,xi,yi,zi); % V is 31-by-41-by-27
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]),shading flat;xlabel('x');ylabel('y'); zlabel('z');

Fig.12.9. Interpolarea cu interp3
Interpolarea n spaii n-dimensionale sau cutarea n tabele n-dimensionale
se realizeaz cu funcia interpn, care se apeleaz cu una dintre sintaxele:
VI=interpn(X1,X2,X3,...,V,Y1,Y2,Y3,...) interpoleaz, pentru a afla VI,
valorile funciei multidimesionale V, la punctele Y1, Y2, Y3 etc. i este
chemat cu 2*N+1 argumente;
VI=interpn(V,Y1,Y2,Y3,...) presupune X2=1:size(V,2), X3= 1:size(V,3),
Interpolarea i aproximarea datelor 267
etc.
VI=interpn(V,ntimes) dezvolt V, prin interpolri dintre fiecare element,
funcionnd ca o iteraie recursiv ntimes,
VI=interpn(V), comanda este similar cu interpn(V,1);
ZI=interpn(X,Y,Z,XI,YI,'method') interpoleaz folosind urmtoarele
metode:
o 'linear' - interpolare bilinear, care este metoda implicit, cnd nu
se specific;
o 'nearest' - interpolarea vecinilor cei mai apropiai;
o 'cubic' - interpolarea cubic;
o 'spline' - interpolare spline.

Vectorii X1, X2, X3 etc. specific punctele la care este dat V. n afara
intervalului, se returneaz NaN. Vectorii Y1, Y2, Y3 etc. trebuie s aib aceeai
dimensiune. Dac vectorii nu au aceeai mrime sau au orientare mixt (de
exemplu amndoi vectori linie sau vectori coloan), se apeleaz funcia ngrid,
pentru a crea Y1, Y2, Y3 etc.
Funcia interpn lucreaz bine pentru orice tablou n-dimensional, ncepnd
de la n 2.

Interpolarea prin metoda distanei inverse a datelor, funcie de dou
variabile, se realizeaz cu funcia griddata, care se apeleaz:
ZI=griddata(x,y,z,XI,YI) caut o suprafa de forma z=f(x,y,) a datei
oarecare, specificate de spaiul vectorilor (x,y,z) i interpoleaz aceast
suprafa la puncte specificate de (XI,YI), pentru a produce ZI;
[XI,YI,ZI]=griddata(x,y,z,xi,yi) returneaz interpolarea matricei ZI i
calculeaz matricele XI i YI, formate din vectori linie xi i vectori
coloan, yi;
[]=griddata(, 'method') utilizeaz o metod specificat de
interpolare, unde 'method' poate fi:
o 'linear' - metoda implicit, care utilizeaz interpolarea liniar,
bazat pe triunghiuralizarea Delaunay;
o 'cubic' - interpolare cubic bazat pe triunghiuri Delaunay;
o 'nearest' - interpolarea vecinilor celor mai apropiai cu triunghiuri
Delaunay;
o 'v4' -interpolarea cu metoda reelei.
Valorile matricei Zi, corespund elementelor matricelor Xi i Yi. XI, poate fi
un vector linie, iar, n cazul acesta, este specificat o matrice cu coloane constante.
Similar, YI poate fi un vector coloan i atunci, este specificat o matrice cu linii
constante.
Xi i YI pot fi matrice, i, n acest caz, griddata returneaz valorile
corespunztoare punctelor (XI(i,j),YI(i,j)).
Pentru exemplificare, se consider 100 puncte aleatoare ntre -2.0 i +2 i se
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 268
afieaz n figura 12.10 funcia
2 2
y x
e x z

= , exprimat cu secvena,
rand('seed',0); x = rand(100,1)*4-2; y = rand(100,1)*4-2;
z = x.*exp(-x.^2-y.^2);
unde x, y i z sunt acum vectori ce conin date i se definete o reea de date,
ti = -2:.25:2; [XI,YI] = meshgrid(ti,ti); ZI = griddata(x,y,z,XI,YI);
cu care se traseaz graficul,
mesh(XI,YI,ZI), hold; plot3(x,y,z,'o'), hold off;
xlabel('x'); ylabel('y'); zlabel('z').

Fig.12.10. Interpolarea cu griddata

Interpolarea datelor 3-D sau hipersuprafee, se face cu funcia griddata3,
care se apeleaz similar ca i griddata.
De exemplu,
w = griddata3(x, y, z, v, xi, yi, zi)
construiete o hipersuprafa w=f(x,y,z) de date, n spaiul definit de vectorii (x, y, z, v)
i interpoleaz aceast hipersuprafa, n puncte specificate de (xi,yi,zi), pentru a
produce w, care este de aceeai mrime ca xi, yi i zi. Punctele (xi,yi,zi) sunt de obicei
uniforme, fiind realizate cu meshgrid .

Interpolarea datelor n-D sau n-suprafee, se face cu funcia griddatan, care
se apeleaz similar ca i griddata. Cu sintaxa,
yi = griddatan(X, y, xi)
se determin o hipersuprafa y=f(X) de date n spaiul vectorilor (X,y) i interpoleaz
aceast hipersuprafa, n punctele specificate de xi, pentru a determina yi. Punctele
specificate xi, pot fi neuniforme.
X, este de dimensiunea m-n, reprezentnd m puncte n spaiul n-D. Vectorul
y este de dimensiunea a m-a, reprezentnd m valori ale hipersuprafeei f(X).
Interpolarea i aproximarea datelor 269
Vectorul xi este de mrimea p-n, reprezentnd p puncte n spaiul n-D. Vectorul yi,
este de lungime p, ce aproximeaz valorile lui f(xi). Hipersuprafeele trec
ntotdeauna prin punctele (X,y). De cele mai multe ori, xi este o reea uniform,
realizat prin meshrid.
12.3. Aproximarea datelor prin regresie polinomial
Pentru ca o aproximare oarecare s fie considerat cea mai bun, suma
ptratelor distanelor de la fiecare punct, la curba aproximat, trebuie s fie
minim. Cu aceast condiie, este posibil ca nici un punct al setului de date s nu se
gaseasc pe curba aproximat, ceea ce separ net, aproximarea de interpolare, la
care unele puncte sunt situate pe curb.
La baza majoritii metodelor de aproximare st metoda celor mai mici
ptrate, care consider c cea mai bun aproximare este aceea pentru care suma
ptratelor erorilor este minim,
( ) ( )

=
= =
n
i
c i d i
x x x
1
2
, ,
min
unde
d i
x
,
, sunt valorile date (cunoscute), iar
c i
x
,
sunt valorile calculate.
Regresia polinomial este o aproximare a unui set de date printr-un polinom
de forma:


+ + + + = =
n
i
n n
n n i n
a x a x a x a x a x p
0
1
1
1 0
... , ) (
Dac setul de date are n elemente, toate datele se afl pe curba de
aproximare. Pentru un grad al polinomului mai mic dect numrul de date,
aproximarea este cu att mai bun, cu ct gradul polinomului este mai apropiat de
numrul de date. Utilizarea unui polinom de aproximare, cu grad mai mare dect
setul de date, poate conduce la erori de aproximare considerabile.
Determinarea celei mai bune aproximri a unui set de date (x, y), cu un
polinom de ordin n, folosete funcia polyfit i se apeleaz cu una dintre sintaxele:
p=polyfit(x,y,n) gsete coeficienii polinomului p(x), de grad n, care se
potrivete cu datele de intrare p(x(i)), n punctul y (i), iar rezultatul p,
este un vector linie, de lungime n+1, coninnd coeficienii polinomului
n ordine descresctoare a puterilor,
( )
1
1
2 1
...
+

+ + + + =
n n
n n
p x p x p x p x p
[p,S]=polyfit(x,y,n) restituie coeficienii p i o structur S, pentru a se
folosi cu funcia polyval, n scopul obinerii erorii estimate care, dac
erorile din datele de intrare y sunt independente de constanta variabilei,
produce erori ce conin cel puin 50 % din cele prezise;
[p,S,mu]=polyfit(x,y,n) gsete ceoficienii polinomului n
2
1


=
x
x ,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 270
unde
1
= mean(x) i
2
= std (x), mu este un vector cu dou elemente
[
1
,
2
], iar aceste transformri de centrare i gradare mbuntesc
proprietile numerice, att ale polinomului, ct i al algoritmului de
ajustare.

Pentru exemplificare, se consider ajustarea funciei de eroare, erf(x), printr-un
polinom n x. nti, se produce un vector de x puncte, aflat n intervalul [0, 2.5], iar apoi
se calculeaz funcia erf (x) n aceste puncte,
x = (0: 0.1: 2.5)'; y = erf(x);
Coeficienii polinomului de gradul 6 sunt calculai cu p=polyfit(x,y,6),
rezultnd p = [ 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004], care
sunt 7 coeficieni, iar cu acetia polinomul este:
0004 . 0 1064 . 1 1471 . 0 7435 . 0 4217 . 0 0983 . 0 0084 . 0 ) (
2 3 4 5 6
+ + + + = x x x x x x x f
Pentru a se vedea ct de bine este ajustat, se calculeaz polinomul n
punctele iniiale, cu funcia f = polyval(p,x), sau n Matlab:
f=p(1).*x.^6+p(2).*x.^5+p(3).*x.^4+p(4).*x.^3+p(5).*x.^2+p(6).*x+p(7).
Se formeaz un tabel, care afieaz datele ajustarea i eroarea, cu
instruciunea,
table=[x y f y-f],
rezultnd :
table = [ 0 0 0.0004 -0.0004
0.1000 0.1125 0.1119 0.0006
0.2000 0.2227 0.2223 0.0004
0.3000 0.3286 0.3287 -0.0001
0.4000 0.4284 0.4288 -0.0004
0.5000 0.5205 0.5209 -0.0004
0.6000 0.6039 0.6041 -0.0002
... ... ... ...
1.9000 0.9928 0.9925 0.0003
2.0000 0.9953 0.9951 0.0002
2.1000 0.9970 0.9969 0.0001
2.2000 0.9981 0.9982 -0.0001
2.3000 0.9989 0.9991 -0.0003
2.4000 0.9993 0.9995 -0.0002
2.5000 0.9996 0.9994 0.0002]
Deci, n acest interval, ajustarea este bun ntre trei i patru cifre. n afara
acestui interval, graficul arat o deteriorare rapid a comportrii polinomului, dup
cum se observ din figura 12.11, realizat cu secvena Matlab:
x=(0: 0.1: 5)'; y=erf(x); f=polyval(p,x); plot(x,y,'o',x,f,'-') ; axis([0 5 0 2]);
xlabel('x'); ylabel('y'); gtext(y); gtext('y'); gtext('f').
Interpolarea i aproximarea datelor 271

Fig.12.11. Interpolarea cu polyfit
Algoritmul de realizare a funciei polifyt formeaz matricea Vandermonde,
ale crei elemente sunt puteri ale lui x,

j n
i j i
x v

=
,

apoi folosete operatorul \ pentru a rezolva ecuaia V
p
y.
12.4. Analiz geometric utilizat n interpolare
Dup cum am artat anterior, o serie de funcii de interpolare, de dou sau
mai multe dimensiuni, utilizeaz triunghiularizarea Delaunay.
Fiind dat un set de puncte, triunghiularizarea Delaunay este un set de linii,
care conecteaz fiecare, punct cu punctul su vecin, fiind legat de diagrama
Voronoi, n sensul c cercul care delimiteaz triunghiul Delaunay are centrul n
vrful poligonului Voronoi, dup cum se observ din figura 12.12.

Fig.12.12. Triunghiul lui Delaunay i poligonul Voronoi
Funcia delaunay se apeleaz cu
TRI = delaunay (x, y)
i, pentru punctele date, definite de vectorii x i y, restituie un set de triunghiuri astfel
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 272
nct, nici un punct s nu fie coninut n oricare dintre triunghiurile care este delimitat
de cerc. Pentru fiecare linie a matriciei m x 3, TRI definete un astfel de triunghi i
conine indicii, n x i n y. Dac punctele sunt coliniare sau x este zero, triunghiurile nu
pot fi calculate, iar delaunay restituie o matrice goal.
Pentru vizualizarea triunghiurilor Delaunay se folosete una dintre funciile,
triplot - afieaz triunghiurile definite de matricea TRI de m x 3;
trisurf - afieaz fiecare triunghi definit de matricea TRI, m x 3, ca o
suprafa n spaiul 3-D, iar pentru a vedea un spaiu 2-D, se pot da
valori constante pentru dimensiunea a 3-a unui vector, ca de exemplu,
trisurf(TRI,x,y,zeros(size(x)));
trimesh - afieaz fiecare triunghi definit de matricea TRI de m x 3, ca o
reea n spatiul 3- D, iar pentru a vizualiza o suprafa n spatiul 2-D, se
poate introduce un vector, cu unele valori constante, pentru dimensiunea
a 3-a, ca de exemplu trimesh(TRI,x,y,zeros(size(x))).

Pentru exemplificare, se traseaz triunghiularizarea Delaunay pentru 10
puncte aleatoare i se compar cu diagrama Voronoi, realizat pentru aceleai
puncte, redat n figura 12.13 i realizat cu secvena Matlab:
rand('state',0); x = rand(1,10); y = rand(1,10);
TRI=delaunay(x,y); subplot(1,2,1);
trimesh(TRI,x,y,zeros(size(x))); view(2);
axis([0 1 0 1]); hold on; plot(x,y,'o'); set(gca,'box','on');hold off
[vx, vy] = voronoi(x,y,TRI); subplot(1,2,2);
plot(x,y,'r+',vx,vy,'b-'); axis([0 1 0 1])


Fig.12.13. Comparaie ntre triunghiul lui Delaunay i poligonul Voronoi
Interpolarea i aproximarea datelor 273
Realizarea unor tetraedre Delaunay n spaiu 3-D, se face cu funcia
delaunay3, care se apeleaz cu sintaxa:
TES = delaunay3(x,y,z)
i se restituie o matrice TES, n care fiecare rnd conine indicii punctelor n (x, y, z),
care realizeaz un tetraedu n spaiul tridimensional discretizat (x, y, z). TES este o
matrice de dimensiune n-fee-x-4, unde n-fee este numrul faetelor n
discretizare, iar x, y i z sunt vectori de mrimi egale. Dac punctele date sunt coliniare
sau dac x, y sau z definesc un numr insuficient de puncte, triunghiurile nu pot fi
calculate, iar funcia delaunay3 restituie o matrice goal.

Discretizarea Delaunay n dimensional se realizeaz cu funcia delaunayn,
apelat cu
T = delaunayn(X),
care calculeaz un set de discretizri n-dimensionale, astfel nct nici un punct din X s
nu fie coninut n vreo sfer circumscris acestuia. X este o matrice m-x-n, reprezentnd
m puncte n spatiul n- D, iar fiecare coloan a lui T conine indicii din X.

Gsirea triunghiularizii Delaunay pentru punctele vecine se face cu funcia
dsearch, care se poate apela:
K=dsearch (x,y TRI,xi,yi) cnd restituie indicii din x i y ai celui mai
apropiat punct de punctul (xi, yi), avnd nevoie de o triunghiularizare
TRI a punctelor x, y, obinut cu funcia delaunay, iar dac xi i yi sunt
vectori, atunci K este un vector de aceeai mrime;
K=dsearch(x,y,TRI,xi,yi,S) folosete o matrice S, n loc de a calcula de
fiecare dat,
S = sparse(TRI(:,[1 1 2 2 3 3]),TRI(:,[2 3 1 3 1 2]),1,nxy,nxy),
unde nxy = prod(size(x))

Cutarea triunghiularizrii Delaunay pentru punctele vecine din spaiul n-
D, se realizeaz cu funcia dsearchn, care se apeleaz cu:
k=dsearchn(X,T,XI) sau k=dsearchn (X,T,XI, outval ) restituie indicii k,
ai celui mai apropiat punct n X, pentru fiecare punct n XI, numai dac
un punct se situeaz n afara nfurtoarei convexe, iar dac XI (J,:)
este n afara nfurtoarei convexe, atunci lui k(J,) i este atribuit o
valoare exterioar scalar dubl (Inf este adesea folosit pentru valori
exterioare);
k=dsearchn(X,XI ) realizeaz cutarea fr a folosi discretizarea cu
tetraedre i se realizeaz mai repede, cu mult mai puin memorie;
[k,d]=dsearchn(X, ) restituie, de asemenea, distana d, pn la cel mai
apropiat punct, D fiind un vector coloan de lungime p.

Cutarea triunghiului Delaunay nchis se realizeaz cu funcia tsearch, care
se apeleaz,
T=tsearch(x,y,TRI,xi,yi) restituie un indice n rndurile TRI pentru fiecare
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 274
punct din xi, yi i restituie NaN, pentru toate punctele care se afl n afara
nfurtoarei convexe. Necesit o triunghiularizare TRI, cu funcia Delaunay a
punctelor x, y.

Cutarea triunghiurilor Delaunay n n- D se face cu funcia tsearchn, care se
apeleaz:
t=tsearchn(X,TES,XI) restituie indicii t, ai discretizrii, care nchide TES
pentru fiecare punct din XI, cu X o matrice m-x-n, reprezentnd m
puncte n spaiul n-D, iar XI este o matrice px-n, reprezentnd p puncte
n spaiul n-D;
[t,P]=tsearchn(X,TES,XI) restituie, de asemenea, o coordonat P, din
XI, care este o matrice de p pe n+1.

nfurarea convex a punctelor din spaiu se realizeaz cu funcia
convhull, care se apeleaz:
K=convhull(x,y) restituie indicii din x i vectorii y, ai punctelor din
nfurtoarea convex;
[K,A]=convhull(x,y) restituie i aria, A, a nfurtoarei convexe.

Pentru a trasa graficul ieirilor funciei convhull, se utilizeaz funcia plot,
rezultnd figura 12.14, realizat cu secvena:
xx = -1:.05:1; yy=abs(sqrt(xx)); [x,y]=pol2cart(xx,yy);
k = convhull(x,y); plot(x(k),y(k),'r-',x,y,'b+') ; xlabel('x') ; ylabel('y').

Fig.12.14. nfurtoarea convex cu convhull
nfurtoarea convex n spaiul n-D se realizeaz cu funcia convhulln,
care se apeleaz:
K=convhulln(X) restituie indicii K, ai punctelor din X, care cuprind
Interpolarea i aproximarea datelor 275
faetele nfurtoarei convexe a lui X, cu X o matrice m-x-n,
reprezentnd m puncte n spaiul n-D, iar dac nfurtoarea convex
are un numr p de faete, atunci K este de dimensiunea p-x-n;
[K,V]=convhulln(X) restituie, de asemenea, volumul V al nfurtoarei
convexe.

Se consider un set de puncte coplanare P. Pentru fiecare punct P
x,
din setul
P, se poate trasa o frontier, care s cuprind toate punctele intermediare care se
gasesc mai aproape de P
x
,

nu i de P. Acest gen de frontier se numete poligon
Voronoi, iar toate poligoanele Voronoi, pentru un anumit set de puncte, formeaz
diagrama Voronoi.
Diagrama Voronoi se realizeaz cu funcia voronoi, care se poate apela cu
una dintre sintaxele:
voronoi(x,y) traseaz celulele de delimitare a diagramei Voronoi, pentru
punctele x, y, iar celulele care conin un punct la infinit, nu sunt limitate
i nu pot fi trasate;
voronoi(x,y,TRI) folosete triunghilarizarea dat TRI, fr a o calcula
prin intermediul funciei delaunay;
voronoi(,'LineSpec') traseaz diagrama cu culori i stil, al liniilor
specificate;
[vx,vy]=voronoi(...) restituie capetele finite ale marginilor Voronoi n vx
i vy, astfel nct plot(vx,vy,'-',x,y,'.') s creeze diagrama Voronoi.

Pentru exemplificare, se folosete funcia voronoi, pentru a trasa diagrama
Voronoi pentru 10 puncte generate aleator, redat n figura 12.15:
rand('state',5); x=rand(1,10); y=rand(1,10); voronoi(x,y); xlabel('x'); ylabel('y').

Fig.12.15. Diagrama Voronoi trasat cu funcia fr argumente de ieire
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 276
Trasarea diagramei Voronoi prin utilizarea capetelor finite ale marginilor
Voronoi, pentru aceleai 10 puncte, se realizeaz cu secvena:
rand('state',5); x = rand(1,10); y = rand(1,10); [vx, vy] = voronoi(x,y);
plot(x,y,'r+',vx,vy,'b-'); axis equal; xlabel('x'); ylabel('y'),
i este redat n figura 12.16.

Fig.12.16. Diagrama Voronoi trasat prin utilizarea capetelor finite

Trasarea diagramei Voronin n spaiul n-D se realizeaz cu funcia
voronoin, care se apeleaz cu,
[V,C]=voronoin(X)
care restituie capetele Voronoi V i celulele Voronoi C, ale diagramei Voronoi
corespunztoare lui X, unde V, este un vector n-dimensional, iar C, este o celul vector,
unde fiecare element conine indicii din V ai capetelor, corespunztoare celulei
Voronoi. X este o matrice de dimensiune m-x-n, reprezentnd m puncte n n-D, unde n
> 1 i m > = n+1.
Prima linie din V, este un punct la infinit. Dac orice indice dintr-o celul
care aparine unui ir de celule este 1, atunci celula Voronoi corespunztoare
conine primul punct n V, un punct care tinde la infinit. Acest lucru nseamn c,
celula Voronoi nu este limitat.

Identificarea punctelor din cadrul unui domeniu poligonal se realizeaz cu
funcia inpolygon, care se apeleaz cu sintaxa,
IN=inpolygon(X,Y,xv,yv),
i restituie o matrice IN, de aceai dimensiune cu X i Y. Fiecrui element din IN i este
atribuit una dintre valorile 1, 0.5, 0, depinznd de faptul, dac punctul (X(p,q),Y(p,q))
este n interiorul domeniului poligonal, ale crui limite sunt specificate de vectorii xv i
yv. n particular, IN(p,q)=1, dac (X(p,q),Y(p,q)) este n interiorul poligonului,
IN(p,q)=0.5, dac (X(p,q),Y(p,q)) este pe frontiera poligonului i IN(p,q)=0, dac
Interpolarea i aproximarea datelor 277
(X(p,q),Y(p,q)) se situeaz n afara poligonului.
Pentru identificarea punctelor n cadrul unui spaiu poligonal definit de
L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)';
se utilizeaz secvena,
xv = [xv ; xv(1)]; yv = [yv ; yv(1)];
x = randn(250,1); y = randn(250,1);
in = inpolygon(x,y,xv,yv);
plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'bo'); xlabel('x') ; ylabel('y'),
rezultnd figura 12.17.

Fig.12.17. Identificarea punctelor n cadrul unui domeniu poligonal

Funcia rectint returneaz aria dreptunghiular de intersecie i se apeleaz
cu sintaxa:
area = rectint(A,B),
unde cele dou dreptunghiuri intersectate sunt specificate cu A i B.
n cazul n care A si B specific doar un dreptunghi, atunci aria de intersecie
rezultat va fi un scalar.
De asemenea, A i B pot fi matrice, unde fiecare linie reprezint un vector de
poziie. n acest caz, aria este o matrice, ale crei elemente sunt date de intersecia
tuturor dreptunghiurilor specificate de A, cu toate dreptunghiurile specificate de B.
Dac A este o matrice de dimensiune n-x-4 i B de m-x-4, atunci aria este o matrice
de n-x-m, unde aria (i, j) este aria interseciilor dreptunghiurilor specificate de linia
i, a matricei A i linia j, a matricei B.
Un vector de poziie, este un vector de 4 elemente [x, y, width, height], unde
punctul definit de x i y specific un col al dreptunghiului, iar width i height
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 278
definesc mrimea unitilor de pe axele x, respectiv y.

Funcia polyarea restituie aria unui poligon i se apeleaz cu una dintre
sintaxele:
A = polyarea(X,Y) restituie aria poligonului specificat de limitele
vectorilor X i Y. Dac X i Y sunt matrice de aceeai dimensiune,
atunci funcia polyarea restituie aria poligoanelor definite de coloanele
X i Y. Dac X i Y sunt matrice multidimensionale, polyarea va restitui
aria poligoanelor din prima dimensiune, nesingular a lui X i Y.
A = polyarea(X,Y,dim) opereaz de-a lungul dimensiunii specificat de
scalarul dim.

Pentru determinarea ariei unui poligon definit de,
L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)';
se utilizeaz secvena,
xv = [xv ; xv(1)]; yv = [yv ; yv(1)];
A = polyarea(xv,yv);
plot(xv,yv); title(['Area = ' num2str(A)]); axis image
rezultnd figura 12.18.

Fig.12.18. Determinarea ariei unui poligon utiliznd funcia polyarea

13. DERIVAREA I DIFERENIEREA NUMERIC A
FUNCIILOR
Calculul cu diferene finite este folosit pe scar extrem de larg n analiza
numeric. Formeaz baza a numeroase procese de calcul i este utilizat n
deducerea multor formule. n cazul ecuaiilor diferentiale ordinale i pariale, care
apar ca expresie a unor fenomene diverse n tiin i tehnic, nu ntotdeauna este
posibil soluia analitic i atunci, acestea se convertesc n ecuaii cu diferene
finite. n aceste calcule apar implicit, derivate i diferene finite, care pot fi
calculate numeric.
13.1. Diferen finit
Fie ) (x y o funcie real, definit pe mulimea , a numerelor reale sau o
mulime I . Submulimea I poate fi un interval sau o reuniune de intervale i
poate fi format din puncte discrete, n numr finit sau infinit.
Considerm o mulime , de puncte echidistante,
( ) 0 h ; ,..., 2 , , > + + + = h m x h x h x x
pe care o vom numi reea unidimensional. Punctele h m x h x h x x + + + ,..., 2 , ,
se numesc noduri, iar h pasul reelei.
Vom presupune c mulimea este inclus n mulimea pe care ) (x y este
definit i notm cu

h m x h x h x x
y y y y
+ + +
,..., , ,
2

valorile funciei n nodurile h m x h x h x x + + + ,..., 2 , ,

Prin definiie,
x h x
y y
+
se noteaz
x h x x
y y y x y = =
+
) (
i se numete diferena finit de ordinul nti a funciei ) (x y n punctul x sau,
pe scurt, diferena funciei ) (x y .
Diferena diferenelor de ordinul nti,
x h x x
y y y x y = =
+
2 2
) ( ,
se numete diferena de ordinul al doilea i, n general, diferena deferenelor de
ordinul n-1,
x
n
h x
n
x
n n
y y y x y
1 1
) (

+

= = ; m n ,
se numete diferena de ordinul n a funciei ) (x y , n punctul x.
Se observ c diferena de ordinul nti, n punctul x, se construiete cu
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 280
valorile funciei n x i h x + , iar pentru calculul diferenei de ordinul al doilea este
necesar s cunoatem valorile funciei n punctele x, h x + , h x + 2 , etc.
Dac funcia ) (x y este definit n toate punctele h n x + , unde n=0, 1, 2, ,
atunci ) (x y admite diferene de orice ordin.
Diferena de ordinul n a funciei ) (x y , n punctul x, este dat de egalitatea,
( )
( )
( )
( )
x
n
h p n x
p
n
p
h n x n h n x
n
y y C y C y x y 1 ... 1 ... ) (
1
1
+ + + + =
+ + +

unde
( )! !
!
p n p
n
C
p
n

= sunt coeficienii binomiali.


Pe baza relaiei de mai sus se poate calcula diferena de ordinul n a funciei
) (x y
,
n punctul x, dac se cunosc valorile funciei n punctele x, h x + , h x + 2 ,
..., h n x + i reciproc, dac se cunoate valoarea funciei ) (x y , n punctul x i
diferenele sale, pn la ordinul n, n acest punct, se poate calcula valoarea funciei
n punctul h n x + .
ntre valorile funciei ) (x y , n punctele x i h n x + , exist relaia,
x
n
x
p p
n x n x h n x
y y C y C y y + + + + + =
+
... ...
1
.
Dat fiind, pentru funcia ) (x y , o reea
( ) 0 h ; ,..., 2 , , > + + + = h m a h a h a a r
cu schimbarea de variabil X h x = , se obine o nou funcie, ( ) X h y X Y = ) ( , cu
proprietatea c n nodurile reelei, ( )
h
a
b m b b b b rr = + + + = ; ,..., 2 , 1 , ia aceleai
valori ca ) (x y , n nodurile reelei r,
h n a n b
y Y
+ +
= , i din acest motiv se prefer
reele cu pasul 1 = h . n acest caz,
( )
( )
( )
( )
x
n
p n x
p
n
p
n x n n x
n
y y C y C y x y 1 ... 1 ... ) (
1
1
+ + + + =
+ + +
,
( )
x
n
n x x
n
x
p p
n x n x n x
y y y y C y C y y + = + + + + + =
+ +
1 ... ...
1
.

Regulile de baz pentru calculul diferenelor finite sunt:
dac ) (x este o funcie periodic, de perioad egal cu pasul h ,al reelei sau
dac ) (x se reduce la o constant, diferena sa este nul n toate punctele
reelei, oricare ar fi reeaua de pas h, 0 = =
+ x h x x
,
pentru dou funcii, ) (x y i ) (x z , definite pe mulimi din care fac parte
nodurile x i 1 + x i o funcie periodic, ( ) x , de perioad 1 sau o constant,
avem egalitile:

x x x x
z y z y + = + ) ( ,

x x x x
y y = ) ( ,

x x x x x x x x
z y y z z y z y + + = ) ( ,
Derivarea i diferenierea numeric a funciilor 281

( )
1 +


=
+

=
|
|

\
|

x x
x x x x
x x x
x x x x
x
x
z z
z y y z
z z z
z y y z
z
y
.

Diferenele pentru cteva funcii uzuale sunt:
diferena de ordinul nti a funciei
n
x x y = ) ( , respectiv puterile
naturale ale variabilei x, este

= + =
n
k
k n k
n
n n n
x C x x x
1
) 1 ( , de unde
rezult c diferena de primul ordin a unui polinom de gradul n este de
gradul n-1, iar prin analogie, diferena de grad k a unui polinom de grad
n, n k , este un polinom de gradul n-k i diferena de ordinul n, a unui
polinom de grad n, este o constant;
diferenele de ordinul nti ale funciilor factorial de ordinul n i n,
( ) ( ) ( )
( ) ( )

1 ... 2 ) 1 (
1
; 1 ... 2 ) 1 (
+ +
= + + =

n x x x x
F n x x x n x F
n n
sunt:
( ) ( ) ); ( ); (
1 1
x F n x F x F n x F
n n n n
= =
diferenele de diverse ordine ale funciei 1 a ,
x
a se obin imediat,
( ) ( ) ( ) 1 , ... , 1 , 1
2 2 1 x n x n x x x x x x
a a a a a a a a a a a = = = =
+
i pentru o funcie ( ) x avem,
( ) ( ) ( ) ( ) ( ) ( )

1 x x x x x x
a a a a a

= =
+ +

pentru o funcie arbitrar, ( ) x , definit n nodurile x i 1 + x ale reelei,
diferenele de primul ordin ale funciilor trigonometrice i hiperbolice
sunt
( )
( )
( )
( )
(

=
2
cos
2
sin 2 sin
x
x
x
x

,
( )
( )
( )
( )
(

=
2
sin
2
sin 2 cos
x
x
x
x

,
( )
( )
( )
( )
(

=
2
ch
2
sh 2 sh
x
x
x
x

,
( )
( )
( )
( )
(

=
2
sh
2
sh 2 ch
x
x
x
x

,
care, pentru ( ) + = x x , devin
( )
(

+ |

\
|
+ = +


2
1
cos
2
sin 2 sin x x ,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 282
( )
(

+ |

\
|
+ = +


2
1
cos
2
sin 2 cos x x ,
( )
(

+ |

\
|
+ = +


2
1
ch
2
sh 2 sh x x ,
( )
(

+ |

\
|
+ = +


2
1
sh
2
sh 2 ch x x .

Considerm o funcie real de dou variabile, ( ) y x z , , definit pe o mulime
2
I . Mulimea I poate fi un domeniu bidimensional sau o reuniune de domenii,
sau poate fi o mulime discret de puncte din
2
, finit sau infinit.
Se numete reea bidimensional o mulime de puncte din
2

ij
M ,
denumite nodurile reelei, avnd coordonatele de forma,
( ) n j m i k j y h i x M
ij
, ... , 2 , 1 , 0 ; , ... , 2 , 1 , 0 ; , = = + + .
Dac k h , reeaua se numete dreptunghiular. Printr-o transformare
analog celei din cazul reelei unidimensionale, Y k y X h x = = , , se obine o
reea ptratic avnd pasul h.
Dac k h = reeaua se numete ptratic, iar h se numete pasul reelei.
Se vor considera implicit, numai reele ptratice avnd pasul h=1, iar nodurile
reelei aparin mulimii ,I pe care este definit funcia ( ) y x z , .
Notm
1 , + + y i x
z , valoarea funciei ( ) y x z , , n nodul
ij
M .
Diferenele finite pariale de ordinul nti (pe scurt, diferene finite) ale
funciei ( ) y x z , , n punctul ( ) y x, sunt:
n raport cu x:
y x x y x x
z z z
, 1 , +
= ,
n raport cu y: z z z
y x y x y
=
+1 , ,
.

Diferenele pariale de ordinul al doilea ale funciei ( ) y x z , , n punctul ( ) y x, ,
se definesc prin egalitaile :
( )
y x y x y x y x x x y x
x
z z z z z
, , 1 , 2 , ,
2
2
2
+ = =
+ +
,
( )
y x y x y x y x x x y x
y
z x z z z
, 1 , 2 , , ,
2
2
2
+ = =
+ +

( )
y x y x y x y x x x y x xy
z x z z z z
, , 1 , 2 , ,
2
+ = =
+ +


n Matlab, evaluarea diferenei dintre elementele succesive ale unui
vector sau ale unei coloane dintr-o matrice se realizeaz cu funcia diff, care se
poate apela cu una dintre sintaxele:
Y= diff(X), calculeaz diferena dintre elementele adiacente lui X; dac X
Derivarea i diferenierea numeric a funciilor 283
este un vector, atunci Y este [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)], un vector
al diferenelor ntre elementele adiacente, cu un element mai puin dect X,
iar dac X este o matrice, atunci Y este o matrice cu diferenele liniilor,
[X(2:m,:)-X(1:m-1,:)], unde m este numrul de linii ale matricei X;
Y= diff(X,n) folosete funcia diff recurent de n ori, rezultnd a n-a diferen,
astfel, diff (X,2) este similar cu diff (diff (X) );
Y=diff (X,n,dim) este a n-a diferen calculat n dimensiunea matricei X,
precizat de scalarul dim; dac gradul lui n este mai mare sau egal cu
lungimea dimensiunii, atunci diff restituie un ir de valori gol.

Din moment ce funcia diff reduce lungimea lui X, din dimensiunea dim, este
posibil s se specifice un ordin n, suficient de mare, pentru a reduce dim la o
singur dimensiune (size (X, dim) = 1).
Pentru exemplificare, se calculeaz diferenele de ordinul 1 i 2 ale vectorului
X=[1 4 5 9], rezultnd Y = diff(X) = [ 3 1 4], Z = diff(Y) = [ -2 3] i diff(Z)=5.
Dac considerm matricea X=[3 6 8; 7 0 4], atunci diff(X,1,1)=[ 4 -6 -4 ],
iar diff(X,1,2) = [ 3 2 ; -7 4 ].
Se poate efectua i diferena dintr-un numr la o putere, ca de exemplu
diff((1:10).^2), care are ca rezultat 3:2:19.
Verificarea faptului c difereniala lucreaz corect matematic se poate face
calculnd cosinusul prin derivarea sinusului, ca de exemplu,
h = .001; x = 0:h:pi; diff(sin(x.^2))/h
care apropximeaz, cu o eroare absolut de 0.01, funcia 2*cos(x.^2).*x (cu
observaia c derivata are un element mai puin).
13.2. Derivarea numeric
Derivata unei funcii se introduce cel mai sugestiv, pornindu-se de la viteza
unui punct material n micarea liniar, astfel c, generaliznd, derivata unei funcii
( ) x f , este raportul dintre variaia funciei i variaia lui x,
( ) ( ) ( )
0 0
'
0
) 0
0
'
) (
( ) (
lim
0
x Df x f
dx
x df
x x
x f x f
x f
x
x x
= = =

,
cu meniunea c derivata ntr-un punct este un numr.
Totodat, derivata funciei ( ) x f , I x , ntr-un punct I x
0
, cu I, intervalul
pe care este definit funcia, este egal cu tangenta trigonometric a unghiului pe
care l face tangenta la grafic n punctul ( ) ) ( ,
0 0
x f x , cu axa Ox ; aceasta este
interpretarea geometric a derivatei.
Punctele cu derivata zero sunt puncte critice i pot reprezenta, fie o regiune
orizontal a funciei, fie un punct de maxim sau minim local al funciei. Dac
derivata a doua n punctul critic este pozitiv, atunci valoarea funciei n punctul
respectiv este un minim local, iar dac derivata a doua n punctul critic este
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 284
negativ, atunci valoarea funciei n acel punct este un maxim local. Dac derivata
este infinit ( + sau ), atunci dreapta este paralel cu axa Oy.
Principalele reguli de derivare, ntr-un punct din intervalul domeniului, sunt :
derivata sumei unui numr finit de funcii derivabile este egal cu suma
derivatelor fiecrei funcii (poate s fie i operatorul minus, nu numai plus
ntre funcii);
dac funciile ( ) x f i ( ) x g sunt derivabile, atunci funcia ( ) ) (x g x f este
derivabil i ( ) ) ( ' ) ( ) ( ) ( ' )] ( [
0 0 0 0
'
0
x g x f x g x f x g x f x x + = = , iar
( )
) (
) ( ) ( ' ) ( ) ( '
) (
0
2
0 0 0 0
'
0
x g
x f x g x g x f
x g
x f
x x

=
(

= ;
derivata funciei compuse ( ) ( ) ( ) x u f x F = este ( ) ( ) ( ) ) (
0
'
0
'
0
'
x u x u f x F = ;
derivata funciei inverse este
) (
1
) (
0
'
0
1
'
x f
y f =

i 1 ) ( ) (
0
'
0
1
'
=

x f y f ;
derivatele funciilor trigonometrice sunt: ( ) x x sin cos
'
= , ( ) x x cos sin
'
= ,
( )
x
x
2
'
cos
1
tg = , ( )
x
x
2
'
sin
1
ctg

= ;
derivata funciei logaritmice este ( )
a x
x x x
a
ln
1 1
log
0
'
0
= = ;
derivata funciei exponeniale este ( ) a a a
x x
ln
'
= ;
derivatele funciilor hiperbolice sunt ( ) x
e e
x
x x
ch
2
sh
'
=

,
( ) x
e e
x
x x
sh
2
ch
'
=
+
=

, ( )
x e
e
x
x
x
2 2
2
'
ch
1
1
1
th =
+

= , ( )
x e
e
x
x
x
2 2
2
'
sh
1
1
1
cth =

+
= ;
derivatele funciilor circulare inverse sunt ( )
2
'
1
1
arcsin
x
x

= ,
( )
2
'
1
1
arccos
x
x

= , ( )
2
'
1
1
arctg
x
x
+
= , ( )
2
'
1
1
arcctg
x
x
+

= ;
derivatele funciilor hiperbolice inverse sunt ( )
2
'
1
1
argsh
x
x
+
= ,
( )
2
'
1
1
argth
x
x

= , iar funciile argch i argcth au formule diferite pe


intervalele ] 0 , ( i ) , 0 [ + ;
derivata unei matrice A de m x n , cu elemente funcii derivabile este
dx
x dA ) (
,
iar
( )
dx
x dB
dx
x dA
dx
x B x A d ) ( ) ( ) ( ) (
+ =
+
,
Derivarea i diferenierea numeric a funciilor 285
( )
) (
) (
) (
) ( ) ( ) (
x A
dx
x dB
x B
dx
x dA
dx
x B x A d
+ =

, ) (
) (
) (
) (
1
1
x A
dx
x dA
x A
dx
x dA
=

.

De menionat c derivarea numeric, fa de derivarea analitic, amplific
micile erori, cu consecina ndeprtrii de soluia analitic.
Precizia estimrii derivatei depinde de distana dintre punctele utilizate
pentru calcul, crescnd cu micorarea distanei dintre punctele succesive.
Totodat, calculul numeric al derivatei ( ) x f
'
ntr-un punct,
k
x
,
se poate face:
cu diferene regresive sau diferen napoi, ( )
1
) 1 '
( ) (

=
k k
k k
x x
x f x f
x f ;
cu diferene progresive sau diferen nainte, ( )
k k
k k
x x
x f x f
x f

=
+
+
1
) 1 '
( ) (
;
cu diferene centrale sau diferen central, ( )
1 1
) 1 1 '
( ) (
+
+

=
k k
k k
x x
x f x f
x f .

Pentru exemplificare, se calculeaz derivata funciei:
400 5 25 12 3
2 3 4 5
+ + + = x x x x x y
pe intervalul [-4, 4], utiliznd aproximarea cu diferene finite i calculul matematic.
Funcia derivat matematic este
5 50 36 12 5
2 3 4 '
+ + = x x x x y .
Programul Matlab corespunztor, prin care se afieaz funcia i derivata,
precum i punctele critice, este:
x=-4:0.1:4; y=x.^5-3.*x.^4-12.*x.^3+25.*x.^2+5.*x+400;
yprim=5.*x.^4-12.*x.^3-36.*x.^2+50.*x+5 ;
df=diff(y)./diff(x) ; xd=x(2 :length(x);
pr=df(1:length(df)-1).*df(2:length(df)); pcrit=xd(xd(find(pr<0));
plot(x,y,'r',xd,df,'b'); hold on; plot(xd,yprim(2:end)-df,'b').

Funcia find este utilizat pentru a determina indicii elementelor la care
derivata schimb semnul, fiind utilizai ulterior pentru afiarea poziiilor la care
sunt localizate punctele critice.
Diferena dintre calculul numeric i matematic, ct i punctele critice, situate
la x=[ -2.4 -0.1 1.2 3.6], sunt vizualizate pe graficul din figura 13.1.

Dac se dorete calculul derivatei cu diferene centrate, atunci secvena de
calcul Matlab este:
x=-4:0.1:4; y=x.^5-3.*x.^4-12.*x.^3+25.*x.^2+5.*x+400;
df=y(3:length(y))-y(1:length(y)-2); dx=x(3:length(x))-x(1:length(x)-2);
dy=df./dx; xd=x(2:length(x)-1); pr=df(1:length(df)-1).*df(2:length(df));
pcrit=xd(find(pr<0)+1); plot(x,y,'r',xd,df,'b').

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 286

Fig.13.1. Funcia, derivata sa i diferena dintre calculul numeric i exact

Fr a da demonstraia, trebuie menionat faptul c eroarea de trunchiere la
calculul derivatei de ordinul doi este minim atunci cnd se utilizeaz diferena
centrat, motiv pentru care este de preferat ntotdeauna cnd este posibil.
Atunci cnd datele sunt discrete, pentru calculul derivatei se recomand
gsirea anterioar a funciei ce aproximeaz aceste date, printr-o metod de
interpolare i apoi, calculul derivatei.

Pentru calculul diferenialelor i al derivatelor de ordin superior se utilizeaz
dezvoltarea n serie Taylor a funciei i mai mult, se utilizeaz dezvoltarea n serie
Stirling,
( )
( )
(


+
+ =
+ +
...
24
5 3
2
1
2 1 n n n
n
i
n
n n n
h
x f
care calculeaz derivata printr-o formul n patru puncte, i n care:
i i
x x h =
+1
- pasul de divizare,
) ( ) (
1 i i i
x f x f y =
+
- deferenele de ordinul 1,
i i i
y y y =
+1
2
- diferenele de ordinul 2,
i i i
y y y
2
1
2 3
=
+
- diferenele de ordinul 3 ;
i i i
y y y
3
1
3 4
=
+
- diferenele de ordinul 3 .
Derivarea i diferenierea numeric a funciilor 287
Lund n consideraie numai diferenele finite pn la ordinul 4, primele
derivate sunt :
( )
(

+ =
i i i i i
y y y y
h
x f
4 3 2 '
4
1
3
1
2
1 1

( )
(

+ =
i i i i
y y y
h
x f
4 3 2
2
' '
24
11 1
.
Pentru exemplificare, se poate scrie programul care calculeaz primele dou
derivate ale funciei logaritm natural, log, n punctul x=10, avnd urmtoarea
structur:
x=10:0.1:20; h=x(2)-x(1); y=log(x); dy1=diff(y); dy2=diff(dy1);
dy3=diff(dy2); dy4=diff(dy3);
d1f=1./h.*(dy1(1)-dy2(1)./2+dy3(1)./3-dy4(1)./4);
d2f=1./h.^2.*(dy2(1)-dy3(1)+11./12.*dy4(1));
obinndu-se d1f = 0.1 i d2f = -0.01.
13.3. Aproximarea numeric a gradientului
Dup cum se cunoate, se numete gradientul funciei U(x,y,z) sau
gradientul cmpului scalar U i se noteaz grad U, funcia vectorial:
z
U
k
y
U
j
x
U
i U

=
r r r
grad ,
n care U(x,y,z) este o funcie real, definit pe
3
R X i derivabil pe X. Vectorul
( )
0 0 0
, , grad z y x U , este normal la suprafaa de nivel, n punctul ( )
0 0 0
, , z y x U .
Dac se introduce operatorul
z
k
y
j
x
i

=
r r r
, numit operatorul
nabla sau operatorul Hamilton, atunci se poate scrie : U U = grad .
n general, gradientul unei funcii scalare , oarecare, dup o direcie
oarecare, n, se obine lund diferena funciei ntre dou puncte nvecinate, pe
direcia respectiv, mprind aceast diferen la distana dintre cele dou puncte
i, n final, se ia valoarea limit a acestui raport,
( )
( ) ( )
n
r n r
n
n

+
=

r r r

0
lim grad .
Funcia Matlab, care permite determinarea gradientului unei funcii oarecare
F, de N variabile (spaiu N dimensional), este gradient, care se poate apela cu una
dintre sintaxele :
FX=gradient(F,DX), unde F este un vector, restituie gradientul uni-
dimensional, FX, a lui F, care corespunde derivatei pariale pe direcia x,
x F / , DX este pasul de eantionare, care se consider 1, dac este omis;
[FX,FY] = gradient(F,DX,DY), unde F este o matrice, restituie
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 288
componentele x i y ale gradientului bidimensional, astfel c, FX corespunde
lui x F / , derivata parial pe direcia lui x (pe coloan), FY corespunde lui
y F / , derivatei pariale pe direcia lui y ( pe linie), iar DX este pasul de
eantionare pe direcia x i DY este pasul de eantionare pe direcia y; dac
sunt omii, DX=DY=1;
[FX, FY, FZ] = gradient (F,...), unde F are N dimensiuni, restituie cele n
componente ale gradientului lui F;
DYX=gradient(Y) sau dYX=gradient(Y,DY) returneaz un vector, care
conine derivata numeric dY/dX, a funciei scalare Y.

Pentru a reprezenta grafic gradientul, care este o funcie vectorial, este
preferat funcia Matlab quiver, ce reprezint grafic mici sgei (vectori orientai),
la fiecare pereche (X,Y) a matricelor X i Y i se apeleaz cu una dintre sintaxele:
quiver(X,Y,DX,DY), quiver(X,Y,DX,DY,S), quiver(DX,DY).
Perechile (DX, DY) din matricele DX, DY, determin direcia i modulul
cmpului de vectori orientai. Dac X i Y sunt vectori, X corespunde coloanelor lui
DX i DY, iar Y corespunde liniilor acestora (X trebuie s aib lungimea egal cu
numrul de coloane, iar Y cu numrul de linii).
Dac X i Y sunt omii, se consider X = 1 : n i Y = 1 : m, unde m este
numrul de linii al matricelor DX (DY), iar n numrul de coloane al acestora.
Argumentul S, care este un scalar, permite aplicarea unui factor de scal,
lungimii vectorilor orientai, de pe reprezentarea grafic. Se pot folosi toate tipurile
de linii sau culori, specificate de instruciunea plot.
Pentru exemplificare, se reprezint grafic gradientul unui cmp de vectori
asociat funciei:
2 2
) , (
y x
xe y x z

= , n domeniul X x Y = [-3, 3] x [-3, 3].
Programul Matlab este :
xp=-3:0.1:3; yp=-3:0.1:3; [x,y]=meshgrid(xp,yp); z=x .*exp(-x.^2-y.^2);
[px,py]=gradient(z,0.1,0.1); contour(x,y,z) ; hold on ;
quiver(x,y,px,py,1.5,'g') ; hold off ; xlabel('x') ; ylabel('y'),
obinndu-se reprezentarea grafic din figura 13.2.

Dac n locul funciei scalare U(x,y,z), avem o funcie vectorial
) , , ( ) , , ( ) , , ( ) , , ( z y x R k z y x Q j z y x P i z y x V + + =
r r r r
,
definit pe
3
R X , cu valori scalare n
3
R , derivabil parial pe X, se poate defini
divergena funciei ) , , ( z y x V
r
sau divergena cmpului vectorial V
r
i se noteaz
V
r
div ,funcia scalar,
V
z
R
y
Q
x
P
V
r r
=

= div .
Se numete rotorul funciei vectoriale V
r
sau rotorul cmpului vectorial V
r
i
se noteaz V
r
rot funcia vectorial
Derivarea i diferenierea numeric a funciilor 289

|
|

\
|

+ |

\
|

+
|
|

\
|

=
y
P
x
Q
k
x
R
z
P
j
z
Q
y
R
i V
r r r r
rot .

Fig.13.2. Reprezentarea grafic a gradientului unui cmp de vectori.

De menionat c,divergena unui vector oarecare, indiferent de sistemul de
coordonate, se definete ca
A V
V
V
A
V
d
1
lim div
0

=

r r
,
care ne spune c, pentru a obine divergena unui vector ntr-un punct, trasm o
suprafa nchis oarecare n jurul punctului i, pe aceast suprafa, formm
integrala de suprafa a vectorului, a crei valoare o mprim la volumul delimitat,
iar pentru raportul astfel obinut trecem la limit, n timp ce ne apropiem cu
suprafaa trasat de punctul respectiv.
Rotorul unui vector oarecare, n coordonate generale, se definete ca
( ) l V
A
V
L
A
d
1
lim rot
0
n

=

r r
,
adic, componenta rotorului unui vector, dup o direcie oarecare, se obine ntr-un
punct, dac nconjurm cu o curb punctul respectiv, ntr-un plan perpendicular pe
direcia respectiv, formm integrala vectorului, de-a lungul acestei curbe, a crei
valoare o mprim la suprafaa delimitat i apoi, trecem la limit raportul astfel
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 290
obinut, n timp ce ne apropiem cu curba respectiv n mod nelimitat de punct.
Sensul pozitiv al integralei se ia dup regula burghiului drept.

Divergena cmpului V
r
rot , este o funcie identic nul pe domeniul de
definiie, dac P, Q, R au derivate de ordinul doi continue, 0 rot div = V
r
.
Divergena cmpului , U grad nu mai este nul,
U U
z
U
y
U
x
U
z
U
k
y
U
j
x
U
i = =

=
|
|

\
|

2
2
2
2
2
2
div
r r r
,
unde operatorul , definit ca:

2
2
2
2
2
2
z y x

= =
se numete laplasian sau operatorul lui Laplace, aici dat n coordonate
carteziene. Acesta apare n rezolvarea ecuaiei lui Laplace, ce d distribuia
potenialului (termic, electric, chimic), fr surse interioare.
13.4. Aproximarea numeric a Laplasianului
Pentru calculul numeric al Laplasianului, n Matlab, se utilizeaz funcia
del2. Dac matricea U este privit ca o funcie ) , ( y x u , exprimat la un moment
dat pe o reea ptrat, atunci 4*del2(U) este o diferen finit aproximativ a
operatorului diferenial Laplace, aplicat lui u :
|
|

\
|
+ =

=
2
2
2
2 2
4
1
4 dy
u d
dx
u d u
l
unde:
( )
i j i j i j i j i ij
u u u u u l + + + =
+ + 1 , 1 , , 1 , 1
4
1

este n interiorul reelei. n cazul nodurilor care aparin marginilor sau colurilor
(care au numai trei i respectiv dou noduri vecine), media este calculat numai cu
aceste noduri, utiliznd o extrapolare cubic pentru punctele care lipsesc.
Pentru funcii de mai multe variabile ,...) , , ( z y x u , del2(U) este:
|
|

\
|
+ + + =

= ...
2
1
2
2
2
2
2
2
2 2
dz
u d
dy
u d
dx
u d
N N
u
l
unde N este numrul de variabile din u.
Funcia del2 se apeleaz cu una dintre sintaxele :
L = del2(U), unde U este un ir multidimensional, restituie o aproximaie a
lui
N
u
2

, unde N este numrul de dimensiuni ale lui u, N=ndimns(u);


L = del2(U,h), unde h este un scalar, utilizeaz h ca distan (spaiul) dintre
puncte, pe fiecare direcie;
Derivarea i diferenierea numeric a funciilor 291
L = del2(U,hx,hy), cu U , un ir dreptunghiular, utilizeaz intervalul precizat
de hx i hy; dac hx este un scalar, el determin intervalul dintre puncte pe
direcia x, iar dac hx este un vector, trebuie s fie de lungime (u,2) i
specific coordonatele punctelor pe direcia x; n mod similar, dac hy este un
scalar, el determin intervalul dintre puncte pe direcia y, iar dac hy este un
vector, trebuie s fie de lungime (u,1) i specific coordonatele punctelor pe
axa y;
L = del2(U,hx,hy,hz,), unde U este multidimensional, utilizeaz intervalele
determinate de hx, hy, hz,.

Matricea L are aceeai mrime ca U, cu fiecare element egal cu diferena
dintre un element a lui U i media celorlali termeni vecini cu el.
Dac matricea U este asociat funciei ) , ( y x u , evaluat n nodurile unei
reele cu pas constant, atunci:
D=4*del2(U)
este aproximarea cu diferene finite a operatorului diferenial Laplace aplicat lui u,
adic
2
=
2
u/x
2
+
2
u/y
2
.
Pentru exemplificare, se consider funcia
2 2
) , ( y x y x u + = , care are
4 = u i pentru aceast funcie, 4*del2(U) este de asemnea, 4. Secvena Matlab
este :
[x,y] = meshgrid(-4:4,-3:3); U = x.*x+y.*y ; V = 4*del2(U) ;

rezultnd,
U = [ 25 18 13 10 9 10 13 18 25
20 13 8 5 4 5 8 13 20
17 10 5 2 1 2 5 10 17
16 9 4 1 0 1 4 9 16
17 10 5 2 1 2 5 10 17
20 13 8 5 4 5 8 13 20
25 18 13 10 9 10 13 18 25]
V = [ 4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4 ].

14. INTEGRAREA NUMERIC A FUNCIILOR
Integrarea numeric este utilizat foarte des n calculele inginereti, fie pentru
calculul unor integrale propriu-zise, fie pentru integrarea numeric a ecuaiilor
difereniale.
Calculul numeric al unei integrale, denumit i cuadratur, se poate face prin
aproximarea funciei de integrat printr-o alt funcie, pentru care integrala se
cunoate sau se poate calcula uor, sau prin aproximarea funciei printr-un set de
funcii liniare sau parabolice, pe poriuni.
14.1. Calculul cu aproximaie al integralelor definite
Metodele aproximative de calcul ale integralei definite au ca principiu
nlocuirea curbei ) (x f y = , n intervalul de integrare [a, b], cu o curb mai simpl
) (x g y = , deci :

) d ) ( d ) (
b
a
b
a

x x g x x f

unde curba ) (x g y = , este o funcie n scar, o linie poligonal (metoda
dreptunghiului, metoda trapezelor, metoda tangentelor), un lan de parabole,
(metoda lui Simpson) sau polinomul de interpolare al lui Lagrange.
Ideea fundamental, de obinere a unei soluii aproximative, este de a scrie
integrala sub forma,


j
j j
h w x f x x f ) ( d ) (
b
a

unde
j
w , sunt ponderi asociate cu procesul de integrare. Relaia este cunoscut ca
formula prin cuadraturi i un procedeu posibil de generare este cu polinoame
Lagrange.
14.1.1. Metoda dreptunghiurilor
Pentru funcia de integrat, ) (x f y = , pe intervalul de integrat [a, b], se pot lua
subintervale egale,
n
a b
x x
k k

=
+1
, astfel nct
b x x x x x x x a
n n k k
< < < < < < < < < <
+ 1 1 2 1 0
... ...

iar metoda dreptunghiurilor const n a aproxima integrala definit

=
b
a
d ) ( x x f I ,
cu o sum Riemann.
Aproximarea se poate face prin dou formule :
Integrarea numeric a funciilor 293
[ ] ) ( ... ) ( ) ( ) (
1 2 1 1
+ + + +

n
x f x f x f a f
n
a b
I ,
[ ] ) ( ) ( ... ) ( (
1 2 1 2
b f x f x f x f
n
a b
I
n
+ + + +

,
astfel c, dac funcia este cresctoare pe interval, atunci I
1
aproximeaz prin lips,
iar I
2
prin exces.
n metoda dreptunghiurilor, se nlocuiete arcul ) (x f y = , cu o funcie n
trepte, iar eroarea de calcul
( )
n
a b
A
2

, cu ) ( ' sup x f A
b x a
= .
14.1.2. Metoda trapezelor
Metoda trapezelor const n a aproxima integrala definit

=
b
a
d ) ( x x f I , prin
semisuma valorilor I
1
i I
2,
calculate anterior,
[ ] ) ( ) ( 2 ... ) ( 2 ) ( 2 ) (
2 2
1 2 1
2 1
b f x f x f x f a f
n
a b I I
I
n tr
+ + + + +

=
+


care, dup prelucrri, se poate scrie :

+ +

=
1
1
) ( 2 ) ( ) (
2
n
i
i tr
x f b f a f
n
a b
I
n metoda trapezelor, se nlocuiete arcul de curb ) (x f y = , cu o coard, iar
eroarea de calcul
( )
2
3
12 n
a b
B

, cu ) ( sup
' '
x f B
b x a
= .
14.1.3. Metoda tangentelor
n aceast metod, se aproximeaz pe fiecare subinterval [ ]
1
,
+ k k
x x , arcul de
curb ) (x f y = , cu tangenta la curb, lundu-se numrul diviziunilor pare (n=2m)
i se duce tangenta la curb n punctele de abscis x
2k+1
, tangent pe care o
mrginim la dreptele paralele cu axa Oy, duse prin punctele (x
2k
, 0) i (x
2k+1
, 0),
astfel nct, aria trapezului este dat de ( ) ) ( ) ( ) (
2
1 2 2 2 2 + +

= +

k k k
x f
m
a b
x f x f
m
a b
.
nsumnd pentru toate ariile elementare, obinem,
( ) ( ) ( ) [ ]
1 2 3 1
b
a
tan
... d ) (

+ + +

=
m
x f x f x f
m
a b
x x f I
14.1.4. Metoda lui Simpson
n metoda lui Simpson se ia o medie ponderat a valorilor aproximative,
obinute prin metoda trapezelor i a tangentelor, anume
3
2
tan
I I
I
tr
Sims
+
= .
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 294
Formula lui Simpson, lund numrul de diviziuni par, n=2m, este :
( ) ( ) ( ) ( ) ( ) ( ) ( ) [ ] b f x f x f x f x f x f a f
m
a b
I
m m Sims
+ + + + + + +

1 2 2 2 3 2 1
4 2 ... 4 2 4
6

n metoda lui Simpson se aproximeaz curba n intervalul [ ]
2 2 2
,
+ k k
x x , printr-
un arc de parabol C x B x A y + + =
2
, care trece prin punctele curbei de abscise
x
2k
, x
2k+1
, x
2k+2
, iar eroarea de calcul
( )
4
5
2880 m
a b
C

, cu ) ( sup x f C
IV
b x a
= .
14.1.5. Aproximarea prin interpolare
Considerm c intervalul de interpolare [a, b], se poate mpri n n
subintervale oarecare,
b x x x x x a
n n
= < < < < < =
1 2 1 0
... ,
n care, funcia f(x) ia valorile,
) ( ), ( ),... ( ), (
1 1
b f x f x f a f
n
.
n aceast metod, funcia de integrat f(x), se aproximeaz cu polinomul L
n
,
de interpolare, al lui Lagrange, care trece prin cele n+1 puncte,
( ) ( ) ( ) ( ) ( ) ( )
n n
x f x x f x x f x , ,..., , , ,
1 1 0 0

a crui expresie este,
( ) ( ) ( )
n n n
x f X x f X x f X L + + + = ...
1 1 0 0
,
cu
( ) ( ) ( )
( ) ( ) ( )
n k k k
n
k
k
x x x x x x
x x x x x x
x x
X

=
K
K
1 0
1 0
1
.
Dac nlocuim pe f(x) n ,

b
a
d ) ( x x f cu ) (x L
n
, obinem,
( )
( ) ( ) ( )
( ) ( ) ( )



=
=
b
a
1 0
0
1 0
dx
x x
x x x x x x
x x x x x x
x f
I
k
n
n
k
n k k k
k
K
K

i s-a redus calculul integralei definite, la integrarea unor polinoame.
Printr-o schimbare de variabil, integralele pot fi obinute independent de
punctele de diviziune i intervalul de integrare, astfel nct:
( ) ( ) t a b x a b t a x d d = + = ,
( ) ( ) ( ) a b t a x a b t a x a b t a x
n n
+ = + = + = , , ,
1 1 0 0
L .
Prin urmare,
1 0
1 1 0
= < < < < <
n n
t t t t L ,
i
( ) ( ) ( ) ( )
k i k i k k
t t a b x x t t a b x x = = , ,L
astfel nct, integrala I devine ( )

=
=
1
0 0
dt t T Y I
k
n
k
k
, unde,
Integrarea numeric a funciilor 295
( ) ( )
( ) ( ) ( ) ( ) ( )
n k k k k k k k
k
k
t t t t t t t t t t
x f a b
Y


=
+
K K
1 1 1 0
,
( ) ( ) ( ) ( ) ( ) ( )
n k k k
t t t t t t t t t t t T =
+
K K
1 1 1 0
,
n care ( ) t T
k
, sunt polinoame de gradul n , n t.
Pentru diverse valori ale lui n, s-au calculat integralele ( )

=
1
0
'
dt t T T
k k
i
coeficienii
( ) ( ) ( ) ( ) ( )
n k k k k k k k
k
k
t t t t t t t t t t
T
A

=
+
K K
1 1 1 0
'
, astfel nct, prin
intermediul acestora, ce se gsesc calculai, aproximarea integralei se reduce la
calculul sumei ( ) ( )

=

n
k
k k
x f A a b
0
.
14.1.6. Calculul numeric al integralelor pe intervale infinite
n definiia anterioar a integralei definite

b
a
d ) ( x x f , am presupus c limitele
a i b sunt finite, iar funcia f(x) este mrginit pe [a, b].
Dac unul sau amndou numerele a i b sunt infinite, integralele sunt de
forma,

a
d ) ( x x f ,

b
-
d ) ( x x f ,

+
-
d ) ( x x f ,
care se pot reduce cu uurin la cazul

=
a
d ) ( x x f I .
Pentru calculul integralelor de acest tip, presupunem c integrala are sens sau
c este convergent, dac


A
a
d ) ( lim x x f
A
exist i este finit, pentru funcia f(x),
definit pe intervalul [ ] + , a i integrabil pe intervalul [a, A], pentru orice A>0.
O integral care nu este convergent, se spune c este divergent sau c nu
are sens.
Calculul integralelor convergente de tipul

=
a
d ) ( x x f I , se poate face :
prin schimbarea variabilei, astfel nct intervalul infinit [ ] + , a , s se
transforme ntr-un interval finit, de exemplu, [ ] b a, , i apoi, se evalueaz prin
una dintre metodele expuse anterior;
prin separarea integralei n dou integrale,


+ =
b a a
d ) ( d ) ( d ) ( x x f x x f x x f
b
, iar
apoi calculul se poate face:
neglijnd termenul integral infinit, dac b este suficient de mare,
astfel nct

>>
b b
x x f x x f
2
b a
d ) ( d ) ( ;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 296
aproximnd forma asimptotic a lui f(x) , printr-o funcie ) ( ) ( x f x g ,
care, pentru x suficient de mare, permite calculul analitic al integralei
funciei g(x).
14.1.7. Calculul numeric al integralelor funciilor cu singulariti
Singularitile sunt puncte ale unui interval mrginit, pentru care funcia este
infinit, ca de exemplu integrala


1
0 1
d
x
x
. Pentru aceste cazuri se recomand :
eliminarea singularitilor, atunci cnd este posibil, prin schimbarea de
variabile, integrarea prin pri etc;
folosirea metodei Simpson, cu excluderea singularitilor, prin nlocuirea
limitei 1 cu 1 , cu suficient de mic;
folosirea cuadraturii, bazate pe aproximarea funciei cu polinoame.
14.1.8. Integrarea dubl numeric
n multe situaii, se ntlnesc integrale duble definite, avnd aplicabilitate la
calculul ariei unui domeniu plan, ariei unei suprafee din spaiu, volumului
corpurilor, centre de greutate ale plcilor, momente de inerie.
O integral dubl este

= = =
b a
D D
x y x f y S y x f y x y x f II
a 0
d ) , ( d d ) , ( d d ) , (
unde f, este funcia de integrat, x i y sunt variabilele de integrare, D este domeniul
de integrare, considerat dreptunghiular, [ ] [ ] b a x 0, y , , 0 .
Vom considera pasul de integrare egal cu h, pe ambele subdomenii ale
domeniului D. Considerm c I este numrul de subintervale spaiale pe intervalul
[0, a] i J numrul de subintervale spaiale pe intervalul [0, b], care, evident, vor
avea lrgimea, h
J
b
I
a
h h
y x
= = = = .
Dac integrala dubl se calculeaz prin metoda trapezului, atunci :
( )

= =

=
+ + + +
= + + +
I
i
J
j
j i j i
J
j
I
i
j i j i j i j i
h w f f f f f
h
II
0 0
2
, ,
1
0
1
0
, 1 1 , 1 1 , ,
2
1
4

n care ponderile
j i
w
,
, asociate procesului de integrare, sunt 1/4, 2/4 i 4/4, dup
cum nodul respectiv este punct de col, punct de margine sau punct interior.
Aplicnd formula lui Simpson, integrala dubl este :
( ) ( )

= =

=
+ + + + + + +
=
+ + + + + + + +
I
i
J
j
j i j i
J
j
I
i
j i j i j i j i j i j i j i j i j i
h w f
f f f f f f f f f
h
II
0 0
2
, ,
1
1
1
1
, 1 1 , 1 , 1 1 , , 11 1 , 1 1 , 1 1 , 1 1 , 1
2
2
16 4
9

unde ponderile
j i
w
,
, iau acum valori diferite de cele anterioare.
Integrarea numeric a funciilor 297
14.2. Funcii Matlab pentru integrarea numeric
Funcia trapz, realizeaz calculul numeric al integralei prin metoda
trapezelor. Se apeleaz cu una dintre sintaxele:
Z=trapz(Y) estimeaz aproximativ integrala lui Y pe intervalul unitate, iar
pentru a calcula integrala pe alte intervale, se nmuleste intervalul cu Z;
pentru vectori, Z este un vector ce conine integrala lui Y, iar dac Y este o
matrice, Z este un vector coloan, ce integreaz fiecare coloan;
Z=trapz(X,Y) calculeaz integrala lui Y, innd cont de X; dac X este un
vector coloan i Y un ir a crui prim dimensiune este length(X),
trapz(X,Y) opereaz pe dimensiune;
Z=trapz(,dim) integreaz pe dimensiunea lui Y, specificat de scalarul dim;
lungimea lui X trebuie s fie la fel cu size(Y,dim).

Functia trapz presupune c integrantul este dat prin valori numerice, n noduri
echidistante ale intervalului de integrare. Dac funcia de integrat este descris sub
forma analitic ) (x f y = , n primul rnd, se creeaz cei doi vectori, care conin
valorile perechilor abscis-ordonat (x-y).Acest lucru se realizeaz prin evaluarea
funciei f(x), cu un pas adecvat pentru x i apoi se aplic funcia trapz.
Pentru exemplificare, se calculeaz numeric integrala

x
dx x
0
) sin( , care are
valoarea exact 2. Secvena Matlab este :
X = 0:pi/100:pi; Y = sin(X); Z = pi/100*trapz(Y), rezultnd 1.9998.
Pentru un interval neuniform avem:
X = sort(rand(1,101)*pi); Y=sin(X); Z = trapz(X,Y), rezultnd 1.9981.

Pentru integrarea numeric cumulativ se utilizeaz funcia cumtrapz, care
utilizeaz tot metoda trapezelor i se apeleaz cu una dintre sintaxele :
Z=cumtrapz(Y) estimeaz aproximativ integrala cumulativ a lui Y, prin
metoda trapezelor, pe intervalul unitate i pentru a calcula integrala pe alte
intervale, se nmulete intervalul cu Z; pentru vectori, Z este un vector ce
conine integrale cumulative ale lui Y, iar pentru matrice, Z este o matrice de
aceeai dimensiune cu Y, cu integralele cumulative calculate pe fiecare
coloan;
Z=cumtrapz(X,Y) calculeaz integrale cumulative ale lui Y, respectiv ale lui
X, folosind metoda trapezelor; X si Y trebuie s fie vectori de aceeai
lungime sau X trebuie s fie un vector coloan i Y un ir de dimensiune
length(X); dac X este un vector coloan i Y este un ir, a crui prim
dimensiune este length(X), cumtrapz(X,Y) opereaz n aceast dimensiune;
Z= cumtrapz(X,Y,dim) sau Z=cumtrapz(Y,dim) integreaz n dimensiunea
lui Y, specificat de dimensiunea scalar dim; lungimea lui X trebuie s fie
aceeai cu size(Y,dim).

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 298
Pentru exemplificare, se consider Y = [0 1 2; 3 4 5],
aplicnd Z=cumtrapz(Y,1) rezult,
Z=[ 0 0 0 ; 1.5000 2.5000 3.5000],
iar aplicnd Z=cumtrapz(Y,2) rezult,
Z=[ 0 0.5000 2.0000 ; 0 3.5000 8.0000 ].

Dac integrantul este exprimat sub forma unei funcii analitice, se utilizeaz
pentru integrare funciile Matlab quad i quadl sau mai vechi, quad8. Dac
funcia de integrat este descris prin valori numerice, se aproximeaz mai nti
acestea, printr-o funcie, utiliznd o metod de interpolare i apoi aceasta va fi
scris n sintaxa MATLAB, ca fiier de tip M.
Funcia quad utilizeaz metoda Simpson aplicat recursiv adaptiv, avnd o
eroare de 10
-6
, n versiunile mai noi i de 10
-3
n versiunile mai vechi, unde, pentru
mbuntirea toleranei, se utiliza quad8, care se bazeaz pe o cuadratur prin
metoda Newton-Cotes, n 8 puncte. Acum, aceasta cheam practic funcia la
apelare, quadl.
Mai nou, pentru o evaluare mai bun, cu eroare relativ de 10
-6
, se utilizeaz
funcia quadl, ce are la baz metoda de cuadratur recursiv adaptiv Lobatto.
Funciile quad i quadl pot trata unele singularitai, care se gsesc la unul
dintre capetele intervalului de integrare, ns nu rezolv singularitaile care se
gsesc n interiorul intervalului. Nici una dintre funciile quad, quad8, quadl nu
poate rezolva integrale cu singulariti, de genul :

1
0
1
dx
x
. Acestea trebuie aduse la
forma unor funcii simple, fr singulariti.

Sintaxele de apelare a funciilor quad, nelegnd prin aceasta quad, quadl
sau eventual quad8, sunt :
q = quad...('fun',a,b), returneaz rezultatul integrrii numerice a funciei fun,
ntre limitele a i b; funcia fun poate fi dat sub forma unei expreii, funcie
obiect, funcie de tip M sau vector i, n acest caz, returneaz un vector de
valori;
q = quad...('fun',a,b,tol), itereaz pn cnd eroarea relativ este mai mic
dect eroarea relativ tol, care n variantele noi este implicit 1e-6, iar n cele
vechi 1e-3, iar dac tol este sub forma unui vector de dou dimensiuni,
tol=[rel_tol abs_tol], atunci afieaz tolerana relativ, rel_tol i tolerana
absolut, abs_tol;
q = quad...('fun',a,b,tol,trace), n plus, controleaz, prin trace, afiarea pe
ecran a valorilor intermediare;
q = quad...('fun',a,b,tol,trace,p1,p2,...) adaug argumentele p1, p2 funciei
fun(x,p1,p2), iar pentru a utiliza valorile implicite pentru tol i trace se
folosete matrice vid, ca de exemplu, quad ...(('fun',a,b,[ ],[ ],p1,p2).

Pentru a preveni un ciclu infinit, att quad ct i quadl au limita de
Integrarea numeric a funciilor 299
recursivitate 10. Atingerea acestei limite duce la afiarea mesajului "Recursion
level limit reached in quad. Singularity likely " i seteaz q=inf.
Funcia fun se poate da :
direct ca o expresie, Q = quad('1./(x.^3+x.^2-x-2)',-1,2), rezultnd -0.2632;
sub forma unei funcii obiect, F=inline('1./(x.^3-2*x-5)'); Q= quadl(F,0,2),
rezultnd Q= - 0.4605;
sub forma unei funcii de tip M, definind anterior funcia
function y = myf(x); y = 1./(x.^3-2*x-5); i apoi Q = quadl('myf',0,2);

Pentru rezolvarea numeric a integralelor duble se folosete funcia
dblquad, care se poate apela cu una dintre sintaxele :
result=dblquad('fun',xmin,xmax,ymin,ymax), returneaz rezultatul integrrii
duble a funciei fun(x,y), unde x, aparine intervalului [xmin xmax] i y,
aparine intervalului [ymin ymax], funcia fun putnd fi precizat prin una
dintre metodele de la funcia quad;
result=dblquad('fun',xmin,xmax,ymin,ymax,tol) specific tolerana tol, care
are valoarea implicit 1e-6;
result=dblquad('fun',xmin,xmax,ymin,ymax,tol,metod) specific metoda de
integrare, care n mod normal este quadl sau se poate face o funcie de
integrare de ctre utilizator, avnd grij ca argumentele s fie transmise n
aceeai ordine ca i la quadl;
result=dblquad('fun',xmin,xmax,ymin,ymax,tol,metod,p1,p2,...) adaug
argumentele p1, p2 funciei fun(x,p1,p2), iar pentru a utiliza valorile
implicite pentru tol i metod se folosete matrice vid, ca, de exemplu,
dblquad ...(('fun',a,b,[ ],[ ],p1,p2..) sau
dblquad(fun,xmin,xmax,ymin,ymax,1.e-6,@quad,p1,p2,...).

Integrarea funciei [ ] [ ] , 0 , 2 , , cos sin + y x y x x y se face utiliznd
urmtoarea secven :
Q = dblquad(inline('y*sin(x)+x*cos(y)'), pi, 2*pi, 0, pi),
rezultnd Q = -9.8696, x fiind un vector, iar y un scalar.

15. REZOLVAREA NUMERIC A ECUAIILOR
DIFERENIALE
15.1. Ecuaii difereniale. Soluia general. Soluii particulare
Istoric, ecuaiile difereniale au aprut din necesitatea modelrii matematice a
fenomenelor din fizic, chimie i inginerie. Mai recent, aceste ecuaii difereniale apar n
modelele din medicin, biologie, antropologie i calculul probabilitilor.
O ecuaie diferenial este o ecuaie care conine funcia i una sau mai multe
derivate ale acesteia. Ecuaia este o ecuaie diferenial ordinar (ODE), dac funcia
necunoscut depinde numai de o variabil independent.
Cteva exemple de ecuaii difereniale ordinare (ODE) sunt,
ecuaia creterii: ) ( ) ( t G t F
dt
du
= ;
ecuaia pendulului: ) ( ) sin(
2
2
t F
l
g
dt
d
= +

;
ecuaia van der Pol: ( ) 0 1
2
2
2
= + + + y
dt
dy
y
dt
y d
;
ecuaia oscilatorului LRC: ) (
2
2
t E
C
E
dt
dQ
R
dt
Q d
L = + + ;
ecuaia Riccati: 0 ) ( ) ( ) (
2
= + + + t R y t Q y x P
dt
dy
sau
0 ) ( ) ( ) (
2
= + + + t R y t Q y x P
dt
dy

n care: t este variabila independent, iar p Q y u , , , , , sunt variabilele dependente.

O ecuaie diferenial de ordinul n, este o relaie de forma,

( )
( ) 0 , , , , =
n
y y y x F L ,
n care n se numete ordinul ecuaiei difereniale,
( )
( )
n
y y y x F , , , , L este o funcie
real definit pe [ ]
1
, ,
+

n
R Y Y b a , avnd argumente variabila real [ ] b a x , , iar
y este o funcie real, avnd derivate pn la gradul n,
( ) n
y y y , , , L .
O ecuaie diferenial se spune c este de ordin superior, dac ordinul su, n, este
mai mare sau egal cu 2.
O funcie ( ) x y = , derivabil de n ori pe [ ] b a , , se numete soluie pe [ ] b a , ,
dac verific ecuaia,
( ) ( )
( )
( ) ( ) 0 , , , , = x x x x F
n
L
Rezolvarea numeric a ecuaiilor difereniale 301
pentru orice [ ] b a x , .
Funcia ( )
n
C C C x , , , ,
2 1
L este soluia general a ecuaiei difereniale de ordinul
n,
( )
( ) 0 , , , , =
n
y y y x F L , studiat ntr-un domeniu [ ] y x D , , dac este o soluie a
ecuaiei i dac, prin alegerea convenabil a constantelor
n
C C C , , ,
2 1
L , funcia
( )
n
C C C x , , , ,
2 1
L , se transform n orice soluie a ecuaiei difereniale, al crui grafic
se afl n domeniul D. Soluia general a unei ecuaii diferentiale se numete i integral
general a ecuaiei considerate.
Soluia general a unei ecuaii difereniale de ordinul n, poate fi dat i :
implicit, printr-o relaie de forma ( ) 0 , , , , ,
2 1
=
n
C C C y x R L , care
este denumit, de obicei, integral general;
parametric, printr-un sistem
( )
( )

=
=
n
n
C C C t y
C C C t x
, , , ,
, , , ,
2 1
2 1
L
L
.

Se numete soluie particular a ecuaiei difereniale
( )
( ) 0 , , , , =
n
y y y x F L , o
funcie ( ) x y
*
= , [ ] b a x , i ( ) D y x , , care se obine din soluia general, dnd
valori particulare constantelor
n
C C C , , ,
2 1
L . Graficul unei soluii particulare este o
curb plan, numit curb integral.
Se numete integral intermediar a ecuaiei difereniale de ordinul n,
( )
( ) 0 , , , , =
n
y y y x F L , o ecuaie diferenial de ordin k n , care conine 1 k
constante arbitrare,
( )
( ) 0 , , , , , , , ,
2 1
=

k
k n
C C C y y y x L L i care este verificat de
integrala general. n particular, dac 1 = k , obinem integrala prim, avnd forma
( )
( ) 0 , , , , ,
1
=

C y y y x
n
L .
Cunoaterea unei integrale intermediare simplific rezolvarea ecuaiei iniiale
deoarece, n acest caz, ecuaia ce trebuie rezolvat este de ordin mai mic, anume k n .
n particular, cunoaterea a n integrale prime, distincte, este echivalent cu cunoaterea
soluiei generale.
Operatorul linear, specific ecuaiilor difereniale este definit ca
( ) ( ) ( ) ( ) x a
x
x a
x
x a
x
x a L
n n
n n
n
+ + + + =

d
d
d
d
d
d
1
1
1 - n
1
n
0
L
i are urmtoarele proprieti :
[ ] [ ] [ ]
2 1 2 1
y L y L y y L
n n n
+ = + ;
[ ] [ ] . , const C y L C y C L
n n
= =
O ecuaie de forma
( )
( )
( )
( )
( ) ( ) ( ) ) ( ) (
1
1
1 0
x f y L x f y x a y x a y x a y x a
n n n
n n
= = + + + +

L
se numete ecuaie diferenial de ordinul n, linear i neomogen.
O ecuaie de forma
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 302
( )
( )
( )
( )
( ) ( ) 0 ) ( 0
1
1
1 0
= = + + + +

y L y x a y x a y x a y x a
n n n
n n
L ,
se numete ecuaie diferenial de ordinul n, linear i omogen.

Pentru o ecuaie diferenial de ordinul n,

( )
( ) 0 , , , , =
n
y y y x F L
nu este ntotdeauna necesar s se gseasc soluia general, deoarece o ecuaie dat,
corespunde unui anumit fenomen fizic.
O anumit soluie a ecuaiei difereniale, care descrie un fenomen fizic concret,
trebuie s verifice att ecuaia, ct i s ndeplineasc anumite condiii, care o determin
n mod unic. Sunt dou tipuri de condiii : condiii iniiale, care apar n problemele
numite, probleme cu valori iniiale (IVP initial value problem) i condiii la margine,
care apar n problemele la limit (BVP boundary value problem).

n general, se cere o soluie a ecuaiei date, astfel nct pentru
0
x x = , funcia y i
derivatele ei
( ) 1
, , ,

n
y y y L , s ia valori date dinainte
1 1 0
, , ,
n
a a a L ,
1 0
) 1 (
1 0 0 0
) ( , , ) ( , ) (

= = =
n
n
a x y a x y a x y L ,
Problema determinrii soluiei y(x), care ndeplinete aceste condiii iniiale se
numete problema lui Cauchy. Pentru o ecuaie diferenial linear de ordinul n,
omogen, exist o singur soluie y(x), care n punctul [ ] b a x ,
0
, satisface
condiiile iniiale. Soluia unei ecuaii difereniale neomogene se obine, adugnd
la soluia ecuaiei omogene, o soluie particular (oarecare) a ecuiei neomogene.
Problemele practice de rezolvare a ecuaiilor difereniale cu condiiile iniiale pot fi
grupate astfel:
probleme cu valori iniiale, la care se cunosc valorile funciilor y
i
, n zona de
nceput a domeniului de definiie, rezolvarea acestora furniznd informaii
despre comportamentul funciilor y
i
, n zona de sfrit a domeniului de
definiie;
probleme cu valori iniiale i finale, n care sunt cunoscute valorile funciilor
y
i
, n zonele de nceput i sfrit ale domeniului de definiie, rezolvarea
completnd informaiile referitoare la aceste funcii, n zonele din
interiorul domeniului de definiie.

Orice ecuaie diferenial de ordin superior poate fi transformat n seturi de
ecuaii difereniale de ordinul nti, dac se face schimbarea de variabil DAlambert-
Euler, ) (x p y = , unde p(x) este funcia necunoscut, iar y este variabila independent
) ( p y y = .
Pentru cazul ecuaiei difereniale de ordinul doi care are forma general
( ) ) (x n y x m y = + ,
efectuarea schimbrii de variabile duce la stabilirea relaiilor :
Rezolvarea numeric a ecuaiilor difereniale 303
) (x p y = , p x m x n p p x m x n
p
p
= = ) ( ) ( ) ( ) (
d
d
,
unde m(x) i n(x) , sunt funcii oarecare cunoscute.
Generaliznd, pentru cazul unei ecuaii sau sistem de ecuaii de gradul n,
schimbarea de variabile, aplicat secvenial, produce modificarea sistemului pn la
forma general,
( ) n i y y y x q y
n i
, , 1 , , , , ,
2 1
L L = = ,
unde, funciile
i
q , sunt considerate cunoscute.

Problemele care se reduc la ecuaii difereniale ordinare de ordinul nti sunt, n
mod necesar, de tipul problemelor cu condiii iniiale, care sunt extrem de numeroase n
calculele inginereti.
Ecuaia fundamental a dinamicii punctului material are forma vectorial,
F a M =
unde a este acceleraia punctului de mas M, iar F este rezultanta forelor care
lucreaz asupra punctului considerat.
n cazul punctului material care descrie o dreapt, pe care o lum ca ax Ox,
ecuaia de micare devine,
|

\
|
= t
t
x
x X
t
x
M ,
d
d
,
d
d
2
2
,
unde X, este componenta forei F dup axa Ox, care depinde, n general, de
poziia punctului mobil, de viteza lui i de timp. Aceasta este o ecuaie diferenial
de ordinul al doilea.
Dac X nu depinde de poziia punctului x, atunci ecuaia de micare devine,
|

\
|
= t
t
x
X
t
x
M ,
d
d
d
d
2
2
i cu substituia
t
x
v
d
d
= , ecuaia se transform n,
( ) ) , ( ,
d
d
notatii alte cu
t y F y M t v X
t
v
M = = , adic o ecuaie diferenial de gradul
nti. De aici mai rezult c, reciproc, orice ecuaie diferenial de gradul (ordinul) nti
reprezint o anumit micare a unui punct material.

Prin urmare, un sistem de ecuaii difereniale ordinare de ordinul nti, se poate
prezenta sub forma,
) , ( ) , (
d
) ( d
t y F y M y t F
t
t y
M = = ,
i de cele mai multe ori, matricea M este normalizat, M=1, astfel c, forma cea
mai frecvent este:
) , ( ) , (
d
) ( d
t y F y y t F
t
t y
= = .
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 304
15.2. Rezolvarea numeric a ecuaiilor difeniale ordinare
(ODE)
Soluia analitic a ecuaiei difereiale ) , ( t y F y M = , poate fi obinut doar n
unele cazuri simple, pentru majoritatea situaiilor aceasta obinndu-se cu mare
dificultate. Din acest motiv, se caut metode mai uoare, care s conduc la gsirea
soluiei.
La ora actual, se cunosc trei categorii de medode pentru rezolvarea ecuaiilor
difereniale ordinare cu condiii iniiale, respectiv:
metode analitice, prin care se obin aa numitele soluii nchise;
metode bazate pe convertirea ecuaiei difereniale n ecuaie cu
diferene finite de ordinul nti, creia i se caut soluia analitic
sau o soluie pseudo-nchis;
integrarea numeric a ecuaiei difereniale, care apeleaz la
metode numerice i conduce la soluii numerice, numite i soluii
deschise.

Metodele numerice de rezolvare a ecuaiilor difereniale pot fi divizate n dou
clase:
metode monopas sau metode de autopornire, la care,
comportamentul funciei la pasul curent este obinut din
comportamentul funciei la pasul precedent, care, pentru nceput,
rezult din condiia iniial
0 0
) ( y t y = ;
metode multipai sau metode de continuare, la care este necesar
cunoaterea funciei y n punctele precedente punctului n care se
caut soluia i, pentru aceasta, este necesar utilizarea pentru
nceput, a unei metode monopas.

Practic, soluiile numerice ale ecuaiilor difereniale se bazeaz pe dezvoltarea n
serie Taylor a funciei.
Pentru o problem care se reduce la rezolvarea unei ecuaii difereniale de forma:
) , ( t y F y = ,
cu condiia iniial
0 0
) ( y t y = , dezvoltarea n serie Taylor a funciei ) (t y , n
0
t t =
este
( ) ( ) ( ) L +

+

+ + =
3
0
0
2
0
0
0 0 0
! 3
) (
! 2
) (
) ( ) ( ) ( t t
t y
t t
t y
t t t y t y t y .
Valoarea funciei,
1 + n
y , la momentul
1 + n
t , n funcie de valoarea funciei,
n
y , la
momentul
n
t este
L +

+

+ + =
+
3 2
1
! 3 ! 2
h
y
h
y
h y y y
n n
n n n
,
Rezolvarea numeric a ecuaiilor difereniale 305
unde
n n
t t h =
+1
.
Exemple tipice de metode monopas sunt metodele Euler i Runge Kutta. n metoda
Runge-Kutta, soluia la pasul
1 + n
t este obinut funcie de
n
y , ) , (
n n
y t F , iar F(t,y) este
evaluat la pai intermediari ntre
n
t i
1 + n
t , exclusiv. Creterea preciziei se datoreaz
numrului mai mare de puncte n care se evalueaz F, fa de cazul seriei Taylor, cnd se
evalua doar n punctul
n
t . Toate metodele monopas sunt explicite.

Metodele multipas, care au o precizie mai mare, necesit cunoaterea valorilor
L , ,
2 1 n n
y y i L , ,
2 1 n n
F F . Se disting metode explicite i implicite. Dac F este o
funcie nelinear de y, pentru a obine soluia la fiecare pas, metodele implicite necesit
rezolvarea unor sisteme de ecuaii nelineare, crescnd timpul de calcul, dar asigur
avantajul stabilitii numerice a soluiei.
15.2.1. Concepte analitice
Pentru rezolvarea numeric a ecuaiilor difereniale ordinare (ODE), este uzual
clasificarea acestora n :
ecuaii de ordinul nti - ecuaii de ordin superior;
o singur ecuaie - sisteme de ecuaii;
lineare - nelineare;
autonome - neautonome sau cuplate;
omogene - neomogene;
valori iniiale - valori la limit.

n continuare, se va face analiza acestor categorii analitice, din punctul de vedere al
influenrii metodelor de calcul.
Aproape orice ODE de ordin superior, pentru nceput, se reduce la un sistem de
ecuaii difereniale ordinare de primul ordin. Dac avem o ecuaie de ordinul n,
( )
) 1 ( ) (
, , , ,

=
n n
y y y t f y L
i notm
n i y y
i
i
, , 2 , 1 ,
) 1 (
L = =

,
putem scrie:
1 , , 2 , 1 ) , , , ( ,
1 1
= =

+
n i y y t f y y y
n n i i
L L .
Pentru sisteme neautonome, t y =
0
i atunci 1
0
=

y . Pentru sistemele autonome,


n i n i y g y
i i i
, , 2 , 1 , , 2 , 1 ), ( L L = = =


unde 1 ) (
0
=
i
y g .
n acest mod, sistemele de ecuaii de ordin superioar se transform n sisteme de
ecuaii de primul ordin, dup izolarea derivatei de ordin superior i tratarea acesteia, n
sensul nlocuirii cu o ecuaie sau sistem de ordinul nti.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 306
Metodele de calcul a sistemelor lineare i nelineare nu sunt foare diferite, dar, n
mod uzual, timpul de calcul aferent sistemelor nelineare este considerabil mai mare.
Pentru a crete viteza de calcul, sistemele de ecuaii nelineare se linearizeaz,
j ij i i
y A B y + =
unde
ij
A este o matrice costant de (n+1) x (n+1), iar
i
B este un vector constant de
lungime n+1. Sistemul linearizat se revolv i apoi, cu noile valori ale lui
ij
A i
i
B ,
se repet liniarizarea, pn cnd se ndeplinete condiia de acuratee.
Distincia dintre ODE omogene i neomogene este fr importan pentru calculele
numerice, cu excepia problemelor cu condiii la margine. Termenul neomogen este
important pentru a obine soluia corect i, relativ neimportant, n stabilitatea numeric i
acurateea analizei. n multe cazuri, utiliznd transformarea
k jk j i
B A y x + =
1
, ecuaia
diferenial se transform n ecuaia omogen
j ij i
x A x = , care, pentru generalizarea
analizei, este un sistem linear, omogen
j ij i
y A y = .
Considernd c
ij
A are n+1 valori proprii, n i
i
, , 2 , 1 , 0 ,
) (
L = c
ij
A este matricea
diagonal a valorilor proprii i matricea
ij
S , a vectorilor proprii, atunci
k ik i
y S z
1
= i
n i z z
i i i
, , 2 , 1 , 0 ,
) (
L = = .
Deci, cu excepia ecuaiilor rigide (stiffness), pentru ecuaiile de ordin superior sau
sistemele de ecuaii, metodele de rezolvare i analiza acestora sunt similare celor pentru o
singur ecuaie de ordinul nti. De notat c soluiile unui sistem linear sunt
n i c e z
i
t
i
i
L , 2 , 1 , 0 ,
) (
= =


sau, funcie de dependena original a variabilelor,
i
t
ik k ik i
c e S z S z
i ) (

= = sau
n
t
in
t
i
t
i i
c e S c e S c e S z
n ) ( ) 1 ( ) 0 (
1 1 0 0

+ + + = L .
Condiiile iniiale, valori iniiale sau valori la margine sau pe frontier, sunt foarte
importante pentru alegerea metodelor de rezolvare. Deoarece cteva metode utilizate
pentru rezolvarea problemelor pe frontier se bazeaz pe problemele cu valori iniiale,
vom analiza pentru nceput problemele cu valori iniiale.
15.2.2. Concepte numerice
n analiza diverselor metode utilizate n rezolvarea ecuaiilor difereniale ordinare
sunt folosite urmtoarele concepte numerice:
acurateea - corespunde erorilor globale de trunchiere, care pot fi de
amplitudine sau de faz;
rigiditatea (stiffness) - dificultile de integrare a sistemelor de ecuaii sau
ecuaiilor de ordin mare, atunci cnd raportul dintre cea mai mare
valoare proprie i cea mai mic valoare proprie este foarte mare;
stabilitatea asociat meninerii soluiei la o valoare finit, pentru orice
Rezolvarea numeric a ecuaiilor difereniale 307
pas al calculului i, din acest punct de vedere, putem avea:
schem numeric stabil soluiile numerice rmn finite, la orice
modificare a pasului de timp;
schem numeric instabil soluiile numerice sar la valori infinite, la
orice modificare a pasului;
schem numeric condiionat stabil soluiile numerice rmn finite,
la o modificare n limite reduse a pasului;
convergena atunci cnd soluiile ecuaiilor numerice se apropie de
soluia exact, o dat ce dimensiunea intervalului h tinde spre zero,
dar nu este obligatoriu s se gseasc soluia exact ;
consistena atunci cnd diferena dintre soluia exact i numeric tinde
spre zero, independent de modul de a tinde spre zero al intervalului
de discretizare.
15.2.3. Metode mono-pas sau uni-pas
Ecuaiile difereniale sunt ecuaii fr memorie, adic valorile lui y(t), pentru t< t
i

nu afecteaz direct valorile lui y(t), la t<t
i
. Unele metode numerice au memorie, iar
altele nu. Metodele uni-pas sau mono-pas sunt cele mai simple i nu au memorie.
Pentru a gsi soluia ecuaiei difeniale ordinare, ODE, de gradul nti pe intervalul
[a, b] , se iau t puncte egal spaiate. Fie n un ntreg pozitiv, astfel c, pasul sau
dimensiunea subintervalului este n i h i a t n a b h
i
, , 1 , 0 , , ) ( L = + = = . Dac a<b, h
este pozitiv i avem integrarea nainte, iar dac a>b, h este negativ i avem integrarea
napoi.
Forma general a metodelor mono-pas este,
( ) ), ( , , (
0 0 1
t y y y t h y y
n n n n
= + =
+

unde este funcia care caracterizeaz metoda. Erorile locale de trunchiere,
( )
1 + p
h O , sunt proporionale cu ordinul termenilor omii din dezvoltarea n serie a
funciei, p+1 i intervalul h.

Metoda Euler ia n consideraie dezvoltarea n serie Taylor a funciilor, termenii
coninnd derivate de ordinul doi sau mai mare fiind neglijai.
Negljind derivatele de ordin mai mare ca unu i folosind notaiile
0
t t h = ,
) , (
0 0 0
t y F F = , pentru lungimea subintervalului se obine,
) , ( ) ( ) ( ) (
0 0 0 0 0 0 0
h F y y h t y F y y h t y t y t y + = + = + = ,
de unde se deduce relaia de recuren:
1 - 0 ,
1
N n h F y y
n n n
+ =
+
.
Dei este foarte simpl, aceast metod duce la erori mari, datorit acumulrii
secveniale a erorilor rezultate din trunchierea dezvoltrii n serie Taylor, astfel c metoda
este mai mult didactic, pentru nelegerea metodelor mai evoluate de rezolvare a
ecuaiilor diferentiale. Eroarea dat de toi termenii care se omit, O, este proporional cu
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 308
h
2
, respectiv O(h
2
).
Metoda Euler modificat ia n consideraie valoarea medie a derivatei, pe un
subinterval. Considerarea doar a valorii derivatei la captul din stnga al acestuia este
principala surs de eroare. Astfel, dup ce 1 - 0 ,
1
N n h F y y
n n n
+ =
+
, a fost
utilizat pentru primul subinterval, cu ajutorul lui t
1
i y
1
corespunztor, pe care-l notm
) 1 (
1
y , se determin F
1
, la captul din dreapta i se face media ( ) 2 /
1 0
F F + . Aceasta se
consider a fi
0
F , n ecuaia iniial i se reia calculul, obinnd o valoare mbuntait a
lui y
1
, pe care o notm cu
) 2 (
1
y . Dac este cazul, procesul se repet de un numr de p ori,
nainte de a trece la urmtorul subinterval, unde se procedeaz n acelai mod. Cu aceast
perfecionare, metoda este foarte utilizat. Metoda se mai numete i metoda implicit
ntr-un pas sau metoda punctului mijlociu, fiind aplicat sistemelor rigide.
Relaia de recuren este,
( ) ( ), 2 , 2 , ,
1, - 0 ,
1 2 1
2 1
K y h t F h K y t F h K
N n K y y
n n n n
j n
+ + = =
+ =
+

Eroarea dat de toi termenii care se omit este proporional cu h
3
, respectiv O(h
3
).
Pentru rezolvarea problemelor rigide (stiff) se aplic metoda lui Euler implicit,
care are la baz relaia,
) , (
1 1 1 + + +
+ =
n n n n
y t F h y y .
n schema implicit, obinerea soluiei este mai dificil, cu att mai mult dac f este
nelinear, dar metoda este mai stabil.
O alt metod de autopornire, dar cu o eroare de trunchiere considerabil mai mic,
este metoda Runge-Kutta, care face integrarea tot pe subintervale. Unul dintre
principalele avantaje ale metodei const n faptul c se aplic uor, pentru orice tip de
ecuaie de ordinul nti i permite chiar varierea pasului reelei.
Considernd subintervalul de discretizare dintre
n
t i
1 + n
t , metoda utilizeaz
estimarea valorii funciei, att la capele subintervalului, ct i la mijlocul acestuia.
Sunt cunoscute dou submetode Runge-Kutta:
metoda Runge-Kutta de ordinul 2 , la care sunt trunchiai termenii
coninnd derivate de ordin superior lui trei, din dezvoltarea n
serie Taylor a funciei i care are la baz relaiile de recuren,

( )
( ) ( ), , , ,
1, - 0 , 5 . 0
1 2 1
2 1 1
K y h t F h K y t F h K
N n K K y y
n n n n
n n
+ + = =
+ + =
+

Eroarea este proporional cu h
3
, respectiv O(h
3
);
metoda Runge-Kutta de ordinul 4 , la care sunt trunchiai termenii
coninnd derivate de ordin superior lui cinci, din dezvoltarea n
serie Taylor a funciei.
Rezolvarea numeric a ecuaiilor difereniale 309

( )
( ) ( )
( ) ( ). , , 2 , 2
, 2 , 2 , ,
1, - 0 , 2 2 6 1
3 4 2 3
1 2 1
4 3 2 1 1
K y h t F h K K y h t F h K
K y h t F h K y t F h K
NJ n K K K K y y
n n n n
n n n n
n n
+ + = + + =
+ + = =
+ + + + =
+

Eroarea este proporional cu h
5
, respectiv O(h
5
).

De menionat c mrirea preciziei metodei nu este posibil. Din relaiile de
recuren se observ c, pentru determinarea funciei y n punctele reelei de discretizare,
nu este nevoie dect de valoarea funciei n punctul precedent.
15.2.4. Metode multi-pas
Metodele multi-pas sunt metode de continuare i deci, necesit aplicarea unor
metode uni-pas, care s permit cunoaterea valorilor L , ,
2 1 n n
y y i L , ,
2 1 n n
F F .
Prin aceasta, metodele se consider c sunt cu memorie.
Relaia de baz a metodelor multi-pas, aici cu m pai, este
0 ) , (
0
1 1
0
1
=

=
+ +
=
+
m
i
i n i n i
m
i
i n i
y t F b h y a ,
fiind definit pentru un numr de m pai i de parametrii a
i
i b
i
. O reducere a
generalizrii este atunci cnd . 1
0
= a Dac 0
0
= b , metoda este explicit, altfel este
implicit. De notat c algoritmii multi-pas necesit evaluarea numai a unei noi
funcii, la fiecare pas.
Sunt foarte multe metode multi-pas, grupate n familii de metode, n care fiecare
membru al familiei gsete soluia, cu o anumit acuratee. Cele mai populare familii sunt
familiile Adams-Bashforth, Adams-Moulton, Gear.
Metodele Adams-Bashforth consider 1
1
= a , 0
0
= b - adic algoritmul este
explicit i K i a
i
L , 3 , 2 , 0 = = , unde K este ordinul, respectiv m=K. Relaiile, n funcie
de ordin, sunt:
Ordinul nti: ) , (
1 n n n n
y t F h y y + =
+
;
Ordinul secund: ( )
1 1 1
, ( ) , ( 3
2
1
+
+ =
n n n n n n
y t F y t F h y y ;
Ordinul trei: ( ) ) , ( 5 , ( 16 ) , ( 23
12
1
2 2 1 1 1 +
+ + =
n n n n n n n n
y t F y t F y t F h y y ;
Ordinul patru:
|
|

\
|
+
+
+ =


+
) , ( 9 ) , ( 37
, ( 59 ) , ( 55
24
1
3 3 2 2
1 1
1
n n n n
n n n n
n n
y t F y t F
y t F y t F
h y y ;
Ordinul cinci:
|
|
|
|

\
|
+
+
+
+ =



+
) , ( 251
) , ( 1274 ) , ( 2616
, ( 2774 ) , ( 1901
720
1
4 4
3 3 2 2
1 1
1
n n
n n n n
n n n n
n n
y t F
y t F y t F
y t F y t F
h y y ;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 310
Ordinul ase:
|
|
|
|

\
|
+
+
+
+ =



+
) , ( 475 ) , ( 2877
) , ( 7298 ) , ( 9982
) , ( 7923 ) , ( 4277
1440
1
5 5 4 4
3 3 2 2
1 1
1
n n n n
n n n n
n n n n
n n
y t F y t F
y t F y t F
y t F y t F
h y y .
Metodele Adams-Moulton consider 1
1
= a , 0
0
b - adic algoritmul este
implicit i 1 , 3 , 2 , 0 = = K i a
i
L , unde K este ordinul, respectiv m=K. Relaiile, n
funcie de ordin, sunt:
Ordinul nti: ) , (
1 1 1 + + +
+ =
n n n n
y t F h y y ;
Ordinul secund: ( )
n n n n n n
y t F y t F h y y , ( ) , (
2
1
1 1 1
+ =
+ + +
;
Ordinul trei: ( ) ) , ( , ( 8 ) , ( 5
12
1
1 1 1 1 1 + + +
+ + =
n n n n n n n n
y t F y t F y t F h y y ;
Ordinul patru:
|
|

\
|
+
+
+ =

+ +
+
2 2 1 1
1 1
1
, ( ) , ( 5
) , ( 19 ) , ( 9
24
1
n n n n
n n n n
n n
y t F y t F
y t F y t F
h y y ;
Ordinul cinci:
|
|
|
|

\
|

+
+
+ =


+ +
+
) , ( 19
) , ( 106 ) , ( 2646
) , ( 646 ) , ( 251
720
1
3 3
2 2 1 1
1 1
1
n n
n n n n
n n n n
n n
y t F
y t F y t F
y t F y t F
h y y ;
Ordinul ase:
|
|
|
|

\
|
+
+
+
+ =


+ +
+
) , ( 27 ) , ( 173
) , ( 482 ) , ( 798
) , ( 1427 ) , ( 475
1440
1
4 4 3 3
2 2 1 1
1 1
1
n n n n
n n n n
n n n n
n n
y t F y t F
y t F y t F
y t F y t F
h y y ;
Metodele Gear consider 0
0
b - adic algoritmul este implicit i 0 =
i
b ,
K i L , 3 , 2 , 1 = , unde K este ordinul, respectiv m=K.
Relaiile, n funcie de ordin, sunt:
Ordinul nti: ) , (
1 1 1 + + +
+ =
n n n n
y t F h y y ;
Ordinul secund: ( ) ) , ( 2 4
3
1
1 1 1 1 + + +
+ + =
n n n n n n
y t F h y y y y ;
Ordinul trei: ( ) ) , ( 6 2 9 18
11
1
1 1 2 1 1 + + +
+ + + =
n n n n n n n
y t F h y y y y y ;
Ordinul patru:
|
|

\
|
+
+
+ =
+ +

+
) , ( 12 3
16 36 48
25
1
1 1 3
2 1
1
n n n
n n n
n n
y t F h y
y y y
y y ;
Ordinul cinci:
|
|

\
|
+ +
+ +
+ =
+ +

+
) , ( 60 12
75 200 300 360
137
1
1 1 4
3 2 1
1
n n n
n n n n
n n
y t F h y
y y y y
y y ;
Rezolvarea numeric a ecuaiilor difereniale 311
Ordinul ase:
|
|

\
|
+ +
+ +
+ =
+ +

+
) , ( 60 10 72
225 400 450 360
147
1
1 1 5 4
3 2 1
1
n n n n
n n n n
n n
y t F h y y
y y y y
y y ;
15.2.5. Sisteme de ecuaii difereniale ordinare de gradul nti
Un sistem de ecuaii difereniale de ordin superior poate fi transformat ntr-un
sistem de ecuaii difereniale de ordinul nti, prin introducerea unor funcii necunoscute.
Rezolvarea unui sistem de n ecuaii difereniale de ordinul nti se poate reduce la
rezolvarea unei ecuaii diferentiale de ordinul n i invers.
Rezolvarea unei ecuaii difereniale de ordinul n se poate reduce la rezolvarea unui
sistem de ecuaii difereniale de ordinul nti.
Un sistem ODE se poate scrie generic sub forma:
0
) 0 ( ), , ( y y y y t f = = ,
unde y, este un vector de elemente
i
y i ) , , , , , (
3 2 1 m
y y y y t f L , este vector funcie,
cu elementele f
i
.
Din punctul de vedere al soluiilor numerice, sistemele ODE sunt extensii nainte
ale tehnicii aplicate unei singure ODE. De exemplu, aplicnd schema explicit Euler,
avem:
( ) m i y y y y t f h y y
n
m
n n n n n
i
n
i
, , 3 , 2 , 1 , , , , ,
) ( ) (
3
) (
2
) (
1
) ( ) ( ) 1 (
L L = + =
+
.
Expresia din partea dreapt poate fi calculat utiliznd datele de la pasul anterior
astfel c, fiecare determinare se face prin avansarea calculului nainte, n sensul creterii
lui t. Din punct de vedere conceptual, aceasta este singura deosebire fundamental dintre
soluionarea numeric a sistemelor, fa de o singur ecuaie.
O categorie aparte de sisteme ODE o reprezint sistemele de ecuaii lineare cu
coeficieni constani, pentru care se pune problema rigiditii (stiffness),
0
) 0 ( , y y y A
dt
dy
= = ,
unde A este o matrice de n x n , a constantelor. Sistemul este de n ecuaii lineare cu
n funcii necunoscute, cu coeficieni constani, omogen.
Pentru ca sistemul s fie determinat, s aib soluii, trebuie ca toate valorile proprii
ale lui A s aib partea real negativ, analog cu cazul unei singure ecuaii, y = y ,
cnd partea real a lui , trebuie s fie negativ.
Aplicnd schema Euler ,explicit, sistemului ODE avem
( )
n n n n
y A h I y A h y y + = + =
+1
sau ( )
0 0
y B y A h I y
n n
n
= + = ,
unde I, este matricea identitate. Pentru a avea soluii numerice stabile, pentru cazul
lui n mare, trebuie ca matricea
n
B s fie finit. Din algebra linear rezult c,
pentru aceasta, trebuie ca valorile proprii ale lui B, s aib modulul mai mic sau cel
mult egal cu unitatea. Valorile proprii ale lui B sunt
i i
h + = 1 , unde
i
, sunt
valorile proprii ale matricei A.
Prin urmare, pentru stabilitatea numeric, trebuie s avem:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 312

max
2
1 1
i
i
h h

+ .
Dac rangul magnitudinii valorilor proprii este mare, de exemplu
1 min max >>
i i i i
S , unde S ,se numete raportul de rigiditate (stiffness ratio) i
soluiile se caut pentru o variaie larg a variabilei independente t, avem aa numitele
sisteme rigide (stiff). Acestea apar n situaii reale, n care sunt cuplate sisteme cu timpi
diferii de rspuns la excitaii exterioare, ca de exemplu: un sistem mecanic compus din
dou pri, una foarte rigid i cealalt foarte flexibil; amestecul a dou substane
chimice cu rate de reacie foarte diferit; strat limit.
n general, astfel de sisteme nu pot fi rezolvate prin scheme directe ci necesit
aplicarea unor metode implicite care, la rndul lor, conduc la necesitatea rezolvrii unui
sistem algebric de ecuaii nelineare, pentru care se aplic procedurile de calcul iterativ,
precum metoda Newton-Raphson.
Pentru rezolvare, sistemele de ecuaii difereniale nelineare sunt supuse tehnicii de
linearizare. Pentru un sistem ODE, la fiecare moment este necesar rezolvarea sistemului
de ecuaii algebrice,
( ) ( ) ( )
) ( ) ( ) ( ) 1 ( ) ( ) ( ) 1 (
, ,
2 2
n n n n n n n
y t f y t f A
h
I
h
y y + |

\
|
+ =
+ +
, m n L , 3 , 2 , 1 =
n care I, este matricea identitate, iar A este matricea Jacobian, recalculat la fiecare
pas,
(
(
(
(
(
(
(
(

=
m
m m m
m
m
n
dy
df
dy
df
dy
df
dy
df
dy
df
dy
df
dy
df
dy
df
dy
df
A
L
M L M M
L
L
2 1
2
2
2
1
2
1
2
1
1
1
) (
.
15.2.6. Probleme cu condiii la margine
Problemele cu condiii la margine (pe frontier sau la limit) conduc, n mod
necesar, la ecuaii difereniale de ordinul doi sau mai mare. Dintre acestea, ecuaiile de
ordin impar, cu numr diferit de condiii la cele dou margini ale intervalului de definiie
sunt, de regul, greu de soluionat numeric i sunt transformate, de obicei, n ecuaii de
ordin par, fie prin integrare, fie prin derivare.
Considerm o ecuaie de ordinul doi cu condiii la margine,
( ) y y x f y = , , ,
0
) 0 ( y y = ,
L
y L y = ) ( ,
unde f, este o funcie arbitrar.
Sunt cunoscute dou tehnici pentru rezolvarea problemelor cu condiii la margine:
Rezolvarea numeric a ecuaiilor difereniale 313
schimbarea variabilei tehnic utilizat de metodele standard pentru
problemele cu valori iniiale, precum metodele Runge-Kutta;
metode directe bazate pe discretizarea puternic nainte i
transformarea ecuaiilor cu derivate, n ecuaii diferentiale i apoi,
rezolvnd sistemul algebric astfel format.
15.2.7. Probleme cu valori proprii
n cazul n care ecuaia diferenial de ordinul doi cu condiii la margine este
omogen, caz frecvent ntlnit, ca de exemplu ecuaia lui Helmholtz,
0
2
= + y k y , , 0 ) 1 ( ) 0 ( = = y y
apare o problem cu valori proprii,
N n n k
n
, , 2 , 1 , L = =
i vectori proprii,
) sin( ) ( x n x y
n
= .
Punnd
2 2
- x k = , sistemul se poate scrie sub forma 0 ) - (A = y I , n
care I este maticea identitate, A este aa numita matrice Stieltjes,
(
(
(
(

=
2 0 0
0 2 1
0 1 2
L
M L M M
L
L
A , iar
(
(
(
(

=
1
2
1
N
y
y
y
y
M
.
15.3. Funcii Matlab pentru rezolvarea ODE
Funciile Matlab pentru rezolvarea ecuaiilor difereniale ordinare, ODE, ncep cu
sintaxa ode,urmat de numere i litere, care s precizeze tipul metodei folosite, astfel c,
n continuare, le numim generic, funcii funode i sunt prezentate n tabelul 15.1.
Toate funciile ode pot rezolva ecuaii de tipul,
) , ( ) , (
d
) ( d
t y F y M y t F
t
t y
M = = ,
iar funciile ode15s, ode23s, ode23t i ode23tb pot rezolva i ecuaii de forma
) , ( ) ( ) , (
d
) ( d
) ( t y F y t M y t F
t
t y
t M = = .
Funciile ode se apeleaz cu una dintre sintaxele:
[T,Y] = funode('F',interval,y0), unde Y este matricea soluiilor, n care
fiecrui rnd i corepunde un moment de timp din vectorul coloan
T , F o funcie de variabile t i y, interval este intervalul de
integrare, [to tfinal], iar pentru a obine soluii n anumite momente
(de exemplu toate cresctoare), intervalul este de forma [t0 t1 t2
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 314
tfinal], i y0 este vectorul condiiilor iniiale;
[T,Y] = funode('F',interval,y0,optiuni) face acelai lucru ca i precedenta,
cu diferena c parametrii implicii de integrare au fost nlocuii cu
opiuni, un argument creat cu funcia odeset, care include
tolerana erorii relative, TelTol=1e-3 i un vector al erorii absolute,
AbsTol, ce are toate elementele egale cu 1e-6;
[T,Y] = funode('F',interval,y0,optiuni,p1,p2,...) transfer funciei F
parametrii opionali p1,p2,.
Funcii Matlab pentru ODE Tabel 15.1.
Funode Metoda
numeric
Tipul de
problem
Complexitatea
ecuaiei
Torerana Utilizare
ode45 Runge-
Kutta
nerigide
(nonstiff)
medie mic n mod uzual, se
recomand a se ncerca
prima dat
ode23 Runge-
Kutta
nerigide
(nonstiff)
mic mare pentru tolerane mari
ale erorii sau
rezolvarea ecuaiilor
cu complexitate medie
ode113 Adams-
Bashfort-
Moulton
nerigide
(nonstiff)
variabil mic -
medie
cnd se dorete o
anumit toleran
pentru erori.
ode15s diferene rigide
(stiff)
variabil mic -
medie
cnd calculul cu ode45
dureaz prea mult
ode23s Rosenbrock
modificat
rigide
(stiff)
mic mare cnd se doresc
tolerane mai mari n
ce privete eroarea, la
rezolvarea sistemelor
cu complexitate mare
ode23t Runge-
Kutta
semi -
rigide
medie mic cnd complexitatea
ecuaiei este moderat
ode23tb rigide
(stiff)
mic mare tolerane mari ale
erorii, la rezolvarea
sistemelor complexe

Ode45 se bazeaz pe formula Runge-Kutta(de gradul 4, 5) cu adaptarea Dormand-
Prince i rezolv ecuaiile ntr-un singur pas. Ode23 se bazeaz pe formula Runge-
Kutta(de gradul 2, 3), cu adaptarea Bogacki-Shampine i rezolv ecuaiile prin mai muli
pai. Ode15s se bazeaz pe formula diferenial numeric, NDFs i necesit mai muli
pai pentru rezolvare. Ode23s se bazeaz pe formula modificat Rosembrock i rezolv
ntr-un singur pas. Ode23t se bazeaz pe formula Runge Kutta.
Pentru funciile ode15s si ode23s, care sunt nite funcii de complexitate mare,
Jacobianul matricei
y
F
d
d
are o mare influen asupra preciziei rezolvrii i de aceea, se
Rezolvarea numeric a ecuaiilor difereniale 315
seteaz J constant pe on, dac Jacobianul
y
F
d
d
este constant.
Fiecare funcie funode accept numai anumii parametri pentru a lucra corect, sau
pot fi specificai, dar sunt ignorai n rezolvare. Parametrii acceptai sunt redai n tabelul
15.2.
Funcii Matlab pentru ODE Tabel 15.2.
Parametri ode45 ode23 ode113 ode15s ode23s ode23t ode23tb
RelTol, AbsTol

OutputFcn, OutputSel,
Refine, Stats

Events

MaxStep, InitialStep

JConstant, Jacobian,
JPattern, Vectorized
-- -- --

Mass
MassConstant
--
--
--
--
--
--


--

--

--

MaxOrder, BDF -- -- --

--


Pentru a crea sau schimba opiunile implicite pentru funciile funode, se folosete
funcia odeset, care se apeleaz cu una dintre sintaxe:
opiuni = odeset ('nume1',valoare1,'nume2',valoare2,...) creeaz o structur
de opiuni, n care argumentele nume1, nume2, primesc valorile
valoare1, valoare2,, argumentele nespecificate sunt iniializate
automat, cu o matrice goal, [ ] i este suficient s scriem numai
caracterele de nceput, care identific n mod unic numele
argumentelor, fr a se ine cont dac, caracterele sunt litere mari
sau mici (nu e case sensitive);
opiuni = odeset (optiunivechi,'nume1',valoare1,...) schimb coninutul unei
structuri vechi de opiuni, creat anterior;
opiuni = odeset (optiunivechi,optiuninoi) modific o structur de opiuni
vechi, combinnd-o cu una nou;
odeset singur, fr nici o specificaie, afieaz toate argumentele precum i
valorile lor posibile: AbsTol: [ positive scalar or vector {1e-6}],
BDF: [ on | {off} ], Events: [ on | {off} ], InitialStep: [ positive
scalar ], Jacobian: [ on | {off} ], JConstant: [ on | {off} ], JPattern:
[ on | {off} ], Mass: [ on | {off} ], MassConstant: [ on | {off}],
MaxOrder: [ 1 | 2 | 3 | 4 | {5} ], MaxStep: [ positive scalar ],
OutputFcn: [ string ], OutputSel: [ vector of integers ], Refine:
[ positive integer ], RelTol: [ positive scalar {1e-3} ], Stats: [ on |
{off} ], Vectorized: [ on | {off} ].
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 316
15.3.1. Rezolvarea Matlab a ecuaiilor difereniale
Pentru rezolvarea ecuaiilor difereniale cu funciile funode, din Matlab este
necesar scrirea expresiei funciei F i a soluiei iniiale, y, care depinde de elementele
funciei.
Forma Matlab a funciei F este:
function ydot=F(t,y)
y(1) = expresie 1; y(2) = expresie 2; y(3) = expresie 3;
ydot = [ y(1); y(2); y(3) ]

Forma pentru vectorul soluii ,y0 este, de exemplu, [2; 0 ; 1], ceea ce reprezint:
y(1)
0
= 2, y(2)
0
= 0, y(3)
0
= 1.

Pentru ODE de ordin superior este necesar transformarea acestora n ODE de
ordinul 1. De exemplu, pentru funcia f(t, y, y', y'',..., y
n-1
),
se definesc,
y
1
= y ; y
2
= y' ; y
3
= y''; ... , y
n
= y
n-1
; Y=[ y
1
, y
2
, y
3
, y
n
]
astfel c,
f(t, y, y', y'',..., y
n-1
) = f(t, y
1
, y
2
, y
3
, y
n
) ; Y'=f(t,Y)
se scriu expresiile,
y
1
'

= y
2
; y
2
'

= y
3
; y
3
'= y
4
; ... ; y
n
' = y
n
;
i n final, funcia F:
function ydot=F(t,y)
expresie 1: y
1
'

= y
2
;
expresie 2: y
2
'

= y
3
;
expresie 3: y
3
'= y
4
;
.. ... ;
expresie n-1: y
n
' = y
n
;
ydot = [ expresie 1; expresie 2; expresie 3; .; expresie n-1 ].

Pentru a scrie funcia odef1.m, care s rezolve ecuaia y''' + y'' + y' =0,se urmeaz
paii:
Pasul 1: se definesc y1 = y ; y2 = y' ; y3 = y'' ;
Pasul 2: se scriu expresiile y1'= y2 ; y2' = y3 ; y3''' = - y'' -y' = -y3 - y2 ;
Pasul 3: se srie funcia odef1:
% Function odef1.m
function ydot=odef1(t,y)
% ydot = [y(2);y(3); -y(3)-y(2)];
T1=y(2) ; T2=y(3) ; T3=-y(3) - y(2);
ydot = [ T1 ; T2 ; T3 ];
Rezolvarea acestei ecuaii pe intervalul ti=[0 20] , cu soluia iniial y0= [10;1;0],
precum i plotarea soluiilor, se realizeaz cu urmtoarea secven de program:
y0=[10;1;0]; ti=[0 20];
[t,y]=ode45('odef1',ti,y0);
Rezolvarea numeric a ecuaiilor difereniale 317
subplot(3,1,1); plot(t,y(:,1)); xlabel('t'); ylabel('dy/dt');
subplot(3,1,2); plot(t,y(:,2)); xlabel('t'); ylabel('d^2y/dt^2');
subplot(3,1,3); plot(t,y(:,3)); xlabel('t'); ylabel('d^3y/dt^3').
Graficul este reprezentat n figura 15.1.

Fig.15.1. Rezolvarea ecuaiei odef1
Un exemplu de sistem cu complexitate mic este un sistem de ecuaii care descriu
micarea unui corp rigid , asupra cruia nu acioneaz fore exterioare, dat de ecuaiile,
3 2 1
y y y = ;
3 1 2
y y y = ;
2 1 3
51 . 0 y y y = ;
0 ) 0 (
1
= y ; 1 ) 0 (
2
= y ; 1 ) 0 (
3
= y .
Pentru rezolvare se creeaz o funcie fiier .M :
function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2);
dy=[dy(1); dy(2); dy(3)];
n acest exemplu vom schimba tolerana erorii cu comanda odeset i vom rezolva,
pe intervalul [0 12], cu vectorul de condiii iniiale [0 11], la momentul 0.
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[t,y] = ode45('rigid',[0 12],[0 1 1],options);
plot(t,y(:,1),'-r',t,y(:,2),'b-.',t,y(:,3),'g.'); ylabel('dy/dt , d^2y/dt^2 , d^3y/dt^3 ');
xlabel('t'); gtext('dy/dt') ; gtext('d^2y/dt^2') ; gtext('d^3y/dt^3').

Graficul funciei este redat n figura 15.2.
Un exemplu de sistem cu grad de complexitate mare sunt ecuaiile Van der Pol,
ecuaii ce descriu oscilaiile
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 318
2 1
y y = ; ( )
1 2
2
1 2
1 1000 y y y y = ; 0 ) 0 (
1
= y ; 1 ) 0 (
2
= y .

Fig.15.2. Graficul funciei rigid
Pentru rezolvare se creeaz o funcie fiier .M :
function dy = vdp1000(t,y)
dy = zeros(2,1); dy(1) = y(2); dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);
Se folosesc toleranele absolute i relative implicite (1e-3 i respectiv 1e-6) i vom
rezolva pe intervalul [0 3000], cu vectorul de condiii initiale [0 2], la momentul 0.
[t,y] = ode15s('vdp1000',[0 3000],[2 0]);
plot(t,y(:,1),'-o'); ylabel('dy/dt') ; xlabel('t');
Graficul primei derivate se prezint n figura 15.3.

Fig.15.3. Graficul primei derivate a ecuaiei Van der Pol
16. CREAREA I CONTROLUL GRAFICELOR
16.1. Crearea i controlul figurilor
Aceste funcii sunt : figure, gcf, clf, shg, close, refresh, openfig.
Funcia figure creeaz o nou figur i poate fi apelat simplu figure, cu care
se creeaz o figur, denumit implicit figura 1, sau figure( nr.) prin care se creeaz
o figur cu numrul nr., dup care se returneaz controlul. De exemplu, figure(20)
deschide o figur cu numrul 20.
Gsirea numrului ultimei figuri deschise se obine cu instruciunea,
N=gcf,
care returneaz numrul ultimei figuri, respectiv N=20.
tergerea unei figuri, n sensul a ceea ce are desenat, se relizeaz cu
instruciunea clf. Dac sunt deschise mai multe figuri i se dorete tergerea unei
figuri avnd un anumit numr, num, atunci comanda este clf(num). Resetarea
tuturor datelor dintr-o figur se execut prin clf reset, care restabilete toate
obiectele din axele curente i proprietile axelor, cu excepia poziiei, la valorile
implicite.
Deschiderea ultimei figuri apelate sau trasate se obine prin comanda shg.
nchiderea unei figuri se realizeaz prin comanda close, care poate fi apelat
sub forma:
close, prin care se nchide ultima figur;
close(num), prin care se nchide figura numrul num;
close('nume'), prin care se nchide figura avnd numele nume;
close all, prin care se nchid toate figurile deschise;
close all hidden, prin care se nchid toate deschiderile windows fcute.

Verificarea dac o anume figur a fost nchis sau nu se realizeaz cu
comanda status=close(num), care returneaz 1, dac figura numrul num este
nchis i 0, dac nu a fost nchis.
Remprosptarea unei figuri se obine cu comanda refresh.
Deschiderea unei figuri specifice Matlab, avnd extensia fig. se execut cu
comanda openfig, care poate fi apelat:
openfig('nume.fig', 'new') sau openfig('nume.fig') ; are ca efect
deschiderea figurii cu numele nume i extensia fig;
openfig('nume.fig', 'reuse') are ca efect deschiderea unei copii a figurii
cu numele nume i extensia fig.

Verificarea dac o anume figur a fost deschis sau nu se realizeaz cu
comanda F=openfig('nume.fig'), care returneaz 1, dac figura numrul num este
nchis, i 0, dac nu a fost nchis.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 320
16.2. Proprietile obiectului figure
Proprietile obiectului figur, figure, pot fi specificate la crearea acesteea,
prin includerea perechilor nume-valoare_proprietate sau, ulterior, prin
identificarea obiectului i folosirea funciilor set i get.
n continuare sunt prezentate proprietile acceptate pentru obiectul figure
i valorile posibile ale fiecrei proprieti.

1. Children - vector_identificatori
Aceast proprietate este un vector al identificatorilor obiectelor,
vector_identificatori, reprezentate n axe. Obiectele derivate ale axelor sunt
axele, elementele de control ale interfeelor grafice i meniurile.

2. Color - culoare
Proprietatea Color specific culoarea folosit pentru fondul ferestrei
grafice a figurii. Culoarea poate fi specificat utiliznd un vector al
valorilor RGB sau un nume de culoare predefinit n Matlab. Valoarea
implicit a acestei culori este cea a culorii de fond a ferestrei grafice
(background).

3. Colormap - matrice m x 3
Aceast proprietate este o matrice m x 3 a ponderii culorii fundamentale
(RGB) care definete o culoare individual. Comenzile grafice ataeaz
fiecrui triplet cte o valoare, culorile fiind apelate prin indicii
corespunztori. Spre exemplu, indexul 1 specific primul triplet RGB,
indexul 2 specific al doilea triplet RGB .a.m.d. Matricea de culoare poate
avea orice lungime, ns trebuie s aib trei coloane. Matricea de culoare a
figurii implicite are 64 de culori predefinite. Aceasta poate fi nlocuit prin
orice alt matrice definit de utilizator sau dintre cele predefinite. Pentru
definirea matricei de culoare trebuie specificat intensitatea culorii rou n
prima coloan (Red), a culorii verde (Green) n a doua i a culorii albastru
(Blue) n a treia coloan. Intensitatea culorilor este un numr real cuprins
ntre 0.0 i 1.0. Valoarea 0 indic lipsa componentei respective, iar
valoarea 1 indic intensitatea maxim a acesteia. Astfel, tripletul [0 0 0]
reprezint culoarea negru, [1 1 1] reprezint culoarea alb, [0.5 0.5 0.5]
reprezint culoarea gri, iar [127/255 1 212/255] este aquamarine.

4. CurrentAxes - identificator_axe
Prin aceast proprietate este posibil returnarea identificatorului axelor
curente ale figurii, identificator_axe, care este identic cu identificatorul
obinut prin funcia gca. n toate figurile care au axe copii, acest
identificator este acela al axelor curente. Axele pot fi fcute curente
folosind funciile axes i set. Dac nu exist axe copil ntr-o figur, se pot
Crearea i controlul graficelor 321
crea unele cu comanda h=get(gcf,'CurrentAxes'), care returneaz i
identificatorul h.

5. CurrentMenu - identificator_meniu
Aceast proprietate conine identificatorul celui mai recent meniu selectat.
Dac se specific un singur identificator pentru meniuri,
identificator_meniu, cu mai mult de o opiune, este necesar o apelare a
acestei proprieti, pentru a vedea care meniu a fost apelat.

6. CurrentObject -identificator_obiect
Prin aceast proprietate se returneaz identificatorul obiectului,
identificator_obiect, care se gsete la punctul curent, CurrentPoint. n
cazul obiectelor multiple suprapuse, obiectul selectat este cel care a fost
primul plasat n figur. Se poate utiliza aceast proprietate pentru a
determina ordinea n care au fost plasate obiectele grafice ntr-o figur.

7. CurrentCharacter - caracter
Aceast proprietate returneaz ultima tast apsat n figura curent, care
se poate citi cu instruciunea get(gcf,'CurrentCharacter').

8. CurrentPoint - [ x y ]
Proprietatea returneaz coordonatele poziiei n care a fost apsat sau
eliberat butonul mouse-ului pe figur (fereastra grafic). Coordonatele
punctului curent sunt msurate din colul stnga jos al ferestrei grafice, n
uniti precizate de proprietatea Units, cu o comand de forma
get(gcf,'CurrentPoint'). Proprietatea se poate folosi i pentru a urmri locul
i numrul de puncte selectate cu mouse-ul n fereastra grafic, prin
diferen.

9. InvertHardcopy - on sau off
Aceast proprietate are efect numai la tiprirea ferestrei grafice. Deoarece
fondul ferestrei grafice a Matlab este implicit de culoare neagr, pentru a
tipri la imprimant pe un fond alb, se folosete aceast proprietate
InvertHardcopy. Dac InvertHardcopy este on, Matlab convertete fondul
reprezentrii grafice la culoarea alb i axele, subdiviziunile, etichetele
axelor etc., la culoarea negru.
Aceast proprietate nu are efect asupra culorilor folosite pentru
celelalte obiecte grafice din reprezentare. Dac InvertHardcopy este off,
care este valoarea implicit, se tiprete fereastra grafic aa cum apare pe
ecran.


10. MenuBar - none sau figure
Proprietatea permite controlul n bara superioar de meniuri a ferestrei
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 322
grafice. Dac este stabilit pe figure valoarea implicit, la partea superioar
a ferestrei grafice se gsete bara de meniuri, iar dac este stabilit pe
none, bara de meniuri lipsete. Setarea se realizeaz prin funcia
set(gcf,'MenuBar',['figure']) sau set(gcf,'MenuBar',['none']), iar gsirea
strii se execut prin comanda get(gcf,'MenuBar').

11. MinColorMap - scalar
Aceast proprietate stabilete numrul de culori folosite de matricea de
culoare printr-o instruciune de forma set(gcf,'MinColorMap',scalar), n
care scalar are valoarea implicit 64.

12. Name - caractere
Proprietatea permite afiarea irului de caractere menionat, caractere, n
bara de titlu a ferestrei grafice. Implicit, acest ir de caractere este gol, fiind
afiat numai: Figure No.1, pentru prima figur deschis i continund cu
creterea progresiv a numrului cu ferestrele grafice deschise. Dac se
precizeaz acest ir de caractere, spre exemplu, EXEMPLIFICARE,
atunci se va afia Figure No.1: EXEMPLIFICARE. Comanda necesar
pentru aceasta este: set(gcf,'Name','EXEMPLIFICARE').

13. NextPlot - new sau add sau replace
Aceast proprietate este utilizat de funciile grafice de dificultate redus:
plot, plot3, fill, fill3, precum i de funciile grafice-M: mesh, surf, bar etc.,
i precizeaz modul cum se construiete urmtorul grafic. Opiunea new
creeaz o fereastr grafic nou, nainte de a afia reprezentarea grafic.
Opiunea implicit, add, utilizeaz pentru reprezentarea grafic figura
curent, iar opiunea replace terge toate proprietile figurii anterioare,
precum i toi copiii figurii, cu excepia poziiei (Position). Comanda
subplot utilizeaz implicit aceast proprietate, subplot(1,1,1) stabilind
NextPlot la replace.

14. NumberTitle - on sau off
Proprietatea afieaz irul de caractere Figure No.n, unde n este numrul
figurii, dac este on (valoare implicit) sau nu-l afieaz, dac este off.
Comenzile sunt set(gcf,'NumberTitle', 'on'), pentru afiare i respectiv
set(gcf,'NumberTitle', 'off'), pentru neafiare.

15. PaperOrientation - portrait sau landscape
Aceast proprietate precizeaz orientarea figurii pe pagin la tiprire.
Orientarea portrait este implicit i are dimensiunea cea mai mare a paginii
pe verical, iar landscape este cu dimensiunea cea mai mare pe orizontal.

16. PaperPosition - [ oriz vert lung lat ]
Proprietatea precizeaz localizarea dreptunghiului n care se tiprete
Crearea i controlul graficelor 323
figura pe pagin, dreptunghi definit prin matricea de poziie,
poz= [ oriz vert lung lat ]
unde: oriz, vert sunt distanele, pe orizontal i vertical, de la colul stnga
jos al paginii pn la colul stnga jos al dreptunghiului care definesc
figura; lung, lat sunt dimensiunile dreptunghiului, lungimea i limea, care
definesc figura. Comanda este de forma set(gcf,'PaperPosition',[1 2 3 4]).
Elementele vectorului poz sunt date n unitile de msur specificate de
proprietatea PaperUnits.

17. PaperSize - [ lung lat ]
Aceast proprietate conine dimensiunile tipului de pagin, PaperType,
msurat n uniti specificate de PaperUnits. Proprietatea se utilizeaz
numai la citire, iar comanda este: get(gcf,'PaperSize'), rezultnd
dimensiunile paginii, lungimea, lung i respectiv limea, lat.

18. PaperType - usletter sau uslegal sau a4letter
Proprietatea este folosit pentru a scala figura trimis la imprimant pe o
pagin usletter cu dimensiunile 21.59 x 27.94 cm (8.5 x 11 in), care este
valoarea implicit, pe o pagin uslegal cu dimensiunile 21.59 x 35.56 cm (8.5
x 14 in), sau pe o pagin a4letter cu dimensiunile 21 x 29.7 cm (8.3 x 11.7 in).

19. PaperUnits - inches sau centimeters sau normalized sau points
Aceast proprietate specific unitile de msur utilizate pentru stabilirea
poziiei figurii pe pagin (PaperPosition) i a dimensiunii paginii (PaperSize).
n toate cazurile, msurarea se face din colul stnga jos al paginii. Unitile
normalizate, normalized, transform colul stnga jos al paginii n
coordonatele (0, 0), iar colul din dreapta sus n (1.0, 1.0). Unitatea points este
egal cu 0.0353 centimetri, iar celelalte uniti de msur sunt uniti absolute,
fiind inches, inches, sau centimetri, centimeters.

20. Parent - identificator
Proprietatea este folosit numai la citit, sub forma get(gcf,'Parent') i
returneaz identificatorul, identificator, obiectului rdcin, care este
printe al obiectului figur. Identificatorul obiectului rdcin este
ntotdeauna 0.

21. Pointers - arrow sau crosshair sau fullcrosshair sau ibeam sau
watch sau topl sau topr sau botl sau
botr sau left sau right sau top sau
bottom sau circle sau cross sau fleur sau
custom
Aceast proprietate permite stabilirea semnului grafic folosit drept cursor
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 324
pentru a indica poziia mouse-ului n fereastra grafic. Sunt posibile
urmtoarele cursoare: valoarea implicit de sgeat (arrow), cruce redus
(crosshair), cruce pe toat dimensiunea figurii (fullcrosshair), un I
(ibeam), clepsidr (watch), sgeat dubl nclinat spre stnga (topl sau
botl), sgeat dubl nclinat spre dreapta (topr sau botl), sgeat dubl
orizontal (left sau right), sgeat dubl vertical (top sau bottom), cerc
(circle), cruce dubl (cross), cruce cu sgei (fleur) sau sub forma unui
urubel (custom). Modul de modificare este cu comanda
set(gcf,'Pointer',['tip']), n care tip este una dintre valorile de mai sus.

22. Position - poz=[oriz vert lung lat]
Prin aceast proprietate se specific mrimea i localizarea ferestrei grafice
pe ecran, definit prin vectorul de poziie, poz=[oriz vert lung lat], n care
oriz, vert sunt distana pe orizontal i pe vertical, de la colul din stnga
jos al ecranului pn la colul din stnga jos al ferestrei grafice, iar lung, lat
sunt dimensiunile ferestrei grafice. Elementele vectorului poz sunt date n
uniti de msur specificate de proprietatea Units.
Pentru a determina poziia ferestrei grafice curente se poate utiliza funcia
get, get(gcf,'Position'), returnnd vectorul de poziie poz, iar pentru a muta
fereastra n alt poziie se folosete funcia set, de exemplu,
set(gcf,'Position',[100 200 225 150]).

23. Resize - on sau off
Dac proprietatea este on, valoare implicit, dimensiunea ferestrei grafice
se poate modifica cu mouse-ul, iar dac este off nu se poate modifica.

24. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic. De exemplu,
pentru obiectul figur, irul de caractere, ir_caractere, este ntotdeauna
figure.

25. Units - pixels sau normalized sau inches sau centimeters sau points
Aceast proprietate specific unitile de msur utilizate pentru
interpretarea dimensiunilor i localizarea datelor. n toate cazurile
msurarea se face din colul stnga jos al ferestrei grafice. Unitile
normalizate transform colul stnga jos al ferestrei grafice n coordonatele
(0, 0), iar colul din dreapta sus n (1.0, 1.0). Unitatea points este egal cu
1/72 inch, adic 0.0353 centimetri, iar celelalte uniti de msur sunt
uniti absolute. Proprietatea afecteaz proprietile CurentPoint i
Position. Specificarea perechilor nume-valoare proprietate, la crearea unui
obiect, trebuie fcut naintea specificrii proprietilor care utilizeaz
aceste uniti.

Crearea i controlul graficelor 325
26. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului, care poate s
nu fie folosit, dar poate fi vizualizat folosind funcia get.

27. Visible - on sau off
Aceast proprietate determin dac obiectul este vizibil pe ecran, cazul on,
sau nu este vizibil, cazul off. Valoarea implicit este on. Dac Visible este
off atunci fereastra grafic nu este afisat.
16.3. Crearea i controlul axelor
Crearea axelor ntr-o poziie dorit se face cu instruciunea H=subplot(m,n,p)
sau H=subplot(mnp), unde fereastra figurii este de axe m x n, iar p d modul de
aezare a figurii n planul general, returnat n H. Cel mai frecvent se utilizeaz
subplot(mnp).
De exemplu, considernd x=1:0.1:10 i y=x.^0.25,
cu secvena,
subplot(121);plot(x,y);xlabel('x');ylabel('y')
se obine graficul din figura 16.1,
cu secvena,
subplot(122);plot(x,y);xlabel('x');ylabel('y')
se obine graficul din figura 16.2,
cu secvena,
subplot(211);plot(x,y);xlabel('x');ylabel('y')
se obine graficul din figura 16.3,
cu secvena,
subplot(212);plot(x,y);xlabel('x');ylabel('y')
se obine graficul din figura 16.4,
cu secvena,
subplot(221);plot(x,y);subplot(222);plot(x,y)
se obine graficul din figura 16.5,
iar cu secvena,
x1=1:0.1:10;y1=x1.^0.25;x2=10:0.1:20;y2=x2.^0.5;x3=100:1:200;y3=log(x3);
subplot(221);plot(x1,y1);subplot(222);plot(x2,y2);subplot(212);plot(x3,y3);
se obine graficul din figura 16.6.

De menionat c, n locul trasrii graficului variaiei lui y funcie de x, se
poate trasa pentru fiecare subgrafic o alt funcie, dup cum rezult i din figura
16.6.
Resetarea datelor se face cu comanda clf reset.

Funcia axes creeaz obiecte grafice axe i accept perechile
nume/valoare_proprietate ca argumente de intrare.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 326
Aceste proprieti, care controleaz diferite aspecte ale obiectului axe, pot fi
stabilite sau citite utiliznd funciile set i get.
O proprietate important a obiectului axe este poziia (Position), care
definete localizarea axelor n interiorul ferestrei grafice.

Crearea axelor la poziii impuse se realizeaz cu comanda
axes('position',poz), n care poz este poziia dat, ca un vector de 4 mrimi sub
forma poz=[oriz vert lung lat], n care oriz, vert sunt distanele pe orizontal i pe
vertical, de la colul din stnga jos al figurii pn la colul din stnga jos al axelor
de coordonate, iar lung, lat sunt dimensiunile axelor.
De exemplu, cu secvena,
poz=[0.1,0.3,0.2,0.4]
h=axes('position',poz)
se produce figura 16.7, n care 0.1,0.3 sunt distanele pe orizontal i pe vertical
de la colul din stnga jos al figurii pn la colul din stnga jos al axelor de
coordonate, iar 0.2 i 0.4 sunt lungimea , respectiv nlimea pe axe.

Elementele vectorului poz sunt date n unitile de msur specificate de
proprietatea Units. Programul Matlab utilizeaz implicit unitile normalizate, la
care (0,0) este colul stnga-jos, iar (1,1) este colul din dreapta-sus al ferestrei
grafice.


Fig.16.1. Reprezentarea subplot(121)
Crearea i controlul graficelor 327

Fig.16.2. Reprezentarea subplot(122)


Fig.16.3. Reprezentarea subplot(211)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 328

Fig.16.4. Reprezentarea subplot(212)


Fig.16.5. Reprezentarea subplot(221);plot(x,y);subplot(222);plot(x,y)
Crearea i controlul graficelor 329

Fig.16.6. Reprezentarea subplot(221);plot(x,y);subplot(222);plot(x,y);subplot(212);plot(x,y)

Fig.16.7. Reprezentarea axes
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 330
Dac se tasteaz numai axes, atunci se deschide o nou figur cu axele
unitare i cu centrul axelor n (0,0).
Prin comanda h=axes, se creeaz axe pe ntreaga fereastr i se returneaz
identificatorul de control h, care n acest caz este h= 7.0090.
Funcia axes(h) creeaz un obiect axe curent cu identificatorul de control h.
De menionat c funcia axes este o funcie relativ simpl pentru crearea
obiectului axe. Obiectele axe (axes) sunt copii (children) ai obiectelor figur
(figure) i prini (parents) ai obiectelor imagine (image), linie (line), suprafa
(surface) i text (text). Obiectele axe definesc cadrul de referin n interiorul cruia
sunt orientate obiectele copil.

Pentu obinerea identificatorului axelor curente se utilizeaz funcia gca (get
curent axes). Aceasta se apeleaz cu sintaxa:
h=gca.
Prin axe curente se neleg axele reprezentrii grafice din fereastra activ, n
care funciile plot, title, surf, mesh etc. reprezint grafic rezultatele. Fiecare figur
are o ax curent. Orice schimbare n figura curent determin funcia gca s
returneze identificatorul de control al noii figuri curente. Pentru a schimba axele
curente sau pentru a crea altele noi, se folosesc funciile axes sau subplot.
Identificatorul de control se folosete apoi asociat cu funciile get sau set pentru a
observa sau modifica proprietile obiectelor axe.

Funcia cla terge axele curente (toi copiii children) i se apeleaz cu una
dintre sintaxele:
cla care terge toate obiectele (linii, texte, module obiect, suprafee i
imagini) din axele curente;
cla reset care iniializeaz la valorile implicite toate obiectele din axele
curente, precum i toate proprietaile axelor, cu excepia poziiei.

Pentru scalarea axelor se utilizeaz funcia axis, care se poate apela cu una
dintre sintaxele:
axis[xmin xmax ymin ymax], ce stabilete scalarea axelor unei
reprezentri grafice ,2D, curente, la valorile precizate de scalarii: xmin, xmax,
ymin, ymax;
axis[xmin xmax ymin ymax zmin zmax], care stabilete scalarea axelor
unei reprezentari grafice, 3D, curente, la valorile precizate de scalarii: xmin,
xmax, ymin, ymax, zmin, zmax;
axis[xmin xmax ymin ymax zmin zmax cmin cmax], care stabilete
scalarea axelor unei reprezentari grafice 3D curente, la valorile precizate de
scalarii: xmin, xmax, ymin, ymax, zmin, zmax i scalarea culorilor ntre cmin i
cmax (vezi funcia caxis);
V=axis returneaz un vector linie care conine limitele reprezentrii
grafice curente, iar vectorul V are 4 elemente pentru reprezentrile 2D, 6
Crearea i controlul graficelor 331
componente pentru reprezentrile 3D i 8 componente pentru reprezentrile 3D i
setarea culorii;
axis('auto') autoscaleaz reprezentarea grafic curent, alegnd cele
mai bune limite, astfel nct s fie reprezentat integral;
axis('manual') menine limitele curente, memornd graficul curent i
toate proprietile graficelor i adaug graficul peste cel curent;
axis('tight') seteaz limitele axelor la valorile datelor, setare care, de
regul, este implicit;
axis('fill') seteaz limitele axelor i PlotBoxAspectRatio, astfel nct
axele devin poligonale, dar are efect numai dac PlotBoxAspectRatio sau
DataAspectRatioMode sunt setate manual;
axis('ij') realizeaz reprezentarea grafic n coordonate matriciale, cu
originea sistemului de coordonate n colul din stnga sus; axa i este vertical i
orientat de sus n jos, iar axa j este orizontal i orientat de la stnga la dreapta,
ca n figura 16.8;
axis('xy') realizeaz reprezentarea grafic n coordonate carteziene, cu
originea sistemului de coordonate n colul din stnga jos; axa x este orizontal i
orientat de la stnga la dreapta, iar axa y este vertical i orientat de jos n sus;
axis('equal') realizeaz reprezentarea grafic cu aceeai scal pe toate
axele, ceea ce face ca, de exemplu, sphere(25) s arate ca o sfer i nu ca un
elipsoid;
axis('image') realizeaz reprezentarea grafic cu aceeai scal pe toate
axele, cu excepia faptului c se face o plotare bine ajustat la date;
axis('square') stabilete axele curente la o form ptrat;
axis('normal') reface starea normal a axelor i anuleaz orice restricie
introdus anterior, referitoare la scalare sau uniti de msur;
axis('off') terge etichetele axelor graficelor;
axis('on') reface etichetele axelor graficelor;
[s1,s2,s3]=axis('state') returneaz trei iruri de caractere care indic
starea curent a proprietilor axelor, dup cum urmeaz:
s1 = 'auto' sau 'manual' ;
s2 = 'on' sau 'off' ;
s3 = 'xy' sau 'ij' .

Fr argumente de ieire, comanda axis (s1,s2,s3) reface proprietile axelor
la valorile indicate de cele trei iruri de caractere, cu observaia c valoarea
implicit este axis('auto', 'on','xy').

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 332

Fig.16.8. Reprezentarea axis('ij')
Trasarea unei reele (grid) pe grafic, respectiv a unei reele de linii verticale i
orizontale pe un grafic 2D sau 3D, pentru facilitarea citirii datelor, se face cu
funcia grid, apelat cu sintaxa grid on sau grid off. Dac funcia grid este setat
on, pe grafic sunt reprezentate liniile reelei, iar dac este off, acestea sunt
eliminate. Funcia grid stabilete proprietile Xgrid, Ygrid i Zgrid ale obiectului
axe curente.

Funcia box realizeaz o demarcaie a axelor, putnd fi apelat cu:
box sau box on - cnd adaug o demarcaie a axelor, ca n figura 16.9;
box off cnd nu adaug o demarcaie a axelor curente.

Reinerea (memorarea) graficului curent, pentru a aduga peste acesta
urmtoarele reprezentri grafice, se realizeaz cu funcia hold, care se apeleaz cu
una dintre sintaxele:
hold on sau hold memoreaz graficul curent i toate proprietile
axelor, adugnd urmtoarele grafice peste cel curent, iar proprietatea NextPlot a
ambelor obiecte, figur i axe, este stabilit la add;
hold off returneaz starea iniial, prin care fiecare comand plot terge
graficul anterior i proprietile axelor nainte de a desena un nou grafic, iar
proprietatea NextPlot a ambelor obiecte, figur i axe, este stabilit la replace.
Dac n fereastra grafic exist mai multe subferestre grafice, fiecare dintre
acestea are o stare a funciei hold, stabilit ca proprietate a obiectelor figur sau
Crearea i controlul graficelor 333
axe.

Fig.16.9. Reprezentarea box on

Testarea strii funciei hold se face cu funcia ishold, care returneaz 1, dac
hold este activ (adic suprapune reprezentrile grafice) i 0, dac este dezactivat
(adic fiecare nou reprezentare o terge pe cea anterioar).
Pentru a gsi modul de scriere (aspectul datelor) pe axele curente se
utilizeaz funcia daspect, care se poate apela cu una dintre sintaxele:
as=daspect gsete aspectul datelor pe axele curente;
daspect([X Y Z]) seteaz aspectul datelor;
daspect('mode') seteaz aspectul datelor n funcie de 'mode', care
poate fi 'auto' sau 'manual'.
De menionat c funcia daspect seteaz datele n proprietatea axelor
DataAspectRatio sau gsete datele din proprietatea axelor DataAspectRatioMode.
Pentru a plota caseta cu aspectul datelor se utilizeaz funcia pbaspect, care
se poate apela cu una dintre sintaxele:
pbar=pbaspect gsete caseta cu aspectul datelor pe axele curente;
pbaspect(X Y Z]) seteaz caseta cu aspectul datelor;
pbaspect('mode') seteaz caseta cu aspectul datelor n funcie de
'mode', care poate fi 'auto' sau 'manual'.
De menionat c funcia daspect seteaz datele n proprietatea axelor
PlotBoxAspectRatio sau gsete datele din proprietatea axelor
PlotBoxAspectRatioMode.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 334
Pentru a realiza un zoom, adic o mrire a unei figuri 2D, se utilizeaz
funcia zoom, care poate fi apelat cu una dintre sintaxele:
zoom(factor) realizeaz un zoom (mrire) a axelor curente de attea ori
ct este specificat n factor;
zoom sau zoom on creeaz condiiile unei stri zoom, care permite ca la
fiecare acionare a butonului stnga mouse s se fac un zoom avnd factor=2
(dublare), iar la acionarea butonului dreapta mouse o revenire tot cu factor=2;
zoom off anuleaz starea de zoom;
zoom xon sau zoom yon creeaz condiiile de zoom pe axa x sau axa y;
zoom reset reseteaz starea de zoom;
zoom(figur,opiune) aplic funcia zoom pentru figura figur, iar
opiune poate fi una dintre cele de mai sus (on,off,xon,xoff,reset).
Funcia caxis stabilete limitele ntre care se scaleaz matricea de culoare
pentru reprezentarea grafic.
16.4. Proprietile obiectului grafic axe
Proprietile obiectului axe pot fi specificate la crearea acestora, prin
includerea perechilor nume-valoare proprietate sau mai trziu, prin folosirea
funciilor set i get.
n continuare sunt prezentate principalele proprieti acceptate pentru
obiectul grafic axe i valorile posibile ale fiecrei proprieti.
1. AspectRatio - [raport_axe, raport_date]
Aceast proprietate controleaz raportul celor dou axe la reprezentrile
2D, care specific:
raport_axe raportul dintre lungimea axelor verticale i
lungimea axelor orizontale;
raport_date raportul dintre lungimea unitii axei verticale
i lungimea unitii axei orizontale.
Programul Matlab utilizeaz implicit raportul specificat n raport_axe,
pentru care se umple cel mai bine dreptunghiul definit prin proprietatea
Position. La crearea axelor cu raport_date specificat, se schimb limitele
unei axe i se menine raportul lungimilor specificat n raport_axe, dar
aceste schimbri nu afecteaz proprietatea limitelor Xlim, Ylim sau Zlim.
Aceste rapoarte sunt numere n intervalul [0, ). Ambele rapoarte sunt
implicit NaN, adic rapoarte nespecificate. La prima folosire, se aleg
automat cele mai bune rapoarte, care realizeaz o reprezentare ncadrat
corespunztor n fereastra grafic.
2. Box - on sau off
Aceast proprietate specific dac graficul este ncadrat de un dreptunghi,
pentru reprezentri 2D sau de un cub, pentru reprezentri 3D.

Crearea i controlul graficelor 335
3. Children - vector_identificatori
Aceast proprietate este un vector al identificatorilor obiectelor,
vector_identificatori, reprezentat n axe. Obiectele derivate (copil) ale
axelor pot fi imagini, linii, suprafee i text.
4. Clim -[Cmin, Cmax]
Aceast proprietate determin modalitatea dup care se transform valorile
datelor n matricea de culoare. Programul Matlab transform valoarea
minim n prima culoare a matricei de culoare i valoarea maxim n
ultima culoare a matricei de culoare. n acest caz, ntregul interval al
matricei de culoare este asociat ntregului interval al datelor de intrare.
Exist posibilitatea schimbrii acestei transformri prin setarea lui Cmin, la
valoarea primei culori dorite din tabela culorilor i a lui Cmax, la ultima
culoare dorit din aceast tabel. n acest caz, datele de intrare mai mici
dect Cmin i mai mari dect Cmax sunt omise, devenind transparente.
Uneori ns, este util reprezentarea numai ntr-o zon a intervalului de
culoare, rezervnd pentru alte reprezentri un anumit interval, folosindu-se
numai o poriune din matricea de culoare. Aceast proprietate acioneaz
asupra obiectelor suprafa, nu i asupra imaginilor, liniilor i textului.
5. ClimMode - auto sau manual
Valoarea implicit a lui ClimMode este auto i programul Matlab calculeaz
limitele valorilor axelor de culoare, pe care le transmite n ntregime axelor
copil. Dac ClimMode este setat manual, atunci limitele axelor de culoare se
schimb prin setarea proprietii Clim, la valoarea dorit.
6. Color - Culoare sau non
Aceast proprietate prexizeaz culoarea folosit pentru a umple aria
definit prin proprietatea Position, care d fondul reprezentrii grafice din
axele curente sau cele specificate. Culoarea, Culoare, poate fi specificat
utiliznd un vector al valorilor RGB sau un nume de culoare predefinit n
Matlab. Valoarea implicit, non, a acestei culori, este cea a culorii de fond
a ferestrei grafice.
7. ColorOrder - matrice m x 3 sau valori RGB
Aceast proprietate definete ordinea culorilor folosite de reprezentrile
grafice, fiind o matrice m x 3 sau valori RGB. n cazul n care culorile
liniilor reprezentrilor grafice realizate cu funciile de tip plot sau plot3 nu
sunt specificate, atunci se aleg, ciclic, culorile predefinite, n ordinea:
galben mov - albastru_marin rou verde albastru.
8. GridLineStyler - tip_linie
Prin aceast proprietate se definete tipul de linie, tip_linie, folosit pentru
desenarea liniilor grid. Sunt acceptate urmtoarele tipuri de linii: linie
continu (-), linie ntrerupt (--), linie punct (- .) i linie din puncte (:). n
paranteze sunt prezentate simbolurile acestor tipuri de linii.

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 336
9. NextPlot - new sau add sau replace
Aceast proprietate este folosit de toate funciile care utilizeaz obiectul
axe, precum plot, plot3, fill, fill3, mesch, surf, bar etc. Opiunea new
creeaz noi axe, nainte de a face o reprezentare grafic, iar opiunea add
adaug noi obiecte la axele curente. n mod implicit, este luat opiunea
replace, care terge axele curente i creeaz altele noi, n aceeai poziie.
Dac funcia hold este setat off, proprietatea NextPlot este stabilit la
opiunea replace, iar dac hold este on, atunci NextPlot este setat pe add.
10. Parent - identificator
Proprietatea este utilizat numai la citirea identificatorului obiectului axe,
identificator, care este printele obiectului figur, cu funcia gca, care
returneaz i identificatorul axelor curente ale figurii.
11. Position - poz=[oriz vert lung lat]
Prin aceast proprietate se definete vectorul de poziie, poz=[oriz vert
lung lat], n care oriz, vert sunt distanele pe orizontal i pe vertical, de la
colul din stnga jos al figurii pn la colul din stnga jos al axelor de
coordonate, iar lung, lat sunt dimensiunile axelor.

12. TickLengtht - vector [2D 3D]
Aceast proprietate specific lungimea liniuei care divizeaz axele, ca
raport al dimensiunilor axelor. Proprietatea este descris de un vector cu
dou elemente, primul pentru reprezentrile 2D, iar al doilea pentru
reprezentrile 3D. Valorile implicite sunt [0.01 0.0025].
13. TickDir - in sau out
Prin aceast proprietate se specific dac liniile care marcheaz diviziunile
axei sunt orientate spre interior valoare implicit, in, sau spre exterior, out.

14. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic. De exemplu,
pentru obiectul axe, irul de caractere, ir_caractere, este ntotdeauna axes.

15. Units - pixels sau normalized sau inches sau centimeters sau points
Aceast proprietate specific unitile de msur utilizate pentru
interpretarea proprietii Position. n toate cazurile msurarea se face din
colul stnga jos al ferestrei grafice. Unitile normalizate transform colul
stnga jos al ferestrei grafice n coordonatele (0, 0), iar colul din dreapta
sus n (1.0, 1.0). Unitatea points este egal cu 1/72 inch, adic 0.0353
centimetri.
16. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului, care poate s
nu fie folosit, dar poate fi vizualizat folosind funcia get.

Crearea i controlul graficelor 337
17. View - [az elv]
Aceast proprietate stabilete punctul de observare al reprezentrii grafice
3D, caracterizat prin azimut, az, care d unghiul de rotire n plan orizontal
i prin nlimea, elv, care d unghiul cu planul orizontal. Ambele unghiuri,
az i elv, sunt date n grade. Valorile pozitive ale azimutului au
semnificaia unei rotiri n sensul acelor de ceasornic n jurul axei z.
Valorile pozitive ale nlimii permit o vedere de deasupra obiectului, iar
valorile negative, o vedere de sub obiect.
18. Visible - on sau off
Proprietatea determin dac obiectul este vizibil pe ecran, cazul on, sau nu
este vizibil, cazul off. Valoarea implicit este on. Dac Visible este off
atunci liniile axelor, marcajele de divizare i etichetele nu sunt vizibile,
ns copiii obiectelor axe nu sunt afectai.

Pentru controlul axelor (X, Y i Z) sunt specifice o serie de proprieti,
care sunt prezentate n continuare, mpreun cu valorile specifice.
Prezentarea s-a fcut numai pentru axa X, dar acestea sunt identice i pentru
axele Y i Z prin nlocuirea lui X cu Y i respectiv Z.
1. XColor - culoarea
Aceast proprietate seteaz culoarea axei X, a liniilor de divizare, a
etichetelor care marcheaz diviziunile i a liniilor reelei acesteia.
2. XDir - normal sau reverse
Valoarea implicit a acestei proprieti este normal, normal, i stabilete
direcia de cretere a valorilor numerice pe axa X, de la stnga la dreapta,
iar valoarea reverse inverseaz aceast direcie.
3. XGrid - on sau off
Dac aceast proprietate este on, atunci sunt reprezentate linii reea
perpendiculare pe axa X, n dreptul fiecrei diviziuni a acesteia. Valoarea
implicit este off, fr linii reea.

4. Xlabel - text_identificator
Proprietatea este identificator al obiectului text utilizat pentru etichetarea
axei X. Pentru a avea un identificator, trebuie creat un obiect
text_identificator, ca de exemplu:
set(gca,'xlabel',text(0.5,-0.2,'Axa X')) ,
n care 0.5 semnific faptul c textul Axa X apare la mijlocul axei (la 0.5 de
colul stnga jos), iar -0.2 semnific faptul c este sub axa X la 0.2 uniti
normalizate. O metod mult mai simpl pentru plasarea etichetei axei X
este funcia xlabel.
5. XLim - [ Xmin Xmax]
Aceast proprietate precizeaz valorile mimim, Xmin, i maxim, Xmax,
ale axei X, valori care pot fi pozitive sau negative.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 338
6. XLimMode - auto sau manual
Dac proprietatea XlimMode este stabilit pe auto, atunci reprezentarea se
face cu autoscalare, iar dac este pe manual, atunci zonele selectate se
reprezint manual.

7. XScale - linear sau log
Proprietatea stabilete modul de scalare al axei X, care poate fi linear,
linear, sau logaritmic, log.

8. Xtick - auto sau manual
Aceast proprietate specific localizarea i valoarea diviziunilor pe axa X.
De exemplu, dac:
set(gca,'Xtick', [0 0.25 0.5 0.75 1]),
atunci se stabilesc diviziuni ale axei X elementele 0, 0.25, 0.5, 0.75, 1. De
menionat c axa X este n uniti normalizate de la 0 la 1.

9. XtickMode - auto sau manual
Dac proprietatea XtickMode este stabilit pe auto, atunci distanele dintre
divizori sunt calculate automat, iar n caz contrar, acestea trebuie precizate
manual, ca n exemplul de la punctul anterior.
16.5. Crearea obiectului grafic linie i proprietile
acestuia
Pentru crearea obiectului linie se folosete funcia grafic line, care se poate
apela cu una dintre sintaxele:
h=line(x,y), care adaug liniile din vectorii x i y n planul axelor
curente, iar dac x i y sunt matrici, se traseaz cte o linie pentru fiecare
coloan;
h=line(x,y,z), care creeaz linii n cordonate 3D;
h=line('Propriet','valoare', ), asociaz o anume proprietate, Propriet,
cu valoarea valoare.

Obiectele linie sunt copii ai obiectelor axe. Liniile sunt elemente
fundamentale folosite pentru realizarea graficelor, contururilor i marginilor
suprafeelor. Funcia line accept ca argumente de intrare perechile nume-valoare
proprietate. Aceste proprieti, care controleaz diferite aspecte ale obiectului linie,
sunt descrise n continuare i pot fi stabilite utiliznd funcia set i citite, utiliznd
funcia get.
Perechile (x,y) sau (x,y,z) pot fi urmate de perechile nume-valoare
proprietate, pentru a specifica proprietile suplimentare ale obiectului linie. Pentru
modificarea unui obiect linie creat anterior, coordonatele pot fi omise,
specificndu-se numai perechile nume-valoare proprietate.
Crearea i controlul graficelor 339
Dac se folosete ca argument de ieire, funcia returneaz un identificator h,
folosit pentru controlul caracteristicilor obiectului linie.

Proprietile obiectului linie pot fi specificate la crearea acestuia, prin
includerea perechilor nume-valoare proprietate sau ulterior, prin identificarea
obiectului i folosirea funciilor set i get.
n continuare, se prezint lista proprietilor acceptate de obiectul grafic
linie i valorile posibile ale fiecrei proprieti.
1. Children - vector_identificatori
Obiectul linie nu are copii, astfel nct aceast proprietate este ntotdeauna
o matrice goal.
2. Clipping - on sau off
Dac aceast proprietate este on, valoare implicit, atunci orice poriune de
linie din afara zonei definit de dreptunghiul axelor nu va fi afiat, iar
dac este off , se va afia.
3. Color - Culoare
Proprietatea specific culoarea folosit pentru trasarea liniei. Culoarea,
Culoare, poate fi specificat utiliznd un vector al valorilor RGB sau un
nume de culoare predefinit n Matlab.
4. EraseMode - normal sau background sau xor sau none
Aceast proprietate controleaz metodele folosite de Matlab pentru
desenarea i tergerea liniilor, fiind utilizat cu precdere pentru crearea
secvenelor de animaie n care, pentru a obine efectele dorite, este necesar
controlul individual al modului de redesenare a fiecrui obiect. Modul
normal, care este valoarea implicit, afecteaz ntreaga zon afiat i
permite obinerea unei imagini foarte bune, dar necesit mult timp.
Celelalte moduri sunt rapide, dar rezult imagini calitativ mai slabe.
Setarea se face cu comanda: set(line,'Erasemode','normal').
5. LineStyle - sau -- sau : sau -. sau + sau o sau * sau . sau x
Prin aceast proprietate se definete tipul de linie sau marker care este
folosit pentru trasarea obiectului linie. Sunt acceptate urmtoarele tipuri de
linii i markere: linie continu (-), linie ntrerupt (--), linie punct (-.), linie
din puncte (:), punct (.), cerc (o), plus(+), stelu (*) i x (x). n paranteze
sunt prezentate simbolurile acestor tipuri de linii i markere.
6. LineWidth - gros
Aceast proprietate precizeaz grosimea, gros, a liniilor cu care se face
reprezentarea. Valoarea implicit este de 1 punct, respectiv 0.0353
centimetri sau 1/72 inch.
7. MarkerSize - dim
Proprietatea precizeaz dimensiunea marcajelor i se aplic numai dac
proprietatea LineStyle este stabilt pe: cerc (o), plus(+), punct (.), stelu
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 340
(*) i x (x). Dimensiunea implicit este 6 puncte (1 punct = 0.0353 cm
=1/72 in).
8. Parent - identificator
Aceast proprietate returnez identificatorul, identificator, printelui
obiectului linie, care este ntotdeauna un obiect axe.
9. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic numai la citire,
apelnd get. De exemplu, pentru obiectul linie, irul de caractere,
ir_caractere, este ntotdeauna line.
10. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului i poate fi
vzut folosind funcia get.
11. Visible - on sau off
Aceast proprietate determin dac obiectul este vizibil pe ecran, cazul on,
sau nu este vizibil, cazul off. Valoarea implicit este on.
12. Xdata - vector
13. Ydata - vector
14. Zdata - vector
Proprietile Xdata, Ydata i Zdata specific datele utilizate pentru a
genera liniile. Dac datele sunt sub forma unor matrici, pentru fiecare
coloan se traseaz cte o linie, dar trebuie ca toate coloanele sa aib
acelai numr de linii.
16.6. Crearea obiectului grafic text i proprietile
acestuia
Pentru crearea unui obiect text, care se poate aduga la o reprezentare grafic,
se folosete funcia text, ce se poate apela cu una dintre sintaxele:
h=text(x,y,textul) - adaug irul de caractere textul, n poziia specificat de
coordonatele (x, y) ale axelor curente, date n uniti ale acestora;
h=text(x,y,z, textul) adaug caracterele textul n poziia precizat de
coordonatele 3D;
h=text returneaz un vector coloan al identificatorilor obiectelor text, cte
unul pentru fiecare obiect text;
h=text('Propriet','valoare', ) asociaz o anume proprietate, Propriet, cu
valoarea valor.

De menionat c funcia text este de nivel nalt, atunci cnd este folosit
direct pentru a aduga texte pe un grafic, sau de nivel sczut, atunci cnd creeaz
obiecte text.
Crearea i controlul graficelor 341
Obiectele text sunt copii ai obiectelor axe. Funcia text creeaz obiecte
grafice text i accept perechile nume - valoare proprietate, ca argumente de
intrare. Aceste proprieti, care controleaz diferite aspecte ale obiectului figur,
sunt descrise mai jos i pot fi setate sau citite, utiliznd funciile set i get.
Perechile (x,y) sau (x,y,z) pot fi urmate de perechile nume - valoare
proprietate pentru a specifica proprieti suplimentare ale obiectului text. De
asemenea, coordonatele pot fi omise, precizndu-se numai perechile nume -
valoare proprietate, pentru modificarea unui obiect creat anterior.

Proprietile obiectului text pot fi specificate la crearea acestuia, prin
includerea perechilor nume - valoare proprietate sau ulterior, prin identificarea
obiectului i folosirea funciilor set i get.
n continuare, se prezint lista proprietilor acceptate de obiectul grafic
text i valorile posibile ale fiecrei proprieti.
1. Children - vector_identificatori
Obiectul text nu are copii, astfel nct aceast proprietate este ntotdeauna o
matrice goal.
2. Clipping - on sau off
Dac aceast proprietate este on, atunci orice poriune de text din afara
zonei definit de dreptunghiul axelor va fi afiat, iar dac este off ,
valoarea implicit, nu se va afia.
3. Color - Culoare
Proprietatea specific culoarea folosit pentru text. Culoarea, Culoare,
poate fi specificat utiliznd un vector al valorilor RGB sau un nume de
culoare predefinit n Matlab. Valoarea implicit a culorii este alb.
4. Extend - poz=[orizontal vertical lung lat]
Aceast proprietate precizeaz poziia i dimensiunile dreptunghiului care
ncadreaz irul de caractere (textul). Specificarea acestuia se face cu un
vector de forma poz=[orizontal vertical lung lat], n care:
orizontal i vertical sunt distanele, pe orizontal i vertical,
de la colul din stnga jos al dreptunghiului care definete
figura, pn la colul din stnga jos al dreptunghiului care
ncadreaz textul;
lung i lat sunt dimensiunile dreptunghiului care ncadreaz
textul.
Elementele vectorului poz sunt date n uniti de msur specificate de
proprietatea Units.
5. FontAngle - normal sau italic sau oblique
Aceast proprietate precizeaz modul de scriere: normal, adic drept
(valoare implicit), italic italicul cunoscut, sau oblique, respectiv
nclinat, care de fapt nu difer de italic. Setarea unui anumit tip de scriere
se face cu o comand de forma set(text(5,1.3,'textul'),'FontAngle',['italic']),
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 342
n care x=5 i y=1.3.
6. FontName - numefont
Proprietatea stabilete numele fontului folosit de obiectul text, fiind unul
dintre cele gestionate de Windows, i care se gsete n subdirectorul su,
System.
7. FontSize - dimfont
Aceast proprietate stabilete dimensiunea fontului folosit de obiectul text.
8. FontStrikeThrough - on sau off
Dac aceast proprietate este on, atunci textul este afiat tiat cu o linie, iar
dac este off, valoare implicit, atunci textul apare normal.
9. FontUnderline - on sau off
Dac aceast proprietate este on, atunci textul este afiat, subliniat cu o
linie, iar dac este off, valoare implicit, atunci textul apare normal.
10. FontWeight - light sau normal sau demi sau bold
Aceast proprietate precizeaz grosimea liniilor folosite pentru scrierea
textului, care pot fi subire (light), normal (normal), semibold (demi), sau
bold (bold).
11. HorizontalAlignment - left sau center sau right
Proprietatea precizeaz tipul de aliniere a textului pe orizontal fa de
punctul menionat de proprietatea Position, aliniere care poate fi: la stnga
(left), centrat (center), sau la dreapta (right).
12. Parent - identificator
Aceast proprietate returnez identificatorul, identificator, obiectului axe,
care este printe al obiectului text.
13. Position - poz=[ x y z ]
Prin aceast proprietate se precizeaz poziia textului n 3D (dac z lipsete
el este considerat zero). Unitile folosite sunt cele precizate pentru
proprietatea Units.
14. Rotation - rotire
Aceast proprietate stabilete orientarea textului la una dintre cele apte
posibile: 0, 90, 180, 270 (n realitate specific numai patru orientri
diferite). Setarea unei rotaii se face cu o comand de forma
set(text(5,1.3,'textul'),'FontAngle',['italic'],'Rotation',-180).
15. String - ir_caractere
Proprietatea definete irul de caractere, ir_caractere, care urmeaz s fie
afiat de obiectul text.
16. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic, care este n acest
caz ntotdeauna text.
Crearea i controlul graficelor 343
17. Units - pixeli sau normalized sau inches sau centimeters sau points
Aceast proprietate specific unitile de msur utilizate pentru
interpretarea proprietii Position. n toate cazurile, msurarea se face din
colul stnga jos al ferestrei grafice. Unitile normalizate transform colul
stnga jos al ferestrei grafice n coordonatele (0, 0), iar colul din dreapta
sus n (1.0, 1.0). Unitatea points este egal cu 1/72 inch, adic 0.0353
centimetri, iar celelalte uniti de msur sunt uniti absolute.
18. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului i poate fi
vzut folosind funcia get.
19. VerticalAlignment - top sau cap sau middle sau baseline sau bottom
Aceast proprietate specific tipul de aliniere a textului pe vertical fa de
punctul menionat de proprietatea Position. Implicit, textul este centrat
(middle). O posibil comand pentru fixarea aranjrii pe vertical este
set(text(1,1,1,'textul'),'VerticalAlignment',['top'],'Position',[4.9 1.2 1]).
20. Visible - on sau off
Aceast proprietate determin dac obiectul este vizibil pe ecran, cazul on,
sau nu este vizibil, cazul off. Valoarea implicit este on.

16.7. Crearea obiectului grafic suprafa i proprietile
acestuia
Pentru crearea unui obiect grafic suprafa se folosete funcia surface, care
se poate apela cu una dintre sintaxele:
h=surface(x,y,z,C) care pentru x =[1 2 3 4 5; 6 7 8 9 10], y=x.^2.75,
z=x.*y i C = [ 0.1 0.25 0.4 0.6 0.75; 0.94 1.13 1.33 1.50 1.7] este
reprezentat n figura 16.10;
h=surface(x,y,z) reprezentat, pentru aceleai valori, n figura 16.11;
h=surface(z,C) reprezentat, pentru aceleai valori n figura 16.12;
h=surface(C) reprezentat n figura 16.13, pentru valorile lui C date de C =
[ 0.1 0.25 0.4 0.6 0.75; 0.94 1.13 1.33 1.50 1.7];
h=surface se returneaz un identificator al caracteristicilor obiectului creat;
h=surface('Propriet','valoare', ) asociaz o anume proprietate, Propriet, cu
valoarea valoare.
De menionat c funcia surface este de nivel sczut pentru crearea obiectelor
suprafa, z(x,y), care sunt copii ai obiectelor axe, unde x i y sunt vectorii
coordonate, iar indicii matricei culoare sunt precizai de matricea C.
Dac matricea de culoare este omis, se consider C=z, deci culoarea este
proporional cu nlimea. Limitele axelor x i y sunt date de elementele din
matricile x i y, iar dinamica scalei de culoare este precizat n matricea C.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 344
Funcia surface accept perechile 'Propriet', 'valoare' ca argumente de
intrare. Aceste proprieti, prin care se pot controla diferite aspecte ale obiectului,
pot fi stabilite sau citite, dup ce obiectul a fost creat, utiliznd funciile set i get.
Dac x este un vector de lungime n, y un vector de lungime m, iar C o matrice
m x n, colurile fiecrei zone a suprafeei sunt precizate de tripletele (x(j),y(i),z(i,j)),
unde x este asociat coloanelor matricei z, iar y este asociat liniilor acesteia.


Fig.16.10. Funcia surface(x,y,z,C)

Fig.16.11. Funcia surface (x,y,z)
Crearea i controlul graficelor 345

Fig.16.12. Funcia surface(z,C)


Fig.16.13. Funcia surface(C)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 346
n continuare se prezint lista proprietilor acceptate de obiectul grafic
suprafa (surface) i valorile posibile ale fiecrei proprieti.
1. CData - matrice
Aceast proprietate precizeaz culoarea pentru fiecare punct al matricei
ZData. Dac matricea CData nu are aceeai dimensiune cu ZData, atunci
suprafaa este tratat ca o textur.
2. Children - vector_identificatori
Obiectele suprafa nu au copii, astfel nct aceast proprietate este
ntotdeauna o matrice goal.
3. Clipping - on sau off
Dac aceast proprietate este on, valoarea implicit, atunci orice poriune
de suprafa din afara zonei definit de dreptunghiul axelor va fi afiat, iar
dac este off, nu se va afia.
4. EdgeColor - Culoare sau non sau flat sau interp
Prin aceast proprietate se precizeaz culoarea marginilor ariilor
rectangulare definite de matricea ZData, funcie de opiune: o singur
culoare pentru toate marginile ariilor elementare (Culoare), transparente
(non), o aceeai culoare pentru fiecare margine de arie elementar (flat),
sau o trecere gradual prin interpolarea linear a culorilor din nodurile
reelei elementare a suprafeei (interp). Valoarea implicit este flat.
5. FaceColor - Culoare sau non sau flat sau interp
Prin aceast proprietate se precizeaz culoarea suprafeei i modul de
colorare a ariilor rectangulare definite de matricea ZData, funcie de
opiune: o singur culoare pentru toate ariile elementare (Culoare),
transparente (non), o aceeai culoare pentru fiecare arie elementar (flat),
sau o trecere gradual prin interpolarea linear a culorilor din nodurile
reelei elementare a suprafeei (interp). Valoarea implicit este flat.
6. LineStyle - tip linie
Aceast proprietate determin tipul de linie pentru reprezentarea reelei
care definete suprafaa, respectiv liniile de separare dintre ariile
elementare. Sunt acceptate urmtoarele tipuri de linii: linie continu (-),
linie ntrerupt (--), linie punct (-.), linie din puncte (:). n paranteze sunt
prezentate simbolurile acestor tipuri de linii.
7. MeshStyle - both sau row sau column
Proprietatea precizeaz care dintre liniile reelei de separare a suprafeelor
elementare se traseaz: toate (both), numai cele corespunztoare axei x
(row) sau numai cele corespunztoare axei y (column). Sunt acceptate
urmtoarele tipuri de linii: linie continu (-), linie ntrerupt (--), linie
punct (-.), linie din puncte (:). n paranteze sunt prezentate simbolurile
acestor tipuri de linii.
Crearea i controlul graficelor 347
8. Parent - identificator
Aceast proprietate returnez identificatorul, identificator, obiectului
suprafa, care este un obiect axe.
9. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic, care este n acest
caz ntotdeauna surface.
10. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului i poate fi
vzut folosind funcia get.
11. Visible - on sau off
Aceast proprietate determin dac obiectul este vizibil pe ecran, cazul on,
sau nu este vizibil, cazul off, caz n care liniile axelor, marcajele de
divizare i etichetele nu sunt afectate. Valoarea implicit este on.
12. XData - vector sau matrice
Proprietatea XData este un vector sau o matrice care specific poziia
(coordonata) pe axa x a elementului corespunztor din matricea ZData.
13. YData - vector sau matrice
Proprietatea YData este un vector sau o matrice care specific poziia
(coordonata) pe axa y a elementului corespunztor din matricea ZData.
13. ZData - matrice
Proprietatea ZData este o matrice care precizeaz poziia (coordonata) pe
axa z a punctelor suprafeei.
16.8. Crearea obiectului grafic imagine i proprietile
acestuia
Pentru crearea sau afiarea unui obiect grafic imagine se folosete funcia
image, care se poate apela cu una dintre sintaxele:
h=image returneaz un identificator de control al caracteristicilor
obiectului creat;
h=image(C) afieaz matricea C ca imagine, n care fiecare element al
acestei matrice stabilete culoarea unei zone dreptunghiulare a imaginii, cu
precizarea c, culoarea unei zone este determinat prin asocierea la fiecare
element al matricei C a unui indice al matricei de culoare curente, iar pentru
C=[1 6.7272 20.5156 45.2548 83.5925; 138.0117 210.8723 304.4370 420.8883
562.3413] este reprezentat n figura 16.14;
h=image(x,y,C) afieaz aceeai imagine ca image, cu limitele
precizate de vectorii x i y;
h=image('Propriet','valoare', ) asociaz o anume proprietate, Propriet,
cu valoarea valoare.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 348

Fig.16.14. Funcia image(C)
Functia image este att o instruciune de nivel nalt pentru afiarea
imaginilor, ct i una de nivel sczut pentru crearea obiectelor imagine. Obiectul
imagine este copil al obiectului axe.
Matlab afieaz imaginea prin transformarea fiecrui element al matricei cu
colormap. Funcia image creeaz obiecte grafice de tip imagine i accept
perechile 'Propriet', 'valoare' ca argumente de intrare. Aceste proprieti, prin care
se pot controla diferite aspecte ale obiectului, pot fi stabilite sau citite, dup ce
obiectul a fost creat, utiliznd funciile set i get.
Matricea argument poate fi urmat de perechile 'Propriet', 'valoare', pentru a
specifica proprietile suplimentare ale imaginii sau poate fi omis, specificndu-se
numai proprietile care se doresc a fi modificate.

n continuare se prezint lista proprietilor acceptate de obiectul grafic
imagine (image) i valorile posibile ale fiecrei proprieti.
1. CData
Este matricea cu datele de culoare a fiecrui element al imaginii. Funcia
image(C) atribuie C la CData. Fiecare element al matricei CData specific
culoarea unei zone dreptunghiulare a imaginii. Elementele din CData sunt
utilizate ca indici asociai unei matrice de culoare curent. Valorile
zecimale sunt rotunjite la cel mai mic ntreg, iar valorile din afara
intervalului [1, length(colormap)] sunt omise, zona fiind transparent.
2. Clipping - on sau off
Dac aceast proprietate este on, valoarea implicit, atunci orice poriune
Crearea i controlul graficelor 349
de imagine din afara zonei definit de dreptunghiul axelor va fi afiat, iar
dac este off, nu se va afia.
3. Parent - identificator
Prin aceast proprietate se transmite identificatorul de control,
identificator, al printelui axelor imaginii. Axele sunt ntotdeauna prini ai
imaginii.
4. Type - ir_caractere
Prin proprietatea Type se identific tipul de obiect grafic, care este n acest
caz ntotdeauna image.
5. UserData - matrice
Proprietatea UserData este orice matrice asociat obiectului i poate fi
vzut folosind funcia get.
6. Visible - on sau off
Aceast proprietate determin dac obiectul este vizibil pe ecran, cazul on,
sau nu este vizibil, cazul off. Valoarea implicit este on.
7. XData matrice[1 n]
Proprietatea XData este o matrice care specific poziia (coordonata) pe
axa x a elementului corespunztor din matricea ZData.
8. YData - matrice[1 m]
Proprietatea YData este o matrice care specific poziia (coordonata) pe
axa y a elementului corespunztor din matricea ZData.
16.9. Crearea obiectului grafic rectangular,
rectangular -rotunjit sau elips
Pentru crearea sau afiarea unui obiect grafic rectangular, rectangular-
rotunjit sau elips, se folosete funcia rectangle, care se poate apela cu una dintre
sintaxele:
h=rectangle care adaug un obiect grafic rectangular la axele curente;
h= rectangle('Position',poz) care adaug un obiect grafic rectangular
(dreptunghi) n poziia dat de vectorul poz, ca n figura 16.15, n care
vectorul de poziie este poz=[0.1,0.3,0.2,0.4];
h=rectangle('Curvature',[x y]) prin care se adaug, la axele curente, un
obiect grafic dreptunghiular, pentru x=y=0, un obiect grafic rectangular-
rotunjit, pentru 0<x=y<1, sau o elips, pentru x=y=1, ca n figura 16.16.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 350

Fig.16.15. Funcia rectangle('Position',poz)

Fig.16.16. Funcia rectangle('Curvature',[x y])
16.10. Controlul caracteristicilor grafice
Pentru controlul caracteristicilor grafice se folosesc urmtoarele funcii
Matlab:
set - care stabilete proprietile obiectelor;
get - gsete i returneaz proprietile obiectelor;
reset - reseteaz pentru iniializare proprietile obiectelor;
delete - terge obiectele grafice;
Crearea i controlul graficelor 351
gco - gsete caracteristicile obiectului curent;
gcbo - gsete caracteristicile obiectului curent chemat;
gcbf - gsete caracteristicile figurii curente chemate;
drawnow - completeaz reprezentarea grafic i o actualizeaz;
findobj - gsete obiectele pentru valorile proprietilor specificate;
copyobj - face o copie a obiectelor grafice i a copiilor acestora;
isappdata - verific dac aplicaia definit de date exist;
getappdata - gsete valorile aplicaiei definite de date;
setappdata - stabilete aplicaia definit de date;
rmappdata - terge aplicaia definit de date;
closereq - figura nchis la cererea funciei;
newplot - stabilete proprietatea NewPlot a obiectelor figur i axe;
ishandle - gsete caracteristicile graficelor.

Stabilirea proprietilor obiectelor se realizeaz cu funcia set, care se poate
apela cu una dintre sintaxele:
set(h) care returnez o list cu toate proprietile obiectului cu
identificatorul h, precum i valorile acceptate de acestea;
v=set(h,'Nume_proprietate') care returneaz o list cu toate valorile
posibile ale proprietii specificate;
v=set(h,'Nume_proprietate',Valoare) prin care se modific proprietatea la
valoarea dat, putnd fi trecute n list mai multe seturi de Nume
proprietate i valori.

Funcia set se poate utiliza deci, pentru modificarea valorii proprietilor
obiectului al crui identificator este h, cu excepia propriettilor care numai se
citesc. Se accept ca valori de proprietate, 'Nume_proprietate', irurile de caractere:
'default' - se utilizeaz valorile predefinite;
'factory' - utilizeaz valorile date de Valoare;
'remove' - terge valorile date de Valoare..
Pentru stabilirea valorilor implicite ale proprietilor obiectului, se
concateneaz cuvntul default cu tipul de obiect i numele proprietii. De
exemplu, pentru a stabili culoarea axelor din figura curent la valoarea implicit, se
utilizeaz instruciunea: set(gcf,'DefaultAxesColor',[1 1 1]).

Pentru h=plot(x,y), cu funcia set(h) se obin proprietile:
Color
EraseMode: [ {normal} | background | xor | none ]
LineStyle: [ {-} | -- | : | -. | none ]
LineWidth
Marker: [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram |
{none} ]
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 352
MarkerSize
MarkerEdgeColor: [ none | {auto} ] -or- a ColorSpec.
MarkerFaceColor: [ {none} | auto ] -or- a ColorSpec.
XData
YData
ZData

ButtonDownFcn: string -or- function handle -or- cell array
Children
Clipping: [ {on} | off ]
CreateFcn: string -or- function handle -or- cell array
DeleteFcn: string -or- function handle -or- cell array
BusyAction: [ {queue} | cancel ]
HandleVisibility: [ {on} | callback | off ]
HitTest: [ {on} | off ]
Interruptible: [ {on} | off ]
Parent
Selected: [ on | off ]
SelectionHighlight: [ {on} | off ]
Tag
UIContextMenu
UserData
Visible: [ {on} | off ]

Citirea valorilor curente ale proprietilor unui obiect se realizeaz cu funcia
get, care se apeleaz cu una dintre sintaxele:
get(h) care returnez o list cu toate proprietile obiectului cu
identificatorul h;
v=get(h,'Nume_proprietate') care returneaz valoarea curent a proprietii
specificate a obiectului cu identificatorul h.

Pentru a obine valoarea implicit a proprietii Color a obiectului figur se
utilizeaz urmtoarea instruciune:
get(0,'DefaultFigureColor'),
rezultnd,
ans=
0.8000 0.8000 0.8000
Lista complet a tuturor valorilor curente pentru obiectele descendente (copii)
ale obiectului cu identificatorul h, se obine cu instruciunea:
get(0,'Default'),
rezultnd,
ans =
defaultFigurePosition: [232 258 560 420]
Crearea i controlul graficelor 353
defaultTextColor: [0 0 0]
defaultAxesXColor: [0 0 0]
defaultAxesYColor: [0 0 0]
defaultAxesZColor: [0 0 0]
defaultPatchFaceColor: [0 0 0]
defaultPatchEdgeColor: [0 0 0]
defaultLineColor: [0 0 0]
defaultFigureInvertHardcopy: 'on'
defaultFigureColor: [0.8000 0.8000 0.8000]
defaultAxesColor: [1 1 1]
defaultAxesColorOrder: [7x3 double]
defaultFigureColormap: [64x3 double]
defaultSurfaceEdgeColor: [0 0 0]

S considerm reprezentarea grafic, rezultat din secvena:
surf(peaks)
text(26,50,7,'Valoarea maxima'),
prezentat n fig. 16.17.
0
10
20
30
40
50
0
20
40
60
-10
-5
0
5
10
Valoarea maxima

Fig.16.17. Reprezentare grafic peaks
Pentru citirea liniilor 1 i 2 ale identificatorului h al obiectului, se folosete
secvena:
h=get(gca,'Children')
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 354
a=get(h(1),'Type')
b=get(h(2),'Type')
obinndu-se,
a =text
b=surface.
Pentru stabilirea culorilor obiectului text, cu identificatorul h(1), se
folosete instruciunea:
set(h(1),'Color',[1 0 0]),
iar pentru obinerea listei proprietilor suprafeei, precum i a valorilor curente ale
acesteia, se folosete instruciunea get(h(2)).
n urma rulrii instruciunii anterioare, get(h(2)), se obine:
AlphaData = [1]
AlphaDataMapping = scaled
CData = [ (49 by 49) double array]
CDataMapping = scaled
EdgeAlpha = [1]
EdgeColor = [0 0 0]
EraseMode = normal
FaceAlpha = [1]
FaceColor = flat
LineStyle = -
LineWidth = [0.5]
Marker = none
MarkerEdgeColor = auto
MarkerFaceColor = none
MarkerSize = [6]
MeshStyle = both
XData = [ (1 by 49) double array]
YData = [ (49 by 1) double array]
ZData = [ (49 by 49) double array]
FaceLighting = flat
EdgeLighting = none
BackFaceLighting = reverselit
AmbientStrength = [0.3]
DiffuseStrength = [0.6]
SpecularStrength = [0.9]
SpecularExponent = [10]
SpecularColorReflectance = [1]
VertexNormals = [ (49 by 49 by 3) double array]
NormalMode = auto
BeingDeleted = off
ButtonDownFcn =
Crearea i controlul graficelor 355
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [100.001]
Selected = off
SelectionHighlight = on
Tag =
Type = surface
UIContextMenu = []
UserData = []
Visible = on

Iniializarea tuturor proprietilor axelor sau figurilor la valorile implicite,
cu excepia poziiei, se realizeaz cu funcia reset, care se apeleaz cu sintaxa:
reset(h),
unde h este identificatorul de control al caracteristicilor proprietilor.
Spre exemplu:
reset(gca) iniializeaz proprietile axelor curente;
reset(gcf) iniializeaz proprietile figurii curente.

tergerea ferestrelor grafice sau a obiectelor din acestea, definite de
identificatorul h, se realizeaz cu funcia delete, care se apeleaz cu sintaxa:
delete(h).
Dac identificatorul este al obiectului figur, fereastra grafic este nchis
fr confirmare, iar obiectul este ters.

tergerea figurii curente din fereastra windows se poate face i cu funcia
closereq.

Pentru actualizarea i completarea unei reprezentri grafice, realizat n
mai multe etape, se folosete funcia drawnow, apelat cu sintaxa drawnow.
Reactualizarea reprezentrii grafice este determinat de:
revenirea prompterului Matlab;
folosirea comenzii pause;
executarea comenzii getframe;
executarea comenzii drawnow.

Pentru trecerea la o nou figur, atunci cnd se utilizeaz funciile de nivel
sczut pentru crearea obiectelor grafice, se folosete funcia newplot, care este un
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 356
antet al identificatorului proprietii, Nextplot, a fiierelor grafice de tip M, care se
apeleaz cu sintaxa:
h=newplot.
Funcia newplot realizeaz:
deschiderea unei figuri noi, dac proprietatea NextPlot a obiectului figur
este New;
tergerea i iniializarea figurii curente, dac proprietatea NextPlot a
obiectului figur este Replace;
deschiderea unei axe noi, dac proprietatea NextPlot a obiectului axe
esteNew;
tergerea i iniializarea axelor curente, dac proprietatea NextPlot a
obiectului axe este Replace.
16.11. nregistrarea i printarea reprezentrilor grafice
Pentru nregistrarea i printarea imaginilor grafice se utilizeaz urmtoarele
funcii Matlab:
print tiprete graficele direct la imprimant sau le salveaz ntr-un fiier;
printopt returneaz configuraia local a imprimantei;
orient returneaz orientarea paginii pe care se face imprimarea.

Sintaxa de apelare a funciei print pentru tiprire este:
print prin care se trimite coninutul ferestrei grafice curente la imprimanta
implicit;
print tip_driver - opiune nume_fiier;
print - nume_fiier salveaz reprezentarea din fereastra grafic curent n
fiierul nume_fiier i n formatul corespunztor imprimantei implicite.
Dac exist deja un fiier cu numele menionat, prin aceast opiune se
nlocuiete cel vechi. Cu opiunea append, noua reprezentare grafic este
adugat la vechiul coninut. n cazul n care nu este precizat extensia
fiierului care se salveaz, acesta va lua extensia .ps sau .eps, funcie de
tipul imprimantei specificat prin parametrul opional tip_driver.
Tipurile de drivere, tip_driver, acceptate direct sub Windows sunt:
-dwin trimite coninutul ferestrei grafice la imprimanta curent monocrom;
-dwinc trimite coninutul ferestrei grafice la imprimanta curent color;
-dmeta trimite coninutul ferestrei grafice n clipboard, n format Metafile;
-dbitmap trimite coninutul ferestrei grafice n clipboard, n format bitmap;
-dsetup deschide caseta de dialog Print Setup, care permite stabilirea
parametrilor imprimantei, dimensiunea, sursa i orientarea hrtiei, fr a
tipri fereastra grafic;
-v deschide caseta de dialog Print Setup, care permite stabilirea numai a
Crearea i controlul graficelor 357
parametrilor imprimantei, fr a tipri fereastra grafic.
Tipurile de drivere, tip_driver, Postscrip disponibile sunt:
-dps Postscript pentru imprimante monocrom;
-dpsc Postscript pentru imprimante color;
dps2 Level 2 Postscript pentru imprimante monocrom;
dpsc2 Level 2 Postscript pentru imprimante color;
-deps Encapsulated Postscript (EPSF);
-depsc Encapsulated Color Postscript (EPSF);
deps2 Encapsulated Level 2 Postscript (EPSF);
depsc2 Encapsulated Level 2 Color Postscript (EPSF).


Suplimentar, pentru GhostScript, sunt posibile urmtoarele tipuri de drivere:
dlaserjet imprimanta de tipul HP LaserJet;
dljetplus imprimanta de tipul HP LaserJet+;
dljet2p imprimanta de tipul HP LaserJet IIP;
dljet3 imprimanta de tipul HP LaserJet III;
dcdeskjet imprimanta de tipul HP DeskJet 500C cu 1 bit/pixel color;
dcdjcolor imprimanta de tipul HP DeskJet 500C cu 24 bit/pixel color;
dcdjmono imprimanta de tipul HP DeskJet 500C mono;
ddeskjet imprimanta de tipul HP DeskJet i Deskjet Plus;
dpaintjet imprimanta de tipul HP PaintJet printer color;
dpjetxl imprimanta de tipul HP PaintJet XL printer color;
dbj10e imprimanta de tipul Canon BubbleJet BJ10e;
dln03 imprimanta de tipul DEC LN03 printer;
depson imprimanta de tipul Epson-compatibil (9 sau 24 pini);
deps9high imprimanta de tipul Epson-compatibil 9 pini cu rezoluie mrit;
depsonc imprimanta de tipul Epson LQ-2550 i Fujitsu 3400/2400/1200
color;
dgif8 fiier format GIF 8 bii color;
dpcx16 fiier format PCX (tip vechi), EGA/VGA 16 culori;
dpcx256 fiier format PCX (tip nou) 256 culori.

De menionat c la variantele mai vechi de Matlab, se schimb la tiprire
culoarea neagr a fondului figurii n alb i culoarea alb a axelor i a etichetelor n
negru. Variantele noi au fcut deja aceast schimbare.

Pentru stabilirea orientrii paginii pe care se face imprimarea coninutului
unei ferestre grafice se utilizeaz funcia orient, care se apeleaz cu una dintre
sintaxele:
orient returneaz modul de imprimare pe pagin;
orient landscape stabilete modul de tiprire pe pagin, cu latura mic
orientat pe vertical, iar reprezentarea grafic ocup ntreaga pagin;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 358
orient portrait stabilete modul de tiprire pe pagin, cu latura mare
orientat pe vertical, iar reprezentarea grafic ocup un dreptunghi cu
laturile n raportul 4/3, plasat la jumtatea paginii;
orient tall stabilete modul de tiprire pe pagin, cu latura mare orientat
pe vertical (similar cu portrait), iar reprezentarea grafic ocup ntreaga
pagin;
orient rotated realizeaz o rotire a figurii ce trebuie tiprit, iar
reprezentarea grafic ocup ntreaga pagin.

nregistrrile reprezentrilor grafice care s poat fi introduse ulterior n
documente se pot transmite n Cliboard, cu una dintre opiunile: print dbitmap
sau print dmeta, de unde sunt preluate i prelucrate cu Paintbrush-ul sau cu un
alt utilitar destinat acestui scop.

Preluarea reprezentrilor grafice din Cliboard, cu Paintbrush-ul, se face
astfel:
- se d comanda print dbitmap sau print dmeta din Matlab, funcie de
reprezentarea care se dorete preluat din fereastra grafic curent;
- se apeleaz Paintbrush-ul, fr prsirea Matlab-ului;
- se folosete opiunea PASTE din mediul principal EDIT;
- se salveaz reprezentarea grafic.

Pentru printare mai sunt posibile i urmtoarele funcii utilitare:
bwcontr care imprim o figur numai n alb i negru;
hardcopy care salveaz figura pe hard-disk sub unul din formatele dps,-deps,-
dps2,-deps2,-dill,-dhpgl;
nodither modific figura pentru bicolor sau starea iniial, fiind apelat cu
nodither(STATE,FIG), n care STATE poate fi 'save' sau 'restore';
savtoner modific printarea figurii pentru consum minim de toner;
noanimate modific figura pentru a fi static la printare.


17. REPREZENTRI GRAFICE N DOU
DIMENSIUNI
17.1. Grafice de baz X-Y (2D)
Pentru reprezentarea datelor n coordonate lineare se utilizeaz funcia plot,
care se poate apela prin:
plot(x,y) care reprezint grafic vectorul y funcie de vectorul x, cu
urmtoarele precizri:
dac x este un scalar i y un vector, de lungime n=length(y),
se traseaz un numr n de puncte discontinui pe axa y, n
dreptul valorii x, ca n figura 17.1, trasat pentru x=1 i
y=1:10, cu plot(x,y);
dac x este un vector i y un alt vector, atunci lungimea celor
doi vectori trebuie s fie aceeai, n=length(x)=length(y) i se
traseaz graficul variaiei continue a lui y funcie de x, ca n
figura 17.2, trasat pentru x=1:10 i y=x.^1.25, cu plot(x,y);
dac x este un vector i y o matrice, atunci nl=length(x) trebuie
s fie egal cu m din [n,m]=size(y), i se traseaz graficul variaiei
continue a fiecrei coloane a lui y funcie de x, ca n figura 17.3,
trasat pentru x=1:10 i y=[x; x.^1.25], cu plot(x,y);
dac x i y sunt matrice, de aceeai dimensiune
(size(x)=size(y)), se reprezint coloanele lui y funcie de
coloanele lui x, ca n figura 17.4, trasat pentru
x=[ 1 1 ; 2 2; 3 3; 4 4; 5 5] i
y=[1.000 7.4767; 2.3784 5.6569; 3.9482 3.9482; 5.6569
2.3784; 7.4767 1.0000] , cu plot(x,y);
plot(y) care reprezint grafic argumentul y funcie de indici cu
urmtoarele precizri:
dac argumentul y este complex, atunci plot(y) este echivalent
cu plot(real(y),imag(y)), ca de exemplu pentru y= [1+i
2+1.4142i 3+1.7321i 4+2i 5+2.2361i 6+2.4495i 7+2.6458i
8+2.8284i 9+3i 10+3.1623i]; rezult figura 17.5;
dac y este vector (linie sau coloan), funcia plot traseaz
graficul y=y(i), unde i=1, 2, , n este numrul de ordine al
elementului y;
dac y este o matrice de m x n, funcia plot traseaz graficele
y
j
=y
j
(i), unde i=1, 2, , n este numrul de ordine al
elementului y
j
de pe coloana j, cu j=1, 2, , m;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 360
plot(x1,y1,x2,y2, , xn,yn) reprezint grafic simultan mai multe grafice
n acelai sistem de coordonate, respectiv y1=f(x1), y2=f(x2), yn=f(xn);
plot(x,y,linie-tip) apare specificat tipul de linie i culoare utilizat,
dup cum se specific n tabelul 17.1.


Fig. 17.1. Graficul y vector i x scalar
Deci, graficele se pot reprezenta utiliznd linii, markere i culori dup codul
din tabelul 17.1.

Tabelul 17.1
Tipuri de linii, markere i culori utilizate la trasarea graficelor
Culori Markere tip Linii tip
y galben . punct - continu
m mov o cerc : punctat
c albastru deschis x x -. prin puncte
r rou + plus (+) -- ntrerupt
g verde * *
b albastru s ptrat
w alb d romb
k negru v triunghi cu vrful n jos
^ triunghi cu vrful n sus
< triunghi cu vrful la stnga
> triunghi cu vrful la dreapta
p stea cu 5 coluri
h stea cu 6 coluri
Reprezentri grafice n doua dimensiuni 361 361
Pentru reprezentrile grafice, se asociaz fiecrei caracteristici un ir de 13
caractere, dintre cele menionate mai sus.

Fig. 17.2. Variaia lui y vector funcie de x vector

Fig. 17.3. Variaia lui y matrice funcie de x vector
Aceste iruri de caractere trebuie cuprinse ntre apostrofuri i menionate n
combinaia culoare-marker sau culoare-linie-tip. Dac se precizeaz o singur
caracteristic (marker, linie sau culoare), cea de-a doua este selectat automat de
calculator.
Dac nu se specific culoarea, Matlab-ul folosete implicit galben. Pentru
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 362
grafice multiple se utilizeaz succesiv primele ase culori din tabel.

Fig. 17.4. Variaia lui y matrice funcie de x matrice

Fig. 17.5. Reprezentarea grafic a numrului complex y
Funcia plot returneaz un vector coloan al identificatorilor de control al
caracteristicilor obiectelor linie. Obiectele linie create cu plot sunt copii ai axelor
curente.
Perechile (x,y) pot fi urmate de perechile parametru/valoare, pentru a
specifica proprietile suplimentare ale liniilor.
Reprezentri grafice n doua dimensiuni 363 363
Pentru reprezentrile grafice n coordonate logaritmice sau
semilogaritmice se utilizeaz funciile loglog, semilogx, semilogy, care se
apeleaz astfel:
loglog(x,y) reprezint grafic pe log(y) funcie de log(x), adic scaleaz
ambele axe, utiliznd logaritmul n baza 10;
semilogx(x,y) reprezint grafic pe y funcie de log(x), adic scaleaz
numai axa x , utiliznd logaritmul n baza 10;
semilogy(x,y) reprezint grafic pe log(y) funcie de x, adic scaleaz
numai axa y, utiliznd logaritmul n baza 10.

Modul de utilizare al acestor funcii este la fel ca acela al funciei plot. De
exemplu, dac se dorete reprezentarea n coordonate semilogaritmice, pe axa y, a
funciei y=10
x
, unde x=0:10, atunci programul Matlab este:
x=0:10;y=10.^x;semilogy(x,y,'<-b'); ylabel('log(y)'); xlabel('x'),
iar graficul este prezentat n figura 17.6.

Fig. 17.6. Reprezentarea grafic a funciei y=10
x
n coordonate semilogaritmice (axa y)
n grafic se evideniaz reprezentarea cu linie continu i marcarea cu
triunghiuri cu vrful la stnga, iar culoarea este albastr. n plus, s-a utilizat xlabel
i ylabel pentru marcarea coordonatelor x i, respectiv, log(y).
Reprezentarea n coordonate polare se face cu funcia polar, care se apeleaz
cu una dintre sintaxele: polar(teta,r) sau polar(teta,r,linie-tip), n care r este raza,
iar teta este unghiul n radiani. Modul de folosire al opiunii linie-tip este identic cu
cel pentru funcia plot.
Pentru reprezentarea n coordonate polare ale funciei f(x)=sin(t)cos(t), cu
t=0:2*pi, se utilizeaz secvena Matlab:
t=0:0.1:2*pi; f=sin(t).*cos(t); polar(t,f); xlabel('t') ; ylabel('f=sin(t)cos(t)');
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 364
i se obine reprezentarea din figura 17.7.


Fig. 17.7. Reprezentarea n coordonate polare
Trasarea pe acelai grafic a lui y1 funcie de x1 cu axa y1 la stnga i a lui y2
funcie de x2 cu axa y2 la dreapta se face cu plotyy(x1,y1,x2,y2), iar reprezentarea
grafic este n figura 17.8.
Pentru trasare s-a considerat x1=0:0.1:10;y1=x1.^2; x2=0:0.1:10;y2=x2.^0.2.


Fig. 17.8. Reprezentarea cu funcia plotyy

Reprezentri grafice n doua dimensiuni 365 365
Funcia plotyy(x1,y1,x2,y2,'fun') utilizeaz funcia fun pentru plotare, care
poate fi o funcie intern pentru plotare precum: plot, semilogx, semilogy, loglog,
stem, care accept sintaxa H=fun(x,y).
Dac se dorete utilizarea pentru axele din stnga i dreapta a dou moduri
diferite, se utilizeaz funcia plotyy(x1,y1,x2,y2,'fun1', 'fun2'), unde pentru
perechea (x1,y1) se utilizeaz fun1(x1,y1), iar pentru perechea (x2,y2) se utilizeaz
fun2(x2,y2).
Funcia [ax,h1,h2]=plotyy(x1,y1,x2,y2,'fun1', 'fun2'), permite returnarea
locului unde sunt create axele n ax(1), pentru axa din stnga, n ax(2), pentru axa
din dreapta i a obiectelor grafice n h1 i h2.
De exemplu, pentru
x1=0:0.1:10; y1=x1.^2; x2=0:0.1:10; y2=x2.^0.2;
comanda,
[ax,h1,h2]=plotyy(x1,y1,x2,y2,'semilogy','stem'),
returneaz,
ax =
100.0056 101.0193
h1 =
3.0334
h2 =
102.0118
103.0167
iar graficul este redat n figura 17.9.

Fig. 17.9. Reprezentarea cu funcia plotyy(x1,y1,x2,y2,'semilogy','stem')

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 366
17.2. Adnotri pe grafice
Pentru adnotarea i editarea graficelor se poate utiliza pachetul Plotedit.
Pentru a se intra n modul de editare se tasteaz comanda plotedit on, sau simplu
plotedit, ceea ce deschide fereastra de plotare cu meniul corespunztor, care
permite s se insereze etichete pentru axe, titlul graficului, legenda, bara de
culoare, linii, text, axe i s se regleze luminozitatea. Orice deschidere a unei figuri
Matlab, avnd extensia fig, permite editarea acesteia.
Ieirea din modul de editare se face prin comanda plotedit off.

Adugarea unei legende la un grafic se face prin comanda legend. Cea mai
comod i comun apelare este dat n exemplul de mai jos,
x = 0:.2:12;
plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));
legend('First','Second','Third',0);
reprezentat n figura 17.10.

0 2 4 6 8 10 12
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
First
Second
Third

Fig.17.10. Plasarea legendei pe grafic
De menionat c 0 semnific faptul c se alege cel mai bun plasament al
legendei pe grafic, care s nu intre n contradicie cu datele. n locul valorii 0 se
mai pot utiliza: 1 sau lips, ceea ce poziioneaz legenda n partea dreapt
superioar n interior; 2, ce poziioneaz legenda n partea stng superioar n
interior; 3, care plaseaz legenda n partea de jos stnga i n interior; 4, ce plaseaz
legenda n partea inferioar stnga i n interior; -1, care plaseaz legenda n partea
dreapt sus i n exterior.
De menionat c legenda se poate muta pe grafic n poziia dorit prin apsare
Reprezentri grafice n doua dimensiuni 367 367
mouse stnga i apoi mutarea n poziia dorit.

Scanarea graficului, pentru poziionarea legendei, se execut cu funcia
lscan, care gsete cel mai bun plasament al legendei, care s nu se suprapun
peste grafic i s fie vizibil.

Mutarea legendei se face automat, cu funcia moveaxis, apelat de legend i
instalat automat n ButtonDownFcn.

Pentru precizarea titlului graficului curent se utilizez funcia title, care se
apeleaz cu sintaxa:
title('Titlul dorit')
unde 'Titlul dorit' este un ir de caractere care reprezint titlul graficului.

Precizarea numelui mrimilor reprezentate pe fiecare ax, precum i a
unitilor de msur folosite, se execut cu funcia xlabel, pentru axa x, ylabel,
pentru axa y i zlabel, pentru axa z. Acestea se apeleaz cu sintaxele:
xlabel('text dorit') ylabel('text dorit') zlabel('text dorit'),
unde 'text dorit' este un ir de caractere, care reprezint, n general, numele axei,
unitatea de msur sau alte elemente utile ale axei graficului curent. Repetarea
instruciunii, cu un alt ir de caractere, conduce la nlocuirea textului anterior, fr
a fi necesar refacerea reprezentrii grafice.

Plasarea unui ir de caractere, de exemplu, textul, n cmpul grafic, la
coordonatele (x, y) sau (x, y, z), se realizeaz cu funcia text, apelat cu sintaxa:
text(x,y,'textul') sau text(x,y,z,'textul').
Coordonatele grafice sunt date n uniti de msur ale ultimului grafic.
Dac coordonatele sunt vectori (X i Y), funcia text scrie irul de caractere
textul, la toate poziiile date de perechile (X,Y). Dac textul este un ir de
caractere de aceeai lungime cu vectorii X i Y, funcia marcheaz fiecare punct cu
linia, markerul sau caracterul corespunztor din irul textul.
Apelat cu sintaxa text(X,Y,'textul','sc'), funcia interpoleaz puntele (X,Y) n
coordonatele ecranului, respectiv ntre (0,0), colul din stnga jos i (1,1) ,colul din
dreapta sus al ecranului.

Plasarea unui ir de caractere (text sau comentariu) n cnpul grafic cu
mouse-ul se realizeaz[ utiliznd funcia gtext, apelat cu sintaxa:
gtext('textul').
Funcia gtext afieaz irul de caractere 'textul' n fereastra grafic i ateapt
deplasarea acestuia pe grafic cu mouse-ul. Apsnd un buton al mouse-ului sau
orice tast, textul se scrie pe grafic la poziia selectat.
Pentru a transforma un ir de caractere ntr-o expresie TeX, se utilizeaz
funcia texlabel, putnd fi apelat cu sintaxa texlabel('expresie') pentru a
transforma expresia 'expresie' n echivalent TeX pentru aplicaii Matlab, sau
texlabel('expresie','literal') pentru a transforma expresia 'expresie' n form literal.
De exemplu, comanda:
texlabel('sin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2)')
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 368
returneaz,
{sin}({sqrt}({x}^{2} + {y}^{2}))/{sqrt}({x}^{2} + {y}^{2})
comanda,
texlabel('lambda12^(3/2)/pi - pi*delta^(2/3)','literal')
returneaz,
{lambda12}^{{3}/{2}}/{pi} - {pi} {delta}^{{2}/{3}}
17.3. Funcii utilitare pentru scriere
Pentru utilizator sunt posibile urmtoarele utilitare:
doclick manipularea obiectelor de proces cu ButtonDown;
dokeypress funcii pentru manipularea cheilor;
domymenu manipularea coninutului meniului;
doresize cheam funcia pentru figurile obiect;
getobj recheam pentru manipulare obiectul scris;
enddrag, middrag, prepdrag, putdowntext, scribeclearmode,
scribeeventhandler, scriberestoresavefcns funcii help pentru editorul
de plotare;
scribeaxesdlg funcia de help dialog a proprietilor axelor;
scribelinedlg - funcia de help dialog a proprietilor liniei;
scribetextdlg editarea proprietilor text i font n editorul de plotare.

17.4. Grafice 2D specializate
Reprezentarea grafic, sub form de bare verticale, se realizeaz cu funcia
bar, care se poate apela cu sintaxa:
bar(x,y,gros) reprezint grafic y, n funcie de x, cu grosimea barei date
de gros, care poate lipsi i atunci, valoarea implicit este gros=0.8; dac
gros<0.8 barele au grosimea de 0.2, iar dac gros>1 atunci barele se unesc,
ca n figura 17.11 i figura 17.12 mijloc;
bar(x,y, 'grouped') reprezint barele grupate pe seturi de date i cu
aceeai culoare, ca n figura 17.12 superior;
bar(x,y, 'stacked') reprezint barele secionate cu culori diferite pentru
seturile de date, ca n figura 17.12 inferior.
De menionat c valorile lui x trebuie s fie egal deprtate i cresctoare.
Figura 17.12 a fost realizat cu secvena:
subplot(3,1,1), bar(rand(10,5),'stacked'), colormap(cool);
subplot(3,1,2), bar(0:.25:1,rand(5),1);
Reprezentri grafice n doua dimensiuni 369 369
subplot(3,1,3), bar(rand(2,3),.75,'grouped').

Fig.17.11. Reprezentarea bar cu grosimi diferite

Fig.17.12. Reprezentarea bar grupat i secionat

Apelat cu secvena,
[xb,yb]=bar(y) sau [xb,yb]=bar(x,y)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 370
funcia bar nu reprezint graficele, dar calculeaz vectorii xb i yb, astfel nct
plot(xb,yb) s poat trasa graficul de bare. Aceasta este util cnd se dorete un
control mai mare asupra graficului.

Reprezentarea barelor orizontale se realizeaz cu funcia barh, care este
asemntoare funciei bar. Pentru exemplificare, se consider secvena anterioar
n care se nlocuiete bar cu barh, reprezentat n fiura.17.13:
subplot(3,1,1), barh(rand(10,5),'stacked'), colormap(cool);
subplot(3,1,2), barh(0:.25:1,rand(5),1);
subplot(3,1,3), barh(rand(2,3),.75,'grouped').

Fig.17.13. Representarea barh grupat i secionat

Pentru plotarea ariei de sub curb se poate utiliza funcia area, care se
apeleaz cu secvena area(x,y) i este asemntoare cu plot(x,y), cu deosebirea c
aria de sub curb este colorat, ntre 0 i y.
Apelat cu area(y) consider implicit c x=1:size(y,1).
Specificarea nivelului de la care se coloreaz aria se face prin level, care
poate fi 0 (valoare implicit) sau o valoare precizat, caz n care colorarea se face
ntre level i valoarea curent a lui y, ca n figura 17.14, realizat cu secvena:
x=1:10;y=x.^2;area(x,y,50).

Pentru reprezentarea dinamic (n micare) a traiectoriei unui punct, care
urmrete reprezentarea grafic 2D (o comet), se utilizeaz funcia comet, care
Reprezentri grafice n doua dimensiuni 371 371
se apeleaz cu una dintre sintaxele:
comet(y) care traseaz n micare (animat) vectorul y;
comet(x,y) care traseaz n micare vectorul y funcie de x;
comet(x,y,p) care traseaz n micare vectorul y funcie de x, utiliznd
pentru animare (ntrzierea n plotare) timpul dat de p*length(y).
Pentru exemplificare se recomand secvena:
t = -pi:pi/200:pi;
comet(t,tan(sin(t))-sin(tan(t))).

Fig.17.14. Reprezentarea funciei area cu level

Evidenierea erorilor datelor reprezentate grafic se poate face cu funcia
errorbar, apelat cu sintaxa: errorbar(x,y,e).
Reprezentarea grafic a datelor cu bare de eroare ataeaz fiecrei perechi
(x,y) eroarea precizat ntr-un vector, e, cu aceleai dimensiuni. Vectorul e conine
lungimea barelor ce reprezint eroarea.
Barele de erori se reprezint simetric n raport cu ordonata y, ceea ce
presupune o asociere de erori pozitive sau negative, cu aceeai probabilitate.
Segmentele de eroare sunt de nlime 2*e i se traseaz pe curba y=y(x). Figura
obinut reprezint plaja de valori pe care o poate lua funcia y cu eroarea e.

Dac x i y sunt matrice de aceeai dimensiune, funcia errorbar va
reprezenta graficul cu bare de eroare, pentru fiecare coloan n parte.

Un exemplu de reprezentare grafic a funciei errorbar este prezentat n
figura 17.15, realizat cu secvena:
x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 372

Fig.17.15. Reprezentare grafic cu funcia errorbar

Pentru plotarea facil a unei expresii introduse direct ca argument (de genul
funciei humps) se face uor cu funcia ezplot, care se poate apela:
ezplot(f), ca de exemplu ezplot('cos(x)'), care consider implicit pentru x
din f=f(x), domeniul 2*pi < x < 2*pi;
ezplot(f, [xmin,xmax,ymin,ymax]), care ploteaz f(x,y)=0 pe domeniul
xmin < x < xmax, ymin < y < ymax;
ezplot(f), ca de exemplu ezplot('x^2 - y^2 - 1'), care ploteaz f(x,y)=0 i n
care -2*pi < x < 2*pi i -2*pi < y < 2*pi, reprezentat n figura 17.16;
ezplot('f',[a b]), ca de exemplu ezplot('x^3 + y^3 - 5*x*y + 1/5',[-3,3]),
care ploteaz f(x,y)=0 i n care a=-3 < x < b=3 i a=-3 < y < b=3;

De menionat c, funcia f poate fi definit i anterior prin secvena:
f = inline('cos(x)+2*sin(x)'),
caz n care funcia ezplot se poate apela cu una dintre secvenele,
ezplot(f);
ezplot(@humps).
Plotarea facil n coordonate polare a unei funcii introduse ca argument,
respectiv a curbei rho = f(theta), pe domeniul implicit 0 < theta < 2*pi, se face prin
apelarea funciei ezplot, sub forma:
ezplot(f)
sau,
ezplot(f,[a,b] n care a < theta < b.
Reprezentri grafice n doua dimensiuni 373 373

Fig.17.16. Reprezentarea grafic cu ezplot

Funcia f poate fi definit ca o expresie utiliznd @ (funcie humps) sau ca o
funcie inline, ca de exemplu:
ezpolar('1 + cos(t)')
ezpolar('cos(2*t)')
ezpolar('sin(tan(t))')
ezpolar('sin(3*t)')
ezpolar('cos(5*t)')
ezpolar('sin(2*t)*cos(3*t)',[0,pi])
ezpolar('1 + 2*sin(t/2)')
ezpolar('1 - 2*sin(3*t)')
ezpolar('sin(t)/t', [-6*pi,6*pi])
r = '100/(100+(t-1/2*pi)^8)*(2-sin(7*t)-1/2*cos(30*t))';
ezpolar(r,[-pi/2,3*pi/2])
h = inline('log(gamma(x+1))');
ezpolar(h)
ezpolar(@cot,[0,pi])
Reprezentarea grafic a funciei ezpolar('1 - 2*sin(3*t)'), este prezentat n
figura 17.17.

Reprezentarea grafic a unor vectori cu originea n originea sistemului de
coordonate polare se face cu funcia compass, care se apeleaz cu una din
sintaxele:
compass(z), compass(real(z),imag(z)), sau compass(x,y),
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 374
unde z este numrul complex z=x+i*y, iar x i y sunt numere reale care sunt
proiecia vectorului z pe abscis i ordonat.

Fig.17.17. Reprezentarea grafic cu ezpolar
Dac z=[3-4*i -3+2*i 5+7*i], atunci cu compass(z) se obine reprezentarea
din figura 17.18, iar pentru x=[1 2 4]; y=[-4 5 -2], funcia compass(x,y) este redat
n figura 17.19.

Fig.17.18. Reprezentarea grafic cu compass a lui z - complex
Reprezentri grafice n doua dimensiuni 375 375

Fig.17.19. Reprezentarea grafic cu compass a vectorilor x, y

Pentru reprezentarea grafic n coordonate 2D rectangulare a vectorilor se
utilizeaz funcia feather, care se apeleaz ca i funcia compass, respectiv:
feather(z) sau feather(x,y).
Reprezentarea acelorai vectori z i x, y cu funcia feather este redat n
figura 17.20 i respectiv figura 17.21.

Fig.17.20. Reprezentarea grafic cu feather a lui z complex
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 376

Fig.17.21. Reprezentarea grafic cu feather a vectorilor x, y

Fig.17.22. Reprezentarea poligoanelor cu funcia plot


Fig.17.23. Reprezentarea poligoanelor cu funcia fill
Reprezentri grafice n doua dimensiuni 377 377
Pentru reprezentarea grafic a poligoanelor se utilizeaz funcia fill, care se
apeleaz cu sintaxa general fill(x,y,c), care reprezint un poligon definit de
vectorii x i y, cu nuanele de culoare c. Coordonatele vrfurilor poligonului sunt
specificate prin perechile (x,y). Dac se consider necesar, poligonul se poate
nchide, conectnd valorile finale la cele iniiale.
Dac argumentul c este un singur caracter dintre cele prezentate n lista de
culori din tabelul 17.1 sau un vector cu trei componente [r g b], poligonul va fi
colorat ntr-o singur culoare. n cazul n care c este un vector cu aceeai
dimensiune ca x i y, elementele acestuia sunt scalate cu funcia caxis i apoi
utilizate ca indici ntr-o matrice care specific culorile vrfurilor. Culorile dintre
vrfuri sunt obinute prin interpolare biliniar a culorilor vrfurilor.
Dac x i y sunt matrice cu aceeai dimensiune, fill(x,y,c) reprezint cte un
poligon pentru fiecare coloan. n acest caz, c este un vector linie pentru poligoane
cu o singur culoare i, respectiv, o matrice pentru poligoane cu culori interpolate.
Dac numai unul dintre argumentele x sau y este matrice, cellalt fiind vector
coloan cu acelai numr de linii, vectorul coloan se va extinde la o matrice cu
aceleai dimensiuni, prin adugarea unor coloane identice.
Pentru specificarea poligoanelor multiple, se poate utiliza i forma
fill(x1,y1,c1,x2,y2,c2,), care este mult mai uor de controlat.
Funcia fill seteaz proprietile FaceColor a funciei patch (care creeaz
module obiect) la flat (aceeai culoare), interp (culori interpolate) sau
ColorSpec (culoarea specificat), funcie de valorile matricei c.
Funcia fill returneaz un vector coloan al identificatorilor de control al
caracteristicilor modulelor obiect, cte o linie pentru fiecare modul. Argumentele
x,y,c pot fi urmate de perechi parametru-valoare, pentru a specifica proprietile
suplimentare ale modulului obiect.
Pentru a evidenia diferena dintre plot i fill se consider poligoanele:
x1=[0 2 3 -1 0];y1=[-1 0 3 2 -1]; x2=[2 3 5 4 2]; y2=[0 3 2 0 0];
care, reprezentate cu plot, sunt prezentate n figura 17.22, iar reprezentate cu fill
sunt redate n figura 17.23, din care reiese c funcia fill umple poligoanele cu
culoarea specificat.

Reprezentarea grafic cu parametrii impui se realizeaz cu funcia fplot.
Funcia fplot realizeaz o reprezentare grafic cu anumite restricii i se apeleaz
cu una dintre sintaxele:
fplot('fun', limite) fplot('fun', limite, tol)
fplot('fun', limite, n) fplot('fun', limite, n, unghi)
fplot('fun', limite, n, unghi,subdiviz) [x,y]=fplot('fun', limite, )
unde:
fun - numele fiierului funcie (ir de caractere), care poate fi dat sub forma
unei funcii linie obiect, cu @ sau expresie;
limite = [xmin xmax] limitele axei x pentru care se dorete reprezentarea
grafic;
tol eroarea tolerat la reprezentare, care, dac lipsete, are valoarea
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 378
implicit 2e-3, respectiv de 0.2 procente;
n numrul de eantioane cu care este reprezentat funcia
(implicit n=25);
unghi cea mai mare schimbare de unghi dintre dou segmente
adiacente ale graficului (implicit 10);
x, y - vectori coloan n care sunt returnate valorile abscisei i ale
ordonatei funciei.

Dac funcia fplot se apeleaz cu argumente de ieire, nu se reprezint nici
un grafic, dar acesta se poate trasa ulterior apelnd funcia plot(x,y).
Un exemplu de utilizare este:
subplot(2,2,1), fplot(@humps,[0 1])
f = inline('abs(exp(-j*x*(0:9))*ones(10,1))');
subplot(2,2,2), fplot(f,[0 2*pi])
subplot(2,2,3), fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
subplot(2,2,4), fplot('sin(1 ./ x)', [0.01 0.1],1e-3)
prezentat n figura 17.24.

Fig.17.24. Reprezentri cu funcia fplot

Calculul i reprezentarea grafic a histogramelor se face cu funcia hist,
care se apeleaz cu una dintre sintaxele:
hist(y) traseaz histograma cu 10 segmente egale a datelor vectorului y;
hist(y, n) traseaz histograma cu n segmente egale a datelor vectorului y;
hist(y, x) traseaz histograma datelor vectorului y la abscisele specificate
Reprezentri grafice n doua dimensiuni 379 379
n x;
[m,z]=hist(y), [m,z]=hist(y, n), [m,z]=hist(y, x) returneaz vectorii m i
z coninnd frecvena de apariie i de localizare a segmentelor, apoi cu
funcia bar(z,m) se poate trasa histograma, dnd o mai mare flexibilitate
reprezentrilor grafice i realiznd grafice mai sugestive.

Un exemplu de histogram este cel din figura 17.25, care reprezint un vector
cu elementele distribuite normal (Gaussian), obinut cu secvena:
x=-4:0.4:4; y=randn(10000,1); hist(y,x).

Fig.17.25. Reprezentarea grafic a unei histograme
Reprezentarea unei histograme n coordonate polare se face cu funcia rose,
care se apeleaz:
rose(x) unde x trebuie s fie cuprins n intervalul [0, 2];
rose(x,N) n care n, este numrul de subintervale n care se mparte
intervalul [0, 2], cu valoarea implicit N=20;
[t,r] =rose(x,N) care returneaz vectorii t i r, ce pot fi folosii pentru
reprezentarea unei histograme polare, cu funcia polar(t,r).

Pentru exemplificare, se prezint n figura 17.26 histograma a 200 numere
aleatoare, n coordonate polare, obinut din:
x=2*pi*rand(200,1); rose(x,10).

De menionat c n ultimele revizii ale Matlab s-a renuntat la funcia rose ca
i la funcia compass, acestea fiind nlocuite.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 380

Fig.17.26. Reprezentarea grafic a unei histograme polare
Reprezentarea grafic a semnalelor discrete, sub forma unor linii terminate
cu cerc, se face cu funcia stem, care se apeleaz cu una dintre sintaxele:
stem(y) traseaz un grafic din linii cu cerc, cu elementele vectorului y;
stem(x,y) traseaz un grafic din linii terminate cu cerc, cu locaiile
specificate de vectorul x, adic y=y(x), iar valorile lui x trebuie s fie egal
deprtate i cresctoare;
stem(x,y,linie_tip) traseaz un grafic linii de tipul i culoarea precizat n
irul de caractere linie_tip, similar cu funcia plot (de exemplu
stem(x,y,:r).

Un exemplu de reprezentare grafic cu funcia stem este redat n figura
17.27, pentru funcia discret sinus, obinut cu secvena Matlab:
n=0:30; f=sin(2*pi*n/10); stim(n,f).

Fig.17.27. Reprezentarea grafic cu funcia stem
Reprezentri grafice n doua dimensiuni 381 381
Reprezentarea grafic n trepte se realizeaz cu funcia stairs. Graficele n
trepte sunt utilizate la reprezentarea diagramelor sistemelor numerice de
eantionare i prelucrare a datelor.
Funcia stairs se apeleaz cu una dintre sintaxele:
stairs(y) traseaz graficul n trepte al vectorului y;
stairs(x,y) traseaz graficul n trepte al elementelor vectorului y la
locaiile specificate n x, iar valorile lui x trebuie s fie egal departate i n
ordine cresctoare;
[xb,yb]=stairs(y) i [xb,yb]=stairs(x,y) calculeaz vectorii xb i yb,
astfel nct plot(xb,yb) s poat trasa graficul n trepte.
Un exemplu de grafic n trepte al funciei y=sin(x), obinut cu secvena:
x=0:0.3:6; y=sin(x); stairs(x,y)
este redat n figura 17.28.

Fig.17.28 Reprezentarea grafic cu funcia stairs
Realizarea unei diagrame sub form de bare, punnd n ordine
descresctoare vectorii y, se poate face apelnd funcia pareto(y) sau pareto(y,x),
n care y sunt valorile corespunztoare fiecarui x.
nlimea barelor corespunde valorilor lui y, ordonata din stnga graficului
are nlimea ct sum(y), iar cea din dreapta d valoarea procentual y/sum(y),
dup cum se observ din figura 17.29. Curba continu traseaz diferena, valoarea
sumei i valoarea fiecrei valori a lui y.
Realizarea unei diagrame circulare (aa numita diagram plcint) cu
valorile unui vector x, avnd specificat semnificaia n etichet, se face cu funcia
pie(x,eticheta), care se poate apela pie([2 4 3 5],{'North','South','East','West'}),
dnd diagrama din figura 17.30.
De menionat c valorile lui x sunt normalizate, iar dac sum(x)<1, atunci
sunt trecute valorile efective i apare un segment de cerc.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 382

Fig.17.29. Reprezentarea grafic cu funcia pareto

Fig.17.30. Reprezentarea grafic cu funcia pie
Plotarea unei matrice dispersate se face cu funcia plotmatrix. Se apeleaz
cu comanda plotmatrix(x,y) i prezint dispersia coloanei x funcie de coloana y.
Dac x este o matrice p*m, iar y o matrice p*n, atunci plotmatrix produce o
matrice n*m. Comanda plotmatrix(y) este asemntoare cu comanda
plotmatrix(y,y), cu excepia faptului c diagonala este nlocuit prin hist(y(:,i)).
Un exemplu de utilizare este redat in figura 17.31, realizat cu comenzile:
x = randn(50,3); y = x*[-1 2 1;2 0 1;1 -2 3;]';
plotmatrix(y).
Plotarea dispersiei vectorului x, funcie de vectorul y (x i y avnd aceeai
dimensiune), cu markere (cerculee implicit) de arie determinat de valorile
vectorului s (n puncte^2) i fiecare punct colorat, conform valorilor vectorului c,
se face cu scatter(x,y,s,c). Dac s este scalar, atunci fiecare marker va avea aceei
dimensiune.
Reprezentri grafice n doua dimensiuni 383 383

Fig.17.31. Reprezentarea grafic cu funcia plotmatrix
Considernd valorile negative ale magnetismului z(m) la nivel planetar,
funcie de latitudinea x (grade) i longitudinea y (grade), date de Parker, R. L.,
Shure, L. & Hildebrand, J., "The application of inverse theory to seamount
magnetism", Reviews of Geophysics vol 25, pp 17-40, 1987, diagrama de variaie
realizat cu:
load seamount ;
scatter(x,y,5,z)
este prezentat n figura 17.32.

Fig.17.32. Reprezentarea grafic cu funcia scatter
18. REPREZENTRI GRAFICE N TREI
DIMENSIUNI
18.1. Grafice de baz 3D
Pentru reprezentarea liniilor n spaiu se utilizeaz funcia plot3, care
se poate apela prin:
plot3(x,y,z) care reprezint grafic o linie n spaiul 3D, linie care
trece prin punctele ale cror coordonate sunt tripletele (x,y,z) i n care
x, y i z sunt vectori de aceeai dimensiune;
plot3(X,Y,Z), unde X, Y i Z sunt matrice de aceeai dimensiune,
reprezint grafic cte o linie n spaiul 3D, pentru fiecare triplet al
coloanelor matricelor [X(:,i), Y(:,i), Z(:,i)];
plot3(x,y,z, 'linie_tip') sau plot3(x1,y1,z1, 'linie_tip1', x2,y2,z2,
'linie_tip2',...) realizeaz reprezentri 3D multiple, n care se
precizeaz tipurile de linii i culorile acestora, ca i n cazul funciei
plot.

Reprezentarea unei spirale n 3D, figura 18.1, se poate face prin comenzile:
t=0:pi/50:10*pi; plot3(sin(t),cos(t),t); xlabel('sin(t)');ylabel('cos(t)'); zlabel('t').



Fig. 18.1. Reprezentarea grafic a unei spirale cu funcia plot3
Reprezentri grafice n trei dimensiuni 385 385
Funcia plot3 returneaz un vector coloan al identificatorilor de control al
caracteristicilor obiectelor linie. Obiectele linie create cu plot3 sunt copii ai axelor
curente. Tripletele (x,y,z) pot fi urmate de perechile parametru-valoare, pentru a
specifica proprietile suplimentare ale liniilor.
Pentru o citire mai precis pe grafic, reprezentarea se poate asocia cu
funcia grid.

Reprezentarea grafic a suprafeelor 3D sub forma unei reele (mesh)
se face utiliznd funcia mesh.
Pentru reprezentrile grafice 3D ale suprafeelor i liniilor de contur se
utilizeaz funciile meshc i meshz. Funcia meshc reprezint grafic combinaia
suprafa 3D (mesh) linii de contur, reprezentate sub suprafa. Funcia meshz
reprezint grafic suprafee 3D (mesh), cu plan de referin la cota zero
(piedestal).
n general, o suprafa este parametrizat prin dou variabile independente,
i i j, care variaz continuu n interiorul unui dreptunghi. Dac, de exemplu 1im
i 1jn, atunci fiecare punct este specificat prin trei funcii, X(i,j), X(i,j) i Z(i,j).
Cnd i i j sunt numere ntregi, suprafaa este definit n nodurile unei reele
rectangulare (grid), iar matricele X, Y, Z, au dimensiunea mxn. Dac se dorete i
precizarea culorii suprafeei, este necesar nc o matrice, C(i,j), de aceeai
dimensiune, mxn.
Fiecare punct al suprafeei rectangulare este conectat cu alte patru puncte
vecine, astfel:

j i
j i j i j i
,j i
, 1
I
1 , , 1 ,
I
1
+
+


Punctele de pe margini sunt conectate cu trei noduri, iar colurile au numai
dou noduri vecine.
n cazul general, funcia mesh, meshc sau meshz se apeleaz cu patru
matrice, ca parametrii de intrare, respectiv:
mesh(X,Y,Z,C), meshc(X,Y,Z,C), meshz(X,Y,Z,C)
Poziia din care este observat suprafaa reprezentat grafic poate fi
precizat cu funcia view. Gradarea i etichetarea axelor este dat de intervalele X,Y
i Z sau de setarea curent a axelor, prin funcia axis. Culorile utilizate sunt cele
determinate de C sau precizate prin funcia caxis. Valorile scalei de culori sunt
utilizate ca indici ai tabelei de culoare, din colormap.
n cazul n care matricea C este omis, se consider C=Z, astfel nct
culoarea este proporional cu nlimea suprafeei.
Dac apelarea se face,
mesh(x,y,Z,C), meshc(x,y,Z,C), meshz(x,y,Z,C)
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 386
sau
mesh(x,y,Z), meshc(x,y,Z), meshz(x,y,Z)
n care cele dou matrice sunt nlocuite de vectori, trebuie ca:
length(x)=n, length(y)=m i [m,n]=size(Z).
n acest caz, punctele reelei sunt specificate prin tripletul (x(j),y(i),Z(i,j)),
unde x corespunde coloanelor lui Z, iar y corespunde rndurilor. Pentru a rezulta o
figur corect, trebuie ca vectorii x i y s fie ordonai cresctor i cu pas constant.
Dac apelarea se execut,
mesh(Z), meshc(Z), meshz(Z)
sau,
mesh(Z,C), meshc(Z,C), meshz(Z,C)
atunci se consider x=1:n i y=1:m, iar reprezentarea se face pe baza indicilor
matricei Z.
Apelate sub forma,
mesh(,'NumeProprietate','ValoareProprietate',),
meshc(,'NumeProprietate','ValoareProprietate',),
meshz(,'NumeProprietate','ValoareProprietate',),
seteaz 'NumeProprietate' la 'ValoareProprietate' dorit, putnd fi mai multe seturi
de astfel de date ntr-un singur segment.
Dac se apeleaz simplu mesh, meshc, meshz, atunci se returneaz un
identificator spre obiectul suprafa.
Funciile axis, caxis, colormap, hold, shading, hiden i view seteaz
proprietile obiectelor figur, axe i suprafa, care afecteaz suprafeele mesh
(reea) afiate.
O reprezentare a suprafeelor i a liniilor de contur, sub forma unei
cascade, se poate face utiliznd funcia waterfall(X,Y,Z), care nu ploteaz
coloanele reelei.

Pentru exemplificare, se consider funcia Z=X.*exp(-X.^2-Y.^2), care se
reprezint n figura 18.2 astfel: a) cu funcia mesh, ca o suprafa mesh; b) cu
funcia meshc, ca o suprafa mesh asociat cu linii de contur; c) cu funcia
meshz, ca o suprafa mesh cu plan de referin; d) cu funcia waterfall, ca o
suprafa mesh sub form de cascad.
Reprezentarea grafic a suprafeelor netede 3D se face cu funcia surf, iar a
suprafeelor 3D asociate cu linii de nivel proiectate pe planul bazei, cu funcia
surfc.
Funcia surf(X,Y,Z,C) reprezint a suprafa descris de matricele X,Y i Z,
i colorat cu elementele precizate n matricea C. n unele utilizri, argumentele X
i Y pot fi vectori sau pot fi omise. De asemenea, matricea C poate fi omis.
Punctul din care este vzut o reprezentare 3D poate fi precizat prin funcia view.
Axele sunt date de matricele X,Y i Z sau setate cu funcia axis. Culoarea este setat
de matricea C sau prin funcia caxis. Valorile scalate ale culorilor sunt indici la
matricea de culoare curent din colormap.
Culoarea suprafeei poate fi specificat prin dou metode diferite:
Reprezentri grafice n trei dimensiuni 387 387
specificnd colurile reelei sau centrele acesteia. Nuanele sunt configurate cu
funcia shading. Dac funcia shading este iniializat la interp, C trebuie s aib
aceeai dimensiune ca matricele X,Y,Z i specific culorile colurilor, iar n
interiorul zonei se realizeaz o interpolare linear. Dac shading este iniializat
faced (valoare implicit) sau flat, atunci C(i,j) specific o culoare constant n
dreptunghiul respectiv.

Fig.18.2. Reprezentarea suprafeelor mesh 3D

Apelat ca surf(X,Y,Z), se consider C=Z, astfel nct culoarea este
proporional cu nlimea suprafeei.
Funciile surf(x,y,Z) i surf(x,y,Z,C), avnd ca argumente de intrare n
locul celor dou matrice X i Y, vectorul x, de dimensiune n i vectorul y, de
dimensiune m, cu condiia length(x)=n, length(y)=m, unde [m,n]=size(Z), iar
matricea C are dimensiunea mxn.. n acest caz, colurile dreptunghiurilor care
compun suprafata sunt tripletele (x(j),y(i),Z(i,j)). Prin urmare, x este asociat
numrului de coloane, iar y numrului de linii.
Dac apelarea se face surf(Z) sau surf(Z,C), atunci se consider implicit
x=1:n i y=1:m, pentru reprezentarea grafic 3D a matricei Z, folosind eventual i
matricea de culoare C.
Specificarea unei anumite proprieti, Proprietate, i a valorii acesteia,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 388
Valoare, se realizeaz apelnd funcia sub forma, surf(...,'Propietate',Valoare,...),
setul de proprieti i valori putnd fi multiplicat de cte ori este necesar.
Funcia surfc(...) este identic cu surf(...), exceptnd liniile de nivel, care
sunt reprezentate sub suprafa, pe acelai grafic.
Apelate simplu surf sau surfc se returneaz un identificator al obiectului
suprafa, care este copil al obiectului axe.
Funciile axis, caxis, colormap, hold, shading i view seteaz proprietile
obiectelor figur, axe i suprafa, care afecteaz suprafeele afiate.
Pentru exemplificare, n figura 18.3 se prezint o suprafa 3D redat: a) cu
surf i b) cu surfc. Secvena Matlab utilizat a fost:
[X,Y]=meshgrid(-3:0.1:3);
Z=peaks(X,Y);
subplot(211); surf(X,Y,Z); subplot(212); surfc(X,Y,Z).

Fig.18.3. Reprezentarea 3D a suprafeelor cu surf i surfc

Reprezentarea grafic spaial a poliedrelor se face cu funcia fill3, care se
apeleaz cu una dintre sintaxele:
fill3(x,y,z,c) care reprezint un poliedru 3D, avnd vrfurile definite
de vectorii x,y i z, cu nuanele de culoare precizate de c, iar
coordonatele poliedrului sunt specificate prin tripletele (x,y,z);
fill3(x,y,z, 'c') care se deosebete de precedenta prin aceea c vectorul
de culoare, c, are un singur caracter dintre cele prezentate n lista de
Reprezentri grafice n trei dimensiuni 389 389
culori de la funcia plot, respectiv 'r','g','b', 'c','m','y','w','k', sau are trei
componente [r g b], iar poliedrul va fi colorat cu o singur culoare;
fill3(x1,y1,z1, c1,x2,y2,z2,c2, ...) o form mai uor de controlat
pentru poliedre multiple, n care c1, c2, ... pot fi din lista de culori.

Dac c este un vector cu aceeai lungime ca x i y, elementele acestuia sunt
scalate cu funcia caxis i apoi utilizate ca indici n matricea de culoare colormap,
pentru a specifica culorile vrfurilor. Culorile dintre vrfuri sunt obinute prin
interpolare biliniar a culorilor vrfurilor.
Dac x, y i z sunt matrice de aceeai dimensiune, fill3(x,y,z,c) reprezint
cte un poliedru pentru fiecare coloan. n acest caz, c este un vector linie pentru
poliedre reprezentate cu o singur culoare (flat) i o matrice, pentru poliedre
realizate cu culori interpolate, interp sau cu efecte speciale.
Dac numai unul dintre argumentele x, y sau z sunt matrice, celelalte fiind
vectori coloan cu acelai numr de linii, vectorii coloan se extind la matrice cu
aceleai dimensiuni, prin adugarea unor coloane identice.
Funcia fill3 returneaz un vector coloan al identificatorilor de control al
modulelor obiect, cte o linie pentru fiecare modul.
Argumentele x, y, z i c pot fi urmate de perechile parametru-valoare,
pentru a specifica proprietile suplimentare ale modulului obiect.
Pentru exemplificare, se consider secvena:
x=1:100;y=x.^2.5;z=(x.*y);c=z;
subplot(211); fill3(x,y,z,'k'); subplot(212); fill3(x,y,z,c)
reprezentat n figura 18.4.

Fig.18.4. Reprezentarea grafic cu fill3
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 390
18.2. Reprezentarea conturului i grafice 2-1/2 D
Prin linii de contur se neleg liniile situate la acelai nivel pe axa Z (linii
de nivel constant).
Calculul matricei C, care conine perechile de coordonate (X,Y) ale fiecrei
linii de contur, matrice utilizat de funcia contour, contour3 sau contourf,
pentru a trasa conturul actual, se face cu funcia contourc.
Funcia contourc se apeleaz cu una dintre sintaxele:
C=contourc(Z) calculeaz matricea C a liniilor de contur ale
matricei Z, alegnd automat numrul liniilor de nivel i valorile
acestora;
C=contourc(X,Y,Z) calculeaz matricea C a liniilor de contur ale
matricei Z i utilizeaz date din vectorii X i Y, pentru a scala axele Ox
i Oy, iar elementele vectorilor X i Y sunt cu pas constant;
C=contourc(Z,n) sau C=contour(X,Y,Z,n) calculeaz matricea C a
liniilor de contur ale matricei Z, pentru n (scalar) linii de contur;
C=contourc(Z,v) sau C=contour(X,Y,Z,v) calculeaz matricea C a
liniilor de contur ale matricei Z la nivelurile specificate de vectorul v;

Matricea liniilor de contur, C, este o matrice cu dou linii, ca de exemplu:
C = [nivel1 x1 x2 x3 ... nivel2 x2 x2 x3 ...;
perechi1 y1 y2 y3 ... perechi2 y2 y2 y3 ...]
n care vectorii x i y trebuie s fie monoton cresctori i cu pas constant.

Pentru suprafee nerectangulare sau parametrice calculul matricei C a
liniilor de contur se face cu funcia contours, care se apeleaz asemntor ca i
funcia contourc.

Reprezentarea grafic n plan a liniilor de contur se realizeaz cu funcia
contour, care se apeleaz cu una dintre sintaxele:
contour(Z) reprezint conturul liniilor de acelai nivel ale matricei Z,
cu precizarea: colul din stnga sus al desenului corespunde
elementului Z(1,1), iar numrul liniilor de contur i valorile cotelor Z
sunt alese automat;
contour(X,Y,Z) reprezint conturul liniilor de acelai nivel ale
matricei Z, utiliznd vectorul X pentru controlul scalrii pe axa Ox i
vectorul Y pentru controlul scalrii pe axa Oy, iar numrul liniilor de
contur i valorile cotelor Z sunt alese automat;
contour(Z,n) sau contour(X,Y,Z,n) reprezint conturul a n linii de
nivel ale matricei Z, cu vectorii X i Y pentru controlul scalrii pe axa
Ox i Oy, iar dac n lipsete, se consider valoarea implicit 10;
contour(Z,V) sau contour(X,Y,Z,V) reprezint conturul liniilor de
nivel ale matricei Z, caracterizate de valorile specificate n vectorul V,
Reprezentri grafice n trei dimensiuni 391 391
cu vectorii X i Y pentru controlul scalrii pe axa Ox i Oy, iar dac
V=[v v], se calculeaz un singur nivel;
contour(,'tiplinie') reprezint liniile de contur cu liniile i culorile
specificate de tiplinie;
C=contour() returneaz matricea liniilor de contur C, descris la
funcia contourc i este utilizat de funcia clabel;
[C,H]=contour() returneaz matricea liniilor de contur C i un
vector coloan H, al identificatorilor obiectelor linie.

De menionat c matricea Z trebuie s aib cel puin dimensiunea 3.
Pentru exemplificare, n figura 18.5 se reprezint grafic conturul liniilor de
nivel ale funciei z=exp(-x
2
-y
2
) n domeniul -2x2, -2x3, obinute prin rularea
secvenei Matlab:
[x,y]=meshgrid(-2:0.2:2, -2:0.2:3);
z=x.*exp(-x.^2-y.^2);
contour(-2:0.2:2, -2:0.2:3,z,8);

Fig.18.5. Reprezentarea grafic a liniilor de contur cu funcia contour

Etichetarea cotelor liniilor de contur ntr-o reprezentare grafic se face cu
funcia clabel, care se poate apela cu una dintre sintaxele:
clabel(C) eticheteaz liniile de nivel, iar poziia acestora este aleas
aleator;
clabel(C,H,V) eticheteaz liniile de nivel numai pentru valorile V sau
toate, dac V lipsete, unde C i H sunt respectiv, matricea liniilor de
contur i identificatorul obiectelor linie, rezultate ca mrimi de ieire
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 392
ale funciilor contour, contour3 sau contourf, selectnd aleatoriu
poziia etichetelor;
clabel(C,..., 'manual') eticheteaz liniile de nivel selectate cu mouse-
ul, apsnd tasta ENTER, pentru a termina aciunea i Space Bar,
pentru a introduce urmtoarea linie de nivel;
clabel(..., 'proprietate_text', valoare_proprietate,... ) precizeaz
valorile, valoare_proprietate, unei proprieti a textului,
proprietate_text, precum dimensiune font (fontsize), culoare font
(color), rotaie text (rotation), spaierea (labelspacing), care are
valoarea implicit 144 puncte.

Pentru exemplificare, se consider aceeai funcie ca mai sus i
urmtoarele secvene Matlab:
[x,y]=meshgrid(-2:0.4:2, -2:0.5:3); z=x.*exp(-x.^2-y.^2);
subplot(1,3,1); [cs,h]=contour(-2:0.4:2,-2:0.5:3,z);clabel(cs,h,'labelspacing',72)
subplot(1,3,2); cs=contour(-2:0.4:2,-2:0.5:3,z);clabel(cs); subplot(1,3,3);
[cs,h]=contour(-2:0.4:2,-2:0.5:3,z);clabel(cs,h,'fontsize',12,'color','r','rotation',0)
prezentate n figura 18.6.

Fig.18.6. Etichetarea liniilor de contur cu funcia clabel
Reprezentarea grafic n plan a liniilor de contur pline (filled) se
realizeaz cu funcia contourf, care se apeleaz asemntor ca funcia contour.
Reprezentri grafice n trei dimensiuni 393 393
Zonele dintre liniile de contur sunt colorate diferit, cum sunt prezentate frecvent
hrile termice. Un exemplu de utilizare este redat n figura 18.7, realizat cu
secvena de instruciuni:
z=peaks; contourf(z), hold on, shading flat
[c,h]=contour(z,'k-'); clabel(c,h), colorbar

Reprezentarea grafic n spaiu a liniilor de nivel constant se realizeaz
cu funcia contour3, care se apeleaz ca i funcia contour. Un exemplu este
prezentat n figura 18.8, realizat cu instruciunea contour3 (peaks).

Fig.18.7. Reprezentarea grafic a liniilor de contur cu funcia contourf

Fig.18.8. Reprezentarea grafic n spaiu a liniilor de nivel cu funcia contour3

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 394
Pentru plotarea facil a conturului unei expresii introduse direct ca
argument (de genul funciei humps) se utilizeaz funcia ezcontour, care se poate
apela:
ezcontour(f) ploteaz liniile de contur ale funciei f(x,y), utiliznd
funcia contour, unde f este un semn (de funcie) sau o expresie
simbolic, reprezentnd o funcie matematic de dou variabile, x i y,
considernd domeniul implicit -2*pi < x < 2*pi, -2*pi < y < 2*pi i
acordnd corespunztor gridul;
ezcontour(f, Dom) ploteaz f pe domeniu, Dom, care poate fi un
vector de dou dimensiuni, [a b], respectiv (a < x < b, a < y < b), de 4
dimensiuni, [xmin xmax ymin ymax] sau [xmin xmax], [ymin ymax],
respectiv (xmin < x < xmax, ymin < y < ymax) sau valoarea implicit,
2*pi < x < 2*pi, -2*pi < y < 2*pi ;
ezcontour(..., N) ploteaz f pe domeniul implicit considernd un grid
NxN, n care valoarea implicit a lui N=60.

Pentru rotirea unui grafic 3D se utilizeaz rotate3d sau se clicheaz
semnul rotire de pe figura graficului i se manevreaz cu mouse-ul.

Reprezentarea grafic uoar n plan, a liniilor de contur pline (filled) se
realizeaz cu funcia ezcontourf, care se apeleaz asemntor cu funcia
ezcontour. Zonele dintre liniile de contur sunt colorate diferit.
18.3. Alte grafice 3D
Reprezentarea grafic 3D sub form de bare veticale se realizeaz cu
funcia bar3, care se poate apela cu sintaxa:
bar3(Y,Z) reprezint coloanele matricei Z, de mxn, prin bare
verticale n 3D de nlime dat de length(Z);Y este un vector monoton
cresctor sau descresctor, iar culoarea este setat prin colormap;
bar3(Z) este asemntoare ca bar3(X,Z), cu deosebirea c utilizeaz
pentru y valoarea implicit Y=1:m;
bar3(Y,Z,gros) sau bar3(Z,gros) specific grosimea barei date de
gros, care poate lipsi i atunci, valoarea implicit este gros=0.8, dac
gros<0.8 barele au grosimea dat de gros, iar dac gros>1 atunci
barele se unesc;
bar3(, 'detached') este valoarea implicit i reprezint barele
detaate pe seturi de date;
bar3(, 'grouped') reprezint barele grupate pe seturi de date i cu
aceeai culoare;
bar3(, 'stacked') reprezint barele secionate cu culori diferite
pentru seturile de date;
bar3(, 'culoarelinie') reprezint barele cu culori specificate din
tab.18.1, respectiv una dintre 'r g b y m c k w'.
Reprezentri grafice n trei dimensiuni 395 395

Apelat simplu, bar3, funcia returneaz i date despre suprafa.
Pentru exemplificare, se prezint figura 18.9, realizat cu secvena:
subplot(1,2,1), bar3(peaks(5)); subplot(1,2,2), bar3(rand(5),'stacked').
Reprezentarea barelor 3D orizontale se realizeaz cu funcia bar3h, care
este asemntoare funciei bar3. Pentru exemplificare, se consider secvena
anterioar, n care se nlocuiete bar cu barh, reprezentat n figura 18.10.
Returnarea valorilor iniiale utilizate se realizeaz cu funcia makebars.

Fig.18.9. Reprezentarea grafic cu bar3


Fig.18.10. Reprezentarea grafic cu bar3h
Reprezentarea grafic a unui punct, care urmrete realizarea grafic
spaial (comet), se execut cu funcia comet3, care se apeleaz cu una dintre
sintaxele:
comet3(z) reprezint vectorul z ntr-un grafic tridimensional, animat,
prin urmrirea de un marker (comet), la o distan de 0.1 din
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 396
lungimea vectorului z;
comet3(x,y,z) reprezint curba dat prin punctele (x(i),y(i),z(i)), n
mod animat, prin urmrirea de un marker (comet), la o distan de
0.1 din lungimea vectorului z;
comet3(x,y,z,p) la fel ca precedenta, dar distana de urmrire este
setat la valoarea p din lungimea total a vectorului z.

Pentru exemplificarea modului de lucru, se recomand exemplul:
t = -pi:pi/500:pi;
comet3(sin(5*t),cos(3*t),t).
Pentru plotarea facil 3D se utilizeaz funcia ezplot3, care se poate apela:
ezplot3(x,y,z) pentru plotarea n spaiu a curbei x = x(t), y = y(t), z = z(t),
care consider implicit, pentru t, domeniul 2*pi < t < 2*pi;
ezplot3(x,y,z,[tmin, tmax]) pentru plotarea n spaiu a curbei x =x (t),
y = y(t), z = z(t), care consider pentru t domeniul tmin < t < tmax;
ezplot3(x,y,z, 'animate') sau ezplot3(x,y,z,[tmin, tmax], 'animate') la
fel ca i cele anterioare, dar produce o curb spaial animat, de genul
comet.

De menionat c x, y i z pot fi funcii definite inline @, sau expresii, ca n
exemplul:
fy = inline('t .* sin(t)') ; ezplot3(@cos, fy, @sqrt)
ezplot3('cos(t)', 't * sin(t)', 'sqrt(t)', [0,6*pi])
ezplot3(@cos, fy, @sqrt, 'animate')
redat n figura 18.11.

Fig.18.11. Reprezentarea grafic cu ezplot3

Reprezentri grafice n trei dimensiuni 397 397
Reprezentarea grafic a unei suprafee discrete Z, sub forma unor plane
xy, terminate cu cerc, se execut cu funcia stem3, care se apeleaz cu una dintre
sintaxele:
stem3(Z) traseaz suprafaa discret Z sub forma unor plane xy,
terminate cu cerc;
stem3(X,Y,Z) traseaz suprafaa Z la valorile specificate de X i Y;
stem3(x,y,linie_tip) sau stem3(x,y, 'filled') traseaz un grafic linii de
tipul i culoarea precizat n irul de caractere linie_tip, similar cu
funcia plot, ca de exemplu stem3(x,y,:r), sau stem3(x,y, 'filled'),
cnd cercurile sunt umplute (colorate).
Plotarea dispersiei vectorilor n 3D, la locaiile specificate de vectorii X, Y, Z
(care trebuie s fie de aceeai dimensiune), cu markere (cercuri implicit) de arie
determinat de valorile vectorului S ,(n puncte^2) i fiecare punct colorat, conform
valorilor vectorului C, se face cu scatter3(X,Y,Z,S,C). Dac S este scalar, atunci fiecare
marker va avea aceeai dimensiune. Cnd C este un vector de aceeai lungime ca i X,
Y i Z, valorile lui C sunt interpolate linear ntre culorile curente din colormap. Dac C
este o matrice de 3 dimensiuni, culorile markerelor au valori RGB. De asemenea, C
poate fi specificat cu culori din tabelul 17.1, respectiv una dintre 'r g b y m c k w'.
Funcia scatter3(X,Y,Z) traseaz markere de culori i dimensiuni implicite,
scatter3(X,Y,Z,S) traseaz markere cu o singur culoare, iar prin scatter3(...,'filled')
cercurile sunt umplute (colorate total).
Returnarea indicatorilor de control se face prin apelarea funciei scatter3.
Un exemplu de utilizare este dat n figura 18.12, obinut cu secvena:
[x,y,z] = sphere(16);
X = [x(:)*.5 x(:)*.75 x(:)]; Y = [y(:)*.5 y(:)*.75 y(:)];
Z = [z(:)*.5 z(:)*.75 z(:)]; S = repmat([1 .75 .5]*10,prod(size(x)),1);
C = repmat([1 2 3],prod(size(x)),1);
scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60).

Fig.18.12. Reprezentarea grafic cu scatter3
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 398
Realizarea unei diagrame 3D circulare (aa numita diagram plcint)
cu valorile unui vector X, avnd specificate semnificaia n etichet, se face cu
funcia pie3(X,eticheta), apelat:
pie3([2 4 3 5],[0 1 1 0],{'North','South','East','West'})
i rezultnd diagrama din figura 18.13.
De menionat c valorile lui X sunt normalizate, iar dac sum(X)<1, atunci
sunt trecute valorile efective i apare un segment de cerc.

Fig.18.13. Reprezentarea grafic cu pie3
Pentru plotarea facil a reelei (gridului) unei expresii introduse direct ca
argument (de genul funciei humps), se utilizeaz funcia ezmesh, care se poate
apela:
ezmesh(f) ploteaz graficul funciei f(x,y) utiliznd funcia mesh,
unde f este un semn sau o expresie simbolic, reprezentnd o funcie
matematic de dou variabile, ca x i y, considernd domeniul implicit
-2*pi < x < 2*pi, -2*pi < y < 2*pi i acordnd corespunztor gridul;
ezmesh(f, Dom) ploteaz f pe domeniu, Dom, care poate fi un vector
de dou dimensiuni, [a b], respectiv (a < x < b, a < y < b), de 4
dimensiuni, [xmin xmax ymin ymax] ori [xmin xmax], [ymin ymax],
respectiv (xmin < x < xmax, ymin < y < ymax) sau valoarea implicit,
2*pi < x < 2*pi, -2*pi < y < 2*pi ;
ezmesh(..., N) ploteaz f pe domeniul implicit, considernd un grid
NxN, n care valoarea implicit a lui N este 60;
ezmesh(...,'circ') ploteaz f pe un disc, centrat pe domeniul
considerat.

Posibilitile de apelare a funciei ezmesh sunt:
f = ['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)'];
ezmesh(f,[-pi,pi])
ezmesh('x*exp(-x^2 - y^2)'); ezmesh('x*y','circ');
ezmesh('real(atan(x + i*y))'); ezmesh('exp(-x)*cos(t)',[-4*pi,4*pi,-2,2]);

Reprezentri grafice n trei dimensiuni 399 399
ezmesh('s*cos(t)','s*sin(t)','t');
ezmesh('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,4*pi]);
ezmesh('(s-sin(s))*cos(t)','(1-cos(s))*sin(t)','s',[-2*pi,2*pi]);
h = inline('x*y - x'); ezmesh(h); ezmesh(@peaks)

Pentru plotarea facil a reelei i a liniilor de contur ale unei expresii
introduse direct ca argument, se utilizeaz funcia ezmeshc, care se apeleaz
asemntor cu funcia ezmesh.

Pentru plotarea facil a suprafeelor colorate a unei expresii introduse
direct ca argument, se utilizeaz funcia ezsurf, care se apeleaz ca i ezmesh.
Suprafeele sunt date parametric, x = x(s,t), y = y(s,t), z = z(s,t), ca de exemplu:
ezsurf('(1-s)*(3+cos(t))*cos(4*pi*s)',
'(1-s)*(3+cos(t))*sin(4*pi*s)', ...
'3*s + (1 - s)*sin(t)', [0,2*pi/3,0,12] )
exemplificat n figura 18.14.

Pentru plotarea facil a suprafeelor colorate combinate, cu trasarea
liniilor de contur a unei expresii introduse direct ca argument, se utilizeaz
funcia ezsurfc, care se apeleaz ca i ezmesh sau ezsurf, ca n figura 18.15,
realizat cu comanda:
ezsurfc('(s-sin(s))*cos(t)','(1-cos(s))*sin(t)','s',[-2*pi,2*pi]).

Fig.18.14. Reprezentarea grafic cu ezsurf

Pentru plotarea facil 3D a unei expresii introduse direct ca argument (de
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 400
genul funciei humps) se face uor cu funcia ezgraph3, care se poate apela:
ezgraph3(Plotfun,f) - ploteaz z=f(x,y), utiliznd pentru plotare funcia
Plotfun, care poate fi o funcie oarecare, ca de exemplu surf, avnd ca
argumente de intrare (x,y,z);
ezgraph3(Plotfun,f, [xmin xmax ymin ymax]) - ploteaz pe domeniul
specificat, [xmin xmax ymin ymax];
ezgraph3(Plotfun,x,y,z, [smin smax tmin tmax])) - ploteaz pe
domeniul specificat, [smin smax tmin tmax];
ezgraph3(x,y,z, [a b])) - ploteaz pe domeniul specificat, [a b];
ezgraph3(Plotfun,...,Domstyle) n care Domstyle poate fi 'rect' sau
'circ';
ezgraph3(Plotfun,...,Npts) utilizeaz un grid de NxN puncte;
ezgraph3(Plotfun,x,y,z) - ploteaz suprafaa parametric x=x(s,t), y=y(s,t) i z=z(s,t) pe
domeniul -2*pi < s < 2*pi and -2*pi < t < 2*pi.

Fig.18.15. Reprezentarea grafic cu ezsurfc

Plotarea unor suprafee triunghiulare colorate definit de matricea TRI,
de dimensiuni Mx3, se realizeaz cu funcia trisurf, care se apeleaz cu una dintre
sintaxele:
trisurf(TRI,X,Y,Z,C) - ploteaz triunghiurile definite de matricea TRI,
de dimensiuni Mx3 ; rndurile lui TRI conin indicii vectorilor X,Y i Z
Reprezentri grafice n trei dimensiuni 401 401
care definesc o singur fa a triunghiului, iar C este vectorul culoare;
trisurf(TRI,X,Y,Z) utilizeaz C=Z, adic vectorul culoare este
proporional cu nlimea Z;
trisurf(,'param','val',) definete un parametru, param, cu o
anumit valoare, val;
h=trisurf() returneaz vectorul h, al identificatorilor obiectelor.

Un exemplu de utilizare este redat n figura 18.16, realizat cu secvena
Matlab:
[x,y]=meshgrid(1:15,1:15);
tri = delaunay(x,y);
z = peaks(15);
trisurf(tri,x,y,z).

Fig.18.16. Reprezentarea grafic cu trisurf

Plotarea unor panglici 3D se realizeaz cu funcia ribbon, care se
apeleaz ca i ribbon.
De menionat c interiorul suprafeelor triunghiulare nu este colorat.
ribbon(X,Y,gros) ploteaz coloanele Y separat, ca panglici 3D, n
care gros este grosimea panglicii (valoarea implicit este gros=0.75),
iar dac X lipsete, se consider X=1:size(Y,1);
h=ribbon()- returneaz vectorul h, al identificatorilor obiectelor.

Un exemplu de aplicare este dat n figura 18.17, realizat cu secvena:
X=1:10;Y=X.^2;gros=0.5;ribbon(X,Y,gros).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 402

Fig.18.17. Reprezentarea grafic cu ribbon
18.4. Reprezentarea obiectelor spaiale solide
Reprezentarea grafic a obiectului cilindru se face cu funcia cylinder,
care genereaz un cilindru de raz R, cu cercul bazei aproximat din N puncte
echidistante i care se apeleaz cu sintaxa:
[X,Y,Z]=cylinder(R,N),
n care, dac N lipsete, se consider valoarea implicit N=20, iar dac R lipsete,
se consider valoarea implicit R=[1 1].
Funcia returneaz matricele X, Y, Z cu 2x(N+1) elemente, care specific
vrfurile fiecrei suprafee rezultate din aproximarea cercurilor bazelor cu
poligoane cu n laturi. Reprezentarea grafic se face cu funcia surf(X,Y,Z).
Omiterea argumentelor de ieire determin automat reprezentarea grafic a
obiectului cilindru.
Vectorul R are n mod normal 2 elemente, R=[R1 R2], care precizeaz raza
obiectului, la partea inferioar (R1) i superioar (R2), ceea ce face posibil
construirea de conuri, trunchiuri de con, piramide, trunchiuri de piramid.
Pentru exemplificare, n figura 18.18 se prezint diverse posibiliti de
utilizare a funciei cylinder, considernd secvena Matlab:
Rc1=1;Rc2=0;Rc3=0.5;Hc1=10;Hc2=8;N1=40;N2=6;
[xc,yc,zc]=cylinder([Rc1 Rc1],N1);zc=zc.*Hc1;
subplot(221);surf(xc,yc,zc,xc)
[xcon,ycon,zcon]=cylinder([Rc1 Rc2],N1);zcon=zcon.*Hc1;
subplot(222);surf(xcon,ycon,zcon,xcon)
[xp,yp,zp]=cylinder([Rc1 Rc2],N2);zp=zp.*Hc1;
subplot(223);surf(xp,yp,zp,xp)
Reprezentri grafice n trei dimensiuni 403 403
[xtp,ytp,ztp]=cylinder([Rc1 Rc3],N2);ztp=ztp.*Hc2;
subplot(224);surf(xtp,ytp,ztp,xtp).


Fig.18.18. Reprezentarea grafic cu cylinder

Reprezentarea grafic a obiectului sfer utilizeaz funcia sphere, care
genereaz coordonatele (X, Y, Z) ale sferei unitate, utilizate de funciile surf sau
mesh pentru reprezentare grafic. Coordonatele X, Y i Z sunt matrice de
(N+1)x(N+1), unde N este numrul de puncte echidistante folosite pentru
reprezentare, avnd valoarea implicit N=20 (dac N lipsete).
Apelarea se face cu sintaxa:
[X,Y,Z]=sphere(N).
Omiterea argumentelor de ieire determin automat reprezentarea grafic a
obiectului sfer.
Pentru exemplificare, se consider figura 18.19, care reprezint sfera
generat prin secvena:
[X,Y,Z]=sphere(25); surf(X,Y,Z).
Dac s-ar fi utilizat mesh, atunci segmentele (fiile) nu ar fi fost colorate.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 404

Fig.18.19. Reprezentarea grafic cu sphere
Pentru generarea unui elipsoid se utilizeaz funcia ellipsoid, care se
apeleaz cu sintaxa:
[X,Y,Z]=ellipsoid(XC,YC,ZC,XR,YR,ZR,N) prin care se genereaz
matricele (X, Y, Z) de (N+1)x(N+1), utilizate de funcia surf cu
comanda surf(X,Y,Z), pentru a produce un elipsoid avnd centrul (XC,
YC, ZC) i razele XR, YR, ZR; N este numrul de puncte utilizate la
reprezentare (valoarea implicit N=20);
ellipsoid(...) sau ellipsoid(...,N), deci fr argumente de ieire, ploteaz
elipsoidul apelnd la funcia surface.

Ecuaia elipsoidului este
1
) ( ) ( ) (
2
2
2
2
2
2
= + +
ZR
Z-ZC
YR
Y-YC
XR
X-XC
.

18.5. Vizualizarea volumelor i a vectorilor
Pentru vizualizarea volumelor i a vectorilor sunt disponibile, n Matlab, o
serie de faciliti specifice, ce se pot apela prin help-ul vissuite. Astfel,
pentru date scalare:
isosurface - extrage o izosuprafa;
isonormals - normalele la izosuprafa;
isocaps - izosuprafeele la capete;
Reprezentri grafice n trei dimensiuni 405 405
contourslice - traseaz conturul n planurile de separaie;
isocolors - coloreaz fiecare fie de izosuprafa;
pentru date vectoriale:
streamline - linii de curent pentru vectori 2D sau 3D;
stream2 - linii de curent 2D;
stream3 - linii de curent 3D;
divergence - divergena unui cmp de vectori 2D sau 3D;
curl - viteza tangenial i normal;
coneplot - ploteaz vectorii vitez sub form 3D;
quiver - reprezint grafic cmpuri de vectori orientai n 2D;
quiver3 - reprezint grafic cmpuri de vectori orientai n 3D;
streamtube - traseaz tuburi de curent 3D;
streamribbon - traseaz tuburi de curent 3D sub form de panglici;
streamslice - linii de curent orientate;
streamparticles - linii de curent pe care se mic particule;
interpstreamspeed - interpoleaz liniile de curent cu viteza;
slice - ploteaz felii volumetrice;
utilitare:
subvolume - extrage un set de date din volumul de date iniial;
reducevolume - reduce volumul de date;
volumebounds - returneaz datele volumului x, y, z i limitele culorilor;
smooth3 - niveleaz datele 3D;
reducepatch - reduce numrul de volume de discretizare;
shrinkfaces - reduce numrul de suprafee de discretizare;
surf2patch - convertete datele de suprafa n date de volume de
discretizare.

Pentru exemplificare, se prezint funcia quiver, care permite
reprezentarea grafic a unui cmp de vectori orientai. Apelarea se face cu una
dintre sintaxele:
quiver(X,Y,U,V) reprezint mici segmente de dreapt cu sgei (vectori),
avnd originea la perechile de elemente (X, Y), iar U i V sunt proieciile
vectorului pe axele Ox i Oy, cu meniunea c matricele X, Y, U, V trebuie
s aib aceeai dimensiune;
quiver(U,V) consider implicit X=1:n i Y=1:m, iar U i V sunt pe o
reea rectangular;
quiver(X,Y,U,V,S) sau quiver(U,V,S) controleaz lungimea sgeilor
prin factorul de scal S, care dac lipsete sau S=0, se face automat;

Se pot specifica tipurile de linii i culorile la fel ca pentru funcia plot.
Pentru exemplificare, se prezint n figura 18.20 un cmp de vectori
realizat cu secvena:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 406
[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15);
contour(x,y,z), hold on; quiver(x,y,px,py), hold off, axis image.

Fig.18.20. Reprezentarea unui cmp de vectori cu funcia quiver
18.6. Poziionarea observatorului fa de obiect
Definirea poziiei observatorului fa de un obiect 3D se face cu funcia
view, care precizeaz unghiul pe orizontal (numit azimut) i unghiul pe vertical
(numit elevaie).
Funcia view este utilizat pentru vizualizarea unei reprezentri grafice
spaiale din diverse poziii i se apeleaz cu una dintre sintaxele:
view(az,el) sau view([az,el]) stabilete unghiul din care se vede
reprezentarea grafic 3D, unde az este azimutul (unghiul n plan
orizontal), iar el este elevaia (unghiul pe vertical); ambele unghiuri sunt
date n grade;
view([x,y,z]) stabilete unghiul punctului de observare n coordonate
carteziene, ignornd magnitudinea vectorilor x, y, z;
view(2) stabilete reprezentarea grafic la 2D, cu valorile implicite az=0
i el=90;
view(3) stabilete reprezentarea grafic 3D, cu valorile implicite az=-37.5 i
el=30;
[az,el]=view returneaz unghiul pe orizontal, azimutul az i unghiul pe
vertical, elevaia el, din care este observat o reprezentare grafic 3D.

De menionat c, azimutul, az, poate lua valori pozitive sau negative, cea
pozitiv fiind o rotire n jurul axei Oz ,n sens orar. Valorile pozitive ale elevaiei,
el, corespund unui punct de observare plasat deasupra planului (x,y), iar valorile
negative corespund punctelor de sub plan.
Reprezentri grafice n trei dimensiuni 407 407
Valorile caracteristice ale azimutului sunt:
az=-37.5, el=30 valori implicite, care conduc la reprezentarea 3D;
az= 0, el=90 valori ce conduc la reprezentarea 2D;
az= 0, el=0 conduc la vederea direct din planul zero;
az= 180, el=elevat vedere din spate a obiectului la o elevaie, elevat,
dorit.

n figura 18.21 sunt exemplificate aceste valori, utiliznd reprezentarea
trunchiului de piramid din figura 18.18 i secvena de program:
subplot(221); surf(xtp,ytp,ztp,xtp); view(-37.5,30); subplot(222);
surf(xtp,ytp,ztp,xtp);view(0,90); subplot(223); surf(xtp,ytp,ztp,xtp);
view(0,0); subplot(224); surf(xtp,ytp,ztp,xtp); view(180,30).

Fig.18.21. Vederea unei figuri cu view
Returnarea matricei de transformare ortogonal, cu dimensiunea 4x4,
utilizat la proiecia vectorilor spaiali 3D pe suprafaa 2D, se face utiliznd funcia
viewmtx, care se apeleaz cu sintaxa:
A=viewmtx(az,el,phi),
unde: A matricea de transformare; az azimutul; el elevaia; phi unghiul de
vizualizare i control al distorsiunilor, relativ la un cub normalizat.
Rotirea unei figuri 3D pentru vizualizare cu ajutorul mouse-ului se face
cu funcia rotate3d, care se apeleaz cu sintaxa:
rotate3d on cnd rotirea este permis;
rotate3d off cnd nu mai este permis rotirea.
19. CONTROLUL CULORILOR I
VIZUALIZRII REPREZENTRILOR
GRAFICE
19.1. Controlul culorilor reprezentrilor grafice
Specificarea culorii cu care se realizeaz o reprezentare grafic n Matlab se
poate face:
cu numele prescurtat (scurt) al culorii;
cu numele ntreg (lung) al culorii:
prin tripletul RGB (Red-Green-Blue, respectiv Rou-Verde-Albastru)

Numele scurt sau lung sunt iruri de caractere care specific una dintre cele
opt culori predefinite. Tripletul RGB este un vector linie cu trei elemente, care
specific intensitatea celor trei componente fundamentale ale oricrei culori.
Elementele vectorului trebuie s fie numere n intervalul [0.0 1.0]. Cele trei forme
de apelare pentru culorile predefinite n Matlab sunt prezentate n tabelul 19.1.

Tabelul 19.1.
Culoarea Numele scurt Numele lung Tripletul RGB
galben y yellow 1,1,0
mov m magenta 1,0,1
albastru-deschis c cyan 0,1,1
rou r red 1,0,0
verde g green 0,1,0
albastru b blue 0,0,1
alb w white 1,1,1
negru k black 0,0,0

De exemplu, pentru reprezentarea graficului y(x) cu o linie de culoare roie se
poate folosi una dintre secvenele:
plot(x,y,'r')
plot(x,y,'red')
h=plot(x,y); set(h,'Color',[1,0,0]).
Ultima variant este o form mai rafinat de folosire a caracterelor de control
al caracteristicilor grafice, care se realizeaz prin setarea parametrului h cu care se
opereaz ulterior.
Modificarea fondului unei reprezentri grafice din backround n roz, de
exemplu, se face cu secvena set(gcf,'Color',[1,0.4,0.6]).
Controlul culorilor i vizualizrii reprezentarilor grafice 409
Matricea de culoare pentru o reprezentare grafic este o matrice cu
dimensiunea mx3, fiind dat prin funcia colormap, ale crei elemente sunt numere
reale n intervalul [0.0 1.0]. Linia k a unei matrice de culoare definete culoarea
asociat indicelui k dintr-o scal a culorilor, fiind specificat prin intensitatea
culorilor fundamentale din tripletul RGB: C(k,:)=[r(k) g(k) b(k)]
Funcia colormap care prezint matricea de culoare folosit la reprezentarea
grafic se apeleaz cu una dintre sintaxele:
colormap(C) stabilete matricea de culoare C;
C=colormap returneaz matricea de culoare curent;
colormap('default') seteaz matricea de culoare la valoarea implicit,
avnd dimensiunea 64x3;
colormap(hsv) seteaz matricea de culoare la modelul hsv.


Stabilirea limitelor ntre care se scaleaz matricea de culoare pentru
reprezentarea grafic se face cu funcia caxis. Funcia caxis permite modificarea
proprietilor CLim i CLimMode ale obiectului axe creat cu funcia axes i
scaleaz axa pseudoculorii matricei de culoare. Transformrile de culoare sunt
controlate prin funcia colormap i proprietile CLim i CLimMode.
Apelarea funciei caxis se face cu una dintre sintaxele:
caxis([cmin cmax]) stabilete parametrii CLim de scalare ai axei de
culoare la valorile precizate, cu meniunea c culorile din afara intervalului
cmin c cmax sunt omise i astfel, zonele sau numai pixelii
corespunztori acelor culori nu sunt reprezentate;
caxis('manual') fixeaz manual parametrii de scalare ai axei de culoare;
caxis('auto') stabilete implicit ClimMode, scalnd automat parametrii
ntre valorile minim i maxim ale axei de culoare, fiind omise
(nereprezentate) numai valorile Inf i NaN;
V=caxis returneaz vectorul linie V, cu dou elemente, V=[cmin cmax],
care conine limita minim, cmin i maxim, cmax, a matricei de culoare
curente;
caxis(caxis) nghea scalarea axei de culoare la limitele curente, astfel
nct urmtoarele reprezentri se pot realiza folosind aceeai dinamic de
culoare, pentru a compara eventualele evoluii codificate dup culoare.

De exemplu, pentru reprezentarea unei sfere cu raza unitar, creat cu
secvena,
[X,Y,Z]=sphere(32);C=Z;,
a) folosind ntreaga scal de culoare se utilizeaz,
surf(X,Y,Z,C)
b) vizualiznd numai jumtatea inferioar (filtrnd) se folosete,
surf(X,Y,Z,C); caxis([-1 0]);
c) folosind numai prima jumtate a scalei de culoare se utilizeaz,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 410
surf(X,Y,Z,C); caxis([-1 3]).

Stabilirea modului de colorare al suprafeelor se face cu funcia shading,
care se apeleaz cu una dintre sintaxele:
shading faceted stabilete modul de reprezentare a zonelor i suprafeelor
cu aceeai culoare, iar liniile reelei (mesh-ului) sunt vizibile;
shading flat stabilete reprezentarea grafic a zonelor cu culoarea
specificat pentru vrful din stnga-sus al reelei, iar liniile reelei (mesh-
ului) sunt invizibile;
shading interp stabilete culoarea de reprezentare a fiecrui segment sau
arie elementar la o nuan rezultat din interpolarea liniar a culorilor
capetelor liniei sau colurile suprafeei.

Funcia shading stabilete proprietile EdgeColor i FaceColor pentru toate
obiectele suprafa i zon din axele curente, adic pentru cele create cu funciile
mesh, surf, pcolor, fill, fill3.

Vizualizarea i ascunderea suprafeelor suprapuse se face cu funcia
hidden, ce elimin liniile ascunse ale unei reele de tip mesh i care se apeleaz:
hidden on seteaz modul de reprezentare, astfel nct liniile acoperite ale
reelei de tip mesh s fie ascunse, acesta fiind modul implicit;
hidden off seteaz modul de reprezentare, astfel nct liniile acoperite ale
reelei de tip mesh s fie vizibile.

Funcia hidden seteaz proprietatea FaceColor a obiectului suprafa. Liniile
acoperite ascunse corespund la FaceColor=BackroundColor, care n mod normal
este negru (black), iar liniile acoperite vizibile corespund la FaceColor=none.

Controlul contrastului unei imagini se face utiliznd funcia contrast, care
se apeleaz cu sintaxa:
C=contrast(X,M),
unde X este matricea imaginii asupra creia se opereaz, iar M este numrul de
nivele de gri.
Aciunea efectiv se face cu secvena:
image(X); colormap(C),
i lucreaz cel mai bine atunci cnd culorile imaginii sunt ordonate dup
intensitate. n mod asemntor lucreaz i funcia imagesc doar c folosete toate
datele din colormap.

Pentru a controla luminozitatea (strlucirea) matricei de culoare se
folosete funcia brighten, care se apeleaz cu una dintre secvenele:
brighten(L) nlocuiete matricea de culoare curent cu una mai
luminoas, dac 0 < L < 1, sau mai ntunecat, dac -1 < L < 0, dar care are
aceleai culori de baz, iar brighten(L) urmat de brighten(-L) reface
culoarea iniial;
Controlul culorilor i vizualizrii reprezentarilor grafice 411
C=brighten(L) returneaz o versiune a matricei de culoare curente, mai
luminoas sau mai ntunecat, fr a opera asupra culorii reprezentrii
grafice;
Cn=brighten(C,L) returneaz o versiune a matricei de culoare C, mai
luminoas sau mai ntunecat, fr a opera asupra culorii reprezentrii
grafice.

Setarea culorilor fondului figurii se face cu funcia colordef, care poate fi
apelat cu una dintre sintaxele:
colordef white modific fondul de culoare al figurii (background) n alb;
colordef black sau colordef none (pentru Matlab 4) modific fondul de
culoare al figurii (background) n negru;
colordef (Fig,Option) modific fondul de culoare al figurii, Fig, conform
opiunii, Option, care poate fi white, black sau none, i se aplic dup ce
figura a fost tears cu clf;
h=colordef('new',Option) returneaz vectorul h al identificatorilor noii
figuri create avnd specificate opiunile, Option, figur care poate fi vizibil
('visible') sau nu ('off').

Setarea culorilor graficului pentru monitor alb-negru (gray-scale) se face
cu funcia graymon.

Pseudoculoarea unei matrice de culoare este dat de funcia pcolor, care se
apeleaz cu una dintre sintaxele:
pcolor(C) returneaz o reprezentare grafic cu o suprafa de celule
colorate n culorile precizate de matricea C, cu precizarea c modul implicit
este 'faceted' n care culoarea unei celule este constant, iar trecerea de la
matricea C la matricea de culoare este realizat de funciile colormap i
caxis;
pcolor(X,Y,C) n care X, Y i C sunt matrice de aceleai dimensiuni, sau X
este un vector de n elemente, Y un vector de m elemente i C o matrice de m
x n (X este asociat coloanelor, iar Y este asociat liniilor), returneaz o
reprezentare grafic cu o suprafa divizat n celule (ce pot avea m linii i n
coloane, nu obligatoriu echidistante), avnd celula (i,j), localizat de [X(i,j),
Y(i,j)], colorat de C(i,j), conform modului de setare al funciei shading;
h=pcolor(...) returneraz un caracter de control al caracteristicilor
obiectului suprafa (creat cu funcia surface), care este un copil al
obiectului axe (creat cu funcia axes).
Funcia pcolor(X,Y,C) este echivalent reprezentrii unei suprafee
surf(X,Y,0*Z,C) vzut de deasupra, adic din poziia view([0,90]).

Prezentarea pe ecran a imaginii este redat cu funcia image. Modul de
apelare este similar cu al funciei pcolor, dar matricea C poate avea dimensiunea
m x n sau m x n x 3 i conine date ntregi cu 8 bii (ntre 0 i 255), cu 16 bii (ntre
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 412
0 i 65535) sau n dubl precizie. Dac dimensiunea lui C este m x n x 3, atunci
elementele C(:,:,1) sunt interpretate ca intensiti de rou, elementele C(:,:,2) sunt
interpretate ca intensiti de verde, iar elementele C(:,:,3) sunt interpretate ca
intensiti de albastru.

Funcia pcolor(C) specific culorile colurilor, n timp ce image(C) specific
culorile celulelor, indexate direct din matricea de culoare nescalat. Prin urmare,
numrul de coluri pentru pcolor(C) este acelai cu numrul celulelor pentru
image(C). Cu funcia pcolor(X,Y,C) se poate obine o reprezentare cu reea de linii
(grid), lucru care nu este posibil cu funcia image.
Pentru exemplificarea modului de utilizare este util de observat efectul
urmtoarelor dou secvene:
pcolor(hadamard(20)); colormap(gray(2));
n=6;r=(0:n)'/n; t=pi*(-n:n)/n; X=r*cos(t);
Y=r*sin(t); C=r*cos(2*t); pcolor(X,Y,C); axis('square')
Pentru a converti o matrice de culoare codificat n culorile fundamentale
(RGB Rou Verde-Albastru) ntr-o matrice codificat nan-saturaie-
luminozitate (HSV) se folosete funcia rgb2hsv, care se apeleaz cu sintaxa:
H=rgb2hsv(M) convertete matricea de culoare M, de tip RGB n
matricea de culoare H, de tip HSV (hue-saturation-value).

Matricea M are un anumit numr de rnduri i 3 coloane, iar fiecare element
este n intervalul 0 i 1. Coloanele matricei de intrare M, reprezint intensitatea de
rou, verde i albastru. Coloanele matricei rezultate H, reprezint respectiv nuan,
saturaie, luminozitate. Elementele matricei M pot fi ntregi cu 8 bii (ntre 0 255),
cu 16 bii (ntre 0 i 65535) sau n dubl precizie, iar elementele matricei H sunt n
dubl precizie.
De exemplu, pentru conversia matricei de culoare,
M = [ 1.0000 1.0000 0
0 1.0000 1.0000
0.5000 0.5000 0.3000
0 0.5000 0.1000],
exprimat prin triplete RGB, ntr-o matrice de culoare exprimat prin triplete HSV,
se folosete secvena:
M=[1 1 0; 0 1 1;0.5 0.5 0.3; 0 0.5 0.1]
H=rgb2hsv(M),
obinndu-se:
H =
0.1667 1.0000 1.0000
0.5000 1.0000 1.0000
0.1667 0.4000 0.5000
0.3667 1.0000 0.5000.

Controlul culorilor i vizualizrii reprezentarilor grafice 413
Pentru conversia unei matrice de culoare HSV (nuan-saturaie-
luminozitate) ntr-o matrice de culoare RGB (rou-verde-albastru) se folosete
funcia hsv2rgb, care se apeleaz cu sintaxa:
M=hsv2rgb (H) convertete matricea de intrare H, ale crei coloane
reprezint respectiv nuan, saturaie, luminozitate, n matricea de ieire M,
ale crei coloane reprezint respectiv intensiti de rou, albastru i verde.
Dac prima coloan a lui H (nuana culorii), H(:,1), variaz de la 0 la 1, scala
culorilor rezultate este rou-galben-verde-bleumarin-albastru-mov-rou.
Dac a doua coloan a lui H (saturaia), H(:,2), este 0, culorile sunt saturate,
fiind nuane de gri, iar dac este 1, culorile sunt nesaturate, adic nu conin
componenta de culoare alb.
Dac a treia coloan a lui H (valoarea culorii), H(:,3), variaz de la 0 la 1,
atunci luminozitatea crete.

De menionat c funciile de conversie a matricelor de culoare rgb2hsv i
hsv2rgb sunt reciproce.

Conversia unei imagini indexate n imagine RGB se face cu funcia
ind2rgb, care se apeleaz cu sintaxa:
RGB=ind2rgb(X,MAP) convertete matricea X i matricea de culoare,
MAP n format RGB (truecolor).
Elementele matricei X pot fi ntregi cu 8 bii (ntre 0 i 255), cu 16 bii (ntre
0 i 65535) sau n dubl precizie, iar RGB este o matrice de n x m x 3 (sau m x n x
3), n dubl precizie.
Rotirea culorii reprezentrii grafice se face cu funcia spinmap, care se
apeleaz cu una dintre sintaxele:
spinmap realizeaz rotirea ciclic a culorilor matricei de culoare a
reprezentrii grafice la circa 3 secunde;
spinmap(t) realizeaz rotirea ciclic a culorilor matricei de culoare timp
de t secunde;
spinmap(t,pas) realizeaz rotirea ciclic a culorilor matricei de culoare
timp de t secunde, cu pasul pas, care are valoarea implicit pas=2, iar dac
pas=3, viteza de rotire este mai mare i dac pas=-2 atunci rotirea se face n
sens invers;
spinmap(inf) realizeaz rotirea ciclic a culorilor matricei de culoare un
timp infinit, pn la ieirea din bucl tastnd CTRL-C.

De menionat c funcia spinmap lucreaz numai pentru ecran cu 256 culori.

Reprezentarea grafic a ponderii culorilor fundamentale se face cu funcia
rgbplot, ce returneaz o reprezentare grafic a ponderii celor trei componente de
culoare, rou-verde-albastru, care constituie matricea de culoare C. Funcia rgbplot
se apeleaz cu sintaxa:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 414
rgbplot(C) n care C este o matrice m x 3 care este folosit de funcia
culoare colormap, iar fiecare dintre cele trei coloane ale matricei reprezint
o culoare fundamental (rou, verde, albastru).
Matricea C poate fi una dintre matricele care precizeaz culoarea.

19.2. Modele de culoare folosite n reprezentrile grafice
De menionat c exist urmtoarele modele de matrice de culoare:
hsv nuane de culoare saturate, ncepnd cu rou i trecnd prin galben,
verde, albastru deschis (bleumarin), albastru, mov i revenind la rou;
hot reprezentare n culorile negru-rou-galben-alb, pornind de la negru la
alb i trecnd prin rou i galben;
gray scala gri liniar, adic interpolare liniar ntre negru i alb;
bone nuane de culoare n scala gri, pornind de la negru-albastru la alb;
copper nuane de armiu pornind de la negru la alb;
pink culori pastelate cu nuane de roz, pornind de la negru la alb;
white toat matricea este numai alb;
flag matrice realizat prin alternarea culorilor rou, alb, albastru i negru,
cu perioada 4;
lines nuane de culoare alb, albastru, verde nchis, verde deschis, albatru,
bleomarin, mov i rou;
colorcube nuane de gri, rou, verde, albastru, negru i alb;
vga matrice cu 16 nuane de culoare incluznd alb, rou, galben, verde,
albastru-deschis, albastru, mov;
jet matrice de culoare n nuane saturate (variant hsv), ncepnd cu alb,
albastru nchis, trecnd prin albastru, albastru deschis, verde, galben, rou i
terminnd cu rou nchis;
prism matrice de culoare n nuanele curcubeului, cu ase culori: rou,
portocaliu, galben, verde, albastru, violet;
cool matrice cu nuane de la albastru-deschis la mov i alb;
autumn matrice cu nuane de la rou la galben i alb;
spring matrice cu nuane de la mov la galben i alb;
winter matrice cu nuane de la albastru deschis (bleu-marin) la verde i
alb;
summer matrice cu nuane de la verde la galben i alb.

Modul de apelare este:
colormap(Model(m)),
n care Model este unul dintre modelele de matrice de culoare de mai sus (hsv, ...,
summer), iar m este un scalar, astfel nct matricea de culoare va avea dimensiunea
m x 3 i ale crei coloane reprezint ponderile culorilor fundamentale RGB.
Controlul culorilor i vizualizrii reprezentarilor grafice 415
Pentru exemplificarea modului de lucru se poate reprezenta secvena:
n=16;N=[1:n+1;1:n+1];colormap(Model(n)); surface(N).

19.3. Controlul iluminrii reprezentrilor grafice
Matlab suport trei algoritmi pentru calculul iluminrii, selectai prin setarea
proprietilor FaceLighting (iluminare frontal) sau EdgeLighting (iluminarea
muchiilor) ale fiecrui obiect suprafa analizat.
Controlul luminozitii obiectelor surface i patch, create cu funciile surf,
mesh, pcolor, fill i fill3 se realizeaz cu funcia lighting, care se poate apela:
lighting flat seteaz iluminarea uniform (plan), care produce culori
uniforme de-a lungul fiecrei fee a obiectului i este preferat pentru
obiecte aflate n prim plan;
lighting gouraud iluminarea gouraud calculeaz culorile n punctele de
vrf i apoi interpoleaz culorile de-a lungul feelor, fiind recomandat
pentru a vedea suprafee curbe.
lighting phong - iluminarea phong interpoleaz vectorii normali pe orice
fa i apoi calculeaz reflexia n fiecare pixel, fiind recomandat pentru a
vedea suprafeele curbe, produce rezultate mai bune dect cea gouraud, dar
necesit timpi mai mari de calcul;
lighting none revine la iluminarea (luminozitatea) iniial.

Figura 19.1, prezint cum arat o sfer de culoare roie, utiliznd fiecare din
metodele de mai sus, cu o surs de lumin alb.

Fig.19.1. Vederea unei figuri cu lighting
Controlul nuanelor de culoare prin surse de lumin se realizeaz cu
funcia surfl, care reprezint grafic suprafee 3D cu nuane de culoare bazate pe
combinaii ale modelelor de iluminare difuz (difuse), strlucitor (specular) i
normal.
Funcia surfl() este asemntoare cu surf() cu excepia faptului c
suprafeele pot fi vizualizate ntr-o culoare unic sau n culori interpolate.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 416
Apelarea funciei surfl se face cu una dintre sintaxele:
surfl(X,Y,Z,S) - reprezint a suprafa descris de matricele X,Y i Z,
considernd culoarea proporional cu Z, iar argumentul opional S definete
remanena, precizat printr-o matrice cu trei vectori S=[Sx, Sy, Sz], care
specific direcia sursei de lumin;
surfl(X,Y,Z) este similar cu surf, fr precizarea direciei sursei de
lumin;
surfl(Z) sau surfl(Z,S) se consider implicit x=1:n i y=1:m, pentru
reprezentarea grafic 3D a matricei Z, folosind eventual i parametrul S;
surfl(X,Y,Z,'light') produce o colorare a suprafeei utiliznd obiectul light;
H=surfl() returneaz un vector coloan H al identificatorilor obiectelor.
Remanena S poate fi dat i n coordonate sferice, S=[az el], unde az este
azimutul (unghiul n plan orizontal), iar el este elevaia (unghiul pe vertical) i
ambele unghiuri sunt date n grade.
Reprezentarea grafic a normalei la suprafa se face cu funcia surfnorm,
care calculeaz i afieaz normala la suprafeele 3D.
Se apeleaz cu una dintre sintaxele:
[Nx,Ny,Nz]=surfnorm(X,Y,Z) returneaz matricea componentelor normale
(Nx,Ny i Nz) normalizate la o suprafa 3D descris de matricele X, Y i Z;
[Nx,Ny,Nz]=surfnorm(Z) returneaz matricea componentelor normale
normalizate la o suprafa 3D descris de matricea Z;
surfnorm(X,Y,Z) i surfnorm(Z) reprezint grafic suprafaa 3D descris
de matricele X, Y, Z, sau numai Z, precum i normalele la aceasta;
surfnorm(,'NumeProprietate','ValoareProprietate',) la fel ca mai sus
dar i seteaz 'NumeProprietate' la 'ValoareProprietate' dorit, putnd fi
mai multe seturi de astfel de date ntr-un singur segment.
Pentru inversarea direciilor normalelor se apeleaz funcia surfnorm cu
matricele X, Y i Z transpuse, surfnorm(X',Y',Z').
Algoritmul de calcul al normalelor reprezentate n 3D se bazeaz pe
aproximarea bicubic a datelor din matricele X, Y i Z.
Pentru exemplificare, n figura 19.2, sunt reprezentai vectorii normali la
suprafaa unui trunchi de con cu razele r=4 si R=8, obinut din secvena:
[X,Y,Z]=cylinder(4:8); surfnorm(X,Y,Z).
n controlul iluminrii o importan deosebit o are reflexia luminii. Prin
reflexie se nelege partea de lumin reflectat de suprafa ctre observator.
Valoarea acesteia variaz de la 0 (fr reflexie) pn la 1 (reflexie total).
Componentele vectorilor normali pot fi matrice pentru care normala este:
N(i,j)=[Nx(i,j), Ny(i,j), Nz(i,j)].
Aceste componente normale sunt calculate utiliznd funcia surfnorm. Pentru
calculul coeficienilor de reflexie ai suprafeelor trebuie precizat poziia sursei de
lumin S i poziia V a observatorului fa de obiectul a crui suprafa reflect.
Cele dou poziii pot fi date n coordonate carteziene,
Controlul culorilor i vizualizrii reprezentarilor grafice 417
S=[Sx, Sy, Sz] i V=[Vx, Vy, Vz]
sau n coordonate cilindrice,
S=[azs, evs] i V=[azv, elv]
unde azs, azv este azimutul (unghiul n plan orizontal), iar els, elv este elevaia
(unghiul pe vertical) i ambele unghiuri sunt date n grade.

Fig.19.2. Reprezentarea normalelor la suprafa cu funcia surfnorm

Pentru calculul coeficientului de reflexie al suprafeelor lucioase se
utilizeaz funcia specular, care folosete vectorii normali la suprafa. Se apeleaz
cu sintaxa:
R=specular(Nx,Ny,Nz,S,V),
iar pentru calculul coeficientului de reflexie al suprafeelor difuze se utilizeaz
funcia diffuse, bazat pe legea lul Lambert,
R=diffuse(Nx,Ny,Nz,S).
De regul, funcia specular se utilizeaz mpreun cu funcia surfl pentru a
realiza suprafee cu efecte speciale (umbre i reflexii). Algoritmul implementeaz o
aproximare care conduce la efecte de suprafee metalice. Cea mai mare strlucire
se produce dac vectorul normal are direcia (s+v)/2, unde s este direcia sursei i v
este direcia observatorului.
Stabilirea modului de reflexie al materialului se face cu funcia material,
care se apeleaz cu una dintre sintaxele:
material shiny face obiectele strlucitoare (sclipitoare);
material dull face obiectele ntunecate;
material metal face obiectele metalice;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 418
material ([ka kd ks]) seteaz intensitatea coeficientului de reflexie
ambiental (ka), a suprafeelor difuze (kd), suprafeelor luciose (ks);
material ([ka kd ks n]) n plus, se mai d i coeficientul de reflexie al
suprafeelor lucioase (n);
material ([ka kd ks n sc]) se seteaz i coeficientul de reflexie al culorii
(sc) obiectelor;
material default seteaz coeficienii pentru situaia lips.
De meionat c acest control al proprietilor suprafeelor reflectante se
utilizeaz la obiectele surface i patch, create cu funciile surf, mesh, pcolor, fill i
fill3.
19.4. Micarea i animaia imaginilor
Pentru micarea i animaia figurilor se utilizeaz urmtoarele:
capture capteaz imaginea curent de pe ecran;
moviein - iniializeaz memoria pentru salvarea cadrelor n micare;
getframe returneaz un cadru n micare;
movie lanseaz operaia de vizualizare a cadrelor unei imagini n micare;
rotate rotete un obiect la direcia dorit;
frame2im convertete o imagime n micare (un frame) n indexul
imaginii;
im2frame convertete un index al imaginii n format animat (un frame).
Pentru a realiza micarea i animaia imaginilor (cadrelor) reprezentate ntr-o
matrice M, pentru nceput se formeaz o nou matrice cu coloanele deplasate,
utiliznd n acest scop funcia getframe. n mod uzual funcia getframe se
apeleaz ntr-o bucl for pentru a asambla o imagine M (matrice) n micare care
este utilizat apoi de funcia movie.
Funcia getframe se poate apela cu una dintre sintaxele:
M=getframe returneaz un vector coloan cu un cadru micat, care
reprezint o fotografiere instantanee (pixel cu pixel);
M=getframe(h) returneaz un identificator care permite modificarea
proprietilor obiectului figur sau a obiectului axe;
M=getframe(h,poz) returneaz un cadru micat al obiectului cu
indicatorul h din zona ncadrat de dreptunghiul cu dimensiunile (L,H),
situat la distana (l,h) de colul din stnga-jos al ferestrei grafice (n unitile
de msur curente), iar parametrul poz trebuie s fie un vector linie cu patru
elemente, poz=[l h L H].
Pentru a evita utilizarea unei memorii considerabile, naintea realizrii acestei
operaii este preferabil prealocarea unei matrice de micare, capabil s memoreze
cele n cadre succesive. Pentru aceasta se genereaz anticipat o matrice de zerouri
cu funcia moviein, care se apeleaz cu sintaxa: M=moviein(n), care n realitate
Controlul culorilor i vizualizrii reprezentarilor grafice 419
este un fiier de tip m cu o singur linie.
Dup aceste prelucrri asupra matricei ce reprezint imaginea de animat, se
utilizeaz funcia movie pentru a mica cadrele ntr-o anumit ordine, cu o anumit
frecven i un anumit interval de timp precizat.
Funcia movie se poate apela cu una dintre sintaxele:
movie(M) ce realizeaz micarea cadrelor matricei M, o singura dat, iar
matricea M trebuie s fie o matrice ale carei coloane sunt cadrele micate
ale unei imagini, realizate cu funcia getframe;
movie(M,n) realizeaz micarea matricei M de n ori, cu precizarea c dac
n este negativ, micarea se face o singur dat nainte i o singur dat
napoi, iar dac n este vector, primul element specific de cte ori se face
micarea i elementele 2, 3, specific ordinea de prezentare a cadrelor n
micare din matricea M;
movie(M,n,f) n care n plus parametrul f precizeaz frecvena de micare,
n cadre(frame)/secund, avnd valoarea implicit 12;
movie(h,...) realizeaz o micare a obiectului h, care poate fi obiect figur
sau axe;
movie(h,M,n,f,loc) realizeaz micarea de n ori cu frecvena f
cadre/secund a obiectului cu identificatorul h, cu imaginea de baz n
matricea M, localizat n poziia loc=[x y neutilizat neutilizat], unde x i y
sunt coordonatele fa de colul stnga-jos ale ferestrei grafice, iar loc este
un vector cu patru elemente.
De menionat c animaia se poate realiza numai dac memoria RAM este
suficient (aceasta trebuie s fie de cel puin 2 Mo).
Pentru exemplificare se consider figura 19.2, care cu secvena,
for k=1:20; r1=4./k; r2=8./k; [X,Y,Z]=cylinder(r1:r2); surfnorm(X,Y,Z);
M(:,k)=getframe; end; movie(M,20,5)
permite reprezentarea animat cu 5 frame/secund de 20 de ori.
Un alt exemplu este vibraia unei membrane n form de L, care este realizat
cu funcia vibes, care soluioneaz pentru aceasta ecuaia undelor.
Soluiile sunt expresii de combinaii liniare, cu coeficieni, depinznd de timp
ai funciilor spaiale bidimensionale.
Funciile proprii sunt calculate cu funcia membrane. Geometria n form de
L prezint un interes deosebit, deoarece eforturile devin infinite n apropierea
colului i sunt utilizate funcii Bessel de ordin fracional pentru a rezolva aceste
singulariti.
19.5. Controlul camerei de vizualizare
Pentru controlul camerei de observare a unei figuri se utilizeaz funciile:
campos gsete sau poziioneaz camera de vizualizare fa de axe;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 420
camtarget gsete sau poziioneaz inta camerei de vizualizare fa de
axe;
camva gsete sau poziioneaz unghiul de vizualizare al camerei fa de
axe;
camup gsete sau poziioneaz vectorul superior al camerei de
vizualizare fa de axe;
camproj gsete sau poziioneaz proiecia camerei care poate fi
'perspective' sau 'orthographic' (cazul implicit).
De menionat c funciile campos, camtarget, camva, camup se apeleaz cu
sintaxa:
poz=cam... pentru gsirea valorilor poziionrii;
cam... ([X Y Z]) seteaz valorile X, Y, Z ale poziionrii;
mod=cam... ('mode') pentru gsirea modului de lucru;
cam... ('mode') setarea modului de lucru care poate fi 'auto' sau 'manual'.
Un control de nivel mai nalt al camerei de vizualizare se realizeaz cu
funciile:
camorbit stabilete orbita de micare a camerei de vizualizare, care are ca
parametrii unghiul de rotaie n plan orizontal i unghiul de rotaie n plan
vertical (n grade) i uneori chiar i punctul sau axa n jurul creia se face
rotaia;
campan stabilete adncimea de rotaie a camerei de vizualizare, care are
ca parametri unghiul de rotaie n plan orizontal i unghiul de rotaie n plan
vertical i uneori chiar i punctul sau axa n jurul creia se face rotaia;
camdolly are efectul combinat al celor dou funcii anterioare;
camzoom realizeaz un zoom specificat prin parametrul dorit care poate fi
subunitar, pentru micorare, sau supraunitar, la mrire;
camroll rotete camera, cu un numr de grade specificat, n sens
trigonometric;
camlookat deplaseaz camera i inta pentru a vizualiza un anume obiect
dorit specificat ca parametru;
cameratoolbar manipularea interactiv a camerei de la fereastra tools a
figurii;
camlight poziioneaz lumina fa de axe i n raport cu camera de
vizualizare (stnga, dreapta sau prin azimut i elevaie);
lightangle - poziioneaz lumina n raport cu camera de vizualizare prin
poziionarea n coordonate sferice a sursei de lumin, dndu-se azimutul i
elevaia;
camrotate funcie utilitar pentru rotirea camerei, dar se poate folosi i
cea din toolsbar;
objbounds limitele obiectului 3D;
whitebg modific fondul de culoare al axelor.
20. CREAREA INTERFEELOR GRAFICE
INTERACTIVE
Crearea interfeelor grafice interactive (Graphics User Interface) utilizeaz
diverse funcii Matlab specifice pentru:
crearea elementelor de control pentru interfeele grafice interactive;
crearea meniurilor pentru interfeele grafice;
citirea interactiv a datelor de pe grafice;
selectarea interactiv a fiierelor citite;
stabilirea interactiv a fiierelor salvate;
selectarea interactiv a fonturilor;
selectarea interactiv a culorilor.
20.1. Crearea elementelor de control pentru interfeele
grafice interactive
Pentru controlul interactiv al reprezentrilor grafice, n Matlab se folosete
programarea cu obiecte. n acest scop, sunt definite mai multe elemente de control
interactiv:
butoane prin apsare (push button i toggles button);
casete butoane radio (radio button);
casete de control (checkbox);
casete de editare (edit text i static text);
poteniometre liniare (sliders);
buton simplu (frame);
list de opiuni (listbox i popup menu);
trasarea axelor (axes).

Butoanele prin apsare sunt comutatoare care genereaz o aciune, dac sunt
apsate, ns nu rmn n starea apsat. Pentru activarea unui buton prin apsare, se
apas i se elibereaz butonul mouse-ului. Aceste butoane se utilizeaz dac
aciunea pe care o realizeaz nu este dependent de nici o alt aciune executabil
prin interfa.
Butoanele radio sunt mutual exclusive (numai unul poate fi apsat n acelai
timp). Pentru activarea butonului radio, se apas i se elibereaz butonul mouse-
ului. Starea butonului este indicat prin afiare. Prin algoritm, trebuie ca
implementarea acestor butoane s fie mutual exclusiv.
Potenialele liniare accept valori numerice la intrare i permit utilizatorului
s deplaseze cursorul (prin apsarea butonului mouse-ului, fr eliberarea acestuia)
n interiorul unor limite. Poziia cursorului indic valoarea numeric selectat la
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 422
eliberarea butonului mouse-ului. Se pot stabili valorile minim, maxim i iniial.
Lista de opiuni a meniului este desfurat n momentul selectrii. Dac nu
este activat, se afieaz un singur buton, cu un text care reprezint configuraia
curent. Aceast posibilitate de control grafic se folosete atunci cnd se dorete
selectarea unei opiuni dintr-o list mutual exclusiv, fr modificarea valorilor, ca
n cazul butoanelor radio.
Casetele de editare permit introducerea unui text de la tastatur. Dup ce acesta a
fost scris n caset, se apas tasta Enter sau se selecteaz butonul care lansez
execuia. Se utilizeaz n cazul n care programul trebuie s preia interactiv un text.
Casetele de control sunt generate prin aciunea de apsare, ns rmn n
aceast stare pn la o nou selectare. Aceste obiecte sunt utilizate pentru a permite
folosirea unui numr de opiuni independente, basculnd ntre dou stri. Pentru
activarea casetei de control se apas i se elibereaz butonul mouse-ului, iar starea
sa este indicat prin afiare.
Pentru crearea elementelor de control, utilizate de interfeele grafice
interactive, se folosete funcia guide, care d posibilitatea stabilirii interactive cu
mouse-ul a butoanelor sau funcia uicontrol, care se apeleaz cu sintaxa:
h=uicontrol('Numeproprietate1',valoare1, 'Numeproprietate2',valoare2,...).
Interfeele grafice sunt copii ai obiectului figur i sunt independente de
obiectul axe. Funcia uicontrol accept perechile proprietate/valoare ca argumente
de intrare.
Proprietile elementelor de control, pentru interfeele grafice interactive, pot
fi specificate la creare, prin includerea perechilor nume/valoare proprietate sau
ulterior, prin identificarea obiectului i folosirea funciei set.
Proprietile acceptate, precum i valorile posibile ale fiecrei proprieti,
sunt descrise mai jos i pot fi afiate cu funcia get.
Pentru citirea proprietilor se poate tasta guide, care deschide o figur
implicit, unitled.fig, din care, prin apsarea butonului Tools se ajunge la
Property Inspector, care permite citirea tuturor proprietilor.

1. BackgroundColor - culoare
Aceast proprietate specific culoarea folosit pentru a colora fondul
dreptunghiului, definit prin interfaa de control. Culoarea poate fi specificat printr-
un triplet RGB sau prin numele de culori predefinite n Matlab. De la mouse se
poate alege tripletul RGB dorit, n procente.
2. BusyAction -queue sau cancel
Prin aceasta se specific modul de aciune, care poate fi pe rnd (queue)
sau fr (cancel).
3. ButtonDownFcn - funcie
Aceast proprietate permite chemarea unei funcii Matlab, prin apsarea
butonului.
4. CData - date
Permite introducerea unor date sub form de expresie.
Crearea interfeelor grafice interactive 423 423
5. CallBack - ir caractere
Aceast proprietate permite evaluarea oricrei expresii Matlab, inclusiv
nume de fiiere de tip m sau funcii, coninut n irul de caractere la
activarea obiectului interfa.
6. Children - vector
Obiectul interfa nu are copii, astfel nct aceast proprietate este
ntotdeauna o matrice goal.
7. Clipping - on sau off
Aceast proprietate arat dac butonul va clipi, pentru on, sau nu, pentru off.
8. CreateFcn - nume
Aceast proprietate permite crearea unei funcii Matlab, care s fie apelat
prin buton.
9. DeleteFcn - nume
Permite tergerea unei funcii Matlab, apelabil prin buton.
10. Enable - on sau off sau inactive
Aceast proprietate stabilete dac butonul este utilizat, on, neutilizat, off
sau inactiv, inactive.
11. FontAngle - normal sau italic sau oblique
Permite stabilirea tipului de nclinare a literelor, care poate fi normal,
normal, italic, italic, sau oblic, oblique.
12. FontName - nume
Specific numele, nume, fontului de scriere utilizat, care implicit este MS
Sans Serif.
13. FontSize - dim
Precizeaz dimensiunea, dim, a fontului utilizat.
14. FontUnits - inches sau centimeters sau normalized sau points sau pixeli
Aceast proprietate specific unitile de msur utilizate pentru font.
Unitatea points este egal cu 1/72 inch, adic 0.0353 centimetri, iar
celelalte uniti de msur sunt uniti absolute.
15. FontWeight - light sau normal sau demi sau bold
Specific grosimea literei la scriere, care poate fi: subire (light), normal
(normal), semigroas (demi) sau groas (bold).
16. ForegroundColor - culoare
Aceast proprietate precizeaz culoarea textului afiat n obiectul interfa.
Culoarea poate fi specificat printr-un triplet RGB sau prin numele de
culori predefinite n Matlab.De la mouse se poate alege tripletul RGB in
procente.

17. HandleVisibility - on sau callback sau off
Aceast proprietate precizeaz dac obiectul este vizibil (on), invizibil (off)
sau n spate (callback).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 424
18. HorizontalAlignment - left sau center sau right
Aceast proprietate precizeaz modul de aliniere al textului definit de
proprietatea String, n obiectul interfa definit.
19. Max - scalar
Aceast proprietate specific cea mai mare valoare alocat proprietii
Value. Pentru butoane radio i casete de control, care opereaz cu
comutatoare on/off, aceasta reprezint setarea lui Value, cnd interfaa
este n poziia on. Pentru listele de opiuni, aceast proprietate specific
numrul maxim de opiuni, care pot fi definite de meniu. Pentru
poteniometre liniare, aceast proprietate este cea mai mare valoare care
poate fi selectat. Valoarea implicit este 1.
20. Min - scalar
Aceast proprietate specific cea mai mic valoare alocat proprietii
Value. Pentru butoane radio i casete de control, care opereaz cu
comutatoare on/off, aceasta reprezint setarea lui Value, cnd interfaa
este n poziia off. Pentru listele de opiuni, aceast proprietate specific
numrul minim de opiuni, care pot fi definite de meniu. Pentru
poteniometre liniare, aceast proprietate este cea mai mic valoare care
poate fi selectat. Valoarea implicit este 0.
21. Parent - identificator
Aceast proprietate returneaz identificatorul obiectului figur (printe), n
care este afiat obiectul interfa. Funcia gca returneaz, de asemenea,
identificatorul axelor curente ale figurii. Aceast proprietate se poate seta
prin specificarea identificatorului obiectului printe, ca prim argument al
funciei uicontrol (fr a fi necesar cuvntul Parent, ca de exemplu:
uicontrol(1,'Style','Slider',), care determin identificatorul figurii
curente.
22. Position - vector [ 4 elemente ]
Prin aceast proprietate se specific mrimea i localizarea obiectului
interfa n fereastra grafic, definit printr-un vector de 4 mrimi,
poz=[orizontal vertical lungimea limea], unde: orizontal i vertical sunt
distanele, pe orizontal i vertical, de la colul din stnga-jos al ferestrei
grafice pn la colul stnga-jos al dreptunghiului care definete obiectul
interfa, iar lungimea i limea sunt dimensiunile dreptunghiului care
definete obiectul interfa. Elementele vectorului poz sunt date n unitile
de msur specificate de proprietatea Units. Matlab-ul utilizeaz implicit
unitile normalizate, la care (0,0) este colul din stnga-jos, iar (1,1) este
colul din dreapta-sus al ferestrei grafice.
23. String - ir de caractere
Aceast proprietate definete eticheta butoanelor prin apsare, a butoanelor
radio, a casetelor de control i a listelor de opiuni. Pentru introducerea mai
multor opiuni ntr-o list de meniuri sau pentru a avea linii multiple ntr-o
caset de control, se introduc irurile separate de caracterul | (bar
Crearea interfeelor grafice interactive 425 425
vertical). ntreaga list trebuie plasat ntre ghilimele . Pentru casetele de
editare, aceast proprietate este setat la irul introdus de utilizator.
24. Style - pushbutton sau togglebutton sau radiobutton sau checkbox sau
edit sau text sau slider sau frame sau listbox sau popupmenu
Aceast proprietate definete tipul de obiect de control care se creeaz,
respectiv buton de apsare, buton radio, caset de control, poteniometru
liniar, caset de editare sau list de opiuni.
25. Type - ir de caractere
Aceast proprietate identific tipul de obiect grafic. Pentru obiectul
interfa irul de caractere este ntotdeauna uicontrol.
26. Units - pixeli sau normalized sau inches sau centimeters sau points
Aceast proprietate specific unitile de msur utilizate pentru
interpretarea proprietii Position. n toate cazurile, msurarea se face din
colul stnga jos al ferestrei grafice. Unitile normalizate transform colul
stnga jos al ferestrei grafice n coordonatele (0, 0), iar colul din dreapta
sus n (1.0, 1.0). Unitatea points este egal cu 1/72 inch, adic 0.0353
centimetri, iar celelalte uniti de msur sunt uniti absolute.
27. UserData - matrice
Proprietatea este orice matrice asociat obiectului, care poate s nu fie
folosit, dar poate fi vizualizat folosind funcia get.
28. Value - scalar
Valorile posibile ale acestei proprieti depind de metoda de control, ele
putnd fi stabilite interactiv cu mouse-ul sau prin intermediul funciei set.
Afiarea pe ecran reflect schimbrile fcute prin stabilirea direct a
proprietii Value.
29. Visible - on sau off
Proprietatea determin dac obiectul de control al interfeei este vizibil pe
ecran, cazul on sau nu este vizibil, cazul off. Valoarea implicit este on.

Pentru exemplificarea modului de creare a interfeelor grafice interactive se
consider urmtoarele exemple:
crearea unui buton prin apsare, care creaz axe normalizate curente, se
realizeaz prin secvena,
h = uicontrol('Style','Pushbutton','Units','normalized','Position', ...
[0.2 0.8 0.3 0.1],'Callback','cla','string','Creeaz Axe');
crearea unei interfee interactive, care schimb culoarea unei reprezentri
grafice, prin selectarea unei matrice de culoare dintr-o list de meniuri
(popup menu); se realizeaz cu secvena:
hp=uicontrol('Style','Popup','String','hsv|hot|cool|gray|','Units', ...
'normalized','Position',[0.2 0.8 0.3 0.2],'Callback','setmap');
care necesit existena unui fiier setmap.m, coninnd urmtoarele instruciuni:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 426
val=get(hp,'Value');if val==1; colormap(hsv); elseif val==2; colormap(hot);
elseif val==3; colormap(cool); elseif val==4; colormap(gray); end,
i pentru a evidenia efectul se poate apela secvena,
[X,Y,Z]=sphere(20); surf(X,Y,Z);grid
care traseaz o sfer;
crearea a ase tipuri de obiecte de control al interfeelor grafice, prezentate
n figura 20.1,

Fig.20.1. Obiecte de control ale interfeei grafice
se realizeaz cu secvena,
hpb=uicontrol('Style','Pushbutton','Units','normalized','Position', ...
[0.2 0.8 0.2 0.1],'Callback','cla','String','Buton prin apasare');
hrs=uicontrol('Style','Radiobutton','Units','normalized','Position', ...
[0.6 0.8 0.15 0.1],'Callback','cla','String','Buton radio');
hsl=uicontrol('Style','Slider','String','Poteniometru liniar', ...
'Units','normalized','Position',[0.2 0.5 0.3 0.1],'Min',0,'Max',1);
hpm=uicontrol('Style','Popup','String','hsv|hot|cool|gray', ...
'Units','normalized','Position',[0.2 0.2 0.25 0.1])
hcb=uicontrol('Style','Checkbox','String','Caseta de control', ...
'Units','normalized','Position',[0.6 0.5 0.2 0.1],'Callback','figure');
hed=uicontrol('Style','Edit','String','Caseta de editare', ...
'Units','normalized','Position',[0.6 0.15 0.2 0.05])
Crearea interfeelor grafice interactive 427 427
20.2. Crearea meniurilor pentru interfeele grafice
Pentru crearea unor meniuri cu aciuni predefinite, care se afieaz n bara
superioar de meniuri, se utilizeaz funcia uimenu, care se apeleaz cu una dintre
sintaxele:
h= uimenu('Nume proprietate','Valoare proprietate', ...);
hsub= uimenu(h,'Nume proprietate','Valoare proprietate', ...).

Funcia uimenu, dup cum se observ, accept perechile proprietate / valoare
ca argumente de intrare. Fiecare opiune a meniului poate fi la rndul ei un meniu,
care afieaz un submeniu, atunci cnd este selectat.
Submeniurile sunt create prin apelarea funciei uimenu, avnd ca prim
argument identificatorul meniului principal. Dac nu se specific nici un
identificator al unui meniu existent, este creat un meniu principal, care se plaseaz
n bara superioar de meniuri (la nivelul cel mai nalt).

Proprietile obiectului meniu, descrise n continuare, pot fi stabilite cu
funcia set i afiate cu funcia get.

Aceste proprieti pot fi specificate la creare, prin includerea perechilor
nume/valoare proprietate sau ulterior, prin identificarea obiectului i folosirea
funciei set.

Lista proprietilor acceptate, precum i valorile posibile ale fiecrei
proprieti sunt prezentate mai jos.

1. Accelerator - Caracter
Aceast proprietate specific combinaia de caractere echivalent aciunii
de apelare a unei opiuni din meniu. Acceleratorul permite utilizatorului s
selecteze o opiune din meniu, prin tastarea combinaiei de taste
Ctrl+Caracter.
2. CallBack - ir de caractere
Aceast proprietate permite evaluarea oricrei expresii Matlab, inclusiv
nume de fiiere, de tip m sau funcii, coninut n irul de caractere, la
activarea opiunii din obiectul meniu.
3. Children - vector
Copiii obiectului meniu sunt alte meniuri (numite submeniuri), iar
identificatorul conine cte un vector pentru fiecare submeniu.
4. Enable - on sau off sau inactive
Aceast proprietate controleaz o opiune care se poate sau nu selecta.
Dac o opiune nu se poate selecta, atunci eticheta acesteia este scris cu
litere de culoare deschis (estompat).
5. Label - etichet
Aceast proprietate specific textul etichetelor, etichet, opiunilor
meniului.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 428
6. Parent - identificator
Aceast proprietate returneaz identificatorul obiectului printe, care poate
fi un obiect figur sau obiect meniu, iar pentru crearea submeniurilor este
absolut necesar setarea acestei proprieti.
7. Position - scalar
Prin aceast proprietate se specific localizarea obiectului meniu pe bara
superioar, de la stnga la dreapta, funcie de valoarea scalarului.
8. Separator - on sau off
Aceast proprietate permite separarea cu lini a fiecrei opiuni a unui
meniu, dac este on sau fr separare, pentru off.
9. Type - ir de caractere
Aceast proprietate identific tipul de obiect grafic. Pentru obiectul
interfa, irul de caractere este ntotdeauna uicontrol.
10. UserData matrice
Proprietatea este orice matrice asociat obiectului, care poate s nu fie
folosit, dar poate fi vizualizat folosind funcia get.
11. Visible - on sau off
Proprietatea determin dac obiectul de control al interfeei este vizibil pe
ecran, cazul on, sau nu este vizibil, cazul off. Valoarea implicit este on.

Pentru exemplificare, pornind de la meniul existent al unei figuri, se adaug
un meniu principal cu eticheta Aplicaii, care conine trei opiuni: Nou, Salvare i
nchidere figur. Opiunea Nou are dou subdomenii: Figur nou i Fiier M nou.
Secvena Matlab pentru aceasta este:
f=uimenu('Label','Aplicaii');
n=uimenu(f,'Label','Nou');
uimenu(f,'Label','Salvare','CallBack','save');
uimenu(f,'Label','nchide figur','CallBack','close');
uimenu(n,'Label','Figura nou','CallBack','figure');
uimenu(n,'Label','Fiier M nou','CallBack','edit').
20.3. Citirea interactiv a datelor de pe grafice
Pentru citirea interactiv (cu mouse-ul) a datelor de pe graficele reprezentate
pe ecran, se folosete funcia ginput, care se apeleaz cu una dintre sintaxele:
[x,y]=ginput(N) returneaz N puncte de pe figura curent, ale cror
coordonate sunt vectorii x i y, poziionnd de fiecare dat, pentru un punct
N, cursorul mouse-ului n punctul dorit i apasnd butonul acestuia pentru
confirmare, iar la terminarea introducerii celor N puncte, sunt returnai
vectorii x i y corespunztori acestor puncte;
[x,y]=ginput permite introducerea unui numr neprecizat de puncte,
operaia ncheindu-se prin apsarea tastei Enter;
Crearea interfeelor grafice interactive 429 429
[x,y,B]=ginput(N) sau [x,y,B]=ginput returneaz coordonatele datelor
selectate (care pot fi N puncte), n vectorii x i y, precum i variabila B,
care reprezint butonul cu care a fost selectat data (1 pentru butonul din
stnga, 3 pentru butonul din dreapta mouse-ului i altceva pentru tastatur).

Variabilele x i y, n care au fost returnate aceste valori, se salveaz cu funcia
save, ca orice variabil a mediului de lucru Matlab.
20.4. Selectarea interactiv a fiierelor citite
Pentru selectarea interactiv a numelui i locului de unde se citesc date sau
programe Matlab, se utilizeaz funcia uigetfile, care afieaz o caset de dialog.

Funcia uigetfile se apeleaz cu sintaxa,
[nume, cale] = uigetfile('filtrul','titlul casetei',X,Y)
n care:
filtrul parametrul ce determin care fiiere sunt iniial afiate n fereastra
de dialog; spre exemplu, dac acesta este '*.m', sunt listate toate fiierele
Matlab avnd extensia m;
titlul casetei ir de caractere, care se afieaz ca titlu al casetei de dialog;
X, Y parametrii ce definesc poziia iniial a casetei de dialog, n pixeli
(nu toate sistemele accept aceast opiune);
nume ir de caractere n care este returnat numele fiierului selectat din
caseta de dialog, iar dac este ntlnit o eroare sau este selectat butonul
Cancel, atunci nu mai exist nici un nume;
cale ir de caractere n care este returnat calea fiierului selectat din
caseta de dialog, iar dac este ntlnit o eroare sau este selectat butonul
Cancel, atunci calea este stears din memorie.

Dac fiierul menionat nu exist, se afieaz un mesaj de eroare i controlul
este returnat casetei de dialog. Utilizatorul poate introduce alt nume de fiier sau
poate selecta butonul Cancel. Toi parametrii funciei sunt opionali, ns dac unul
este utilizat, atunci trebuie utilizai toi ceilali.
De exemplu,
[num,cale]=uigetfile('*.m','SELECTEAZA'),
produce o caset de dialog asemantoare cu Open din Word, avnd numele
SELECTEAZ, ce permite modificarea directorului de cutare prin intermediul lui
Look in.
Dac se selecteaz fiierul matlab.mat, atunci se obine:
nume =
matlab.mat
cale =
C:\matlabR12\work\.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 430
20.5. Stabilirea interactiv a fiierelor salvate
Pentru stabilirea interactiv a numelui i locului unde se vor salva date sau
programe Matlab, se utilizeaz funcia uiputfile, care afieaz ,de asemenea, o
caset de dialog i se poate apela cu sintaxa,
[nume, cale] = uiputfile('fiier iniial','titlul casetei',X,Y)
n care:
fiier iniial parametru ce precizeaz numele fiierului implicit, n care se
salveaz datele, iar dac acesta este ,de exemplu, test.m, sunt listate toate
fiierele Matlab, avnd extensia m;
titlul casetei ir de caractere care se afieaz ca titlu al casetei de dialog;
X, Y parametrii ce definesc poziia iniial a casetei de dialog, n pixeli
(nu toate sistemele accept aceast opiune);
nume ir de caractere n care este returnat numele fiierului selectat din
caseta de dialog, iar dac este ntlnit o eroare sau este selectat butonul
Cancel, nu se returneaz nimic;
cale ir de caractere n care este returnat calea fiierului selectat din
caseta de dialog, iar dac este ntlnit o eroare sau este selectat butonul
Cancel, nu se ntoarce nimic.
Dac fiierul exist, suprascrierea acestuia cu date noi se face numai dac
utilizatorul accept, prin selectarea butonului YES, concatenat cu o comand de
salvare. Toi parametrii funciei sunt opionali, ns dac unul este utilizat, atunci
trebuie utilizai toi ceilali.
De exemplu,
[num,cale]=uiputfile('*.m','Save'),
produce o caset de dialog asemntoare cu Open din Word, avnd numele
Save, ce permite modificarea directorului de cutare prin intermediul lui Save
in. Dac se selecteaz fiierul matlab.mat, atunci se obine:
nume =
matlab.mat
cale =
C:\matlabR12\work\.
20.6. Selectarea interactiv a fonturilor i a culorilor
Pentru selectarea interactiv a fonturilor utilizate de o aplicaie Matlab, se
utilizeaz funcia uisetfont, care afieaz o caset de dialog cu nume specificat i
numele tuturor fonturilor utilizate de Windows i se apeleaz cu sintaxa:
H=uisetfont(HIN, 'titlul casetei').
Aceast funcie se utilizeaz la selectarea fonturilor, ca intrri pentru
obiectele grafice.
Parametrii sunt opionali i pot fi specificai n orice ordine. Dac este utilizat
HIN, atunci trebuie s se specifice identificatorul obiectului grafic text sau axe.
Crearea interfeelor grafice interactive 431 431
Proprietile curente ale fonturilor, atribuite acestui obiect, sunt utilizate pentru a
iniializa caseta de dialog a fonturilor.
Dac parametrul titlul casetei este utilizat, acesta este afiat ca nume al
casetei de dialog, iar argumentul de ieire ,H, este identificatorul obiectului grafic.
Dac HIN este specificat, H este identic cu HIN, iar dac nu este specificat, se
creeaz un nou text, prin selectarea proprietilor fonturilor i se returneaz
identificatorul acestuia.
Dac este ntlnit o eroare sau este selectat butonul Cancel, identificatorul H
este setat la 0.
De exemplu,
h =uisetfont(gca,'Fonturi')
deschide o caset de dialog, ntr-o figur, denumit Fonturi, n care sunt
casete pentru selectarea numelui fontului (Font), a stilului (Font Style), dimensiunii
acestuia (Size), precum i caset de selectare (OK) sau anulare (Cancel). De
exemplu, n fiierul de lucru poate s apar:
h =
FontName: 'Times New Roman'
FontUnits: 'points'
FontSize: 12
FontWeight: 'normal'
FontAngle: 'italic'.
Pentru selectarea interactiv a culorilor utilizate de o aplicaie Matlab, se
utilizeaz funcia uisetcolor, care afieaz o caset de dialog cu numele specificat
i cu toate culorile gestionate de Windows i se apeleaz cu sintaxa:
C=uisetcolor(ARG, 'titlul casetei').
Aceast funcie se utilizeaz la selectarea culorilor, ca intrri pentru obiectele
grafice. Parametrii sunt opionali i pot fi specificai n orice ordine.
Parametrul ARG este fie un identificator al unui obiect grafic, fie un triplet
RGB (de exemplu [1 0 0] pentru rou). n ambele cazuri, culoarea specificat este
utilizat la iniializarea casetei de dialog. Dac nu este utilizat iniializarea, atunci
culoarea folosit este negru.
Dac parametrul titlul casetei este utilizat, acesta este afiat ca nume al
casetei de dialog, iar argumentul de ieire ,C, este tripletul RGB selectat. Dac
parametrul de intrare ARG este identificator, culoarea obiectului grafic este stabilit
la culoarea RGB selectat.
Dac este ntlnit o eroare sau este selectat butonul Cancel, identificatorul H
este setat la 0.
Pentru comanda,
Ca=uisetcolor(gca,'Fondul figurii'),
pe ecran apare caseta de dialog cu titlul Fondul figurii, care permite utilizatorului
alegerea interactiv a culorii, pentru fondul figurii.
De menionat c alegerea culorilor se face deschiznd fereastra unei noi
figuri i c se poate selecta i fondul axelor.
21. ELEMENTE DE BAZ N UTILIZAREA SIMULINK
PENTRU SIMULARE
n ultimii ani, Simulink a devenit softul cel mai larg utilizat n mediile
academice i n industrie, pentru modelarea i simularea sistemelor dinamice.
Larga utilizare este dat de uurina programrii prin intermediul GUI (graphical
user interface) i de diversitatea modelelor ce pot fi analizate, ncepnd cu cele
ideale, linearizate, pn la cele mai realiste modele nelineare, continue sau discrete
n timp, sau cele care i modific n timp configuraia.
n plus, are posibilitatea utilizrii foarte facile a funciilor Matlab elaborate,
pentru descrierea unor fenomene foarte complicate.
De obicei, Matlab-ul se utilizeaz pentru analiza modelelor staionare, iar
Simulink pentru modele dinamice. Cum orice model realizat este testat prima dat
n regim staionar i abia apoi n regim dinamic, o serie de funcii pentru calculul
unor proprieti sunt elaborate nc din faza analizei staionare i este util de a
putea fi integrate n modelele dinamice.
Baza modelrii matematice a Simulink o constituie calculul operaional i, n
principal, transformata Laplace.
21.1. Calculul operaional. Transformarea Laplace
Calculul operaional se bazeaz pe realizarea unei corespondene ntre dou
mulimi de funcii: mulimea funciilor numite original i imaginile lor, obinute
printr-o anume transformare. Interesul pentru aceast coresponden se datoreaz
faptului c operatorilor de derivare i integrare, aplicai funciilor original, le
corespund anumite operaii algebrice, care se aplic imaginilor lor.
Se numete original, o funcie ) (t f , real sau complex, definit pe
mulimea numerelor reale i care satisface urmtoarele condiii :
1) 0 ) ( = t f pentru 0 < t ;
2) ) (t f este derivabil pe poriuni;
3) exist dou numere, 0 , 0
0 0
> M astfel nct
t
e M t f


0
) ( .
Prima condiie apare firesc, deoarece metodele operaionale sunt folosite la
rezolvarea unor probleme inginereti concrete, n care mrimea fizic reprezentat
prin ) (t f , are proprietatea c, sau este nul, nainte de momentul iniial 0 = t , sau
valorile sale pentru 0 < t nu prezint interes.
A doua condiie, de derivabilitate pe poriuni, este impus de necesitatea ca,
pe un interval oarecare, ( )
i i
x x ,
1
, din domeniul de definiie, s existe limitele
laterale,
( ) ( ) ( ) ( ) n i x f x f x f x f
i i i i
, , 2 , 1 , 0 , 0 , 0 , 0
1 1
L = + +

.
Elemente de baz n utilizarea Simulink pentru simulare 433
A treia condiie arat c valorile modulului funciei pot fi majorate prin valorile
unei exponeniale. Numrul
0
, se numete indice de cretere al funciei ) (t f .
Cea mai simpl funcie original este funcia unitate, cu indicele de cretere 0
0
= ,

>
=
<
=
0 pentru 1
0 pentru
2
1
0 pentru 0
) (
t
t
t
t .
Funcia unitate este important datorit faptului c, dat fiind o funcie ) (t ,
definit pe toat axa real i ndeplinind ultimele dou condiii, funcia

>
=
<
= =
0 pentru ) (
0 pentru (0)
2
1
0 pentru 0
) ( ) ( ) (
t t
t
t
t t t f
este o funcie original. De menionat c suma i produsul a dou funcii original
sunt funcii original.
Se numete transformat Laplace a funciei ) (t f sau imaginea dup Laplace
a funciei ) (t f integrala notat
( )


= =
0
d ) ( ) ( t e t f s F t f
t s
L
n care, + = j s este un numr complex, n care este partea real, iar este
partea imaginar. Integrarea se face n funcie de variabila t i, ca urmare,
transformata Laplace a funciei ) (t f este funcia ) (t f , de variabil complex, s.
Inversa transformatei Laplace este dat de formula lui Mellin-Fourier,
( )
0
, d
2
1
) ( >

=

a s e s F
j
t f
j a
j a
t s
.
Aceast integral poate fi calculat de multe ori, dar nu ntotdeauna, cu
ajutorul teoremei reziduurilor. Se admite c F(s) are numai poli simpli.
21.1.1. Cteva proprieti ale transformrii Laplace
Pentru a putea aplica metoda transformrii Laplace, numit i metoda
operaional, la cele mai simple problemele i pentru a pune n eviden necesitatea
inversrii acestei transformri, se vor prezenta cteva proprieti elementare ale
acestei transformri.
Dac funcia ) (t f este identic nul, transformata ei Laplace este, de
asemenea, nul, adic 0 ) ( = s F .
O funcie ) (t f , constant i egal cu unitatea, ncepnd de la momentul zero,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 434
adic 1 ) ( = t f , are transformata Laplace 0 Re ,
1
d 1 ) (
0
> = =

s
s
t e s F
st
.
Transformata Laplace a funciei
t
e t f

= ) ( este >

== Re Re ,
1
) ( s
s
s F .
Admind c se cunoate transformata Laplace a funciei ) (t f , ) ( ) ( s F t f = L
i se caut transformata Laplace a derivatei lui ) (t f n raport cu timpul,
) 0 ( ) ( d
d
d
d
d
0
f s F s t e
t
f
t
f
st
= =

L .
Ca urmare, transformata Laplace a derivatei unei funcii se obine nmulind
cu s transformata funciei i scznd din acest produs valoarea funciei, la
momentul zero. Dac valoarea funciei este nul la momentul iniial, rezultatul
devine deosebit de simplu : transformata Laplace a derivatei se obine nmulind
transformata Laplace a funciei, cu s. Prin aplicarea repetat a acestei reguli, se
obine transformata Laplace a unei derivate de ordin oarecare
) 0 ( ) 0 ( ) 0 ( ) (
d
d
) 1 ( 1 1
n

=
n n n n
n
f f s f s t f s
t
f
L L L ,
n care ) 0 ( , ), 0 ( ), 0 (
) 1 (

n
f f f L sunt valorile funciei i ale primelor 1 n derivate
ale ei, la 0 = t .
Transformata Laplace a integralei unei funcii oarecare se obine mprind
trasformata Laplace a acestei funcii cu s
) (
1
d ) (
0
s F
s
t t f =

L .
Prin aplicarea repetat a acestei reguli, se obine c integrarea de n ori n
domeniul variabilei t corespunde cu mprirea prin
n
s n domeniul s.
Transformarea Laplace este o transformare linear, adic
[ ] L L L + + = + + = + + ) ( ) ( ) ( ) ( ) ( ) (
2 2 1 1 1 1 1 1 2 2 1 1
s F c s F c t f c t f c t f c t f c L L L .
Funcia deplasare, ( ) ( ) t f t 1 , n care este o constant, are o variaie
(grafic) identic cu funcia ) (t f , cu excepia faptului c este deplasat cu i d
valori nule pentru < t ; are transformata Laplace ( ) ( ) [ ] ) ( 1 s F e t f t
st
= L .
Pe baza celor anterioare, se arat uor c transformata Laplace a funciei ) (t f e
t

este ) ( + s F .
Conform teoremei asemnrii, ) ( s F
t
f =
(

\
|

L , unde este un numr


constant pozitiv.
Produsul de convoluie sau produsul de compoziie a dou funcii ) (t f i
) (t g , pentru care se cunosc transformatele Laplace :
Elemente de baz n utilizarea Simulink pentru simulare 435

=
0
d ) ( ) ( t e t f s F
st
,

=
0
d ) ( ) ( t e t g s G
st

este : [ ] [ ] ) ( ) ( ) ( ) ( d ) ( ) (
0
s G s F t g t f t g f = =
(

L L L .
Deoarece derivatei i corespunde nmulirea cu s, rezult i
[ ] [ ] ) ( ) ( ) ( ) ( d ) ( ) (
d
d
0
s G s F s t g t f s t g f
t
= =
(

L L L ,
care mai este cunoscut i sub denumirea de formula lui Duhamel.
21.2. Elemente de baz pentru simularea cu Simulink
21.2.1. Blocuri de baz
Blocul Bus Creator combin un set de semnale pe o magistral,
grupul de semnale fiind reprezentat de o singur linie n diagram. Cnd
este folosit mpreun cu blocul Bus Selector, permite reducerea liniilor
pentru descrierea diagramei de la un capt la altul. Aceasta face ca diagrama s fie
mai uor neleas.
Pentru a reuni grupul de semnale cu blocul Bus Creator, se seteaz parametrii
blocului egalnd numrul porilor de intrare cu numrul semnalelor din grup.
Blocul va afia numrul de intrri specificat. Se poate conecta orice tip de semnal
la intrare, inclusiv semnalele altor magistrale. Pentru a separa semnalele, se
conecteaz la ieirea blocului o intrare a Bus Selector.
Blocul atribuie un nume fiecrui semnal pe care-l creeaz. Aceasta permite
referirea la anumite semnale, cnd se caut sursa acestora sau selectarea semnalelor
pentru conexiunea cu alte blocuri. Blocul ofer dou opiuni de denumire a
semnalelor magistralei.
Pentru a specifica faptul c semnalele preiau numele lor de la porile de
intrare, se selecteaz Signal in busdin lista cu opiuni.

Blocul Bus Creator genereaz nume pentru semnalele care corespund
intrrilor care nu au nume. Numele sunt din signaln, unde n este numrul de pori
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 436
la care este conectat semnalul.
Se poate schimba numele oricrui semnal prin scrierea numelui direct n
diagram sau n fereastra proprietilor semnalului Signal Properties. Dac se
schimb un nume atta timp ct fereastra blocului Bus Creator este deschis,
trebuie nchis i redeschis aceast fereastr sau apsat butonul refresh, aflat lng
lista semnalelor, pentru a actualiza numele n fereastr.
Pentru a specifica faptul c intrrile magistralei trebuie s aib nume proprii,
se selecteaz cererea de potrivire a numelui intrrilor semnalelor cu cele ale
semnalelor aparinnd listei din fereastra parametrilor blocului. Fereastra
parametrilor blocului afieaz numele semnalelor care sunt n acel moment
conectate la intrri sau un nume generat (de exemplu, semnalul 2), pentru o intrare
necunoscut (fr nume). Din acest moment, se poate folosi fereastra parametrilor,
pentru a se schimba numele intrrilor semnalelor. Pentru a schimba numele unui
semnal anume, se selecteaz semnalul din list. Numele semnalului selectat apare
n cmpul rename selected signal. Se scrie noul nume n acest cmp i se
selecteaz butonul Apply sau OK, pentru a nregistra modificrile fcute.
Lista semnalelor magistralei din fereastra de dialog a blocului Bus Creator
este o list a semnalelor de intrare n bloc. Semnul plus +, aflat n faa unui
semnal, indic faptul c acest semnal este el nsui o magistral, cruia i se pot
afia componentele, prin selectarea semnului plus. Pentru a afla sursa oricrei
intrri a semnalului, se selecteaz semnalul din lista semnalelor n magistral i
butonul Find. Simulink deschide subsistemul coninnd sursa semnalului, dac
este necesar i ilumineaz pictograma sursei. Blocul Bus Creator accept i red
valori reale i complexe ale oricrui tip de dat suportat de Simulink, inclusiv
tipului cu virgul fix. Parametrii sunt dai n fereastra de dialog.

Elemente de baz n utilizarea Simulink pentru simulare 437
Opiunea nume semnal (Signal naming option) selecteaz numele semnalelor
de la porile de intrare, pentru a atribui numele semnalelor de intrare care le
corespund. Se selecteaz cererea de introducere a noului nume, care trebuie s se
gseasc n lista semnalelor magistralei. Se activeaz opiunea de redenumire a
semnalului selectat, prin selectarea cmpului Rename selected signal.
Numrul de intrri (Number of inputs) specific numrul de intrri n acest
bloc. Blocul DSP Constant genereaz un semnal, a crui valoare rmne constant
pe timpul simulrii. Semnalul constant este cu timp-discret sau timp-continuu.
Cnd modul este setat continuu, ieirea este un semnal n timp-continuu.
Cnd modul este setat discret, parametrul timpului este vizibil i semnalul a avut
perioada de ieire discret, specificat de parametrii timpului.
Fereastra de dialog este cea din figura alturat.
Sample mode specific
modul la ieire, DISCRET,
pentru un semnal cu timp discret
i CONTINUU, pentru un
semnal cu timp continuu. Output,
specific fie c ieirea este bazat
pe Sample, fie bazat pe
adaptare (frame). Cnd Sample-
based este selectat i ieirea este
un vector, dimensiunea acestuia
este forat s se ncadreze n
dimensiunea valorii constante
(rnd sau coloan). Sample time,
specific perioada pentru ieirile
sample-based. Cnd este selectat opiunea frame-based pentru parametrii
ieirilor, acest parametru este numit perioada adaptat i este discret, pentru o
ieire de baz adaptat.

Valoarea constant (Constant value) specific valoarea dorit.
Acest parametru este adaptat, valoarea introdus aici poate fi adaptat la
o nou rulare, dar rmne constant pn la urmtoarea modificare. Dac
se specific orice tip de dat n acest cmp, se scrie valoarea cea nou, valoarea cea
veche pierzndu-se dintre parametrii datelor de ieire.
Blocul Gain multiplic intrarea cu o valoare constant. Intrarea
i gain-ul pot fi fiecare scalar, vector sau matrice. Se poate specifica
valoarea gain-ului n fereastra parametrilor. Precizarea tipului de
elemente sau a matricei poate fi specificat la parametrii multiplicrii.
De asemenea, este precizat ordinea de multiplicare a termenilor n cazul unei
matrice. Blocul Gain accept valori reale sau complexe, vectoriale sau matriceale,
cu elemente de orice tip ale Simulik-ului, exceptnd cel Boolean. Blocul Gain
suport tipuri de dat cu virgul fix. Dac valoarea de intrare a blocului Gain este
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 438
de tip real, iar valoarea Gain-ului este complex, ieirea este complex.
Parametrii i fereastra de dialog sunt redate n figura de mai jos.
Gain specific valoarea cu care va fi multiplicat intrarea. Gain-ul poate fi scalar,
vector sau matrice. Gain-ul nu
poate fi de tip boolean.
Multiplicarea - specific modul
de multiplicare, care poate fi:
Element (K*u) fiecare element
al intrrii este multiplicat cu
fiecare element al gain-ului;
Matrice (K*u) intrare i gain
sunt de tip matrice; Matrice (K)
(u-vector) intrarea i ieirea
sunt obligatoriu vectori, iar
lungimea lor este determinat de
lungimea Gain-ului.
Samle time - specific intervalul de timp ntre ncercri; pentru a seta timpul unei
ncercri se stabilesc parametrii la -1.

Blocul Scop - vizualizeaz semnalele generate n timpul unei
simulri, rednd datele introduse n timpul simulrii. Poate avea axe
multiple (una pe port); toate axele au un orizont de timp comun. Blocul
permite adaptarea timpului i a valorilor de intrare indicate. Fereastra Scop se poate
muta sau dimensiona i se pot modifica valorile parametrilor n timpul simulrii.
Dac semnalul este constinuu, Scop produce un grafic punct cu punct. Dac
semnalul este discret, Scop produce un grafic de tip treapt. Scop ofer un rnd de
butoane utile, care s permit mrirea (zoom-ul) datelor obinute, afiarea tuturor
datelor introduse, pstrarea setrilor axelor de la o simulare la alta, limitarea datelor
afiate i salvarea datelor n spatiul de lucru. Butoanele de lucru sunt prezentate n
figura urmtoare, ce reprezint fereastra Scop, care apare atunci cnd se deschide
grupul Scop.
Elemente de baz n utilizarea Simulink pentru simulare 439
Cnd se afieaz un vector sau o matrice de semnale, Scop aloc fiecarui
semnal cte o culoare n ordinea: galben, purpuriu, cian, rou, verde i albastru
nchis. Dac se afieaz mai mult de ase semnale, Scop reia ciclic culorile n
ordinea de mai sus. Se stabilesc limitele axei y, prin click dreapta pe ax i alegnd
proprietile axei, din csuele de dialog ce apar: Y min - valoarea minim pentru
axa y; Y max - valoarea maxim pentru axa y; Titlu - numele graficului. n partea
de jos apare timpul ct a durat simularea. Cu Zoom se pot mri att datele de pe
axele x i y n acelai timp sau pe fiecare direcie separat. Funcia zoom-ului nu
este activ n timpul simulrii. Pentru a mri datele pe ambele direcii n acelai
timp, se selecteaz butonul cel mai din stnga al barei de zoom, dup care se
definete zona de mrit, folosind csua de selectare. Cnd se plimb mouse-ul,
Scop vizualizeaz datele din acea zon. De asemenea, se poate da click ntr-un
punct din zona care trebuie mrit.
Pentru a mri doar datele de pe axa x , se click-eaz pe butonul din mijloc din
bara de Zoom. Butonul de setare a salvrii axelor face posibil ca, setrile pe axa x
si axa y s poat fi salvate pentru simularea viitoare.

Fereastra de dialog a parametrilor Scopului ne las s schimbm limitele
axelor, s setm numrul lor, timpul de simulare, etichetele i opiunile de salvare.
Pentru a afia fereastra, se selecteaz butonul Parameters din fereastra de dialog
sau dublu-click pe pictograma Scop-ului. Fereastra de dialog este urmtoarea

Limita de timp sau schimbarea x- axei, se face prin introducerea unui numr
sau prin selectarea butonului Auto din cmpul Time range. Introducerea unui
numr de secunde va produce afiarea dup fiecare introducere a ecranului
modificat.
Este permis etichetarea sau specificarea numelui fiecarei axe, avnd la
dispoziie urmtoarele opiuni:
all eticheta este poziionat n afara tuturor axelor;
inside eticheta este poziionat n interior;
bottom-axix only eticheta este poziionat n partea de jos a axelor;
none nu este etichetat.

Cnd este selectat opiunea Scroll, blocul Scop
afieaz n continuare spre stnga, pentru a putea fi
observat bine forma graficului pentru fiecare
segment.
Cnd aceast opiune nu este selectat, Scopul
afieaz rezultatul pe tot ecranul de la stnga la
dreapta, tergnd partea de nceput, nlocuind cu
urmtorul segment, pn cnd se finalizeaz
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 440
simularea, n final, avnd afiat pe ecran doar partea final a diagramei.
Se poate afia notaia datelor pentru fiecare punct din ecranul Scopului.

Scop afieaz legenda cu toate
stilurile de linii folosite, pentru toate
semnalele folosite.
Tipuri de date folosite
Blocul Scopului accept semnale
reale ale oricrui tip de date folosite de
Simulink, inclusiv cele cu virgul fix.
Printarea ferestrei Scopului
Pentru a printa coninutul
fereastrei blocului Scop, se deschide
fereastra proprietailor scopului i se d
click pe pictograma cu simbolul print,
cum se arat n figura urmtoare.

Blocul Sum execut adunri sau scderi pe intrrile sale. Acest
bloc poate aduna sau scdea intrri de tip scalar, vector sau matrice. De
asemenea, poate utiliza i elementele unui vector cu o singur intrare.
Fereastra de dialog este redat mai jos.
Se specific operaiile n lista
parametrilor list of signs: Plus (+), minus
(-)i spaiu (|) sunt caracterele care indic
operaiile ce se execut asupra intrrilor.
Dac sunt dou sau mai multe intrri,
atunci numrul caracterelor trebuie s
fie egal cu numrul intrrilor. De
exemplu, +-+, necesit trei intrri i
cere blocului s scad a doua (cea din
mijloc) intrare, din prima (vrful)
intrare i apoi s adune a treia valoare .
Toate valorile care nu sunt scalari
trebuie s aib aceleai dimensiuni.
Scalarul va fi mrit, ca s aib aceeai dimensiune ca celelalte intrri.
Un caracter spaiu creeaz un spaiu mai mare ntre pictogramele blocului.
Dac se cere doar adunarea intrrilor, atunci valoarea parametrului numeric
este egal cu numrul intrrilor.
Dac un singur vector este intrare, atunci semnele + sau - vor fi nlocuite
cu un operator specific.
Elemente de baz n utilizarea Simulink pentru simulare 441
Tipul datelor folosite: blocul Sum accept semnale reale sau complexe, ale
oricrui tip de dat utilizat de Simulink, inclusiv a celor cu virgul fix.
Se poate alege forma pictogramei, de cerc sau dreptunghi.
Lista semnelor se d prin introducerea unui numr de caractere plus (+) i
minus (-), egal cu numrul de intrri. Adunarea este operaia lips, deci dac se
dorete adunarea intrrilor, se introduce numrul porilor de intrare. Se poate
influena poziia intrrilor, prin introducerea caracterelor space.
Prin Sample time se specific intervalul de timp. Este necesar ca toate
intrrile s aib acelai tip de dat. Se selecteaz acest parametru pentru c toate
intrrile trebuie s aib acelai tip de dat.
Modul tipului de dat al ieirilor se specific i se urmrete s fie la fel ca la
prima intrare. De asemenea, se poate alege s se construiasc tipul datei din list.
Dac se alege Specify via dialog, atunci parametrii Output data type,
Output scaling value i Lock output scaling against changes by the
autoscaling tool devin vizibili.
Valoarea ieirilor se seteaz utiliznd doar puncte binare, iar vizualizarea se
realizeaz dac se selecteaz Specify via dialog for din parametrii Output data
type mode.
Blocul Saturation (Saturare) limiteaz distana dintre
semnale. Blocul Saturation accept i tipuri de date cu virgul fix
i impune limitele superioare i inferioare ale semnalului. Cnd
semnalul de intrare este ntre limite, atunci el rmne neschimbat.
Cnd semnalul de intrare nu se
ncadreaz ntre limite, atunci
semnalul este modificat pn cnd
se ncadreaz ntre limite.
Blocul Saturation accept semnale
reale i complexe de orice tip
suportate de Simulink.
Parametrii i fereastra de
dialog sunt prezentate n figura
alaturat.
Cnd semnalul de intrare al
blocului Saturation este deasupra
limitei superioare introduse pentru
aceste valori, Simulink adapteaz, micornd spre aceast valoare.
Cnd semnalul de intrare al blocului Saturation este sub aceast valoare;
iesirea acestui bloc este marit pna la aceast valoare.

Blocul Transfer FCT (Funcia de Transfer) ajut la
implementarea unei funcii de transfer. Blocul Transfer Fct
implementeaz o funcie de transfer, unde intrarea (u) i ieirea (v) pot
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 442
fi exprimate prin funcii de transfer de forma urmtoare:

) ( ) 2 ( ) 1 (
) ( ) 2 ( ) 1 (
) )
) (
) (
) (
) (
2 1
2 1
nd den s den s den
nn num s num s num
s den
s num
s u
s y
s H
nd nd
nn nn
+ + +
+ + +
= = =


L
L

unde nn i nd sunt numrul de coeficieni ai numrtorului i ai numitorului; num i
den conin coeficienii numrtorului i ai numitorului, n ordine descresctoare a
puterii lui s.
De menionat c num poate fi un vector sau o matrice; den poate fi un
vector i ambii au parametrii specificai n fereastra de dialog a blocului. Ordinul
numitorului trebuie s fie mai mare sau egal cu ordinul numrtorului.
Parametrii i fereastra de dialog sunt redai mai jos.
Blocul Transfer Fct are
ca intrare un scalar. Dac
numrtorul blocului este
un vector, ieirea
blocului este un scalar.
Dac numrtorul este
matrice, funcia de
transfer extinde intrarea
ntr-un vector de ieire, a
crui lungime s fie egal
cu numrul de rnduri ale
numrtorului.
Funcia de transfer
permite vizualizarea att a numrtorului ct i a numitorului.
Dac fiecare este specificat ca un vector sau ca o variabil inclus ntre paranteze,
pictograma arat funcia de transfer cu coeficienii specificai. Dac se specific
variabila ntre paranteze, variabila este evaluat.
De exemplu, dac numratorul este [3, 2, 1] i numitorul este [7, 5, 3, 1], atunci
blocul va fi:
Funcia de transfer accept ca intrare i ieire
semnale de tip double. O matrice cu mai multe rnduri
poate s genereze mai multe ieiri.


Blocul Math Function (Functie MATLAB) permite aplicarea unei
funcii sau expresii Matlab unei intrri. Blocul Math Function aplic
funcii Matlab sau expresii specificate la intrare. Ieirile funciei trebuie
s aib aceeai lungime ca iesirile blocului. Expresii pentru acest bloc
sunt funciile de forma: sin; atan2(u(1), u(2)) ;u(1)^u(2)
Tipuri de date folosite de blocul Math Function sunt intrare real sau
Elemente de baz n utilizarea Simulink pentru simulare 443
complex, de tip double i genereaz ieire real sau complex de tip double;
depinde de setrile fcute la parametrul Output signal type.
Funcia Matlab este o
funcie intern sau expresie de
operaii i funcii acceptate.
Dac se specific doar
funcia, nu este necesar s se
includ i argumentul intrrii
ntre paranteze.
Fereastra de dialog
permite selectarea tipului de
semnal al funciei Matlab ca
fiind real, complex sau auto.
Valoarea auto, seteaz tipul
ieirii astfel nct s fie la fel
ca tipul semnalului de intrare.

Blocul Fcn este o funcie definit de utilizator, n care se pot
utiliza apoape toate operaiile din Matlab, cu observaia c variabila
o reprezint semnalul de intrare, predefinit ca variabila u. Blocul nu
lucreaz cu matrice i nu admite operaia de mprire (:)

Blocul Derivative calculeaz derivata impulsului intrat funcie de
timpul de calcul al modelului luat pentru simulare. La nceput valoarea de
intrare este zero i prin urmare, ieirea din bloc va fi tot zero. Acurateea
calculului depinde de pasul de timp luat pentru simulare. Blocul are o singur
intrare i o singur ieire.

Blocul Step este funcia treapt care modific valoarea iniial
(Initial value) la valoarea final (Final value) la timpul (Step time), care,
dac nu este precizat, se consider valoarea implicit de 1 secund.
Valorile iniiale i finale sunt de tipul 1-D.
Blocul To Workspace transmite spre spaiul de lucru datele cu
numele Variable name, avnd fixat limita inferioar, variaia de
timp i timpul. Datele sunt salvate fie sub form de matrice (Array),
fie de structur (Structure).
21.3. Modelul pentru rezolvarea ecuaiei Van der Pol
Modelul pentru rezolvarea ecuaiei Van der Pol,
( ) 0 1
2
2
2
= + + + y
dt
dy
y
dt
y d
,
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 444
n mediul de programare Simulink este redat n figura de mai jos.
van der Pol Equation
To start and stop the simulation, use the "Start/Stop"
selection in the "Simulation" pull-down menu
The van der Pol Equation
(Double-click on the "?" for more info)
2
Out2
1
Out1
1/s 1/s
Scope
Mux
1
Mu
Double-click
here for
Simulink Help
?
1 - u*u
Fcn
x2
x2
x1
x1

Variaia marimilor y i y n timp este redat n figura de mai jos.
0 10 20 30 40 50 60 70
-3
-2
-1
0
1
2
3
t
d
2
y
/
d
t
2



d
y
/
d
t

21.4. Modelarea i simularea instalaiei de alimentare
cu combustibil
Pentru modelare, n vederea regimurilor tranzitorii, este important instalaia
din limita cazanului, care permite modificarea debitului de combustibil cu sarcina.
Modelul fizic al instalaiei de alimentare cu crbune praf aferent unei mori
este redat n figura 21.1.
Alimentarea cu crbune a fiecrei mori se face cu alimentatoare cu band,
aezate sub buncrele de crbune, care fac posibil o modificare a debitului de
crbune prin viteza alimentatorului, printr-un variator de turaie cu lan.
Variatorul de turaie este comandat de impulsul de ieire din regulatorul de
debit, format pe baza impulsurilor de intrare primite de la reglarea puterii,
traductorul de vitez al benzii i participarea morii (limitat la minim 20 % din
capacitate).
Elemente de baz n utilizarea Simulink pentru simulare 445

Fig.21.1. Instalaia de alimentare cu combustibil solid
Procesele fizice ce descriu funcionarea instalaiei de alimentare cu
combustibil sunt de transport, la combustibilul solid i respectiv de laminare, la
combustibil lichid sau gazos. Apar, n toate cazurile, ntrzieri i o reacie invers.
Ipoteze simplificatoare adoptate:
densitatea i nlimea stratului de crbune pe band sunt constante;
pcura se consider incompresibil, iar ventilul de reglare este
echiprocentual;
modificarea debitului se face numai prin modificarea vitezei benzii sau
deschiderii ventilului.
Modelul matematic ce descrie funcionarea benzii de transport, fr a
considera mecanismele de acionare, reglare i limitare este:
Dme Dmi Dmc
t d
d
=


unde Dmc, Dmi, Dme [kg/s] - sunt respectiv, variaia debitului de combustibil,
intrat i ieit dintr-un contur de bilan. Debitul masic intrat, Dmi, depinde de
mrimea principal controlat, care poate fi viteza benzii sau lungimea tijei
ventilului, printr-o constant. Totodat, debitul masic ieit, Dme, n primul
moment, se poate considera constant.
Considernd mrimea de comand tradiional, anume presiunea aburului
viu p
0
, i lund n consideraie ntrzierea sistemului de acionare i reacia, forma
operaional a modelului ce permite calculul debitului de combustibil n u.r. este:
0
s
p
s
Dmc
+ 1

c
T
T
e
D

=
unde: T
c
- constanta de timp a sistemului de reglare a debitului de combustibil, cu
valori de 44 [s], pentru crbune praf, 12-17 [s], pentru pcur, i 5-8 [s] pentru
gaze; T
D
- timp de ntrziere, avnd valori: 8-10 [s] la crbune, 4-5 [s] la pcur i
2-3 [s] la gaze.
Diagrama bloc a instalaiei de alimentare cu combustibil i regulatorul
aferent, este prezentat n figura 21.2. De obicei, regulatorul debitului de
combustibil este de tip PID, valorile constantelor depinznd att de tipul de
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 446
combustibil, ct i de modul de participare al centralei la acoperirea curbei de
sarcin.

Fig.21.2. Sistemul de alimentare cu combustibil

Variaia debitului relativ de combustibil este redat n figura 21.3, care
evideniaz ntrzierile diferite de la un tip de combustibil la altul.
Pentru constante, s-au considerat valorile: la crbune T
D
= 10 [s], iar T
C
= 44
[s]; la pcur T
D
= 5 [s], iar T
C
= 15 [s]; pentru gaze T
D
= 2 [s], iar T
C
= 5 [s].


Fig.21.3. Variaia debitului de combustibil
21.5. Modelarea i simularea focarului
Se consider un focarul ca o zon de ardere real sau fictiv, la sfritul
creia rezult temperatura adiabatic de ardere.
Modelul fizic al focarului este prezentat n figura 21.4. Se consider cazul
cel mai cuprinztor, ntlnit practic numai la generatoarele de abur cu ardere
suplimentar, n sensul c poate intra o cantitate de aer necesar arderii, o cantitate
de combustibil i gaze de la turbina cu gaze, ieind zgur i gaze de ardere impure.
Procesele fizice ce descriu funcionarea focarului adiabatic de omogenizare
sunt cele de ardere a combustibilului (solid, lichid sau gazos) i omogenizare (prin
amestec turbulent i transport), n volumul fizic real.
Elemente de baz n utilizarea Simulink pentru simulare 447
Ipoteze simplificatoare adoptate:
compoziia i temperatura de prenclzire a combustibilului rmn constante;
concentraia masic de vapori de ap din aer, x
aer
, nu se modific n timp;
masa total nu variaz n timp;
aerul i gazele de ardere se consider gaze perfecte, ceea ce permite calculul
densitii din ecuaia de stare a gazului perfect.

Fig.21.4. Modelul fizic al focarului
Modelul matematic ce descrie funcionarea focarului rezult din ecuaia de
conservare a energiei.
Variaia densitii rezult din ecuaia de stare a gazului perfect. Forma
operaional care d variaia densitii gazelor cu variaia temperaturii, n u.r.,
este:
rogF = - tgF
unde: rogF - variaia densitii gazelor de ardere din focar; tgF - variaia
temperaturii gazelor de ardere din focar.
Se consider focarul de omogenizare de la un generator de abur energetic
care arde crbune pulverizat sau pcur.
n acest caz ecuaia de conservare a energiei este,
( ) ( )
d
d t
V h Dmc h hi Dmaer h
Dmgaze h Dmzg h Q
F gF gF comb aer
gF zg pierderi


= + +


unde: V
F
[m
3
] - volumul focarului;
gF
[kg/m
3
] - densitatea gazelor din focar; hi
[kJ/kg] - puterea calorific inferioar a combustibilului; Dmc, Dmaer, Dmgaze,
Dmzg [kg/s] - debit masic de combustibil, aer, gaze de ardere i respectiv de zgur;
Q
pierderi
[kW] - suma pierderilor focarului; h
gF
, h
comb
, h
aer
, h
zg
[kJ/(kg C] -
entalpia gazelor din focar, a combustibilului, aerului i respectiv a zgurii.
Pe de alt parte:
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 448
( )
d
d t
V Dmc Dmaer Dmgaze Dmzg
F gF

= + = 0
iar,
Mzgfocar Dmc Dmzg Mtaerum Alfa Dmc Dmaer = = ;
unde, n plus: Alfa - coeficientul de exces de aer; Mtaerum [kg/kg] - masa
teoretic de aer umed necesar arderii, funcie de compoziia combustibilului;
Mzgfocar [kg/kg] - masa zgur reinut n focar, funcie de tipul focarului i
coninutul iniial de anorganic.
Dup prelucrare, forma operaional, care permite calculul variaiei
temperaturii gazelor din focar, n u.r., este:
s tgF = - a
1F
tgF + a
2F
Dmc + a
3F
taer
unde:
{ }
0 0
0 0 0
1F
a
gF gF F
cenusa gF
h V
h Mzgfocar h Mgaze Dmc


=

;
{ }
.
) 1 (
a
; a
0 0
0 0 0
3F
0 0
0 0 0 0 0
2F
gF gF F
aer
gF gF F
cenusa gF aer comb
h V
h Mtaerum Alfa Dmc
h V
h Mzgfocar h Mgaze h Mtaerum Alfa hi h Dmc


=

+ +
=


n relaiile de calcul a coeficienilor, indicele superior "0", semnific faptul
c mrimile sunt calculate din regimul de referin, la momentul 0, neperturbat.
Diagrama bloc ce permite calculul temperaturii focarului adiabatic, este
redat n figura 21.5.

Fig.21.5. Focar adiabatic GA
Figura 21. 6 prezint variaia n timp a temperaturii adiabatice a gazelor din
focarul adiabatic al generatorului de abur de 1035 t/h, funcionnd pe crbune
pulverizat, n u.r., la aplicarea unui semnal treapt, pentru Dmc i taer.

Elemente de baz n utilizarea Simulink pentru simulare 449

Fig.21.6. Variaia temperaturii adiabatice a gazelor
21.6. Modelarea i simularea generatorului electric
Modelul matematic este nelinear, toate mrimile sunt n u.r., i cuprinde:
ecuaiile Park pe axele d i q:
; ;
' ' ' '
d q q d
I x E U I x E U
d q q d
= + =
; ) ( ; ) ( '
' ' '
d d q q q d
I x x E E I x x E E
d q q d
= + =


( ) ;
'
1
;
'
1
0 0
' '
d
d
q fd
d
E
T
E
t d
d
E E
T
E
t d
d
d q
= =


puterile sincrone la ieire (activ i reactiv):
q d d q q q d
I U I U Q I U Id U P = + = ;


tensiunile finale:
; ' ; '
' ' ' '
d q q q
I x j I x E U E j E E
d d
+ = + =


curentul pe faz i impedana la intrare:
( ) ( )
( ) ( )
(

(
(



=
(

+ = + =
b
a
U E U E
U E U E
I
I
sau
b j a Z Z U E = I j I I
b b
b q b
q
d
b q d
d q
d


sin cos
cos sin
; ; ) ' (
' '
' '


ecuaiile electromecanice:
( ) [ ] ; ;
0 0
0

=
t d
d
D P W
H
n
t d
d
i


unde: U, U
d
, U
q
- tensiunea final pe o faz a statorului, respectiv componentele d
i q ale acesteea; E
d
, E
q
, E - tensiunile fictive corespunztoare reactanelor sincrone
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 450
i final; E', E'
d
, E'
q
- tensiunea tranzitorie intern i componentele pe axa d,
respectiv q; x
d
, x
q
- reactana sincron longitudinal i respectiv transversal; x'
d
, x'
q

- reactanele tranzitorii corespunztoare axei d i q; T'
d0
,T'
q0
- constantele de timp
tranzitorii: a nfurrii de excitaie (din axa d) i a circuitului rotoric din axa q,
cnd celelalte circuite sunt deschise; I, I
d
, I
q
- curentul pe faz i respectiv
componenta transversal i longitudinal; P - puterea activ; Q - puterea reactiv; Z
- impedana complex total; a - suma rezistenei generatorului, transformatorului
i liniei, pn la bare; b -suma reactanei liniei, reactanei transformatorului i
tranzitorie direct a generatorului;
0
[rad/s] - viteza unghiular staionar; n
0
[1/s]
- frecvena sincron staionar; H [s] - constanta de inerie a ansamblului
turbogenerator; W
i
- puterea mecanic transmis de turbin la cupla generatorului;
D [s/rad] - constanta de amortizare;
0
[rad] - unghiul electric; indicele 0 semnific
starea staionar de referin; toate mrimile ce nu au precizate uniti de msur,
sunt n u.r.
Pentru modelul generatorului electric, prezentat n figura 21.7:

Fig. 21.7. Modelul generatorului electric
mrimile de intrare sunt:
E
fd
- tensiunea de excitaie, de la regulator;
U
b
- tensiunea pe bare, de la sistem;
W
i
- puterea intern la cupl, de la turbin;
mrimile de ieire sunt:
P - puterea electric activ livrat;
Q - puterea electric reactiv livrat;
- viteza unghiular, pentru regulatorul de turaie.

Detalierea modelului Simulink al generatorului electric se prezint n figura
21.8.
Elemente de baz n utilizarea Simulink pentru simulare 451

Fig. 21.8. Modelul Simulink al generatorului electric

Sistemul de ecuaii care st la baza modelului Simulink este:
P
b q
+ + + =
4 3
'
2
'
d 1
U E E g g g g ;

U s
b q q
+ + + + =
9 8
'
7
'
d 6 fd 5
'
E E E E g g g g g ;

s
b q
+ + + =
13 12
'
11
'
d 10
'
d
U E E E g g g g ;

Q
b q
+ + + =
17 16
'
15
'
d 14
U E E g g g g ;

( ) ( ) ( ) P W s
i
+ = H H H D 2 1 2 1 2 ; = s
unde:
( ) ; 1
0 0 0 0
' '
1 q d q d q d
I x a x b I U b U a g + =
;
' '
1
0 0 0 0
2
d
I
q
x a
d
x b
q
I
q
U a
d
U b g +
|

\
|
+ + =
( ) ( ) ;
0
'
0
0
cos
0
sin
0
'
0
0
cos
0
sin
3 |
|

\
|
+ +
|
|

\
|
+ =
q
U q x
d
I a b
d
U d x
q
I b a g
( )
( )
;
'
0 0
0
cos
0
sin
'
0 0
0
cos
0
sin
0
4
(
(
(
(
(

|
|

\
|
+ +
+
|
|

\
|

=
q
x
d
I
q
U b a
d
x
q
I
d
U a b
b
U g











SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 452
;
'
1 ) ' (
;
'
'
;
'
1
0 0 0
7 6 5
d
d d
d
d d
d
T
x x b
g
T
x x
a g
T
g
+
=

= =

( ) ; cos sin
'
'
0 0 8
0
+

= b a
T
x x
g
d
d d
( ); sin cos
'
'

0 0 9
0
0

= b a
T
x x
U g
d
d d
b


;
'
) ' (
;
'
1 ) ' (
0 0
11 10
q
q q
q
q q
T
x x a
g
T
x x b
g

=
+
=

( ); cos sin
'
'
0 0 12
0

= a b
T
x x
g
q
q q
( ); cos sin
'
'
0 0 13
0
0
+

= b a
T
x x
U g
q
q q
b


( ) ( ); ' '
0 0 0 0 0
14 q q d d d q q
x I U b x I U a I g + + + =

( ) ( ); ' '
0 0 0 0 0
15 q q d d d q d
x I U a x I U b I g + + =

( ) ( )
( ) ( )
;
cos sin '
sin cos '
0 0
0 0
16
0 0
0 0
(
(

+ +
+ +
=
a b U x I
a b x I U
g
d q q
d d q


( )( )
( )( )
;
sin cos '
cos sin '
0 0
0 0
17
0 0
0 0
0
(
(

+ +

=
a b U x I
a b x I U
U g
d q q
d d q
b


Mrimile de referin considerate sunt: Z=0.1+j
.
0.3; x
d
=x
q
= 1.2; x'
d
=x'
q
=
0.2; U
b0
= 0.8; U
d0
=0.578; U
q0
= 0.816; I
d0
=0.876; I
q0
=0.482 toate n u.r.;
T'
d0
=T'
q0
=2.5 s; H=4 s; D = 0.2 s/rad;
0
= 58.5.

n figura 21.9 se prezint variaia puterii active P, la o variaie treapt cu 10
% a mrimilor de intrare, respectiv a tensiunii de excitaie E
fd
, a tensiunii pe bare
U
b
, i puterii interne la cupl W
i
.

Fig. 21.9. Variaia puterii active P cu E
fd
, U
b
, i W
i

22. ELEMENTE DE BAZ MICROSOFT EXCEL
PENTRU MODELARE I SIMULARE
n ciuda opiniei generale, Microsoft Excel este destinat calculului cu scop
general, realizrii de grafice i operaii statistice, neavnd o aplicabilitate limitat
doar la domeniul financiar-contabil.
Datorit includerii n pachetul Microsoft Office, aceast aplicaie soft este
instalat pe majoritatea calculatoarelor care ruleaz una dintre variantele Windows.
Efectuarea unor calcule i grafice n cadrul Microsoft Excel este recomandabil,
deoarece beneficiaz de toate avantajele folosirii conjugate a aplicaiilor
componente Microsoft Office: eficacitate, transfer facil al informaiilor ntre
documente prin copiere, stabilirea unor legturi ntre copiere i original,
ncorporarea de noi date, prin copierea de informaii existente sau inserare prin
intermediul unor obiecte.
n paginile ce urmeaz, se va ncerca o prezentare succint a acestei aplicaii
software, prin descrierea principalelor funcii i modul n care acestea pot fi
utilizate, pentru realizarea unor calcule matematice complexe.
22.1. Lucrul cu foile de calcul
22.1.1. Descrierea unui fiier-dosar de lucru
Un fiier Excel (prezint extensia: .xls) conine mai multe foi de calcul
(worksheet sau mai scurt sheet), reunite ntr-un dosar de lucru workbook (book).
Numele dosarului este, de fapt, numele fiierului, care apare pe bara de titlu a
ferestrei, iar numele foilor de calcul apare pe etichetele din partea de jos a paginii.
n mod automat, la crearea unui fiier, i se atribuie numele Book1, iar foilor de
calcul Sheet1, Sheet2, Sheet3.
Dac numele fiierului se stabilete la salvarea acestuia, numele foilor de
calcul se schimb, prin alegerea opiunii Sheet Rename, din meniul Format sau
fcnd dublu click pe butonul stng (sau click pe butonul drept) pe eticheta foii de
calcul i scriind noul nume. Dosarul se poate rsfoi cu uurin, printr-un click pe
eticheta foii de calcul dorite. Foile de calcul se pot aduga (meniul Insert - Sheet)
sau terge (meniul Edit - Delete Sheet).
O foaie de calcul este organizat n rnduri sau linii (rows), marcate prin
numere i coloane (columns), marcate prin litere. Intersecia dintre o linie i o
coloan este celula (cell), a crei adres sau referin este dat de litera asociat
coloanei, urmat de numrul asociat rndului (A1 este prima celul a unei foi de
calcul). Celula activ este celula n care se introduc date n momentul tastrii,
aceast aciune avnd loc pe bara de valori i formule a celulei active (formula
bar). Se poate lucra, att cu o singur celul odat, ct i cu mai multe, formndu-
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 454
se astfel un domeniu. Adresa domeniului este dat de adresa primei celule din
domeniu, urmat de : i de adresa ultimei celule din domeniul ales. (A1:B2 este
domeniul format din primele patru celule din foaia de calcul).
O celul poate conine valori (values), numere i texte sau formule
(formulas). O valoare este o informaie introdus direct ntr-o celul; poate fi o
valoare numeric, inclusiv dat, or, moned, procent, fracie, not tiinific sau
text. O formul este o secven de valori, referine de celule, nume, funcii sau
operatori, care produc noi valori din valori existente. Formulele ncep ntodeauna
cu semnul =. O valoare, care este rezultatul unei formule, poate schimba i alte
valori din dosarul de lucru.
n figura urmtoare sunt prezentate principalele componente, amintite mai
sus, ale ferestrei Microsoft Excel.



22.1.2. Selectarea uneia sau a mai multor celule
Pentru a lucra cu un domeniu de celule, acesta trebuie mai nti selectat, prin
poziionarea mouse-ului pe prima celul a domeniului i inndu-se apsat butonul
stng al acestuia, pn la inserarea ultimei celule din domeniul dorit. Pentru
selectare se mai pot folosi i combinaiile de taste Shift + sgei sau Shift +
PageUp sau Shift + PageDown.
Exist situaii cnd este necesar selectarea unor domenii neadiacente
(grupuri de celule care nu sunt alturate). Pentru selectarea acestora, se apas dup
selectarea primului domeniu tasta Ctrl i se ine apsat, pn la selectarea
Elemente de baz Microsoft Excel pentru modelare i simulare 455
ultimului domeniu, care se face tot prin poziionarea cursorului n prima celul a
acestuia, cu click pe butonul stng al mouse-ului i tragere n direcia dorit,
inndu-se apsat butonul.
22.1.3. Derularea foii de calcul
Parcurgerea foii de calcul se face cu ajutorul barelor de deplasare, orizontal
i vertical. Dac se dorete meninerea pe ecran a primelor rnduri sau coloane din
tabel, se poate proceda la nghearea zonei respective, prin utilizarea opiunii
Window-Freeze Panes. O alt opiune este Window-Split, mprirea ferestrei foii
de calcul n patru ferestre, cu derulare independent, fiecare avnd bare de
deplasare proprii.
22.1.4. Dimensionarea rndurilor i a coloanelor
Pentru ca datele introduse n tabel s poat fi urmrite uor, este util
dimensionarea nlimii unui rnd sau a limii unei coloane.
Pentru ajustarea lrgimii unei coloane se poziioneaz cursorul pe linia de
demarcaie dintre coloane, forma cursorului devine o linie cu sgei la ambele
capete, innd apsat butonul stng, se trage n direcia dorit (la dreapta pentru a
lrgi coloana, la stnga pentru a o ngusta). Executarea unui dublu click pe
marginea din dreapta a capului unei coloane determin lrgimea automat a
acesteia, astfel nct s ncap n celule toate datele introduse n coloana respectiv.
Similar, se procedeaz i n cazul nlimii rndurilor.
Pentru a ajusta n acelai timp nlimea i limea mai multor rnduri i
coloane, se selecteaz un rnd i apoi, din meniul Format-Row-AutoFit, la fel se
selecteaz o coloan, apoi meniul Format-Column-AutoFit.
22.1.5. Forma de prezentare a datelor
n momentul n care s-au introdus datele necesare, s-au aplicat formule de
calcul i s-au obinut rezultatele dorite, trebuie aleas o form plcut i eficient
de prezentare a materialului realizat. n acest scop, se utilizeaz opiunile prezente
n meniul Format.
Opiunea Format-AutoFormat ofer o list de forme predefinite de tabele.
Format-Style este util dac se dorete un anumit stil al datelor care apar n foaia
de calcul cum ar fi: formatul numerelor, al textului, tipul, mrimea i culoarea
fontului utilizat, alinierea datelor n celule, marginea celulelor i altele.
Excel recunoate cuvintele ca text i le aliniaz la stnga, n interiorul celulei.
Numerele sunt aliniate la dreapta. La selectarea unor comenzi care se aplic logic
numerelor, Excel ignor orice text ntlnit. n cazul n care se dorete interpretarea
unui numr ca text, se pune apostrof naintea primei cifre a numrului (astfel 123
este tratat ca text i nu va intra n calcule ulterioare).
Pentru scrierea automat a unui titlu de rnd sau coloan, pe mai multe linii,
n interiorul aceleiai celule, se selecteaz meniul Format-Cells-Alignement-
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 456
Wrap Text. Trecerea la o linie nou, n interiorul unei celule, se face cu
combinaia de taste Alt + Enter. Pentru un spaiu de lungime definit se folosete
Ctrl + Alt + Tab.
22.1.6. Protejarea celulelor, a foilor de calcul i a dosarelor de
lucru
Prin protejarea foii de calcul, n toate celulele componente ale acesteia, se
blocheaz orice modificare, pn la o eventual deprotejare.
Protejarea foile de calcul i dosarelor de lucru se realizeaz din meniul
Tools-Protection-Protect Sheet (protejarea foilor) sau Protect Workbook
(protejarea dosarelor). La protejarea foilor exist cteva opiuni:
Password permite alegerea unei parole;
Contents blocheaz coninutul (celulele) foii de calcul, nemaipermind
modificri sau tergeri;
Objects nu permite modificarea diagramelor sau a obiectelor grafice.
Dac, ulterior protejrii, se dorete modificarea valorilor din anumite celule,
se procedeaz astfel: se selecteaz celulele dorite apoi, din meniul Format-Cells-
Protection, se invalideaz opiunea Locked.
Deplasarea, copierea, mutarea i inserarea celulelor
Mutarea unei celule sau a unui grup de celule se face astfel: se selecteaz
celula sau domeniul care urmeaz a fi mutat, prin plasarea cursorului pe chenarul
negru al celulei sau a domeniului activat. Forma acestuia devine o sgeat alb,
click stnga i tragerea zonei selectate n noua locaie, urmat de eliberarea
butonului mouse-ului.
Copierea se face similar, cu meniunea c se va ine apsat tasta Ctrl din
momentul n care se poziioneaz cursorul pe chenarul zonei selectate.
Copierea i mutarea se pot face i folosind comenzile din meniul Edit: Copy,
Cut, Paste.

n interiorul unui tabel pot fi inserate celule, coloane sau linii libere,
utiliznd comenzile corespunztoare din meniul Insert. De asemenea, celule, linii
sau coloane pot fi nlturate dup selectare i utiliznd comanda Edit-Delete.
22.2. Operaii i funcii matematice
22.2.1. Funcii de calcul
Pentru a efectua operaii aritmetice sau folosi funciile matematice din
meniuri, este necesar ca descrierea formulei de calcul s nceap cu semnul =.
De exemplu, pentru a calcula n celula D1 rezultatul nmulirii valorilor din
celulele A1 i B3, la care se adun valoarea din celula C1, se activeaz celula D1,
n care se scrie urmtoarea formul: =A1*B1+C1 (echivalentul D1=A1*B1+C1).
Elemente de baz Microsoft Excel pentru modelare i simulare 457
Funcia AutoSum este utilizat la nsumarea valorilor unui domeniu selectat,
rezultatul fiind afiat n celula imediat urmtoare.
Pentru activare se selecteaz domeniul de aplicare dorit i se apas din bara
de butoane .
Alturi de butonul funciei AutoSum, exist butonul Paste Function,
care permite utilizarea uneia dintre funciile de calcul disponibile. Aceste funcii
sunt predefinite, fiind mai uor de utilizat i mai rapide dect formulele.
Dup apsarea butonului, f
x ,
apare o list a funciilor definite, grupate pe
domenii de aplicare; se alege funcia dorit, se apas OK, dup care se
completeaz argumentul funciei.
Funciile pot fi introduse i cu ajutorul Insert-Function, iar dac se cunoate
sintaxa funciilor, acestea pot fi introduse i direct, pe bara de formule i valori a
celulei active.

Microsoft Excel ncorporeaz mai multe funcii de calcul, grupate n
urmtoarele categorii:
Funcii financiare (Financial), aplicate cu deosebire n domeniul economico-
financiar;
Funcii cronologice (Date & Time), cu ajutorul crora se poate lucra n
formule cu valori de tip dat i de tip or;
Funcii matematice i trigonometrice (Math & Trig), utilizate n calcule
matematice;
Funcii statistice (Statistical), cu care se realizeaz analize statistice a datelor
introduse;
Funcii de cutare i referin (Lookup and Reference), utile n cutarea
unor date, liste de date sau tabele, sau a referinei unei celule;
Funcii pentru baze de date (Database), folosite n cazul n care se dorete s
se afle dac valorile dintr-o list ndeplinesc anumite condiii sau criterii;
Funcii text (Text), cu ajutorul crora se poate opera n formule cu string-uri
de caractere;
Funcii logice (Logical), utilizate la efectuarea operaiilor logice;
Funcii de informare (Information), cu ajutorul crora se poate determina
tipul datelor coninute de o celul.
22.2.2. Funcii matematice i trigonometrice
Dintre cele mai importante funcii matematice i trigonometrice se
menionez:
- ABS(number) ntoarce valoarea absolut a unui numr (number).
Exemplificare: ABS(2) = 2; ABS(-2) = 2.
- ACOS(number) ntoarce valoarea, exprimat n radiani, a arccosinusului unui
numr.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 458
Exemplificare: ACOS(-0.5) = 2,094395 (2 /3) sau,
ACOS(-0.5)*180/PI() = 120 ().
- ACOSH(number) ntoarce valoarea, exprimat n radiani, a arccosinusului
hiberbolica unui numr, cuprins ntre 0 i 1.
Exemplificare: ACOSH(1) equals 0;
ACOSH(10) equals 2,993223.
- ASIN(number) ntoarce valoarea, exprimat n radiani, a arcsinusului unui
numr.
Exemplificare: ASIN(-0.5) = -0.5236 (-/6) sau,
ASIN(-0.5)*180/PI() = -30 ().
- ASINH(number) ntoarce valoarea, exprimat n radiani, a arcsinusului
hiperbolic a unui numr.
Exemplificare: ASINH(-2.5) = -1,64723; ASINH(10) = 2,998223.
- ATAN(number) ntoarce valoarea, exprimat n radiani, a arctangentei
unui numr.
Exemplificare: ATAN(1) = 0,785398 (/4) sau,
ATAN(1)*180/PI() =45 ().
- ATAN2(x_num,y_num) ntoarce valoarea, exprimat n radiani, a
arctangentei unor coordonate x i y (x_num i y_num), specificate (adic unghiul
format ntre axa OX i linia tras prin punctul de origine i cel ale crui coordonate
sunt specificate).
Exemplificare: ATAN2(-1, -1= -2,35619 (-3/4) sau,
ATAN2(-1, -1)*180/PI() = -135 ().
- ATANH(number) ntoarce valoarea, exprimat n radiani, a arctangentei
hiperbolice a unui numr (cuprins ntre 1 i 1 exclusiv).
Exemplificare: ATANH(-0.1) = -0,10034
- CEILING(number,significance) rotunjete un numr (number) n sus, pn
la urmtorul multiplu semnificativ specificat(significance).
Exemplificare: CEILING(2.5, 1) = 3;
CEILING(-2.5, -2) = 4;
CEILING(1.5, 0.1) = 1,5.
- COMBIN(number,number_chosen) ntoarce numrul de combinri, pentru
un numr dat (number); number_chosen este numrul luat n fiecare
combinaie.
Exemplificare: Dac se dorete formarea unei echipe de 2 oameni din 8
candidai, numrul de combinri C28 este: COMBIN(8, 2) = 28.
- COS(number) ntoarce valoarea cosinusului unui unghi, dat n radiani,
(number).
Exemplificare: COS(1.047) =0,500171;
COS(60*PI()/180) = 0,5, (valoarea cosinusului de 60).
- COSH(number) ntoarce valoarea cosinusului hiperbolic a unui unghi, dat
n radiani.
Elemente de baz Microsoft Excel pentru modelare i simulare 459
Exemplificare: COSH(4) = 27,30823.
- DEGREES(angle) convertete radiani (angle) n grade.
Exemplificare: DEGREES(PI()) = 180 (corespondena n a lui ).
- EVEN(number) ntoarce valoarea rotunjit, la urmtorul ntreg, par, al
unui numr (number).
Exemplificare: EVEN(0.5) = 2; EVEN(2) = 2; EVEN(-1) =-2.
- EXP(number) ntoarce valoarea ridicrii constantei e (2,718282), la o
putere dat (number).
Exemplificare: EXP(1) = 2,718282 (valoarea aproximativ a lui e);
EXP(2) = 7.389056 (e2).
- FACT(number) ntoarce valoarea factorial (1*2*3) a unui numr
nenegativ (number).
Exemplificare: FACT(5) = 120;
FACT(1.9) = FACT(1) = 1; FACT(0) = 1.
- FLOOR(number,significance) rotunjete un numr (number), n jos, pn
la urmtorul multiplu semnificativ specificat (significance).
Exemplificare: FLOOR(2.5, 1) = 2;
FLOOR(-2.5, -2) = 2;
FLOOR(1.5, 0.1) =1,5.
- INT(number) rotunjete, n jos, un numr (number), pn la cel mai
apropiat ntreg.
Exemplificare: INT(8.9) = 8; INT(-8.9) = -9.
- LN(number) ntoarce valoarea logaritmului natural al unui numr
(number).
Exemplificare: LN(2.7182818) =1; LN(86) = 4,4543047.
- LOG(number,base) ntoarce valoarea logaritmului unui numr (number),
n baza specificat (base). Dac nu se specific baza, se ia valoarea 10, calculndu-
se astfel, logaritmul n baza 10 al numrului specificat.
Exemplificare: LOG(10) = 1; LOG(8, 2) =3.
- LOG10(number) ntoarce valoarea logaritmului unui numr (number) n
baza 10.
Exemplificare: LOG10(86) = 1,934498451; LOG10(10) = 1.
- MDETERM(array) ntoarce determinantul a unei matrice date cu un
numr egal de linii i coloane (array).
Exemplificare: MDETERM({1,3,8,5;1,3,6,1;1,1,1,0;7,3,10,2}) =88;
MDETERM({3,6,1;1,1,0;3,10,2}) =1;
MDETERM({3,6;1,1}) =-3.
- MINVERSE(array) ntoarce matricea invers a unei matrice date cu un
numr egal de linii i coloane (array).
Exemplificare: MINVERSE({4,-1;2,0}) = {0,0.5;-1,2);
MINVERSE({1,2,1;3,4,-1;0,2,0})={0.25,0.25,-0.75; 0,0,0.5; 0.75,-0.25,-0.25}.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 460
- MMULT(array1,array2) ntoarce la dou matrice, produsul este o matrice
cu acelai numr de linii ca prima matrice a produsului (array1) i acelai numr
de coloane cu cea de-a doua matrice (array2).
Exemplificare: MMULT({1,3;7,2}, {2,0;0,2}) = {2,6;14,4;
MMULT({3,0;2,0}, {2,0;0,2}) = {6,0;4,0.
- MOD(number,divisor) ntoarce restul, dup mprirea unui numr
(number) cu un divizor (divisor).
Exemplificare: MOD(3, 2) = 1; MOD(-3, 2) = 1;
MOD(3, -2) = -1; MOD(-3, -2) = -1.
- ODD(number) ntoarce, valoarea rotunjit la urmtorul ntreg impar, a unui
numr (number).
Exemplificare: ODD(1.5) = 3; ODD(3) = 3; ODD(-1) = 1.
- PI( ) ntoarce valoarea 3,14159265358979, a constantei matematice .
Exemplificare: PI()/2 = 1,57079...
- POWER(number,power) ntoarce valoarea unui numr (number) ridicat
la o putere (power).
Exemplificare: POWER(5,2) = 25;
POWER(98.6,3.2) = 2401077;
POWER(4,5/4) = 5.656854.
- PRODUCT(number1,number2, ...) ntoarce produsul tuturor numerelor
date ca argumente (number1,number2, ...).
Exemplificare: Dac celulele A2:C2 conin numerele: 5, 15, i 30:
PRODUCT(A2:C2) = 2250; PRODUCT(A2:C2, 2) = 4500.
- RADIANS(angle) convertete ,n radiani, valoarea unui unghi, specificat
n grade (angle).
Exemplificare: RADIANS(270) = 4,712389 (3/2).
- RAND( ) ntoarce un numr, randomic, distribuit ntre 0 i 1.
Exemplificare: Pentru a genera randomic un numr mai mare sau egal cu 0
i mai mic dect 100: RAND()*100.
- ROMAN(number,form) convertete un scris n form arab (number), n
form roman, (form) precizeaz tipul de numeral roman dorit: 0 sau nespecificat
clasic; 1 concis; 2 concis; 3 concis; 4 simplificat, TRUE clasic,
FALSE simplificat.
Exemplificare: ROMAN(499,0) = CDXCIX;
ROMAN(499,1) = LDVLIV;
ROMAN(499,2) = XDIX;
ROMAN(499,3) = VDIV;
ROMAN(499,4) = ID;
ROMAN(1993,0) = MCMXCIII.
- ROUND(number,num_digits) rotunjete un numr (number) la numrul
de zecimale precizat (num_digits).
Exemplificare: ROUND(2.15, 1) = 2,2;
Elemente de baz Microsoft Excel pentru modelare i simulare 461
ROUND(-1.475, 2) = -1,48;
ROUND(21.5, -1) = 20.
- ROUNDDOWN(number,num_digits) rotunjete, n jos, un numr
(number) la numrul de zecimale precizat (num_digits).
Exemplificare: ROUNDDOWN(76.9,0) = 76
ROUNDDOWN(-3.14159, 1) = 3,1
ROUNDDOWN(31415.92654, -2) = 31,400
- ROUNDUP(number,num_digits) rotunjete, n sus, un numr (number)
la numrul de zecimale precizat (num_digits).
Exemplificare: ROUNDUP(76.9,0) = 77;
ROUNDUP(-3.14159, 1) = 3,2;
ROUNDUP(31415.92654, -2) = 31,500.
- SIGN(number) determin semnul unui numr dat (number). Dac
numrul este 0, atunci valoarea ntoars este 0.
Exemplificare: SIGN(10) =1; SIGN(4-4) = 0; SIGN(-0.00001) = -1.
- SIN(number) ntoarce valoarea sinusului unui unghi dat (number).
Exemplificare: SIN(PI()) = 1,22E-16 ( sinusul lui este zero);
SIN(PI()/2) = 1; SIN(30*PI()/180) = 0,5, (sin30).
- SINH(number) ntoarce valoarea sinusului hiperbolic al unui numr
(number).
Exemplificare: SINH(1) =1,175201194; SINH(-1) = -1,175201194.
- SQRT(number) ntoarce valoarea rdcinii ptrate a unui numr dat
(number).
Exemplificare: SQRT(16) = 4; SQRT(ABS(-16)) = 4.
- SUBTOTAL(function_num,ref1,ref2,) ntoarce subtotalul unei liste sau
baze de date, ce poate fi definit de maximum 29 de referine (ref1, ref2,), tipul
funciei (function_num) poate avea 11 valori: 1 - AVERAGE; 2 COUNT; 3
COUNTA; 4 MAX; 5 MIN; 6 PRODUCT; 7 STDEV; 8 STDEVP; 9
SUM; 10 VAR; 11 VARP.
Exemplificare: SUBTOTAL(9,C3:C5) va genera un subtotal al celulelor
C3:C5, utiliznd funcia SUM.
- SUM(number1,number2, ...) nsumeaz numerele din celulele precizate
(number1,number2, ...).
Exemplificare: Dac A2:E2 conin: 5, 15, 30, 40 i 50:
SUM(A2:C2) = 50; SUM(3, 2) = 5;
- SUMIF(range,criteria,sum_range) nsumeaz celulele care ntrunesc un
anumit criteriu.
Exemplificare: Dac celulele A1:A4 conin valorile corespunztoare unor
vnzri: 100000, 200000, 300000, 400000, iar B1:B4 valorile comisioanelor
corespunztoare: 7,000, 14000, 21000, 28000,
SUMIF(A1:A4,">160000",B1:B4) = 63000.
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 462
- SUMPRODUCT(array1,array2,array3, ...) multiplic componentele
corespunztoare din dou pn la 30 matrice date (array1,array2,array3, ...). i
ntoarce suma acestor produse.
Exemplificare: SUMPRODUCT({3,4;8,6;1,9}, {2,7;6,7;5,3}) =156.
- SUMSQ(number1,number2, ...) ntoarce suma ptratelor argumentelor
date (number1,number2, ...).
Exemplificare: SUMSQ(3, 4) = 25.
- SUMX2MY2(array_x,array_y) ntoarce suma diferenei dintre ptratele
valorilor care compun dou matrice date (array_x,array_y).
Exemplificare: SUMX2MY2({2, 3, 9, 1, 8, 7, 5}, {6, 5, 11, 7, 5, 4, 4}) =-55.
- SUMX2PY2(array_x,array_y) ntoarce suma nsumrii ptratelor
valorilor care compun dou matrice date (array_x,array_y).
Exemplificare: SUMX2PY2({2, 3, 9, 1, 8, 7, 5}, {6, 5, 11, 7, 5, 4, 4}) = 521.
- SUMXMY2(array_x,array_y) ntoarce suma ptratelor diferenelor dintre
valorile care compun dou matrice date (array_x,array_y).
Exemplificare: SUMXMY2({2, 3, 9, 1, 8, 7, 5}, {6, 5, 11, 7, 5, 4, 4}) = 79.
- TAN(number) ntoarce valoarea tangentei unghiului dat n radiani
(number).
Exemplificare: TAN(0.785) = 0,99920; TAN(45*PI()/180) = 1.
- TANH(number) ntoarce valoarea tangentei hiperbolice a unui unghi dat,
n radiani (number).
Exemplificare: TANH(-2) = -0,96403; TANH(0) = 0.
- TRUNC(number,num_digits) tunchiaz un numr (number), cu o
precizie specificat (num_digits); dac aceasta nu se specific, valoarea luat de
precizie este 0.
Exemplificare: TRUNC(8.9) = 8; TRUNC(-8.9) = 8.
22.3. Lucrul cu diagrame
22.3.1. Crearea diagramelor
Realizarea unor grafice sau diagrame este deosebit de util, att din punctul
de vedere al celui care o realizeaz (care poate descoperi mai uor din noianul de
date pe cele semnificative), ct i din cel al unui observator neavizat, care poate
nelege astfel mai uor semnificaia sau utilitatea unor iruri de date sau tabele de
cifre, consistente.
n general, n cadrul graficelor (diagramelor), datele sunt reprezentate ntr-un
sistem de coordonate XOY, formnd puncte sau serii de date. Axa OY este axa
valorilor dependente de categoriile de date incluse pe axa OX, axa categoriilor. Se
mai poate spune c axa OY constituie variabila dependent, iar axa OX variabila
independent.
Crearea graficelor n cadrul Microsoft Excel este simpl: astfel, mai nti se
Elemente de baz Microsoft Excel pentru modelare i simulare 463
selecteaz domeniul de date pentru care se dorete realizarea graficului, se alege
din meniu opiunea Insert-Chart sau se apas din bar butonul ChartWizard
i apoi se alege tipul de grafic (diagram) adecvat.

22.3.2. Tipuri de diagrame
O diagram trebuie s ilustreze corect datele selectate. Programul Microsoft
Excel prezint mai multe tipuri i subtipuri de grafice (diagrame):
-diagrame cu coloane (Column) - sunt folosite pentru ilustrarea comparaiilor
dintre diferite categorii de date prezente n selecie (exist tipuri similare de
diagrame, n care coloanele sunt nlocuite de figuri geometrice n spaiu: Cylinder,
Cone, Pyramid);
-diagrame cu bare (Bar) - sunt similare cu cele anterioare, cu deosebirea c,
coloanele verticale sunt nlocuite de bare orizontale (exist tipuri similare de
diagrame, n care barele sunt nlocuite de figuri geometrice n spaiu: Cylinder,
Cone, Pyramid);
-diagrame cu linii (Line) - ilustreaz evoluia n timp a unor categorii de date;
-diagrame circulare (Pie sau Doughnut) - sunt utilizate pentru evidenierea
unor relaii dintre pri i ntreg;
-diagrame cu suprafee (Area) - sunt asemntoare celor cu linii, permind
evidenierea evoluiei, dar i cu cele circulare, deoarece permit compararea
proporiilor;
-diagrame prin puncte (Scatter) - sunt marcate punctele n coordonate XOY
i eventual liniile care le unesc; pot fi considerate ca fiind neutre din punct de
vedere al evidenierii unor caracteristici a datelor selectate;
-diagrame radar (Radar) - prezint simultan relaiile dintre diferitele serii de
date i dintre fiecare serie de date i ansamblul lor;
-diagrame cu suprafee (Surface)- sunt utilizate pentru reprezentarea
relaiilor dintre dou sau mai multe variabile, evideniind zonele nalte i joase
dintr-un set mare de date;
-diagrame cu buline (Bubbles) - marcheaz punctele n coordonate XOY,
bulinele reflectnd i dimensiunea valorii y.
Diagrame cu coloane
Se compar rezultatele obinute de mai muli candidai, n al doilea tur al
alegerilor locale, dintr-un ora oarecare: A 40%, B 60%. Exist mai multe
moduri (subtipuri) de reprezentare, prin diagrame cu coloane, a acestei situaii:
Clustered column (2-D) compar valorile corespunztoare fiecrei
categorii;
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 464
Rezultatele alegerilor (Tur 2)
0%
10%
20%
30%
40%
50%
60%
A B


- Clustered column (3-D) - variant n trei dimensiuni a subtipului anterior.
0%
10%
20%
30%
40%
50%
60%
A B
Rezultatele alegerilor (Tur 2)

- 3-D column- variant n trei dimensiuni a subtipului anterior, care prezint
aezarea coloanelor corespunztoare fiecrei categorii, n linie sau rnd.
A
B
Rezultatele
alegerilor (Tur 2)
0%
10%
20%
30%
40%
50%
60%

Elemente de baz Microsoft Excel pentru modelare i simulare 465
Rezultatele
alegerilor (Tur 2)
A
B
0%
10%
20%
30%
40%
50%
60%

- 3-D column with cylindrical shape- variant n trei dimensiuni a
subtipului anterior, n care coloanele sunt nlocuite de cilindrii.
A
B
Rezultatele
alegerilor (Tur 2)
0%
10%
20%
30%
40%
50%
60%

Rezultatele
alegerilor (Tur 2)
A
B
0%
10%
20%
30%
40%
50%
60%

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 466
- 3-D column with conical shape- variant n trei dimensiuni a subtipului
anterior, n care coloanele sunt nlocuite de conuri.
A
B
Rezultatele
alegerilor (Tur 2)
0%
10%
20%
30%
40%
50%
60%

Rezultatele
alegerilor (Tur 2)
A
B
0%
10%
20%
30%
40%
50%
60%

- 3-D column with pyramid shape- variant n trei dimensiuni a subtipului
anterior, n care coloanele sunt nlocuite de piramide.
A
B
Rezultatele
alegerilor (Tur 2)
0%
10%
20%
30%
40%
50%
60%

Elemente de baz Microsoft Excel pentru modelare i simulare 467
Rezultatele
alegerilor (Tur 2)
A
B
0%
10%
20%
30%
40%
50%
60%

- Column with cylindrical shape- variant n trei dimensiuni a subtipului
Clustered Columnn, n care coloanele sunt nlocuite de cilindrii:
A
B
0%
10%
20%
30%
40%
50%
60%
Rezultatele alegerilor (Tur 2)

- Column with a conical shape- variant n trei dimensiuni a subtipului
anterior, n care coloanele sunt nlocuite de conuri:
A
B
0%
10%
20%
30%
40%
50%
60%
Rezultatele alegerilor (Tur 2)

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 468
- Column with a pyramid shape- variant n trei dimensiuni a subtipului
anterior, n care coloanele sunt nlocuite de piramide:
A
B
0%
10%
20%
30%
40%
50%
60%
Rezultatele alegerilor (Tur 2)

- Stacked column (2-D) compar contribuia fiecrei categorii la total.
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Rezultatele alegerilor (Tur 2)

- Stacked column (3-D) variant n trei dimensiuni a subtipului anterior.
Rezultatele
alegerilor (Tur 2)
0%
20%
40%
60%
80%
100%

Elemente de baz Microsoft Excel pentru modelare i simulare 469
- Stacked column with cylindrical shape- variant n trei dimensiuni a
subtipului anterior, n care coloana este nlocuit de cilindru:
Rezultatele
alegerilor (Tur 2)
0%
20%
40%
60%
80%
100%

- Stacked column with conical shape- variant n trei dimensiuni a
subtipului anterior, n care coloana este nlocuit de con:
Rezultatele
alegerilor (Tur 2)
0%
20%
40%
60%
80%
100%

- Stacked column with pyramid shape- variant n trei dimensiuni a
subtipului anterior, n care coloana este nlocuit de piramid:
Rezultatele
alegerilor (Tur 2)
0%
20%
40%
60%
80%
100%

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 470
Diagrame cu bare
Se compar rezultatele obinute de mai muli candidai, n al doilea tur al
alegerilor locale dintr-un ora oarecare: A 40%, B 60%. Exist mai multe
moduri (subtipuri) de reprezentare, prin diagrame cu bare, a acestei situaii:
- Clustered bar (2-D)compar valorile corespunztoare fiecrei categorii.
Rezultatele alegerilor (Tur 2)
0% 10% 20% 30% 40% 50% 60%
A
B

- Clustered bar (3-D) - variant n trei dimensiuni a subtipului anterior.
0% 20% 40% 60%
A
B
Rezultatele alegerilor (Tur 2)

- Bar with a cylindrical shape- variant n trei dimensiuni a subtipului
anterior, n care bara este nlocuit de cilindru.
0% 20% 40% 60%
A
B
Rezultatele alegerilor (Tur 2)

Elemente de baz Microsoft Excel pentru modelare i simulare 471
- Bar with a conical shape- variant n trei dimensiuni a subtipului anterior,
n care bara este nlocuit de con.
0% 20% 40% 60%
A
B
Rezultatele alegerilor (Tur 2)

- Bar with a pyramid shape- variant n trei dimensiuni a subtipului
anterior, n care bara este nlocuit de piramid.
0% 20% 40% 60%
A
B
Rezultatele alegerilor (Tur 2)

- Stacked bar (2-D) compar contribuia fiecrei categorii la total.
0% 20% 40% 60% 80% 100%
Rezultatele
alegerilor (Tur 2)


SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 472
- Stacked bar (3-D) variant n trei dimensiuni a subtipului anterior.
0% 20% 40% 60% 80% 100%
Rezultatele
alegerilor (Tur 2)


- Stacked bar with a cylindrical shape variant n trei dimensiuni a
subtipului anterior, n care bara este nlocuit de cilindru..
0% 20% 40% 60% 80% 100%
Rezultatele
alegerilor (Tur 2)

- Stacked bar with a conical shape variant n trei dimensiuni a subtipului
anterior, n care bara este nlocuit de con.
0% 20% 40% 60% 80% 100%
Rezultatele
alegerilor (Tur 2)

Elemente de baz Microsoft Excel pentru modelare i simulare 473
- Stacked bar with a pyramid shape variant n trei dimensiuni a
subtipului anterior, n care bara este nlocuit de piramid.
0% 20% 40% 60% 80% 100%
Rezultatele
alegerilor (Tur 2)

Diagrame cu linii
n scopul realizrii unor evaluri ale tendinelor cererii de detergent de pe
pia, se compar vnzrile (n kilograme) de detergent lichid i detergent praf,
nregistrate de un magazin ntr-o sptmn.

Ziua Detergent lichid [kg] Detergent praf [kg]
1 33 30
2 30 33
3 35 31
4 34 37
5 33 36
6 36 38
7 32 35

Exist mai multe moduri (subtipuri) de reprezentare prin diagrame cu linii:
- Line prezint prin linii, tendinele fiecrei categorii, pe o perioad de
timp:
Comparatii ale vanzarilor
0
5
10
15
20
25
30
35
40
1 2 3 4 5 6 7
Zile
K
i
l
o
g
r
a
m
e
Detergent lichid
Detergent praf

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 474
- 3-D Line variant n trei dimensiuni a subtipului anterior.
1
2
3
4
5
6
7
0
10
20
30
40
K
i
l
o
g
r
a
m
e
Zile
Comparatii ale vanzarilor
Detegent lichid
Detergent praf


- Line with markers prezint prin linii, pe care sunt marcate punctele
cunoscute, tendinele caracteristice ale fiecrei categorii, pe o perioad de timp:
Comparatii ale vazarilor
0
5
10
15
20
25
30
35
40
1 2 3 4 5 6 7 Zile
K
i
l
o
g
r
a
m
e
Detergent lichid
Detergent praf

Diagrame circulare
Se compar rezultatele obinute de mai muli candidai, n al doilea tur al
alegerilor locale, dintr-un ora oarecare: A 40%, B 60%. Exist mai multe
moduri (subtipuri) de reprezentare, prin diagrame circulare, a acestei situaii:
- Pie - prezint sub forma feliilor dintr-o plcint contribuia fiecrei valori la
total.
Rezultatele alegerilor
(Tur 2)
A B


Elemente de baz Microsoft Excel pentru modelare i simulare 475
- Pie 3-D- variant n trei dimensiuni a subtipului anterior:

Rezultatele alegerilor (Tur 2) A B


- Exploded Pie prezint, sub forma feliilor tiate dintr-o plcint,
contribuia fiecrei valori la total.
Rezultatele alegerilor
(Tur 2)
A B


- Exploded Pie 3-D- variant n trei dimensiuni a subtipului anterior.
Rezultatele alegerilor
(Tur 2)
A B


- Doughnut prezint, sub forma feliilor dintr-o gogoa, contribuia fiecrei
valori la total, (sunt asemntoare cu cele circulare, cu deosebirea c, permit
reprezentarea mai multor serii, cu ajutorul a dou sau mai multor cercuri
concentrice). Astfel, pe lng prezentarea rezultatelor de la al doilea tur de scrutin:
A-40% i B-60% (cerc exterior), se pot prezenta i rezultatele obinute de cei patru
candidai iniiali, la primul tur: A-35%, B-30%, C-20%, C-15% (cerc interior).
SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 476
Rezultatele alegerilor
(Ambele tururi )
A B
C D


- Exploded Doughnut 3-D- prezint, sub forma feliilor tiate dintr-o
gogoa, contribuia fiecrei valori la total.
Se pot astfel evidenia, scorurile obinute de fiecare candidat, la fiecare tur.
Rezultatele alegerilor
(Ambele tururi)
A B
C D


Diagrame cu suprafee
Se compar vnzrile (n kilograme) de detergent lichid i detergent praf,
nregistrate de un magazin ntr-o sptmn.

Ziua Detergent lichid [kg] Detergent praf [kg]
1 25 27
2 30 33
3 35 31
4 34 37
5 33 36
6 36 38
7 32 35

Exist subtipuri de diagrame cu suprafee pentru prezentarea comparaiei:
Elemente de baz Microsoft Excel pentru modelare i simulare 477
- Area prezint, prin suprafee, asemeni colinelor, tendinele cronologice
ale fiecrei categorii (nu se pot observa simultan, ca la Line, ambele tendine):
Comparatii vanzari
0
5
10
15
20
25
30
35
40
1 2 3 4 5 6 7
Detergent lichid [kg]
Detergent praf [kg]

- Area 3-D- variant n trei dimensiuni a subtipului anterior.
1
2
3
4
5
6
7
0
5
10
15
20
25
30
35
40
Comparatii vanzari
Detergent lichid [kg]
Detergent praf [kg]

- Stacked Area prezint prin suprafee, tendinele fiecrei categorii,
permind i compararea proporiilor din total (vnzri detergent) ale fiecreia.
Comparatii vanzari
0
10
20
30
40
50
60
70
80
1 2 3 4 5 6 7
Detergent praf [kg]
Detergent lichid [kg]

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 478
- Stacked Area 3-D- variant n trei dimensiuni a subtipului anterior.
1
2
3
4
5
6
7
0
10
20
30
40
50
60
70
80
Comparatii vanzari
Detergent praf [kg]
Detergent lichid [kg]

- 100% Stacked Area prezint, prin suprafee, procentele din total (vnzri
detergent), corespunztoare tendinelor cronologice ale fiecrei categorii.
Comparatii vanzari
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
1 2 3 4 5 6 7
Detergent praf [kg]
Detergent lichid [kg]

- 100% Stacked Area 3-D variant n trei dimensiuni a subtipului anterior.
1
2
3
4
5
6
7
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Comparatii vanzari
Detergent praf [kg]
Detergent lichid [kg]

Elemente de baz Microsoft Excel pentru modelare i simulare 479
Diagrame prin puncte
Un aparat de aer condiionat, care asigur o temperatur interioar constant,
are un consum de energie diferit, n funciede temperatura exterioar t
ext
,creia
trebuie s i fac fa, astfel:

t
ext

[C]
16,7 19,2 22,1 25 27,8 31,5 33,3 36,1 38,9 42,4 44,3
P
cons

[W]
901 910 919 927 936 944 952 975 1018 1051 1071

Ilustrarea dependenei, dintre temperatura exterioar i consumul de energie
necesar meninerii la interior a unei temperaturi constante de 20C, se poate face n
mai multe moduri:
- Scatter este evideniat prin puncte dependena Pcons(text):
850
900
950
1000
1050
1100
15 20 25 30 35 40 45
t
ext
[
o
]
P
c
o
n
s


- Scatter with lineseste evideniat prin puncte i linii dependena
Pcons(text):
850
900
950
1000
1050
1100
15 20 25 30 35 40 45
t
ext
[
o
]
P
c
o
n
s


SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 480
- Scatter with lines without markers este evideniat doar prin linii (fr
puncte) dependena Pcons(text):
850
900
950
1000
1050
1100
15 20 25 30 35 40 45
t
ext
[
o
]
P
c
o
n
s


Diagrame radar
Se dorete ilustrarea rezultatelor obinute de cei patru candidaii participani
la primul tur al alegerilor: A-35%, B-30%, C-20%, C-15%.
Exist mai multe subtipuri de diagrame radar, cu ajutorul crora pot fi
reprezentate scorurile electorale obinute de candidaii A, B, C, D. Acest tip de
diagrame este mai puin utilizat n aplicaiile obinuite, fiind mai ales folosit n
cadrul aplicaiilor complexe, care implic studii statistice sau management de
proiecte:
- Radar - ilustreaz dimensiunea valorilor, prin distana fa de un punct fix,
central:
Rezultatele alegerilor
(Tur 1)
0%
5%
10%
15%
20%
25%
30%
35%
A
B
C
D


Elemente de baz Microsoft Excel pentru modelare i simulare 481
- Radar with markers - ilustreaz dimensiunea valorilor, prin distana fa de
un punct fix, central, a punctelor corespunztoare acestora:
Rezultatele alegerilor
(Tur 1)
0%
5%
10%
15%
20%
25%
30%
35%
A
B
C
D

- Radar - ilustreaz dimensiunea valorilor, prin distana fa de un punct fix,
central, a punctelor corespunztoare acestora i suprafaa dintre acestea:

Rezultatele alegerilor
(Tur 1)
0%
5%
10%
15%
20%
25%
30%
35%
A
B
C
D

Diagrame cu suprafee
n scopul realizrii unor evaluri a vnzrilor zilnice, se compar, pentru
fiecare zi a sptmnii, vnzrile (n kilograme) de detergent lichid i detergent
praf, nregistrate de un magazin ntr-o sptmn.

Ziua Detergent lichid [kg] Detergent praf [kg]
1 25 27
2 30 33
3 35 31
4 34 37
5 33 36
6 36 38
7 32 35

SISTEME DE PROGRAMARE PENTRU MODELARE I SIMULARE 482
Exist mai multe moduri de reprezentare prin diagrame cu suprafee, a
fiecrei categorii de cantitate vndut; indiferent de tipul mrfii (0-10 kg, 10-20 kg,
20-30 kg, 30-40 kg), i se atribuie o culoare:
- 3-D Surface - ilustreaz n trei dimensiuni cu ajutorul unei suprafee pline:
1
2
3
4
5
6
7
0
10
20
30
40
30-40
20-30
10-20
0-10



- Wireframe Surface - ilustreaz n trei dimensiuni, cu ajutorul unei
suprafee conturate, neumplute:

1
2
3
4
5
6
7
0
10
20
30
40
30-40
20-30
10-20
0-10


- Contour- diagram cu suprafee, prezentat sub forma vederii de sus a
suprafeelor pline, corespunztoare fiecrei categorii:
1 2 3 4 5 6 7
0-10 10-20 20-30 30-40


Elemente de baz Microsoft Excel pentru modelare i simulare 483
- Wireframe Contour- diagram cu suprafee, prezentat sub forma vederii de
sus a suprafeelor conturate, neumplute, corespunztoare fiecrei categorii:
1 2 3 4 5 6 7
0-10 10-20 20-30 30-40

Diagrame cu buline
n scopul realizrii unor evaluri a vnzrilor zilnice, se compar, pentru
fiecare zi a sptmnii, vnzrile (n kilograme) de detergent lichid, nregistrate de
un magazin ntr-o sptmn.
Ziua Detergent lichid [kg]
1 25
2 30
3 35
4 34
5 33
6 36
7 32
- Bubbles se compar datele att pe baza poziiei n coordonate XOY, ct i
a dimensiunii bulinelor:
Detergent lichid [kg]
0
5
10
15
20
25
30
35
40
45
0 2 4 6 8

- Bubbles (3-D) variant n trei dimensiuni a subtipului anterior
Detergent lichid [kg]
0
5
10
15
20
25
30
35
40
45
0 2 4 6 8

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