Вы находитесь на странице: 1из 18

Tutorial de Introdução ao Matlab

morales@ita.br

2012

Neste breve tutorial os comandos de Matlab serão apresentados dentro


de “caixas” para facilitar sua visualização.
comando do Matlab

1 Janelas do Matlab
Uma breve descrição das janelas do Matlab:
• command window: janela na qual são colocadas linhas de comando
e na qual são apresentados os resultados e as mensagens de erro.
Se quisermos limpar a janela command window devemos comandar
clc ;

• janela do Editor: janela na qual são feitas as m-files, arquivos que


possuem extensão “.m”. Uma m-file pode ser simplesmente uma se-
quencia de linhas de comando, formando assim um roteiro; ou
então pode ser uma função, que será vista mais adiante;

• workspace: janela que mostra todas as variáveis existentes. Se qui-


sermos apagar todas as variáveis do workspace devemos comandar
clear all ;

• command history: janela que exibe a sequencia dos comandos que


foram executados na command window. Para não ter que digitar nova-
mente comandos executados anteriormente clique para cima na com-
mand window;

1
• current folder: janela que mostra todo o conteúdo presente na pasta
selecionada no toolbar current folder.

2 Criando um escalar
x = 0.2
• guarda o valor escalar 0, 2 na variável x;
• deve-se utilizar o ponto decimal no lugar da vı́rgula;
• para que o matlab não repita o valor da variável na “command window”
acrescente um ponto-vı́rgula no final (exemplo: x = 0.2;);
• o nome de uma variável pode ser composto por várias letras e números,
iniciando sempre com uma letra (exemplo: variavelx1 = 0.2)

3 Criando um vetor linha


Existem diversas maneiras de criar vetores linha, a seguir:

3.1 especificando cada elemento


x = [1 2 3] ou x = [1,2,3]
• cria um vetor linha com os valores especificados;
• cada elemento pode ser separado por espaço ou por vı́rgula;
• pode-se utilizar valores de variáveis, por exemplo:
a = 1;
b = 2;
c = 3;
x = [a,b,c];
ou então:
a = 1;
b = [2,3];
x = [a,b];

2
3.2 colon operator
x = x1:step:xn

• cria um vetor linha com elementos linearmente espaçados e o guarda


na variável x;

• o primeiro elemento terá o valor da variável “x1”;

• o último elemento terá o valor da variável “xn”;

• o valor dos elementos terá um passo de valor “step”;

• as variáveis “x1”, “step” e “xn” devem ser criadas anteriormente.

3.3 comando linspace


x = linspace(x1,xn,n)

• cria um vetor linha com elementos linearmente espaçados;

• o primeiro elemento terá o valor da variável “x1”;

• o último elemento terá o valor da variável “xn”;

• o vetor linha terá um total de “n” elementos.

4 criando um vetor coluna


x = [1;2;3]

• as linhas são separadas por ponto-vı́rgula (;);

• também pode-se aplicar a operação transaposta (’) à um vetor linha:

x = [1,2,3]’

3
5 lendo o comprimento de um vetor - co-
mando length
n = length(x)
• retorna o número de elementos de um vetor linha ou coluna x.

6 selecionando elementos de um vetor


6.1 o i-ésimo elemento de um vetor
ielem = x(i)
• seleciona o i-ésimo elemento do vetor linha ou coluna x.

6.2 o último o elemento do vetor


ultimoelem = x(end)
• seleciona o último elemento do vetor linha ou coluna x.

6.3 uma parte do vetor


iaoiaelem = x(i:i+a)
• seleciona a parte do vetor que vai do i-ésimo ao (i+a)-ésimo elemento
do vetor linha ou coluna x.

7 criando uma matriz


7.1 especificando cada elemento
A = [1 2 3; 4 5 6; 7 8 9]
• cria a seguinte matriz:
 
1 2 3
A= 4 5 6 
7 8 9

4
7.2 comando ones
A = ones(m,n)
• constrói uma matriz de unitários com m linhas e n colunas.

7.3 comando zeros


A = zeros(m,n)
• constrói uma matriz de zeros com m linhas e n colunas.

7.4 comando diag


A = diag([1,2,3])
• constrói uma matriz diagonal com os elementos 1, 2 e 3 na diagonal
principal.

8 lendo as dimensões de uma matriz - co-


mando size
[nl,nc] = size(A)
• retorna os valores do número de linhas e do número de colunas;
• neste exemplo esses valores são colocados nas variáveis nl e nc respec-
tivamente.

9 selecionando o elemento (i,j) da matriz


ijelem = A(i,j)
• seleciona o elemento da i-ésima linha e j-ésima coluna da matriz A.

5
10 criando funções
Uma função possui a seguinte estrutura:

function output = NomeDaFuncao(input)


.
.
. % cálculos intermediários
output = ...; % cálculo final

• o valor da entrada é colocado na variável local input;

• a função retorna o valor que estiver na variável local output;

• input e output podem ter mais de uma dimensão;

• quando criamos uma m-file para uma função, devemos salvá-la com o
mesmo nome da função, exemplo: NomeDaFuncao.m;

• a função é chamada pelo NomeDaFuncao, como no exemplo de roteiro


a seguir:

x = 0.2;
y = NomeDaFuncao(x);

Neste exemplo, o valor do output retornado pela função foi colocado na


variável y.

10.1 Exemplo: polar de arrasto


function CD = PolarArrasto(CL,CD0,k1,k)
CD = CD0 + k1*CL + k*CL^2;

Como os valores dos inputs e do output são colocados em variáveis locais,


note que a função PolarArrasto também poderia ser assim:

function y = PolarArrasto(x,a0,a1,a2)
y = a0 + a1*x + a2*x^2;

Um exemplo de roteiro que utiliza a função PolarArrasto:

CD0 = 0.01; k1 = 0; k = 0.02;


CL = 0.5;
CD = PolarArrasto(CL,CD0,k1,k);

6
Também podemos colocar os valores dos parâmetros CD0, k1 e k em um
vetor paramPolar:

CD0 = 0.01; k1 = 0; k = 0.02;


paramPolar = [CD0,k1,k];

Então a função PolarArrasto tomará a seguinte forma:

function CD = PolarArrasto(CL,paramPolar)
CD0 = paramPolar(1);
k1 = paramPolar(2);
k = paramPolar(3);
CD = CD0 + k1*CL + k*CL^2;

Ao armazenar muitos valores em um vetor linha deve-se tomar cuidado


para não confundir a ordem dos parâmetros. Para contornar este problema
podemos utilizar uma “structure” ao invés do vetor linha.

11 structures
Dados de vários tipos podem ser agrupados em uma “structure”: escalares,
vetores, matrizes etc ...

11.1 Exemplo: structure


Os valores de referência (nı́vel do mar) da atmosfera padrão (ISA) são:

H0 = 0 m
T0 = 288, 15 K
g0 = 9, 80665 m/s2
ρ0 = 1, 225 kg/m3
L = −6, 5 × 10−3 K/m
R = 287, 053 m2/s2 -K

Vamos agrupar todos esses valores na variável paramAtm, do tipo “struc-


ture”:

7
paramAtm.H0 = 0;
paramAtm.T0 = 288.15;
paramAtm.g0 = 9.80665;
paramAtm.rho0 = 1.225;
paramAtm.L = -6.5*10^(-3);
paramAtm.R = 287.053;

Para utilizar o valor de R basta fazermos:

R = paramAtm.R

12 if - else
Estrutura do if - else:
if estrutura lógica
.
.
.
else
.
.
.
end
Na estrutura lógica podemos utilizar operadores relacionais e operado-
res lógicos. Exemplos de operadores relacionais: igual (==), diferente ( =),
maior (>), maior ou igual (>=), menor (<), menor ou igual (<=). Exemplos
de operadores relacionais: e (&), ou (|).

12.1 Exemplo: função temperatura


Iremos trabalhar até 20.000 metros de altitude, e a função temperatura da
atmosfera padrão correspondente é dada por:

T0 + L(H − H0 ) se H ≤ 11000 m
T (H) =
cte = T (11000) se 11000 < H < 20000 m
onde: H0 = 0 m; T0 = 288, 15 K; L = −6, 5 × 10−3 K/m;

Um exemplo de função temperatura em matlab:

8
function T = temperatura(H,paramAtm)
T0 = paramAtm.T0;
L = paramAtm.L;
H0 = paramAtm.H0;
if H <= 11000
T = T0 + L*(H-H0);
else
T = temperatura(11000,paramAtm);
end

12.2 Exemplo: função densidade


Até 20.000 metros de altitude a função densidade da atmosfera padrão é dada
por:

ρ0 (T (H)/T0 )−(1+g0 /(R.L))



se H ≤ 11000 m
ρ(H) = (−g0 (H−11000)/(R.T (11000)))
ρ(11000)e se 11000 < H < 20000 m

onde: g0 = 9, 80665 m/s2 ; T0 = 288, 15 K; ρ0 = 1, 225 kg/m3 ; L = −6, 5 ×


10−3 K/m; R = 287, 053 m2 /s2 -K

Um exemplo de função densidade em matlab:

function rho = densidade(H,paramAtm)


rho0 = paramAtm.rho0;
T0 = paramAtm.T0;
g0 = paramAtm.g0;
R = paramAtm.R;
L = paramAtm.L;
if H <= 11000
rho = rho0*(temperatura(H,paramAtm)/T0)^-(1+g0/(R*L));
else
rho = densidade(11e3,paramAtm)*exp(-g0*(H-11e3) ...
/(R*temperatura(11e3,paramAtm)));
end

9
13 for
Estrutura do for:
for k = kinicial:passo:kfinal
.
.
.
end

• a variável k inicial com o valor kinicial;

• em cada iteração o valor de k é aumentado de um passo;

• as iterações são terminam quando a variável k atinge o valor kfinal.

13.1 Exercı́cio: plotar


Utilize as funções temperatura e densidade e a função plot do matlab para
plotar os gráficos de T × H e ρ × H.

14 Problema de valor inicial


Muitos modelos em engenharia são matematicamente expressos na forma de
um sistema de n equações diferenciais ordinárias:

ẏ1 (t) = f1 (t, y1(t), y2 (t), . . . , yn (t))


ẏ2 (t) = f2 (t, y1(t), y2 (t), . . . , yn (t))
..
.
ẏn (t) = fn (t, y1 (t), y2 (t), . . . , yn (t))

ou simplesmente:
ẏy (t) = f (t, y (t))
onde t ∈ I ⊂ R, y ∈ N ⊂ Rn e f : I × N → Rn .

Resolver um problema de valor inicial (PVI) significa encontrar a fun-


ção y : I → N que satifaz a equação diferencial ẏy (t) = f (t, y (t)) e também
satisfaz a uma condição inicial y (t = ti ) = y i

10
O Teorema Fundamental do Cálculo estabelece uma importante cone-
xão entre as equações diferenciais e as intregrais, dentro de algumas condições
(vide mat-12): Z tf
y (tf ) = x (ti ) + f (s, y (s))ds
ti

Repare que para realizar essa integral é preciso conhecer:

• a função dinâmica f (t, y (t));

• a condição inicial yi ;

• e o intervalo de integração [ti tf ].

Nem sempre é possı́vel resolver um PVI analiticamente. Nesses casos po-


demos recorrer a algoritmos já implementados no Matlab, como por exemplo
o ode45.

14.1 ode45
Para utilizar o ode45 devemos comandar:

sol = ode45(@f,[ti tf],yi,options,parametros)

• o nome da função dinâmica (f), deve ser prefixada pelo “arroba” (@);

• em seguida devemos fornecer o tempo inicial ti e o tempo final tf em


um vetor [ti tf];

• depois vem a condição inicial yi;

• em options, podemos ajustar parâmetros do algoritmo de integração


como, por exemplo, tolerância absoluta, tolerância relativa, etc . . . (vide
odeset no help). Se não quisermos modificar a configuração padrão
podemos deixar este campo vazio escrevendo [];

• e por último colocamos os parametros que queremos levar para dentro


da função dinâmica.

A função dinâmica deve ter a seguinte estrutura:

function doty = f(t,y,parametros)


.
.
. % cálculos intermediários
doty = [doty1; doty2; ...; dotyn];

11
O resultado numérico ficará guardado na estrutura sol. Para extrair o
vetor tempo escolhido pelo ode45 comanda-se:
T = sol.x;
Este vetor T possui a seguinte forma:
 
T = ti t2 t3 . . . tf
E para extrair a solução associada a este vetor tempo comanda-se:
Y = sol.y;
Note que Y é uma matriz e que possui a seguinte forma:
 
y1 (ti ) y1 (t2 ) y1 (t3 ) . . . y1 (tf )
 y2 (ti ) y2 (t2 ) y2 (t3 ) . . . y2 (tf ) 
Y =  .. .. .. ..
 

 . . . . 
yn (ti ) yn (t2 ) yn (t3 ) . . . yn (tf )

14.2 comando deval


Também pode ser útil criar um outro vetor tempo diferente de sol.x e cal-
cular a matriz Y correspondente. Para isso utiliza-se o comando deval:
T = linspace(ti,tf,n)
Y = deval(sol,T)
Um exemplo de aplicação é na criação de filmes, que consistem em uma
sequencia de “frames” com uma taxa constante.

14.3 resultado direto


Uma forma de colocar os resultados fornecido pelo ode45 diretamente em T
e Y:
[T,Y] = ode45(@f,[ti tf],yi,options,parametros)
Porém a matriz Y terá outra disposição:
 
y1 (ti ) y2 (ti ) . . . yn (ti )
 y1 (t2 ) y2 (t2 ) . . . yn (t2 ) 
 
Y =  y1 (t3 ) y2 (t3 ) . . . yn (t3 )
 
.. .. .. ..

 
 . . . . 
y1 (tf ) y2 (tf ) . . . yn (tf )

12
14.4 Exemplo: Atrator Caótico de Lorenz
As equações de Lorenz resultam da simplificação de modelos de convecção
atmosférica, e são descritas pelo sistema de equações diferenciais ordinárias
a seguir:

ẏ1 = σ(y2 − y1 )
ẏ2 = y1 (ρ − y3 ) − y2
ẏ3 = y1 y2 − βy3

Note que trata-se de um sistema dinâmico tri-dimensional, não linear e


determinı́stico.

A função dinâmica em matlab:

function doty = LorenzDinam(t,y,parametros)


sigma = parametros.sigma;
r = parametros.r;
b = parametros.b;
doty1 = sigma*(y(2) - y(1));
doty2 = y(1)*(r - y(3))-y(2);
doty3 = y(1)*y(2) - b*y(3);
doty = [ doty1; doty2; doty3];

Um roteiro para fazer uma simulação das equações de Lorenz:

parametros.sigma = 10;
parametros.r = 28;
parametros.b = 8/3;

tf = 25;
yi = [5;5;15];
sol = ode45(@LorenzDinam,[0 tf],yi,[],parametros);
T = 0:0.01:tf;
Y = deval(sol,T);

15 plotagem
15.1 plot
Para visualizar a trajetória de cada um dos estados podemos usar o comando
plot:

13
figure
plot(T,Y(1,:))
xlabel(’tempo’),ylabel(’y1’)
figure
plot(T,Y(2,:))
xlabel(’tempo’),ylabel(’y2’)
figure
plot(T,Y(3,:))
xlabel(’tempo’),ylabel(’y3’)

Também podemos colocar várias trajetórias em um mesmo plot. No ro-


teiro a seguir são feitas duas simulações das equações de Lorenz, com a di-
ferença que o estado inicial da segunda simulação possui um incremento de
1e − 5 em y1 :

parametros.sigma = 10;
parametros.r = 28;
parametros.b = 8/3;

tf = 25;
yiA = [5;5;15];
yiB = yiA + [1e-5;0;0];
solA = ode45(@LorenzDinam,[0 tf],yiA,[],parametros);
solB = ode45(@LorenzDinam,[0 tf],yiB,[],parametros);
T = 0:0.01:tf;
YA = deval(solA,T);
YB = deval(solB,T);
figure
plot(T,YA(1,:),T,YB(1,:))
xlabel(’tempo’),ylabel(’y1’)
legend(’simulacao A’,’simulacao B’)
figure
plot(T,YA(2,:),T,YB(2,:))
xlabel(’tempo’),ylabel(’y2’)
legend(’simulacao A’,’simulacao B’)
figure
plot(T,YA(3,:),T,YB(3,:))
xlabel(’tempo’),ylabel(’y3’)
legend(’simulacao A’,’simulacao B’)

14
15.2 subplot
Se quisermos colocar vários gráficos numa mesma figura podemos usar o
comando subplot antes de cada plot:

subplot(linhas,colunas,numero)

onde linhas é o número total de linhas da figura, colunas é o número


total de colunas e numero é o número do gráfico na figura.

Por exemplo, se quisermos colocar os três gráficos da simulação das equa-


ções de Lorenz em uma figura, dispostos em três linhas e uma coluna:

figure
subplot(311),plot(T,YA(1,:),T,YB(1,:))
xlabel(’tempo’),ylabel(’y1’)
legend(’simulacao A’,’simulacao B’)
subplot(312),plot(T,YA(2,:),T,YB(2,:))
xlabel(’tempo’),ylabel(’y2’)
legend(’simulacao A’,’simulacao B’)
subplot(313),plot(T,YA(3,:),T,YB(3,:))
xlabel(’tempo’),ylabel(’y3’)
legend(’simulacao A’,’simulacao B’)

15.3 plot3
Para a visualização de uma linha tri-dimensional podemos usar o comando
plot3.

Ainda no exemplo das equações de Lorenz teremos:

figure
plot3(YA(1,:),YA(2:),YA(3,:))
xlabel(’y1’), ylabel(’y2’), zlabel(’y3’)

16 avião modelo ponto-massa longitudinal


Neste exemplo vamos simular a dinâmica de uma aeronave. O movimento
será restrito apenas ao plano vertical, também chamado de longitudinal, em
termos práticos a aeronave não faz curvas. As equações são derivadas nas
aulas teóricas e correspondem a um modelo ponto-massa da aeronave. Isso
significa que derivam da segunda lei de Newton para translação apenas, a

15
segunda lei de Newton para rotação é ignorada e os efeitos de rotação são
considerados instantâneos.

mV̇ = F cos(α + αF ) − D − mg sin γ


mV γ̇ = F sin(α + αF ) + L − mg cos γ
Ḣ = V sin γ
ẋt = V cos γ

onde:
V é a velocidade aerodinâmica;
γ é o ângulo de trajetória;
α é o ângulo de ataque;

forças aerodinâmicos:

sustentação aerodinâmica: L = 0.5ρV 2 Sref CL


arrasto aerodinâmico: D = 0.5ρV 2 Sref CD
onde:
CL é o coeficiente adimensional de sustentação;
CD é o coeficiente adimensional de arrasto;
ρ é a densidade atmosférica;
Sref é a área de referência usada na adimensionalização;

modelo linear do coeficiente de sustentação:

CL = CL0 + CLα α
onde CLα é uma derivada de estabilidade;

obs: as derivadas de estabilidade são funções do número de Mach e do


número de Reynolds

modelo parabólico do coeficiente de arrasto:

CD = CD0 + K1 CL + KCL2
obs: os coeficientes da polar de arrasto também são funções do número
de Mach e do número de Reynolds.

16
modelo da força propulsiva:
 nV  nρ
V ρ
F = δmFmaxi ;
Vi ρi
onde:
δm é a deflexão da manete do motor (0 ≤ δm ≤ 1);
Fmaxi , Vi e ρi são valores de referêcia do modelo propulsivo.
estados e controles:
 
V  
 γ  δm
x=   , u=
H  α
xo
Para uma aeronave tipo Airbus 320, cruzando a 10000 metros de altitude
com velocidade aerodinâmica de 210 m/s:

m = 120000; Sref = 260;


CL0 = 0; CLα = 4.982;
CD0 = 0.0175; K1 = 0; K = 0.06;
αF = 1π/180; nV = 0; nρ = 0.75;
Fmaxi = 240000; Vi = 100; ρi = 1.225;

16.1 exercicio
Faça uma simulação da aeronave com controles α = 5 graus e δm = 0.5.
Repare que a velocidade, o ângulo de trajetória e a altitude apresentam um
movimento oscilatório, também conhecido como “fugoidal”. Neste movimento
há uma troca oscilatória de energia potencial e energia cinética, há dissipação
pela força de arrasto e há trabalho da força propulsiva.

17 fsolve
Intuitivamente, um ponto de equilı́brio é uma condição em que não há ten-
dencia de alteração do movimento ao longo do tempo. Colocar a aeronave
em um ponto inicial de equilı́brio significa encontrar os valores dos estados
e controles tais que a aeronave continuaria voando sem as oscilações apre-
sentadas na simulação anterior. Para isso é necessário que as derivadas dos
estados V , γ e H sejam nulas. Assim, temos que encontrar a solução para o
sistema de equações não lineares:

17
0 = F cos(α + αF ) − D − mg sin γ
0 = F sin(α + αF ) + L − mg cos γ
0 = V sin γ

Repare que a terceira equação é satisfeita para V = 0 ou sin γ = 0. Como


não se trata de um voo pairado ficamos com sin γ = 0, que implica em γ = 0.
Assim o nosso sistema é reduzindo para duas equações não lineares:

0 = F cos(α + αF ) − D − mg sin γ
0 = F sin(α + αF ) + L − mg cos γ

18 Trabalho
Utilize o comando fsolve para realizar esta tarefa. Se o aluno já estiver
familiarizado com qualquer outro algoritmo que substitua o fsolve pode
utilizá-lo.

18.1 dicas
• Lembre-se que para resolver um sistema de duas equações precisamos
usar duas variáveis. Como a velocidade e a altitude de cruzeiro são
dados de entrada do problema, e γ deve ser zero para que Ḣ seja nulo,
sobraram apenas as variáveis de controle δm e α para resolver o sistema
de duas equações.

• veja os exemplos do help. Quem não tem o help completo instalado


visite o site: www.mathworks.com/help/toolbox/optim/ug/fsolve.html

• não deixe para última hora! Envie já suas dúvidas para morales@ita.br

18.2 data de entrega


• segunda-feira, 2 de abril de 2012.

18

Вам также может понравиться