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

44
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 Introdu ç ç ão ao Matlab ão ao Matlab Matlab Elementar

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

Page 1: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 2: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 3: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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.

Page 4: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

4IntroduIntroduçção ao Matlabão ao Matlab

Tópicos

Matlab Elementar� Contexto do Matlab� Cálculo Interactivo � Vectores and matrizes� Ilustrações Graficas

Page 5: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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.

Page 6: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

6IntroduIntroduçção ao Matlabão ao Matlab

Matlab Elementar

Page 7: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)

Page 8: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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.

Page 9: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)

Page 10: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 11: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 12: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 13: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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]

Page 14: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 15: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)]

Page 16: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 17: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 18: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)

Page 19: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)

Page 20: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 21: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

21IntroduIntroduçção ao Matlabão ao Matlab

GráficosImagens Bitmap podem ser visualizadas

>> load mandrill

>> image(X); colormap(map)

>> axis image off

Page 22: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

22IntroduIntroduçção ao Matlabão ao Matlab

Próxima Aula

Programação em MATLAB

Page 23: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 24: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 25: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 26: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 27: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 28: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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!

Page 29: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 30: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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);

Page 31: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 32: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 33: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 34: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 35: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 36: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)]);

Page 37: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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é

Page 38: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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)

Page 39: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 40: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 41: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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]);

Page 42: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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!

Page 43: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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

Page 44: Introdu ção ao Matlab - fis.uc.pt · Programação em MATLAB. Mestrado Integrado em Engenharia Biomédica Faculdade de Ciências e Tecnologia Universidade de Coimbra Adaptado dos

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.