Documente Academic
Documente Profesional
Documente Cultură
Índice Analítico
1. Matlab básico.........................................................................................2
1.1 Introdução..........................................................................................2
1.2 Operações matriciais..........................................................................8
1.3 Operações em Array........................................................................10
1.4 Manipulação matricial e vetorial......................................................13
1.5 Análise de dados..............................................................................18
1.6 Funções matriciais............................................................................20
1.7 Polinômios e processamento de sinais.............................................21
1.8 Funções de funções..........................................................................24
1.9 Gráficos............................................................................................28
1.10 Controles de fluxo............................................................................38
1.11 Arquivos M......................................................................................40
1.12 Arquivos de disco............................................................................47
1.13 O depurador do Matlab....................................................................49
1. Matlab básico
1.1 Introdução
2
Tutorial do Matlab 3
Exemplo:
» A = [ 1 2 3; 4 5 6; 7 8 9 ]
Resulta:
A=
1 2 3
4 5 6
7 8 9
Elementos de uma matriz podem ser quaisquer expressões Matlab. Por exemplo:
Resulta:
x=
-1.3000 1.7321 4.8000
» x(5) = abs(x(1))
Resulta:
x=
-1.3000 1.7321 4.8000 0 1.3000
» r = [ 10 11 12 ];
» A = [ A; r ]
A=
1 2 3
4 5 6
7 8 9
10 11 12
Você pode extrair sub-matrizes de uma matriz maior usando “:” (dois pontos).
Por exemplo:
» A = A( 1:3 , : );
A=
1 2 3
4 5 6
7 8 9
» variável = expressão
ou simplesmente,
» expressão
Se a expressão é muito grande e não cabe em uma linha, use (...) para
continuar a definição na linha seguinte. Exemplo:
Você pode formar uma variável ou nome de função com uma letra seguida
de qualquer quantidade de letras (ou underscore). O Matlab diferencia letras
maiúsculas de minúsculas e usa somente os primeiros 19 caracteres do nome.
Para listar as variáveis ativas use o comando who. Para obter mais
informações sobre as variáveis como: nome, tamanho, número de elementos, etc.,
use o comando whos.
O utilitário de HELP
» help matfun
Para obter auxílio sobre uma função específica digite help e o nome da
função. Exemplo:
» help inv
» lookfor inverse
Tutorial do Matlab 6
Salvando e saindo
Para sair do Matlab digite exit. Encerrando uma seção do Matlab, apaga-
se todas as variáveis da área de trabalho (workspace). Se for necessário, salve
suas variáveis digitando save. Este comando salvará todas as variáveis em um
arquivo chamado matlab.mat. Para recuperar as variáveis use o comando load .
Você também pode salvar somente algumas variáveis e usar o nome de um
arquivo qualquer. O exemplo a seguir salva as variáveis x, y e z no arquivo
temp.mat.
» save temp x y z
-4.534i
1.760217e-11
^ potenciação
\ divisão à esquerda
/ divisão à direita
* multiplicação
- subtração
+ adição
Essas funções incluem, por exemplo: abs, sqrt, log, sin. Se uma operação
resultar em infinito isso não implica erro, simplesmente aquela variável terá o
valor infinito. O mesmo ocorre para operações inválidas como / ou 0/0. O
resultado é NaN (Not a Number).
Formato de saída
» x = [ 4/3 1.2345e-6 ]
» format short
1.3333 0.0000
» format short e
1.3333e+00 1.2345e-06
Funções
» x = sqrt( log(z) )
» angulo = atan2(y,3*x)
» [ V, D ] = eig( A )
» A = [ 1 2; 3 4 ]
A=
1 2
3 4
» B = A'
B=
1 3
2 4
» C=A+B
C=
2 5
5 8
» D=C-2
D=
0 3
3 6
Multiplicação de matrizes
» E=A*B
E=
5 11
11 25
» F = 2*E
F=
10 22
22 50
Divisão de matrizes
» x = [1 2 3]; y = [4 5 6];
» z = x.*y
z=
4 10 18
» z = x.\y
z=
Tutorial do Matlab 11
» z = x.^y
z=
1 32 729
Operadores relacionais
< menor
<= menor ou igual
> maior
>= maior ou igual
== igual
~= diferente
» 2 + 2 ~= 4
ans =
0
» A = [8 1 6; 3 5 7; 4 9 2];
» G = rem(A,3);
» P = (G == 0)
P=
0 0 1
Tutorial do Matlab 12
1 0 0
0 1 0
» Y = [1 2 3 4 5 6 7 8 9];
» i = find(Y > 3.0);
» Y(i) = 10*ones(size(i));
Operadores lógicos
Funções matemáticas
» A = [ -1 2 -3; 4 -5 6];
» B = abs(A)
B=
Tutorial do Matlab 13
1 2 3
4 5 6
Gerando vetores
» x = 1:5
x=
1 2 3 4 5
» y = 0 : pi/4 : pi
y=
0.0000 0.7854 1.5708 2.3562 3.1416
» z = 6: -1 : 1
z=
6 5 4 3 2 1
» x = (0 : 0.2 : 3)';
» y = exp(-x) .* sin(x);
» [x y]
ans =
0 0
0.2000 0.1627
0.4000 0.2610
0.6000 0.3099
0.8000 0.3223
1.0000 0.3096
Tutorial do Matlab 14
1.2000 0.2807
1.4000 0.2430
1.6000 0.2018
1.8000 0.1610
2.0000 0.1231
2.2000 0.0896
2.4000 0.0613
2.6000 0.0383
2.8000 0.0204
3.0000 0.0070
Existem outras funções para a geração de vetores tal como logspace que
gera um vetor espaçado logaritmicamente:
» w = logspace(-1,1,5)
w=
0.1000 0.3162 1.0000 3.1623 10.0000
Indexando
» A = [1 2 3; 4 5 6; 7 8 9];
» A(3,3) = A(1,3) + A(3,1)
A=
1 2 3
4 5 6
7 8 10
» A(:,1)
A=
1
4
7
» A(2:3,1:2)
A=
4 5
Tutorial do Matlab 15
7 8
» A( [1 3], [1 3] )
A=
1 3
7 10
» A = [1 2; 3 4; 5 6];
» B = A(:)
B=
1
2
3
4
5
6
» A(L,:)
Matrizes vazias
A declaração,
» X=[]
» A( :, [2 4] ) = [ ]
Matrizes especiais
Existe uma coleção de funções que geram matrizes que são normalmente
encontradas nos problemas de álgebra linear e processamento de sinais.
Exemplos:
Manipulando matrizes
Convenção
» count = [
11 57 291
43 178 1011
38 163 1095
61 420 2407
12 59 287 ]
Para esse exemplo temos 5 observações para 3 variáveis. Isso pode ser
obtido como segue:
Tutorial do Matlab 18
» [n,p] = size(count)
n=
5
p=
3
» mx = max(count);
» mu = mean(count);
» sigma = std(count);
resultam em:
mx =
61 420 2407
mu =
1.0e+003 *
sigma =
Ajuste de curvas
p x c1x d c2 x d 1 cn
» c = polifit(x,p,n)
Autovalores e autovetores
» eig(A)
» [X,D] = eig(A)
Representação de polinômios
A=
1 2 3
4 5 6
7 8 0
é calculado com
» p = poly(A)
p=
1 -6 -72 -27
» r = roots(p)
r=
12.1229
-5.7345
-0.3884
» p2 = poly(r)
p2 =
1 -6 -72 -27
» a = [1 2 3]; b = [4 5 6];
» c = conv(a,b)
c=
4 13 28 27 18
» [q,r] = deconv(c,a)
q=
4 5 6
r=
0 0 0 0 0
Processamento de sinais
Filtragem de dados
A função,
» y = filter(b,a,x)
filtra os dados do vetor x com o filtro descrito pelos vetores a e b, criando o dado
y filtrado.
x y
H(z)
» [h,w] = freqz(b,a,n);
» mag = abs(h);
» fase = angle(h);
» semilogy(w,mag)
Tutorial do Matlab 23
» plot(w,fase)
Integração Numérica
Equações não lineares e Otimização
Solução de Equações Diferenciais
etc
1 1
f (x ) 6
(x 0,3) 0,01 (x 0,9)2 0,04
2
» x = -1:.01:2;
» plot(x,humps(x))
Tutorial do Matlab 24
100
80
60
40
20
-20
-1 -0.5 0 0.5 1 1.5 2
Integração numérica
Uma função, tal como humps, pode ser integrada numericamente pelo
processo chamado quadratura que é uma funfun. Exemplo:
» q = quad('humps',0,1)
q=
29.8583
Note que o primeiro argumento da função quad é uma string que contém o nome
de uma função. Isso mostra porque essa função é chamada função de função (é
uma função que opera com outras funções). Os outros dois argumentos são os
limites de integração.
» xm = fminsearch('humps',0.5, 1)
xm =
0.6370
» y = humps(xm)
y=
11.2528
» xz1 = fzero('humps',0)
xz1 =
-0.1316
» xz2 = fzero('humps',1)
xz2 =
1.2995
Equações diferenciais
Tutorial do Matlab 26
x (x 2 1)x x 0
x 1 x1 (1 x 22 ) x 2
x 2 x1
O primeiro passo para simular este sistema é criar um arquivo que contem este
sistema de equações diferenciais. Chamaremos este arquivo de vdpol.m
» t0 = 0; tf = 20;
» x0 = [0 0.25]'; % condicoes iniciais
» [t,x] = ode23( 'vdpol', [t0 tf], x0 );
» plot(t,x)
Tutorial do Matlab 27
-1
-2
-3
0 5 10 15 20
Gráficos 2-D
Criando um gráfico
» t = 0:pi/100:2*pi;
» x = sin(t);
» y1 = sin(t + 0.25);
» y2 = sin(t + 0.5);
» plot(x,y1,'r-',x,y2,'g--')
» title('Defasagem')
» xlabel('x=sin(t)')
» ylabel('y=sin(t+)')
Tutorial do Matlab 29
Defasagem
1
0.8
0.6
0.4
0.2
y=sin(t+) 0
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1
x=sin(t)
O que ele pode fazer é mudar a escala dos eixos automaticamente se os novos
dados não se acomodarem dentro da escala anterior. Exemplo:
» plot(x)
» hold on
» plot(y1,'--')
» plot(y2,'-.')
» hold of
Resulta,
Tutorial do Matlab 31
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 50 100 150 200 250
» plot(eig(randn(20,20)),’x’)
Distribuição de Autovalores
4
-1
-2
-3
-4
-4 -2 0 2 4 6
Tutorial do Matlab 32
A função plot pode ter um único argumento, como plot(Y). Ela desenha
uma curva para cada coluna de Y. O eixo x é formado pelo índice de cada linha.
Se X e Y são matrizes, plot(X,Y) exibe o gráfico das colunas de X versus colunas
de Y.
» X = 0:pi/50:2*pi;
» Y = sin(X); Z = cos(X); W = log(X);
» A = [Y' Z' W'];
» plot(A)
Resulta,
2
1.5
0.5
-0.5
-1
-1.5
-2
-2.5
-3
0 20 40 60 80 100 120
Importando dados
dados.dat
» load dados.dat
» F1 = dados(:,1);
» F2 = dados(:,2);
» X = dados(:,3);
» subplot(211), plot(X,F1)
» subplot(212), plot(X,F2)
Resulta,
2
0 2 4 6 8 10
0
0 2 4 6 8 10
» x = (0:1/2000:1)';
» plot(x,cos(tan(pi*x)))
Resulta,
Tutorial do Matlab 35
1 y = cos(tan(pi*x))
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
function y = fofx(x)
y = cos(tan(pi*x));
Resulta,
Tutorial do Matlab 36
y = cos(tan(pi*x))
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Gráficos 3-D
FOR
O Matlab possui a sua versão própria dos loops DO ou FOR. Com isso é
possível repetir um grupo de declarações por um número predeterminado de
vezes. Por exemplo,
» for i = 1:1:m
» for j = 1:1:n
» A(i,j) = 1/(i+j-1);
» end
» end
» A
WHILE
Tutorial do Matlab 38
» n = 1;
» while prod(1:n) < 1.e100, n = n+1; end
» n
Declarações IF e BREAK
if n < 0
A = -1;
elseif rem(n,2) == 0
A=0
else
A=1
end
"Pegue um número inteiro. Se ele for par, divida por dois; se for impar,
multiplique ele por 3 e some 1. Repita esse processo até que o inteiro seja igual
a um. O problema é saber se existe algum inteiro para o qual o processo nunca
termina".
while 1
n = input('Entre com n [negativo aborta] = ');
if n <= 0, break, end
while n > 1
if rem(n,2) == 0
n = n/2
else
n = 3*n+1
end
end
end
1.1.10Arquivos M
Arquivos Scripts
são bons exemplos de como usar scripts para realizar tarefas mais complexas.
Para chamar os demos digite demo no prompt do Matlab.
f = [ 1 1]; i = 1;
plot(f)
Arquivos de funções
function y = media1(x)
% calculo da media
% soma / m
% inico do programa
[m,n] = size(x);
if m == 1
m = n;
end
y = sum(x) / m;
Por exemplo, se z é um vetor de inteiros de 1 à 99, sua média pode ser calculada
como segue:
» z = 1:99;
» media1(z)
ans =
50
Tutorial do Matlab 41
Você pode criar uma função um pouco mais complexa que media1,
chamada stat, que também calcula o desvio padrão. Neste exemplo ilustramos o
uso de múltiplos argumentos de saída.
[m,n] = size(x);
if m == 1
m = n;
end
mean = sum(x) / m;
stdev = sqrt(sum(x.^2)/m - mean.^2);
Uma função que calcula o posto de uma matriz usa múltiplos argumentos
de entrada: No caso geral teríamos múltiplos argumentos de entrada e de saída.
Tutorial do Matlab 42
function r = rank(x,tol)
% rank (posto em Portugues) da matrix
s = svd(x);
if (nargin == 1)
tol = max(size(x)) * s(1) * eps;
end
r = sum(s > tol);
você pode criar um help online para os seus M-files pessoais entrando o
texto em uma ou mais linhas de comentário, começando sempre pela segunda
linha do arquivo. Por exemplo, o arquivo da função angle,
function p = angle(h)
p = atan2(imag(h), real(h));
Informações úteis
Quando você chama uma função pela primeira vez, o Matlab compila a
função e a coloca na memória. Ela estará então disponível para os usos
subsequentes sem a necessidade de ser compilada. Permanecerá na memória até
o final da seção ou até que você fique com pouca memória, acarretando na sua
eliminação automática.
De uma maneira geral, quando você digita um nome de algo no Matlab, por
exemplo, whoopie , o interpretador do Matlab executa os seguintes passos:
Variáveis globais
Cada função Matlab possui suas próprias variáveis locais que são
separadas daquelas de outras funções e daquelas que estão no workspace.
Contudo, se você declarar uma variável como global, todas as funções e o
workspace vão enxergar a mesma variável. Para diferenciar das demais variáveis,
costuma-se identificar uma variável global declarando-a com um nome longo e
em letras maiúsculas, embora isso não seja uma imposição.
y 1 y1 y2 y1
y 2 y2 y2 y1
function yp = lotka(t,y)
% modelo Votka-Voltera
global ALFA BETA
yp = [y(1) - ALFA*y(1)*y(2); -y(2) + BETA*y(1)*y(2)];
Uma vez que ALFA e BETA são globais você pode alterá-las interativamente e
novas soluções podem ser obtidas sem ter que editar nenhum arquivo e sem
passar os valores como argumentos.
Variáveis alfanuméricas
» s = 'Ola'
s=
Ola
» c = 23;
» title(['A temperatura é ',num2str(c),' graus C'])
A função EVAL
» fname = ‘dados’;
» for i = 1:10
» eval( [ 'load ', fname, int2str(i) ] )
» end
1.1.11Arquivos de disco
default. Portanto, esse comando é normalmente usado para obtermos uma rápida
listagem de um M-file na teta do computador.
Transferência de dados
Importando dados
Para exportar dados também existem várias opções, das quais algumas são
listadas a seguir:
Tutorial do Matlab 47
» A = rand(4,3);
» save temp.dat A -ascii