Você está na página 1de 18

Iniciao ao MatLab

Introduo
Eugnio Silva
E Adriano Cruz

Introduo
MatLab Matrix Laboratory (Universidades de Stanford e Novo Mxico - 1970) originalmente escrito para trabalhar com matrizes e vetores evoluiu ao longo do anos at se tornar uma ferramenta de ampla abrangncia.

Introduo
o MatLab uma poderosa ferramenta matemtica e uma linguagem de programao de alto-desempenho para a computao cientfica integra clculos matemticos, visualizao e programao em um ambiente interativo de fcil utilizao

Exemplo transpor uma matriz


Pascal
var a, b : array [1..3, 1..3] of integer; i, j : integer; begin ... for i = 1 to 3 for j = 1 to 3 b(j,i) := a(i,j); end; end; end.

Introduo
o elemento de dados bsico uma matriz

MatLab
>> a = [1 2 3; 4 5 6; 7 8 9] a= 123 456 789 >> b = a b= 1 4 7 2 5 8 3 6 9

matrizes e vetores so manipulados com mais facilidade e rapidez que em programas escritos em linguagens no-interativas como Pascal, C ou Fortran

Introduo
Linha de comandos possvel usar o matlab atravs de comandos emitidos a partir de linha de comandos scripts arquivos que contm comandos matlab

Introduo
toolboxes - bibliotecas de funes que permitem a resoluo de classes particulares de problemas simulink - acessrio que acrescenta uma interface de diagramas de blocos e recursos de simulao real aos demais recursos numricos, grficos e de linguagem

Aplicaes
matemtica e computao desenvolvimento de algoritmos modelagem, simulao e prototipao anlise de dados, explorao e visualizao grficos cientficos em duas e trs dimenses

Help
On line Linha de comandos help help elfun help abs demos demo

Operaes Elementares
>> 4 + 6 2 ans = >> 25 / 5 + 5 \ 25 ans = 8 >> 4 * 2 + 6 * 5 + 2 * 9 ans = 56 10 >> 3 ^ 2 * 2 ^ 2 + 2 ans = 38

Comandos

Prioridades
Parnteses Potncia 3 * 2 ^ 3 = 24 *e/ Resolvendo da esquerda para direita 8/4*3=6 +e Resolvendo da esquerda para direita

Nmeros
Inteiros: 32, -12345 Reais: 3.1789, -23.0, 1.0e-3 Complexos: 3.2 23.5i Inf: Infinito (resultado da diviso por 0) NaN: Not a number 0/0 Contas so feitas com 15 dgitos aproximadamente Comando format controla impresso dos resultados.

Definio de Variveis
>> a = 10 a= 10 >> b = 20; O ; evita que o resultado aparea na tela. >> c = 1 + 2i ou c = 1 + 2j c= 1.0000 2.0000i

Nomes de Variveis
Combinaes de letras e nmeros, comeando com letra n1, ab, temp Nomes especiais eps = 2.220446049250313e-16 (o menor nmero tal que 1 + eps indistinguvel de 1) pi i, k

Variveis Pr-definidas
ans: vriavel padro usada para resultados de expresses do tipo
>> 3 + 5

Variveis Pr-definidas
nargin: nmero de argumentos de entrada nargout: nmero de argumentos de sada

pi i ou j: igual a raiz quadrada de -1 realmax: maior nmero real utilizvel 1.797693134862316e+308 realmin: menor nmero real utilizvel 2.225073858507201e-308

Funes Elementares
abs(x) sin(x) asin(x) cos(x) acos(x) tan(x) exp(x) valor absoluto de x seno de x arc seno x co-seno x arc co-sen x tangente x e elevado a x

Funes Elementares
log(x) log10(x) gcd(x,y) lcm(x,y) max(x) min(x) inv(x) ... log inverso de exp(x) log base 10 de x mdc de x e y mmc entre x e y mximo de x mnimo de x matriz inversa de x

Espao de Trabalho
>> who >> whos >> clear >> save >> load lista variveis na memria lista variveis detalhadamente apaga variveis da memria salva variveis em arq .mat carrega variveis de um .mat

Comandos do SO
>> dir ou ls >> cd ou pwd >> cd . . >> cd \ >> delete <arquivo> >> edit <arquivo> >> type <arquivo> >> quit ou exit arquivos do diretrio diretrio corrente diretrio acima do corrente diretrio raiz apaga arquivo abre arquivo para edio mostra o contedo do arquivo sai do ambiente

>> format formato de apresentao dos resultados

Vetores em linha
>> x = [ 1 3 5 ]; >> lenght(x) ans = 3 >> y = [ 3 4 5 ]; >> x + y ans = 4 7 >> z = 3 * y ans = 9 12

Vetores

10

15

Vetores
>> x = [ 1 3 5 ]; >> v1 = [ 3 4 5 6]; >> x + v1

Gerando vetores
>> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1] .* pi ou >> x = (0:0.1:1).* pi ou >> x = linspace(0,pi,11) >> y = sin(x)

??? Error using ==> plus Matrix dimensions must agree.

Gerando vetores
linspace(x1,x2) gera um vetor linha com 100 pontos igualmente espaados. linspace(x1,x2,n) gera vetor com n pontos entre x1 e x2 >>linspace(0,pi,11)

Gerando vetores
a:b:c gera vetor comeando em a, incrementando por b, at chegar em c. No gera alm de c. >> 0:0.1:1 ans = 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 a : b gera vetor comeando em a at chegar em b incrementando por 1

Manipulando vetores
x = (0:0.1:1)*pi x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416 x(6) = 1.5708 x(1:5) = 0 0.3142 0.6283 2.1991 0.9425 2.5133 0 1.5708 1.2566 2.8274 x(7:end) = 1.8850 3.1416 x(2:2:7) = 0.3142

Manipulando vetores, matrizes


x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416 x([8 2 9 1]) = 2.1991 0.3142 2.5133 0 z = x[(2:5) 4 5 7] = 0.3142 0.6283 0.9425 1.2566 4.0000 5.0000 7.0000 w = [ x y ] %vetor linha k = [ x; y ] % matriz com duas linhas

x(3:-1:1) = 0.6283 0.3142 0.9425

Manipulando vetores, matrizes


A = [1 2 3; 4 5 6; 7 8 9]; A(3,3) = 9 A(2, 2:3) = 5 A(3,:) = 7 8 6 9 % : todas as colunas

Manipulando vetores, matrizes


B = A(3:-1:1, : ) B = [7 8 9; 4 5 6; 1 2 3] C = [A B( : , [1 3])] C = [1 2 3 7 9; 4 5 6 4 6; 7 8 9 1 3] B(:,2) = [ ] B = [7 9; 4 6; 1 3] B = A(:,[2 2 2 2]) B = [2 2 2 2; 5 5 5 5; 8 8 8]

Operaes Especiais
>>eye(linhas,colunas) Cria matriz identidade >> zeros(n1,n2,n3,...) Matriz de zeros >> ones(n1,n2,...) Matriz de uns >> rand (n1,n2,...) Matriz de rand entre 0 e 1.0 >> det(m) Determinante de m >> inv(m) Inversa de m >> m Transposta de m

Matrizes
1 2 3 4 5 6 7 8

matriz(10) ou matriz(2,3) 9 10 11 12 13 14 15 16

Busca de Sub-Matrizes
>> x = -3:3 x= -3 -2 -1 0 1 2 3 >> k = find(abs(x) > 1) k= 1 2 6 7 >> y = x(k) -3 -2 2 3 >> A= [1 2 3; 4 5 6; 7 8 9] A=1 2 3 4 5 6 7 8 9 >> [ i , j ] = find(A > 5) i=3 j=1 3 2 2 3 3 3

Dimenses de Vetores e Matrizes


whos s = size(A) lista as variveis e suas dimenses retorna o nmero de linhas e colunas de A

[x,y] = size(A) x contm o nm de linhas e y o de colunas x = size(A,1) y = size(A,2) n = length(A) retorna o nmero de linhas de A retorna o nmero de colunas de A retorna max(size(A))

Operaes com Vetores e Matrizes


a = [a1 a2 ... an], b = [b1 b2 ... bn], c = <um escalar> adio a escalar multiplicao por escalar soma de vetores multiplicao de vetores a + c = [a1 + c ... an + c] a * c = [a1* c ... an* c] a + b = [a1 + b1 ... an + bn] a .* b = [a1 *b1 ... an *bn]

Operaes com Vetores e Matrizes


a = [a1 a2 ... an], b = [b1 b2 ... bn], c = <um escalar>

Diviso vetores (a/b) Diviso vetores (b/a) Potenciao vetorial

a ./ b = [a1 /b1 ... an /bn] a .\ b = [a1\b1 ... an\bn] c.^a = [c^a1 ... c^an]

Alguns exemplos
x = [ 1 2 3 4], y = [ 1 1/2 1/3 1/4]; x .* y % dot product 1111 x * y' % scalar product 4 sqrt( x * x') %Comprimento vetor 5.4722

Mais exemplos: resoluo de sistemas de equaes


2x1 X1 Ax = b; x2 2x2 + x3 x2 + 2x3 x = A-1b; = = = x 1 0 1 = A \ b

Mais exemplos: resoluo de sistemas de equaes


A = [ 2 -1 0; 1 -2 1; 0 -1 2]; b = [1; 0; 1] Em notao matricial Ax = b x = A-1b; X = inv(A) * b; x = A \ b;

Grficos

Grficos Bidimensionais
>> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> plot(x,y,x,z)

Ttulos, Rtulos e Grids


>> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> plot(x,y,x,z); >> title('Grafico de y = sen(x)'); >> xlabel('Eixo x'); >> ylabel('Seno(x)');

Legendas
>> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> plot(x,y,x,z);

Linhas: Estilos e Cores


>> x = linspace(0, 2 * pi, 30); >> y = sin(x); >> z = cos(x); >> subplot(2,1,1) >> plot(x,y,go) >> subplot(2,1,2)

>> legend('curva sen', 'curva cos');

>> plot(x,z,r*)

Hold
Comando plot limpa a janela do grfico antes de desenhar o novo grfico Isto no conveniente se desejarmos adicionar outros grficos no futuro Usar hold para evitar limpeza da janela plot(x,y,'w-'), hold on plot(x,y,'gx'), hold off hold off no limpa a janela (usar clf)

Subplots
A janela do grfico dividida em uma matriz m x n de pequenas janelas. As janelas so contadas entre 1 e m x n Cada subfigura tratada como uma figura podendo ter mais de uma curva, estilos, legendas, cores etc

Subplots
x = linspace(0,2*pi,30); y1 = sin(x); y2 = sin(2*x); y3 = sin(3*x); y4 = sin(4*x); subplot(221), plot(x,y1), legend('y = sen(x)'); subplot(222), plot(x,y2), legend('y = sen(2*x)'); subplot(223), plot(x,y2), legend('y = sen(3*x)'); subplot(224), plot(x,y4), legend('y = sen(4*x)');

Subplots

Grficos Bidimensionais
>> x = -2.9 : 0.2 : 2.9; >> y = randn(5000,1); >> hist(y,x)

Textos Formatados
Possvel aumentar ou diminuir fontes Alguns comandos latex podem ser usados possvel obter os valores de qualquer propriedade atravs do handle da figura handle = plot(x,y); get (handle, 'markersize');

Controlando os eixos
Uma vez que um grfico foi criado possvel mudar a excurso dos valores x e y mostrados na figura. clf, N=100; h=1/N; x = 0:h:1; y = sin(3*pi*x), plot(x,y); axis([-0.5 1.5 -1.2 1.2]), grid;

Controlando os eixos

Grficos Tridimensionais
>> t = 0 : pi / 50 : 10 * pi; >> plot3(sin(t),cos(t),t); >> title(hlice) >> xlabel(sen(t)) >> ylabel(cos(t)) >> zlabel(t) >> grid

Grficos Tridimensionais
%z = f(x,y) x = -0.5*pi:0.1:0.5*pi; y = x; % minusculas [X Y] = meshgrid(x,y); Z = sin(2*X)+sin(3*Y); % maiusculas mesh(X,Y,Z); title('Ex de graf 3D');

Grficos Tridimensionais

O mesmo com surf

O mesmo com surfl

Grficos Tridimensionais
>> surf(peaks)

Arquivos M (Scripts)
Armazenam uma sequncia de comandos em um arquivo texto que executado a partir do prompt teis quando o nmero de comandos a serem executados grande, ou caso seja necessrio alterar os valores das variveis e re-executar alguns comandos Devem ter a extenso .m

Scripts

Scripts em Matlab
Scripts no aceitam e no retornam argumentos. Scripts podem alterar as variveis do espao de trabalho (workspace) atual. Scripts podem conter comandos que interagem com o usurio e/ou arquivos. Use scripts para:
Automatizar a execuo de uma seqncia de comandos frequentemente utilizados Documentar os passos de um processo

Scripts em Matlab
%Exemplo de script % clear all; x = 0:0.01:2*pi; eixos = [0 2*pi -2 +2]; y1 = sin(x); y2 = cos(x); y3 = tan(x); y4 = zeros(size(x)); plot (x,y1,x,y2,x,y3,x,y4,'k'); axis (eixos); legend('Seno', 'Coseno','Tangente'); title('Graficos de seno, coseno e tangente.'); xlabel('Angulos'); ylabel('Seno, coseno e tangente');

Scripts em Matlab

Scripts
Para executar um script armazenado em um arquivo digite o nome do arquivo sem o .m O que aparece na tela so os resultados da execuo dos comandos. echo on faz com que os comandos apaream antes da execuo. echo off faz com que os comandos deixem de aparecer.

Estrutura Condicional if Alguns Comandos e Funes


>> if expresso_1 comandos_1; elseif expresso_2 comandos_2; else comandos_3; end

Operadores Relacionais e Lgicos


< <= > >= = ~= menor que menor ou igual maior que maior ou igual igual diferente

Funes Relacionais e Lgicas


xor(x,y) ou exclusivo 1 se x um vetor de caracteres 1 se x e y so iguais 1 se x vazio

& | ~

e ou no

ischar(x) isequal(x,y) isempty(x)

ismember(x,y 1 se os elementos de x ) pertencem a y isstruct(x) 1 se x uma estrutura

Estrutura Condicional switch - case


>> switch expresso case teste_expresso_1 comandos_1 case teste_expresso_2 comandos_2 otherwise comandos_3 end

Laos de Repetio for / while


>> for x = vetor comandos; end >> while expresso comandos; end

Laos de Repetio
clf; x = -2:0.1:2; hold on; for n = 1:8 plot(x,n*x .*x ); end hold off;

Laos de Repetio

Otimizao de Cdigo
o lao de repetio for i = 0:999 x(i+1) = sin(2*pi*i/100); end

Funes dos Arquivos M


disp(x) echo input Mostra resultado varivel sem identificar

controla a exibio dos comandos solicita ao usurio a entrada

keyboard transfere o controle para o teclado pode ser substitudo por x = sin(2*pi*[0:999]/100); pause(n) suspende execuo por n segundos pause suspende at pressionada que tecla seja

Anlise de Dados
cov(x)

matriz de covarincia componente mnima componente mxima nm. aleatrios uniformemente distrib varincia desvio padro soma dos elementos da coluna

min(x) max(x) rand(x) var(x) std(x) sum(x)

mean(x) mdia

Funes criadas pelos usurios

Funes em Matlab
Uma funo em Matlab um arquivo de texto. Arquivos de funes devem ter um nome igual ao nome da funo. Um conjunto de funes e scripts pode ser agrupado em um nico diretrio. O conjunto chamado de toolbox. Toolboxes extendem as capacidades do Matlab

Funes criadas pelo usurio


a partir da segunda vez a execuo de uma funo mais rpida que da primeira as linhas de comentrio que antecedem a primeira linha sem comentrio aparecem quando se pede ajuda

Arquivos M de funes
variveis criadas dentro de uma funo permanecem apenas no espao de trabalho da funo funes podem compartilhar variveis com outras funes desde que sejam declaradas como globais arquivos M de funes podem conter mais de uma funo, a funo primria e as sub-funes

Funes em Matlab
function [d] = distPontos(p1,p2) % % Calcula a distancia entre dois pontos % p1 = [x1 y1] e p2 = [x2 y2] % em um espaco bi-dimensional % Entradas: % p1, p2: dois pontos % Sada: % d: distancia entre p1 e p2 % Uso: % d = distPontos(p1, p2) % Autor: % Adriano Cruz % Data: % 2010/03/02 d = sqrt((p1(1) - p2(2))^2 + (p1(2) - p2(2))^2);

Funes em Matlab
p1 = [ 1 1 ]; p2 = [ 0 0 ]; d = distPontos(p1, p2)

Arquivos

Arquivos Formatados
Parecido com C Lembrar que matlab anda no sentido da coluna. Ao ler dados para uma matriz ir preencher no sentido da coluna Ao escrever dados de uma matriz ir ler no sentido da coluna

Arquivos Formatados
(1,1) = (1) (1,2) = (5) (1,3) = (9) (1,4)=(13) (2,1) = (2) (2,2) = (6) (2,3)=(10) (2,4)=(14) (3,1) = (3) (3,2) = (7) (3,3)=(11) (3,4)=(15) (4,1) = (4) (4,2) = (8) (4,3)=(12) (4,4)=(16

Arquivos Formatados
1 2 3 4 5 Considere o arquivo 1 4 9 16 25

Arquivos Formatados
Ser armazenado em um vetor como

1 1 2 4 3 9 4 16 5 25

Arquivos Formatados
1 2 3 4 5 Novamente Considere o arquivo 1 4 9 16 25

Arquivos Formatados Leitura


fid=fopen('dadosin.txt', 'r'); a = fscanf(fid, '%d'); fclose(fid); a=reshape(a,2,size(a,1)/2)';

Arquivos Formatados Escrita


x = -3:1:3; y = x.^2; fid = fopen('dados.txt', 'w'); temp = [ x; y ] fprintf(fid,'%f %f\n', temp); fclose(fid);

Arquivos Formatados Escrita


-3.000000 9.000000 -2.000000 4.000000 -1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 2.000000 4.000000 3.000000 9.000000

Temporizao
Extras
tic: comea a contar o tempo.

toc: termina de contar o tempo.

Temporizao
tic: comea a contar o tempo.

Matrizes Celulares
so matrizes cujos elementos so clulas

toc: termina de contar o tempo.

qualquer clula da matriz pode conter qualquer tipo de dado (matrizes numricas, texto, matrizes celulares, etc.)

Matrizes Celulares
>> A(1,1) = { [1 2 3; 4 5 6; 7 8 9] }; >> A(1,2) = { 2 + 3i }; >> A(2,1) = { um texto } >> A(2,2) = {12 : -2 : 0}; >>A = [3x3 double] 'um texto' [2.0000+ 3.0000i] [1x7 double]

Matrizes Celulares
>> A{1,1} = [1 2 3; 4 5 6; 7 8 9]; >> A{1,2} = 2 + 3i; >> A{2,1} = um texto >> A{2,2} = 12 : -2 : 0; >>A = [3x3 double] 'um texto' [2.0000+ 3.0000i] [1x7 double]

Matrizes Celulares
>> cellplot(A);

Estruturas
so objetos que contm recipientes de dados com nomes diferentes esses recipientes so chamados de campos os campos podem conter qualquer tipo de dado ao se referir aos campos de uma estrutura usa-se seus nomes em vez de usar ndices estruturas podem conter outras estruturas

Estruturas
>> cliente.nome = Joo da Silva; >> cliente.custo = 86.50; >> cliente.teste.A1C = [6.3 6.8 7.1 7.0 6.7]; >> cliente.teste.CHC = [2.8 3.4 3.6 4.1 3.5];

Ajuda On-Line
help helpwin helpdesk lookfor demo arquivos de ajuda

Para Saber Mais


Hanselman, Duane; Littlefield, Bruce; Matlab 5 Guia do Usurio (verso do estudante), Makron Books, 1997. Matsumoto, lia Yathie; Matlab 6 Fundamentos de Programao, Editora rica, 2001.

Demonstraes
matrices/graphs and matrices matrices/matrix manipulation visualization/vibration movie visualization/visualizing sound gallery/knot gallery/slosh gallery/logo games/sliding puzzle

Temporizao
tic: comea a contar o tempo.

toc: termina de contar o tempo.

Você também pode gostar