Você está na página 1de 44

Introdução ao Matlab

Matlab Elementar

Mestrado Integrado em Engenharia


Biomédica
Faculdade de Ciências e Tecnologia
Universidade de Coimbra

Adaptado dos Slides de Mikael Johansson and Frank Lingelbach


Department of Signals, Sensors and Systems
KTH, Sweden
Introdução ao Matlab 2

O que é o Matlab?
Software que permite criar um ambiente
interactivo para cálculo numérico

Exemplos:
 Computação matricial e álgebra linear
 Solução de equações não-lineares
 Solução numérica de equações diferenciais
 Optimização numérica
 Estatística e análise de dados
 Processamento de Sinal
 Modelação de sistemas dinâmicos
 Solução de equações diferenciais parciais
 Simulação de sistemas
Introdução ao Matlab 3

Qual a razão de estudar e aprender a


utlizar este software?
O Matlab é utilizado (diariamente) em muitos projectos e
empresas de desenvolvimento de tecnologia.
Introdução ao Matlab 4

Tópicos
Matlab Elementar
 Contexto do Matlab
 Cálculo Interactivo
 Vectores and matrizes
 Ilustrações Graficas
Introdução ao Matlab 5

Bibliografia para Matlab:


The Mathworks, Inc., The Student
Edition of Matlab, Prentice-Hall.

Biran and Breiner, Matlab for


Engineers Addison-Wesley, 1995.
 Uma boa introdução a Matlab
elementar.
Hanselman and Littlefield, Mastering
MATLAB 6: A Comprehensive Tutorial
and Reference, Prentice Hall, 2001.
 Boa referência para principiantes e
utilizadores avançados.
Introdução ao Matlab 6

Matlab Elementar
Introdução ao Matlab 7

Matlab Background
Matlab = Matrix Laboratory
Originalmente era um interface para o utilizador de uma
biblioteca de rotinas de álgebra linear e análise numérica
(Lapak/Linpak)
Versão comercial em 1984 pela The Mathworks
Desde então tem vindo a ser extensivamente utilizada
(standard ”de-facto”)

Alternativas Complementos
Matrix-X Maple (simbólico)
Octave (grátis; GNU) Mathematica (simbólico)
Lyme (grátis; Palm)
Introdução ao Matlab 8

Construção
Núcleo funcional (rotinas-C Compiladas) + Módulos
Interpretador de comandos/linguagem no interior de m-files
A maior funcionalidade tem origem nas m-files, que estão
agrupados em toolboxes
 m-files contêm texto escrito na sintax interpretada pelo
Matlab e cujo código pode ser copiado e alterado
 m-files são independentes da plataforma (PC, Unix/Linux,
MAC)
A simulação de sistemas dinâmicos é realizado pela
utilização do módulo de interface gráfico Simulink

Sig. Proc Contr. Syst.

Simulink
C-kernel m-files
Introdução ao Matlab 9

Cálculos Interactivos
Matlab é interactivo, não precisa de declarar variáveis
>> 2+3*4/2
>> a=5e-3; b=1; a+b

As funções matemáticas mais elementares estão já definidas


>> cos(pi)
>> abs(1+i)
>> sin(pi)
Introdução ao Matlab 10

Números de Vírgula Flutuante


IEEE 754 Standard para números de precisão dupla

s e f
1 2 12 13 64

Round-off: eps = 2-52


Underflow: realmin = 2-1022
Overflow: realmax = (2-eps) ·21023
Introdução ao Matlab 11

Gestão de Memória e Variáveis


Matlab utiliza precisão dupla (aprox. 16 digitos significativos)
>> format long
>> format compact

Todas as variáveis são visíveis com


>> who
>> whos

Todas as variáveis podem ser armazenadas num ficheiro


>> save filename
>> clear
>> load filename
Introdução ao Matlab 12

O Help System

Pesquisa de informação sobre uma função


>> lookfor keyword

Ajuda rápida com a sintaxe ou definição de uma função


>> help function

Um sistema de ajuda avançado que pode ser lançado:


>> helpdesk

Manuais completos em ficheiros PDF


Introdução ao Matlab 13

Vectores e Matrizes
Vectores (matrizes) são definidos por
>> v = [1, 2, 4, 5]
>> w = [1; 2; 4; 5]

Matrizes (arrays 2D) definidos de forma similar


>> A = [1,2,3;4,-5,6;5,-6,7]
Introdução ao Matlab 14

Operações Matriciais
Todas as operações mais comuns estão disponíveis
>> v + 2

Operadores comuns estão disponíveis


>> B = A’
>> A*B
>> A+B

Nota:
 O Matlab é case-sensitive
A e a são duas variáveis distintas
Introdução ao Matlab 15

Elementos de Matrizes
Acesso a valores utilizando parêntesis
>> A(2,3)

Acesso a submatrizes utilizando vectores


de índices
>> A([2 3],[1 2])

Ordenamento de índices é importante!


>> B=A([3 2],[2 1])
>> B=[A(3,2),A(3,1);A(2,2);A(2,1)]
Introdução ao Matlab 16

Acessos Parciais
Acesso a uma linha ou coluna completa
Utilizando o operador colon (”:”)
>> A(1,:)

Podemos também limitar os valores


dos índices
>> A(1:2,:)
>> A([1 2],:)

Notação geral para o operador colon (”:”)


>> v=1:5
>> w=1:2:5
Introdução ao Matlab 17

Funções Matriciais
Estão predefinidas muitas matrizes elementares
>> help elmat;
>> I=eye(3)

Funções elementares são, por vezes, sobrepostas


>> help elmat
>> sin(A)

Funções e operadores matriciais especializadas


>> As=sqrtm(A)
>> As^2
>> A.*A

Nota: em geral, ”.<operator>” é uma operação num elemento


Introdução ao Matlab 18

Álgebra Linear Numérica


Álgebra Linear elementar
>> z=[1;2;3]; x=inv(A)*z
>> x=A\z

Muitas funções standard predefinidas


>> det(A)
>> rank(A)
>> eig(A)

O número de argumentos da entrada/saída podem variar


>> [V,D]=eig(A)
Introdução ao Matlab 19

Gráficos

Visualização de vector de dados está disponível


>> x=-pi:0.1:pi; y=sin(x);
>> plot(x,y)
>> plot(x,y,’s-’)
>> xlabel(’x’); ylabel(’y=sin(x)’);

Podemos mudar propriedades de desenho gráfico (plot) no


menu Figure, ou via ”handle”
>> h=plot(x,y); set(h, ’LineWidth’, 4);

Muitas outras funções de desenho gráfico disponíveis


>> v=1:4; pie(v)
Introdução ao Matlab 20

Gráficos
Gráficos tri-dimensionais
>> A = zeros(32);
>> A(14:16,14:16) = ones(3);
>> F=abs(fft2(A));
>> mesh(F)
>> rotate3d on

Diversas outras funções de interpolação gráfica disponíveis


>> surfl(F)

Podem alteradas as propriedades da iluminação e


dos materiais
>> cameramenu
>> material metal
Introdução ao Matlab 21

Gráficos
Imagens Bitmap podem ser visualizadas

>> load mandrill


>> image(X); colormap(map)
>> axis image off
Introdução ao Matlab 22

Próxima Aula

Programação em MATLAB
Introdução ao Matlab
Programação Matlab

Mestrado Integrado em Engenharia


Biomédica
Faculdade de Ciências e Tecnologia
Universidade de Coimbra

Adaptado dos Slides de Mikael Johansson and Frank Lingelbach


Department of Signals, Sensors and Systems
KTH, Sweden
Introdução ao Matlab 24

Tópicos

Programação Matlab
 Ambiente de Programação e Path Pesquisa
 M-file scripts e funções
 Declarações de Controlo de Fluxo
 Execução das Funções
 Boas práticas de programação
Introdução ao Matlab 25

Ambiente Matlab

Matlab construction
 Programação Matlab (construção de m-files)

Sig. Proc Contr. Syst.


User defined

C-kernel Core m-files


Introdução ao Matlab 26

O ambiente de programação
A directoria de trabalho é controlada por
>> dir
>> cd catalogue
>> pwd

A variável de ambiente de trabalho path define


onde o local de pesquisa das m-files
>> path
>> addpath
>> pathtool
>> which function
Introdução ao Matlab 27

O ambiente de programação

O Matlab não sabe, à partida, se o identificador é


uma variável ou uma função
>> z=theta;
O Matlab pesquisa um identificador pela seguinte
ordem
1. variável no actual espaço de trabalho (workspace)
2. variável pré-definida
3. m-file pré-definida
4. m-file na directoria actual
5. m-file na directoria de pesquisa
Nota: m-files podem ser colocadas na directoria ou
caminho corrente
Introdução ao Matlab 28

Ficheiros Script

Script-files contém uma sequência de comandos


de Matlab
factscript.m
factscript.m
%FACTSCRIPT
%FACTSCRIPT –– Compute
Compute n-factorial,
n-factorial, n!=1*2*...*n
n!=1*2*...*n
yy == prod(1:n);
prod(1:n);
 Execução através do lançamento do nome:
>> factscript
 Opera em variáveis no workspace global
 Variável n deverá existir no workspace
 Variável y é criada (ou over-written)
 Utilizar linhas de comentários (começa com
%) para documentar o ficheiro!
Introdução ao Matlab 29

Mostrar o código e obter o ajuda

Para listar o código, usando o comando type


>> type factscript

O comando help mostra as primeiras linhas de


comentário do ficheiro
>> help factscript
Introdução ao Matlab 30

Funções
Funções descrevem subprogramas
A partir de valores de entrada, gera saídas
Variáveis locais (invisíveis ao workspace global)

[output_arguments]=
function_name(input_arguments)
% Comment lines
factfun.m
factfun.m
<function body>
function
function [z]=factfun(n)
[z]=factfun(n)
%% FACTFUN
FACTFUN –– Compute
Compute factorial
factorial
%% Z=FACTFUN(N)
Z=FACTFUN(N)
zz == prod(1:n);
prod(1:n);

>> y=factfun(10);
Introdução ao Matlab 31

Controlo de Fluxo - Selecção

O construtor if-elseif-else
if <logical expression>
<commands>
elseif <logical expression>
if
if height>170
height>170
<commands>
disp(’tall’)
disp(’tall’)
else
elseif
elseif height<150
height<150
<commands>
disp(’small’)
disp(’small’)
end
else
else
disp(’average’)
disp(’average’)
end
end
Introdução ao Matlab 32

Expressões Lógicas
Operadores Relacionais (permite comparar matrizes de
dimensões iguais)
== (equal to) ~= (not equal)
< (less than) <= (less than or equal to)
> (greater than) >= (greater than or equal to)
Operadores Lógicos (combinação de operadores relacionais)
& (and)
| (or)
~ (not) if
if (x>=0)
(x>=0) && (x<=10)
(x<=10)
Funções Lógicas disp(‘x
disp(‘x is
is in
in range
range [0,10]’)
[0,10]’)
xor else
else
isempty
any disp(‘x
disp(‘x is
is out
out of
of range’)
range’)
all end
end
Introdução ao Matlab 33

Controlo de Fluxo - Repetição


Repetir um segmento de código um número fixo
de vezes
for index=<vector>
<statements>
end
Os <statements> são executados repetidamente.
A cada iteração, a variável index toma um novo
valor da variável <vector>.

for
for k=1:12
k=1:12
kfac=prod(1:k);
kfac=prod(1:k);
disp([num2str(k),’
disp([num2str(k),’ ‘,num2str(kfac)])
‘,num2str(kfac)])
end
end
Introdução ao Matlab 34

Exemplo – seleção e repetição


fact.m
fact.m
function
function y=fact(n)
y=fact(n)
%% FACT
FACT –– Display
Display factorials
factorials of
of integers
integers 1..n
1..n
if
if nargin
nargin << 11
error(’No
error(’No input
input argument
argument assigned’)
assigned’)
elseif
elseif nn << 00
error(’Input
error(’Input must
must be
be non-negative’)
non-negative’)
elseif
elseif abs(n-round(n))
abs(n-round(n)) >> eps
eps
error(’Input
error(’Input must
must be
be an
an integer’)
integer’)
end
end

for
for k=1:n
k=1:n
kfac=prod(1:k);
kfac=prod(1:k);
disp([num2str(k),’
disp([num2str(k),’ ’,num2str(kfac)])
’,num2str(kfac)])
y(k)=kfac;
y(k)=kfac;
end;
end;
Introdução ao Matlab 35

Repetição: Demonstração Animação


A função movie gera uma sequência de frames
capturadas
Constroi um filme com uma trajectória de 360°
em torno do logo Matlab
logomovie.m
logomovie.m
%% logomovie
logomovie –– make
make movie
movie of
of 360
360 degree
degree logo
logo tour;
tour;
no_frames=40;
no_frames=40;
dtheta=360/no_frames;
dtheta=360/no_frames;
for
for frame
frame == 1:no_frames,
1:no_frames,
camorbit(dtheta,0)
camorbit(dtheta,0)
M(frame)
M(frame) == getframe(gcf);
getframe(gcf);
end
end
%% now
now display
display captured
captured movie
movie
movie(gcf,M);
movie(gcf,M);
Introdução ao Matlab 36

Fluxo controlo – repetição condicional

Ciclo - while
while <logical expression>
<statements>
<statements>
end
<statements> são executados repetidamente
enquanto a <logical expression> for verdadeira
k=1;
k=1;
while
while prod(1:k)~=Inf,
prod(1:k)~=Inf,
k=k+1;
k=k+1;
end
end
disp([‘Largest
disp([‘Largest factorial
factorial in
in Matlab:’,num2str(k-1)]);
Matlab:’,num2str(k-1)]);
Introdução ao Matlab 37

Fluxo controlo – repetição condicional


Soluções para equações nonlineares

podem ser obtidas utilizando método Newton

Task: escrever uma função para uma solução para

Dado , iterar maxit times ou até


Introdução ao Matlab 38

Fluxo controlo – repetição condicional

newton.m
newton.m
function
function [x,n]
[x,n] == newton(x0,tol,maxit)
newton(x0,tol,maxit)
%% NEWTON
NEWTON –– Newton’s
Newton’s method
method for
for solving
solving equations
equations
%% [x,n]
[x,n] == NEWTON(x0,tol,maxit)
NEWTON(x0,tol,maxit)
xx == x0;
x0; nn == 0;
0; done=0;
done=0;
while
while ~done,
~done,
nn == nn ++ 1;
1;
x_new
x_new == xx -- (exp(-x)-sin(x))/(-exp(-x)-cos(x));
(exp(-x)-sin(x))/(-exp(-x)-cos(x));
done=(n>=maxit)
done=(n>=maxit) || (( abs(x_new-x)<tol
abs(x_new-x)<tol );
);
x=x_new;
x=x_new;
end
end

>> [x,n]=newton(0,1e-3,10)
Introdução ao Matlab 39

Execução de funções
Será necessário re-escrever newton.m para
qualquer nova função?
Não! Funções de uso geral permitem funções m-
files como entrada.
>> help feval
>> [f,f_prime]=feval(’myfun’,0);
myfun.m
myfun.m
function
function [f,f_prime]
[f,f_prime] == myfun(x)
myfun(x)
%% MYFUN–
MYFUN– Evaluate
Evaluate f(x)
f(x) == exp(x)-sin(x)
exp(x)-sin(x)
%% and
and its
its first
first derivative
derivative
%% [f,f_prime]
[f,f_prime] == myfun(x)
myfun(x)

f=exp(-x)-sin(x);
f=exp(-x)-sin(x);
f_prime=-exp(-x)-cos(x);
f_prime=-exp(-x)-cos(x);
Introdução ao Matlab 40

Execução de funções

Pode actualizar newton.m newtonf.m


newtonf.m
function
function [x,n]
[x,n] == newtonf(fname,x0,tol,maxit)
newtonf(fname,x0,tol,maxit)
%% NEWTON
NEWTON –– Newton’s
Newton’s method
method for for solving
solving equations
equations
%% [x,n]
[x,n] == NEWTON(fname,x0,tol,maxit)
NEWTON(fname,x0,tol,maxit)
xx == x0;
x0; nn == 0;
0; done=0;
done=0;
while
while ~done,
~done,
nn == nn ++ 1;
1;
dx
[f,f_prime]=feval(fname,x);
[f,f_prime]=feval(fname,x);
= f ( x, t )
x_new = x – f/f_prime;
dt
x_new = x – f/f_prime;
done=(n>maxit)
done=(n>maxit) || (( abs(x_new-x)<tol
abs(x_new-x)<tol ); );
x=x_new;
x=x_new;
end
end

>> [x,n]=newtonf(’myfun’,0,1e-3,10)
Introdução ao Matlab 41

Execução de Funções em Matlab


Maior utilização: integração, diferenciação,
optimização, …
>> help ode45

Achar a solução para equação diferencial

myodefun.m
myodefun.m
function
function x_dot
x_dot == myodefun(t,x)
myodefun(t,x)
%% MYODEFUN
MYODEFUN –– Define
Define RHS
RHS of
of ODE
ODE
x_dot(1,1)=x(2);
x_dot(1,1)=x(2);
x_dot(2,1)=-x(1)+0.1*(1-x(1)^2)*x(2);
x_dot(2,1)=-x(1)+0.1*(1-x(1)^2)*x(2);
>> ode45(‘myodefun’,[0 10],[1;-10]);
Introdução ao Matlab 42

Boas práticas programação


O estilo de programação tem grande influência no
tempo de execução do programa!
tic; slow.m
slow.m
tic;
X=-250:0.1:250; fast.m
fast.m
X=-250:0.1:250;
for
for ii=1:length(x)
ii=1:length(x) tic
tic
if
if x(ii)>=0,
x(ii)>=0, x=-250:0.1:250;
x=-250:0.1:250;
s(ii)=sqrt(x(ii));
s(ii)=sqrt(x(ii)); s=sqrt(x);
s=sqrt(x);
else
else s(x<0)=0;
s(x<0)=0;
s(ii)=0;
s(ii)=0; toc;
toc;
end;
end;
end;
end;
toc
toc
Ciclos são lentos: Substituir por operações vectoriais!
Memory allocation requer tempo: Pre-allocate da memória!
Utilizar profile para detectar zonas ineficientes do código!
Introdução ao Matlab 43

Sumário
Funções definidas pelo utilizador através das m-files
 Funções na directoria corrente, ou na path definida
Script-files vs. funções
 Funções têm variáveis locais,
 Scripts operam no workspace global
Escrever m-files
 Cabeçalho(function definition), comentários, corpo programa
 Entradas, gera saídas, variáveis internas
 Controlo Fluxo: ”if...elseif...if”, ”for”, ”while”
 Funções de uso Geral: utilizar funções como entradas
Programação e tempo de execução
 Utilizar operações por vectores, memory allocation, profiler
Introdução ao Matlab 44

Bibliografia para Matlab:


The Mathworks, Inc., The Student
Edition of Matlab, Prentice-Hall.

Biran and Breiner, Matlab for


Engineers Addison-Wesley, 1995.
 Uma boa introdução a Matlab
elementar.
Hanselman and Littlefield, Mastering
MATLAB 6: A Comprehensive Tutorial
and Reference, Prentice Hall, 2001.
 Boa referência para principiantes e
utilizadores avançados.

Você também pode gostar