Documente Academic
Documente Profesional
Documente Cultură
LABORATOR 1:
GENERALITATI. COMENZI UTILE & CUVINTE REZERVATE. SCALARI & CONSTANTE.
VECTORI, MATRICE & SIRURI DE CARACTERE. EXTRAGEREA, SALVAREA & FORMATUL
DATELOR. FUNCTII SPECIFICE SIRURILOR DE VALORI
1.1. GENERALITATI
MATLAB® este un limbaj de programare de nivel inalt si un mediu interactiv care permite efectuarea
calculelor numerice stiintifice si ingineresti mult mai rapid decat utilizand limbajele de programare clasice ca C,
C++ si Fortran. MATLAB este bazat pe calculul matriceal, iar denumirea sa este abrevierea cuvintelor MATrix
LABoratory (Laborator Matriceal). Este comercializat de catre compania MathWorks; a fost conceput in 1978.
GNU Octave http://www.gnu.org/software/octave/ este o clona de tip free software a MATLAB,
distribuita de catre Free Software Foundation http://www.gnu.org/ in termenii GNU General Public License
http://www.gnu.org/copyleft/gpl.html
GNU Octave a fost conceput in 1988 de catre James B. Rawlings de la University of Wisconsin-Madison
si John G. Ekerdt de la University of Texas. Din 1992 a fost dezvoltat de catre John W. Eaton, prin contributia
mai multor informaticieni si matematicieni http://www.gnu.org/software/octave/acknowledgments.html
Exista un manual in format HTML (575 de pagini) pentru utilizarea GNU Octave, elaborat de catre John W.
Eaton (Copyright © 1996, ..., 2007): http://www.gnu.org/software/octave/doc/interpreter/
Prima versiune GNU Octave (alpha) a fost lansata la 4 ianuarie 1993. Pana in prezent, GNU Octave a
suferit revizii importante, fiind competitiv in raport cu produsele similare comerciale (de exemplu, MATLAB).
In momentul de fata exista distributii GNU Octave pentru principalele sisteme de operare (Unix, Linux,
Windows si altele), obtinute direct de pe site-ul http://www.gnu.org/software/octave/download.html
Ca structura, GNU Octave este conceput pe doua nivele: un pachet de programe executabile de tip
kernel, acompaniat de o colectie de fisiere functie de tip text cu extensia .m, grupate intr-un sistem de
directoare speciaziate pe domenii de interes stiintific si ingineresc. Spre exemplu, poate contine directoarele:
audio, comm, elfun, finance, general, image, integration, linear-algebra, miscellaneous, ode, optim, path, plot,
polynomial, set, signal, sparse, specfun, special-matrix, splines, statistics, strings, struct, testfun, time etc.
Fisierele functii sau fisierele program in GNU Octave sunt fisiere de tip text (ASCII), cu extensia .m (ca
in MATLAB).
In GNU Octave, respectiv in MATLAB nu sunt necesare declaratii despre tipul si dimensiunea
variabilelor; la introducerea datelor, GNU Octave (respectiv MATLAB) recunoaste tipul de variabila si aloca
automat memorie. Literele mici si majusculele (exemplu, a si A) au implicit, semnificatii diferite. Fereastra de
comenzi in GNU Octave este de tipul celei din Figura 1.1.
GNU Octave, respectiv MATLAB lucreaza in domeniul real pe dreapta incheiata [-inf, +inf], unde
1/0 = +inf, sau in domeniul complex, unde i = sqrt(-1) sau j = sqrt(-1).
Fig. 1.1 - Fereastra de comenzi GNU Octave, versiunea 3.2.3 (sistem de operare Windows Vista)
Pag. 1 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
Comanda Descriere
Intrarea in mediul GNU Octave: dublu click pe icon Octave (de pe Desktop)
octave:1> Prompter-ul din GNU Octave. In functie de versiune si de sistemul de operare, exista
diferite prompter-e, cum ar fi octave:1> (unde cifra indica numarul liniei de comenzi),
sau octave-3.2.3.exe:20:C:\Octave\3.2.3_gcc-4.4.0\bin>, sau >> (care semana cu
prompter-ul din MATLAB)
Fiecare comanda sau linie de comanda se introduce pentru executie cu tasta <Enter>
<Enter> Daca o comanda este mai lunga de o linie, pentru a o continua pe linia urmatoare, se
poate scrie la sfarsitul liniei o secventa de 3 puncte … sau caracterul back slash \
% In GNU Octave o linie care incepe cu simbolul % sau # este neexecutabila (aceste
# simboluri pot fi folosite pentru comentarii si pe o linie executabila, dar doar dupa
comanda/comenzile executabile)
history Octave are istoric de comenzi (pentru a aduce in linia de comanda curenta, anumite
history 20 comenzi deja folosite in sesiunea de lucru, se foloseste cursorul de pe tastatura).
history afiseaza comenzi deja folosite in sesiunea de lucru;
history 20 afiseaza ultimele 20 de linii de comenzi
clear nume Sterge din memoria sesiunii de lucru variabile, functii etc.
disp nume Afiseaza pe ecran mesajul/rezultatele din nume (nume poate fi o functie GNU Octave
type nume sau un script GNU Octave)
echo on Tot ce urmeaza dupa comanda echo on, este afisat pe ecran.
echo off echo off inhiba echo on
diary nume_fisier Salveaza sesiunea de lucru (mai putin partea grafica) in fisierul text nume_fisier pana la
diary off comanda diary off. Indica locul in care se termina salvarea sesiunii de lucru
clock Returneaza un vector continand informatiile: anul curent, luna (112), ziua (131), ora
(023), minutul (059), secunda (urmata de zecimale pentru subdiviziunile secundei)
Pag. 2 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
sleep(secunde)
cd Schimba directorul
Cateva cuvinte break, continue, else, elseif, end, for, endfor, function, endfunction, global, gplot, if,
rezervate: endif, plot, return, while, endwhile, ...
GNU Octave si MATLAB interpreteaza matricele, vectorii si scalarii in sens matriceal. O variabila
scalara este interpretata ca fiind o matrice de dimensiune 11. Comanda size returneaza dimensiunea matricei
(numarul de linii numarul de coloane).
Exemple de definire pentru scalari: a = 15.73e-12 (inseamna a 15,73 1012 ), b = 3^2 (inseamna b 32 ),
r = sqrt(b) (inseamna b ), s = pi*r^2 (inseamna r2 ), z = -7+3*i (inseamna z 7 3i ).
In GNU Octave si in MATLAB sunt definite multe constante utile de tip built-in. In tabelul de mai jos
sunt prezentate cateva dintre constantele cele mai importante, urmate de variabile speciale, cu nume
predefinite.
Constanta Descriere
pi = 3.14159265358979
i sau j Desemneaza coeficientul partii imaginare a unui numar complex: i = sqrt(-1) sau j = sqrt(-1)
Inf sau inf = infinit (Exemple: 1/0 = +inf sau -1/0 = -inf)
realmin = 2.2251e-308 (adica 2,2251 10308 ): cel mai mic numar pozitiv utilizabil in calcule (in virgula
mobila si dubla precizie)
realmax = 1.7977e+308 (adica 1,7977 10308 ): cel mai mare numar pozitiv utilizabil in calcule (in
virgula mobila si dubla precizie)
eps Exprima precizia masinii; eps = 2.2204e-16 (adica 2,2204 1016 ) in dubla precizie. Se
recomanda utilizarea sa atunci cand in timpul executarii unor calcule se doreste evitarea unei
impartiri cu zero. Exemplu: cand x 0, in loc de 1/x se va scrie 1/(x+eps)
Pag. 3 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
Variabila Descriere
speciala
ans Nume de variabila atribuita unui rezultat, daca acesta nu a fost initial atribuit unei alte
variabile. Exemplu: 2+3, returneaza ans = 5
Introducerea vectorilor:
Sintaxa Descriere si exemple
vector_linie = [b1 b2 b3 ...] Creaza un vector linie care contine valorile sau variabilele b1, b2, b3, ...
sau (sau combinatii intre valori si variabile). Valorile/variabilele sunt
vector_linie = [b1, b2, b3, ...] delimitate intre ele prin spatiu, <Tab> sau , (virgula).
Exemplu:
Fie v1 = [1, 1, 5+i] si v2 = [-7 sqrt(9)]
v3 = [v2 v1 87] returneaza vectorul linie v3 = -7 3 1 1 5+i 87
vector_coloana = [b1; b2; b3;...] Creaza un vector coloana care contine valorile sau variabilele b1, b2, b3,
sau ... (sau combinatii intre valori si variabile). Valorile/variabilele sunt
vector_coloana = [b1 b2 b3 ...]' delimitate intre ele prin ; (punct-si-virgula), prin apasarea tastei <Enter>
sau prin transpunere dintr-un vector linie folosind caracterul ' (apostrof).
Exemple:
v4 = [-3; 5; 2*e] si v5 = [1 5 9]' sunt vectori coloana;
3
v6 = [log10(1000); log(e)] returneaza vectorul coloana v6 =
1
v' Reprezinta transpunerea unui vector. Daca v este vector linie, atunci v'
sau este un vector coloana si invers. Daca vectorul linie contine numere
transpose(v) complexe, prin transpunerea cu v' vor fi afisate conjugatele acestora;
transpose(v) este echivalent cu v' cu deosebirea ca la transpunere nu
conjuga elementele complexe
Exemple:
1 0i
Daca v7 = [1 2+i] atunci v8 = v7' returneaza v8 =
2 1i
1 0i
v9 = transpose(v7) returneaza v9 =
2 1i
v = linspace(val_in, val_fin, n) Genereaza o multime/serie numerica liniara de tip vector linie, intre
sau valoarea initiala specificata val_in si valoarea finala val_fin, cu (n-1)
v = linspace(val_in, val_fin) subintervale egale, deci vectorul va avea n termeni. Daca nu se specifica
Pag. 4 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
Introducerea matricelor:
Sintaxa Descriere si exemple
matrice = [a11 a12 ... a1m; a21 Defineste o matrice cu n linii m coloane care contine elementele aij cu
a22 ... a2m; ...; an1 an2 ... anm] i = 1, 2, …, n si j = 1, 2, …, m. Pe o linie, elementele sunt despartite prin
spatiu, <Tab> sau , (virgula), iar liniile sunt delimitate intre ele prin ;
(punct-si-virgula) sau prin apasarea dupa fiecare linie a tastei <Enter>
Exemplu:
1 2 3
m1 = [1 2 3; 4 5 6; 7 8 9] returneaza matricea m1 = 4 5 6
7 8 9
m = [v_col1 v_col2 v_col3 ...] Construieste matricea numita m, prin concatenarea unor vectori coloana
sau numiti v_col1 v_col2 v_col3 ... (toti de aceeasi dimensiune), sau prin
m = [v_lin1; v_lin2; v_lin3; ...] concatenarea unor vectori linie numiti v_lin1, v_lin2, v_lin3, ... (toti de
aceeasi dimensiune).
Exemple:
Fie 2 vectori linie de cate 3 elemente w1 = [1 2 3] si w2 = [4 5 6]
1 2 3
m2 = [w1; w2] returneaza matricea 23 de forma m2 =
4 5 6
1 4
m3 = [w1' w2'] matricea 32 de forma m3 = 2 5
3 6
matrice = [matrice1 matrice 2 Construieste o matrice prin concatenarea mai multor matrice numite
matrice3 ...] matrice1, matrice 2, matrice3, ...
sau Exemple:
matrice = [matrice1; matrice 2; Fie 2 matrice 22 definite ca m4 = [1 2; 3 4] si m5 = [5 6; 7 8]
matrice3; ...] 1 2 5 6
m6 = [m4 m5] returneaza matricea 24 de forma m6 =
3 4 7 8
1 2
3 4
m7 = [m4; m5] matricea 42 de forma m7 =
5 6
7 8
Pag. 5 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
[X,Y] = meshgrid(x,y) Comanda meshgrid este folosita in grafica 3D, pentru generarea
suprafetelor tridimensionale. Comanda meshgrid genereaza 2 matrice
care definesc o retea dreptunghiulara cu m linii si n coloane in planul
xOy, unde x este vectorul linie cu n elemente de pe axa Ox si y este
vectorul linie cu m elemente de pe axa Oy. Daca n = m, reteaua este
patratica. In fiecare punct definit de linia i si coloana j din reteaua de
dimensiuni mn, coodonatele sunt x(j) si y(i).
Exemplu:
Fie x = [1 2] si y = [3 4 5]
1 2 3 3
[X,Y] = meshgrid(x,y) returneaza X = 1 2 si Y = 4 4
1 2 5 5
Elementul {X3, Y2} din reteaua dreptunghiulara (aflat pe linia 3, coloana 2)
are coordonatele {2, 5}, adica 2 pe axa Ox, respectiv 5 pe axa Oy
A' Transpunerea unui matrice. Daca A este o matrice, A' este matricea
sau transpusa (daca contine numere complexe, prin transpunere vor fi afisate
transpose(A) conjugatele); transpose(A) este echivalent cu A' cu deosebirea ca la
transpunere nu conjuga elementele complexe.
Exemple:
Fie matricea m8 = [1 2+i; 3 4]
1 0i 3 0i
m9 = m8' returneaza m9 =
2 1i 4 0i
1 0i 3 0i
m10 = transpose(m8) returneaza m10 =
2 1i 4 0i
zeros(n) Returneaza matricea zero de dimensiuni nn respectiv nm (avand toate
sau elementele egale cu 0).
zeros(n,m) Exemple:
0 0
m13 = zeros(2) returneaza matricea m13 =
0 0
Pag. 6 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
0 0 0
m14 = zeros(2,3) returneaza matricea m14 =
0 0 0
Pentru a crea un vector linie cu m elemente nule se scrie: zeros(1,m)
Pentru a crea un vector coloana cu n elemente nule se scrie: zeros(n,1)
matrice = str2mat(s1, s2, s3) Genereaza o matrice avand pe linii sirurile de caractere s1, s2 si s3.
Exemplu:
s1 = 'Ion Ionescu', s2 = 'Popescu R.' si s3 = 'T. Marinescu'
Ion Ionescu
s = str2mat(s1, s2, s3) returneaza matricea s = PopescuR.
T. Marinescu
asemenea, cu 2000 de valori). Pentru a importa matricea de dimensiuni 20002 in programul curent din
GNU Octave, respectiv pentru a citi datele din matrice si a le atribui variabilelor din program se scrie astfel
(fie L = lungime si T = temperatura):
octave:1> load valori_masurate % importa fisierul valori_masurate
octave:2> L = valori_masurate(:,1); % citeste si atribuie variabilei L valorile din toata coloana 1
octave:3> T = valori_masurate(:,2); % citeste si atribuie variabilei T valorile din toata coloana 2
unde caracterul : (doua puncte) are semnificatia "toate liniile".
Formatul datelor:
format [options] stabileste formatul datelor de iesire din punct de vedere al numarului de zecimale
afisate, in functie de optiunea precizata (vezi help format si tabelul care urmeaza).
Comanda format fara optiune restabileste modul implicit de iesire a datelor, anume format short.
Comanda Informatii despre modul de afisare Exemple
format short Afisare implicita cu 5 cifre semnificative. 3.1416 (asa este afisat )
format short e Format exponential (puteri ale lui 10) cu mantisa cu 3.1416e+00
5 cifre semnificative
format bank Format bancar, cu 2 cifre dupa virgula 3.14 (asa este afisat )
dec2hex(n) Converteste un numar din baza 10, in baza 16. dec2hex(2748) returneaza
ans= ABC
hex2dec('s') Converteste un numar (continut in stringul s) din hex2dec('12b') returneaza
Pag. 8 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
Sintaxa Descriere
max(w) Daca w este un sir de valori (un vector) cu n elemente, max(w) returneaza cel mai mare
termen al sirului (termenul cu valoare maxima)
min(w) Daca w este un sir de valori (un vector) cu n elemente, min(w) returneaza cel mai mic
termen al sirului (termenul cu valoare minima)
mean(w) Daca w este un sir de valori (un vector) cu n elemente, mean(w) returneaza media
aritmetica a valorilor din sir
Folosind comanda help, sa se listeze informatiile legate de constantele built-in din GNU Octave: e, eps, i, j,
inf, Inf, NaN, nan, realmax, realmin, pi
Folosind comanda help, sa se listeze informatiile legate de cuvintele rezervate din GNU Octave: break,
continue, else, elseif, end, for, endfor, function, endfunction, global, if, endif, plot, return, while, endwhile
Folosind comanda help, sa afiseze pe ecran toate informatiile despre functiile: load, save si diary
Se da sirul de valori: w = [1, -4, log2(40), exp(3), log10(1000), log(42), sqrt(51)]. Se cere:
Sa se introduca cu afisare pe ecran sirul, cu numele din sir in format long
Sa se gaseasca cel mai mare termen al sirului si cel mai mic termen al sirului
Sa se calculeze media aritmetica a termenilor
Sa se calculeze suma termenilor si produsul termenilor
Sa se sorteze sirul in ordine crescatoare si apoi in ordine descrescatoare.
HELP: Se vor folosi functiile max, min, mean, sum, prod, sort si -sort.
2 1 log(6) 1
2 1 0 sqrt(12)
Se da matricea A =
3 e 1 1
2 2 2 5
Pag. 9 din 10
Copyright 2010, INFORMATICA, Sanda-Carmen Georgescu & Tudor Petrovici
Catedra de Hidraulica, Masini Hidraulice si Ingineria Mediului, Facultatea de Energetica,
Universitatea POLITEHNICA din Bucuresti
Se cere sa se afiseze pe ecran matricea A in format short, short e, long, long e, bank, apoi sa se revina in
formatul implicit (short).
Se da sirul de valori u = {2004, 2005, 2006, 2007, 2008, 2009, 2010}, cu numerele scrise in baza 10. Sa se
afiseze pe ecran vectorul u, apoi sa se scrie cate un vector care sa contina valorile sirului in ordine
descrescatoare scrise in baza 2, in baza 16, respectiv in baza 7.
Pag. 10 din 10