+
Matlab
Prof.Celso J. Munaro (DEL-CT-UFES)
[email protected]
JACEE - 2014 - Matlab
+
2
Conteúdo
1.
Controle de fluxo
2.
Programação
3.
i.
Scripts
ii.
Funções
Simulação de sistemas descritos por equações diferenciais
JACEE - 2014 - Matlab
+
3
Controle de fluxo
Declarações condicionais permitem selecionar em tempo de
execução qual bloco de código executar.
•
•
•
•
•
Loop FOR
Loop WHILE
Comandos IF e BREAK
Switch
If-elseif-else
JACEE - 2014 - Matlab
+
4
for
Exemplo 1:
>> for i = 1:n, x(i) = 0, end
Exemplo 2:
>> x=ones(n,1); (ou x=zeros(n,1))
>> for i = 1:2:n, x(i) = 2, end;
JACEE - 2014 - Matlab
+
5
Recuar os diversos laços aumenta a legibilidade
JACEE - 2014 - Matlab
+
6
for : atividade proposta
Gerar uma matriz randomica com o comando A=randn(10,10)
e criar uma nova matriz B que tenha apenas os valores
menores que 0.5
JACEE - 2014 - Matlab
+
7
while
while expressão
linhas de comando
end
Exemplo:
i=1;
while(i<100)
x(i)=i;
i=i+1;
end;
JACEE - 2014 - Matlab
+
8
while: atividade proposta
Gerar uma matriz randomica com o comando A=randn(10,10)
e criar uma nova matriz B que tenha apenas os valores
menores que 0.5
JACEE - 2014 - Matlab
+
9
If break
O comando break dentro de um for ou while
termina o laço.
Exemplo:
JACEE - 2014 - Matlab
+
10
switch
switch flag
case valor1
bloco 1 de comandos
case valor 2
bloco 2 de comandos
case valor3
bloco 3 de comandos
end;
JACEE - 2014 - Matlab
+
11
Switch: exemplo
op=input(‘i=‘);
switch op
case 1
disp(‘1’);
case 2
disp(‘2’);
case 3
disp(‘3’);
end;
JACEE - 2014 - Matlab
+
12
If-elseif-else
Exemplo:
a = randi(100, 1);
if a < 30
disp(’pequeno')
elseif a < 80
disp(’medio')
else
disp(’grande')
end
JACEE - 2014 - Matlab
+
13
error
O comando error(‘Mensagem’) dentro da uma função ou script
aborta sua execução e mostra “Mensagem”
Exemplo:
>> norm(1,2,3)
Error using norm
Too many input arguments.
JACEE - 2014 - Matlab
+
14
Vetorização
Uma maneira de tornar os programas MATLAB mais
rápidos é para vetorizar os algoritmos que usados
na construção dos programas. Enquanto outras
linguagens de programação podem usar laços com
for ou do, o MATLAB pode usar operações de
vetores ou matrizes. Um exemplo simples envolve a
criação de uma tabela de logaritmos
JACEE - 2014 - Matlab
+
15
Exemplo: vetorização para fazer
tabela de logaritmos
Vetorização
JACEE - 2014 - Matlab
+
16
Vetorização: Atividades propostas
1)
Gerar a matriz A=randn(10,10) e obter a matriz B apenas
com os valores menores que 0.5 sem usar loops.
2)
Gerar um vetor com 1000 uns u=ones(1000,1); e somar
todos valores de u com um só comando.
3)
Gerar um vetor aleatório x=randn(100,1); e o valor máximo
e a posição do vetor em que ocorre.
4)
Gerar um vetor aleatório x=randn(100,1); e somar todos
seus elementos elevados ao quadrado com um só
comando.
5)
Somar todos os elementos da matriz A=rand(100,100);
JACEE - 2014 - Matlab
+
17
Programação no Matlab
Linguagem própria, mas com com muita semelhança à
linguagem C
Arquivos .m (M-files) são arquivos ASCII com extensão *.m
Podem ser scripts ou funções
JACEE - 2014 - Matlab
+
18
Importante
Quando o Matlab procura por um nome, ele primeiro busca a
lista de variáveis no workspace.
Se uma variável tem o mesmo nome de uma script, o Matlab
executará a variável, e nunca o script.
Exemplo: mean é uma função; logo, não use este nome para
uma variável.
Além disto, o nome de um script deve começar com uma letra.
JACEE - 2014 - Matlab
+
19
Scripts
Quando um script é chamado, MATLAB simplesmente executa
os comandos encontrados no arquivo. As linhas de comando de
um arquivo script operam globalmente com os dados que
estão no espaço de trabalho. Scripts são úteis na realização de
análise, solução de problemas, ou no projeto de longas
sequências de comando que é cansativo para ser feito
interativamente.
JACEE - 2014 - Matlab
+
20
Scripts: exemplo
ts=0.01;
t=0:ts:10;
y=sin(w*t);
plot(t,y);xlabel('Tempo(s)');
ylabel('Senoide');
Atividade: Gravar um arquivo test1.m com estes comandos e
executar no workspace.
JACEE - 2014 - Matlab
+
21
functions
Um arquivo-M que contém a palavra function no ínicio da
primeira linha é um arquivo função. Uma função difere de um
script pelos argumentos que devem ser passados, e pelas
variáveis que são definidas e manipuladas que são locais à
função e não podem ser operadas globalmente no espaço de
trabalho.
function [variáveis de saída] = function_name (variáveis de
entrada)
JACEE - 2014 - Matlab
+
22
function: anatomia
JACEE - 2014 - Matlab
+
23
Function: exemplo
function [m,dp,s]=fx1(y)
% m = media,
% dp = desvio padrao
% s = soma
s=sum(y);
m=mean(y);
dp=std(y);
Atividade: programar esta função
JACEE - 2014 - Matlab
+
24
Functions : exemplo do Matlab
JACEE - 2014 - Matlab
+
25
Functions : exemplo do Matlab
A função admite diferentes argumentos de saída.
M1=max(x) dá apenas o maior valor
[m,ind]=max(x) dá também o índice do maior valor
JACEE - 2014 - Matlab
+
26
Functions : exemplo do Matlab
A função admite diferentes argumentos de entrada.
M1=norm(x) norma de x (euclidiana, default)
[m1=norm(x,1) norma 1 (valor absoluto)
JACEE - 2014 - Matlab
+
27
Comentários sobre funções
Controle dos argumentos de entrada
function m=norm(x,p)
if nargin==1
p=2;
end;
m=sum(x.^p);
m=m^(1/p);
JACEE - 2014 - Matlab
+
28
Executando partes de funções
JACEE - 2014 - Matlab
+
29
keyboard
O comando keyboard dentro de uma função permite retornar o
teclado ao usuário no ponto o comando é colocado.
function m=norm(x,p)
if nargin==1
p=2;
end;
keyboard;
m=sum(x.^p);
m=m^(1/p);
JACEE - 2014 - Matlab
+
30
Executando parte de funções (cont)
JACEE - 2014 - Matlab
+
31
Funcões inline
Achar os zeros da função
Definir a função
fr=inline(‘r^3-32*r^2+(r-22)*r+100’);
r0=fzero(fr,5)
JACEE - 2014 - Matlab
+
32
r^3-32*r^2+(r-22)*r+100
>> fzero(fr,5)
ans =
JACEE - 2014 - Matlab
1.5058
+
33
Inline function: atividade proposta 1
Atividade: Obter a curva abaixo usando inline function
JACEE - 2014 - Matlab
+
34
Inline function: atividade proposta 2
Atividade: Obtenha os zeros da função transcendental abaixo
de forma gráfica e numérica (fzero)
JACEE - 2014 - Matlab
+
35
Variáveis globais
Cada função do MATLAB definida por um arquivo-M possui
suas próprias variáveis locais, as quais não tem relação com as
de outras funções e com as do espaço de trabalho. Entretanto,
se várias funções e também o plano de trabalho declararem
uma variável particular como global, então todos eles dividem
a mesma variável. Qualquer atribuição a esta variável, em
qualquer função, fica disponível a todas as outras funções que
a declaram como global.
Para fazer com que uma variável seja global, basta escrever
global X Y Z
JACEE - 2014 - Matlab
+
36
3. Simulação de sistemas descritos
por equações diferenciais
Solvers do Matlab para ODEs: (ordinary differential equations)
ode23: método de Runge-Kutta de segunda e terceira ordem
ode45: método de Runge-Kutta de terceira e quarta ordem
JACEE - 2014 - Matlab
+ 3. Simulação de sistemas descritos por
equações diferenciais
JACEE - 2014 - Matlab
37
+
38
Atividade: Editar a rotina abaixo e salvar com nome simula1.m:
function dx=simula1(t,x)
u=1;
dx(1,1)=x(2);
dx(2,1)=u-2*x(1)-3*x(2);
Dar os comandos no workspace
>> tspam=[0 8];
>> x0=[0;0];
>> [t,x]=ode45('simula1’,tspam,x0);
>> plot(t,x)
JACEE - 2014 - Matlab
+
39
Resultado da simulação
JACEE - 2014 - Matlab
+
40
Atividades propostas
1) Definir a entrada u como global e variar seu valor no
workspace
2) Alterar os estados iniciais na simulação.
3) Comparar ode23 e ode45
JACEE - 2014 - Matlab
+ Atividade proposta 2: Simular um sistema
com massa+mola+amortecedor
M=1kg
B=2
K=1
f(t)=1Newton
JACEE - 2014 - Matlab
41
+
42
Atividade proposta 3: simular uma
equação não-linear
Simular a equação diferencial abaixo com as condições iniciais
dadas
JACEE - 2014 - Matlab
Download

Matlab