iniciação ao matlab

Post on 25-Jan-2016

31 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Eugênio Silva E Adriano Cruz. Iniciação ao MatLab. Introdução. Introdução. MatLab – Matrix Laboratory (Universidades de Stanford e Novo México - 1970) originalmente escrito para trabalhar com matrizes e vetores evoluiu ao longo do anos até se tornar uma ferramenta de ampla abrangência. - PowerPoint PPT Presentation

TRANSCRIPT

Iniciação ao MatLab

Eugênio SilvaE

Adriano Cruz

Introdução

Introdução• MatLab – Matrix Laboratory (Universidades

de Stanford e Novo México - 1970)

• originalmente escrito para trabalhar com matrizes e vetores

• evoluiu ao longo do anos até se tornar uma

ferramenta de ampla abrangência.

Introdução• o MatLab é uma poderosa ferramenta

matemática e uma linguagem de programação de alto-desempenho para a computação científica

• integra cálculos matemáticos, visualização e programação em um ambiente interativo

• é de fácil utilização

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.

• MatLab

>> a = [1 2 3; 4 5 6; 7 8 9]a = 1 2 3 4 5 6 7 8 9

>> b = a’b = 1 4 7 2 5 8 3 6 9

Introdução

• o elemento de dados básico é uma matriz

• matrizes e vetores são manipulados com mais facilidade e rapidez que em programas escritos em linguagens não-interativas como Pascal, C ou Fortran

Introdução

• Linha de comandos – é possível usar o matlab através de comandos emitidos a partir de linha de comandos

• scripts – arquivos que contém comandos matlab

Introdução

• toolboxes - bibliotecas de funções que permitem a resolução de classes particulares de problemas

• simulink - acessório que acrescenta uma interface de diagramas de blocos e recursos de simulação real aos demais recursos numéricos, gráficos e de linguagem

Aplicações

• matemática e computação

• desenvolvimento de algoritmos

• modelagem, simulação e prototipação

• análise de dados, exploração e visualização

• gráficos científicos em duas e três dimensões

Help• On line

• Linha de comandos - – help– help elfun– help abs

• demos - – demo

Comandos

Operações Elementares

>> 4 + 6 – 2

ans =

8

>> 4 * 2 + 6 * 5 + 2 * 9

ans =

56

>> 25 / 5 + 5 \ 25

ans =

10

>> 3 ^ 2 * 2 ^ 2 + 2

ans =

38

Prioridades• Parênteses• Potência

– 3 * 2 ^ 3 = 24• * e /

– Resolvendo da esquerda para direita– 8 / 4 * 3 = 6

• + e -– Resolvendo da esquerda para direita

Números• Inteiros: 32, -12345• Reais: 3.1789, -23.0, 1.0e-3• Complexos: 3.2 – 23.5i • Inf: Infinito (resultado da divisão por 0)• NaN: Not a number 0/0• Contas são feitas com 15 dígitos

aproximadamente• Comando format controla impressão dos

resultados.

Definição de Variáveis>> a = 10a =

10

>> b = 20; O ‘;’ evita que o resultado apareça na tela.

>> c = 1 + 2i ou c = 1 + 2jc =

1.0000 – 2.0000i

Nomes de Variáveis• Combinações de letras e números,

começando com letra

– n1, ab, temp• Nomes especiais

– eps = 2.220446049250313e-16 (o menor número tal que 1 + eps é indistinguível de 1)

– pi

– i, k

Variáveis Pré-definidas• ans: váriavel padrão usada para resultados

de expressões do tipo– >> 3 + 5

• pi

• i ou j: igual a raiz quadrada de -1

• realmax: maior número real utilizável

– 1.797693134862316e+308

• realmin: menor número real utilizável

– 2.225073858507201e-308

Variáveis Pré-definidas

• nargin: número de argumentos de entrada

• nargout: número de argumentos de saída

Funções Elementares• abs(x) valor absoluto de x

• sin(x) seno de x

• asin(x) arc seno x

• cos(x) co-seno x

• acos(x) arc co-sen x

• tan(x) tangente x

• exp(x) e elevado a x

Funções Elementares• log(x) log inverso de exp(x)

• log10(x) log base 10 de x

• gcd(x,y) mdc de x e y

• lcm(x,y) mmc entre x e y

• max(x) máximo de x

• min(x) mínimo de x

• inv(x) matriz inversa de x

• ...

Espaço de Trabalho>> who lista variáveis na memória

>> whos lista variáveis detalhadamente

>> clear apaga variáveis da memória

>> save salva variáveis em arq .mat

>> load carrega variáveis de um .mat

>> format formato de apresentação dos resultados

Comandos do SO>> dir ou ls arquivos do diretório

>> cd ou pwd diretório corrente

>> cd . . diretório acima do corrente

>> cd \ diretório raiz

>> delete <arquivo> apaga arquivo

>> edit <arquivo> abre arquivo para edição

>> type <arquivo> mostra o conteúdo do arquivo

>> quit ou exit sai do ambiente

Vetores

Vetores em linha>> x = [ 1 3 5 ];

>> lenght(x)

ans =

3

>> y = [ 3 4 5 ];

>> x + y

ans =

4 7 10

>> z = 3 * y

ans =

9 12 15

Vetores>> x = [ 1 3 5 ];

>> v1 = [ 3 4 5 6];

>> x + v1

??? Error using ==> plus

Matrix dimensions must agree.

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)

Gerando vetores• linspace(x1,x2) gera um vetor linha com 100 pontos

igualmente espaçados.

• linspace(x1,x2,n) gera vetor com n pontos entre x1 e x2

>>linspace(0,pi,11)

Gerando vetores

• a : b : c gera vetor começando em a, incrementando por b, até chegar em c. Não gera além 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 começando 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 0.9425 1.2566

• x(7:end) = 1.8850 2.1991 2.5133 2.8274 3.1416

• x(3:-1:1) = 0.6283 0.3142 0

• x(2:2:7) = 0.3142 0.9425 1.5708

Manipulando vetores, matrizesx = 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

Manipulando vetores, matrizes• A = [1 2 3; 4 5 6; 7 8 9];

• A(3,3) = 9

• A(2, 2:3) = 5 6

• A(3,:) = 7 8 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]

Operações Especiais>>eye(linhas,colunas)

Cria matriz identidade

>> det(m)

Determinante de m

>> zeros(n1,n2,n3,...)

Matriz de zeros

>> inv(m)

Inversa de m

>> ones(n1,n2,...)

Matriz de uns

>> m’

Transposta de m

>> rand (n1,n2,...)

Matriz de rand entre 0 e 1.0

Matrizes

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

matriz(10) ou matriz(2,3)

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

Dimensões de Vetores e Matrizes

whos lista as variáveis e suas dimensões

s = size(A) retorna o número de linhas e colunas de A

[x,y] = size(A) x contém o núm de linhas e y o de colunas

x = size(A,1) retorna o número de linhas de A

y = size(A,2) retorna o número de colunas de A

n = length(A) retorna max(size(A))

Operações com Vetores e Matrizes

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

adição a escalar a + c = [a1 + c ... an + c]

multiplicação por escalar a * c = [a1* c ... an* c]

soma de vetores a + b = [a1 + b1 ... an + bn]

multiplicação de vetores a .* b = [a1 *b1 ... an *bn]

Operações com Vetores e Matrizes

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

Divisão vetores (a/b) a ./ b = [a1 /b1 ... an /bn]

Divisão vetores (b/a) a .\ b = [a1\b1 ... an\bn]

Potenciação vetorial 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

1 1 1 1• x * y' % scalar product

4• sqrt( x * x') %Comprimento vetor

5.4722

Mais exemplos: resolução de sistemas de equações

• 2x1- x2 = 1

• X1 - 2x2 + x3 = 0

• - x2 + 2x3 = 1

• Ax = b; x = A-1b; x = A \ b

Mais exemplos: resolução de sistemas de equações

• A = [ 2 -1 0; 1 -2 1; 0 -1 2];

• b = [1; 0; 1]• Em notação matricial Ax = b• x = A-1b;• X = inv(A) * b;• x = A \ b;

Gráficos

Gráficos Bidimensionais

>> x = linspace(0, 2 * pi, 30);

>> y = sin(x);

>> z = cos(x);

>> plot(x,y,x,z)

Títulos, Rótulos 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);

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

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)

>> plot(x,z,’r*’)

Hold• Comando plot limpa a janela do gráfico

antes de desenhar o novo gráfico• Isto não é conveniente se desejarmos

adicionar outros gráficos no futuro• Usar hold para evitar limpeza da janela• plot(x,y,'w-'), hold on• plot(x,y,'gx'), hold off• hold off não limpa a janela (usar clf)

Subplots• A janela do gráfico é dividida em uma

matriz m x n de pequenas janelas.

• As janelas são contadas entre 1 e m x n

• Cada subfigura é tratada como uma figura podendo ter mais de uma curva, estilos, legendas, cores etc

Subplotsx = 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

Gráficos Bidimensionais

>> x = -2.9 : 0.2 : 2.9;

>> y = randn(5000,1);

>> hist(y,x)

Textos Formatados• Possível aumentar ou diminuir fontes• Alguns comandos latex podem ser

usados• É possível obter os valores de qualquer

propriedade através do “handle” da figura

• handle = plot(x,y);• get (handle, 'markersize');

Controlando os eixos• Uma vez que um gráfico foi criado é

possível mudar a excursão 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

Gráficos Tridimensionais

>> t = 0 : pi / 50 : 10 * pi;

>> plot3(sin(t),cos(t),t);

>> title(‘hélice’)

>> xlabel(‘sen(t)’)

>> ylabel(‘cos(t)’)

>> zlabel(‘t’)

>> grid

Gráficos 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');

Gráficos Tridimensionais

O mesmo com surf

O mesmo com surfl

Gráficos Tridimensionais

>> surf(peaks)

Scripts

Arquivos M (Scripts)

• Armazenam uma sequência de comandos em um arquivo texto que é executado a partir do prompt

• Úteis quando o número de comandos a serem executados é grande, ou caso seja necessário alterar os valores das variáveis e re-executar alguns comandos

• Devem ter a extensão .m

Scripts em Matlab• Scripts não aceitam e não retornam

argumentos. • Scripts podem alterar as variáveis do espaço

de trabalho (workspace) atual. • Scripts podem conter comandos que

interagem com o usuário e/ou arquivos. • Use scripts para:

– Automatizar a execução de uma seqüência 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 são os resultados da execução dos comandos.

• echo on faz com que os comandos apareçam antes da execução.

• echo off faz com que os comandos deixem de aparecer.

Alguns Comandos e Funções

Estrutura Condicional – if

>> if expressão_1

comandos_1;

elseif expressão_2

comandos_2;

else

comandos_3;

end

Operadores Relacionais e Lógicos

< menor que

<= menor ou igual

> maior que

>= maior ou igual

= igual

~= diferente

& e

| ou

~ não

Funções Relacionais e Lógicas

xor(x,y) ou exclusivo

ischar(x) 1 se x é um vetor de caracteres

isequal(x,y) 1 se x e y são iguais

isempty(x) 1 se x é vazio

ismember(x,y)

1 se os elementos de x pertencem a y

isstruct(x) 1 se x é uma estrutura

Estrutura Condicional – switch - case

>> switch expressão

case teste_expressão_1

comandos_1

case teste_expressão_2

comandos_2

otherwise

comandos_3

end

Laços de Repetição – for / while

>> for x = vetor

comandos;

end

>> while expressão

comandos;

end

Laços de Repetição

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

Laços de Repetição

Otimização de Código

• o laço de repetição

for i = 0:999 x(i+1) = sin(2*pi*i/100); end

• pode ser substituído por

x = sin(2*pi*[0:999]/100);

Funções dos Arquivos M

disp(x) Mostra resultado sem identificar variável

echo controla a exibição dos comandos

input solicita ao usuário a entrada

keyboard transfere o controle para o teclado

pause(n) suspende execução por n segundos

pause suspende até que tecla seja pressionada

Análise de Dadoscov(x) matriz de covariância

min(x) componente mínima

max(x) componente máxima

mean(x) média

rand(x) núm. aleatórios uniformemente distrib

var(x) variância

std(x) desvio padrão

sum(x) soma dos elementos da coluna

Funções criadas pelos usuários

Funções em Matlab

• Uma função em Matlab é um arquivo de texto.

• Arquivos de funções devem ter um nome igual ao nome da função.

• Um conjunto de funções e scripts pode ser agrupado em um único diretório. O conjunto é chamado de toolbox.

• Toolboxes extendem as capacidades do Matlab

Funções criadas pelo usuário

• a partir da segunda vez a execução de uma função é mais rápida que da primeira

• as linhas de comentário que antecedem a primeira linha sem comentário aparecem quando se pede ajuda

Arquivos M de funções

• variáveis criadas dentro de uma função permanecem apenas no espaço de trabalho da função

• funções podem compartilhar variáveis com outras funções desde que sejam declaradas como globais

• arquivos M de funções podem conter mais de uma função, a função primária e as sub-funções

Funções em Matlabfunction [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% Saída:% d: distancia entre p1 e p2% Uso:% d = distPontos(p1, p2)% Autor:% Adriano Cruz% Data:% 2010/03/02d = sqrt((p1(1) - p2(2))^2 + (p1(2) - p2(2))^2);

Funções 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

• Considere o arquivo

1 12 43 94 165 25

Arquivos Formatados

• Será armazenado em um vetor como

1 1 2 4 3 9 4 16 5 25

Arquivos Formatados

• Novamente Considere o arquivo 1 12 43 94 165 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.0000000.000000 0.0000001.000000 1.0000002.000000 4.0000003.000000 9.000000

Extras

Temporização

• tic: começa a contar o tempo.

• toc: termina de contar o tempo.

Temporização

• tic: começa a contar o tempo.

• toc: termina de contar o tempo.

Matrizes Celulares

• são matrizes cujos elementos são células

• qualquer célula da matriz pode conter qualquer tipo de dado (matrizes numéricas, 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] [2.0000+ 3.0000i]

'um texto' [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] [2.0000+ 3.0000i]

'um texto' [1x7 double]

Matrizes Celulares

>> cellplot(A);

Estruturas• são objetos que contêm “recipientes de

dados” com nomes diferentes• esses recipientes são 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 = ‘João 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 Usuário (versão do estudante), Makron Books, 1997.

• Matsumoto, Élia Yathie; Matlab 6 - Fundamentos de Programação, Editora Érica, 2001.

Demonstrações

matrices/graphs and matrices

matrices/matrix manipulation

visualization/vibration movie

visualization/visualizing sound

gallery/knot

gallery/slosh

gallery/logo

games/sliding puzzle

Temporização

• tic: começa a contar o tempo.

• toc: termina de contar o tempo.

top related