+ matlab prof.celso j. munaro (del-ct-ufes) celso.munaro@ufes.br jacee - 2014 - matlab

Post on 22-Apr-2015

126 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

JACEE - 2014 - Matlab

+

MatlabProf.Celso J. Munaro (DEL-CT-UFES)celso.munaro@ufes.br

JACEE - 2014 - Matlab

2+Conteúdo

1. Controle de fluxo

2. Programaçãoi. Scripts

ii. Funções

3. 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 MatlabA 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 = 1.5058

JACEE - 2014 - Matlab

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 diferenciaisSolvers 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

37+3. Simulação de sistemas descritos por equações diferenciais

JACEE - 2014 - Matlab

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

41+Atividade proposta 2: Simular um sistema com massa+mola+amortecedor

M=1kgB=2K=1f(t)=1Newton

JACEE - 2014 - Matlab

42+Atividade proposta 3: simular uma equação não-linear

Simular a equação diferencial abaixo com as condições iniciais dadas

top related