introdu ção ao matlab - fis.uc.pt · programação em matlab. mestrado integrado em engenharia...
TRANSCRIPT
![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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022022715/5c0e23d909d3f20b788c8660/html5/thumbnails/44.jpg)
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.