Introdução ao MATLAB

Propaganda
Introdução ao
MATLAB
Parte 3
6 Gráficos 2D
Há diversos comandos para produzir gráficos em 2D (veja a Figura 1). O mais
utilizado deles é o comando plot. Ele admite argumentos de entrada, que permitem
adicionar uma série de opções à saída gráfica, como título, identificação dos eixos,
tamanho das fontes, cores, etc. É possível superpor gráficos ou obter vários deles em
uma mesma janela. Estas opções serão ilustradas com diversos exemplos nos próximos
parágrafos.
Figura 1 – Comandos para gerar gráficos 2D
Comandos plot, hold e grid (Figura 2)
% Script 6.1
x = 0:0.02*pi:2*pi;
y = sin(x);
z = cos(x);
% gera o gráfico do seno de x em preto
plot(x,y,'black');
% o próximo comando retém a janela gráfica e suas propriedades
% para comandos gráficos adicionais
hold on;
% gera o gráfico do cosseno de x em vermelho
plot(x,z,'red');
% libera a janela gráfica
hold off
% acrescenta um grid ao gráfico
grid
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
1
2
3
4
5
6
Figura 2 – Comandos plot, hold e grid
Opções do comando plot (Figura 3) – veja detalhes usando o comando help.
% Script 6.2
x = linspace(0,2*pi,30); % 30 divisões do intervalo [0,2*pi)
y = sin(x);
z = cos(x);
plot(x,y,'b:p',x,z,'c-',x,z,'m+');
7
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
1
2
3
4
5
6
7
Figura 3 – Opções do comando plot
Quando as funções tan(x) e cot(x) são adicionadas, o eixo das ordenadas
“explode”; como resultado, informação é perdida e o gráfico não exibe mais o
comportamento das funções trigonométricas (veja o resultado na Figura 4).
% Script 6.3
x = linspace(0,2*pi,30);
y = sin(x);
z = cos(x);
t = tan(x); % tangente de x
ct = cot(x); % cotangente de x
plot(x,y,'r*',x,z,'mx',x,t,'bo-',x,ct,'kp-');
Para evitar isso, os valores mínimo e máximo dos eixos coordenados devem ser
ajustados por meio do comando axis([xmin xmax ymin ymax]). A Figura 5 resulta da
execução de
>> axis([0 2*pi -3 3]);
15
0.5
x 10
0
-0.5
-1
-1.5
-2
-2.5
-3
-3.5
-4
-4.5
0
1
2
3
4
5
6
7
Figura 4 – Curvas de sin(x), cos(x), tan(x) e cot(x)
3
2
1
0
-1
-2
-3
0
1
2
3
4
Figura 5 – Ilustração do comando axis na figura anterior
5
6
A inclusão de título, a identificação dos eixos, a inserção de legenda e de um
texto realizadas pelos comandos title, xlabel, ylabell, legend e text abaixo são vistos
na Figura 6).
% Script 6.4
x = linspace(0,2*pi,30);
y = sin(x);
z = cos(x);
t = tan(x); % tangente de x
ct = cot(x); % cotangente de x
plot(x,y,'r*',x,z,'mx',x,t,'bo-',x,ct,'kp-');
axis([0 2*pi -3 3]);title('Funções
Trigonométricas','FontSize',14,'Fontweight','Bold');
xlabel('Ângulo \theta [rad]','FontSize',14,'Fontweight','Bold',...
'FontAngle','normal');
ylabel('Funções','FontSize',14,'Fontweight','Bold','FontAngle',...
'italic');
legend('sin(\theta)','cos(\theta)','tan(\theta)','cot(\theta)');
text(0.5,-1.5,'\rightarrow Texto');
Funções Trigonométricas
3
sin()
cos()
tan()
2
cot()
Funções
1
0
-1
 Texto
-2
-3
0
1
2
3
4
5
6
Ângulo  [rad]
Figura 6 – Comandos title, xlabel, ylabel, legend e text
A saída para \theta é a letra grega  (segue a notação do LaTeX, por exemplo:
\alpha, \delta, \nabla). As características das fontes podem ser especificadas, tais
como o tamanho em pontos (14, no caso), se negrito, normal ou itálico, etc.
O comando text serve para introduzir um texto qualquer em um ponto
específico (x,y) da área gráfica.
Comando subplot
Através deste comando, pode-se exibir um arranjo de gráficos em uma mesma
janela gráfica, como ilustra a Figura 7.
sin(x)
cos(x)
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
0
2
4
6
-1
0
2sin(x)cos(x)
20
0.5
10
0
0
-0.5
-10
0
2
4
4
6
2sin(x)/cos(x)
1
-1
2
6
-20
0
2
4
6
Figura 7 – Arranjo gráfico obtido usando o comando subplot
Obtenha este gráfico, realizando cada uma das etapas do script abaixo e
observando o resultado.
%
x
y
z
u
v
Script 6.5
= linspace(0,2*pi,30);
= sin(x);
= cos(x);
= 2*sin(x).*cos(x);
= sin(x)./(cos(x)+eps);
% reserva uma janela para 4 gráficos (2x2) e ativa
% a posição superior esquerda (1)
subplot(2,2,1);
plot(x,y); % exibe y(x)
axis([0 2*pi -1 1]); % ajusta os eixos x e y
title('sin(x)'); % titulo do gráfico ativo
% ativa a posição superior direita (2)
subplot(2,2,2);
plot(x,z); % exibe z(x)
axis([0 2*pi -1 1]); % ajusta os eixos x e z
title('cos(x)'); % titulo do gráfico ativo
% ativa a posição inferior esquerda (3)
subplot(2,2,3);
plot(x,u); % exibe u(x)
axis([0 2*pi -1 1]); % ajusta os eixos x e u
title('2sin(x)cos(x)'); % titulo do gráfico ativo
% ativa a posição inferior direita (4)
subplot(2,2,4);
plot(x,v); % exibe v(x)
axis([0 2*pi -20 20]); % ajusta os eixos x e v
title('2sin(x)/cos(x)'); % titulo do gráfico ativo
Comandos loglog, semilogx e semilogy
Estes comandos devem ser usados quando escalas logarítmicas forem
requeridas. Faça um script que gere a Figura 7.
Escala decimal em X e em Y
Escala log em X
1.5
1.5
1 - sin(x)
2
1 - sin(x)
2
1
0.5
0
1
0.5
0
2
4
0
6
Escala log em Y
Escala log em X e log em Y
0
0
10
10
1 - sin(x)
1 - sin(x)
0
10
-2
10
-2
10
0
2
4
6
0
10
Figura 8 - Comandos loglog, semilogx e semilooy
Outros tipos de gráficos
O gráfico no formato de pizza ou torta, ilustrado na Figura 9, é obtido por meio
do comando pie(arg1,arg2). No script abaixo, o primeiro argumento contém os valores
a serem plotados e o segundo destaca a fatia de maior percentual. Obtenha o
conteúdo do segundo argumento.
a = [0.5 1 1.5 2.0 1 0.3];
% valores a serem plotados
pie(a,a==max(a));
title('Produção de grãos');
legend('Arroz','Feijão','Soja','Trigo','Milho','Cevada');
Produção de grãos
5%
8%
Arroz
Feijão
Soja
Trigo
Milho
Cevada
16%
16%
24%
32%
Figura 9 - Gráfico em formato de pizza
A versão tridimensional deste gráfico (Figura 10) é obtida através de:
destaque = [0 1 0 1 0 1];
pie3(a,destaque);
colormap hsv;
% pedaços em destaque
% formato pizza tridimensional
% opção de tonalidade de cor
16%
5%
8%
32%
16%
24%
Figura 10 – Versão 3D do gráfico pizza
Gráficos de barras verticais são produzidos pelo comando bar(arg1, arg2), onde
arg2 são as abscissas e arg1 são as ordenadas correspondentes. Para este caso, a
escala dos valores das abcissas não é adequada para um gráfico de barras verticais
(veja a Figura 11), pois os primeiros valores variam de 10 em 10 anos, enquanto nos
dois últimos, a diferença é de apenas um ano.
a = [0.5 1 1.5 2.0 1 0.3];
% produção de grãos
b = [1960 1970 1980 1990 2000 2001]; % anos correspondentes
bar(b,a); % gráfico de barras verticais
2
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
1960
1970
1980
1990
2000
2001
Figura 11 - Gráfico de barras verticais
Uma forma mais adequada seria utilizar um gráfico de barras horizontais como
o da Figura 12. Para isso, entre com os comandos abaixo.
a = [0.5 1 1.5 2.0 1 0.3];
% produção de grãos
b = [1960 1970 1980 1990 2000 2001]; % anos correspondentes
barh(b,a); % gráfico de barras horizontais
xlabel('Anos de produção');
ylabel('Produção de grãos (em milhões de toneladas)');
Produção de grãos (em milhões de toneladas)
2001
2000
1990
1980
1970
1960
0
0.2
0.4
0.6
0.8
1
1.2
Anos de produção
1.4
1.6
1.8
2
Figura 12 - Gráfico de barras horizontais
No comando stairs abaixo, são usados os vetores a e b definidos
anteriormente. O gráfico em escada obtido é mostrado na Figura 13.
stairs(b,a);
xlabel(' Anos de produção ');
ylabel(' Produção em milhôes de toneladas ');
2
Produção em milhôes de toneladas
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
1960
1965
1970
1975
1980
1985
1990
Anos de produção
Figura 13 - Gráfico em escada
1995
2000
2005
O próximo script produz o gráfico de área compreendida entre a curva e o eixo
X (Figura 14).
x = 0:0.05*pi:3*pi;
y = x.^3.*sin(x)+x/10;
xlabel(' Abcissa X ');
ylabel(' Ordenada = x.^3 * sin(x) + x/10 ');
area(x,y);
600
500
400
300
200
100
0
-100
-200
0
1
2
3
4
5
6
7
8
9
Figura 14 - Gráfico de área
Como último exemplo de gráficos em 2D, o script abaixo ilustra a obtenção de
gráficos polares (Figura 15). Os pontos das curvas não são mais descritos por pares
ordenados (x,y) em coordenadas cartesianas, mas por pares (r,) em coordenadas
polares.
% Script 6.6
theta = 0:2*pi/100:2*pi;
r = theta/(2*pi);
subplot(1,2,1);
polar(theta,r); % gráfico em coordenadas polares
title('* E S P I R A L *');
subplot(1,2,2);
polar(theta,sin(2*theta).*cos(2*theta));
title('Rosa de 8 pétalas');
Rosa de 8 pétalas
*ESPIRAL*
90
90
1
120
60
0.5
150
30
180
330
240
300
60
0.25
150
0
210
0.5
120
30
180
0
210
330
240
270
300
270
Figura 15 – Gráficos em coordenadas polares
7 Gráficos 3D
Há também uma grande variedade de comandos para gerar gráficos
tridimensionais (veja a Figura 16).
Figura 16 - Comandos para gerar gráficos 3D
Gráficos de linha
Para traçar gráficos curvilíneos 3D, utiliza-se o comando ou função plot3. No
próximo exemplo, uma curva 3D em forma de hélice é gerada (Figura 17), cujos pontos
são definidos pela terna ordenada (sen(t), cos(t), t).
% Script 7.1
t = linspace(0,10*pi,200);
plot3(sin(t),cos(t),t);
xlabel('x = sen(t)');
ylabel('y = cos(t)');
zlabel('z = t');
grid on
40
z=t
30
20
10
0
1
0.5
1
0.5
0
0
-0.5
y = cos(t)
-0.5
-1
-1
x = sin(t)
Figura 17 – Hélice: curva paramétrica
Gráficos de superfície
O script abaixo gera a Figura 18. Estude-o e verifique o efeito de cada comando.
% Script 7.2
x = -7.5:0.5:7.5; % vetor ou lista x
y = -7.5:0.5:7.5; % vetor ou lista y
[X,Y] = meshgrid(x,y);
% gera uma malha de pontos
R = sqrt(X.^2+Y.^2)+eps; % soma-se eps para evitar divisão por zero
Z = sin(R)./R+1;
% cálculo da coordenada Z
mesh(X,Y,Z);
% gráfico em malha
hold on;
% segura as saídas gráficas posteriores na janela atual
pcolor(X,Y,Z); % provoca a aparição de uma malha colorida no domínio
shading interp;
% a cor é definida de acordo com a altura
contour(X,Y,Z,20,'k'); % 20 curvas de nível em preto,
% escolhidas automaticamente
colorbar; % apresenta uma escala colorida de valores
hold off; % libera a janela gráfica
1.9
1.8
2
1.7
1.6
1.5
1.5
1
1.4
1.3
0.5
1.2
0
10
1.1
5
10
1
5
0
0
-5
0.9
-5
-10
-10
Figura 18 – Gráfico de superfície
Animação gráfica
O primeiro exemplo (script 7.3) mostra uma animação bidimensional.
Inicialmente, constrói-se uma sequência de 20 gráficos, que é armazenada em uma
matriz M; em seguida, o comando movie exibe 5 vezes a sequência armazenada em M
a uma taxa de repetição 10 quadros por segundo. Estude o script e verifique o efeito
de cada comando.
% Script 7.3
x = -pi/2:.1:pi/2;
for c=1:20,
y = sin(2*x+c*pi/10);
plot(x,y,'LineWidth',18);
axis([-pi/2 pi/2 -1 1]);
M(c) = getframe;
end;
movie(M,5,10);
Download