Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia...

Post on 10-Dec-2018

216 views 0 download

Transcript of Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia...

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.