A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução ao MATLAB 5.3 para Hidrólogos

Apresentações semelhantes


Apresentação em tema: "Introdução ao MATLAB 5.3 para Hidrólogos"— Transcrição da apresentação:

1 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

2 Aula 03 Scripts Funções Linguagem de programação Gráficos 2D 3D
Animação

3 Aula 03 Scripts

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

5 Aula 03 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.

6

7 Aula 03 Executando o script no MATLAB
1 >> solvex det_A = 64 x = 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

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

9 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

10 Aula 03 Funções

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

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

13 function [rho,H,F] = motion(x,y,t);
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); As variáveis xt, yt e time devem ser definidas antes de executar o comando. >> [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 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.

14 >> [det_A,y] = solvex(1); >> det_A ans = 64 >> y
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 0.2344 1.6875

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

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

17 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

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

19 Linguagem de Programação
Aula 03 Linguagem de Programação

20 Aula 03 Linguagem de Programação
São usadas para controlar o fluxo das operações. Tipos: “for” e “while” – para “loops” “if-elseif-else” – estrutura condicional simples “switch-case-otherwise” – estrutura condicional avançada Todos esses controladores de fluxo devem terminar com “end”.

21 Aula 03 Linguagem de Programação
São usadas para controlar o fluxo das operações. Tipos: “for” e “while” – para “loops” “if-elseif-else” – estrutura condicional simples “switch-case-otherwise” – estrutura condicional avançada

22 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. % Exemplo for m=1:100 num = 1/(m+1) end for n = 100:-2:0, k=1/(exp(n)), end

23 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. % Exemplo num = 1; i = 1; while num<10000 num = 2^i; v = [i; num]; i = i + 1; end

24 Aula 03 Condicional simples – “if-elseif-else”
Cria blocos condicionais. % Exemplo i = 6; j = 21; if i > 5 k = i; elseif (i > 1) & (j == 20) k = 5*i + j else k = 1; end

25 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). Aula 03 % Exemplo 1 flag = 1; switch flag case 1 “1º bloco computacional” case 2 “2º bloco computacional” otherwise “último bloco computacional” end

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

27 Aula 03 Exemplos - break % 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)

28 Aula 03 Exemplos - error 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 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')

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

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

31 Arquivos de entrada e saída
Aula 03 Arquivos de entrada e saída

32 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

33 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

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

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

36 Aula 03 Exemplos – Ler um arquivo fid = fopen('temperatura.tab');
lixo=fscanf(fid,'%25c',[1 1]) lixo=fscanf(fid,'%20c',[1 1]) temp = fscanf(fid,'%i %f',[2 inf]) fclose(fid);

37 Aula 03 Gráficos

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

39 plot(xvalores,yvalores,’estilo-opções’)
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’)

40 Aula 03 Opções de estilo Cor 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

41 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

42 axis([xmin xmax ymin ymax])
Aula 03 Controle do eixo Você pode mudar os limites dos eixos com o comando “axis” axis([xmin xmax ymin ymax])

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

44 plot(x1,y1,‘estilo1’,x2,y2,‘estilo2’)
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’)

45 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 = t y3 = t-t3/3!+t5/5! Usando as funções xlabel, ylabel, axis, gtext, hold on, plot...

46 Aula 03 Exercício (solução) 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([ ]) Hold off

47 Aula 03 Gráficos especiais em 2D fplot » fplot('x.*sin(x)',[0 10*pi])

48 Aula 03 Gráficos especiais em 2D semilogx » t=linspace(0,2*pi,200);
» x=exp(-t); » y=t; » semilogx(x,y), grid

49 Aula 03 Gráficos especiais em 2D semilogy » t=linspace(0,2*pi,200);
» semilogy(t,exp(t)), grid

50 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

51 Aula 03 Gráficos especiais em 2D polar » t=linspace(0,2*pi,200);
» r=sqrt(abs(2*sin(5*t))); » polar(t,r)

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

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

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

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

56 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 = » hy1=get(Ax(1),'ylabel'); » hy2=get(Ax(2),'ylabel'); » set(hy1,'string','e^-x*sin(x)'); » set(hy2,'string','e^x');

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

58 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

59 Gráficos especiais em 2D
hist » y=randn(50,1); » hist(y)

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

61 Gráficos especiais em 2D
stem » t=linspace(0,2*pi,100); » f=exp(-0.2*t).*sin(t); » stem(t,f)

62 Gráficos especiais em 2D
compass » zx=cos(th); » zy=sin(th); » z=zx+i*zy; » compass(z)

63 Gráficos especiais em 2D
Comet (faz uma pequena animação) » q=linspace(0,10*pi,200); » y=q.*sin(q); » comet(q,y)

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

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

66 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

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

68 plot3(x,y,z,’estilo-opções’)
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”

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

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

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

72 Especiais em 3D fill3 » X=[0 0 0 0;1 1 -1 1;1 -1 -1 1];
» Y=[ ; ; ]; » Z=[ ; ; ]; » fill3(X,Y,Z,rand(3,4)) » view(120,30)

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

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

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

76 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

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

78 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

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

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

81 Especiais em 3D ribbon » t=linspace(0,5*pi,100); » y=sin(t);
» ribbon(t,y,0.1)

82 Especiais em 3D sphere » sphere(20) ou » [x,y,z]=sphere(20);
» surf(x,y,z) » axis('equal')

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

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

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

86 [Xi,Yi,Zi]=griddata(x,y,z,xi,yi,‘método)
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)

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

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

89 Handle Graphics O que é um handle?
São números associados a todo objeto de uma figura. Hierarquia dos objetos gráficos:

90 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 = [] ...

91 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 = [] ...

92 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

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


Carregar ppt "Introdução ao MATLAB 5.3 para Hidrólogos"

Apresentações semelhantes


Anúncios Google