15.04.2013 Views

Tutorial do MATLAB - MIT

Tutorial do MATLAB - MIT

Tutorial do MATLAB - MIT

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Tutorial</strong> <strong>do</strong> <strong>MATLAB</strong><br />

São necessários alguns coman<strong>do</strong>s básicos para usar o programa <strong>MATLAB</strong>. Este tutorial<br />

resumi<strong>do</strong> descreve esses coman<strong>do</strong>s. Você precisa criar vetores e matrizes, alterá-los e operar<br />

com eles. To<strong>do</strong>s eles são coman<strong>do</strong>s curtos e de alto nível, pois o <strong>MATLAB</strong> trabalha<br />

constantemente com matrizes. Acredito que vocês vão gostar <strong>do</strong> poder que esse software<br />

fornece ao usuário para trabalhar com álgebra linear por meio de várias instruções resumidas:<br />

criar E<br />

E = eye(3)<br />

criar u<br />

u = E(:,1)<br />

1<br />

mudar E<br />

E(3,1) = 5<br />

multiplicar Eu<br />

υ = E ∗ u<br />

A palavra “eye” representa a matriz identidade. A submatriz u = E(:,1) seleciona a coluna 1. A<br />

instrução E(3,1) = 5 reconfigura a entrada (3,1) para 5. O coman<strong>do</strong> E ∗ u multiplica as matrizes<br />

E e u. To<strong>do</strong>s esses coman<strong>do</strong>s se repetem em nossa lista a seguir. Veja um exemplo de inversão<br />

de uma matriz para solucionar um sistema linear:<br />

criar A<br />

A = ones(3)+ eye(3)<br />

criar b<br />

b=A(:,3)<br />

inverter A<br />

C = inv(A)<br />

resolver Ax = b<br />

x = A\b ou<br />

x = C ∗ b<br />

A matriz com to<strong>do</strong>s os ones foi acrescentada ao eye(3) e b é sua terceira coluna. A seguir, inv(A)<br />

produz a matriz inversa (normalmente em decimais; para frações, use format rat). O sistema<br />

Ax = b é resolvi<strong>do</strong> por x = inv(A) ∗ b, que é a forma mais lenta. O coman<strong>do</strong> barra invertida<br />

x = A\b usa a eliminação gaussiana se A for quadra<strong>do</strong> e nunca calcula a matriz inversa. Quan<strong>do</strong><br />

o la<strong>do</strong> direito b se iguala à terceira coluna de A, a solução x deverá ser [0 0 1]´. (O transpose<br />

symbol ´ transforma x em um vetor coluna). A seguir, A ∗ x seleciona a terceira coluna de A, e<br />

teremos Ax = b.<br />

Alguns comentários. O símbolo <strong>do</strong> comentário é %:<br />

% Os símbolos a e A são diferentes: o <strong>MATLAB</strong> diferencia maiúsculas de minúsculas.<br />

% Digite help slash para uma descrição de como usar o símbolo de barra invertida. A<br />

palavra help pode ser seguida de um símbolo <strong>do</strong> <strong>MATLAB</strong> ou <strong>do</strong> nome <strong>do</strong> coman<strong>do</strong> ou<br />

<strong>do</strong> nome <strong>do</strong> arquivo-M.


Obs.: O nome <strong>do</strong> coman<strong>do</strong> está em letra maiúscula na descrição fornecida pela<br />

Ajuda, mas deve ser digita<strong>do</strong> em letra minúscula ao usar o programa. E a barra<br />

invertida A\b é diferente quan<strong>do</strong> A não for quadra<strong>do</strong>.<br />

% Para exibir to<strong>do</strong>s os 16 dígitos, digite format long. O format short normal fornece 4<br />

dígitos após o decimal.<br />

% Um ponto e vírgula após um coman<strong>do</strong> evita a exibição <strong>do</strong> resulta<strong>do</strong>.<br />

A = ones(3); não exibirá a matriz identidade 3 × 3.<br />

% Use o cursor seta para cima para voltar aos coman<strong>do</strong>s anteriores.<br />

Como inserir um vetor coluna ou vetor linha<br />

tem uma linha com três componentes (matriz 1 × 3)<br />

tem três linhas separadas por ponto e vírgula (matriz 3 × 1)<br />

ou é o vetor u transposto<br />

gera o vetor linha = [2 3 4 5] com passos unitários<br />

assume passo 2 para fornecer u = [1 3 5 7]<br />

Como inserir matriz (uma linha de cada vez)<br />

A = [1 2 3; 4 5 6] tem duas linhas (sempre um ponto e vírgula entre as linhas)<br />

A = [1 2 3 também produz a matriz A mas é mais difícil de digitar<br />

4 5 6]<br />

B = [1 2 3; 4 5 6]´ é a transposta de A. Por isso, A T é A´ no <strong>MATLAB</strong><br />

Como criar matrizes especiais<br />

diag produz a matriz diagonal com vetor υ na diagonal<br />

toeplitz<br />

toeplitz<br />

ones<br />

coluna<br />

fornece a matriz diagonal-constante simétrica com como primeira linha e primeira<br />

fornece a matriz simétrica com diagonal-constante com como primeira coluna<br />

e como primeira linha<br />

fornece uma matriz n x n de um´s<br />

2


zeros(n) fornece matriz n x n somente de zeros<br />

eye (n) fornece matriz identidade n x n<br />

rand(n) fornece matriz n x n com entradas aleatórias entre 0 e 1 (distribuição uniforme)<br />

randn(n) fornece matriz n x n com entradas normalmente distribuídas (média 0 e variância 1)<br />

one s(m, n) zeros(m,n) rand(m,n) fornecem matrizes m x n<br />

ones(size (A)) zeros(size (A)) eye(size A)) fornecem matrizes com o mesmo formato de A<br />

Como alterar entradas em uma dada matriz A<br />

A(3,2) = 7 redefine a entrada (3,2) para igualar a 7<br />

A(3, :) = redefine a terceira linha para igualar<br />

A(:,2) = redefine a segunda coluna para igualar a<br />

O símbolo <strong>do</strong>is pontos : significa to<strong>do</strong>s (todas as colunas ou todas as linhas)<br />

A([2 3], :) = A([3 2], :) permuta as filas 2 e 3 de A<br />

Como criar submatrizes de uma matriz A de m x n<br />

A(i, j) retorna a entrada (i, j) da matriz A (escalar = matriz 1 x 1)<br />

A(i,: ) retorna a linha i de A (como vetor linha)<br />

A(:, j) retorna a coluna j de A (como vetor coluna)<br />

A(2 : 4,3 : 7) retorna as linhas de 2 a 4 e as colunas de 3 a 7 (como matriz 3 x 5)<br />

A([2 4],:) retorna linhas 2 e 4 e todas as colunas (como matriz 2 x n )<br />

A(;) retorna uma coluna longa formada pelas colunas de A ( matriz mn x 1)<br />

triu(A) define todas as entradas abaixo da diagonal principal como- zero (triangular superior)<br />

tril(A) define todas as entradas acima da diagonal principal como zero (triangular inferior)<br />

Inversão e multiplicação matricial<br />

A ∗ B fornece a matriz produto AB (se A pode multiplicar B)<br />

A. ∗ B fornece o produto entrada por entrada (se dimensão(A) = dimensão (B)<br />

inv(A) fornece A -1 se A for quadrada e puder for inversível<br />

pinv(A) fornece a pseu<strong>do</strong>-inversade A<br />

A\B fornece inv(A) ∗ B se inv(A) existir: backlash é a divisão à esquerda<br />

x = A\b fornece a solução para Ax = b se inv(A) existir<br />

Veja help slash quan<strong>do</strong> A for uma matriz retangular!<br />

3


Números e matrizes associadas a A<br />

det(A) é odeterminante (se A for uma matriz quadrada)<br />

rank(A) é o posto (número de pivôs = dimensão <strong>do</strong> espaço da linha e <strong>do</strong> espaço da coluna)<br />

size(A) é o par de números [m n]<br />

trace(A) é o traço = soma das entradas diagonais = soma <strong>do</strong>s autovalores<br />

null(A) é a matriz cujas colunas n - r são uma base ortogonal para o espaço nulo de A<br />

orth(A) é a matriz cujas colunas r são uma base ortogonal para o espaço de coluna de A<br />

Exemplos<br />

E = eye(4);E(2,1) = -3 cria uma matriz elementar de eliminação 4 x 4<br />

E ∗ A subtrai 3 vezes a linha 1 de A da linha 2.<br />

B = [A b] cria a matriz aumentada com b como coluna extra<br />

E = eye(3); P = E([2 1 3],:) cria uma matriz de permutação<br />

Observe que triu(A) + tril(A) – diag(diag(A)) se iguala a A<br />

Arquivos-M construí<strong>do</strong>s para fatorações de matriz (to<strong>do</strong>s são<br />

importantes!)<br />

[L, U, P] = lu(A) fornece três matrizes com PA = LU<br />

e – eig (A) é um vetor que contém os autovalores de A<br />

[S,E] = eig (A) fornece uma matriz diagonal E de autovalores e uma matriz S de autovetores<br />

com AS = SE. Se A não for diagonalizável (poucos autovetores) então S não será<br />

inversível.<br />

[Q, R] = qr(A) fornece uma matriz Q ortogonal m x n e uma R triangular m x n com A = QR<br />

Crian<strong>do</strong> arquivos-M<br />

Os arquivos-m são arquivos de texto terminan<strong>do</strong> com a extensão .m, os quais o <strong>MATLAB</strong> usa<br />

para funções e roteiros. Um roteiro é uma seqüência de coman<strong>do</strong>s que podem ser executa<strong>do</strong>s<br />

com freqüência e podem ser coloca<strong>do</strong>s em um arquivo-m de mo<strong>do</strong> que os coman<strong>do</strong>s não<br />

precisem ser digita<strong>do</strong>s novamente. Os demos <strong>do</strong> <strong>MATLAB</strong> são exemplos desses roteiros. Um<br />

exemplo é o demo chama<strong>do</strong> house. A maioria das funções <strong>do</strong> <strong>MATLAB</strong> é, na verdade,<br />

constituída de arquivos-m que podem ser visualiza<strong>do</strong>s escreven<strong>do</strong>-se type xxx onde xxx é o<br />

nome da função.<br />

4


Para escrever seus próprios roteiros ou funções, você precisa criar um novo arquivo de texto<br />

com qualquer nome de sua preferência, desde que termine com .m, para permitir que o<br />

<strong>MATLAB</strong> reconheça o arquivo. Arquivos de texto podem ser cria<strong>do</strong>s, edita<strong>do</strong>s e salvos com<br />

qualquer editor de texto como emacs, EZ ou vi. Um arquivo de texto é, simplesmente, uma lista<br />

de coman<strong>do</strong>s <strong>MATLAB</strong>. Quan<strong>do</strong> se digita o nome <strong>do</strong> arquivo no prompt <strong>do</strong> <strong>MATLAB</strong>, o<br />

conteú<strong>do</strong> <strong>do</strong> arquivo será executa<strong>do</strong>. Para que um arquivo-m seja uma função, é preciso iniciar<br />

com a palavra function seguida pelas variáveis de saída entre colchetes, o nome da função e as<br />

variáveis de entrada.<br />

Exemplos<br />

function [C] = mult(A)<br />

r = rank(A);<br />

C = A´∗ A;<br />

Salve os coman<strong>do</strong>s acima em um arquivo de texto nomea<strong>do</strong> como mult.m . Essa função toma<br />

uma matriz A e retorna o produto matricial C. A variável r não é devolvida por que não foi<br />

incluída como uma variável de saída. Os coman<strong>do</strong>s são segui<strong>do</strong>s por ; de mo<strong>do</strong> que não serão<br />

impressos na janela <strong>do</strong> <strong>MATLAB</strong> toda vez que forem executa<strong>do</strong>s. Isso é útil quan<strong>do</strong> se trata de<br />

grandes matrizes. Eis um outro exemplo:<br />

function [V, D, r] = properties (A)<br />

% Esta função encontra rank, eigenvalues e eigenvectors de A<br />

[m,n] =size(A);<br />

se m = = n<br />

[V,D] =eig(A);<br />

r=rank(A);<br />

else<br />

disp (´Error: A matriz deve ser quadrada´);<br />

end<br />

Aqui a função toma a matriz A como entrada e retorna duas matrizes e o posto (rank) como<br />

resulta<strong>do</strong>. O % é usa<strong>do</strong> como comentário. A função verifica se a matriz de entrada é quadrada e<br />

a seguir encontra o posto, os autovalores e os autovetores de uma matriz A. Digitan<strong>do</strong>-se<br />

properties(A) o retorno será somente o primeiro resulta<strong>do</strong>, V, a matriz de autovetores. Para obter<br />

os três resulta<strong>do</strong>s, você precisará digitar [V, D, r}=properties(A).<br />

5


Manten<strong>do</strong> um diário de seu trabalho<br />

O coman<strong>do</strong> diary (‘file’) instrui o <strong>MATLAB</strong> a registrar tu<strong>do</strong> o que é feito na janela <strong>do</strong><br />

<strong>MATLAB</strong> e a salvar os resulta<strong>do</strong>s no arquivo denomina<strong>do</strong> ‘file’. Ao digitar diary on ou diary<br />

off você alterna o registro. Arquivos de diários antigos podem ser visualiza<strong>do</strong>s por meio de um<br />

editor de texto, ou impresso usan<strong>do</strong>-se lpr em Unix. No <strong>MATLAB</strong>, eles podem ser visualiza<strong>do</strong>s<br />

com o coman<strong>do</strong> type file.<br />

Salvan<strong>do</strong> suas variáveis e matrizes<br />

O coman<strong>do</strong> diary salva os coman<strong>do</strong>s que você digitou, assim como o resulta<strong>do</strong> <strong>do</strong> <strong>MATLAB</strong>,<br />

mas não salva o conteú<strong>do</strong> de suas variáveis e matrizes. Essas variáveis podem ser listadas pelo<br />

coman<strong>do</strong> whos que também lista os tamanhos das matrizes. O coman<strong>do</strong> save ‘xxx’ salvará as<br />

matrizes e todas as variáveis listadas pelo coman<strong>do</strong> whos no arquivo chama<strong>do</strong> xxx. O<br />

<strong>MATLAB</strong> rotula esses arquivos com a extensão .mat em vez de .m, que são roteiros ou funções.<br />

Os arquivos xxx.mat podem ser li<strong>do</strong>s pelo <strong>MATLAB</strong> mais tarde digitan<strong>do</strong>-se load xxx.<br />

Gráficos<br />

O coman<strong>do</strong> mais simples é plot (x, y) que utiliza <strong>do</strong>is vetores x e y <strong>do</strong> mesmo comprimento. Os<br />

pontos ( xi , yi) serão impressos e conecta<strong>do</strong>s por linhas sólidas.<br />

Se não houver vetor x o <strong>MATLAB</strong> assumirá que x(i)=i. Então plot (y) tem espaçamento<br />

igual no eixo-x: os pontos são (i, y(i)).<br />

O tipo e a cor da linha entre os pontos poderão ser altera<strong>do</strong>s por um terceiro argumento. O<br />

default sem argumento é uma linha sólida negra “-“. Use help plot para muitas opções, entre as<br />

quais indicamos algumas:<br />

<strong>MATLAB</strong> 5: plot (x, y,´r + :´) imprime em r = vermelho com + para pontos e linha pontilhada<br />

<strong>MATLAB</strong> 4: plot (x, y,´- -´) é uma linha em traços e plot (x, y,´.´) é uma linha pontilhada<br />

Você pode omitir as linhas e imprimir somente pontos discretos de várias maneiras:<br />

plot (x, y, ´o´) fornece círculos. Outras opções são ´+´ ou ´x´ ou ´∗´<br />

Para <strong>do</strong>is gráficos nos mesmos eixos use plot (x, y, X, Y). Substitua plot por loglog ou<br />

semilogy ou semilogx para alterar um ou ambos os eixos para a escala de logaritmos.<br />

6


O coman<strong>do</strong> axis ([a b c d]) colocará o gráfico em uma escala que se ajuste ao retângulo a ≤ x ≤<br />

b, c ≤ y ≤ d. Para dar nome ao gráfico ou rotular o eixo-x ou o eixo-y coloque o nome deseja<strong>do</strong><br />

entre aspas, como nesses exemplos:<br />

title (‘altura <strong>do</strong> satélite’) xlabel (‘tempo em segun<strong>do</strong>s’) ylabel (‘altura em metros’)<br />

O coman<strong>do</strong> hold mantém o gráfico atual quan<strong>do</strong> você imprimir um novo gráfico. Ao<br />

repetir hold, você limpará a tela. Para imprimir, ou salvar a janela de gráfico em um arquivo,<br />

veja help print ou use<br />

print -Pprintername print –d filename<br />

7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!