Introdução ao MATLAB 5.3
para Hidrólogos
Aula 03 – Scripts, funções e Gráficos
Programando e plotando no MATLAB
Carlos Ruberto Fragoso Júnior
Christopher Freire Souza
Porto Alegre, setembro de 2005
Aula 03
•
•
•
•
•
•
•
Scripts
Funções
Linguagem de programação
Gráficos
2D
3D
Animação
Aula 03
Scripts
• Scripts files
Aula 03
– Script é um m-file com um conjunto de
comandos do MATLAB dentro dele.
– Para executar basta digitar o nome do arquivo
(sem a extensão .m).
– É equivalente a digitar todos os comandos na
tela principal, só que armazenado em um
arquivo.
– Trabalha com variáveis globais (apresentadas
no diretório de trabalho)
• Exemplo de um script
Vamos escrever um script para resolver o seguinte
sistema linear de equações:
A.x=b, onde A depende de uma variável r.
Aula 03
r   x 1  2
5 2r
3 6 2r  1 x   3

 2   
2 r  1 3r  x 3  5
• Executando o script no MATLAB
>> r = 1
r=
Aula 03
1
>> solvex
det_A =
64
x=
-0.0312
0.2344
1.6875
Os valores do “det_A” e “x"
aparecem na tela porque não
tem ponto e virgula no final da
linha correspondente
• Cuidados que se deve ter:
– NUNCA salve o script com o mesmo nome de
uma variável nele digitada.
– O nome do arquivo script deve iniciar com uma
letra.
– Seja cuidadoso com os nomes das variáveis
digitadas no script (todas essas variáveis são
gravadas no diretório de trabalho)
Exercício 1
A equação de uma uma reta é y = mx+b, onde m
e b são constantes compute os valores de y
para os seguintes valores de x:
x = 0,1.5,3,4,5,7,9,10
Exercício 2
Crie um vetor t com 10 elementos de: 1,2,...,10.
Depois compute os seguintes valores:
x = t.sen(t)
y = (t-1)/(t+1)
z = sen(t2)/t2
Aula 03
Funções
• Dicas para criação de funções
Aula 03
– Crie uma estrutura lógica e pense na seqüência
computacional antes de escrever o código. Escreva isso
em um papel!!!
– Defina as variáveis de entrada e saída.
– Traduza o que você escreveu no papel para o MATLAB.
– Defina nomes lógicos para suas variáveis e funções.
– Escreva o máximo de comentários possíveis no código.
– Quebre grandes blocos computacionais e escreva em
função separadas.
– Check erros e a saída com mensagens de erros e use o
artifício do “;” para verificar os passos de cálculo.
• Cuidados que se deve ter:
– O termo de definição deve ser digitado com
letra minúscula (“function” e não “Function”) .
– Linhas comentadas começam com “%”,
podendo ser colocado em qualquer lugar.
Todas as linhas comentadas imediatamente
após o termo de definição são mostradas no
MATLAB help.
– Uma simples variável de saída não precisa ser
fechada por colchetes.
– O nome das variáveis de entrada e de saída na
linha do termo de definição são variáveis
locais.
• Para executar uma função
Considere uma função, cuja a linha de definição é a seguinte:
function [rho,H,F]
= motion(x,y,t);
>> [r,angmom,force] = motion(xt,yt,time);
>> [r,h,f] = motion(rx,ry,[0:100]);
>> [r,h,f] = motion(2,3.5,0.001);
>> [radius,h] = motion(rx,ry);
>> motion(xt,yt,t);
As variáveis xt, yt e time devem
ser definidas antes de executar
o comando.
As variáveis rx e ry devem ser
definidas antes de executar o
comando e t é especificada.
Todas as variáveis são
especificadas.
A terceira variável de entrada
tem que ser especificada dentro
da função. A terceira variável e
saída não é disponível.
Nenhuma variável de saída fica
disponível.
function [det_A,x]=solvex(r)
% SOLVEX Resolve um sistema de equações lineares de um matriz 3x3
% com parâmetro r.
% Para chamar esta função, digite:
% [det_A,x] = solvex(r)
% r é a entrada e det_A e x são as saídas
A = [5 2*r r; 3 6 2*r-1; 2 r-1 3*r]
b = [2;3;5];
det_A = det(A);
x = A\b;
>> [det_A,y] = solvex(1);
>> det_A
ans =
64
>> y
ans =
-0.0312
0.2344
1.6875
• Executando uma função dentro de
outra
function [det_A,x]=solvex(r)
% SOLVEX Resolve um sistema de equações lineares de um matriz 3x3
% com parâmetro r.
% Para chamar esta função, digite:
% [det_A,x] = solvex(r)
% r é a entrada e det_A e x são as saídas
A = [5 2*r r; 3 6 2*r-1; 2 r-1 3*r]
b = [2;3;5];
det_A = det(A);
x = A\b;
A
função “det” é chamada
dentro da função solvex.
Porém, quando o nome da
função é dinâmico é feito de
forma diferente (use “feval”).
• Funções (function files)
Aula 03
– funções são m-files contendo um conjunto de
comandos do MATLAB dentro dele, como um
script, só que todas as variáveis são locais e
não globais.
– São como programas ou subrotinas no Fortran.
– A 1ª linha do arquivo começa definido as
variáveis de entradas e de saídas, e o nome da
função.
– O nome da função deve ser o mesmo nome do
arquivo a ser salvo.
• Macetes
Aula 03
– pcode nomedoarquivo – proteger o direito de
uso do código.
– profile – avalia a performance das funções.
profile on
[det_A,x] = solvex(r)
profile report
• Exercício 3
Todos os pontos com coordenadas x = r.cosө, y
= r.senө, sendo r uma constante, satisfazem a
equação x2 + y2 = r. Crie um vetor coluna:
ө = 0,π/4, π/2, 3π/4, π e 5π/4
E calcule as coordenadas x e y em função do
raio r.
Aula 03
Linguagem de Programação
•
Linguagem de Programação
–
–
São usadas para controlar o fluxo das operações.
Tipos:
–
Todos esses controladores de fluxo devem terminar
com “end”.
Aula 03
(a) “for” e “while” – para “loops”
(b) “if-elseif-else” – estrutura condicional simples
(c) “switch-case-otherwise” – estrutura condicional
avançada
•
Linguagem de Programação
(a) “for” e “while” – para “loops”
(b) “if-elseif-else” – estrutura condicional simples
(c) “switch-case-otherwise” – estrutura
condicional avançada
Aula 03
– São usadas para controlar o fluxo das
operações.
– Tipos:
•
Fazendo “loops” – “for”
–
% Exemplo
for m=1:100
num = 1/(m+1)
end
% Exemplo
for n = 100:-2:0, k=1/(exp(n)), end
Aula 03
Um “for” é usado para repetir uma operação ou um
grupo de operações para um número fixo de vezes.
•
Condicional simples – “if-elseif-else”
–
% Exemplo
num = 1; i = 1;
while num<10000
num = 2^i;
v = [i; num];
i = i + 1;
end
Aula 03
Um “while” é usado para repetir uma operação ou um
grupo de operações para um número indefinido de
vezes até que a condição especificada pelo “while”
seja satisfeita.
•
Condicional simples – “if-elseif-else”
– Cria blocos condicionais.
Aula 03
% Exemplo
i = 6; j = 21;
if i > 5
k = i;
elseif (i > 1) & (j == 20)
k = 5*i + j
else
k = 1;
end
•
Condicional avançado – “switch-caseotherwise”
% Exemplo 1
flag = 1;
switch flag
case 1
“1º bloco computacional”
case 2
“2º bloco computacional”
otherwise
“último bloco computacional”
end
Aula 03
– Cria blocos condicionais. Uma variável é
usada como um dispositivo de
direcionamento (switch), onde cada valor
dessa variável direciona para um caso (case).
• Macetes
Aula 03
– break – dentro de um “for” ou “while”, termina a
execução de um loop.
– error(‘mensagem’) – dentro de uma função ou
script, sai da execução da rotina e mostra uma
mensagem de erro.
– return - dentro de uma função ou script, sai da
execução da rotina.
•
Exemplos - break
Aula 03
% Exemplo 1
u = [2 4 8 4 -1 2}; v = u;
for i = length(v)
if u(i) < 0; % check para u negativo
break
% termina a execução do loop
end
a = a + v(i)
end
•
Exemplos - error
error('São necessárias duas variáveis de entrada')
end
if length(a) == 3 & length(b) == 3 % começa o cálculo
c = cross(a,b);
else
error('Os vetores devem ter 3 dimensões')
end
Aula 03
function c = crossprod(a,b)
% Cálcula o prod. Escalar de dois vetores
if nargin ~= 2 % se não for 2 variáveis de entrada
•
Exemplos - return
Aula 03
x = exp(sqrt(163))
n = input('Entre com o número max.de iterações')
while n >= 1
if n <=0
return
end
x = log(x)
n = n - 1;
end
• Outros macetes
Aula 03
– input(‘mensagem’, opção) – mostra um texto
na tela e espera pelo o usuário dá uma entrada
no teclado.
– menu(‘Título’,‘opção1’, ‘opção2’,...) – cria um
menu na tela e lista as opções no menu.
– pause – pausa a execução da rotina e espera
um sinal do usuário ou pausa um determinado
tempo (“pause(n)”).
Aula 03
Arquivos de entrada e saída
• Entrada e Saída
–
–
–
–
–
–
fopen: abre um arquivo existente ou cria um novo arquivo
fclose: fecha um arquivo aberto
fwrite: escreve uma informação binário para um arquivo
fread: ler uma informação binário de um arquivo
fscanf: ler uma informação formatada de um arquivo
fprintf: escreve uma informação formatada para um arquivo
Aula 03
– O MATLAB possui algumas funções para ler e
escrever dados em arquivos do tipo binário ou
ASCII formatados. As funções são:
• Formatação de arquivos
Formato
Descrição
%c
Simples caracter
%d
Notação decimal
%e
Notação exponecial (usando “e” minúsculo )
%E
Notação exponecial (usando “e” maiúsculo )
%f
Notação fixando ponto
%g
O mais compactado de %e ou %f
%o
Notação Octal
%s
Grupos de caracteres
%x
Notação Hexadecimal
Exercício 1
Gerar e escrever em um arquivo ASCII uma
tabela de conversão de temperatura de
Fahrenheit para Celsius. Sabendo que:
F = -40:5:100
C = (F-32)*5/9
Exercício 2
Ler os dados de temperatura do arquivo gerado
em um matriz de temperatura.
•
Exemplos – Escrever em um arquivo
Aula 03
F = -40:5:100;
C = (F-32)*5/9;
t = [F;C];
fid = fopen('temperatura.tab','w');
fprintf(fid,'
Tabela de Temperatura\n');
fprintf(fid,'~~~~~~~~~~~~~~~~~~~~~~~~\n');
fprintf(fid,'Fahrenheit Celsius\n');
fprintf(fid,' %4i
%8.2f\n',t);
fclose(fid);
•
Exemplos – Ler um arquivo
Aula 03
fid = fopen('temperatura.tab');
lixo=fscanf(fid,'%25c',[1 1])
lixo=fscanf(fid,'%25c',[1 1])
lixo=fscanf(fid,'%20c',[1 1])
temp = fscanf(fid,'%i %f',[2 inf])
fclose(fid);
Aula 03
Gráficos
•
Gráficos
Aula 03
– Boas ferramentas de visualização;
– Gráficos 2D, 3D e animações;
– O especial sobre a parte gráfica do MATLAB
é o fácil uso e expansibilidade.
•
Plots 2D
plot(xvalores,yvalores,’estilo-opções’)
Aula 03
– O comando básico e talvez o mais proveitoso
comando para produzir um gráfico em 2
dimensões é:
•
Opções de estilo
linha
Descrição
y (amarelo)
- (sólido)
+ (sinal de soma)
m (margenta)
-- (tracejado)
o (cículo)
c (ciano)
: (pontinhado)
* (asterisco)
r (vermelho)
-. (tracejado-potinhado)
x (sinal x)
g (verde)
. (ponto)
b (azul)
^ (triangulo)
w (branco)
s (quadrado)
k (preto)
d (diamante), etc
Aula 03
Cor
•
Outras opções do comando “axis”
–
–
–
Aula 03
–
axis(‘equal’) – coloca uma escala igual em ambos os
eixos
axis(‘square’) – transforma a área de plotagem
retangular em um quadrado
axis(‘normal’) – restaura os eixos para valores padrões
axis(‘off’) – remove a área de plotagem e legendas
•
Controle do eixo
axis([xmin xmax ymin ymax])
Aula 03
– Você pode mudar os limites dos eixos com o
comando “axis”
•
Inserindo textos nos gráficos
xlabel(‘eixo x’) – legenda do eixo x
ylabel(‘eixo y’) – legenda do eixo y
title(‘título’) – título do gráfico
text(2,6,‘texto’) – escreve ‘texto’ na
coordenada (2,6)
– legend(‘texto1’, ‘texto2’, ...)
Aula 03
–
–
–
–
•
Sobreposição de gráficos
– Usando o comando plot
– Usando o comando “hold on”
plot(x1,y1,‘estilo1’)
hold on
plot(x2,y2, ‘estilo2’)
Aula 03
plot(x1,y1,‘estilo1’,x2,y2,‘estilo2’)
•
Exercício
Usando as funções xlabel, ylabel, axis, gtext,
hold on, plot...
Aula 03
– Plotar a função seno em conjunto com duas
funções de aproximação por série de Taylor
(1ª e 3ª ordem). As funções são:
y1 = sen(t)
y2 = t
y3 = t-t3/3!+t5/5!
•
Exercício (solução)
Aula 03
x=linspace(0,2*pi,100);
y1=sin(x);
plot(x,y1)
hold on
y2=x;
plot(x,y2,‘--’)
y3=x-(x.^3)/6+(x.^5)/120;
plot(x,y3,‘o’)
axis([0 5 -1 5])
Hold off
•
Gráficos especiais em 2D
– fplot
Aula 03
30
» fplot('x.*sin(x)',[0 10*pi])
20
10
0
-10
-20
-30
0
5
10
15
20
25
30
•
Gráficos especiais em 2D
– semilogx
» t=linspace(0,2*pi,200);
Aula 03
7
6
» x=exp(-t);
5
» y=t;
4
» semilogx(x,y), grid
3
2
1
0
-3
10
-2
10
-1
10
0
10
•
Gráficos especiais em 2D
– semilogy
Aula 03
3
10
» t=linspace(0,2*pi,200);
» semilogy(t,exp(t)), grid
2
10
1
10
0
10
0
1
2
3
4
5
6
7
•
Gráficos especiais em 2D
– loglog
Aula 03
6
10
» t=linspace(0,2*pi,200);
» x=exp(t);
5
10
» y=100+exp(2*t);
» loglog(x,y), grid
4
10
3
10
2
10
0
10
1
10
2
10
3
10
•
Gráficos especiais em 2D
– polar
» t=linspace(0,2*pi,200);
» r=sqrt(abs(2*sin(5*t)));
» polar(t,r)
1.5
60
120
1
30
150
0.5
180
0
330
210
300
240
270
Aula 03
90
•
Gráficos especiais em 2D
– fill
Aula 03
» t=linspace(0,2*pi,200);
» r=sqrt(abs(2*sin(5*t)));
» x=r.*cos(t);
» y=r.*sin(t);
» fill(x,y,'k')
» axis(‘equal')
1
0.5
0
-0.5
-1
-1.5
-1
-0.5
0
0.5
1
1.5
•
Gráficos especiais em 2D
– bar
» t=linspace(0,2*pi,200);
» r=sqrt(abs(2*sin(5*t)));
» y=r.*sin(t);
» bar(t,y)
» axis([0 pi 0 inf])
Aula 03
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0
0.5
1
1.5
2
2.5
3
•
Gráficos especiais em 2D
– errorbar
» x=0:0.1:2;
» aprx2=x-x.^3/6;
» er=aprx2-sin(x);
» errorbar(x,aprx2,er)
Aula 03
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
-0.5
0
0.5
1
1.5
2
2.5
•
Gráficos especiais em 2D
– barh
» cont=char('Asia','Europa','Africa','America do Norte', 'America do Sul');
» pop=[3332;696;694;437;307];
» barh(pop)
População do Mundo (1992)
» for i=1:5,
America do Sul
5
gtext(cont(i,:));
end
America do Norte
4
» xlabel('Polulação em Milhões')
» title('População do Mundo (1992)')
3
Africa
2
Europa
Asia
1
0
500
1000
1500
2000
Polulação em Milhões
2500
3000
3500
•
Gráficos especiais em 2D
– plotyy
4
» x=1:0.1:10;
» y1=exp(-x).*sin(x);
» y2=exp(x);
» Ax=plotyy(x,y1,x,y2)
72.0021 74.0096
» hy1=get(Ax(1),'ylabel');
» hy2=get(Ax(2),'ylabel');
» set(hy1,'string','e^-x*sin(x)');
» set(hy2,'string','e^x');
0.4
0.3
2
0.2
1.5
0.1
1
ex
e-x*sin(x)
Ax =
x 10
2.5
0.5
0
-0.1
1
2
3
4
5
6
7
8
9
0
10
•
Gráficos especiais em 2D
– area
0.4
0.2
0
sin(x)./x
» x=linspace(-3*pi,3*pi,100);
» y=-sin(x)./x;
» area(x,y)
» xlabel('x')
» ylabel('sin(x)./x')
» hold on
» x1=x(46:55);
» y1=y(46:55);
» area(x1,y1,'facecolor','y')
-0.2
-0.4
-0.6
-0.8
-1
-8
-6
-4
-2
0
x
2
4
6
8
•
Gráficos especiais em 2D
– pie
» cont=char('Asia','Europa','Africa','America do Norte', 'America do Sul');
» pop=[3332;696;694;437;307];
» pie(pop)
America do Sul
6%
» for i=1:5,
8% America do Norte
gtext(cont(i,:));
end
13% Africa
61%
Asia
13% Europa
•
Gráficos especiais em 2D
– hist
» y=randn(50,1);
» hist(y)
9
8
7
6
5
4
3
2
1
0
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
•
Gráficos especiais em 2D
– stairs
» t=linspace(0,2*pi,200);
» r=sqrt(abs(2*sin(5*t)));
» y=r.*sin(t);
» stairs(t,y)
» axis([0 pi 0 inf])
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0
0.5
1
1.5
2
2.5
3
•
Gráficos especiais em 2D
– stem
» t=linspace(0,2*pi,100);
» f=exp(-0.2*t).*sin(t);
» stem(t,f)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
0
1
2
3
4
5
6
7
•
Gráficos especiais em 2D
– compass
» zx=cos(th);
» zy=sin(th);
» z=zx+i*zy;
» compass(z)
90
1
120
60
0.8
0.6
150
30
0.4
0.2
180
0
210
330
240
300
270
•
Gráficos especiais em 2D
– Comet (faz uma pequena animação)
» q=linspace(0,10*pi,200);
» y=q.*sin(q);
» comet(q,y)
•
Gráficos especiais em 2D
– contour
» r=-5:0.2:5;
» [X,Y]=meshgrid(r,r);
» Z=-0.5*X.^2 + X.*Y + Y.^2;
» cs=contour(X,Y,Z);
» clabel(cs)
5
20
30
4
3
10
2
1
-10
0
0
-1
-2
10
0
-3
20
-10
-4
-5
-5
30
-4
-3
-2
-1
0
1
2
3
4
5
•
Gráficos especiais em 2D
– quiver
» r=-2:0.2:2;
» [X,Y]=meshgrid(r,r);
» Z=-0.5*X.^2 + X.*Y + Y.^2;
» [dx,dy]=gradient(Z,.2,.2);
» quiver(X,Y,dx,dy,2);
2.5
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2.5
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
•
Gráficos especiais em 2D
– quiver
» r=-2:0.2:2;
» [X,Y]=meshgrid(r,r);
» Z=-0.5*X.^2 + X.*Y + Y.^2;
» pcolor(Z)
» axis('off')
» shading interp
•
Gráficos Múltiplos
subplot(m,n,p)
Dividi a janela em m x n sub-janelas, e plota
o gráfico na sub-janela p.
Aula 03
– Se vc quer fazer alguns gráficos e colocá-los
lado a lado (sem sobrepor gráficos), use o
comando “subplot”:
•
Plots 3D
plot3(x,y,z,’estilo-opções’)
Use agora o comando “zlabel”
Aula 03
– O comando básico para produzir uma curva
em 3 dimensões é:
•
Ângulo de visão
Aula 03
– view(azimute,elavação) –
onde o azimute é em
graus partir do eixo y
sendo o sentido antihorário o sentido positivo,
e a elevação em graus é o
ângulo medido a partir do
plano x-y.
– rotate3d on – mais versátil
e de fácil uso, você
mesmo manipula a melhor
visão.
•
Plotando superfícies
mesh(X,Y,Z)
surf(X,Y,Z)
– Utilize o comando “meshgrid” para gerar uma
grade de pontos quadrangular.
Aula 03
– Os comandos básicos para plotar uma
superfície são: mesh e surf.
•
Superfícies em 3D
– mesh e surf
>> x=linspace(-3,3,100);
>> [X,Y]=meshgrid(x,x);
>> Z=X.*Y.*(X.^2-Y.^2)./((X.^2+Y.^2));
>> mesh(X,Y,Z)
>> surf(X,Y,Z)
>> mesh(X,Y,Z)
•
Especiais em 3D
– fill3
» X=[0 0 0 0;1 1 -1 1;1 -1 -1 1];
» Y=[0 0 0 0; 4 4 4 4; 4 4 4 4];
» Z=[0 0 0 0; 1 1 -1 -1; -1 1 1 -1];
» fill3(X,Y,Z,rand(3,4))
» view(120,30)
1
0.5
0
-0.5
-1
-0.5
-1
0
0
1
2
0.5
3
4
1
•
Especiais em 3D
– contour3
» r=linspace(-3,3,50);
» [x,y]=meshgrid(r,r);
» z=-5./(1+x.^2+y.^2);
» contour3(x,y,z)
0
-1
-2
-3
-4
-5
2
0
-2
-3
-2
-1
0
1
2
3
•
Especiais em 3D
– contour3
» r=linspace(-3,3,50);
» [x,y]=meshgrid(r,r);
» z=-5./(1+x.^2+y.^2);
» contour3(x,y,z)
0
-1
-2
-3
-4
-5
2
0
-2
-3
-2
-1
0
1
2
3
•
Especiais em 3D
– surfc
» u=-5:0.2:5;
» [X,Y]=meshgrid(u,u);
» Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)/4);
» surfc(X,Y,Z)
» axis('off')
•
Especiais em 3D
– surfl
» u=-5:0.2:5;
» [X,Y]=meshgrid(u,u);
» Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)/4);
» surfl(X,Y,Z)
» shading interp
» colormap hot
•
Especiais em 3D
– meshz
» x=linspace(-3,3,50);
» y=x;
» [x,y]=meshgrid(x,y);
» z=-5./(1+x.^2+y.^2);
» meshz(x,y,z)
•
Especiais em 3D
– waterfall
» x=linspace(-3,3,50);
» y=x;
» [x,y]=meshgrid(x,y);
» z=-5./(1+x.^2+y.^2);
» waterfall(x,y,z)
» hidden off
0
-1
-2
-3
-4
-5
4
2
4
2
0
0
-2
-2
-4
-4
•
Especiais em 3D
– pie3
» pop=[3332;696;694;437;307];
» pie3(pop)
» title('população do mundo')
população do mundo
6%
8%
13%
13%
61%
•
Especiais em 3D
– stem3
» t=linspace(0,6*pi,200);
» x=t;
» y=t.*sin(t);
» z=exp(t/10)-1;
» stem3(x,y,z)
6
5
4
3
2
1
0
20
10
20
15
0
10
-10
5
-20
0
•
Especiais em 3D
– ribbon
» t=linspace(0,5*pi,100);
» y=sin(t);
» ribbon(t,y,0.1)
1
0.5
0
-0.5
-1
20
1.1
15
1.05
10
1
5
0.95
0
0.9
•
Especiais em 3D
– sphere
» sphere(20)
ou
» [x,y,z]=sphere(20);
» surf(x,y,z)
» axis('equal')
•
Especiais em 3D
– cylinder
» z=0:0.02:1;
» r=sin(3*pi*z)+2;
» cylinder(r)
•
Especiais em 3D
– slice
» v=[-3:0.2:3];
» [x,y,z]=meshgrid(v,v,v);
» f=(x.^2+y.^2-z.^2);
» xv=[-2 2.5];
» yv=2.5;
» zv=0;
» slice(x,y,z,f,xv,yv,zv)
» view(-30,30)
» xlabel('x')
» ylabel('y')
» zlabel('z')
» colorbar(‘horiz’)
•
Plotando informações volumétricas
– As funções disponíveis para visualização de
informação volumétrica são: “slice”,
“isosurface”, “isonormal”, “isocaps”,
“subvolume”, “reducevolume”, “smooth3”,
“reducepatch”. Veja helpdesk para mais
informações.
•
Plotando superfícies interpoladas
– Muitas vezes, nós temos alguma informação
em forma (x,y,z) e queremos ajustar uma
superfície a essa informação. Para isso
usamos o comando “griddata”.
[Xi,Yi,Zi]=griddata(x,y,z,xi,yi,‘método)
•
Plotando superfícies interpoladas
» xv=2*rand(1,100)-1;
» yv=2*rand(1,100)-1;
» zv=3./(1+xv.^2+yv.^2);
» stem3(xv,yv,zv)
3
2.5
2
1.5
1
0.5
0
1
0.5
1
0.5
0
0
-0.5
-0.5
-1
-1
•
Plotando superfícies interpoladas
» xi=linspace(-1,1,30);
» yi=xi;
» [xi,yi]=meshgrid(xi,yi);
» [Xi,Yi,Zi]=griddata(xv,yv,zv,xi,yi,'v4');
» surf(Xi,Yi,Zi)
•
Handle Graphics
– O que é um handle?
São números associados a todo objeto de uma
figura.
Hierarquia dos objetos gráficos:
•
Propriedade dos objetos
» h=plot(1:20)
h=
1.0056
» get(h)
Color = [0 0 1]
EraseMode = normal
LineStyle = LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [ (1 by 20) double array]
YData = [ (1 by 20) double array]
ZData = [] ...
•
Propriedade dos objetos
» h=plot(1:20)
h=
1.0056
» get(h)
Color = [0 0 1]
EraseMode = normal
LineStyle = LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [ (1 by 20) double array]
YData = [ (1 by 20) double array]
ZData = [] ...
•
Propriedade dos objetos
» h=plot(1:20)
h=
1.0056
» set(h,'Linewidth',2) %muda a espessura da linha
» set(h,'Color',[0 1 1]) %muda a cor da linha
•
Animação (Fazer um filme)
nframes = 36;
Frames = moviein(nframes);
angulo = linspace(0,360,36);
x=linspace(-3,3,100);
[X,Y]=meshgrid(x,x);
Z=X.*Y.*(X.^2-Y.^2)./((X.^2+Y.^2));
mesh(X,Y,Z)
for i=1:nframes
view(angulo(i),30)
Frames(:,i)=getframe;
end
movie(Frames,2)
Download

Apresentação