Apnt 169 2
Apnt 169 2
Apnt 169 2
Matlab Elementar
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
Tópicos
Matlab Elementar
Contexto do Matlab
Cálculo Interactivo
Vectores and matrizes
Ilustrações Graficas
Introdução ao Matlab 5
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
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
s e f
1 2 12 13 64
O Help System
Vectores e Matrizes
Vectores (matrizes) são definidos por
>> v = [1, 2, 4, 5]
>> w = [1; 2; 4; 5]
Operações Matriciais
Todas as operações mais comuns estão disponíveis
>> v + 2
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)
Acessos Parciais
Acesso a uma linha ou coluna completa
Utilizando o operador colon (”:”)
>> A(1,:)
Funções Matriciais
Estão predefinidas muitas matrizes elementares
>> help elmat;
>> I=eye(3)
Gráficos
Gráficos
Gráficos tri-dimensionais
>> A = zeros(32);
>> A(14:16,14:16) = ones(3);
>> F=abs(fft2(A));
>> mesh(F)
>> rotate3d on
Gráficos
Imagens Bitmap podem ser visualizadas
Próxima Aula
Programação em MATLAB
Introdução ao Matlab
Programação 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
Introdução ao Matlab 25
Ambiente Matlab
Matlab construction
Programação Matlab (construção de m-files)
O ambiente de programação
A directoria de trabalho é controlada por
>> dir
>> cd catalogue
>> pwd
O ambiente de programação
Ficheiros Script
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
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
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
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
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
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
>> [x,n]=newtonf(’myfun’,0,1e-3,10)
Introdução ao Matlab 41
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
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