Sunteți pe pagina 1din 29

Scrierea şi citirea datelor în Matlab

Comanda format este folositǎ pentru afişarea datelor în diferite formate. Matlab
calculeazǎ numerele reale în dublǎ precizie. Nu întodeauna dorim sa afişǎm
numerele în format dublǎ precizie pe ecran. Putem alege formatul dorit de afişare
a datelor:
Exemplu:
>> x= 10/99
x=
1.0101e-001
>> format short e
>> x
x=
1.0101e-001

>> format long


>> x
x=
0.10101010101010
Mai încercaţi comenzile: format long e şi format hex
Scrierea şi citirea datelor în Matlab
Citirea şi scrierea datelor în Matlab poate fi făcută prin metode diferite. Metodele
pot fi clasificate în trei clase:
citirea şi scrierea în mod interactiv de la tastatură sau mouse
citirea dintr-un fişier sau scrierea într-un fişier
citirea şi citirea folosind comenzile save / load
 
Vom analiza pe rând cele trei modalităţi de scriere şi citire a datelor:
1.Citirea de la tastatură se face folosind comanda input. Pentru citirea unui număr
putem scrie de exemplu
h = input ( 'Indroduceti latura cubului:' )
Un şir de caractere poate fi introdus de la tastatură cu sintaxa:
z = input ( 'Dati numele:', 's' )
Al doilea argument indică faptul că se va introduce un şir de caractere de la
tastatură. Variabila z devine un vector linie cu două componente.
Dacă şirul ce urmează a fi dat de la tastatură este format dintr-un singur caracter
comanda input va prelua caracterul fără sa mai aibă specificat 's':
z = input ('Dati numele ( o singura litera ):' )
Afişarea mesajelor sau a numerelor (rezultatelor) este posibilă prin folosirea
comenzii fprintf utilizată ca în C.
Scrierea şi citirea datelor în Matlab
2. Cu aceeaşi comandă fprintf este posibil să scriem datele într-un fişier. Pentru
acest lucru numele de fişier este inclus în argumentul funcţiei fprintf:
fprintf ( 'numefis', 'Volumul cubului este: %10.4f \n', vol )
Datele care erau până acum afişate la tastatură se vor scrie în fişierul cu numele
numefis şi anume vor fi adăugate în continuare la conţinutul fişierului. Dacă un
asemenea fişier nu există, un nou fişier cu acest nume este creat. Dacă fişierul
trebuie şters se va folosi comanda:
! erase numefis
Un control mai bun asupra fişierelor se poate face cu fopen sau fclose.
Scrierea şi citirea datelor în Matlab
3. Pentru folosirea comenzilor save şi load avem mai multe situaţii.
Manipularea fişierelor este o altǎ procedurǎ atractivǎ a Matlabului. Putem salva
spaţiul de lucru Matlab, adică toate variabilele folosite in sesiunea de lucru, intr-un
fişier binar sau/ şi într-un fişier text. Fişierul astfel creat poate fi reîncǎrcat în cazul
în care avem nevoie de el mai târziu.
În cazul în care comanda save este folosită fără alte specificaţii:
save
toate variabilele sunt salvate implicit în fişierul matlab.mat.
Comanda load reîncarcă toate variabilele salvate cu comanda save.
Un nume de fişier specificat după comanda save
save numefis
va avea ca efect salvarea tuturor variabilelor în fişierul numefis.mat, iar când vrem
să regăsim variabilele vom scrie
load numefis
Dacă nu se doreşte salvarea tuturor variabilelor, se selectează numele celor ce
urmează a fi salvate. De exemplu
save numefis a b c
va salva variabilele a, b, c în fişierul numefis în dublă precizie. Pentru regăsirea lor
din fişierul numefis.mat vom da comanda
load numefis
fără numele variabilelor.
Save şi load cu opţiune de format ASCII
Comenziile save şi load cu opţiune de format ASCII sunt importante pentru că
exportul şi importul de date din Matlab este posibil prin această opţiune.
Pentru folosirea formatului ASCII trebuie adaugat -ascii sau /ascii după numele
de variabila. De exemplu:
save date.tmp a -ascii
salvează variabila a pe opt cifre ASCII din fişierul date.tmp. Comanda save poate
salva mai mult decât o variabilă din fişier:
save date.tmp a b c -ascii
Comanda load este folosită pentru citirea datelor într-o variabilă, iar regăsirea unui
fişier în format ASCII nu este corespondentă cu salvarea datelor într-un fişier
ASCII. Acest lucru se întâmplă pentru că, în timp ce putem scrie mai multe
variabile în fişier ASCII folosind comanda save, comanda load citeşte toate datele
din fişier într-o singură variabilă. Mai mult decât atât numele de fişier devine
numele variabilei în care s-a făcut citirea. De exemplu, dacă fişierul cu numele
setdate.e se citeşte cu comanda:
load setdate.tmp
conţinutul este încărcat în variabila numită setdate.
În concluzie, dacă avem nevoie să citim mai multe variabile va trebui ca fiecare
variabila să fie pregatită în câte un fişier ASCII separat.
Reprezentări grafice bidimensionale
Matlab oferǎ şase tipuri diferite de grafice pentru urmǎtoarele funcţii:
plot – un grafic cu axe x-y liniare
loglog – un grafic cu axe logaritmice
semilogx – axa x este logaritmicǎ
semilogy – axa y este logaritmicǎ
polar – reprezentare polarǎ
mesh – o suprafaţǎ reprezentatǎ în 3D
bar – diagrame cu bare

Odatǎ un grafic creat pe ecran el poate fi etichetat, intitulat prin comenzile:


title – titlul de grafic
xlabel – etichetǎ pentru axa X
ylabel – etichetǎ pentru axa Y
text – introducere de texte pe grafic
gtext – introducere de texte cu mouse-ul pe grafic
grid – linii de caroiaj
Reprezentări grafice bidimensionale
1. Comanda PLOT:
Fie un set de puncte date ( xi , yi ), i=1,2,3,…,n ce urmează a fi reprezentate.
Trebuie să pregătim doi vectori x şi y de aceeaşi lungime şi aceeaşi formă.
Să considerăm y = sin (x)exp(-0.4x), 0  x  10
 
Reprezentarea grafică a funcţiei y (x)
în Matlab se face cu secvenţa de instrucţiuni:
 
x=0:0.05:10;
y=sin(x).*exp(-0.4*x);
plot(x,y)
xlabel('x');ylabel('y')
 
 
Etichetele axelor date cu comenzile xlabel,
respectiv ylabel.
Figura nr.1.1 Reprezentarea funcţiei y(x) pe 11 puncte cu funcţia plot
Reprezentări grafice bidimensionale Tip Simbol
punct .
plus +
Reprezentarea grafică se poate face cu diferite caractere:
stea *
cerc o
literă x

Pentru desenarea graficului cu un simbol din tabel se va scrie ca argument al


funcţiei plot caracterul dorit:
plot (x, y , ' + ' )
Pentru ca să desenăm acelaşi grafic cu două sinmboluri va trebui să dăm
comanda plot de două ori. De exemplu:
plot (x, y, x, y, 'o' )
unde graficul se va desena cu linie prima dată şi a doua oară cu caracterul 'o'.
Linia de desenare poate fi de patru feluri:
Tip linie Simbol

simplă 

întreruptă 

2 puncte :

linie-punct -.
Reprezentări grafice bidimensionale
Implicit linia de desenare este simplă. Pentru selectarea unui tip de linie din tabel
în comanda plot se specifică tipul linie, ca argument al funcţiei plot, după
variabilele x şi y:
plot (x, y, ' : ' )
Desenarea în Matlab se poate face cu diferite culori. Culorile disponibile date în
tabelul de mai jos:
Culoare linie Simbol

roşu r
O combinaţie între culoare şi simbolul de desenare
poate fi făcută cu comanda:
galben y plot (x, y, '+g' )
violet m care va produce desenarea graficului cu culoarea
verde şi cu caracterul plus.
cyan c

verde g

albastru b

alb w

negru k
Reprezentări grafice bidimensionale
O altă cale de desenare a graficului unei funcţii este folosind comanda fplot:
fplot ('nume_f', [xmin, xmax] )
unde nume_f este numele funcţiei sau numele fişierului funcţie Matlab care
urmează a fi reprezentată grafic, iar xmin, xmax limitele reprezentării. Maximul şi
minimul pentru axa y-ilor determinate de maximul şi minimul actual al funcţiei.

Ştergerea graficului se poate face cu comanda clf, care şterge totul din fereastra
grafică, sau cu comanda cla care şterge reprezentările şi redesenează axele în
fereastra grafică.

Dacă o funcţie este dată implicit, de exemplu


y3 + exp (y) =tanh (x)
adică ea nu poate fi exprimată ca y funcţie de x, poate fi reprezentată grafic în
Matlab folosind funcţia contour.
Reprezentări grafice bidimensionale
Comanda AXIS :
Minimul şi maximul coordonatelor reprezentării se pot schimba prin comanda
axis. Totodată cu această comandă se poate modifica şi forma în care este
desenat graficul. De exemplu o figură grafică poate fi redesenată în formă pătrată
cu comanda:
axis ('square')
Maximul şi minimul coordonatelor graficului pot fi specificate de:
axis ([ x_min, x_max, y_min, y_max ])
Comanda se va folosi după o comandă plot astfel încît aria de vizualizat să poată
fi schimbată ori de cîte ori se doreşte.
Reprezentări grafice bidimensionale
Comanda GRID :
O grilă poate fi adăugată unui grafic prin comanda:
grid on
Pe de altă parte ştergerea unei grile de pe un grafic se face cu comanda :
grid off
 
Un exemplu de folosire a grilei în reprezentări grafice este prezentat mai jos:
 
x=0:0.05:10;
y=sin(x).*exp(-0.4*x);
plot(x,y,'+')
grid on
xlabel('x');ylabel('y')
Reprezentări grafice bidimensionale
O funcţie de coordonate polare poate fi reprezentată cu funcţia Matlab polar. De
exemplu dacă dorim să reprezentăm grafic funcţia y (t) = e-0.3t  sin3t în
coordonate polare, vom scrie fişierul Matlab:
 
t=0:.05:pi+.01;
y=sin(3*t).*exp(-0.3*t);
polar(t,y)
grid
care va avea ca efect graficul următor :
Reprezentări grafice bidimensionale
Comanda LOGLOG:
O funcţie se reprezintă în coordonate logaritmice în Matlab cu loglog. Dacă avem
y (t )  e t sinh( t )
funcţia de reprezentat cu axe logaritmice, vom scrie fişierul Matlab:
 
t=.2:.01:4;
x=exp(t);
y=exp(t.*sinh(t));
loglog(x,y,’r’)
grid
xlabel('x');ylabel('y')
Reprezentări grafice bidimensionale
Comanda HOLD ON:
Până acum am desenat toate curbele cu o singură comandă plot. De multe ori
este de dorit să adăugăm o curbă la un grafic ce a fost deja realizat cu o comandă
plot. Acest lucru poate fi făcut cu comanda hold on. De exemplu, dacă dorim să
reprezentăm funcţia sin şi cos pe acelaşi grafic vom scrie programul Matlab:
 
x=0:0.05:5;
y=sin(x);
plot(x,y)
hold on
z=cos(x)
plot(x,z,'--')
xlabel('x');ylabel('y(-) si z(--)');
 
Odată ce comanda hold on este dată graficul funcţiei sin este "îngheţat" pe ecran
până se desenează şi graficul funcţiei cos.
Reprezentări grafice bidimensionale
Comenziile TITLE şi XLABEL, YLABEL:
Aceste comenzi au fost deja folosite în exemplele de mai sus, deci sintaxa lor nu
ridică probleme. Mai trebuie însă precizat că argumentul pentru title, xlabel şi
ylabel poate fi mai mult decît un singur şir de caractere. De exemplu putem scrie:
title ( [' Primul titlu.', 'Al doilea titlu.', 'Al treilea titlu.'] )
Reprezentări grafice bidimensionale
Funcţii de conversie a numerelor în şiruri de caractere NUM2STR, INT2STR:

În scrierea etichetelor axelor şi a titlurilor intervin deseori valori numerice.


Comenzile num2str, int2str au sensul de number to string, respectiv integer to
string.
De exemplu:
st = num2str (pi)
defineşte un şir ce conţine numărul 3.142. Dacă scriem comanda int2str valoarea
reală este convertită într-un şir ce conţine numai partea întreagă a numărului
respectiv. De exemplu:
st = int2str (pi)
defineşte un şir ce conţine numărul 3.
Odată numărul convertit în şir de caractere, el poate fi utilizat cu comenzile title
sau xlabel, ylabel:
title ( ['Pentru: ', st, 'cm'] )
Reprezentări grafice bidimensionale
Comanda TEXT, GTEXT:
Textul poate fi scris într-un grafic cu comenziile text sau gtext. Sintaxa comenzii
text este:
text (x, y, 'şir de caractere' )
Valorile coordonatelor absolute unde începe să se scrie textul date prin x şi y.
Variabila şir de caracter poate fi un text între apostrofuri sau poate fi o variabilă şir
de caracter predefinită. Un exemplu de comandă este:
text ( 2, 4, ' tip de material')
Dacă locaţia textului se determină manual se foloseşte comanda gtext ('şir de
caractere'). Când această comandă este executată programul aşteaptă ca mouse-
ul sau tasta să fie apăsată pe poziţia din fereastra grafică. Textul este scris în
orice poziţie precizată de cursor sau de mouse.
Spre deosebire de comanda text care funcţionează şi în cazul axelor
tridimensionale, comanda gtext este utilizabilă numai în cazul axelor
bidimensionale.
Culoarea şi mărimea fonturilor dintr-un text poate fi schimbată. De exemplu:
set(gcf, 'DefaultTextFontSize',[18])
set(gcf, 'DefaultTextColor','red')
text ( 0.3, 0.2, 'sirul este scris cu culoarea rosie' )
va scrie textul cu culoarea roşie şi cu mărimea fontului 18.
Reprezentări grafice bidimensionale
Comanda FIGURE:
Ferestrele grafice pot fi deschise prin comanda figure. Dacă o singură fereastră
grafică este deschisă comanda figure nu este necesară. Dacă mai multe ferestre
grafice sunt deschise, figure va deschide altă fereastră grafică sau va actualiza
ferestra dorită cu figure (n), unde n este numărul ferestrei necesare.
Reprezentări grafice bidimensionale
Comanda SUBPLOT:
Cu această comandă pot fi desenate mai multe grafice într-o singură fereastră.
Sintaxa este: subplot (m, n, k)
unde m, n şi k sunt întregi. Perechea (m,n) înseamnă o matrice de mxn grafice,
iar k este numărul secvenţial al graficului. De exemplu, comanda plot precedată
de comanda subplot (3, 2, 1) va desena primul grafic în subfereastra 3x2. Să
considerăm patru funcţii reprezentate în patru subferestre de forma:
Reprezentări grafice bidimensionale
Programul Matlab corespunzător reprezentării anterioare este:
clear;clf;
t=0:0.3:30;
subplot(2,2,1); plot(t,tan(t)),title('SUBPLOT 2,2,1')
xlabel('t');ylabel('tg(t)');
subplot(2,2,2); plot(t,t.*tan(t)),title('SUBPLOT 2,2,2')
xlabel('t');ylabel('t*tg(t)')
subplot(2,2,3);plot(t,t.*tan(t).^2),title('SUBPLOT 2,2,3')
xlabel('t');ylabel('t*tg(t)^2')
subplot(2,2,4);plot(t,t.^2.*tan(t).^2),title('SUBPLOT 2,2,4')
xlabel('t');ylabel('t^2*tg(t)^2')
Reprezentări grafice tridimensionale
Comanda PLOT3:
Este versiunea reprezentărilor grafice tridimensionale a comenzii plot. Aceleaşi
reguli de folosire sunt valabile şi pentru comanda plot3. Unghiul de vedere în
cazul tridimensional se poate schimba cu comanda view. De exemplu deplasarea
unei particule în spirală de la un punct A la un punct B se poate reprezenta grafic
folosind comanda plot3:
 
t=0:0.1:20;
r=exp(-0.2*t);
th=pi*t*0.5;
z=t;
x=r.*cos(th);
y=r.*sin(th);
plot3(x,y,z);
hold on
text (1, -0.7, 0, 'A')
n=length(x);
text( x(n), y(n), z(n)+2, 'B');
xlabel('X');ylabel('Y');zlabel('Z');
Reprezentări grafice tridimensionale
Comanda MESH:
O funcţie de două dimensiuni z = f (x,y) poate fi definită cu puncte discrete de
relaţia zi,j = z (xi, yj )
unde xi, i=1,2,…,m şi yj, j=1,2,…,n punctele pe axele x şi y în ordine crescătoatre.
Intersecţia lor produce o grilă carteziană. De exemplu să considerăm grila definită
de punctele:
xi,j = xi = -2 + 0.2(i-1), 1  i  21
yi,j = yj = -2 + 0.2(j-1), 1  j  21
şi valorile funcţiei pe aceste puncte:
zi,j = xiexp ( -xi2 - yj2 )
Pentru a putea face reprezentarea cu funcţia mesh trebuie să pregătim tablourile
bidimensionale x şi y. Adică x va fi o matrice cu coordonatele x ale grilei, iar y va fi
o matrice cu coordonatele y ale grilei.
Reprezentări grafice tridimensionale
Vom scrie programul Matlab:
 
clear,clf
xa=-2:.2:2;
ya=-2:.2:2;
[x,y]=meshgrid(xa,ya);
z=x.*exp(-x.^2-y.^2);
mesh(x,y,z)
title('Acesta este graficul 3D a functiei z=x*exp(-x^2-y^2).')
xlabel('x');ylabel('y');zlabel('z');
Reprezentări grafice tridimensionale
Pe un ecran color liniile ce unesc punctele colorate implicit de "harta de culori",
hsv (hue saturation value). Roşu este culoarea asignată atît pentru cele mai înalte
valori a lui z cît şi pentru cele mai joase valori a lui z. Între valorile superioare şi
cele inferioare culoarea este determinată liniar în ordinea următoare:
roşu, galben, verde, vernil, albastru, violet , roşu
Unghiul de vedere pentru graficul realizat cu comanda mesh poate fi schimbat cu
comanda view, care pentru două coordonate precizează unghiul pe orizontală
(numit azimut) şi unghiul pe verticală (numit elevaţie):
view ([az, el])
Cînd az=0 şi el=0 poziţia de vedere a observatorului este de-a lungul axei y
negative. Sub acest unghi reprezentarea este un plan x-z, cu axa -z axă verticală
şi axa -x axă orizontală. Unghiul az roteşte poziţia observatorului în sens invers
acelor de ceasornic, cu az grade în jurul axei z, faţă de unghiul de referinţă.
Unghiul el, de elevaţie, deplasează poziţia observatorului cu el grade faţă de
planul x-y.
Valorile implicite az = -37.5 grade şi el = 30 grade.
Reprezentări grafice tridimensionale
Funcţia meshc este funcţia de reprezentare a conturului funcţiei de două variabile
z pe un plan x-y, corespunzătoare reprezentării cu comanda mesh a funcţiei z.
De exemplu:
 
clear,clf,hold off
dth=pi/20;
j=1:21;
i=1:10;
x=log(i);y=log(j);
[x,y]=meshgrid(x,y);
z=sqrt(0.1*((x-log(5)).^2+(y-log(5)).^2))+1;
meshc(x,y,z)
xlabel('x');ylabel('y');zlabel('z')
Reprezentări grafice tridimensionale
Comenziile SURF şi SURFC:
Aceste comenzi sunt similare cu mesh şi meshc, numai că ele colorează
interiorul fiecărei celule de reţea a reprezentării grafice astfel încît se creează
imaginea unei suprafeţe. Culoarea unei celule este dată de media lui z pe cele
patru puncte din colţurile pătratului.
Sǎ considerăm grila definită de punctele:
xi,j = xi = -4 + 0.2(i-1), 1  i  41
yi,j = yj = -4 + 0.2(j-1), 1  j  41
şi valorile funcţiei pe aceste puncte:
zi,j = xi^2+yj^2+exp ( -xi2 - yj2 ).
 
clear,clf
xa=-4:.2:4;
ya=-4:.2:4;
[x,y]=meshgrid(xa,ya);
z=x.^2+y.^2+exp(-x.^2-y.^2);
surf(x,y,z)
title('Graficul functiei x^2+y^2+exp(-x^2-y^2)')
xlabel('x');ylabel('y');zlabel('z');
Reprezentări grafice tridimensionale
Conturul unei funcţii de două variabile poate fi reprezentat cu comanda contour
care are sintaxa: contour ( x, y, z, nivel )
unde z este tabloul bidimensional pentru valorile funcţiei, x şi y coordonatele x,
respectiv y sub formă de matrici, iar nivel este un vector ce conţine nivelele
conturului. Nivelul poate fi înlocuit cu un întreg m, care va fi interpretat ca şi
numărul nivelelor de contur. Nivelele de contur determinate prin împarţirea
valorilor minim şi maxim ale lui z în (m-1) intervale. De exemplu pentru funcţia
reprezentată în figura nr.1.7 avem reprezentarea cu contour:

clear,clc,clf,axis('square')
xm=-2:.2:2;
ym=-2:.2:2;
[x,y]=meshgrid(xm,ym);
z=x.*exp(-x.^2-y.^2);
zmax=max(max(z));
zmin=min(min(z));
dz=(zmax-zmin)/10;
nivel=zmin + 0.5*dz:dz:zmax;
h=contour(x,y,z,nivel);
clabel(h,'manual')
title('Desen pentru contur cu …
functia contour(x,y,z,nivel)');
xlabel('x');ylabel('y');
Reprezentări grafice tridimensionale
5. Comanda QUIVER:
Uneori cantităţile pe o grilă de puncte pot fi date în formă vectorială. De exemplu
distribuţia vitezei unui fluid în cazul bidimensional poate fi exprimată cu vectori de
viteză pe punctele grilei. Vectorii în punctele grilei se pot reprezenta cu comanda
quiver. Aceşti vectori au două componente: una pe direcţia x şi alta pe direcţia y.
Să presupunem că aceste componente sunt date de variabilele u şi v, amândouă
matrici de aceleaşi dimensiuni cu x şi y, atunci sintaxa comenzii quiver este:
quiver (x,y,u,v,s)
unde s este un factor de scală care reprezintă un parametru pentru ajustarea
lungimilor vectorilor.

S-ar putea să vă placă și