Departamento de Matematica 10 de Mar co de 2012 (UBI) Programacao em Matlab 10 de Mar co de 2012 1 / 1 Introdu cao Introducao A utilizacao do Matlab apenas com a janela de comandos torna bastante difcil emendar erros e guardar instrucoes para repetir noutra sessao. Para resolver este inconveniente existem os scripts e funcoes. Sao cheiros de texto com extensao .m. (UBI) Programacao em Matlab 10 de Mar co de 2012 2 / 1 scripts Scripts (UBI) Programacao em Matlab 10 de Mar co de 2012 3 / 1 scripts Script les Script e um conjunto de comandos do MATLAB gravados num cheiro (com a extensao .m chamados m-les).
E equivalente a escrever todos os comandos na janela principal, so
que armazenado num arquivo. Para executar basta escrever o nome do arquivo (sem a extensao .m). Trabalha com variaveis globais (apresentadas no directorio de trabalho) (UBI) Programacao em Matlab 10 de Mar co de 2012 4 / 1 scripts Exemplo de um script (UBI) Programacao em Matlab 10 de Mar co de 2012 5 / 1 scripts Executar um script Para executar um script basta digitar o nome na janela de comandos. (UBI) Programacao em Matlab 10 de Mar co de 2012 6 / 1 scripts Cuidados que se deve ter NUNCA grave o script com o mesmo nome de uma variavel nele utilizada. O nome do arquivo script deve comecar por uma letra. Seja cuidadoso com os nomes das variaveis no script (todas essas variaveis sao gravadas no directorio de trabalho) (UBI) Programacao em Matlab 10 de Mar co de 2012 7 / 1 scripts Exerccios Construa um script que transforma um n umero x em graus, num n umero y em radianos. Faca um script que mostra na janela principal uma tabela de conversao de graus Celsius para graus Fahrenheit. ( Considere C=-40:5:100) Construa um script que: tra ca o graco da fun cao tan(x) a azul, no intervalo [, ]; representa a tracejado verde as assimptotas; marca com um circulo vermelho os zeros da funcao; insere as legendas e ttulo. (UBI) Programacao em Matlab 10 de Mar co de 2012 8 / 1 Fun coes Fun coes (UBI) Programacao em Matlab 10 de Mar co de 2012 9 / 1 Fun coes Function les Funcoes sao m-les contendo um conjunto de comandos do MATLAB, como um script, so que todas as variaveis sao locais e nao globais. Sao como programas ou subrotinas no Fortran. A 1 a linha do arquivo comeca denindo as variaveis de entrada e de sada, e o nome da fun cao. O nome da funcao deve ter o mesmo nome do arquivo a ser gravado. (UBI) Programacao em Matlab 10 de Marco de 2012 10 / 1 Fun coes Exemplo de uma funcao (UBI) Programacao em Matlab 10 de Marco de 2012 11 / 1 Fun coes Exemplo de uma funcao Para executar uma funcao existem varias opcoes. (UBI) Programacao em Matlab 10 de Marco de 2012 12 / 1 Fun coes Dicas Crie uma estrutura logica e pense na sequencia computacional antes de escrever o codigo. Escreva-a num papel!!! Dena as variaveis de entrada e sada. Traduza o que escreveu no papel para o MATLAB. Dena nomes logicos para as variaveis e fun coes. Escreva o maximo de comentarios possveis no codigo. Divida grandes blocos computacionais e escreva-os em funcoes separadas. Verique os erros e a sada com mensagens de erro e use o artifcio do ; para vericar os passos intermedios de calculo. (UBI) Programacao em Matlab 10 de Marco de 2012 13 / 1 Fun coes Cuidados a ter O termo de deni cao deve ser escrito com letra min uscula (function e nao Function) . Os comentarios comecam com %, podendo ser colocados em qualquer lugar. Todas as linhas com comentarios imediatamente apos a primeira linha sao mostradas no MATLAB help. Uma simples variavel de sada nao precisa ser fechada por parenteses rectos [ ]. O nome das variaveis de entrada e de sada declaradas na primeira linha sao variaveis locais. (UBI) Programacao em Matlab 10 de Marco de 2012 14 / 1 Fun coes Exerccios Construa uma funcao cuja entrada e um n umero x em graus, e devolve o seu valor em radianos. Faca uma funcao que dadas 2 matrizes calcule a soma e diferenca. Construa uma funcao que converte a pressao de atm para N/m 2 . (UBI) Programacao em Matlab 10 de Marco de 2012 15 / 1 Programacao Programa cao (UBI) Programacao em Matlab 10 de Marco de 2012 16 / 1 Programacao Programacao Conjunto de comandos usados para controlar o uxo das opera coes. Tipos: for e while - para ciclos. if-elseif-else- para condicoes simples. switch-case-otherwise - para condicoes mais complexas. break, return e error - para terminar opera coes. Cada um dos controladores de uxo deve terminar com end. (UBI) Programacao em Matlab 10 de Marco de 2012 17 / 1 Programacao Ciclo for Um for e usado para repetir uma operacao ou um grupo de opera coes para um n umero de vezes pre denido. (UBI) Programacao em Matlab 10 de Marco de 2012 18 / 1 Programacao Ciclo while Um while e usado para repetir uma operacao ou um grupo de opera coes para um n umero indenido de vezes enquanto que a condicao especicada seja satisfeita. (UBI) Programacao em Matlab 10 de Marco de 2012 19 / 1 Programacao Condicional if-elseif-else Cria blocos condicionais. Se a condi cao e verdadeira realiza o primeiro bloco de instru coes. Se a condi cao e falsa realiza o segundo bloco. Obs: Nao e necessario utilizar o comando completo. A instrucao elseif pode ser utilizada as vezes que for necessaria. (UBI) Programacao em Matlab 10 de Marco de 2012 20 / 1 Programacao Condicional switch-case-otherwise Cria blocos condicionais. Uma variavel e usada como um dispositivo de direccionamento (switch), onde cada valor dessa variavel direcciona para um caso (case). (UBI) Programacao em Matlab 10 de Marco de 2012 21 / 1 Programacao Operadores Relacionais <, <=, >, >=, ==, =. Comparam os elementos. O resultado e uma variavel booleana 1 ou 0. Logicos & ou and - conjuncao; | ou or - disjuncao; ou not - negacao; Devolvem uma variavel Booleana 1 ou 0. (UBI) Programacao em Matlab 10 de Marco de 2012 22 / 1 Programacao Comandos de paragem error(mensagem) dentro de uma fun cao ou script, sai da execucao da rotina e mostra uma mensagem de erro. return dentro de uma fun cao ou script, sai da execucao da rotina. (UBI) Programacao em Matlab 10 de Marco de 2012 23 / 1 Programacao Comandos de paragem break dentro de um for ou while, termina a execu cao do ciclo. (UBI) Programacao em Matlab 10 de Marco de 2012 24 / 1 Programacao Exerccios Faca um programa que verica se um n umero e primo. Um fornecedor faz o seguinte desconto num determinado produto: mais de 200 unidades 7%; de 100 a 200 uni. 5%; de 50 a 100 uni. 3%; menos de 50 unidades nao tem desconto. Escreva um programa que calcula o preco total, dado o n o . de unidades e o preco unitario. (UBI) Programacao em Matlab 10 de Marco de 2012 25 / 1 Escrita e leitura de arquivos Escrita e leitura de arquivos (UBI) Programacao em Matlab 10 de Marco de 2012 26 / 1 Escrita e leitura de arquivos Arquivos O MATLAB possui algumas funcoes para ler e escrever dados em arquivos do tipo binario ou ASCII formatados. As funcoes sao: fopen: abre um arquivo existente ou cria um novo arquivo fclose: fecha um arquivo aberto fwrite: escreve uma informacao binario para um arquivo fread: le informa cao binario num arquivo fscanf: le informa cao formatada num arquivo fprintf: escreve informacao formatada num arquivo (UBI) Programacao em Matlab 10 de Marco de 2012 27 / 1 Escrita e leitura de arquivos Formata cao de dados Formato Descricao %c Simples caracter %d Notacao decimal %e Notacao exponencial (usando emin usculo ) %E Notacao exponencial (usando emai usculo ) %f Notacao xando ponto %g O mais compactado de %e ou %f %o Notacao Octal %s Grupos de caracteres %x Notacao Hexadecimal (UBI) Programacao em Matlab 10 de Marco de 2012 28 / 1 Escrita e leitura de arquivos Exemplo de escrita de arquivo (UBI) Programacao em Matlab 10 de Marco de 2012 29 / 1 Escrita e leitura de arquivos Exemplo de leitura de arquivo (UBI) Programacao em Matlab 10 de Marco de 2012 30 / 1 Escrita e leitura de arquivos Exerccios Construa um programa que escreve num cheiro de texto uma tabela de conversao entre as unidades de temperatura Fahrenheit, Kelvin e Celsius. Crie um programa que gera aleatoriamente um conjunto de 100 elementos normalmente distribudos e os escreva num cheiro. Faca um programa que le o cheiro da alnea anterior, calcule a media dos dados e apresente um graco dos valores lidos. (UBI) Programacao em Matlab 10 de Marco de 2012 31 / 1 Gracos especiais Gracos especiais (UBI) Programacao em Matlab 10 de Marco de 2012 32 / 1 Gracos especiais fplot >>fplot(x.*sin(x),[0 10*pi]) (UBI) Programacao em Matlab 10 de Marco de 2012 33 / 1 Gracos especiais semilogy >> x=linspace(0,2*pi,200); >> y=exp(-x); >> semilogy(x,y) >> grid on (UBI) Programacao em Matlab 10 de Marco de 2012 34 / 1 Gracos especiais semilogx >> x=linspace(0,2*pi,200); >> y=log(2*x); >> semilogx(x,y) >> grid on (UBI) Programacao em Matlab 10 de Marco de 2012 35 / 1 Gracos especiais loglog >>t=linspace(0,2*pi,200); >>x=exp(t); >>y=100+exp(2*t); >>loglog(x,y); >>grid on (UBI) Programacao em Matlab 10 de Marco de 2012 36 / 1 Gracos especiais ll >>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) (UBI) Programacao em Matlab 10 de Marco de 2012 37 / 1 Gracos especiais errorbar >>x=0:0.1:2; >>aprx2=x-x.^3/6; >>er=aprx2-sin(x); >>errorbar(x,aprx2,er) (UBI) Programacao em Matlab 10 de Marco de 2012 38 / 1 Gracos especiais 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(Polulac~ao em Milh~oes) >>title(Populac~ao do Mundo (1992)) (UBI) Programacao em Matlab 10 de Marco de 2012 39 / 1 Gracos especiais plotyy >>x=1:0.1:10; >>y1=exp(-x).*sin(x); >>y2=exp(x); >>Ax=plotyy(x,y1,x,y2); >>hy1=get(Ax(1),ylabel); >>hy2=get(Ax(2),ylabel); >>set(hy1,string,e^-x*sin(x)); >>set(hy2,string,e^x); (UBI) Programacao em Matlab 10 de Marco de 2012 40 / 1 Gracos especiais 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) (UBI) Programacao em Matlab 10 de Marco de 2012 41 / 1 Gracos especiais stem >>t=linspace(0,2*pi,100); >>f=exp(-0.2*t).*sin(t); >>stem(t,f) (UBI) Programacao em Matlab 10 de Marco de 2012 42 / 1 Gracos especiais compass >>th=linspace(0,2*pi,11); >>zx=cos(th); >>zy=sin(th); >>z=zx+i*zy; >>compass(z) (UBI) Programacao em Matlab 10 de Marco de 2012 43 / 1 Gracos especiais comet >>q=linspace(0,10*pi,20000); >>y=q.*sin(q); >>comet(q,y) (UBI) Programacao em Matlab 10 de Marco de 2012 44 / 1 Gracos especiais 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); (UBI) Programacao em Matlab 10 de Marco de 2012 45 / 1 Gracos especiais 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) (UBI) Programacao em Matlab 10 de Marco de 2012 46 / 1 Gracos especiais pie3 >>pop=[3332;696;694;437;307]; >>pie3(pop) >>title(populac~ao do mundo) (UBI) Programacao em Matlab 10 de Marco de 2012 47 / 1 Gracos especiais stem3 >>t=linspace(0,6*pi,200); >>x=t; >>y=t.*sin(t); >>z=exp(t/10)-1; >>stem3(x,y,z) (UBI) Programacao em Matlab 10 de Marco de 2012 48 / 1 Gracos especiais ribbon >>t=linspace(0,5*pi,100); >>y=sin(t); >>ribbon(t,y,0.1) (UBI) Programacao em Matlab 10 de Marco de 2012 49 / 1 Gracos especiais sphere >>sphere(20) ou >>[x,y,z]=sphere(20); >>surf(x,y,z) >>axis(equal) (UBI) Programacao em Matlab 10 de Marco de 2012 50 / 1 Gracos especiais cylinder >>z=0:0.02:1; >>r=sin(3*pi*z)+2; >>cylinder(r) (UBI) Programacao em Matlab 10 de Marco de 2012 51 / 1 Gracos especiais slice >>v=[0,1]; >>[x,y,z]=meshgrid(v,v,v); >>slice(x,y,z,z,[0,1],[0,1],[0,1]) >>axis([-.1,1.1,-.1,1.1,-.1,1.1]) (UBI) Programacao em Matlab 10 de Marco de 2012 52 / 1 Gracos especiais Animacao >>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) (UBI) Programacao em Matlab 10 de Marco de 2012 53 / 1 Gracos especiais Animacao (UBI) Programacao em Matlab 10 de Marco de 2012 54 / 1