Post on 10-Dec-2018
Mestrado Integrado em Engenharia BiomédicaFaculdade 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
IntroduIntroduçção ao Matlabão ao Matlab
Matlab Elementar
2IntroduIntroduçção ao Matlabão ao Matlab
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
3IntroduIntroduçção ao Matlabão ao Matlab
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.
4IntroduIntroduçção ao Matlabão ao Matlab
Tópicos
Matlab Elementar� Contexto do Matlab� Cálculo Interactivo � Vectores and matrizes� Ilustrações Graficas
5IntroduIntroduçção ao Matlabão ao Matlab
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 Matlabelementar.
�Hanselman and Littlefield, Mastering MATLAB 6: A Comprehensive Tutorial and Reference, Prentice Hall, 2001.
� Boa referência para principiantes e utilizadores avançados.
6IntroduIntroduçção ao Matlabão ao Matlab
Matlab Elementar
7IntroduIntroduçção ao Matlabão ao Matlab
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 ComplementosMatrix-X Maple (simbólico)Octave (grátis; GNU) Mathematica (simbólico)Lyme (grátis; Palm)
8IntroduIntroduçção ao Matlabão ao Matlab
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
m-filesC-kernel
Sig. Proc
Simulink
Contr. Syst.
9IntroduIntroduçção ao Matlabão ao Matlab
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)
10IntroduIntroduçção ao Matlabão ao Matlab
IEEE 754 Standard para números de precisão dupla
Round-off: eps = 2-52
Underflow: realmin = 2-1022
Overflow: realmax = (2-eps) ·21023
Números de Vírgula Flutuante
s e f
1 2 12 13 64
11IntroduIntroduçção ao Matlabão ao Matlab
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
12IntroduIntroduçção ao Matlabão ao Matlab
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
13IntroduIntroduçção ao Matlabão ao Matlab
Vectores e MatrizesVectores (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]
14IntroduIntroduçção ao Matlabão ao Matlab
Operações MatriciaisTodas 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
15IntroduIntroduçção ao Matlabão ao Matlab
Elementos de MatrizesAcesso a valores utilizando parêntesis>> A(2,3)
Acesso a submatrizes utilizando vectoresde í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)]
16IntroduIntroduçção ao Matlabão ao Matlab
Acessos ParciaisAcesso 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
17IntroduIntroduçção ao Matlabão ao Matlab
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
18IntroduIntroduçção ao Matlabão ao Matlab
Á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)
19IntroduIntroduçção ao Matlabão ao Matlab
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)
20IntroduIntroduçção ao Matlabão ao Matlab
GráficosGrá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
21IntroduIntroduçção ao Matlabão ao Matlab
GráficosImagens Bitmap podem ser visualizadas
>> load mandrill
>> image(X); colormap(map)
>> axis image off
22IntroduIntroduçção ao Matlabão ao Matlab
Próxima Aula
Programação em MATLAB
Mestrado Integrado em Engenharia BiomédicaFaculdade 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
IntroduIntroduçção ao Matlabão ao Matlab
Programação Matlab
24IntroduIntroduçção ao Matlabão ao Matlab
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
25IntroduIntroduçção ao Matlabão ao Matlab
Ambiente Matlab
Matlab construction
� Programação Matlab (construção de m-files)
Core m-filesC-kernel
Sig. Proc Contr. Syst.User defined
26IntroduIntroduçção ao Matlabão ao Matlab
O ambiente de programaçãoA 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
27IntroduIntroduçção ao Matlabão ao Matlab
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 ordem1. variável no actual espaço de trabalho (workspace)2. variável pré-definida3. m-file pré-definida4. m-file na directoria actual5. m-file na directoria de pesquisa
Nota: m-files podem ser colocadas na directoria ou caminho corrente
28IntroduIntroduçção ao Matlabão ao Matlab
Ficheiros Script
Script-files contém uma sequência de comandos de Matlab
%FACTSCRIPT – Compute n-factorial, n!=1*2*...*n
y = prod(1:n);
%FACTSCRIPT – Compute n-factorial, n!=1*2*...*n
y = prod(1:n);
factscript.mfactscript.mfactscript.mfactscript.mfactscript.mfactscript.mfactscript.mfactscript.m
� 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!
29IntroduIntroduçção ao Matlabão ao Matlab
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
30IntroduIntroduçção ao Matlabão ao Matlab
FunçõesFunçõ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
<function body>function [z]=factfun(n)% FACTFUN – Compute factorial% Z=FACTFUN(N)
z = prod(1:n);
function [z]=factfun(n)% FACTFUN – Compute factorial% Z=FACTFUN(N)
z = prod(1:n);
factfun.mfactfun.mfactfun.mfactfun.mfactfun.mfactfun.mfactfun.mfactfun.m
>> y=factfun(10);
31IntroduIntroduçção ao Matlabão ao Matlab
Controlo de Fluxo - Selecção
O construtor if-elseif-else
if <logical expression>if <logical expression>if <logical expression>if <logical expression>
<commands><commands><commands><commands>
elseif <logical expression>elseif <logical expression>elseif <logical expression>elseif <logical expression>
<commands><commands><commands><commands>
elseelseelseelse
<commands><commands><commands><commands>
endendendend
if height>170
disp(’tall’)
elseif height<150
disp(’small’)
else
disp(’average’)
end
if height>170
disp(’tall’)
elseif height<150
disp(’small’)
else
disp(’average’)
end
32IntroduIntroduçção ao Matlabão ao Matlab
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)
Funções Lógicasxorisemptyanyall
if (x>=0) & (x<=10)
disp(‘x is in range [0,10]’)
else
disp(‘x is out of range’)
end
if (x>=0) & (x<=10)
disp(‘x is in range [0,10]’)
else
disp(‘x is out of range’)
end
33IntroduIntroduçção ao Matlabão ao Matlab
Controlo de Fluxo - RepetiçãoRepetir um segmento de código um número fixo de vezesfor index=<vector>for index=<vector>for index=<vector>for index=<vector>
<statements><statements><statements><statements>
endendendend
Os <statements> são executados repetidamente.A cada iteração, a variável index toma um novovalor da variável <vector>.
for k=1:12kfac=prod(1:k);disp([num2str(k),’ ‘,num2str(kfac)])
end
for k=1:12kfac=prod(1:k);disp([num2str(k),’ ‘,num2str(kfac)])
end
34IntroduIntroduçção ao Matlabão ao Matlab
Exemplo – seleção e repetição
function y=fact(n)% FACT – Display factorials of integers 1..n
if nargin < 1error(’No input argument assigned’)
elseif n < 0error(’Input must be non-negative’)
elseif abs(n-round(n)) > epserror(’Input must be an integer’)
end
for k=1:n
kfac=prod(1:k);
disp([num2str(k),’ ’,num2str(kfac)])
y(k)=kfac;
end;
function y=fact(n)% FACT – Display factorials of integers 1..n
if nargin < 1error(’No input argument assigned’)
elseif n < 0error(’Input must be non-negative’)
elseif abs(n-round(n)) > epserror(’Input must be an integer’)
end
for k=1:n
kfac=prod(1:k);
disp([num2str(k),’ ’,num2str(kfac)])
y(k)=kfac;
end;
fact.mfact.mfact.mfact.mfact.mfact.mfact.mfact.m
35IntroduIntroduçção ao Matlabão ao Matlab
Repetição: Demonstração AnimaçãoA 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 – make movie of 360 degree logo tour;no_frames=40;dtheta=360/no_frames;for frame = 1:no_frames,camorbit(dtheta,0)M(frame) = getframe(gcf);
end% now display captured moviemovie(gcf,M);
% logomovie – make movie of 360 degree logo tour;no_frames=40;dtheta=360/no_frames;for frame = 1:no_frames,camorbit(dtheta,0)M(frame) = getframe(gcf);
end% now display captured moviemovie(gcf,M);
logomovie.mlogomovie.mlogomovie.mlogomovie.mlogomovie.mlogomovie.mlogomovie.mlogomovie.m
36IntroduIntroduçção ao Matlabão ao Matlab
Fluxo controlo – repetição condicional
Ciclo - while
<statements> são executados repetidamente enquanto a <logical expression> for verdadeira
while <logical expression>while <logical expression>while <logical expression>while <logical expression>
<statements<statements<statements<statements>>>>
endendendend
k=1;
while prod(1:k)~=Inf,
k=k+1;
end
disp([‘Largest factorial in Matlab:’,num2str(k-1)]);
k=1;
while prod(1:k)~=Inf,
k=k+1;
end
disp([‘Largest factorial in Matlab:’,num2str(k-1)]);
37IntroduIntroduçção ao Matlabão ao Matlab
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é
38IntroduIntroduçção ao Matlabão ao Matlab
Fluxo controlo – repetição condicional
function [x,n] = newton(x0,tol,maxit)% NEWTON – Newton’s method for solving equations% [x,n] = NEWTON(x0,tol,maxit) x = x0; n = 0; done=0;while ~done,n = n + 1;x_new = x - (exp(-x)-sin(x))/(-exp(-x)-cos(x));done=(n>=maxit) | ( abs(x_new-x)<tol );x=x_new;
end
function [x,n] = newton(x0,tol,maxit)% NEWTON – Newton’s method for solving equations% [x,n] = NEWTON(x0,tol,maxit) x = x0; n = 0; done=0;while ~done,n = n + 1;x_new = x - (exp(-x)-sin(x))/(-exp(-x)-cos(x));done=(n>=maxit) | ( abs(x_new-x)<tol );x=x_new;
end
newton.mnewton.mnewton.mnewton.mnewton.mnewton.mnewton.mnewton.m
>> [x,n]=newton(0,1e-3,10)
39IntroduIntroduçção ao Matlabão ao Matlab
Execução de funçõesSerá 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);
function [f,f_prime] = myfun(x)% MYFUN– Evaluate f(x) = exp(x)-sin(x)% and its first derivative % [f,f_prime] = myfun(x)
f=exp(-x)-sin(x);f_prime=-exp(-x)-cos(x);
function [f,f_prime] = myfun(x)% MYFUN– Evaluate f(x) = exp(x)-sin(x)% and its first derivative % [f,f_prime] = myfun(x)
f=exp(-x)-sin(x);f_prime=-exp(-x)-cos(x);
myfun.mmyfun.mmyfun.mmyfun.mmyfun.mmyfun.mmyfun.mmyfun.m
40IntroduIntroduçção ao Matlabão ao Matlab
Execução de funções
),( txfdt
dx=
Pode actualizar newton.m
>> [x,n]=newtonf(’myfun’,0,1e-3,10)
function [x,n] = newtonf(fname,x0,tol,maxit)% NEWTON – Newton’s method for solving equations% [x,n] = NEWTON(fname,x0,tol,maxit) x = x0; n = 0; done=0;while ~done,n = n + 1;[f,f_prime]=feval(fname,x);x_new = x – f/f_prime;done=(n>maxit) | ( abs(x_new-x)<tol );x=x_new;
end
function [x,n] = newtonf(fname,x0,tol,maxit)% NEWTON – Newton’s method for solving equations% [x,n] = NEWTON(fname,x0,tol,maxit) x = x0; n = 0; done=0;while ~done,n = n + 1;[f,f_prime]=feval(fname,x);x_new = x – f/f_prime;done=(n>maxit) | ( abs(x_new-x)<tol );x=x_new;
end
newtonf.mnewtonf.mnewtonf.mnewtonf.mnewtonf.mnewtonf.mnewtonf.mnewtonf.m
41IntroduIntroduçção ao Matlabão ao Matlab
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
function x_dot = myodefun(t,x) % MYODEFUN – Define RHS of ODEx_dot(1,1)=x(2); x_dot(2,1)=-x(1)+0.1*(1-x(1)^2)*x(2);
function x_dot = myodefun(t,x) % MYODEFUN – Define RHS of ODEx_dot(1,1)=x(2); x_dot(2,1)=-x(1)+0.1*(1-x(1)^2)*x(2);
myodefun.mmyodefun.mmyodefun.mmyodefun.mmyodefun.mmyodefun.mmyodefun.mmyodefun.m
>> ode45(‘myodefun’,[0 10],[1;-10]);
42IntroduIntroduçção ao Matlabão ao Matlab
Boas práticas programaçãoO estilo de programação tem grande influência no tempo de execução do programa!
tic; X=-250:0.1:250;for ii=1:length(x)if x(ii)>=0,s(ii)=sqrt(x(ii));
elses(ii)=0;
end;end;toc
tic; X=-250:0.1:250;for ii=1:length(x)if x(ii)>=0,s(ii)=sqrt(x(ii));
elses(ii)=0;
end;end;toc
ticx=-250:0.1:250;s=sqrt(x); s(x<0)=0;toc;
ticx=-250:0.1:250;s=sqrt(x); s(x<0)=0;toc;
slow.mslow.mslow.mslow.mslow.mslow.mslow.mslow.mfast.mfast.mfast.mfast.mfast.mfast.mfast.mfast.m
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!
43IntroduIntroduçção ao Matlabão ao Matlab
SumárioFunçõ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
44IntroduIntroduçção ao Matlabão ao Matlab
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 Matlabelementar.
�Hanselman and Littlefield, Mastering MATLAB 6: A Comprehensive Tutorial and Reference, Prentice Hall, 2001.
� Boa referência para principiantes e utilizadores avançados.