Http:// Maria Antónia Forjaz, DMat, UM MatLab Gráficos.
Transcript of Http:// Maria Antónia Forjaz, DMat, UM MatLab Gráficos.
http://www.mathworks.com/ Maria Antónia Forjaz, DMat, UM
MatLab
Gráficos
plot(x,y)
>> x=[1.5 2.2 3.1 4.6 5.7 6.3 9.4];
>> y=[2.3 3.9 4.3 7.2 4.5 3.8 1.1];
>> plot(x,y)
>> plot(x,y,'*')
1 2 3 4 5 6 7 8 9 101
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8 9 101
2
3
4
5
6
7
8
plot(x,y, string)
>> x=[0 2 5 7 9 11 13 ];
>> y=[2.3 3.9 4.3 7.2 4.5 3.8 1.1];
>> c=[1.5 2.3 3.4 6.7 7.1 9.10 10.4 ];
>> b=[1 3 4 6 8 10 14 ];
>> plot(x,y,'g-',b,c,'r--')
0 2 4 6 8 10 12 141
2
3
4
5
6
7
8
9
10
11
plot(x,y, string)
>> t = 0:0.05:4*pi;
>> y = sin(t);
>> plot(t,y)
>> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi))
0 2 4 6 8 10 12 14-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 2 4 6 8 10 12 14-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
subplot
>> t = 0:0.05:4*pi;
>> subplot(2,3,1),plot(t,sin(t))
subplot(2,3,2),plot(t,cos(t))
subplot(2,3,3),plot(t,tan(t))
subplot(2,3,4),plot(t,sin(t+pi))
subplot(2,3,5),plot(t,cos(t+pi))
subplot(2,3,6),plot(t,tan(t+pi))
2 linhas e 3 gráficos por linha
0 10 20-1
-0.5
0
0.5
1
0 10 20-1
-0.5
0
0.5
1
0 10 20-400
-200
0
200
400
0 10 20-1
-0.5
0
0.5
1
0 10 20-1
-0.5
0
0.5
1
0 10 20-400
-200
0
200
400
subplot
>> x = 0:0.1:1;>> subplot(4,3,1),plot(x,x.^2,'.')subplot(4,3,2),plot(x,x.^2,'o')subplot(4,3,3),plot(x,x.^2,'x')subplot(4,3,4),plot(x,x.^2,'+')subplot(4,3,5),plot(x,x.^2,'*')subplot(4,3,6),plot(x,x.^2,'s')subplot(4,3,7),plot(x,x.^2,'d')subplot(4,3,8),plot(x,x.^2,'v')subplot(4,3,9),plot(x,x.^2,'^')subplot(4,3,10),plot(x,x.^2,'<')subplot(4,3,11),plot(x,x.^2,'p')subplot(4,3,12),plot(x,x.^2,'h')
4 linhas e 3 gráficos por linha
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
0 0.5 10
0.5
1
Um círculo
>> t=0:pi/20:2*pi;
>> plot(sin(t),cos(t))
>> axis square
-1 -0.5 0 0.5 1-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
fplot(f(x),intervalo de variação)
>> fplot('sin(x)',[-pi,pi])
Produz o gráfico no intervalo [-pi, pi]da função sin(x) correspondente a um certo conjunto de pontos determinadospelo algoritmo e implementados em fplot.
>> [x,y]=fplot('sin(x)',[-pi,pi])Não produz gráfico, mas as coordenadasdos vectores x e y, seleccionadas pelo algoritmo(cujas coordenadas não estão em progressão aritmética,Começando com um passo (xmax-xmin)*TOL, TOL=2e-3,E vão-se ajustando).
-3 -2 -1 0 1 2 3-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Mais completo gráfico da função seno
>> fplot(‘sin x’, [-pi pi])
>> title(‘Gráfico da função f(x)=seno(x), -pi<x<pi’)
>> xlabel(‘x’)
>> ylabel(‘f(x)’)
>> grid
Mais completo gráfico
>> x=[0:0.1:exp(1)*pi];
>> y=exp(-x).*sin(x);
>> plot(x,y,'--b');
>> title('gráfico f(x)=exp(-x)*sin(x)');
>> xlabel('eixo x');
>> ylabel('eixo y');
>> gtext('ponto de máximo local');
0 1 2 3 4 5 6 7 8 9-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35gráfico f(x)=exp(-x)*sin(x)
eixo x
eixo
y
ponto de máximo local
>>fplot('(x+1).*(x-sqrt(2))./(x-sqrt(2))',[-2,2])
O gráfico é (claro!) o da recta y=x-1Não sendo 2 uma das abcissas dos
pontos do gráfico, fplot não detecta a descontinuidade.
Usando a função
>> f=inline('(x+1).*(x-sqrt(2))./(x-sqrt(2))')
>> x=0:sqrt(2)/20:2 ; plot(x,f(x))Warning: Divide by zero. (erro no cálculo de f( 2) , origina divisão por zero!)
Em qualquer caso, com mais ou menos pontos estamos a representar uma curva contínua por um conjunto discreto de pontos.
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1
-0.5
0
0.5
1
1.5
2
2.5
3
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 21
1.2
1.4
1.6
1.8
2
2.2
2.4
2.6
2.8
3
f(x) = |x|x, x0
1 , x=0
>> f=inline('abs(x)^x')
>> fplot(f,[-10,10]).
Na vizinhança de zero é difícil analisar
o comportamento da função, sendo o gráfico inútil!
Como os valores de f, para x próximo de 0, são muito grandes,
vem que para x<8 os pontos aparecem sobre a recta horizontal y=0
(ordens de grandeza muito diferentes).
SOLUÇÂO: Usar escala logarítmica
Como se notou, o nº de pontos tem que ser suficientemente grande para que os pontos angulosos da função não sejam perceptíveis no gráfico.Mesmo que esse problema seja resolvido, não é certo que possamos, por observação do gráfico, obter uma ideia correcta do comportamento da função.
-10 -8 -6 -4 -2 0 2 4 6 8 100
1
2
3
4
5
6
7
8
9
10x 10
9
Escala Logarítmica
-10 -8 -6 -4 -2 0 2 4 6 8 1010
-10
10-5
100
105
1010
f(x) = |x|x, x0 1 , x=0
>> f=inline('abs(x)^x')>> [x,y]=fplot(f,[-10,10]);semilogy(x,y)
Este gráfico também não é muito inútil, mesmo tentando obter a derivada de f(x) em x=0 (nesta escala o gráfico de 10x é a recta y=x.
SOLUÇÂO: Usar intervalos , de pequena amplitudo, centrados na origem
>> fplot(f,[-1,1]) -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
Mais exemplos
>> p=inline('x^9-18*x^8+144*x^7-672*x^6+2016*x^5-4032*x^4+5376*x^3-4608*x^2+2304*x-512')
>> subplot(2,1,1), fplot(p,[0,4]), subplot(2,1,2), fplot(p,[1.99,2.01])
0 0.5 1 1.5 2 2.5 3 3.5 4-1000
-500
0
500
1000
1.99 1.992 1.994 1.996 1.998 2 2.002 2.004 2.006 2.008 2.01-4
-2
0
2
4x 10
-11
O Gráfico de cima, numa amplitude maior, dá uma melhor ideia do comportamento da função na vizinhança de 2.
Mais funções no MatLab
>> polar(theta,rho)Produz uma curva em coordenadas polares de ângulo thet, em radianos, e raio polar rho.
>> t=0:pi/2:2*pi; polar(t,5*t)
10
20
30
40
30
210
60
240
90
270
120
300
150
330
180 0
Uma linha poligonal que se aproxima de uma espiral.Uma vez mais, o problema do nº de pontos insuficientes!
10
20
30
40
30
210
60
240
90
270
120
300
150
330
180 0
t=0:pi/16:2*pi; polar(t,5*t)
Mais funções no MatLab
>> t=0:pi/50:10*pi; plot3(sin(t),cos(t),t)
>> axis square, grid on
Produz uma hélice
-1-0.5
00.5
1
-1
-0.5
0
0.5
10
10
20
30
40
Um gráfico 3D
>> x=[-5, 5];
>> y=x;
>> [x,y]=meshgrid(x,y);
>> z=x.^2+y.^2;
>> mesh(z)
>> x=[-0.5:0.1: 0.5];
>> y=x;
>> [x,y]=meshgrid(x,y);
>> z=sqrt(1-x.^2+y.^2);
>> mesh(z)
11.2
1.41.6
1.82
1
1.5
249
49.5
50
50.5
51
0
5
10
15
0
5
10
150.8
0.9
1
1.1
1.2
Mais gráfico 3D
>> n = 30;
>> m = 30;
>> for i = 1:m
>> for j = 1:n
>> a(i,j) = sqrt(i+j);
>> end
>> end
>> b = [a+0.5 a-0.5;
>>(a.^2)/5 ((a-0.1).^2)/2];
>> mesh(b)0
20
40
60
0
20
40
600
5
10
15
20
25
30