Você está na página 1de 54

Programacao em Matlab

Universidade da Beira Interior


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

Você também pode gostar