introdução ao matlab 5.3 para hidrólogos aula 03 – scripts, funções e gráficos programando e...

93
Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto Fragoso Júnior Christopher Freire Souza

Upload: internet

Post on 22-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Introdução ao MATLAB 5.3 para Hidrólogos

Aula 03 – Scripts, funções e GráficosProgramando e plotando no MATLAB

Porto Alegre, setembro de 2005

Carlos Ruberto Fragoso Júnior

Christopher Freire Souza

Page 2: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03• Scripts

• Funções

• Linguagem de programação

• Gráficos

• 2D

• 3D

• Animação

Page 3: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

Scripts

Page 4: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Scripts files – 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)

Page 5: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplo de um script

Vamos escrever um script para resolver o seguinte sistema linear de equações:

5

3

2

x

x

x

r31r2

1r263

rr25

3

2

1

A.x=b, onde A depende de uma variável r.

Page 6: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto
Page 7: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Executando o script no MATLAB

>> r = 1

r =

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

Page 8: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

Page 9: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Exercício 1A 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

Page 10: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

Funções

Page 11: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Dicas para criação de funções – 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.

Page 12: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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.

Page 13: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Para executar uma funçãoConsidere 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.

Page 14: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

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

Page 15: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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”).

Page 16: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Funções (function files) – 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.

Page 17: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Macetes – 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

Page 18: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Exercício 3Todos 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π/4E calcule as coordenadas x e y em função do

raio r.

Page 19: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

Linguagem de Programação

Page 20: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Linguagem de Programação – São usadas para controlar o fluxo das operações.– Tipos:

(a) “for” e “while” – para “loops”(b) “if-elseif-else” – estrutura condicional simples(c) “switch-case-otherwise” – estrutura condicional

avançada

– Todos esses controladores de fluxo devem terminar com “end”.

Page 21: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Linguagem de Programação – São usadas para controlar o fluxo das

operações.– Tipos:

(a) “for” e “while” – para “loops”(b) “if-elseif-else” – estrutura condicional simples(c) “switch-case-otherwise” – estrutura

condicional avançada

Page 22: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Fazendo “loops” – “for” – Um “for” é usado para repetir uma operação ou um

grupo de operações para um número fixo de vezes.

% Exemplofor m=1:100 num = 1/(m+1)end

% Exemplofor n = 100:-2:0, k=1/(exp(n)), end

Page 23: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Condicional simples – “if-elseif-else”– 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.

% Exemplonum = 1; i = 1;while num<10000 num = 2^i; v = [i; num]; i = i + 1;end

Page 24: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Condicional simples – “if-elseif-else”– Cria blocos condicionais.

% Exemploi = 6; j = 21;if i > 5 k = i;elseif (i > 1) & (j == 20) k = 5*i + jelse k = 1;end

Page 25: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Condicional avançado – “switch-case-otherwise”– Cria blocos condicionais. Uma variável é

usada como um dispositivo de direcionamento (switch), onde cada valor dessa variável direciona para um caso (case).

% Exemplo 1flag = 1;switch flagcase 1 “1º bloco computacional”case 2 “2º bloco computacional”otherwise “último bloco computacional”end

Page 26: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Macetes – 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.

Page 27: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplos - break

% Exemplo 1u = [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

Page 28: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplos - error

function c = crossprod(a,b)% Cálcula o prod. Escalar de dois vetoresif nargin ~= 2 % se não for 2 variáveis de entrada

error('São necessárias duas variáveis de entrada') endif 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

Page 29: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplos - return

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

Page 30: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Outros macetes – 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)”).

Page 31: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

Arquivos de entrada e saída

Page 32: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Entrada e Saída – 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:

– 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

Page 33: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

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

• Formatação de arquivos

Page 34: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Exercício 1Gerar e escrever em um arquivo ASCII uma

tabela de conversão de temperatura de Fahrenheit para Celsius. Sabendo que:

F = -40:5:100C = (F-32)*5/9

Exercício 2 Ler os dados de temperatura do arquivo gerado

em um matriz de temperatura.

Page 35: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplos – Escrever em um arquivo

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);

Page 36: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exemplos – Ler um arquivo

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);

Page 37: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

Gráficos

Page 38: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos – 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.

Page 39: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Plots 2D – O comando básico e talvez o mais proveitoso

comando para produzir um gráfico em 2 dimensões é:

plot(xvalores,yvalores,’estilo-opções’)

Page 40: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Opções de estilo

Cor linha Descriçãoy (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

Page 41: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Outras opções do comando “axis” – 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

Page 42: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Controle do eixo – Você pode mudar os limites dos eixos com o

comando “axis”

axis([xmin xmax ymin ymax])

Page 43: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• 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’, ...)

Page 44: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Sobreposição de gráficos – Usando o comando plot

– Usando o comando “hold on”

plot(x1,y1,‘estilo1’,x2,y2,‘estilo2’)

plot(x1,y1,‘estilo1’)hold on

plot(x2,y2, ‘estilo2’)

Page 45: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exercício – 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 = ty3 = t-t3/3!+t5/5!

Usando as funções xlabel, ylabel, axis, gtext, hold on, plot...

Page 46: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Exercício (solução)

x=linspace(0,2*pi,100);y1=sin(x);plot(x,y1)hold ony2=x;plot(x,y2,‘--’)y3=x-(x.^3)/6+(x.^5)/120;plot(x,y3,‘o’)axis([0 5 -1 5])Hold off

Page 47: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – fplot

0 5 10 15 20 25 30-30

-20

-10

0

10

20

30

» fplot('x.*sin(x)',[0 10*pi])

Page 48: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – semilogx

» t=linspace(0,2*pi,200);

» x=exp(-t);

» y=t;

» semilogx(x,y), grid

10-3

10-2

10-1

100

0

1

2

3

4

5

6

7

Page 49: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – semilogy

» t=linspace(0,2*pi,200);

» semilogy(t,exp(t)), grid

0 1 2 3 4 5 6 710

0

101

102

103

Page 50: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – loglog

» t=linspace(0,2*pi,200);

» x=exp(t);

» y=100+exp(2*t);

» loglog(x,y), grid

100

101

102

103

102

103

104

105

106

Page 51: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – polar

» t=linspace(0,2*pi,200);» r=sqrt(abs(2*sin(5*t)));» polar(t,r)

0.5

1

1.5

30

210

60

240

90

270

120

300

150

330

180 0

Page 52: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – fill

» 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.5 -1 -0.5 0 0.5 1 1.5

-1

-0.5

0

0.5

1

Page 53: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• 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])

0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

Page 54: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos especiais em 2D – errorbar

» x=0:0.1:2;» aprx2=x-x.^3/6;» er=aprx2-sin(x);» errorbar(x,aprx2,er)

-0.5 0 0.5 1 1.5 2 2.50

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 55: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)» for i=1:5,gtext(cont(i,:));end» xlabel('Polulação em Milhões')» title('População do Mundo (1992)')

0 500 1000 1500 2000 2500 3000 3500

1

2

3

4

5

Asia

Europa

Africa

America do Norte

America do Sul

Polulação em Milhões

População do Mundo (1992)

Page 56: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – plotyy

» x=1:0.1:10;» y1=exp(-x).*sin(x);» y2=exp(x);» Ax=plotyy(x,y1,x,y2)

Ax =

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'); 1 2 3 4 5 6 7 8 9 10

-0.1

0

0.1

0.2

0.3

0.4

e- x*si

n(x)

1 2 3 4 5 6 7 8 9 100

0.5

1

1.5

2

2.5x 10

4

ex

Page 57: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – area

» 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')

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

x

sin(

x)./

x

Page 58: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)» for i=1:5,gtext(cont(i,:));end

61%

13%

13%

8%

6%

Asia Europa

Africa

America do Norte

America do Sul

Page 59: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – hist

» y=randn(50,1);» hist(y)

-2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.50

1

2

3

4

5

6

7

8

9

Page 60: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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])

0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

Page 61: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – stem

» t=linspace(0,2*pi,100);» f=exp(-0.2*t).*sin(t);» stem(t,f)

0 1 2 3 4 5 6 7-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 62: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – compass

» zx=cos(th);» zy=sin(th);» z=zx+i*zy;» compass(z)

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

Page 63: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Gráficos especiais em 2D – Comet (faz uma pequena animação)

» q=linspace(0,10*pi,200);» y=q.*sin(q);» comet(q,y)

Page 64: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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 -4 -3 -2 -1 0 1 2 3 4 5-5

-4

-3

-2

-1

0

1

2

3

4

5

-10

-10

0

0

10

10

20

20

30

30

Page 65: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

Page 66: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

Page 67: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Gráficos Múltiplos – Se vc quer fazer alguns gráficos e colocá-los

lado a lado (sem sobrepor gráficos), use o comando “subplot”:

subplot(m,n,p)Dividi a janela em m x n sub-janelas, e plota

o gráfico na sub-janela p.

Page 68: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Plots 3D – O comando básico para produzir uma curva

em 3 dimensões é:

plot3(x,y,z,’estilo-opções’)

Use agora o comando “zlabel”

Page 69: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Ângulo de visão – view(azimute,elavação) –

onde o azimute é em graus partir do eixo y sendo o sentido anti-horá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.

Page 70: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

Aula 03

• Plotando superfícies – Os comandos básicos para plotar uma

superfície são: mesh e surf.

– Utilize o comando “meshgrid” para gerar uma grade de pontos quadrangular.

mesh(X,Y,Z)surf(X,Y,Z)

Page 71: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

Page 72: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

01

23

4

-1

-0.5

0

0.5

1

Page 73: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

-3-2

-10

12

3

-2

0

2

-5

-4

-3

-2

-1

0

Page 74: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

-3-2

-10

12

3

-2

0

2

-5

-4

-3

-2

-1

0

Page 75: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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')

Page 76: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

Page 77: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

Page 78: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

-4-2

02

4

-4

-2

0

2

4-5

-4

-3

-2

-1

0

Page 79: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Especiais em 3D – pie3

» pop=[3332;696;694;437;307];» pie3(pop)» title('população do mundo')

13%

13%

população do mundo

8%6%

61%

Page 80: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

05

1015

20

-20

-10

0

10

200

1

2

3

4

5

6

Page 81: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Especiais em 3D – ribbon

» t=linspace(0,5*pi,100);» y=sin(t);» ribbon(t,y,0.1)

0.90.95

11.05

1.1

0

5

10

15

20-1

-0.5

0

0.5

1

Page 82: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Especiais em 3D – sphere

» sphere(20)

ou

» [x,y,z]=sphere(20);» surf(x,y,z)» axis('equal')

Page 83: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Especiais em 3D – cylinder

» z=0:0.02:1;» r=sin(3*pi*z)+2;» cylinder(r)

Page 84: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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’)

Page 85: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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.

Page 86: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

Page 87: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

-1-0.5

00.5

1

-1

-0.5

0

0.5

10

0.5

1

1.5

2

2.5

3

Page 88: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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)

Page 89: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Handle Graphics

– O que é um handle?

São números associados a todo objeto de uma figura.

Hierarquia dos objetos gráficos:

Page 90: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Propriedade dos objetos» h=plot(1:20)

h =

1.0056

» get(h)Color = [0 0 1]EraseMode = normalLineStyle = -LineWidth = [0.5]Marker = noneMarkerSize = [6]MarkerEdgeColor = autoMarkerFaceColor = noneXData = [ (1 by 20) double array]YData = [ (1 by 20) double array]ZData = [] ...

Page 91: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• Propriedade dos objetos» h=plot(1:20)

h =

1.0056

» get(h)Color = [0 0 1]EraseMode = normalLineStyle = -LineWidth = [0.5]Marker = noneMarkerSize = [6]MarkerEdgeColor = autoMarkerFaceColor = noneXData = [ (1 by 20) double array]YData = [ (1 by 20) double array]ZData = [] ...

Page 92: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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

Page 93: Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Porto Alegre, setembro de 2005 Carlos Ruberto

• 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;endmovie(Frames,2)