Sunteți pe pagina 1din 7

L14:MATLAB

Lucrare de laborator 14
Scripturi. Funcții. Reprezentări grafice
Scopul lucrării

Scopul lucrării de laborator este familiarizarea studenților cu noțiunile referitoare la rularea scripturilor, la folosirea
funcțiilor și la reprezentarea grafică a rezultatelor obținute.

Funcții pentru manipularea datelor


Operații asupra variabilelor din workspace: funcțiile clear, clearvars, disp, load, save, openvar, who, whos.
Manipularea datelor prin fișiere de intrare-ieșire: funcțiile fopen, fclose, ferror, feof, fgets, gseek, fread, fwrite, fscanf,
fprintf.

Specificatori de format pentru funcția fprintf:


Specificatori de format pentru fprintf
Tipul de dată Notaţie Detalii
Întreg cu semn (Signed %d sau %i Număr în baza 10.
integer)

Întreg fără semn %u Număr în baza 10.


(Unsigned integer)
%o Număr în baza 8.
%x Număr în baza 16, folosind litere mici (a-f) pentru cifrele mai
mari ca 10.
%X Număr în baza 16, folosind litere mari (A-F) pentru cifrele mai
mari ca 10.
Numere reale %f Notaţie cu parte zecimală fixă.
(Floating - point) %e Notaţie exponenţială, cu litera ’e’ mic.
%E Notaţie exponenţială, cu litera ’E’ mic.
%g Forma mai compactă care se obţine între %e şi %f fără zerouri în
coadă.
%G Forma mai compactă care se obţine între %E şi %f fără zerouri în
coadă.
%bx sau %bX Valori în baza 16, 8 sau 10, în dublă precizie.
%bo
%bu
%tx sau %tX Valori în baza 16, 8 sau 10, în simplă precizie.
%to
%tu
Şiruri de caractere %c Scrie un singur caracter.

Această construcție formată din semnul % şi un set de caractere, poate include şi operatori suplimentari care permit
configurarea modului de scriere a datelor, aceştia fiind ilustraţi în figura următoare.
L14:MATLAB

Semnificaţia elementelor componente din formatarea parametrului formatSpec sunt:


% - marchează începutul parametrului;
4$ - marchează ordinea de citire a datelor dintr-o listă;
Parametri speciali de reprezentare sunt:
- ’-’ Aliniere la stânga;
- ’+’ Afişează caracterul ’+’ pentru valorile pozitive;
- ’ ’ Introduce un câmp gol (spaţiu) înaintea valorii;
- ’0’ Completează spaţiile până la dimensiunea câmpului cu zero-uri;
- ’#’ Modifică modul de reprezentare pentru conversiile numerice:
- Pentru %0, %0x şi %0X se va tipări şi prefixul 0, 0x sau 0X;
- Pentru %f, %e şi %E se va tipări şi punctul chiar dacă valoarea afişată este întreagă;
- Pentru %g şi %G nu se vor şterge zero-urile şi nici punctul zecimal.
Mărimea câmpului de reprezentare este un alt parametru opţional care defineşte numărul minim de câmpuri pentru
reprezentarea unei valori. Acesta poate să fie un număr întreg sau caracterul * care face trimitere spre un argument
din listă.

Precizia este un număr care se introduce după semnul punct (.) şi reprezintă:
- pentru %f, %e şi %E numărul de zecimale care vor apărea în dreapta punctului;
- pentru %g şi %G numărul de cifre semnificative care să fie afişate.
Şi pentru acesta se poate folosi semnul (*) urmând ca valoarea să apară separat în lista de parametri.
În câmpul de formatare, formatSpec se poate introduce şi text, care va fi tratat ca un şir de caractere (string) care va fi
reprodus exact în aceeaşi formă şi în plus se definesc o listă de caractere speciale după cum urmează:
- ’’ – introduce caracterul ghilimele;
- %% - introduce caracterul %;
- \\ - introduce caracterul \ (backslash);
- \a – generează o alarmă;
- \b – şterge ultimul caracter;
- \f – introduce un caracter gol (spaţiu);
- \n – trece pe o linie nouă;
- \r – introduce caracterul Enter (carriage return);
- \t – introduce un tab orizontal;
- \v – introduce un tab vertical;
-\xN – introduce numărul N în format hexazecimal (baza 16);
-\N – introduce numărul N în format octal (baza 8).

Verificați pe calculatorul dvs. următorul exemplu: Programul generează un vector de valori pentru care determină
valorile unor funcţii (sinus şi cosinus) şi le salvează într-un fişier. Apoi valorile sunt citite, salvate într-o variabilă nouă şi
afişate.

clear, clc
L14:MATLAB

x=-2*pi:pi/4:2*pi;
A=[x cos(x) sin(x)];
fileID=fopen('sin_cos.txt','w');
fprintf(fileID,'Tabel cu valori pentru \n x sin(x) cos(x)\n');
fprintf(fileID,'%6.2f %10.4f %10.6f\n',A);
fclose(fileID);

%%citirea valorilor

fileID=fopen('sin_cos.txt','r');
frewind(fileID);
titlu_linie1=fgets(fileID);
titlu_linie2=fgets(fileID);
AA=fscanf(fileID,'%6f %10f %10f');
AA=AA';
fclose(fileID);

%afisarea valorilor citite

disp(titlu_linie2);
fprintf('%6.2f %10.4f %10.6f\n',AA);

Trasarea graficelor

Funcţia plot
Plot(x) - Funcţia va reprezenta grafic valorile din variabila X, pe axa ordonatelor, cea verticală fiind poziţionate valorile
lui X iar pe abscisă, pe axa orizontală va fi reprezentat indexul valorilor.

1. Să se reprezinte grafic funcţiile sin(x) şi cos(x), pe câte un grafic independent, unde x ia valori de la 0 la 2 ∙ 𝜋 cu pas
de 0.05.
Rezolvare

>> x=0:0.05:2*pi

x =

Columns 1 through 9

0 0.0500

>> y=sin(x);
>> y=plot(x,y)
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

>> y=cos(x);
>> plot(x,y)
L14:MATLAB

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

2. Să se reprezinte grafic funcţiile sin(x), sin(2x) şi sin (3x) , pe un singur grafic unde x ia 100 de valori de la 0 la 2 ∙ 𝜋.
Rezolvare

>> clear all


>> pas=2*pi/100;
>> x=0:pas:2*pi;
>> plot(x,sin(x));
>> hold on
>> plot(x,sin(2*x));
>> plot(x,sin(3*x));
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

3. Să se modifice modul de reprezentare astfel încât să se ştie ce reprezintă fiecare curbă.

>> plot(x,sin(x),'r-')
>> hold on
>> plot(x,sin(2*x),'g--')
>> plot(x,sin(3*x),'b-.')
>> legend('sin(x)','sin(2x)','sin(3x)')
>>
1
sin(x)
0.8 sin(2x)
sin(3x)
0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7
L14:MATLAB

. Exerciţiu. Să se reprezinte grafic funcţiile cos(2), cos(2x) şi cos(3x) pe acelaşi grafic, unde x ia 150 de valori în intervalul
−2 ∙ 𝜋, 2 ∙ 𝜋.

Pentru rezolvare folosiţi ALTE moduri de reprezentare ale curbelor pe care le puteţi găsi în documentaţia MATLAB
pentru comanda plot.

5. Să se ruleze următorul script pentru reprezentarea grafică a unor funcții. Observați utilizarea funcției subplot().
figure('Name','Exemple de plotari');
subplot(2,2,1);
x=-2*pi:pi/3:2*pi;
plot(x,sin(x));
title('Nr mic de puncte');
x=-2*pi:pi/20:2*pi;
subplot(2,2,2);
plot(x,cos(x),x,sin(x));
title('Nr mare de puncte si doua functii');
a=5;
b=[1 2 3 4 5];
subplot(2,2,3);
plot(a,b,'*','MarkerSize',10)
title('Plot vector vs scalar')
X=magic(4);
Y=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]';
subplot(2,2,4);
plot(X,Y)
title('Plotarea unor matrice 4x4')

6. Revenind la primul grafic să se modifice valorile axelor încât să ofere o imagine mai sugestivă a valorii funcţiei sin(x)
şi sin (2x).
!! Atenţie unde puneţi „;” şi unde nu.

>> x=-2*pi:.1:2*pi;
>>y1=sin(x);
>>y2=sin(2*x);
>>plot(x,y1,'r-',x,y2,'b-.')
>>set(gca,'XTick',-pi:pi/2:pi)
>>set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
>>
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-pi -pi/2 0 pi/2 pi

Dacă dorim să vedem ce se întâmplă doar în zona [–pi, pi], vom defini limitele axelor de reprezentare:
>> axis(-pi,pi,-1,1)
??? Error using ==> axis>LocSetLimits at 234
Vector must have 4, 6, or 8 elements.

Error in ==> axis at 94


LocSetLimits(ax(j),cur_arg);
L14:MATLAB

!!!! Atenţie, chiar dacă funcţia axis() are paranteze rotunde, pentru a defini limitele pe cele două axe, va trebui să folosim
şi parantezele [] care reprezintă vectorul de valori limită ale axelor.

>> axis([-pi,pi,-1,1])
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-pi -pi/2 0 pi/2 pi

7. Să se reprezinte grafic următoarele funcții pe intervalul [a,b] parcurs cu pasul h:

 2 x + 1, daca x  −5  x+7
 , daca x  4
 x − 5, daca − 5  x  −2 x−3
  2x + 3
f ( x) =  x + 1 f ( x) =  , daca 4  x  10
 x( x − 3) , daca − 2  x  8  x −8
  x + 1, daca x  10
 x + 6, daca x  8 
Reprezentarea discretă a datelor

Având un vector de forma :


x=0 :pi/12 :2*pi
si o functie de x :
y=sin(x),
reprezentarea discretă (prin puncte) a datelor se face utilizând funcţia :
stem(x,y).

Exerciţiu. Reprezentaţi funcţia cos(x) pentru 𝑥 ∈ [−𝜋, 𝜋], utilizând reprezentarea discretă.
−𝜋 𝜋
Reprezentaţi, pe acelaşi grafic, funcţia tan(x) şi 2 ∙ tan⁡(𝑥) pentru 𝑥 ∈ [ , ].
2 2

Reprezentarea graficelor de bare

Având un vector de forma :


L14:MATLAB

x=0 :pi/3 :2*pi


si o functie de x :
y=sin(x),
reprezentarea prin bare a datelor se face astfel :
subplot (1,2,1)
bar(x,y)
subplot(1,2,2)
bar(y)

Exerciţii

Să se realizeze un program care să rezolve o ecuaţie de gradul II, la care se vor citi coeficienţii ecuaţiei de forma 𝑓 =
𝑎 ∙ 𝑥 2 + 𝑏 ∙ 𝑥 + 𝑐, unde 𝑎 ≠ 0. Se va reprezenta grafic funcţia, iar dacă aceasta are rădăcini acestea se vor marca, cu
culoare roşie, pe grafic.

Să se reprezinte grafic funcţiile cos(x), cos(2x), sin(x), şi sin(2x) pe un singur grafic unde x ia 100 de valori de la −2 ∙ 𝜋
la 2 ∙ 𝜋. Se vor folosi culori diferite pentru fiecare reprezentare, şi se va face legenda graficului.
Pe un nou grafic să se reprezinte aceleaşi curbe doar in domeniul −𝜋 , 𝜋.

Să se reprezinte grafic funcţiile sin(x), sin(2x) şi 2·sin(x) , pe un singur grafic unde x ia 150 de valori de la 0 la 2 ∙ 𝜋. Să se
utilizeze culori şi tipuri diferite de linii pentru fiecare curbă şi să se reprezinte şi legenda graficului.

Să se citească un şir de la tastatură. Să se verifice dacă şirul este simetric şi anume dacă primul element este egal cu
ultimul, al doilea cu penultimul, etc. În cazul în care nu există egalitate între cele două elemente comparate să se
schimbe valorile elementelor respective în 0 şi să se afişeze noul şir.

Exemplu:

Şir1: 1 2 3 4 3 2 1 => Rezultat: Şirul este simetric.

Şir2: -3 5 7 8 7 4 -3 => Rezultat: Şirul nu este simetric; Noul şir este: -3 0 7 8 7 0 -3

Se dă funcţia:
2  x + 1, daca x  −3

f(x) = 5 − x , daca 0  x  8
x 2 + 4x − 5, daca x  8

Să se determine valoarea funcţiei pentru un interval de valori [a,b] împărţit în q subintervale. Se va verifica şi dacă
capătul din stânga al intervalului este mai mare decât cel din dreapta, caz în care se inversează cele două valori. Să se
reprezinte grafic funcţia, şi să se noteze axele sistemului de coordonate.

Se citesc de la tastatură două matrice pătratice Anxn şi Bnxn. Să se inverseze elementele de pe diagonala secundară între
cele două matrice.

Se citeşte o matrice. Să se determine elementul maxim, elementul minim, şi, dacă matricea este pătratică să se calculeze
media aritmetică a elementelor de pe diagonala principală.

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