You are on page 1of 91

1.

Introducere in Matlab
1.1 Despre Matlab
Matlab este un limbaj de inalta performanta pentru calcul tehnic, conform producatorului The MathWorks,
Inc. Integreaza, intr-un sistem interactiv, elemente de calcul, vizualizare si programare, fiind folosit, in mod
tipic, pentru: matematica si calcul; dezvoltarea de algoritmi; modelare, simulare si creare prototipuri; analiza de
date, explorare si vizualizare; grafice stiintifice si tehnice; dezvoltare de aplicatii, incluzand interfata grafica
utilizator. Deasemeni, Matlab include biblioteci de functii Matlab, numite toolbox - uri, orientate pe categorii de
probleme, cum sunt procesare semnal, sisteme de control, retele neurale, logica fuzzy, functii wavelets,
optimizare, simulare s.a., oferind utilizatorului atat posibilitatea de a asimila tehnicile specializate cat si de a le
folosi in aplicatii.
Denumirea Matlab provine de la matrix laboratory, programul fiind conceput initial pentru a facilita accesul
la softul performant de calculul matriceal LINPACK si EISPACK. Caracteristica principala a sistemului
interactiv Matlab este ca opereaza cu siruri de date care nu necesita dimensionare, astfel ca editarea programelor
pentru rezolvarea unor probleme de calcul tehnic, in special a celor care includ matrici si vectori, necesita mult
mai putin timp decat in cazul folosirii unor limbaje neinteractive care opereaza cu scalari, cum sunt C sau
Fortran.
In timp, Matlab - ul a fost extins, uneori cu contributia utilizatorilor, si adaptat la evolutia sistemelor de
operare si a tehnicii de calcul. A fiost lansat in mai multe versiuni succesive, de referinta fiind versiunile 4, 5 si,
cea mai recenta, 6. Este folosit pe scara larga in mediile universitare din intreaga lume in activitatile de instruire,
cercetare siintifica si tehnica, precum si in industrie, in activitati de analiza, cercetare si dezvoltare.
1.2 Instalarea programului Matlab
Programul Matlab este furnizat, de regula, pe un compact disk (CD), fiind necesara, pentru instalarea pe un
calculator, licenta de folosire a programului. Poate fi procurat, deasemeni, direct de la firma producatoare (The
Math Work Inc) folosind reteaua internet, care furnizeaza unele variante, in anumite conditii, in modul liber de
utilizare (fara plata licentei), in special pentru studenti si universitati.
Cerintele de hard si soft difera in functie de varianta de program Matlab. De exemplu, pentru Matlab,
versiunea 5.1, acestea sunt: sistem de calcul - minimum 486 DX , sistem de operare - Windows 95, Windows NT
sau mai recent, placa video - pe minimum 8 biti, spatiu de memorare pe hard disk - 115 MB pentru Matlab si
250 MB pentru Matlab si Help, memorie interna - minimum 8 MB, recomandat 16 MB sub Windows 95,
minimum 12 MB, recomandat 16 MB sub Windows NT. Se recomanda spatiu larg de memorare, accelerator
grafic, imprimanta, placa de sunet iar pentru vizualizarea documentelor din Matlab Help Desk, sunt necesare
programele Netscape Navigator sau Microsoft Internet Explorer pentru fisierele de tip HTML, si programul
Adobe Acrobat Reader pentru fisierele de tip PDF.
Pentru instalarea programului Matlab pe un calculator, sub sistemul de operare Windows se deschide
fereastra Start, se selecteaza din meniu Settings, apoi Control Panel; cu dublu clic mouse se lanseaza apoi in
executie Add/Remove Programs; din meniul acestuia, se selecteaza Install si, cu ajutorul comenzii Browse, se
selecteaza fisierul Setup.exe din kit - ul Matlab, dupa care se continua urmarind dialogul propus de programul de
instalare. In cazul unei instalari corecte a programului Matlab, este afisat, in final, un mesaj in acest sens.
1.3 Lansarea programului in executie
Lansarea in executie a programului Matlab sub controlul sistemului de operare Windows, se poate face
folosind unul dintre urmatoarele moduri:
1) dublu clic buton stanga mouse pe fereastra shortcut Matlab;
2) se deschide fereastra Start a Windows - ului, se selecteaza Programs, apoi, din submeniu, Matlab (sau alt
nume sub care a fost instalat programul), apoi numele fisierului executabil Matlab si se tasteaza Enter;

3) Se deschide fereastra Start, se selecteaza din meniu comanda Run, se tasteaza sau se inscrie cu ajutorul
comenzii Browse calea si numele fisierului matlab.exe, dupa care se tasteaza Enter.
Dupa lansarea in executie, programele Matlab in versiunile pana la 5.3 inclusiv, deschid o fereastra de lucru
Matlab, cu un meniu de comenzi, si prompterul de linie program >, fiind gata sa execute o comanda sau o
instructiune Matlab. In versiunea 6 (rel.12), programul deschide trei ferestre - una pentru comenzi si instructiuni
Matlab (fereastra curenta de lucru in Matlab), una pentru editare fisiere Matlab (denumite de tip script programe, functii externe, baze de date), si una pentru istoricul sesiunii de lucru curente.
1.4 Meniul ferestrei curente de lucru
In fereastra de instructiuni si comenzi Matlab, meniul afisat in partea de sus a ferestrei contine optiunile: File,
Edit, Window, Help. Cu un clic stanga mouse pe una dintre fereastre, se deschide submeniul acesteia.
Deasemeni, deschiderea unui submeniu se poate face tastand simultan Alt si F pentru File, Alt si E pentru Edit,
Alt si W pentru Windows si Alt si H pentru Help. Inchiderea submeniului se face cu clic stanga mouse pe
fereastra respectiva sau tastand Esc. Submeniurile ferestrelor de comenzi sunt prezentate in continuare.
Fereastra File
New, cu submeniul si functiile acestuia:
M - File - deschide fereastra editorului de fisiere Matlab;
Figure - deschide o fereastra pentru o figura (grafic) Matlab;
Model - deschide o fereastra pentru construirea unui model simulink, si o fereastra cu elementele de
modelare din biblioteca simulink;
Open - pentru deschiderea unui fisier Matlab;
Open Selection - deschide un fisier Matlab selectat cu mouse - ul de pe ecranul de lucru curent (selectarea se
face prin apasarea continua a butonului stanga mouse simultan cu deplasarea cursorului mouse pe numele
fisierului pe are dorim sa-l selectam);
Run Script - deschide o fereastra pentru inscrierea caii si numelui unui program Matlab in vederea lansarii in
executie; inscrierea poate fi facuta de la tastatura sau cu ajutorul comenzii Browse din meniul ferestrei,iar
lansarea in executie prin clic mouse pe fereastra OK sau tastand Enter;
Load Workspace - deschide o fereastra pentru selectarea si incarcarea unui fisier de tip .mat care contine un
spatiu de lucru salvat anterior. Un spatiu de lucru include numele si valorile curente ale variabilelor,
dimensiunile, spatiul de memorie alocat si marimile lor dintr-o sesiune de lucru. O sesiune de lucru este
reprezntata de activitatea in Matlab desfasurata intre momentul imediat dupa lansarea in executie a programului
si un moment curent considerat. Selectarea si incarcarea fisierului se poate face fie prin tastarea caii si numelui in
fereastra File name din submeniu, urmata de activarea comenzii din fereastra Open, fie cu ajutorul mouse - ului
si a ferestrei de comanda Open pentru inspectarea directorilor si selectarea fisierului;
Save Workspace As ... - deschide o fereastra pentru salvarea spatiului de lucru curent intr-un fisier de tip
.mat. Calea fiserului poate fi selectata cu ajutorul mouse - ului sau poate fi inscrisa de la tastatura in fereastra
File name, iar numele fisierului trebuie inscris de la tastatura. Pentru salvarea fisierului, se foloseste fereastra de
comanda Save din submeniu;
Show Workspace - deschide o fereastra pentru afisarea spatiului de lucru curent;
Show Graphics Property Editor - deschide o fereastra cu afisarea proprietatilor editorului grafic;
Show GUI Layout Tool - deschide o fereastra pentru afisarea mijloacelor de lucru ale unitatii de interfata
grafica;
Set Path ... - permite includerea unui director in calea de cautare a Matlab - ului;
Preferences ... - deschide un meniu cu urmatoarele ferestre: General, Command, Window Font si Copying
Options.
Fereastra General include subferestrele:
Numeric Format, pentru selectarea formatului de afisare a numerelor;
Editor Preference - pentru alegerea editorului de fisiere Matlab;
Help Directory - pentru precizarea caii si fisierului de help Matlab;

Echo on/off - pentru activare, respectiv dezactivare comanda echo;


Show Toolbar - optiune pentru afisare toolbar - meniu de comenzi apelabile prin shortcut - uri;
Enable Graphical Debugging - pentru activare sau dezactivare depanator grafica;
Fereastra Command Window Font include:
Font, Style, Size - pentru selectare tip, stil si marime litere folosite pentru afisare;
Background Color - pentru setare culoare hartie (fond ecran);
Color - pentru setare culoare cerneala (culoarea caracterelor afisate);
Display Fixed Pitch Only - pentru selectarea dintre tipurile de fonturi disponibile, afisate in lista ferestrei
Font, numai a celor cu marime fixa;
Fereastra Copying Options include subferestrele:
Clipboard format - pentru selectarea formatului grafic de memorare in clipboard, cu optiunile Windows
Metafile sau Windows Bitmap;
Honor figure size properties - pentru optiunea de adaptare, la copiere, a marimii unei figuri la pozitia
paginii;
White background - pentru optiunea de copiere a figurii cu culoarea fondului alba;
Print Setup - comanda pentru setarea optiunilor privind formatul paginii; deschide o fereastra cu
subferestrele Printer, Paper, Orientation, cu functiile:
Printer - pentru setarea imprimantei folosita pentru listare, si afisare statut, port bransare si comentariu
aferente imprimantei selectate; include si subfereastra Properties pentru setarea unor caracteristici privind
pagina, grafica, fonturile si optiuni de calitate si control imagine;
Paper - cu meniul Size pentru setare marime pagina si Source pentru setare mod de declansare printare manual sau automat;
Orientation - pentru setare orientare pagina, cu optiunile Portrait, pentru orientarea paginii cu latura lunga
pe verticala, si Landscape pentru orientarea paginii cu latura lunga pe orizontala;
Print - pentru printarea ecranelor afisate in sesiunea curenta de lucru; deschide o fereastra cu subferestrele
Printer, Print Range si Copies, cu functiile:
Printer - pentru setare imprimanta, la fel ca in cazul comenzii Print Setup, avand in plus optiunea Print to
File pentru salvarea selectiei intr-un fisier de tip .prn;
Print Range - cu optiunile All - pentru printarea tuturor ecranelor afisate in sesiunea de lucru curenta, si
Selection - pentru printarea numai a unei parti din afisaj, selectata in prealabil cu mouse - ul;
Copies - pentru fixarea numarului de copii ale textului printat (implicit 1);
Print Selection - pentru printarea unei parti din afisajul ecranele memorate de Matlab; derularea
inainte/inapoi a ecranelor memorate se face cu ajutorul tastelor Page Up/Page Down sau cu ajutorul mouse-ului
folosind butonul de pagina din partea dreapta a ferestrei de lucru; selectarea textului pentru printare se face cu
ajutorul mouse - ului (apasare continua buton stanga, simultan cu deplasare cursor mouse) . Comanda Print
Selection devine activa numai diupa selectarea textului si deschide o fereastra cu subferestrele Printer, Print
Range si Copies, cu aceleasi functii ca in cazul comenzii Print;
Exit Matlab - pentru iesirea din programul Matlab (inchiderea programului Matlab); acelasi efect se
Fereastra Edit
Comenzile din meniul acestei ferestre se refera la informatia afisata in fereastra curenta de lucru Matlab,
avand functii comune editoarelor de texte. Astfel:
Undo - ignora ultima comanda de editare;
Cut - sterge un text selectat;
Copy - copie un text selectat;
Paste - afiseaza un text copiat;
Clear - sterge ecranele din sesiunea de lucru curenta;
Select All - selecteaza tot textul din sesiunea curenta de lucru;
Clear Session - sterge tot textul din sesiunea curenta de lucru.

Fereastra Window
Afiseaza lista ferestrelor deschise pana in momentul curent de lucru, ferestrele fiind numerotate, incepand de
la zero, in ordinea deschiderii lor. O fereastra din meniu poate fi deschisa prin selectarea ei cu clic mouse. Poate
fi inchisa prin folosirea comenzii Close din meniul File al ferestrei deschise.
Fereastra Help
Help Window - dechide o fereastra pentru obtinerea de informatii privind elemente Matab (fereastra de help),
cu optiunile:
Matlab Help Topics - aici poate fi inscris un cuvant (sau un simbol) - cuvant cheie, dupa care, tastand
Enter, sunt afisate informatiile de baza referitoare la el (help - ul aferent) ;
See also - afiseaza o lista de cuvinte care au legatura cu cuvantul cheie; selectand cu mouse - ul un cuvant
din lista, este imediat afisat help - ul aferent;
Go to Help Desk - deschide o fereastra cu optiuni de cautare locala (in help extins Matlab) sau pe reteaua
internet, la adresa data de firma producatoare, pentru obtinerea de informatii extinse aferente cuvantului cheie
dat;
Back - pentru trecerea la ecranul de help afisat anterior;
Forward - pentru trecerea la ecranul de help urmator;
Home - pentru trecerea la ecranul initial, afisat dupa deschiderea ferestrei Help Window; acesta contine
fereastra HELP topics, cu numele principalelor fisiere de help Matlab; un fisier din lista poate fi deschis cu
dublu clic mouse, ca si help - ul pentru un cuvant cheie selectat din fisierul deschis;
Tips - pentru afisarea tipurilor de help disponibile;
Close - pentru inchiderea ferestrei de help.
1.5 Moduri de lucru in Matlab
Exista doua moduri de lucru in Matlab: modul de lucru direct si modul de lucru cu fisiere de tip script.
a. Modul de lucru direct
Dupa lansarea in executie a programului Matlab, in fereastra curenta de lucru se afiseaza cursorul de linie
program - caracterul > sau >>, si cursorul de caracter, reprezentat printr - o bara verticala aflata in flash
continuu (clipire continua). Din acest moment, poate fi editata (de regula de la tastatura) o linie de program, care
poate fi simpla - constand dintr - o instructiune sau o comanda Matlab, sau multipla - constand din mai multe
instructiuni si/sau comenzi Matlab separate intre ele prin caracterul , (virgula) sau caracterul ; (punct si
virgula). Daca se foloseste caracterul , (virgula), valoarea curenta a variabilei din instructiunea de alocare
aflata in stanga virgulei este afisata pe ecran; daca se foloseste caracterul ; (punct si virgula), aceasta nu este
afisata.
O linie program poate fi editata pe una sau mai multe linii ecran (fizice). In al doilea caz se foloseste grupul
de caractere ... (trei puncte) pentru a semnifica o continuare de linie program. Trebuie evitata includerea
acestui grup de caractere intre doua apostrofuri ale unei instructiuni sau comenzi Matlab. Unele instructiuni
Matlab nu mai necesita indicarea continuarii liniei de program (de exemplu, la alocarea elementelor unei
matrice, o linie fizica semnifica o linie a matricei. Deplasarea cursorului de caracter pe linie poate fi facuta fie
prin pozitionare cu mouse - ul, fie prin deplasarea cu ajutorul tastelor " " ," " (sageata dreapta, sageata
stanga). Pentru stergerea unui caracter editat, pot fi folosite tastele Delete sau Back Space.
Dupa editarea unei linii de program, se tasteaza Enter si aceasta este executata imediat. Similar, se editeaza o
noua linie, se executa s.a.m.d. Liniile de program executate sunt memorate automat si pot fi selectate, in vederea
reactivarii lor, folosind tastele "" ,"" (sageata in sus, sageata in jos). Deasemeni, liniile de program deja
editate pot fi copiate de pe ecran (v. Copy din meniul ferestrei Edit) si inscrise pe linia curenta (v. Paste, din

acelasi meniu), in vederea reutilizarii lor. Deplasarea inapoi/inainte a ecranelor de afisaj poate fi efectuata cu
ajutorul tastelor Page Up/ Page Down sau a cursorului de ecran din marginea din dreapta a ferestrei de lucru.
Exemplul 1.1. Se dau: a = 1, b = 2. Sa se calculeze, folosind modul de lucru direct in Matlab,
c = (a + b+1)0.15.
Rezolvare. Din meniul ferestrei File, selectam Preferences, apoi, formatul de afisare a numerelor, de exemplu
Long G; in modul de lucru direct, se editeaza linia de program:
>a=1, b=2, c=(a+b+1)^0.15
Se tasteaza apoi Enter si pe ecran se afiseaza:
a=
1
b=
2
c=
1.23114441334492
Ca exercitiu, propunem utilizatorului reluarea calculelor din Exemplul 1.1, dar cu folosirea diferitor formate
numerice de afisare si folosirea caracterului ; dupa primele doua instructiuni.
b. Modul de lucru cu fisiere script
Acest mod corespunde modului de lucru programat in Matlab. Pentru editarea unui program Matlab, se
procedeaza astfel:
- Din meniul principal Matlab, selectati File, apoi New, apoi M - file pentru deschiderea editorului de text
program (in ASCII);
- Se editeaza programul in limbaj Matlab;
- Se salveaza programul: din meniul editorului, se selecteaza File, apoi Save As ... , se da un nume legal de
program, cu extensia de nume .m;
- Se inchide fereastra editorului (in versiunile 5.1 - 5.3) si se revine la fereastra de lucru curent in Matlab;
- Pentru executia programului, fie se tasteaza numele programului, fara extensia de nume si apoi Enter, fie se
selecteaza din meniul principal File, apoi Run Script ... , se tasteaza adresa si numele programuluiu si apoi Enter.
Exemplul 1.2. Se dau: a = 1, b = 2. Sa se calculeze, folosind modul de lucru script in Matlab,
c = (a + b+1)0.15.
Rezolvare. Din meniul ferestrei File, selectam New, apoi M - file. Se editeaza programul
programul
a=1, b=2, c=(a+b+1)^0.15
Se salveaza programul, de exemplu cu numele prog12.m, si se coboara fereastra editorului.
Selectati formatul de afisare a numerelor, de exemplu Long G. Tastati prog12, apoi Enter si pe ecran se
afiseaza:
a=
1
b=
2
c=
1.23114441334492

2. Functii de interes general

a) Pentru informatii generale

help - functie pentru furnizarea de informatii Matlab in modul de lucru direct (online).
Sintaxa:
> help <Enter> - afiseaza lista tuturor subiectelor primare de informatii,
corespunzatoare directorilor din calea Matlab;
>help subiect <Enter> - afiseaza informatii despre subiect, unde subiect poate fi o
comanda Matlab, un nume de functie sau un nume de director aflat in calea Matlab (in acest caz
afiseaza tabela de continut a directorului)
Exemple:
help <Enter> - afiseaza lista directorilor din calea Matlab, cu informatii primare;
help path <Enter> - furnizeaza informatii despre comanda path;
help plot <Enter> - furnizeaza informatii despre functia plot;
help general <Enter> - afiseaza tabela de continut a directorului general din calea Matlab;

helpwin - functie pentru furnizarea de informatii in modul de lucru direct, cu deschiderea unei
ferestre separate pentru cautare;
Sintaxa:
>helpwin subiect <Enter> - deschide o fereastra si afiseaza informatii despre subiect;
>helpwin(text,titlu) <Enter> - deschide o fereastra cu numele titlu in care inscrie text;
informatii despre subiect pentru informatii despre subiect; cu numele ferestrei titlu.
Exemple:
>helpwin plot <Enter> - deschide o fereastra cu informatii despre functia plot;
>helpwin(plot) <Enter> - idem
>helpwin(Informatii despre text, Ionel) <Enter> - deschide o fereastra cu numele Ionel, in
care inscrie textul Informatii despre text;

helpdesk - incarca Matlab Help Desk in fereasrea Web de cautare pentru help extins.
Sintaxa:
>helpdesk <Enter>

Exemplu:
Pentru informatii Help Desk despre functia plot:
>helpdesk <Enter> ,inscrie apoi plot in fereastra Search Matlab Index si tasteaza Search.

demo, demos - lanseaza in executie programul demonstratie Matlab.


demos <Enter> , selecteaza din fereastra deschisa categoria de subiecte prin dublu clic cu
mous-ul , apoi subiectul dorit prin simplu clic; foloseste meniul oferit pentru lansare, urmarire si
inchidere program demonstrativ.

ver - ofera informatii cu privire la versiunea Matlab, Simulink si Toolbox curente;


>ver <Enter>

version - ofera informatii cu privire la versiunea Matlab curenta si a datei de realizare a ei.
>version <Enter> - returneaza versiunea Matlab curenta;
>[v,d]=version <Enter> - returneaza versiunea Matlab curenta si data realizarii ei.

whatsnew - afiseaza fisierele de tip Readme care contin informatii cu privire la noutatile
versiunii Matlab curente;
>whatsnew <Enter>

b) Pentru controlul (monitorizarea) spatiului de lucru

clear - sterge variabile si functii din memoria interna


>clear <Enter>
> a=[1 2 3], clear, a <Enter>

who - listeaza variabilele curente


>clear,a=[1 2 3],who <Enter>

whos - listeaza variabilele curente, forma lunga


>clear,a=[1 2 3],whos <Enter>

pack - consolideaza memoria spatiului de lucru


>pack <Enter>

save - salveaza variabilele din spatiul de lucru pe disc;


>clear; a=[1 2 3]; save <Enter>

load - incarca variabilele spatiului de lucru de pe disc;


>clear,a=[1 2 3], save, clear, load, a <Enter>

quit - paraseste sesiunea curenta de lucru Matlab.


>quit <Enter>

c) Pentru comenzi si functii

what - afiseaza lista fisierelor specifice Matlab dintr-un director;


Sintaxa:
>what nume_director <Enter> - afiseaza lista fisierelor specifice Matlab-ului din directorul
nume_director;
>what <Enter> - afiseaza lista fisierelor specifice Matlab din directorul curent;
Exemple:
>what <Enter> -afiseaza lista fisierelor atlab din directorul implicit BIN;
>what general <Enter> - afiseaza lista fisierelor Matlab din directorul general, aflat in calea
Matlab;

type - afiseaza continutul unui fisier;


Sintaxa:
>type nume_fisier <Enter>
Exemplu:
>type fzero <Enter> - afiseaza continutului fisierului plot.

edit - comanda pentru editarea unui fisier Matlab creat;


Sintaxa:
>edit nume_fisier <Enter>
Exemplu:
>edit test.m <Enter> -deschide fisierul existent test.m pentru editare

lookfor - comanda pentru identificarea fisierelor care contin un cuvant cheie pe linia 1 de help;
Sintaxa:
>lookfor cuvant_cheie <Enter> - listeaza numele fisierelor care contin textul cuvant_cheie in
linia 1 de help (linia H 1);
Exemplu:
>lookfor plot <Enter> - listeaza fisierele care contin cuvantul plot pe linia 1 de help.

which - localizeaza functii si fisiere;


Sintaxa:
>which nume_functie <Enter> - returneaza adresa (calea) fisierului nume_functie;
Exemplu:
>which fzero <Enter> - returneaza calea fisierului fzero.m;

pcode - creaza fisiere pre-parsed pseudo-cod (fisisere .p) din fisiere .m;
Sintaxa:
>pcode lista_de_functii <Enter> - creaza fisiere .P in directorul curent ale functiilor
specificate in lista_de_functii;
>pcode lista_de_functii -inplace <Enter> - creaza fisiere .P in directorul functiilor din
lista_de_functii;
Exemple:
>pcode plot.m fzero.m <Enter> - creaza fisierele plot.p si fzero.p in directorul curent;
>pcode plot.m fzero.m -inplace <Enter> - creaza fisierele plot.p si fzero.p in directorii
fisierelor plot.m si fzero.m (directorii graph2D, respectiv funfun din toolbox\matlab);

inmem - listeaza functii din memoria interna, foosite in sesiunea de lucru;


Sintaxa:
>inmem <Enter> - listeaza fisierele .m din memoria interna;
>m=inmem <Enter> - returneaza matricea m cu numele functiilor din memoria interna;
>[m,mex]=inmem <Enter> - returneaza matricea m cu numele functiilor .m si matricea mex cu
numele fisierelor de tip .mex din memoria interna;
Exemple:
>clear all; pcode plot.m; inmem <Enter> - returneaza numele functiilor .m folosite pentru
crearea fisierului plot.p din plot.m;
>clear all; pcode plot.m; m=inmem <Enter> - afiseaza matricea m cu numele functiilor .m
folosite pentru creare plot.p din plot.m;

>clear all; pcode plot.m; [m,mex]=inmem <Enter> - afiseaza matricea m cu numele


functiilor .m si matricea mex cu numele functiilor .mex folosite pentru crearea plot.p din plot.m.

d) Pentru controlul caii de cautare (Matlab path)

path - returneaza/seteaza caile de cautare din calea curenta Matlab (Matlabpath);


>path <Enter> - afiseaza lista curenta a cailor de cautare din Matlabpath;

addpath - adauga noi cai de cautare in Matlabpath;


>addpath lista_cai_directori <Enter>
Exemplu:
>addpath c:\adi c:\nicu <Enter> - adauga caile c:\adi si c:\nicu in calea de cautare Matlab;

rmpath - sterge cai directori din calea Matlab;


>rmpath lista_cai_directori <Enter> - inlatura caile continute in lista_cai_directori din calea
Matlab;
Exemplu:
>rmpath c:\adi c:\nicu <Enter> - inlatura caile c:\adi si c:\nicu din calea Matlab;

editpath - modifica calea de cautare, folosind, sub Windows, un editor intern;


>editpath <Enter> - deschide fereastra editorului intern a caii Matlab (Matlabpath); folosind
meniul acestuia, pot fi adaugate/sterse noi cai in/din calea Matlab;

e) Pentru controlul ferestrei de comenzi

clc - sterge fereastra de comenzi si pozitioneaza cursorul in coltul stanga sus al ferestrei de
comenzi;
>clc <Enter>

home - pozitioneaza cursorul in coltul stanga sus al ferestrei de comenzi;


>home <Enter>

echo - comanda pentru afisarea liniilor din programele .m de tip script, pe masura executarii
lor;
>echo on <Enter> - activeaza comanda echo; vor fi afisate liniile programelor .m de tip script
care vor fi executate dupa aceasta comanda;

>echo off <Enter> - dezactiveaza comanda echo;


>echo nume_functie on <Enter> - are ca efect afisarea liniilor functiei nume_functie atunci
cand aceasta va fi executata;
>echo nume_functie off <Enter> - dezactiveaza comanda echo aplicata functiei nume_functie;
>echo on all <Enter> - afiaseaza liniile tuturor functiilor din memorie folosite la executarea
unui program .m script;
>echo off all <Enter> - dezactiveaza comanda echo on all;

Exemple:
Fie programul ptest.m, de tip script, care apeleaza functia ftest.m, prezentate mai jos:
% program ptest.m
x1=fzero(ftest,8);
x2=fzero(ftest,-8);
x1, x2
function y=ftest(x)
y=x^4+5.0*x^3-6;

>echo on; ptest <Enter> - afiseaza liniile programului ptest.m pe masura ce sunt executate;
>echo off; ptest <Enter> - dezactiveaza comanda echo on; liniile programului ptest.m nu vor
mai fi afisate;
>echo ftest on; ptest <Enter> - afiseaza liniile functiei ftest.m, apelata de ptest.m;
>echo ftest off; ptest <Enter> - dezactiveaza comanda echo aplicata functiei ftest.m; liniile
functiei ftest.m nu vor mai fi afisate la executarea programului ptest.m;
>echo on all; ptest <Enter> - afiseaza liniile functiilor din memorie folosita la executarea
programului ptest.m;
>echo off all; ptest <Enter> - dezactiveaza comanda echo on all; liniile functiilor din memorie
nu vor mai fi afisate la executia programului ptest.m;

more - comanda pentru controlul de pagina al output-ului din fereastra de comenzi;


>more on <Enter> - activeaza comanda more; dupa afisarea unui pagini, se asteapta apasarea
unei taste pentru continuarea afisarii; se tasteaza:
Enter pentru afisarea in continuare a unei linii ecran;
Space bar pentru afisarea unei pagini;
q pentru intreruperea afisarii;
>more off <Enter> - deazctiveaza comanda more;

>more(n) <Enter> - fixeaza marimea paginii afisate la n linii;


Exemple:
>more on; echo on all; ptest <Enter> - afiseaza o pagina,dupa care se asteapta apasarea unei
taste (Enter, Space bar sau q);
>more off; ptest <Enter> - afisare continua pe ecran;
>more(10); ptest <Enter> - fixeaza marimea paginii afisate la 10 linii ecran;

diary - salveaza textul sesiunii de lucru Matlab intr-un fisier ASCII;


>diary nume_fisier <Enter> - salveaza textul sesiunii de lucru Matlab, incepand din acest
moment, in fisierul nume_fisier;
>diary off <Enter> - dezactiveaza comanda diary;
>diary on <Enter> - reactiveaza comanda diary;
>diary(nume_fisier) <Enter> - forma functionala a comenzii diary, unde nume_fisier este
definit printr-o constanta sir;
Exemple:
>diary c:\test.txt; ptest; diary off <Enter> - creaza fisierul c:\test, inscrie in el output-ul text
furnizat de programul ptest.m, dezactiveaza comanda diary si inchide fisierul c:\test.m;
>diary c:\test.txt; type ptest.m; diary off <Enter> - deschide fisierul existent c:\test.txt in care
adauga output-ul text al comenzii type ptest.m (liniile programului ptest.m), dezactiveaza
comanda diary si inchide fisierul c:\test.txt.
>s=c:\test.txt; diary(s); type ptest.m; diary off <Enter> - atribuie variabilei s de tip sir
valoarea c:\test.txt, afiseaza pe ecran fisierul ptest.m, adauga in fisierul c:\test.txt textul afisat pe
ecran, dezactiveaza comanda diary si inchide fisierul c:\test.txt.

format - seteaza formatul de afisare a valorilor numerice, reprezentate in Matlab in dubla


precizie; poate fi selectat si direct din fereastra File/Preferences/General.
Sintaxa:
>format optiune <Enter>, unde optiune poate fi:
short - format scalat in virgula fixa cu 5 cifre;
short e - format sclat in virgula mobila cu 5 cifre;
long - format scalat in virgula fixa cu 15 cifre;
long e - format scalat in virgula mobila cu 15 cifre;
short g - formatul cel mai bun dintre cel in virgula fixa si cel in virgula mobila, cu 5 cifre;
long g - formatul cel mai bun dintre cel in virgula fixa si cel in virgula mobila, cu 15 cifre;
hex - format hexadecimal;

+ - simbolurile + , - si blank sunt returnate pentru numerele pozitive, respectiv negative sau
egale cu zero, cu neglijarea partii imaginare in cazul numerelor complexe;
bank - format bancar, scalat in virgula fixa cu doua zecimale;
rat - format expresie rationala; aproximare prin rata celor mai mici intregi;

compact - pentru spatiere; suprima linia de separare la afisarea rezultatelor;


loose - pentru spatiere, include linia de separare;

Exemple:
>format short, pi, format long, pi <Enter> - afiseaza valoarea numarului in formatele
virgula fixa cu 5 cifre si cu 15 cifre;
>format short e, pi, format long e, pi <Enter> - afiseaza valoarea numarului in formatul
virgula mobila cu 5 cifre si cu 15 cifre;
> a=1/3*10^10; format short g, a, format long g, a <Enter> - calculeaza si afiseaza valoarea
variabilei a in cea mai buna reprezentare, in forma scurta si in forma lunga;
>format hex, pi <Enter> - afiseaza valoarea numarului in sistemul de numeratie
hexadecimal;
>a=10; b=-10; c=0.0; format +, a, b, c <Enter> - atribuie valori variabilelor a, b, si c si
returneaza simbolurile +, - si blanc.
>a=1/3*10^10; format bank, a <Enter> - calculeaza valoarea variabilei a si o afiseaza in
format bancar;
>format rat; pi <Enter> - afiseaza valoarea numarului sub forma rationala (355/13);
>b=1:20; format compact, b, format loose b <Enter> - genereaza vectorul b si afiseaza
elementele lui cu suprimarea, respectiv includerea liniei de spatiere la afisare;

f) Functii pentru controlul marimilor de timp

clock - returneaza un vector cu 6 elemente reprezentand anul, luna, ziua, ora, minutul,
secunda curente, dupa data si ceasul calculatorului;
Sintaxa:
>clock <Enter>
Exemple:
>format bank; clock <Enter> - afiseaza data si ora curente, in format bancar;
>format short; fix(clock) <Enter> - afiseaza data si ora curente, rotunjite la valorile intregi
cele mai apropiate spre zero;

>s=clock; s(1) <Enter> - atribuie variabilei s valorile returnate de clock si afiseaza primul
element (anul);

date - afiseaza data curenta sub forma sir de caractere, zi-luna-an;


Sintaxa:
>date <Enter> - returneaza sirul de caractere reprezentand ziua, luna si anul curente;
Exemple:
>date <Enter>
>s=date; s(4:6) <Enter> - atribuie variabilei s sirul returnat de date si afiseaza caracterele de
pe coloanele 4-6 (luna curenta);

tic, toc - tic porneste un cronometru (timpul in secunde), toc citeste cronometrul;
>tic <Enter> - porneste cronometrul;
>toc <Enter> - citeste cronometrul, returneaza timpul scurs, in secunde, de la pornirea
cronometrului;
>tic, operatii, toc <Enter> - porneste cronometrul, efectueaza operatii si afiseaza timpul in
secunde folosit pentru operatii;
>s=toc; <Enter> - atribuie variabilei s timpul scurs de la pornirea cronometrului;
Exemple:
>tic; A=0:0.01:2*pi; B=sin(A); plot(A,B); grid; toc <Enter> - porneste cronometrul,
genereaza vectorul A cu elemente sirul valorilor de la 0 la 2 cu pasul de crestere 0.01,
calculeaza valorile functiei sin a acestor valori, traseaza graficul valorilor calculate, citeste
cronometrul si afiseaza timpul scurs de la pornire, in secunde.
etime - returneaza timpul scurs intre doua momente reprezentate prin doi vectori returnati de
functia clock sau avand formatul acestora (6 elemente); nu ia in consideratie diferentele implicate
de luna si an diferite;
> t1=clock; operatii, t2=clock; etime(t2,t1) <Enter> - atribuie variabilei t1 timpul curent
returnat de functia clock, efectueaza operatii, atribuie variabilei t2 timpul curent returnat de clock
si afiseaza diferenta, in secunde, dintre momentele t2 si t1;
Exemple:
> t1=clock; A=rand(1,100);B=1:100; bar(B,A); grid; t2=clock; etime(t2,t1) <Enter> atribuie variabilei t1 data si timpul curent, genereaza matricea A(1 ,100) cu numere aleatoare
cuprinse intre 0 si 1 dupa legea distributiei uniforme, construieste graficul tip bare cu valorile
generate, atribuie variabilei t2 timpuil curent si afiseaza timpul, in secunde, scurs intre t1 si t2;

>t1=[2000 12 20 12 0 0]; t2=[2000 12 20 13 0 0]; etime(t2,t1) <Enter> - afiseaza diferenta


de timp, in secunde, dintre momentele t2 si t1 definite prin atribuire directa de valori (in acest caz
valoarea returnata este de 3600 s, data de diferenta de 1 ora intre cele doua momente);
>t1=[2000 12 20 12 0 0]; t2=[2001 1 20 13 0 0]; etime(t2,t1) <Enter> - returneaza acelasi
rezultat ca in exemplul precedent, nelund in consideratie diferentele de an si luna;

cputime - returneaza timpul CPU (timpul folosit de unitatea centrala de procesare), in


secunde, folosit de Matlab de la inceputul sesiunii de lucru;
>cputime <Enter> - afiseaza timpul CPU curent;
>t=cputime <Enter> - atribuie variabilei t valoarea curenta a timpului CPU;
Exemple:
>t1=cputime; A=0:0.01:2*pi; B=sin(A); plot(A,B); grid; t2=cputime, t2-t1 <Enter> - afiseaza
timpul CPU folosit pentru efectuarea operatiilor generare vector A, calcul sin(A) si plotare valori
calculate.

g) Comenzi ale sistemului de operare

dir - afiseaza lista fisierelor dintr-un director;


>dir cale_si_nume_director <Enter> - afiseaza lista fisierelor din directorul specificat prin
cale_si_nume_director;
>d=dir(cale_si_nume_director) <Enter> - returneaza o structura avand numarul liniilor egal
cu numarul fisierelor din cale_si_nume_director si o coloana cu 4 campuri pentru, respectiv,
nume fisier, data modificarii, numarul bitilor ocupati de fisier si numarul 1 sau 0 dupa cum este
director sau nu.
Exemple:
>dir <Enter> - adiseaza lista fisierelor din directorul curent;
>dir c:\matlab <Enter> - afiseaza lista fisierelor din directorul matlab;
>d=dir(c:\matlab); d(3,:) <Enter> - construieste structura d si afiseaza cele 4 campuri de pe
linia a 3-a;

cd - schimba directorul curent de lucru;


>cd <Enter> - afiseaza calea si numele directorului curent de lucru printr-un sir de caractere;
>d=cd <Enter> - atribuie variabilei d sirul de caractere reprezentand cale si nume director
curent de lucru;

>cd cale_si_nume_director <Enter> - seteaza directorul curent de lucru potrivit cu


cale_si_nume_director;
>s=cale_si_nume_director; cd(s) <Enter> - idem
>cd . . <Enter> - directorul curent de lucru devine cel precedent din cale;
Exemple:
>cd, d1=cd <Enter> - afiseaza calea si numele directorului curent de lucru si le atribuie
variabilei d1 de tip sir de caractere;
>cd c:\matlab\toolbox <Enter> - seteaza toolbox ca director curent de lucru;
>s=c:\matlab\toolbox; cd(s), d0=cd .. <Enter> - seteaza toolbox ca director curent de lucru
si retine in d0 calea si numele directorului precedent din cale;

pwd - afiseaza directorul curent de lucru;


>pwd <Enter> - afiseaza directorul curent de lucru;
>s=pwd <Enter> - returneaza in s directorul curent de lucru;
Exemple:
>s1=pwd; cd c:\matlab\toolbox; pwd <Enter> - retine in s1 directorul curent de lucru,
schimba si afiseaza noul directorul de lucru;
> s1=pwd; cd c:\matlab\toolbox; s2=pwd <Enter> - idem, cu retinerea noului director de
lucru in s2;

delete - sterge fisiere sau obiecte grafice;


>delete cale_si_nume_fisier <Enter> - sterge fisierul nume_fisier din calea specificata;
>s=cale_si_nume_fisier; delete(s) <Enter> - idem (forma functionala a comenzii delete);
Exemple:
>delete c:\matlab\bin\ptest.m <Enter> - sterge fisierul ptest.m cu calea c:\matlab\bin;
>s=c:\matlab\bin\ptest.m; delete(s) <Enter> - idem;

! - transfera executia comenzilor sistemului de operare MS-DOS, fara parasirea Matlab-ului;


>! <Enter> - deschide o fereastra de comenzi MS-DOS;
Exemplu:
Pentru executia programului OPTIMBP.BAS in GWBASIC si revenirea in Matlab, poate fi
folosita urmatoarea secventa de comenzi:
>! <Enter> - deschide o fereastra de lucru in MS-DOS;
>gwbasic <Enter> - in MS-DOS, lanseaza in executie interpreterul GWBASIC;
load c:\optimbp.bas <Enter> - comanda GWBASIC pentru incarcarea programului;

run <Enter> - comanda GWBASIC pentru lansarea in executie a programului;


system <Enter> - comanda pentru iesirea din GWBASIC si revenirea sub controlul MS-DOS;
close (tastata din meniul ferestrei MS-DOS) - iesire din MS-DOS si revenire in Matlab.

dos - executa o comanda DOS si returneaza rezultatul;


>dos(comanda_DOS_sau_Windows)
computer - tipul calculatorului. Returneaza un text continand tipul calculatorului pe care se
se executa Matlab-ul. Posibilitatile sunt:
PCWIN

- MS-Windows

MAC2

- Macintosh

SUN4

- Sun SPARC

SOL2

- Solaris 2

HP700

- HP 9000/700

SGI
SGI64

- Silicon Graphics
- Silicon Graphics R8000

IBM_RS

- IBM RS6000

ALPHA

- Dec Alpha

AXP_VMSG - Alpha VMS G_float


AXP_VMSIEEE - Alpha VMS IEEE
LNX86

- Linux Intel

VAX_VMSG - VAX/VMS G_float


VAX_VMSD - VAX/VMS D_float

3. Variabile si constante speciale in Matlab

In Matlab exista o serie de variabile si constante cu anumite semnificatii , care nu trebuie


declarate si sunt accesibile global in orice fisier de tip .m . Dintre acestea mentionam cateva:

ans - cel mai recent raspuns (l.e., answer =raspuns). Este variabila creata in mod automat,
careia i se atribuie valoarea celei mai recente expresii neasignate.
Exemple:
>x=1.5; y=0.10; x^y

<Enter>

ans =
1.0414
Deci variabilei ans i se atribuie valoarea expresiei x^y.
> a=[1 2 3 4 5]; a>=2, ans-1 <Enter>
ans =
0

ans =
-1

In acest caz, variabilei ans i se atribuie mai intai vectorul cu elementele 0 sau 1 dupa cum este indeplinita sau
nu conditia a>=2, dupa care i se atribuie vactorul cu elementele ans-1.

eps - returneaza precizia relativa in reprezentarea numerelor in modul virgula mobila


(epsilon masina, distanta dintre 1 si urmatorul numar reprezentabil in virgula mobila). In unele
functii Matlab, eps reprezinta toleranta implicita (eroarea maxima admisa, criteriul de
convergenta) in aproximarea solutiei, atribuita prin program, cu valoare diferita, in general, de
precizia masinii.
Exemple:
>eps

<Enter>

ans =
2.220446049250313e-016
> epsc=1; while 1+epsc>1; epsc=epsc/2; end; epsc=2*epsc <Enter>
epsc =
2.220446049250313e-016
Se observa ca epsc=eps si acest exemplu reprezinta un mod practic pentru determinarea
preciziei curente a masinii.
>1+eps>1, 1+eps/2>1
ans =
1
ans =
0

<Enter>

In acest caz, pentru 1+eps>1 se obtine valoarea 1, corespunzand valorii logice adevarat,
in timp ce pentru 1+eps/2>1 se obtine valoarea 0, corespunzand valorii logice fals, raspuns
incorect datorat preciziei limitate in reprezentarea numerelor in modul virgula mobila.

pi - returneaza valoarea numarului ;


Exemple:
> pi

<Enter>

ans =
3.141592653589793e+000
>4*atan(1)

<Enter>

ans =
3.141592653589793e+000
>log(-1)

<Enter>

ans =
0 +3.141592653589793e+0001
>sin(pi)

<Enter>

ans =
1.224606353822377e-016
Valoarea functiei sin(pi) este foarte mica, dar nu zero, datorita erorilor care decurg din
reprezentarea in virgula mobila a numerelor pe un numar finit de biti.

i si j - unitati imaginare, folosite pentru reprezentarea numerelor complexe; pot fi folosite si


ca nume de variabile, de regula pentru variabilele de ciclare in instructiunile de calcul repetitiv,
prin redefinirea lor.
Exemple:
>i, j

<Enter>

ans =
0 + 1.00000000000000i
ans =
0 + 1.00000000000000i
>a=1+3i, b=2+4j, c=a+b

<Enter>

a=
1.0000 + 3.0000i
b=
2.0000 + 4.0000i
c=
3.0000 + 7.0000i
> for i=1:10; a(i)=i/2; end; a

<Enter>

a=
Columns 1 through 7
0.5000

1.0000

1.5000

2.0000

2.5000

3.0000

3.5000

Columns 8 through 10
4.0000

4.5000

5.0000

In acest caz, i este variabila de ciclare a calculelor si nu mai reprezinta, in continuare, unitatea
imaginara.

Inf - plus infinit, reprezentat in aritmetica virgula mobila; in calcule, se obtine ca rezultat al
impartirii unui numar prin zero sau prin depasirea celui mai mare numar reprezentabil in
aritmetica curenta (overflow).
Exemple:
>1/0, exp(710), Inf+Inf

<Enter>

Warning: Divide by zero.


ans =
Inf
ans =
Inf
ans =
Inf

NaN - Nu este un numar (l. e., Not-a-Number), in aritmetica virgula mobila. Se obtine ca
rezultat al unor operatii: 0/0, Inf/Inf, Inf-Inf s.a.
Exemple:
>0/0, Inf/Inf, Inf-Inf, Nan-NaN

<Enter>

Warning: Divide by zero.


ans =
NaN
ans =
NaN
ans =
NaN
ans =
NaN

realmax - cel mai mare numar pozitiv reprezentabil in virgula mobila pe calculatorul curent.
Exemple:
>x=realmax, x+1.0e+291, x+1.0e+292, x+x
x=
1.797693134862316e+308

ans =
1.797693134862316e+308

<Enter>

ans =
Inf
ans =
Inf

realmin - cel mai mic numar pozitiv reprezentat normalizat in modul virgula mobila; orice
numar mai mic este egalat cu zero sau reprezentat denormal in modul virgula mobila.
Exemple:
> realmin

<Enter>

ans =
2.225073858507202e-308
> realmin/1.0e+015, realmin/1.0e+016, realmin/realmax
ans =
2.470328229206233e-323
ans =
0
ans =
0

<Enter>

4. Importul si exportul fisierelor de date

4.1 Date neformatate

a. Salvarea si incarcarea fisierelor de date in forma binara

save - salveaza toate variabilele in fisierul matlab.mat.


load - incarca variabilele din fisierul matlab.mat.
Exemple:
>clear, a=[1 2 3 4 5]; save

<Enter>

Saving to: matlab.mat


>clear, load, a

<Enter>

Loading from: matlab.mat


a=
1

save cale_si_nume_fisier.mat - salveaza toate variabilele in fisierul nume_fisier.mat;


load cale_si_nume_fisier.mat - incarca variabilele din fisierul nume_fisier.mat;
Exemple:
>clear; a=[1 2 3 4 5]; save c:\fisier1.mat
>clear; load c:\fisier1.mat, a

<Enter>

<Enter>

a=
1

save cale_si_nume_fisier.mat lista_de_variabile - salveaza variabilele specificate in


lista_de_variabile in fisierul nume_fisier.mat;
save cale_si_nume_fisier.mat lista_de_variabile -append - adauga variabilele din
lista_de_variabile in fisierul existent nume_fisier.mat;
load cale_si_nume_fisier.mat - incarca variabilele din fisierul nume_fisier.mat (la fel ca
mai sus);
Exemple:
>a=1:5, b=5:-1:1, c=[a' b'], d=a*c, save c:\fisier2.mat c d

<Enter>

a=
1

b=
5
c=
1

55

35

d=

>clear; load c:\fisier2.mat; c,d


c=
1

d=
55

35

b. Salvarea si incarcarea fisierelor de date in forma ASCII

save cale_si_nume_fisier lista_de_variabile -ascii - salveaza in fisierul nume_fisier, in


format ASCII cu 8 cifre, variabilele specificate in lista_de_ variabile;
save cale_si_nume_fisier lista_de_variabile -ascii -double - salveaza in fisierul
nume_fisier, in format ASCII cu 16 cifre, variabilele specificate in lista_de_ variabile;
save cale_si_nume_fisier lista_de_variabile -ascii -double -tabs - salveaza in fisierul
nume_fisier, in format ASCII cu 16 cifre, variabilele specificate in lista_de_ variabile, separate
prin tabs.
load cale_si_nume_fisier - incarca datele, dispuse pe linii, cu acelasi numar de coloane pe
fiecare linie, din fisierul nume_fisier, si le atribuie variabilei nume_fisier.

Exemple:
>a=1:5; save c:\fisier3.dat a -ascii

<Enter>

>a=1:5; save c:\fisier4.dat a -ascii -double

<Enter>

>a=1:5; save c:\fisier5.dat a -ascii -double -tabs

<Enter>

>load c:\fisier3.dat, fisier3 <Enter>


fisier3 =
1

>load c:\fisier4.dat, fisier4 <Enter>


fisier4 =
1

>load c:\fisier5.dat, fisier5 <Enter>


fisier5 =
1

>a=eye(3), b=1:3, M=[a b'], save c:\fisier6.dat M ascii <Enter>


a=
1

b=
1
M=

>clear, load c:\fisier6.dat, fisier6, a=fisier6(1:3,1:3), b=fisier6(:,4)' <Enter>


fisier6 =
1

a=

b=
1

5. Constante si variabile. Definirea matricelor. Expresii aritmetice, relationale si logice.

5.1 Constante si variabile in Matlab

Constantele in Matlab pot fi de tip numeric si de tip caracter sir. Constantele numerice
pot fi numere reale sau numere complexe.
Exemple:
1.2000 ; 12e-001 ; 1.0+2i ;

Precizia relativa, eps, in reprezentarea numerelor este aproximata cu 16 cifre semnificative.


Limitele superioara si inferioara sunt 10308 (realmax), respectiv 10-309 (realmin).
Constantele de tip sir sunt definite printr-un sir de caractere (litere, cifre, spatii albe),
delimitat prin apostrof ().
Exemple:
abcd ; a1 a2 a3 ; Ionescu V. Ion

Variabilele in Matlab pot fi numerice sau de tip sir si sunt reprezentate ca matrice. Astfel, un
scalar este definit si tratat ca matrice (1x1), un vector ca matrice (1xn) sau (nx1), o matrice ca
matrice (nxm). Valorile momentane ale variabilelor se definesc prin operatiunea de atribuire,
variabila = expresie
unde variabila este un nume legal in Matlab (incepe cu o litera, contine litere din alfabetul
anglo-saxon si cifre, literele mari nu se confunda cu cele mici), iar expresie reprezinta o
constanta, expresie aritmetica, expresie logica, functie Matlab.
Exemple:
> a=1.2, b=a+2.5, c=a>b, d=sin(a)
a=
1.2000
b=
3.7000
c=
0
d=
0.9320
> A=eye(4), B=ones(4,2), C=A*B
A=
1

B=
1

C=
1

> a='sunt ', b='inginer' , c=[a b]


a=
sunt
b=
inginer
c=
sunt inginer

5.2 Definirea matricelor in Matlab

Elementele unei matrice pot fi constante de tip sir sau numere reale, complexe, expresii
Matlab si sunt referite prin indici cuprinsi in paranteze rotunde, separati intre ei prin virgula.
Definirea matricelor poate fi facuta:
a) prin introducerea listei de elemente:
nume_matrice = [lista_de_elemente]
unde nume_matrice este un nume legal de variabila (trebuie sa inceapa cu o litera, sa
contina numai caractere legale - litere din alfabetul anglo-saxon si, eventual, cifre). Elementele
din lista_de_elemente sunt separate intre ele, pe linie, prin unul sau mai multe spatii albe
(blank-uri), iar liniile sunt separate intre ele prin caracterul puct si virgula (;) sau prin
introducere elementelor pe linia ecran urmatoare.
Exemple:
>a=1.20, size(a)
a=
1.2000
ans =
1

>A=[0.1 2.5 3.1 4.2 0.3]


A=
0.1000

2.5000

3.1000

4.2000

0.3000

>A=[0.1, 2.5, 3.1, 4.2, 0.3]


A=
0.1000

2.5000

3.1000

4.2000

0.3000

>B=[1 0 2 4 2; 3 2 1 0 0; 5 4 3 2 1]
B=
1

>C=[1 0 1 -1
1234
4 3 2 1]
C=
1

-1

>a=1; b=2; c=3; D=[a b; c sin(a)]


D=
1.0000

2.0000

3.0000

0.8415

b) prin generarea listei de elemente folosind instructiuni si functii:


nume_matrice = instructiune, sau
nume_matrice = functie
Exemple:
> A=[1:5; 5:-1:1]
A=
1

> B=zeros(3,3)
B=
0

> C=ones(3,3)
C=
1

> D=eye(3)
D=
1

> x=[1 2 3; 0.5 1.5 2.5], A=sin(x)


x=
1.0000

2.0000

3.0000

0.5000

1.5000

2.5000

0.8415

0.9093

0.1411

0.4794

0.9975

0.5985

A=

c) prin incarcare din fisiere de date:


Exemple:
>A=[1:3; 0.5:0.5:1.5]; save
Saving to: matlab.mat
>clear; load; A
Loading from: matlab.mat
A=
1.0000

2.0000

3.0000

0.5000

1.0000

1.5000

> B=[1:5; sqrt(1:5)]


B=
1.0000

2.0000

3.0000

4.0000

5.0000

1.0000

1.4142

1.7321

2.0000

2.2361

> B=[1:5; sqrt(1:5)]; save c:\fisier10.dat B -ascii


>clear; load c:\fisier10.dat; fisier10
fisier10 =
1.0000

2.0000

3.0000

4.0000

5.0000

1.0000

1.4142

1.7321

2.0000

2.2361

d) prin extragere din matrice mai mari sau prin compunere de matrice mai mici:
Exemple:
> A=[1:0.5:2.5; 2.5:-0.5:1]; B=A(1:2,1:3)
B=
1.0000

1.5000

2.0000

2.5000

2.0000

1.5000

> A=eye(3); B=zeros(3,1); C=[1 2 3]'; D=[A B C]


D=
1

5.3 Expresii aritmetice, relationale si logice

a) Expresii aritmetice

Expresiile aritmetice sunt definite prin operanzi, separati intre ei prin operatori
aritmetici. Operanzii pot fi constante sau variabile. Operatorii aritmetici in Matlab sunt
diferentiati dupa natura operanzilor. Astfel, pentru operatii intre scalari, operatii intre matrice si
operatii intre scalari si matrice (tablouri), se folosesc urmatorii operatori aritmetici:

Operatia

Scalari

Matrice

Tablouri

Adunare

Scadere

Inmultire

.*

Impartire la stanga

.\

Impartire la dreapta

./

Ridicare la putere

.^

Transpunere

Ordinea operatiilor aritmetice este cea din matematica obisnuita. Se folosesc numai
paranteze rotunde.
Exemple:
>a=1.2, b=0.10, c=a+b, d=a-b, e=a*b, f=a/b, g=a\b, h=a^b
a=
1.2000
b=
0.1000
c=
1.3000
d=
1.1000
e=
0.1200
f=
12.0000
g=
0.0833
h=
1.0184

> A=[0 1 2; 3 1 4; 5, 2 -6], B=eye(3), C=A+B, D=A-B, E=A*B, F=A/B, G=A\B, H=A^2, I=A'
A=
0

-6

-5

-1

-7

-6

-6

B=

C=

D=

E=

F=

G=
-0.3500

0.2500

0.0500

0.9500 -0.2500

0.1500

0.0250

0.1250 -0.0750

H=
13

-8

23

12 -14

-24

-5

54

-6

I=

> A=[1 0 1; -1 2 -3]; b=0.10, C=A+b, D=A-b, E=A.*b, F=A./b, G=A.^b


b=
0.1000

C=
1.1000

0.1000

1.1000

-0.9000

2.1000 -2.9000

D=
0.9000 -0.1000
-1.1000

0.9000

1.9000 -3.1000

E=
0.1000
-0.1000

0.1000

0.2000 -0.3000

F=
10

10

-10

20 -30

G=
1.0 0

1.0000

0.9511+ 0.3090i 1.0718

1.0615 + 0.3449i

b) Expresii relationale

Sunt constituite din constante, variabile, expresii aritmetice (operanzi), separate intre
ele prin operatori de relatie. Valoarea unei expresii relationale poate fi adevarat, reprezentat
numeric prin numarul 1, sau fals, reprezentat numeric prin numarul 0. In Matlab, operatorii
relationali compara doua matrice element cu element si returneaza rezultatul intr-o matrice
de aceleasi dimensiuni, cu elementele 0 sau 1. Operatorii de relatie in Matlab sunt:

Operator

Semnificatie

<

mai mic; compara numai partea reala;

<=

mai mic sau egal; compara numai partea reala;

>

mai mare; compara numai partea reala;

>=

mai mare sau egal; compara numai partea reala;

==

identic; compara partea reala si partea imaginara;

~=

diferit; compara partea reala si artea imaginara.

Exemple:
>A=[1 -1 2 -2; 0 1 2 3], B=ones(2,4), A<B, A<=B, A>B, A>=B, A==B, A~=B
A=
1

-1

-2

B=
1

ans =

ans =

ans =

ans =

ans =

ans =

c) Expresii logice

Sunt constituite din expresii relationale, separate intre ele prin operatori logici.
Valoarea unei expresii logice poate fi adevarat, reprezentat numeric prin numarul 1, sau
fals, reprezentat numeric prin numarul 0. In Matlab, operatorii logici opereaza asupra a doua
matrice in modul element cu element si returneaza rezultatul intr-o matrice cu aceleasi
dimensiuni, cu elementele 0 sau 1. Operatorii logici in Matlab sunt:

Operator

Simbol

Operatie logica

Prioritate

Matlab
NU

~=

NU logic (negatie logica)

SI

&

SI logic

SAU

SAU logic

In plus, in Matlab, exista functiile logice xor, any si all.


xor(S,T) - pentru operatia logica SAU EXCLUSIV; returneaza:

1, daca fie S, fie T, dar nu amandoua, sunt diferite de zero;


0, in caz contrar.
any(T) - unde T este un vector, returneaza:
1, daca cel putin un element al vectorului T este diferit de zero;
0, in caz contrar;
all(T) - unde T este un vector, returneaza:
1, daca toate elementele vectorului T sunt diferite de zero;
0, in caz contrar.
Exemple:
>A=[-1 -2 -3; 1 2 3], B=ones(2,3), C=A-B, (A>B)&(A>C), (A>B)|(B<C), (A~=C)|(B~=C)
A=
-1

-2

-3

-2

-3

-4

B=

C=

ans =

ans =

ans =

> S=[0 0 1], T=[1 1 0], xor(S,T)


S=
0

T=
1
ans =
1

> T=[1 0 0],any(T)


T=
1
ans =
1

6. Instructiuni de programare Matlab

Instructiunea input - se foloseste pentru atribuire valori de la tastatura.


Exemple:
> d=input('Valoarea a = ')
Valoarea a = ? (se tasteaza o constanta numerica)
> nf=input('Nume fisier =','s')
Nume fisier =? (se tasteaza un sir de caractere)

Instructiunea disp - se foloseste pentru afisarea pe ecran a unui sir de caractere.


Exemple:
disp('test')
test

Instructiunea de testare logica if ... else ... end


Are sintaxa:
if expresie_logica
set_de_instructiuni_1
else
set_de_instructiuni_2
end
Daca expresie_logica are valoarea adevarat, se executa instructiunile din
set_de_instructiuni_1, in caz contrar, cele din set_de_instructiuni_2.
Exemple:
> a=2, if a<0, f=sin(a), else, f=cos(a), end
a=
2
f=
-0.4161

Instructiunea repetitiva for ... end


Are sintaxa:
for nume_variabila=limita_inferioara:pas_de_crestere:limita_superioara
set_de_instructiuni
end

Pentru fiecare valoare a variabilei nume_variabila se executa instructiunile din


set_de_instructiuni.
Exemple:
>clear; k=0; for x=0:0.5:1; k=k+1; X(k)=x; A(k)=sin(x); end; [X' A']
ans =
0

0.5000

0.4794

1.0000

0.8415

Instructiunea repetitiva while ... end


Are sintaxa:
while expresie_logica
set_de_instructiuni
end
Executa instructiunile din set_de_instructiuni atat timp cat expresie_logica are valoarea
adevarat.
Exemple:
> clear; x=0; k=0; while x<pi; k=k+1; x=x+0.50; f=sin(x); X(k)=x; F(k)=f; end; [X' F']
ans =
0.5000

0.4794

1.0000

0.8415

1.5000

0.9975

2.0000

0.9093

2.5000

0.5985

3.0000

0.1411

3.5000 -0.3508

Instructiunea break - intrerupe executia unei instructiuni de calcul repetitiv for sau while.
Exemple:
> clear; x=0; k=0; while x<pi; k=k+1; x=x+0.50; f=sin(x); X(k)=x; F(k)=f; if x>1.5; break; end,end; [X' F']
ans =
0.5000

0.4794

1.0000

0.8415

1.5000

0.9975

2.0000

0.9093

Instructiunea keyboard - plasata intr-un program Matlab, intrerupe executia programului si


transfera controlul utilizatorului catre tastatura. Este utila pentru depanarea programelor.
Caracterul K indica, pe ecran, modul keyboard, orice instructiune Matlab fiind permisa,

inclusiv atribuirea de noi valori variabilelor curente. Iesire din modul keyboard se face tastand
comanda return.
Exemple:
A=zeros(1,2); for k=1:2; k, A(k)=input('A(k) = '); keyboard; end; A
k=
1
A(k) = -1
K A(1)=3
A=
3

K return
k=
2
A(k) = 1
K return
A=
3

7. Functii externe utilizator

Programul Matlab este orientat in mod deosebit spre lucrul cu functii. Exista functii
interne, pentru calcule uzuale, si functii externe, definite in bibliotecile Matlab (toolbox-uri)
sau definite de catre utilizator. Functiile externe utilizator se definesc dupa sintaxa:

function [lista_variabile_de_iesire] = nume_ functie(lista_argumente_de_intrare)


set_de_instructiuni

unde:
function - cuvant cheie (instructiune), se foloseste obligatoriu pentru a preciza ca urmeaza
definirea unei functii externe utilizator;
lista_variabile_de iesire - lista variabilelor de iesire, separate intre ele prin virgula, cu
valori returnate de functie; in cazul unei singure variabile, nu mai este necesara incadrarea ei in
paranteze drepte;
nume_functie - un nume legal de functie (incepe cu o litera, contine litere si, eventual cifre,
lungime maxima opt caractere);
lista_argumente_de_intrare - lista argumentelor de intrare (constante sau variabile),
separate intre ele prin virgula;
set_de_instructiuni - set de instructiuni Matlab pentru calculul variabilelor de iesire.

Subprogramul functie externa se salveaza obligatoriu cu numele nume_functie.m

Instructiunea return - cauzeaza intreruperea executiei unui program de tip functie externa si
transfera executia catre programul apelant. Se foloseste deasemenea pentru terminarea modului
keyboard.

Instructiunea global, cu sintaxa


global lista_de_variabile,
unde lista_de_variabile este o lista de variabile, separate intre ele prin spatii albe (blank-uri),
defineste variabilele din lista ca avand valori comune in programele si subprogramele in care
apare instructiunea.

Exemple:
Fie functia externa fh.m :
function q=fh(h);
global m b n Jf
T=[m b n Jf];
if (m<0|b<0|n<0|Jf<0)
disp('Cel putin una din valorile initiale este negativa');
return
end
j=Jf;
A=(b+m*h)*h; P=b+2*h*sqrt(1+m^2); R=A/P;
C=1/n*R^(1/6);
q=A*C*sqrt(R*j);
Fie programul principal pfh.m:
% program pfh.m
global m b n Jf
m=1; b=1; n=0.018; Jf=-0.001;
h=0.50;
Q=fh(h)
Lansam in executie programul principal:
>pfn

<Enter>

Se obtine:
m=
1
b=
-1
n=
0.0180
Jf =
0.0050
h=
0.5000
Cel putin una din valorile initiale este negativa
Warning: One or more output arguments not assigned during call to 'fh'.
> In C:\MATLAB5.0\bin\pfh.m at line 5

8. Operatii aritmetice cu vectori si matrice

a) Vectorizarea calculelor si prealocarea vectorilor

In Matlab este recomandata ori de cate ori este posibila efectuarea operatiilor cu vectori
si matrici in locul celor repetitive cu scalari, acest fapt conducand la cresterea vitezei de
executie a calculelor de 10 - 15 ori. Deasemeni, ori de cate ori se lucreaza cu vectori si matrice
se recomanda prealocarea acestora cu functia zeros, economisindu-se timp de calcul prin
evitarea redimensionarii acestora la fiecare ciclu.
Exemple:
Se doreste trasarea graficului functiei

y = x 4 + 5 x 3 6 , x [6, 2] .

Se adopta un pas de crestere a argumentului x egal cu 0.01. Se editeaza si se executa, comparativ, programele:
a) fara vectorizarea calculelor
% Exemplul 9.1.a
k=0;
t1=cputime;
for x=-6:0.1:2;
k=k+1; X(k)=x; Y(k)=x^4+5*x^3-6;
end
t2=cputime;
t=t2-t1
hf=figure; plot(X,Y); grid; xlabel('x'); ylabel('y')
Se obtine (t - timpul folosit de CPU pentru calcule, in secunde):
t=
0.0100

250

200

150

100

50

-50

-100
-6

-5

-4

-3

-2
x

-1

b) cu vectorizarea calculelor:
% Program pex91b.m
t1=cputime;
x=-6:0.1:2;
y=x.^4+5.*x.^3-6;
t2=cputime;
t=t2-t1
hf=figure; plot(x,y); grid; xlabel('x'); ylabel('y');
se obtine
t=
0

si acelasi grafic de mai sus.

b) Generare vectori si matrice uzuale

Pentru generarea de vectori si matrice uzuale, se folosesc functiile:


zeros - genereaza matricea nula, cu sintaxa variabila=zeros(n,m), n si m intregi;
ones - genereaza matricea unitate (cu elementele 1), cu sintaxa variabila=ones(n,m);
eye - genereaza matricea identica, cu sintaxa variabila=eye(n);
rand - genereaza elemente aleatoare cu distributie uniforma, cu sintaxa variabila=rand(n,m)
randn - genereaza elemente aleatoare cu distributie normata, cu sintaxa
variabila=randn(n,m);
linspace - genereaza un vector cu pas liniar; cu sintaxele:
variabila=linspace(x1,x2), genereaza un vector linie cu 100 puncte egal spatiate
intre x1 si x2;
variabila=linspace(x1,x2,N) genereaza N puncte egal spatiate intre x1 si x2.
logspace - genereaza un vector cu pas logaritmic;
variabila=logspace(x1,x2), genereaza un vector linie cu 100 puncte spatiate
logaritmic intre x1 si x2;
variabila=linspace(x1,x2,N) genereaza N puncte spatiate logaritmic intre x1 si x2.
meshgrid - genereaza o matrice a retelei in planul X-Y pentru grafice tridimensionale.
[X,Y]=meshgrid(x,y) - transforma domeniul specificat de vectorii x si y in tablourile
X si Y care pot fi folosite cu usurinta in evaluarea functiilor de doua variabile si in reprezentari
grafice 3-D;
[X,Y,Z]=meshgrid(x,y,z) - similar, pentru functii de trei variabile si reprezentari
volumetrice 3-D.

Exemple:
>clear;A=zeros(3),B=ones(2,3),C=eye(3),D=rand(2,3),E=randn(2,3),F=linspace(0,10,5),G=logspace(0,1,5)
A=
0

B=

C=

D=
0.4103

0.0579

0.8132

0.8936

0.3529

0.0099

-0.5883 -0.1364

1.0668

2.1832

0.0593

E=

0.1139

F=
0

2.5000

5.0000

7.5000 10.0000

G=
1.0000

1.7783

3.1623

5.6234 10.0000

> x=1:5, y=2:6, [X,Y]=meshgrid(x,y), f=sin(X.^Y)


x=
1

y=
2
X=

Y=

f=
0.8415 -0.7568

0.4121 -0.2879 -0.1324

0.8415

0.9564

0.9894

0.9200 -0.6160

0.8415 -0.2879 -0.6299 -0.9992

0.1760

0.8415

0.5514 -0.8900 -0.1585

0.7737

0.8415

0.9200

0.1499 -0.5946 -0.9585

c) Operatii cu vectori
n
Produsul scalar a doi vectori, C = A B = a ( i ) b( i ) se calculeaza cu functia sum,
i =1

folosind sintaxa C=sum(A.*B).


Exemplu:
>A=ones(1,3), B=[-1 2 0.5], C=sum(A.*B)
A=
1

B=
-1.0000

2.0000

0.5000

C=
1.5000

Norma unui vector A = a x i + a y j + a z k , | A| = a x2 + a 2y + a z2 , se calculeaza cu functia


norm, cu sintaxa norm(A).
Exemplu:
A=[-1 2 4], norm(A)
A=
-1

ans =
4.5826

Cosinusul unghiului a doi vectori A = a x i + a y j + a z k , B = bx i + b y j + bz k ,




a x bx + a y b y + a z bz
AB
cos( A, B ) =
, se calculeaza cu relatia
=
| A|| B|
a x2 + a 2y + a z2 bx2 + b y2 + bz2
cos AB = sum( A.*B ) / ( norm( A) * norm( B ))

Unghiul dintre vectori, alfa = acos(cosAB).

Exemplu:
>A=ones(1,3), B=[-1 2 0.5], cosAB=sum(A.*B)/(norm(A)*norm(B)), alfa=acos(cosAB)
A=
1

B=
-1.0000

2.0000

0.5000

cosAB =
0.3780
alfa =
1.1832

i

Produsul vectorial C = A x B = a x

bx


j k

a y a z se calculeaza cu relatia C=A*B.

b y bz

Exemplu:
A=ones(1,3), B=[-1 2 0.5], C=A'*B
A=
1

B=
-1.0000

2.0000

0.5000

-1.0000

2.0000

0.5000

-1.0000

2.0000

0.5000

-1.0000

2.0000

0.5000

C=


Modulul produsului vectorial (norma sau lungimea), C = A B sin( A, B ) se calculeaza,

tinand cont de notatiile de mai sus, cu relatia


norm(A)*norm(B)*sin(alfa)
Exemplu:
>A=ones(1,3), B=[-1 2 0.5], cosAB=sum(A.*B)/(norm(A)*norm(B)), alfa=acos(cosAB),
modpvAB=norm(A)*norm(B)*sin(alfa)
A=
1

B=
-1.0000
cosAB =
0.3780

2.0000

0.5000

alfa =
1.1832
modpvAB =
3.6742

d) Operatii cu matrice

Manipulare matrice
diag - creaza sau extrage diagonala unei matrice;
diag(V), unde V este un vector, creaza o matrice cu elementele vectorului V pe
dagonala principala;
elementele vectorului V;
diag(V,k), unde V este un vector, creaza o matrice cu elementele vectorului V pe
diagonala k (k>0 - deasupra diagonalei principale, k<0 - sub diagonala
principala);
diag(A) , unde A este o matrice, extrage diagonala principala;
diag(A,k), unde A este o matrice, extrage diagonala k;
flipir - roteste matricea in jurul axei verticale, cu sintaxa flipir(A);
flipud - roteste matricea in jurul axei orizontale, cu sintaxa flipud(A);
tril - extrage matricea inferior triunghiulara, cu sintaxa tril(A);
triu - extrage matrice superior triunghiulara, sintaxa triu(A);
Exemple:
>V=[1 2 3]; A=diag(V), D=diag(A), E=diag(A,2),F=flipud(A),G=tril(A)
A=
1

D=
1
2
3
E=
0
F=

G=
1

Operatii cu matrice
Determinantul unei matrice patrate A se calculeaza cu functia det(A);
Inversa unei matrice patrate A se calculeaza cu functia inv(A);
Pseudoinversa unei matrici A(n,m) se calculeaza cu functia pinv(A);
Rangul unei matrice A se calculeaza cu functia rank(A);
Urma unei matrice A se calculeaza cu functia trace(A);
Valori si vectori proprii. Daca A este o matrice patrata, atunci [V,D]=eig(A) returneaza
matricea V cu vectorii proprii pe coloane si matricea diagonala D cu valorile proprii, astfel incat
A*V=V*D.
A se vedea si functiile: chol, lu, qr, qz, rref, svd.
Exemple:
>A=rand(3,3),detA=det(A), invA=inv(A), rankA=rank(A),[V,D]=eig(A)
A=
0.9318

0.8462

0.6721

0.4660

0.5252

0.8381

0.4186

0.2026

0.0196

2.1270

6.3365

detA =
0.0562
invA =
-2.8374

6.0780 -4.6793 -8.3196


-2.2308

2.9425

1.6899

rankA =
3
V=
0.8133

-0.3433 - 0.2276i -0.3433 + 0.2276i

0.5171

0.7798 + 0.0239i 0.7798 - 0.0239i

0.2666

-0.4013 + 0.2462i -0.4013 - 0.2462i

D=
1.6901
0
0

-0.1068 + 0.1479i
0

-0.1068 - 0.1479i

9. Reprezentari grafice in Matlab

Matlab dispune de un soft remarcabil pentru reprezentari grafice bidimensionale (2-D),


si tridimensionale (3-D). Constituit dintr-un numar de functii cu rol grafic si de calcul, softul
este usor de folosit si deosebit de util in analiza vizuala a datelor. Compatibilitatea cu sistemul
Windows permite copierea cu usurinta a produselor grafice in editorul de texte.

9.1 Reprezentari grafice bidimensionale (2-D)

Grafic liniar. Functia plot , cu sintaxa


plot(X,Y),
unde X, Y sunt doi vectori de lungimi egale, reprezinta intr-un sistem de axe rectangular
punctele de coordonate date in vectorul X, pentru abscise, si Y, pentru ordonate. In mod
implicit, punctele sunt unite prin linii. Daca X este o matrice si Y un vector, sau X un vector si Y
o matrice, atunci se vor considera succesiv liniile sau coloanele din matrice cu elementele
vectorului, dupa cum vectorul este vector linie sau vector coloana, obtinand mai multe grafice
reprezentate in acelasi sistem de coordonate. Evident, trebuie sa existe o corespondenta intre
lungimile liniilor sau coloanelor matricei su lungimea vectorului. Daca X si Y sunt matrice de
dimensiuni egale, atunci vor fi reprezentate graficele corespunzatoare coloanelor corespondente
ale matricelor. Cu sintaxa plot(X), se considera pe abscisa indicii elementelor vectorului X si pe
ordonata valorile elementelor.
Functia plot cu sintaxa plot(X,Y,caractere_sir) actioneaza la fel ca functia plot(X,Y) dar
permite alegerea tipului de linie, a simbolului de plotare si a culorii, dupa urmatorul cod care
trebuie specificat, in ordine, in caractere_sir:
Culoare linie
------------------------y galben
m magenta
c albastru deschis
r
rosu
g verde
b albastru
w alb
k
negru

Simbol plotare
Tip linie
------------------------------------. punct
- solid
o cerc
: prin puncte
x semnul x
-. linie punct
+ plus
-- linie intrerupta
* steluta
s patrat
d diamant
v triunghi (in jos)
^ triunghi (in sus)
< triunghi (stanga)
> triunghi (dreapta)
p pentagon
h hexagon

Impreuna cu functia plot pot fi folosite functiile:


figure - cu sintaxa variabila=figure, creaza o fereastra noua pentru figura si returneaza in
variabila indicatorul ei. Functia figure(variabila), face ca figura cu indicatorul variabila sa
devina figura curenta, afisata pe ecran deasupra tuturor celorlalte. Functia get, cu sintaxa
get(variabila), returneaza o lista cu proprietatile figurii si valorile lor curente. Functia set, cu
sintaxa set(variabila), returneaza o lista cu proprietatile figurii si valorile lor posibile.
grid - cu sintaxa grid, traseaza un careiaj de linii la axele curente;
axis -cu sintaxa axis([xmin xmax ymin ymax]) seteaza scalarea axelor curente;
xlabel, ylabel, title - cu sintaxele xlabel(eticheta1), respectiv ylabel(eticheta2),
title(eticheta3), adauga etichete (texte) la axele x, y , repspectiv titlu;
legend - cu sintaxa legend(variabila, text1,text2,...), inscrie pe figura cu indicatorul
variabila (sau pe cea curenta daca variabila lipseste), o legenda cu textele text1, text2, ... pentru
fiecare grafic trasat, in ordine; fereastra legendei poate fi deplasata cu mouse-ul in mod
obisnuit; legend off - elimina legenda din figura curenta;
text - cu sintaxa text(x,y,text) plaseaza pe figura la locatia x, y textul text, unde x, y se
exprima in unitatile axelor curente;
gtext - cu sintaxa gtext(text), permite plasarea cu mouse-ul pe figura curenta a textului text,
la locatia selectata prin clic stanga mouse;
hold - cu sintaxa hold on, retine figura curenta si proprietatile ei astfel incat comenzile
grafice urmatoare vor fi aplicate acesteia; hold off - determina intoarcerea la modul implicit.
Este utila in inscrierea in mod succesiv a mai multor grafice pe o figura, in acelasi sistem de
coordonate.
Exemplu:
% program p10a.m Exemplu pentru functia plot
x=0:0.05:2*pi;
y=sin(x)./2; y1=sin(x); y2=cos(x); y3=sin(x).*cos(x);
hf=figure;
plot(x,y,x,y1,'rs:',x,y2,'gd-.',x,y3,'bv--'); grid;
xlabel('x [rad]'); ylabel('y'); title('y=f(x)')
legend('y=sin(x)/2','y=sin(x)','y=cos(x)','y=sin(x)*cos(x)');
text(0.2,-0.5,'Autor: Ing. I. Ion');
gtext('Coautor: Ing. G. Ion');

Se obtine:
y=f(x)
1
y=si n(x)/2
y=si n(x)
y=cos(x)
y=si n(x)*cos(x)

0.8
0.6
0.4

0.2
0
-0.2
-0.4
Autor: Ing. I. Ion
-0.6
Coautor: Ing. G. Ion
-0.8
-1

4
x [rad]

Functia subplot, cu sintaxa subplot(m,n,p), imparte fereastra figurii in m x n parti, fiecare


parte cu axele ei, si selecteaza partea cu indicatorul p ca fiind cea curenta; numerotarea partilor
se face incepand cu cea din stanga sus, pe directia liniilor.

Exemplu:
% program p10b.m Exemplu pentru functia plot, combinata cu subplot
x=0:0.05:2*pi;
y=sin(x)./2; y1=sin(x); y2=cos(x); y3=sin(x).*cos(x);
xmin=min(x); xmax=max(x);
ymin=min(y); ymax=max(y);
ymin1=min(y1); ymax1=max(y1);
ymin2=min(y2); ymax2=max(y2);
ymin3=min(y3); ymax3=max(y3);
hf=figure;
subplot(2,2,1);
plot(x,y); axis([xmin xmax ymin ymax]);
xlabel('x [rad]'); grid; ylabel('y'); title('y=sin(x)./2');
subplot(2,2,2);
plot(x,y1); axis([xmin xmax ymin1 ymax1]);
xlabel('x [rad]'); grid; ylabel('y'); title('y=sin(x)');
subplot(2,2,3);
plot(x,y2); axis([xmin xmax ymin2 ymax2]);
xlabel('x [rad]'); grid; ylabel('y'); title('y=cos(x)');
subplot(2,2,4);
plot(x,y3); axis([xmin xmax ymin3 ymax3]);
xlabel('x [rad]'); grid; ylabel('y'); title('y=sin(x)*cos(x)');

Se obtine:
y=sin(x)./2

y=sin(x)

0.4
0.5

0.2

-0.2

0
-0.5

-0.4
0

4
x [rad]
y=cos(x)

4
x [rad]
y=sin(x)*cos(x)

1
0.4
0.2

0.5

0
-0.2

-0.5

-0.4
0

4
x [rad]

4
x [rad]

Pentru reprezentarea graficelor cu axe in scari logaritmice sau semilogaritmice, se folosesc


functiile:
loglog - cu sintaxa loglog(X,Y), pentru ambele axe in scari logaritmice;
semilogx - cu sintaxa semilogx(X,Y) pentru axa x in scara logaritmica;
semilogy - cu sintaxa semilogy(X,Y) pentru axa y in scara logaritmica;
Exemplu:
% program p10c.m pentru exemple scari logaritmice si semilogaritmice
x=0:0.05:2*pi;
y=sin(x).*sin(x);
hf=figure;
subplot(2,2,1); plot(x,y); grid; xlabel('x [rad]');
ylabel('sin(x)*sin(x)');
subplot(2,2,2); loglog(x,y); grid; xlabel('x [rad]');
ylabel('sin(x)*sin(x)');
subplot(2,2,3); semilogx(x,y); grid; xlabel('x [rad]');
ylabel('sin(x)*sin(x)');
subplot(2,2,4); semilogy(x,y); grid;xlabel('x [rad]');
ylabel('sin(x)*sin(x)');
Se obtine:
1

10

sin(x)*sin(x)

sin(x)*sin(x)

0.8
0.6
0.4
0.2
0

4
x [rad]

10

-5

10
10

-2

10
x [rad]

10

sin(x)*sin(x)

sin(x)*sin(x)

0.8
0.6
0.4
0.2
0
-2
10

10
x [rad]

10

10

-5

4
x [rad]

Pentru reprezentarea graficelor in coordonate polare se foloseste functia polar cu sinaxa


polar(teta,ro), unde teta este vectorul unghiurilor, in radiani, si ro, vectorul razelor.
Exemplu:
% Program p10d.m
x=0:0.05:2*pi;
n=length(x);y=randn(n);
hf=figure; polar(x,y(1,:)); grid

Se obtine:
90

3.0668

120

60
2.0445

150

30
1.0223

180

210

330

240

300
270

Reprezentari grafice bidimensionale specializate. Programul Matlab dispune de o serie de


functii pentru reprezentari grafice specializate, dintre care:
area - cu sintaxa area(X,Y), creaza un grafic cu suprafete diferit colorate pentru a marca
contributia diferitor componente la intreg;
bar - cu sintaxa bar(X,Y) reprezinta m grupe cu cate n bare ale matricei Y(m,n);
comet - cu sintaxa comet(X,Y) afiseaza graficul in mod animat stil cometa;
fplot - cu sintaxa fplot(nume_functie,lims) traseaza graficul functiei definite in functia cu
numele nume_functie, pe domeniul lims=[xmin xmax], xmin si xmax date;
A se vedea si functiile pie, stairs, pareto, hist.
Exemplu:
% Program p10e.m
x=0:5;
y=[0.1 0.5 0.3 0.2 0.5 0.9;
0.8 0.7 0.1 0.3 0.2 0.4;
0.3 0.2 0.1 0.8 0.9 0.5]';
hf=figure; area(x,y); grid;
hf=figure; bar(x,y); grid;
hf=figure; fplot('sin',[0 5]); grid; hold on;
x=0:0.05:2*pi; y=sin(x);
comet(x,y); hold off;
Se obtin graficele:
1.8

0.9

1.6

0.8

0.8

1.4

0.7

0.6

1.2

0.6

0.4

0.5

0.8

0.4

0.2
0
-0.2

0.6

0.3

0.4

0.2

0.2

0.1

-0.4

-0.6
-0.8
-1

10. Interpolarea si aproximarea functiilor

Fie un set discret de date [x, y], in care x si y sunt vectori de aceeasi lungime si y = f(x),
unde expresia functiei f este necunoscuta. Aproximarea functiei f prin interpolare presupune
determinarea unei functii f* astfel incat pentru orice x [min( x ), max( x )] , sa avem
f (x) f *(x) .

10.1 Interpolarea functiilor de o singura variabila

a) Interpolarea spline cubica

Fie [a, b] un interval al dreptei reale si punctele {x1 , x 2 ,..., x n } , cu


a = x1 < x 2 ... < x n = b . Se numeste functie spline de gradul n , o functie s:[a , b] R cu

proprietatile:
(i) pe fiecare interval [x i , x i+1 ] , s coincide cu un polinom de grad cel mult n;
(ii) s C n 1 [a , b].
Punctele x i , i = 1,2,..., n se numesc nodurile functiei spline. O functie spline interpoleaza
datele ( x1 , y1 ), ( x 2 , y 2 ),..., ( x n , y n ) daca si = y i , i = 1,2,..., n . Cel mai frecvent utilizate sunt
functiile spline de tip polinom de gradul trei, numite si functii spline cubice, de forma
si ( x ) = a i + bi ( x x i ) + c i ( x x i ) 2 + d i ( x x i ) 3 , cu x [x i , x i +1 ] ,
unde a i , bi , c i , d i , i = 1,2,..., n sunt coeficientii functiei spline cubice si se determina din
proprietatile functiei spline, care in acest caz sunt:
(i) si ( x i ) = y i , i = 1,2,..., n;
(ii) si( k ) ( x i +1 ) = si(+k1) ( x i +1 ), k = 0,1, 2 ; i = 1,..., n 1.
Acestea conduc la un sistem liniar cu n-1 ecuatii si n+1 necunoscute; considerand
c1 = c n = 0 , caz in care functia este numita spline naturala, se solutioneaza sistemul,

determinand astfel coeficientii a i , bi , c i , d i , i = 1,2,..., n .


Pentru interpolarea cu functii spline cubice, in Matlab se foloseste functia spline, cu una din
sintaxele:

YI = spline(X,Y,XI) , unde X, Y sunt vectori de lungimi egale cu valorile functiei date prin
puncte, XI - vectorul punctelor in care se doreste interpolarea, YI - valorile interpolate cu functii
cubice spline;
pp = spline(X,Y); YI=ppval(pp,XI) , unde pp este forma pp a interpolantului spline cubic,
folosit de functia ppval; ceilalti termeni au aceeasi semnificatie ca mai sus.

Exemplul 10.1. Se dau vectorii X si Y cu valorile functiei in cateva puncte. Sa se interpoleze cu functii spline
domeniul x cu pasul dx=0.10 si sa se reprezinte grafic ambele functii.
>X=1:10;Y=[0.3 0.1 0.4 0.5 0.6 0.55 0.45 0.3 0.2 0.25];x=1:0.1:10;y=spline(X,Y,x); plot(X,Y,'*',x,y);grid;
legend(valori date, valori interpolate)
Se obtine reprezentarea grafica:

0.7
valori date
valori interpolate
0.6

0.5

0.4

0.3

0.2

0.1

10

Exemplul 10.2. Sa se foloseasca interpolantul pp si functia ppval pentru problema din Exemplul 10.1.
>X=1:10; Y=[0.3 0.1 0.4 0.5 0.6 0.55 0.45 0.3 0.2 0.25]; x=1:0.1:10; pp=spline(X,Y); y=ppval(pp,x);
plot(X,Y,'*',x,y); grid; legend('valori date','valori interpolate')

b) Interpolare multipla

Pentru interpolare liniara, spline cubica si cubica se foloseste in Matlab functia interp1,
cu sintaxa
YI=interp1(X,Y,XI,regula),

unde X, Y - vectorii valorilor functiei date prin puncte, XI - vectorul valorilor in care se doreste
interpolarea, regula - unul din cuvintele cheie linear, spline sau cubic, corespunzand cazurilor

interpolare liniara, respectiv spline cubica si cubica, YI - valorile functiei calculate prin
interpolare.

Exemplul 10.3. Se dau vectorii X si Y cu valorile functiei date prin puncte. Sa se interpoleze pe domeniul x cu
pasul de calcul dx=0.1 valorile functiei prin interpolare liniara, spline cubica si cubica si sa se reprezinte grafic
rezultatele.
>X=1:10; Y=[0.3 0.1 0.4 0.5 0.6 0.55 0.45 0.3 0.2 0.25]; x=1:0.1:10; y1=interp1(X,Y,x,'linear');
y2=interp1(X,Y,x,'spline'); y3=interp1(X,Y,x,'cubic'); plot(X,Y,'*',x,y1,x,y2,x,y3); grid; legend('valori
date','int.liniara','int.spline cubica','int.cubica')

Se obtinereprezentarea grafica:

0.7
valori date
int.liniara
int.spline cubica
int.cubica

0.6

0.5

0.4

0.3

0.2

0.1

10

10.2 Interpolarea biliniara si bicubica a functiilor de doua variabile

Pentru aceasta, in Matlab se foloseste functia interp2, cu sintaxa

ZI=interp2(X,Y,Z,XI,YI,regula)

in care X si Y sunt vectorii coordonatelor in care se dau valorile functiei, dintre care unul este
vector linie si celalalt este vector coloana; Z - vectorul valorilor date ale functiei; XI si YI vectorii coordonatelor in care se doreste interpolarea, ZI - vectorul valorilor functiei calculate
prin interpolare, regula - unul din cuvintele cheie linear sau cubic, pentru interpolare
biliniara, respectiv bicubica.

Exemplul 10.4. Se dau vectorii X, Y, Z, XI si YI. Sa se calculeze prin interpolare cu pasi dx si dy dati, valorile
functiei prin interpolare biliniara si bicubica si sa se reprezinte grafic rezultatele in 3-D.

% program p13a.m
X=1:5; Y=1:3;
Z=[0.1 0.3 0.2 0.1 0.5;
0.2 0.3 0.1 0.4 0.5;
0.2 0.3 0.4 0.3 0.2];
[X0,Y0]=meshgrid(X,Y);
hf=figure; mesh(X0,Y0,Z);
x=1:0.1:5; y=1:0.1:3;
zi=interp2(X,Y',Z,x,y','cubic');
[x0,y0]=meshgrid(x,y);
hf=figure; mesh(x0,y0,zi)
Se obtin reprezentarile grafice:

0.5

0.4

0.3

0.2

0.1
3
2.5

5
4

1.5

2
1

10.3 Regresia polinomiala

Regresia polinomiala aproximeaza, in sensul celor mai mici patrate, valoarea functiei
data printr-un numar de puncte, printr-un polinom de grad n,
Pn ( x ) = a1 x n + a 2 x n 1 + a 3 x n 2 + ... + a k x n k +1 + ... + a n x + a n +1 .

Pentru aceasta, in Matlab se foloseste functia polyfit, cu una din sintaxele:


A=polyfit(X,Y,n), in care X si Y sunt vectorii valorilor functiei data prin puncte, n - gradul
polinomului de interpolare, A - vectorul coeficientilor polinomului de interpolare;
[A,S]=polyfit(X,Y,n), unde Seste o structura pentru utilizarea ulterioara cu functia polyval
pentru a obtine estimarile erorilor in predictie, iar ceilalti termeni au aceeasi semnificatie ca
mai sus.

Exemplul 10.5. Se dau vectorii X si Y. Sa se determine coeficientii polinomului de gradul 3 care interpoleaza
valorile functiei date prin puncte. Sa se reprezinte grafic punctele date si valorile functiei calculate prin interpolare,
folosind pe domeniul x un pas de crestere dx dat.
> X=1:5; Y=[0.1 0.25 0.32 0.40 0.50]; A=polyfit(X,Y,3); x=1:0.1:5; y=polyval(A,x); plot(X,Y,'*',x,y); grid
Se obtine reprezentarea grafica:

0.6
valori date
valori interpolate

0.55
0.5
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1

1.5

2.5

3.5

4.5

11. Rezolvarea ecuatiilor neliniare de o singura variabila

11.1 Rezolvarea ecuatiilor algebrice (polinomiale)

Fie ecuatia f(x) = 0, unde f(x) este un polinom de gradul n,


f ( x ) = a1 x n + a 2 x n 1 + a 3 x n 2 + ... + a k x n k +1 + ... + a n x + a n +1 ,

(1)

cu coeficientii a k , k = 1,2,..., n + 1 , numere reale. Solutiile reale si imaginare ale ecuatiei


a1 x n + a 2 x n 1 + a 3 x n 2 + ... + a k x n k +1 + ... + a n x + a n +1 = 0

se determina in Matlab cu ajutorul functiei roots, cu sintaxa X=roots(A), unde A este vectorul
coeficientilor polinomului si X este vectorul solutiilor.

Exemplul 11.1. Sa se determine solutiile ecuatiei

x 4 + 5x 3 6 = 0.

>A=[1 5 0 0 -6], X=roots(A)


A=
1

-6

X=
-5.04668032415002
-0.47665983792499 + 0.98066087317288i
-0.47665983792499 - 0.98066087317288i
1.00000000000000

11.2 Calculul radacinilor reale ale ecuatiilor transcendente de o singura variabila


Fie ecuatia de o singura variabila, f(x)=0, f :R R , unde expresia functiei f(x) nu
poate fi adusa la forma polinomiala. Pentru calculul unei radacini reale a acestei ecuatii, se
foloseste in Matlab functia fzero, cu una din sintaxele:
x=fzero(nume_functie,x0), unde nume_functie reprezinta numele unei functii externe care
calculeaza y=f(x), iar x0 este o valoare de start.
X=fzero(nume_functie,tol), unde tol reprezinta precizia impusa in aproximarea solutiei;
X=fzero(nume_functie,tol,trace), unde, pentru trace diferit de zero se afiseaza valorile
intermediare din fiecare iteratie.

Exemplul 11.2. Calculul adancimii normale a apei intr-un canal trapezoidal, cunoscand Q, b, m, n si j.
Se editeaza functia externa fhn.m;

function y=fhn(x);
global Q m b n j
h=x;
A=(b+m*h)*h; P=b+2*h*sqrt(1+m^2); R=A/P;
C=1/n*R^(1/6);
y=Q-A*C*sqrt(R*j);

Se editeaza programul principal:


% program calcul h normal
global Q b m n j
Q=10, b=1, m=1, n=0.018, j=0.005
h=fzero('fhn',1,1.0e-16,1)
Se obtine (h calculat cu precizia 1.0e-16):

Q =
10
b =
1
m =
1
n =
0.01800000000000
j =
0.00500000000000
Func evals

f(x)

Procedure

4.90377

initial

0.971716

5.18844

search

1.02828

4.60968

search

0.96

5.30362

search

1.04

4.48508

search

0.943431

5.4638

search

1.05657

4.30606

search

0.92

5.68495

search

1.08

4.04724

search

10

0.886863

5.98703

search

11

1.11314

3.6698

search

12

0.84

6.39325

search

13

1.16

3.11289

search

14

0.773726

6.92661

search

15

1.22627

2.27818

search

16

0.68

7.60122

search

17

1.32

1.00103

search

18

0.547452

8.40301

search

19

1.45255

-1.00529

search

Looking for a zero in the interval [0.54745, 1.4525]


20

1.35584

0.482049

interpolation

21

1.38718

0.0139832

interpolation

22

1.38811 -1.00861e-005

interpolation

23

1.3881

4.17773e-009

interpolation

24

1.3881

3.55271e-015

interpolation

25

1.3881

1.77636e-015

interpolation

26

1.3881 -1.77636e-015

interpolation

h =
1.38810488162221

Rezolvarea sistemelor liniare cu functii specifice Matlab

a) Rezolvarea sistemelor prin folosirea matricei inverse. Fie un sistem de n ecuatii liniare cu n
necunoscute, A x = b . Daca matricea A este nesingulara, atunci inversa ei, notata cu A-1 , poate
fi calculata cu functia inv, cu sintaxa inv(A), si solutia sistemului este x = A 1 b .
Exemplul 6.1. Sa se rezolve sistemul liniar de ecuatii

4x1 + x 2 + 2x 3 = 16

x1 + 3x 2 + x 3 = 10
x + 2x + 5x = 12
2
3
1
Notam, in Matlab, cu A matricea coeficientilor sistemului, cu x vectorul necunoscutelor si cu b vectorul termenilor
liberi. Solutia se obtine cu secventa urmatoare de instructiuni,in modul de lucru direct, verificand si nesingularitatea
matricei A.
>A=[4 1 2; 1 3 1; 1 2 5], b=[16; 10; 12], detA=det(A), x=inv(A)*b
A=
4

b=
16
10
12
detA =
46
x=
3.0000
2.0000
1.0000

b) Rezolvarea sistemelor prin impartirea matricelor. Fie un sistem de n ecuatii liiare cu n


necunoscute, A x = b , unde A este o matrice nesingulara. Solutia se obtine prin impartirea
matricelor, x = A\b. Este cel mai rapid mod de rezolvare a sistemelor liniare in Matlab.
Exemplul 6.2. Sistemul din Exemplul 6.1 poate fi rezolvat si astfel:
>A=[4 1 2; 1 3 1; 1 2 5], b=[16; 10; 12], x=A\b
A=
4

b=
16
10
12
x=
3
2
1

c. Metoda factorizarii LU. Fie un sistem de n ecuatii liiare cu n necunoscute, A x = b , unde


A este o matrice nesingulara. Matricea A poate fi factorizata in forma P A =L U, unde L si U sunt
matrici triunghiulare, inferioara, respectiv superioara, si P este o matrice de permutare. Sistemul
de ecuatii A x = b devine P A x = P b , L U x =P b; notam U x = y si sistemul devine L y =P
b. Daca se determina matricele L si U, solutia sistemului se gaseste in doua etape: y = L\(P b),
x = U-1 y. Pentru determinarea matricelor L si U se foloseste in Matlab functia lu, cu sintaxa
[L,U,P]=lu(A), unde P este matricea de permutare.
Exemplul 6.3. Fie sistemul de ecuatii:

9 x1 + x 2 x 3 = 9
x + 9x x = 9
1
2
4

x1 + 9 x 3 + x 4 = 9
x 2 + x 3 + 9 x 4 = 9
Solutionarea in Matlab, in modul de lucru direct:
> A=[9 1 -1 0; 1 9 0 -1; -1 0 9 1; 0 -1 1 9], b=[9; 9; 9; 9], [L,U,P]=lu(A), y=L\(P*b), x=U \ y
A=
9

-1

-1

-1

-1

b=
9
9
9
9
L=
1.0000

0.1111

1.0000

-0.1111

0.0125

1.0000

-0.1125

0.1139

1.0000

U=

9.0000

1.0000

-1.0000

8.8889

0.1111

-1.0000

8.8875

1.0125

8.7722

P=
1

y=
9.0000
8.0000
9.9000
8.7722
x=
1.0000
1.0000
1.0000
1.0000

d. Metoda factorizarii QR. Se foloseste pentru solutionarea sistemelor cu mai multe ecuatii
decat necunoscute, in sensul celor mai mici patrate. Cea mai buna solutie a unor astfel de sisteme
se obtine in Matlab cu instructiunea x=A\b care utilizeaza aceasta factorizare.
Fie un sistem de m ecuatii liniare cu n necunoscute, m>n, A x = b. Matricea A poate fi
factorizata sub forma Q R = A E (sau Q R E = A), unde E reprezinta o matrice identitate de
permutare, folosind in Matlab functia qr cu sintaxa [Q,R,P]=qr(A). Astfel sistemul de ecuatii
A x = b devine Q R E x = b; notam R E x = y si obtinem Q y = b. Solutia poate fi calculata in
doua etape: y = Q\b, x =(R*E)\ y.
Exemplul 6.4.
>A=[4 1 2; 1 3 1; 1 2 5; 2 -1 3], b=[16; 10; 12; 11], [Q,R,E]=qr(A), y=Q\b, x=(R*E)\y
A=
4

-1

b=
16
10
12

11
Q=
-0.3203 -0.8679 -0.0508 -0.3762
-0.1601 -0.1422 -0.7923
-0.8006

0.5713

0.4564 -0.1712 -0.3483

-0.4804 -0.1347

0.5834

0.6409

R=
-6.2450 -3.2026 -1.9215
0

-3.4269 -0.2469

-3.3536

P=
0

y=
-21.6173
-11.3132
-4.3738
2.5637
x=
1.3042
1.4155
3.2073

e) Rezolvarea sistemelor prin folosirea pseudoinversei matricei. Pseudoinversa se utilizeaza


de regula pentru rezolvarea sistemelor de ecuatii liniare in sensul celor mai mici patrate. Fie un
sistem de m ecuatii liniare cu n necunoscute, cu m>n, A x = b. In Matlab, pseudoinversa matricei
A , avand expresia ( AT A) 1 AT , poate fi calculata cu functia pinv, cu sintaxa X=pinv(A).
Pseudosolutia sistemului va fi x =pinv(A)* b.
Exemplul 6.5.
>A=[4 1 2; 1 3 1; 1 2 5; 2 -1 3], b=[16; 10; 12; 11], x=pinv(A)*b
A=
4

-1

b=
16
10
12

11
x=
3.2073
1.3042
1.4155

Conditionarea sistemelor. Un sistem este slab conditionat daca modificari mici ale valorilor
coeficientilor produc variatii mari ale solutiilor. Functia cond, cu sintaxa c=cond(A) returneaza
numarul de conditionare al matricei A, calculat ca raportul dintre cea mai mare si cea mai mica
valoare singulara a acesteia. O valoare mare indica o conditionare slaba si invers. O functie mai
performata pentru estimarea conditionarii unei matrice este rcond, cu sintaxa r=rcond(A), care
returneaza valoarea 1 pentru matrice bine conditionate si valori apropiate de zero pentru cele
foarte slab conditionate. Imbunatatiri ale conditionarii se pot obtine prin aplicarea unor
transformari elementare matricelor.
Exemplul 6.6. Fie sistemul
1.57 x - 3.42 y = 2.35
1.60 x -3.40 y = 2.40
Se calculeaza numarul de conditiuonare si se rezolva sistemul in modul de lucru direct. Se constata o
conditionare foarte slaba. Modificati apoi foarte putin elementul de pe linia 1, coloana 1, a matricei A,
luandu-l egal cu 1.58. Rezolvati din nou sistemul. Observati diferentele intre cele doua solutii. Prin scaderea
primei ecuatii din a doua si multiplicarea rezultatului cu 100 se obtine, in acest caz, o imbunatatire a solutiei.
Repetati calculul numarului de conditionare si analizati din nou stabilitatea solutiei.
>A=[1.57 -3.42; 1.60 -3.40], b=[2.35; 2.40], x=A\b, c=cond(A), r=rcond(A)
A=
1.5700 -3.4200
1.6000 -3.4000
b=
2.3500
2.4000
x=
1.6269
0.0597
c=
211.0497
r=
0.0039

15. Rezolvarea sistemelor neliniare

Nu exista metode generale, bune, pentru rezolvarea sistemelor cu mai mult de o ecuatie
neliniara si, foarte probabil, nici nu vor fi [Press W. H, Flannery B. P., Vetterling W. T. Numerical Recipes, pag. 269, Cambridge University Press, Cambridge, 1989]. Aceasta
afirmatie este argumentata prin faptul ca functiile sistemului nu au nici o legatura intre ele,
numarul solutiilor este necunoscut si o solutie nu reflecta nimic special cu privire la o functie
sau alta.
In cazul sistemelor de doua ecuatii, reprezentarea contururilor functiilor de valoare zero pe un
domeniu dat poate furniza informatii cu privire la existenta si numarul solutiilor reale pe
domeniul considerat. In cazul sistemelor cu mai mult de doua ecuatii, procedeul este dificil de
aplicat. In unele aplicatii tehnice, numarul solutiilor si domeniile care le contin rezulta din
considerente fizice. Presupunand ca o solutie a sistemului a fost localizata, calculul solutiei
aproximative este posibil printr-un procedeu iterativ, cel mai cunoscut fiind Newton - Raphson.
Exemplul 15.1.a. Sa se localizeze solutiile sistemului de ecuatii

f 1 ( x1 , x 2 ) = x12 + x 22 x1 = 0

f 2 ( x1 , x 2 ) = x12 x 22 x 2 = 0
Vom reprezenta in planul ( x1 , x2 ) contururile functiilor f 1 , f 2 de valoare zero, folosind functia Matlab
contour. Se editeaza functia externa contf0.m in care se definesc expresiile functiilor f 1 , f 2 si care poate fi apelata
cu sintaxa contf0 (X1,X2), unde X1, X2 reprezinta vectorii domeniului de calcul ai variabilelor x1 , x2 .
Considerand X1=-1:0.02:1, X2=-1:0.02:1, se obtine reprezentarea grafica din Fig. 15.1.a. Se observa ca sistemul
are doua solutii reale, prima banala si a doua, localizata mai bine cu ajutorul functiei Matlab zoom, Fig. 15.1.b,
continuta in domeniul x1 ( 0.771; 0.772) , x2 ( 0.419; 0.420) .

function contf0(X1,X2);
X2=X2';
[x1,x2]=meshgrid(X1,X2);
f1=x1.^2+x2.^2-x1;
f2=x1.^2-x2.^2-x2;
hf=figure;
contour(x1,x2,f1,[0 0],'r'); hold on;
contour(x1,x2,f2,[0 0],'b:'); grid;
xlabel('x1'); ylabel('x2');
legend('f1(x1,x2)=0','f2(x1,x2)=0'); zoom on;

1
f1(x1,x2)=0
f2(x1,x2)=0

0.8

f1(x1,x2)=0
f2(x1,x2)=0

0.423

0.6

0.422

0.4
0.421

x2

x2

0.2
0

0.42

-0.2
0.419
-0.4
0.418

-0.6
-0.8
-1
-1

0.417
-0.5

0
x1

0.5

0.769

a)

0.77

0.771

0.772
x1

0.773

0.774

b)
Fig. 15.1.

15.1 Metoda Newton - Raphson

Fie sistemul de n ecuatii neliniare cu n necunoscute,


f 1 ( x1 , x 2 ,..., x n ) = 0
f ( x , x ,..., x ) = 0
2 1 2
n

............................
f n ( x1 , x 2 ,..., x n ) = 0

(15.1)

unde f i : D R n R n , i = 1, 2,..., n , in care D este o multime deschisa.


Notam f = ( f 1 , f 2 ,..., f n ) T , x = ( x1 , x 2 ,..., x n ) T , unde T semnifica operatia de transpunere,
si sistemul (15.1) poate fi scris sub forma matriceala
f (x) = 0 .

(15.2)

Fie vectorul = (1 , 2 ,..., n ) T o solutie exacta a sistemului (15.2), astfel incat


f ( ) = 0 .

(15.3)

Fie V R n o vecinatate a lui si fie vectorul x ( k ) = ( x1( k ) , x 2( k ) ,..., x n( k ) ) T V o


aproximare a lui , astfel incat

= x (k ) + (k ) ,

(15.4)

unde ( k ) este vectorul corectiilor (erorilor de aproximare). Tinand cont de relatia (15.4), relatia
(15.3) devine
f (x ( k ) + ( k ) ) = 0 .

(15.5)

Presupunem ca functiile f (x) sunt derivabile si au derivate continue de ordinul intai pe D.


Prin dezvoltare in serie Taylor in vecinatatea punctului = x ( k ) + ( k ) si retinand doar primii
doi termeni se obtine
f ( x ( k ) + ( k ) ) f ( x ( k ) ) + f '( x ( k ) ) ( k ) ,

(15.6)

sau, tinand cont de (15.5),


f ( x ( k ) ) + f '( x ( k ) ) ( k ) = 0 ,

( 15.7)

unde f '( x ( k ) ) reprezinta matricea functionala (matricea jacobiana) a sistemului,

f 1 f 1
f
... 1
x1 x 2
x n
f '( x ( k ) ) = J( x ( k ) ) = .... ......

f n f n
x1 x 2

f
..... = i , i, j = 1, 2,..., n .
x j
f n
...
x n

(15.8)

Sistemul de ecuatii (15.7) este liniar in raport ( k ) , astfel incat, presupunand ca matricea
J( x ( k ) ) este nesingulara, corectiile pot fi calculate ca solutie a sistemului liniar

J( x ( k ) ) ( k ) = f ( x ( k ) )

sau, folosind inversa matricei jacobiene,

(15.9)

( k ) = J ( x ( k ) ) 1 f ( x ( k ) ) .

( 15.10)

Corectiile calculate cu relatiile (15.9) sau (15.10) vor verifica ecuatia (15.4) numai daca
sistemul de ecuatii (15.2) este liniar in raport cu x, datorita liniarizarii admise in relatia (15.6).
In cazul general, nu putem decat sa obtinem o noua aproximare a solutiei exacte,
x ( k +1) = x ( k ) + ( k ) ,

(15.11)

x ( k +1) = x ( k ) J( x ( k ) ) 1 f ( x ( k ) ) .

(15.12)

sau, tinand cont de (15.10),

Relatia (15.12) reprezinta o extindere a metodei Newton (metoda tangentei) folosita pentru
rezolvarea ecuatiilor neliniare de o singura variabila la cazul sistemelor neliniare,
multivariabile.
Pornind de la o solutie de start, x ( 0 ) , din vecinatatea solutiei exacte, in anumite conditii sirul
vectorilor generati prin relatia iterativa ( 15.12) converge catre solutia exacata .
Daca functiile f(x) sunt derivabile si au derivate de ordinul intai continue pe D si daca
matricea jacobiana J( x ( 0 ) ) admite o inversa J( x ( 0 ) )1 , atunci convergenta procedeului iterativ
este asigurata de indeplinirea conditiilor [Simionescu I., Dranga M., Moise V. - Metode
numerice in tehnica, pag. 83, Editura Tehnica, Bucuresti, 1995]

J( x ( 0 ) )1 A ; J( x ( 0 ) )1 f ( x ( 0 ) = x (1) x ( 0 ) B ;

k =1

2fi
C, i, j = 1,2,..., n ; 2nABC 1 ,
xix j

(15.13)
unde

reprezinta norma .

Daca conditiile (15.13) sunt indeplinite si este o solutie a sistemului, atunci aproximatiile
succesive x ( p ) , p = 0,1, 2,... verifica inegalitatea [Demidovici B., Maron I. - Elements de calcul
numerique, pag. 469, Edition Mir, Moscou, 1973]

1
2

x( p)

p 1

B( 2nABC )2 p 1 ,

(15.14)

ceea ce semnifica faptul ca pentru 2nABC < 1 convergenta procedeului iterativ Newton Raphson este superrapida.
Drep criterii de stop calcul in aplicarea relatiei iterative (15.12) pot fi folosite conditiile

x ( k +1) x ( k ) ax , ax > 0, f ( x ( k +1) ) af , af > 0,

(15.15)

unde ax si af sunt erorile maxime absolute admise (tolerate, impuse) in aproximarea solutiei

, respectiv a valorilor f ( ). Daca x ( k +1) > 1 , poate fi folosita si conditia

x ( k +1) x ( k )
x ( k +1)

rx , rx > 0 ,

(15.16)

unde rx reprezinta eroarea relativa maxima admisa in aproximarea solutiei.


Pentru implementarea algoritmului in limbaj Matlab, se editeaza functia externa frsnmn.m
prezentata mai jos, functie care poate fi folosita cu sintaxa

[x, cod, k]=frsnmn(Fun01,Fun02,x0), sau


[x, cod, k]=frsnmn(Fun01,Fun02,x0,tol,trace,lista_de_parametri_de_intrare),

unde:
x reprezinta vectorul solutie calculata;
cod - un scalar cu valoarea 0 pentru iesire normala din algoritm si 1 in caz contrar (daca
dupa
kmax=1000 de iteratii nu este atinsa convergenta cu precizia impusa);
k - numar iteratii efectuate;
Fun01 - sir de caractere continand numele functiei externe editate de utilizator pentru
definirea expresiilor functiilor sistemului de ecuatii; este folosita pentru evaluarea
functiilor la fiecare iteratie a algoritmului si trebuie sa aiba sintaxa
y=Fun01(x), sau, daca lista_de_parametri nu este vida, y=Fun01(x,varagin),
unde x este vectorul coloana al necunoscutelor;
Fun02 - sir de caractere continand numele functiei externe pentru calculul elementelor
matricei jacobiene. Daca se doreste evaluarea derivatelor de ordinul intai pe cale
numerica, atunci poate fi folosita functia externa numjac.m editata in acest scop,
prezentata mai jos, si Fun02 va contine sirul de caractere numjac. Daca se folosesc

expresiile derivatelor de ordinul intai, atunci utilizatorul va edita o functie externa cu


sintaxa
jac=Fun02(x) sau, dupa caz, jac=Fun02(x,varargin),
unde x este vectorul coloana al necunoscutelor.
x0 - vectorul coloana al solutiei de start;
tol - scalar pozitiv, cu valoare mica, reprezentand erorile maxime absolute si relative
admise;
trace - scalar cu valoarea 0 daca nu se doreste afisarea rezultatelor la fiecare iteratie si diferit
de zero in caz contrar;
lista_de_parametri este o lista de nume de parametri, separate intre ele prin virgula, pe care
utilizatorul doreste sa-i transmita din programul apelant functiilor Fun01 si Fun02.

function [x,cod, k]=frsnmn(Fun01,Fun02,x0,tol,trace,varargin);


% Program A. Pricop, dec. 2001
% Initializari, verificari
if nargin<4|isempty(tol), tol=eps; end
if nargin<5|isempty(trace), trace=0; end
if (~isfinite(x0))
error('Solutia de start trebuie sa fie finita ');
end
% Cap tabel pentru afisari intermediare daca este cazul
if trace
disp('
');
disp('
=====================================================');
disp('
Iteratia
Valori x
Valori f(x)
Marime pas dx');
disp('
-----------------------------------------------------');
end
% Numar maxim de iteratii propus, initializare cod mod derivare
kmax=1000; dercod=0;
% Convertire functii in modul inline
Fun01=fcnchk(Fun01,length(varargin));
Fun02=fcnchk(Fun02,length(varargin));
if length(Fun02)==length('numjac')
if Fun02=='numjac'
dercod=1;
end
end
% Evaluare functii si jacobian in solutia de start
fx0=feval(Fun01,x0,varargin{:});
if dercod==0;
jx0=feval(Fun02,x0,varargin{:});
else
jx0=feval(Fun02,Fun01,x0,varargin{:});
end
% Verifica daca valorile functiilor si jacobianului sunt finite si reale
if any(~isreal([fx0 jx0]))|any(~isfinite([fx0 jx0]))
error('Valorile functiilor si jacobianului nu sunt reale si finite')
end
% Bucla principala pentru algoritmul Newton-Raphson
for k=1:kmax;
% calcul x in iteratia k si marimile pasilor
dif=jx0\fx0; x=x0-dif;
% Evaluare functii si jacobian in x
fx=feval(Fun01,x,varargin{:});
if dercod==0;
jx=feval(Fun02,x,varargin{:});
else
jx=feval(Fun02,Fun01,x,varargin{:});

end
% verifica daca fx si jx sunt reale si finite
if any(~isreal([fx jx]))|any(~isfinite([fx jx]))
error('Valorile functiilor si jacobianului nu sunt reale si finite')
end
% afiseaza valorile curente x, f(x) si dif daca este cazul
if trace
disp(sprintf('
%5.0f',k));
disp(sprintf('
%13.6g %13.6g %13.6g\n',[x';fx';dif']));
disp('
-----------------------------------------------------')
end
% verifica indeplinirea criteriilor de convergenta
if abs(fx)<=tol
if abs(dif)<=tol;
if (abs(x)<1)
cod=0; return; % criterii de stop indeplinite
elseif (abs(dif)./abs(x))<=tol
cod=0; return;
end
end
end
% criteriile de stop nu sunt indeplinite;
% initializare x0, fx0 si jx0 pentru o noua iteratie
x0=x; fx0=fx; jx0=jx;
end
% Au fost efectuate kmax iteratii fara atingerea convergentei
disp(['Iesire anormala dupa ' fprints('% 5.0f',k) ' iteratii ']);
cod=1;
% iesire anormala din subprogram
function jac=numjac(Fun01,x,varargin)
Fun01=fcnchk(Fun01,length(varargin));
[n,m]=size(x);
xmin=min(abs(x)); xmax=max(abs(x));
dx=0.01;
t=zeros(n);
for k=1:n;
xs=x(k);
x(k)=xs-dx;
y1=feval(Fun01,x,varargin{:});
x(k)=xs+dx;
y2=feval(Fun01,x,varargin{:});
x(k)=xs;
jac(:,k)=(y2-y1)./(2*dx);
end

Exemplul 15.1.b. Sa se calculeze solutiile sistemului de ecuatii din Exemplul 15.1.a.


Se editeaza functiile utilizator fex15_1.m si jex15_1.m pentru evaluarea functiilor sistemului, respectiv calculul
matricei jacobiane:

function y=fex15_1(x);
[n,m]=size(x);
y=zeros(n,m);
y(1)=x(1)^2+x(2)^2-x(1);
y(2)=x(1)^2-x(2)^2-x(2);
function jac=jex15_1(x);
n=length(x);
jac=zeros(n,n);
jac(1,1)=2*x(1)-1; jac(1,2)=2*x(2);
jac(2,1)=2*x(1); jac(2,2)=-2*x(2)-1;
In modul de lucru direct, se initializeaza valorile parametrilor x0=[0.771; 0.419], tol=eps (in Matlab, eps este
predefinit, eps=2.22044604925031e-01), tol=1, dupa care se apeleaza functia frsnmn:

>x0=[0.771;0.419]; tol=eps; trace=1;


>[x,cod,k]=frsnmn('fex15_1','jex15_1',x0,tol,trace)

Se obtine:
=====================================================
Iteratia
Valori x
Valori f(x)
Progres
----------------------------------------------------1
0.771846
1.12973e-006
-0.000845521
0.419644
3.00085e-007
-0.000644066
----------------------------------------------------2
0.771845
1.50424e-012
1.01487e-006
0.419643
5.55889e-013
6.88618e-007
----------------------------------------------------3
0.771845
0
1.40847e-012
0.419643
0
8.7988e-013
----------------------------------------------------4
0.771845
0
0
0.419643
0
0
----------------------------------------------------x =
0.771844506346038
0.419643377607081
cod =
0
k =
4
Daca se adopta solutia de start x0=[1.0 ; 1.0], destul de indepartata de solutia exacta, se obtine practic aceeasi
solutie numerica dupa 7 iteratii. Daca adopta solutia de start x0=[0.1; 0.1], se obtine solutia x=[0; 0], dupa 6
iteratii, care este si solutie exacta.
Daca se doreste evaluarea pe cale numerica a elementelor matricei jacobiene, functia jex15_1 nu mai este
necesara, adoptandu-se pentru functia Fun02 numele numjac:

>x0=[0.771; 0.419]; tol=eps; trace=1;


>[x,cod,k]=frsnmn('fex15_1','numjac',x0,tol,trace)

Se obtine, tot dupa 4 iteratii, aceeasi solutie.

Exemplul 15.2. Sa se calculeze solutiile reale ale sistemului de ecuatii

f1 ( x1 , x2 ) = x1 + 3 log x1 x22 = 0

2
f 2 ( x1 , x2 ) = 2 x1 x1x2 5 x1 + 1 = 0
a) Localizarea solutiilor reale. Se foloseste functia contf0.m in care, pe randurile 4 si 5, se inscriu expresiile
functiilor sistemului,
f1=x1+3.*log10(x1)-x2.^2;

f2=2.*x1.^2-x1.*x2-5.*x1+1;

In modul de lucru direct, se initializeaza domeniile de reprezentare gafica X1 si X2 si se apeleaza functia


contf0.m:
>X1=0.001:0.02:5; X2=-5:0.02:5; contf0(X1,X2)
Se obtine reprezentarea grafica din Fig. 15.2.
5
f1(x1,x2)=0
f2(x1,x2)=0

4
3
2

x2

1
0
-1
-2
-3
-4
-5

x1

Fig. 15.2
Se observa ca sistemul are doua solutii reale, care pot fi localizate astfel: x (1) D1 = {x1 [1; 2], x2 [2; 1]} ,

x ( 2 ) D2 = {x1 [3; 4], x2 [2; 3]} .


b) Calculul solutiilor aproximative. Se editeaza functiile utilizator fex15_2.m si jex15_2.m pentru evaluarea
functiilor, respectiv calculul matricei jacobiene:
function y=fex15_2(x);
y=zeros(2,1);
y1=x(1)+3*log10(x(1))-x(2)^2;
y2=2*x(1)^2-x(1)*x(2)-5*x(1)+1;
y=[y1;y2];
function t=jex15_2(x);
t=zeros(2);
t(1,1)=1+3*0.43434/x(1); t(1,2)=-2*x(2);
t(2,1)=4*x(1)-x(2)-5; t(2,2)=-x(1);
Se adopta precizia tol=eps (eps=2.22044604925031e-016). Calculul primei solutii, x (1) , in modul de lucru
direct:
>x0=[1.5;-1.5]; tol=eps; trace=1;
>[x,cod,k]=frsnmn('fex15_2','jex15_2',x0,tol,trace)
Se obtine, dupa 8 iteratii:
x =
1.45889023015218
-1.39676700918162
Calculul solutiei x ( 2 ) :

>x0=[3.5;2.5]; tol=eps; trace=1;


>[x,cod,k]=frsnmn('fex15_2','jex15_2',x0,tol,trace)
Se obtine, dupa 6 iteratii:
x =
3.48744278764295
2.26162863055359

Aplicatia 15.1. Calculul curbei de depresiune si a debitului de filtratie prin corpul unui baraj din
pamant fundat pe un strat impermeabil, metoda N. N. Pavlovski

a) Baraj din pamant omogen fara dren.

Fie o sectiune transversala prin baraj - Fig. 15.3. Sistemul de ecuatii atasat problemei [ , pag. 257],
y
a
d0

Pamant
omogen

1:m2

Hb
1:m1

a0
h0 x

Strat impermeabil

s
Fig. 15.3 - Schema de calcul si notatii.
poate fi scris sub forma

f1 ( h, s, a0 , q ) =

q Hb d0 h
Hb

ln
=0
k
m1
Hb h

f 2 ( h, s, a0 , q ) =

q h 2 ( a0 + h0 )2

=0
k
2s

q a

a + h0
0 1 + ln 0
, daca h0 > 0
h0
k m2

f 3 ( h, s, a0 , q ) =
=0
q
a
0 , daca h = 0

0
k m

f 4 ( h, s, a0 , q ) = s a m2 [ H b ( a0 + h0 )] = 0

in care necunoscutele problemei sunt h - ordonata curbei de depresiune in punctul de abscisa x=0, [m], s - abscisa
punctului de iesire a curbei de depresiune pe taluzul aval al barajului, [m], a0 - diferenta dintre ordonata punctului
de iesire a curbei pe taluzul aval si nivelul apei in aval de baraj , [m], q - debitul de filtratie pe un metru din
lungimea barajului, [m 3 / zi] sau [m 3 / s] , ceilalti parametri reprezentand constante ale problemei: H b - inaltimea
barajului, [m], d0 - inaltimea de garda, [m], m1 , m2 - coeficientii de taluz ai barajului; a - latimea la coronament a

barajului, [m], si k - coeficientul de permeabilitate a pamantului, [m/zi] sau [m/s], dupa unitatea de masura
adoptata pentru q, h 0 .- adancimea apei in aval de baraj, [m]. Dupa solutionarea sistemului, ordonatele curbei de
depresiune se calculeaza, pentru x [0; s] , cu relatia y 2 = h 2 2qx / k .
Fie x = [h s a0 q ]T vectorul necunoscutelor si f ( x ) vectorul functiilor sistemului. Se editeaza functia
externa fap15_1a.m pentru evaluarea functiilor sistemului. Elementele matricei jacobiene vor fi evaluate prin
derivare numerica folosind functia numjac.m.

function y=fap15_1a(x,varargin)
[n,m]=size(x);
y=zeros(n,m);
h=x(1); s=x(2); a0=x(3); q=x(4);
[Hb,d0,m1,m2,a,k,h0]=deal(varargin{1:7});
y(1)=q/k-(Hb-d0-h)/m1*log(Hb/(Hb-h));
y(2)=q/k-(h^2-(a0^2+h0))/(2*s);
if h0==0
y(3)=q/k-a0/m2;
else
y(3)=q/k-a0/m2*(1+log((a0+h0)/h0));
end
y(4)=s-a-m2*(Hb-(a0+h0));fap14_a1
Se initializeaza parametrii constanti, solutia de start (pozitiva), precizia de calcul , parametrul trace si se
apeleaza functia frsnmn.m in modul de lucru direct:

>Hb=15;d0=1.50;m1=3;m2=4;a=5;k=0.1,h0=0;x0=[7; 40; 1; 10]; tol=eps; trace=1;


>[x,cod,k]=frsnmn('fap15_1a','numjac',x0,tol,trace,Hb,d0,m1,m2,a,k,h0)

si, dupa 10 iteratii, se obtine vectorul solutie


x =
11.0624896217246
47.6124056723446
4.34689858191385
0.108672464547846
sau h = x(1), s = x( 2), a0 = x(3), q = x( 4) . Ordonatele curbei de depresiune pot fi acum calculate cu relatia

y = h 2 2qx / k , x [0; s] , in in modul de lucru direct:

>h=x(1),s=x(2),a0=x(3),q=x(4), xc=0:1:s; yc=sqrt(h^2-2.*q.*xc./k);[xc' yc']

b) Baraj din pamant omogen cu dren in aval

Fie o sectiune transversala prin baraj - Fig. 15.4. In punctul de abscisa x = s , s dat, se afla capatul amonte al
unui dren care coboara curba de filtratie la nivelul apei in aval, deci a0 = 0 . In acest caz, sistemul de ecuatii

y
a
d0
1:m2
Hb
1:m1

h
Dren

h0 x

Strat impermeabil

s
Fig. 15.4 - Schema de calcul si notatii.

atasat problemei este

f1 ( h , q ) =

f ( h, q ) =
2

q Hb d0 h
Hb
=0
ln

k
m1
Hb h
q h2

= 0, s 0
k 2s

in care notatiile au aceeasi semnificatie ca in cazul precedent. Fie x = [h q]T vectorul necunoscutelor si f ( x )
vectorul functiilor sistemului. Se editeaza functia externa fap15_1b.m pentru evaluarea functiilor sistemului.
Elementele matricei jacobiene vor fi evaluate, ca si in cazul precedent, prin derivare numerica folosind functia
numjac.m.

function y=fap15_1b(x,varargin)
[n,m]=size(x);
y=zeros(n,m);
h=x(1); q=x(2);
[Hb,d0,m1,a,k,h0,s]=deal(varargin{1:7});
y(1)=q/k-(Hb-d0-h)/m1*log(Hb/(Hb-h));
y(2)=q/k-(h^2-h0^2)/(2*s);
Se initializeaza parametrii si se apeleaza functia frsnmn.m:
>Hb=15;d0=1.5;m1=3;a=5;k=0.1;h0=0;s=105;x0=[10; 1];tol=1.0e-006;trace=eps;
>[x,cod,k]=frsnmn('fap15_1b','numjac',x0,tol,trace,Hb,d0,m1,a,k,h0,s)

Se obtine, duap 6 iteratii, solutia


x =
12.2353940689914
0.0712880323921478
sau h = x(1), q = x(2); coordonatele curbei de depresiune, pentru x [0; s] , pot fi acum calculate cu relatia

y = h 2 2qx / k .

Aplicatia 15.2. Calculul hidraulic al retelelor inelare de conducte sub presiune pentru

transportul si didtributia apei

Se considera o retea de conducte sub presiune pentru distributia apei, constituita din -Fig.15.5: m tronsoane,
numerotate prin i = 1, ..., m; n noduri interioare de distributie a debitelor, numerotate prin j = 1, ..., n, si
r noduri rezervoare, numerotate prin j = n+1, ...,n+r.

8
3

Q6=0.030 m3/s

Q8=0.010 m /s
Tronson 13
L13 =500 m

q13

Tronson 10
L10 = 500 m

q14

3
q6
q3
Tr. 7
L7=600 m
3
Q3=0.020 m /s
Q1=0.010 m3/s
D
q7 5
q5 Tronson 5
q10
Tr. 8
L5 =500 m
L8=600 m
Q5=0.010 m3/s
q8
4

9
Q9=0.020 m3/s

q11

Tronson 1
L1 = 100 m

Tronson 3
L3 =1000 m

Tronson 6
L6 = 1000 m

Tronson 11
L11=1000 m

q12
q9
Tr. 14
3
L14 = Tronson 12 Q7=0.020 m /s Tronson 9 Q4=0.015 m3/s
300 m L12 = 1000 m
L9 =1000 m

q1 10
q2

Tronson 2
L2 = 500 m

q4
Tronson 4
L4 = 1000 m

Q2=0.020 m3/s

11

Fig. 15.5 - Retea inelara cu m = 14 tronsoane, n = 9 noduri interioare si r = 2 noduri rezervoare.

Fie vectorii coloana, cu elementele cunoscte:


L - vectorul lungimilor tronsoanelor, cu elementele L i , i=1,...,m, [m];
D - vectorul diametrelor conductelor de pe tronsoane, cu elementele D i , i=1,...,m, [m];
E - vectorul rugozitatilor absolute echivalente ale conductelor de pe tronsoane, cu elementele

E i , i = 1,..., m , [m];
Q - vectorul debitelor distribuite la noduri, cu elementele Q j ,, j=1,...,n, considerate cu semnul + daca sunt
debite de iesire din nod si cu semnul - daca sunt debite de intrare in nod, [m3/s];
H - vectorul cotelor piezometrice la nodurile rezervoare, cu elementele H j , j=n+1,...,n+r, [m].
Fie un sens initial, presupus de curgere a apei prin conducte si fie vectorii coloana cu elementele necunoscute:
q - vectorul debitelor pe tronsoane, elementele q i , i=1,...,m, considerate cu semnul + daca curgerea are loc
in sensul considerat initial si cu semnul - daca scurgerea are loc in sens invers, [m3/s];
h - vectorul cotelor piezometrice la nodurile interioare, cu elementele h j , j=1,...,n, [m];
Se considera ca fiecare tronson i, i=1,...,m, este delimitat amonte de nodul j i2 si aval de nodul j i1 .
Ecuatiile de continuitate a debitelor la nodurile interioare, cate una pentru fiecare nod interior, pot fi scrise sub
forma matriceala
AT q - Q = 0,

iar ecuatiile de miscare a apei prin conducte, in regim permanent, cate una pentru fiecare tronson al retelei, pot fi
scrise sub forma matriceala

B ( q )
0

A q A H
+
= 0,
0 h 0

in care:

A = [a ij* ], ( i = 1,..., m; j = 1,..., n ) , A = [ 0 mn [a ij* ]], ( i = 1,..., m; j = n + 1,..., n + r )] , unde 0 mn


este o matrice cu elemente zero, cu m linii si n coloane, iar

a ij* , i = 1,..., m, j = 1,..., n + r , sunt elementele

matricei A de incidenta (de legatura) a nodurilor retelei, elemente definite prin relatia

1, daca j = j i1 , (nodul j este nod de capat aval al tronsonului i );

a = 1, daca j = j i 2 , (nodul j este nod de capat amonte al tronsonului i );


0, in caz contrar.

*
ij

AT - transpusa matricei A, avand n linii si m coloane;

B(q ) - matrice diagonala, cu m elemente pe diagonala principala, definite prin relatia bii = Ci qi ,

Ci =

8 i Li
, = Fi ( q i , Di , Ei ) , i = 1,..., m , in care i sunt coeficientii de rezistenta ai
g 2 Di5 i

pierderilor de sarcina distribuite de pe conductele tronsoanelor, cu valori constante in analize preliminare


ale retelei sau calculate cu relatiile A. D. Altschul sau Colebrook - White in analize mai precise.

Considerand atat ecuatiile de continuitate cat si cele de miscare, sistemul atasat problemei poate fi scris sub
forma compacta

B ( q )
T
A

sau, notand vectorul necunoscutelor cu

A q A H
+
= 0,

0 h Q

x = [q h]T si vectorul functiilor cu f(x),


B ( x )
f (x ) = T
A

A
A H
=0.
x+
0
Q

Sistemul de ecuatii este neliniar, cu n+m ecuatii si tot atatea variabile, si intereseaza solutia reala, cu h 0 ,
care, daca exista, poate fi calculata printr-o metoda numerica, Newton - Raphson de exemplu. Matricea jacobiana
a sistemului este, neglijand derivatele

i
q i

care au valori mici,

2 B ( x )
J( x ) = T
A

A
,
0

obtinandu-se usor din ecuatiile sistemului prin inmultirea matricei B(x) cu scalarul 2.
Exemplu numeric. Se considera reteaua inelara din Fig. 15. 5, cu sensul initial de curgere marcat pe figura si
cu datele initiale:

m = 14 tronsoane; n = 9 noduri interioare; r = 2 noduri rezervoare (nodurile 10 si 11);


L = [ 100

500

100

100

500

100

600

600 1000

500 1000 1000

500

300]T , [m];

D = [0.496 0.315 0.315 0.248 0.248 0.248 0.177 0.177 0.248 0.248 0.248 0.315 0.315 0.496] T , [m];

E = [ E i ]T , E i = 0.00005 , i = 1,..., m , [m];


Q = [0.010 0.020 0.020 0.015 0.010 0.030 0.020 0.010 0.020] T , [m3/s];
H=[

142.00 142.50] T , [m];

Din configuratia retelei, rezulta matricea de incidenta a nodurilor retelei,

A* =

1
-1

0
0

0
0

0
0

0
0

0
0

0
0

-1 0 1
0 -1 0
0 0 -1

0
1
1

0
0
0

0
0
0

0
0
0

0
0

0 1
1 -1

0
0

0
0
0
0
0
0

0
0
0

0
1

0
0

0 -1 0
0 0 0
0 0 -1
0 0 1
0 0 0

1
0
0

0 0
0 -1
1 -1

0
0

0
0

0
0

0
0

0
0

1
0

0 -1
1 0

0
0

0
0

0
0

0
0

0
0

0
0

0
0

1
0

de unde rezulta matricea A formata din primele n = 9 coloane ale matricei

0 -1 0
0 0 0

0 0 0

0 0 0
0 0 0

0 0 0
0 0 0
,
0 0 0
0 0 0

0 0 0
0 0 0
-1 0 0

-1 0 0
1 0 - 1
A * , si matricea A formata din

coloanele j = n + 1,..., n + r = 10,11 , restul coloanelor avand elementele egale cu zero.


Se editeaza functia utilizator fretea.m pentru evaluarea functiilor sistemului, valorile

fiind calculate cu

relatia A. D. Altschul, functia jretea.m pentru calculul elementelor matricei jacobiene si programul principal
pretea.m pentru initializarea datelor, apelarea functiei frsnmn.m pentru rezolvarea sistemului de ecuatii prin
metoda Newton - Raphson si afisarea rezultatelor.

function y=fretea(x)
global n m L D Q H A Abarat E B lambda
y=zeros(n+m,1);
q(1:m,1)=x(1:m,1);
g=9.81; niu=1.01e-006;
omega=(pi.*D.^2)./4.0; v=abs(q)./omega; Re=v.*D./niu;
lambda=0.11.*(E./D+68./Re).^0.25;
C=8.*lambda.*L./((g*pi^2).*D.^5); b=C.*abs(q);
B=diag(b);
y=[B A; A' zeros(n,n)]*x+[Abarat*H; -Q];
function jac=jretea(x)
global n m A B
jac=zeros(n+m,n+m);
jac=[2.*B A; A' zeros(n)];

% program pretea.m
% A. Pricop, dec. 2001
global n m L D Q H A Abarat E
% Date initiale
m=14; n=9; r=2;
L=[ 100
500
100
100
500
100
600
600 1000
500 1000...
1000
500
300]';
D=[0.496 0.315 0.315 0.248 0.248 0.248 0.177 0.177 0.248 0.248 0.248...
0.315 0.315 0.496]';
Q=[0.010 0.020 0.020 0.015 0.010 0.030 0.020 0.010 0.020]';
E=ones(m,1).*0.00005;
H=zeros(n+r,1); H(10,1)=142.00; H(11,1)=142.50;
% Matricea de incidenta
Astelat=[ 1 0 0 0 0 0 0 0 0 -1 0;
-1 1 0 0 0 0 0 0 0 0 0;
-1 0 1 0 0 0 0 0 0 0 0;
0 -1 0 1 0 0 0 0 0 0 0;
0 0 -1 1 0 0 0 0 0 0 0;
0 0 -1 0 0 1 0 0 0 0 0;
0 0 0 0 1 -1 0 0 0 0 0;
0 0 0 -1 1 0 0 0 0 0 0;
0 0 0 1 0 0 -1 0 0 0 0;
0 0 0 0 0 1 -1 0 0 0 0;
0 0 0 0 0 1 0 -1 0 0 0;
0 0 0 0 0 0 1 0 -1 0 0;
0 0 0 0 0 0 0 1 -1 0 0;
0 0 0 0 0 0 0 0 1 0 -1];
% ------------------------------------------------------------------% Construieste matricele A si Abarat din Astelat
A(1:m,1:n)=Astelat(1:m,1:n); Abarat=[zeros(m,n) Astelat(1:m,n+1:n+r)];
% Initializare argumente si apelare functie pentru rezolvarea
% sistemului de ecuatii prin metoda Newton - Raphson
%
* construieste solutia de start x0=[q0; h0]
sQ=sum(Q); qs=sQ/m; q0=ones(m,1).*qs; % q0 ca debit mediu
hs=min(H(n+1:n+r,1))-0.5; h0=ones(n,1).*hs; % h0<min(H(n+1:n+r,1))
x0=[q0; h0];
if km==0;
% Metoda Newton - Raphson
%
* initializare precizie de calcul, optiune afisari intermediare
tol=1.0e-010; trace=0;
%
* apeleaza frsnmn
[x,cod,k]=frsnmn('fretea','jretea',x0,tol,trace);
% Daca solutia este "anormala", stop program
if cod==1
error('Solutie anormala sistem ');
end
% Solutie normala
% Extrage q si h din x
q=x(1:m,1); h=x(m+1:m+n,1)-Z0;
% H initial
H=H-Z0;
% Pierderi de sarcina pe tronsoane
hr=8.*lambda.*L.*q.*q./(9.81*pi^2.*D.^5);
% Afisare rezultate
disp('
');
disp(['
Precizia de calcul:
eps = ' sprintf('%G',tol)]);
disp(['
Nr. iteratii efectuate: k = ' sprintf('%G',k)]);
disp('
--------------------------------------------------- ');
disp('
');
disp('
REZULTATE:');
disp('
');
disp(' Tronson
Debit
Pierdere de sarcina
lambda ');
disp('
[mc/s]
[m]
');
disp('
');
for k=1:m;
disp([blanks(5) sprintf('%5.0f
%12.6f
%12.6f
%12.6f...
%12.6f\n',k,q(k,1),hr(k,1),E(k,1),lambda(k,1))]);
end
disp('
');
disp('
Nod
Cota piezometrica ');

disp('
[m]
disp('
');
for k=1:n;
disp([blanks(5) sprintf('%5.0f
end

');
%12.6f\n',k,h(k,1))]);

Executand programul pretea.m se obtin urmatoarele rezultate:

Precizia de calcul:

eps = 1E-010

Nr. iteratii efectuate: k = 12


--------------------------------------------------REZULTATE:

Tronson

Debit

Pierdere de sarcina

[mc/s]

lambda

[m]

0.076875

0.026043

0.016011

0.024550

0.150834

0.018787

0.042325

0.080768

0.016923

0.004550

0.004749

0.026042

0.008696

0.074815

0.022466

0.013629

0.033377

0.020401

0.005342

0.191090

0.023462

0.004658

0.149652

0.024174

0.006412

0.087109

0.024058

10

0.006586

0.045671

0.023912

11

0.015128

0.402479

0.019968

12

0.032997

0.514078

0.017722

13

0.025128

0.157270

0.018698

14

0.078125

0.080440

0.015961

Nod

Cota piezometrica
[m]

41.973957

41.823122

41.893189

41.818373

41.668722

41.859811

41.905482

42.262290

42.419560

16. Integrarea numerica a ecuatiilor diferentiale ordinare

Prin ecuatie diferentiala se intelege o ecuatie care contine derivate (sau diferentiale) de
ordinul n inclusiv ale unor functii necunoscute de variabile independente, de exemplu

y( x, y, z ,

z z 2 z 2 z 2 z
,
,
,
,
) = 0.
x y x 2 x y y 2

O ecuatia diferentiala de ordinul n este numita ordinara daca contine o singura variabila
independenta, avand forma generala

( x , y , y ', y '',..., y ( n ) ) = 0 .

Rezolvarea ecuatiei implica determinarea valorilor functiei y si a derivatelor y ', y '',..., y ( n )


care verifica ecuatia, si este numita si integrarea ecuatiei. Ecuatia fiind de ordinul n, solutia
depinde de n constante care pot fi stabilite prin considerarea valorilor functiei si a derivatelor
corespunzatoare anumitor valori ale variabilei independente. Daca toate cele n constante se
stabilesc corespunzator unei aceeasi valori a variabilei independente, integrarea se face cu
conditii initiale (problema Cauchy); in caz contrar, rezolvarea se face cu conditii la limita.
Ecuatia poate fi rezolvata pe cale numerica numai daca poate fi explicitata sub forma

y ( n ) = f ( x , y , y ', y '',..., y ( n 1) ) .

Ecuatia poate fi scrisa sub forma unui sistem echivalent de ecuatii de ordinul inati. Notam
y n = y , y n1 = y ' , y n 2 = y ' ' , ..., y1 = y ( n 1) , de unde rezulta y1' = y ( n ) , y 2' = y 1 , ..., y n' = y n 1
,

sau, sub forma matriceala

Y ' = F( x, y )

unde

y1
f ( x , y1 , y 2 ,..., y n 1
y

2

y1

.
y2
Y= , F=
.


...


y n 1

yn

Rezulta ca algoritmii folositi pentru rezolvarea unei ecuatii diferentiale ordinare de ordinul
intai pot fi folositi si pentru rezolvarea ecuatiilor diferentiale ordinare de ordinul n sau pentru
rezolvarea sistemelor de ecuatii diferentiale ordinare. Pentru rezolvarea pe cale numerica a
ecuatiilor diferentiale ordinare cu conditii initiale, se considera o diviziune a intervalului de
definitie [a, b],
a = x 0 , x1 , x 2 ,..., x n = b ,

si se determina solutia in mod prpgresiv: din expresia functiei si conditiile initiale se calculeaza
solutia in punctul x1 , care apoi este folosita drept conditie initiala pentru calculul solutiei in x 2
, si asa mai departe.
Exista doua categorii de metode de aproximare numerica a solutiei unei ecuatii diferentiale
ordinare:

metode directe, sau unipas, prin care solutia este calculata intr-un punct x i pe baza
informatiei continuta in punctul precedent x i1 si eventual din intervalul [ x i1 , x i ]. Din
aceasta categorie fac parte metoda seriei Taylor, metoda Euler si metodele de tip Runge Kutta;

metode multipas, prin care solutia calculata in punctul x i se determina pe baza


informatiei continuta in mai multi pasi anteriori. Din aceasta categorie fac parte metoda
Adams, metoda Adams - Bashforth, metoda Adams - Moulton si metode de tip predictor
- corector.

In ceea ce priveste ecuatiile diferentiale ordinare cu conditii la limita, problema se reduce la


rezolvarea unui sistem de ecuatii liniare, solutiile acestui sistem reprezentand valorile functiei
necunoscute in nodurile diviziunii.

16.1 Metodele Runge - Kutta

Fie ecuatia diferentiala


y = f(x, y)

cu conditia initiala y(0) = y 0 . Presupunem ca solutia y(x) a ecuatiei diferentiale se poate


dezvolta in serie Taylor in vecinatatea fiecarui punct x k . Vom cauta sa construim o functie h de
o anumita forma, usor de calculat cunoscand f(x,y). Vom pune conditia ca dezvoltarea in serie
a acestei functii dupa puterile lui h sa coincida cu dezvoltarea in serie a solutiei exacte
y(x 1 ) = y(x 0 + h), pana la o putere cat mai mare a lui h, independent de functia f(x, y). Ar fi
indicat ca expresia lui y 1 , aproximanta lui y(x 1 ), sa nu contina derivate. Pana la urma vom
exprima pe y 1 sub forma

y1 = y 0 + p rj k j
j =1

(16.1)

unde r este un numar intreg, p rj sunt constante care trebuie determinate, k j sunt anumite valori
ale functiei f(x, y) in puncte vecine punctului (x 0 , y 0 ), valori inmultite apoi cu h, adica

k j = hf j ,

),

= x 0 + j h,
(16.2)

j 1

j = y 0 + i k i , j = 2,3,..., r
i =1

j , j , p r j fiind constante. In toate cazurile se considera 1 = 0, 11 = 0, 1 = x 0 , 1 = y 0


.
Atunci
k 1 = hf(x 0 , y 0 ); k 2 = hf(x 0 + 2 h, y 0 + 21 k 1 ); k 3 = hf(x 0 + 3 h, y 0 + 31 k 1 + 32 k 2
); ...
(16.3)

Din relatiile (16.2) reiese clar caracterul algoritmic al procedeului Runge-Kutta, marimile
urmatoare calculandu-se cu ajutorul marimilor deja cunoscute. Ramane sa determinam

constantele p rj , j , ji , dupa ideea expusa la inceput, adica cele doua dezvoltari in serie dupa
puterile lui h ale lui y 1 date de (16.1) si y(x 1 ) sa coincida pana la o anumita putere a lui h,
independent de functia f(x, y). Vom da diverse valori lui r in (16.1) si vom obtine diverse
formule de tip Runge-Kutta.
Pentru r = 1 se ajunge la

y 1 = y 0 + hf(x 0 , y 0 ),

adica se regaseste metoda lui Euler.


Pentru r = 2 din formulele (16.1) si (16.2) rezulta

y1 = y 0 + p 2 j k j
j =1

sau, dezvoltat,
y 1 = p 21 hf(x 0 , y 0 ) + p 22 hf(x 0 + 2 h, y 0 + 21 hf(x o , y 0 )).

Avem, de asemenea,
y ( x1 ) = y 0 + hy ( x 0 ) +

h2
h3
y ( x 0 ) +
y ( x 0 + x1 ),
2!
3!

0 < < 1,

sau, exprimand cu ajutorul lui f(x, y) si derivatele sale in (x 0 , y 0 ):

y ( x1 ) = y 0 + hf ( x 0 , y 0 ) +

h2
f ( x , y ) + f y( x 0 , y 0 ) f ( x 0 , y 0 ) + T2 ,
2! x 0 0

unde
T2 =

h3
y ( x 0 + x1 ) .
3!

Dezvoltarea lui y 1 dupa puterile lui h va fi


y1 = y 0 + p 21 hf ( x 0 , y 0 ) + p 22 h[ f ( x 0 , y 0 ) + 2 hf x( x 0 , y 0 )21 hf ( x 0 , y 0 ) f y ( x 0 , y 0 )+...]

Vom determina constantele p 21 , p 22 , 2, 21 , punand conditia ca cele doua dezvoltari sa


coincida pana la termenul al treilea, cel care contine pe h2, independent de f(x, y). Se ajunge la
urmatorul sistem de ecuatii neliniare:

p 21 + p 22 = 1

p 22 2 =
2

p 22 21 = 2

(16.4)

Se observa ca trebuie ca p 22 0. De asemeni, solutia sistemului nu este unica. Presupunand


p 22 = , obtinem p 21 = , 2 = 1, 21 = 1. Cu acestea

y1 = y 0 +

1
(k + k2 )
2 1

y 2 = y1 +

h
h
f ( x1 , y1 ) + f ( x1 + h, y1 + hf ( x1 , y1 ))
2
2

sau, inlocuind pe k 1 si k 2 :

In general
y i +1 = y i +

h
h
f ( x i , y i ) + f ( x i + h, y i + hf ( x i , y i )),
2
2
(16.5)
i = 0,1,2,..., n

care constituie tocmai algoritmul metodei lui Euler perfectionate pentru generarea
aproximantelor y 1 , y 2 , ..., y n+1 ale valorilor adevarate y(x 1 ), y(x 2 ), ..., y(x n+1 ) plecand de la
valoarea cunoscuta y 0 .
Cazul cel mai important al metodei Runge-Kutta este pentru r = 4. Folosind rationamentul
din cazul r = 2, pentru determinarea constantelor p 2j , j , ji se ajunge la un sistem de 10
ecuatii cu 13 necunoscute, care nu are solutie unica. S-au determinat diferite sisteme de
constante care verifica acest sistem, cautandu-se in acelasi timp sa se obtina constante cu o
structura foarte simpla pentru usurinta calculelor. Alegerea cea mai raspandita si care conduce
la cea mai utilizata formula Runge-Kutta este

y i +1 = y i +

1
( k + 2k 2 + 2k 3 + k 4 ), i = 0,1,2,..., n
6 1

(16.6)

unde

k
k

h
h
k1 = hf ( x i , y i ); k 2 = hf x i + , y i + 1 , k 3 = hf x i + , y i + 2 ; k 4 = hf ( x i + h, y i + k 3 )
2
2
2
2

(16.7)

Principalul avantaj al metodei Runge-Kutta il consituie posibilitatea autopornirii, deoarece


pentru calculul unei noi aproximante este suficienta cunoasterea unui singur punct anterior.
Avantajul acesta, impreuna cu o precizie destul de buna a metodei pentru r = 4, a facut ca
metoda Runge-Kutta sa fie mult utilizata pentru determinarea valorilor initiale necesare
metodelor cu pasi legati de tip predictor - corector.
Metoda prezinta si un dezavantaj, deoarece pentru fiecare aproximanta se cere evaluarea
functiei f(x, y) pentru mai multe valori ale lui x, ceea ce conduce la o marire a timpului de
calcul.

16.2 Functii Matlab pentru integrare prin metodele Runge - Kutta

Matlab dispune de mai multe functii externe, ode113.m, ode15s.m, ode23.m, ode23s.m,
ode45.m, pentru aplicarea metodelor Runge - Kutta la rezolvarea sistemelor de ecuatii
diferentiale ordinare de ordinul intai cu conditii initiale.
Functia externa ode45.m se poate folosi cu una din urmatoarele sintaxe:

[T,Y] = ode45('F ',TS,Y0)


[T,Y] = ODE45('F',TSPAN,Y0,OPTIONS)
[T,Y] = ODE45('F',TSPAN,Y0,OPTIONS,P1,P2,...)
unde:
[T, Y] - solutia problemei, T si Y matrice.Matricea Y contine, pe coloane, valorile calculate
ale functiilor in punctele de abscisa continute in coloanele corespondente ale
matricei T; daca numarul functiilor este 1, T si Y sunt vectori coloana;
F - sir de caractere care contine numele functiei externe utilizator in care sunt definite
expresiile functiilor din sistemul de ecuatii; functia utilizator trebuie sa aiba sintaxa

yp = nume_functie(t,y), sau

yp = nume_functie(t,y,flag,P1,P2,..),

unde vectorul coloana yp contine valorile returnate ale derivatelor functiilor calculate
in t curent, cu valorile functiilor din vectorul y; flag - sir de caractere pentru
optiuni, dupa conventia:

flag

Valoare returnata

-------

-----------------------

(vid)

F(t,y)

init

Valori implicite TS, Y0 si OPTIONS pentru aceasta problema;

'jacobian'

Matricea jacobiana J(t,y) = dF/dy;

'jpattern'

Matrice aratand modelul sparsitatii matrice jacobiene;

'mass'
'events'

Matricea de masa M(t) pentru rezolvare M(t)*y' = F(t,y);


Informatii privind intersectarea axei absciselor;

TS - vector linie, cu elementele [t0 tf], unde t0 si tf reprezinta limitele intervalului de


integrare a functiilor; daca se doreste calculul valorilor functiilor in anumite puncte
t0, t1, ..., tf, toate crescatoare sau toate descrescatoare, atunci TS=[t0 t1 ... tf].
Y0 - vector care contine valorile conditiilor initiale;
OPTIONS - vector care se foloseste pentru crearea sau modificarea unei structuri de optiuni
cu ajutorul functiei odeset.m;
P1, P2,.. - parametri transmisi de utilizator catre functie, via ode45.

Exemplul 16.1. Sa se integreze ecuatia diferentiala ordinara de ordinul intai

y' =

xy
x + y2
2

pe intervalul

x [0; 1], cu conditia initiala y( 0) = 1 , cu precizia implicita inclusa in vectorul OPTIONS (eroare relativa
maxima, 1.0e-003; eroare absoluta maxima, 1.0e-006).

Se editeaza functia externa fex16_1.m pentru definirea expresiei ecuatiei de integrat:

function yp=fex16_1(x,y)
yp=x*y/(x^2+y^2);
In modul de lucru direct, se initializeaza parametrii de intrare si se apeleaza functia ode45.m, apoi se afiseaza
rezultatul si se reprezinta grafic functia integrata:

>[x,y]=ode45('fex16_1',[0 1],[1]);[x y]
>hf=figure; plot(x,y); grid; xlabel('x'); ylabel('y')
Se obtin valorile functiei y din coloana a doua, corespunzatoare valorilor x din coloana intai,

ans =
0
0.02500000000000
0.05000000000000
0.07500000000000
0.10000000000000
0.12500000000000
0.15000000000000
0.17500000000000
0.20000000000000
0.22500000000000
0.25000000000000
0.27500000000000
0.30000000000000
0.32500000000000
0.35000000000000
0.37500000000000
0.40000000000000
0.42500000000000
0.45000000000000
0.47500000000000
0.50000000000000
0.52500000000000
0.55000000000000
0.57500000000000
0.60000000000000
0.62500000000000
0.65000000000000
0.67500000000000
0.70000000000000
0.72500000000000
0.75000000000000
0.77500000000000
0.80000000000000
0.82500000000000
0.85000000000000
0.87500000000000
0.90000000000000
0.92500000000000
0.95000000000000
0.97500000000000
1.00000000000000

1.00000000000000
1.00031236632523
1.00124766540197
1.00280071284616
1.00496301155966
1.00772291322165
1.01106587410668
1.01497498192731
1.01943120766704
1.02441366893100
1.02990013398805
1.03586751211315
1.04229211237140
1.04914985596333
1.05641670708037
1.06406894598672
1.07208332877340
1.08043719371737
1.08910868750113
1.09807684673848
1.10732165610250
1.11682407252963
1.12656608493471
1.13653069247123
1.14670190158406
1.15706470878411
1.16760507379119
1.17830986113315
1.18916681240600
1.20016451580513
1.21129234997946
1.22254042246626
1.23389953741599
1.24536116548995
1.25691738668932
1.26856083799121
1.28028468484877
1.29208259619015
1.30394869639415
1.31587752455208
1.32786401189552

si reprezentarea grafica a perechilor de valori (x,y) din Fig. 16.1:

1.4
1.35
1.3

1.25
1.2
1.15
1.1
1.05
1

0.2

0.4

0.6

0.8

Fig. 16.1 - Graficul functiei y=f(x).

Exemplul 16.2. Sa se integreze ecuatia diferentiala ordinara de ordinul doi,


denumita ecuatia Van der Pol, pe intervalul

y ''+ ( y 2 1) y '+ y = 0 ,

x [0; 20], cu conditiile initiale y ( 0) = 0.25, y '( 0) = 0 .

Mai intai se reduce ecuatia la un sistem echivalent de ecuatii diferentiale de ordinul intai cu conditii initiale,
dupa cum s-a aratat in partea introductiva. Notam

y 2 = y , y1 = y ' , de unde rezulta

y1' = ( y 22 1) y1 + y 2
,
'
y 2 = y1
cu conditiile initiale

y1 ( 0) = 0, y 2 ( 0) = 0.25. Se editeaza functia utilizator fex16_2.m pentru definirea

ecuatiilor sistemului,

function yp=fex16_2(x,y)
yp=zeros(2,1);
yp(1)=-(y(2)^2-1)*y(1)-y(2);
yp(2)=y(1);
In modul de lucru direct, se initializeaza parametrii de intrare si se apeleaza functia ode45.m, fara afisarea
rezultatelor dar cu plotarea lor.

>[x,y]=ode45('fex16_2',[0 20],[0.00 0.25]);


>hf=figure;plot(x,y);grid;xlabel('x');ylabel('y1,y2');legend('y1','y2')
Se obtine reprezentarea grafica din Fig. 16.2.

3
y1
y2
2

y1, y2

-1

-2

-3

10
x

Fig. 16.2 - Graficele functiilor

15

20

y1 si y 2 .

Aplicatia 16.1. Calculul adancimilor apei in lungul unui canal trapezoidal prismatic in miscare
permanenta, gradual variata. Ecuatia miscarii permanente gradual variate in albii prismatice este

Q2
dh
A2C 2 R ,
=
ds
Q 2
1
B
gA3
i

unde

dh
reprezinta variatia adancimii apei in functie de distanta parcursa de curent intr-o sectiune transversala
ds

curenta a albiei, Q - debitul in albie,


[m2], R - raza hidraulica,

R=

[m 3 / s], i - panta longitudinala a albiei, A - aria sectiunii transversale,

A
1 1
, [m], unde P este perimetrul udat, [m], C - coeficientul lui Chezy, C = R 6 ,
n
P

unde n este coeficientul de rugozitate al albiei, B - latimea albiei la luciul apei [m],

- coeficientul Coriolis.

Ecuatia este diferentiala, ordinara, de ordinul intai. Pentru rezolvarea ecuatiei prin metoda Runge - Kutta de
ordinul 4/5, se editeaza functia utilizator fmngvcp.m pentru definirea expresiei ecuatiei, si programul pmngvcp.m
pentru initializarea parametrilor, apelarea functiei ode45.m si reprezentarea grafica a rezultatelor,

function yp=fmngvcp(x,y);
global Q b m n Jf alfa
yp(1,1)=0;
h=y; S=(b+m*h)*h; P=b+2*h*sqrt(1+m^2);
Rh=S/P; C=1/n*Rh^(1/6); B=b+2*m*h; U=Q/S; UP=U^2;
yp(1)=(Jf-UP/(Rh*C^2))/(1-alfa*UP*B/(9.81*S));
% Program pmngvcp.m
global Q b m n Jf alfa
b=2.50; Q=40; m=1; n=0.014; Jf=0.05; L=150.00; alfa=1.05;
h0=2.2104; ti=0.00; tf=L; Y0=[h0];
options = odeset('RelTol',1e-10,'AbsTol',1e-10);
[T Y]=ode45('fmngvcp',[ti tf],Y0,options);
h=figure; plot([ti tf],[Jf*(tf-ti) 0],T,Y+(tf-T)*Jf); grid;
xlabel(' s [m]'); ylabel('z [m]');
legend('linie fund albie','linie superafata libera a apei');
10
linie fund albie
linia suprafetei apei

9
8
7

z [m]

6
5
4
3
2
1
0

50

100

150

s [m]

Fig. 16.3 - Curba suprafetei libere a apei.

Valorile numerice ale adancimilor calculate sunt continute in vectorul Y si corespund absciselor continute in
vectorul T. Variatia adancimii apei in lungul canalului este reprezentat in Fig. 16.3.

You might also like