Você está na página 1de 18

Tutorial de Introducao ao Matlab

morales@ita.br
2012
Neste breve tutorial os comandos de Matlab serao apresentados dentro
de caixas para facilitar sua visualizacao.
comando do Matlab

Janelas do Matlab

Uma breve descricao das janelas do Matlab:


command window: janela na qual sao colocadas linhas de comando
e na qual sao apresentados os resultados e as mensagens de erro.
Se quisermos limpar a janela command window devemos comandar
clc ;
janela do Editor: janela na qual sao feitas as m-files, arquivos que
possuem extensao .m. Uma m-file pode ser simplesmente uma sequencia de linhas de comando, formando assim um roteiro; ou
entao pode ser uma func
ao, que sera vista mais adiante;
workspace: janela que mostra todas as variaveis existentes. Se quisermos apagar todas as variaveis do workspace devemos comandar
clear all ;
command history: janela que exibe a sequencia dos comandos que
foram executados na command window. Para nao ter que digitar novamente comandos executados anteriormente clique para cima na command window;
1

current folder: janela que mostra todo o conte


udo presente na pasta
selecionada no toolbar current folder.

Criando um escalar
x = 0.2
guarda o valor escalar 0, 2 na variavel x;
deve-se utilizar o ponto decimal no lugar da vrgula;
para que o matlab nao repita o valor da variavel na command window
acrescente um ponto-vrgula no final (exemplo: x = 0.2;);
o nome de uma variavel pode ser composto por varias letras e n
umeros,
iniciando sempre com uma letra (exemplo: variavelx1 = 0.2)

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 espaco ou por vrgula;
pode-se utilizar valores de variaveis, por exemplo:
a
b
c
x

=
=
=
=

1;
2;
3;
[a,b,c];

ou entao:
a = 1;
b = [2,3];
x = [a,b];
2

3.2

colon operator
x = x1:step:xn

cria um vetor linha com elementos linearmente espacados e o guarda


na variavel x;
o primeiro elemento tera o valor da variavel x1;
ou
ltimo elemento tera o valor da variavel xn;
o valor dos elementos tera um passo de valor step;
as variaveis x1, step e xn devem ser criadas anteriormente.

3.3

comando linspace
x = linspace(x1,xn,n)

cria um vetor linha com elementos linearmente espacados;


o primeiro elemento tera o valor da variavel x1;
ou
ltimo elemento tera o valor da variavel xn;
o vetor linha tera um total de n elementos.

criando um vetor coluna


x = [1;2;3]
as linhas sao separadas por ponto-vrgula (;);
tambem pode-se aplicar a operac
ao transaposta () a` um vetor linha:
x = [1,2,3]

lendo o comprimento de um vetor - comando length


n = length(x)
retorna o n
umero de elementos de um vetor linha ou coluna x.

selecionando elementos de um vetor

6.1

o i-
esimo elemento de um vetor
ielem = x(i)

seleciona o i-esimo elemento do vetor linha ou coluna x.

6.2

ou
ltimo o elemento do vetor
ultimoelem = x(end)

seleciona o u
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-esimo ao (i+a)-esimo elemento


do vetor linha ou coluna x.

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)

constroi uma matriz de unitarios com m linhas e n colunas.

7.3

comando zeros
A = zeros(m,n)

constroi uma matriz de zeros com m linhas e n colunas.

7.4

comando diag
A = diag([1,2,3])

constroi uma matriz diagonal com os elementos 1, 2 e 3 na diagonal


principal.

lendo as dimens
oes de uma matriz - comando size
[nl,nc] = size(A)
retorna os valores do n
umero de linhas e do n
umero de colunas;
neste exemplo esses valores sao colocados nas variaveis nl e nc respectivamente.

selecionando o elemento (i,j) da matriz


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

10

criando funco
es

Uma funcao possui a seguinte estrutura:


function output = NomeDaFuncao(input)
.
.
alculos intermedi
arios
. % c
output = ...; % c
alculo final
o valor da entrada e colocado na variavel local input;
a funcao retorna o valor que estiver na variavel local output;
input e output podem ter mais de uma dimensao;
quando criamos uma m-file para uma funcao, devemos salva-la com o
mesmo nome da funcao, exemplo: NomeDaFuncao.m;
a funcao e chamada pelo NomeDaFuncao, como no exemplo de roteiro
a seguir:
x = 0.2;
y = NomeDaFuncao(x);
Neste exemplo, o valor do output retornado pela funcao foi colocado na
variavel 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 sao colocados em variaveis locais,


note que a funcao PolarArrasto tambem poderia ser assim:
function y = PolarArrasto(x,a0,a1,a2)
y = a0 + a1*x + a2*x^2;
Um exemplo de roteiro que utiliza a funcao PolarArrasto:
CD0 = 0.01; k1 = 0; k = 0.02;
CL = 0.5;
CD = PolarArrasto(CL,CD0,k1,k);

Tambem podemos colocar os valores dos parametros CD0, k1 e k em um


vetor paramPolar:
CD0 = 0.01; k1 = 0; k = 0.02;
paramPolar = [CD0,k1,k];
Entao a funcao PolarArrasto tomara 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 nao confundir a ordem dos parametros. Para contornar este problema
podemos utilizar uma structure ao inves do vetor linha.

11

structures

Dados de varios tipos podem ser agrupados em uma structure: escalares,


vetores, matrizes etc ...

11.1

Exemplo: structure

Os valores de referencia (nvel do mar) da atmosfera padrao (ISA) sao:


H0 = 0 m
T0 = 288, 15 K
g0 = 9, 80665 m/s2
0 = 1, 225 kg/m3
L = 6, 5 103 K/m
R = 287, 053 m2/s2 -K
Vamos agrupar todos esses valores na variavel paramAtm, do tipo structure:

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
ogica
.
.
.
else
.
.
.
end
Na estrutura l
ogica podemos utilizar operadores relacionais e operadores logicos. Exemplos de operadores relacionais: igual (==), diferente ( =),
maior (>), maior ou igual (>=), menor (<), menor ou igual (<=). Exemplos
de operadores relacionais: e (&), ou (|).

12.1

Exemplo: fun
c
ao temperatura

Iremos trabalhar ate 20.000 metros de altitude, e a funcao temperatura da


atmosfera padrao correspondente e 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 103 K/m;
Um exemplo de funcao temperatura em matlab:

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
c
ao densidade

Ate 20.000 metros de altitude a funcao densidade da atmosfera padrao e dada


por:

(H) =

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


se H 11000 m
(g0 (H11000)/(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


103 K/m; R = 287, 053 m2 /s2 -K
Um exemplo de funcao 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

13

for

Estrutura do for:
for k = kinicial:passo:kfinal
.
.
.
end
a variavel k inicial com o valor kinicial;
em cada iteracao o valor de k e aumentado de um passo;
as iteracoes sao terminam quando a variavel k atinge o valor kfinal.

13.1

Exerccio: plotar

Utilize as funcoes temperatura e densidade e a funcao plot do matlab para


plotar os graficos de T H e H.

14

Problema de valor inicial

Muitos modelos em engenharia sao matematicamente expressos na forma de


um sistema de n equac
oes diferenciais ordin
arias:
y 1 (t) = f1 (t, y1(t), y2 (t), . . . , yn (t))
y 2 (t) = f2 (t, y1(t), y2 (t), . . . , yn (t))
..
.
y 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 funcao y : I N que satifaz a equacao diferencial y (t) = f (t, y (t)) e tambem
satisfaz a uma condic
ao inicial y (t = ti ) = y i

10

O Teorema Fundamental do C
alculo estabelece uma importante conexao entre as equacoes diferenciais e as intregrais, dentro de algumas condicoes
(vide mat-12):
Z
tf

f (s, y (s))ds

y (tf ) = x (ti ) +

ti

Repare que para realizar essa integral e preciso conhecer:


a funcao dinamica f (t, y (t));
a condicao inicial yi ;
e o intervalo de integracao [ti tf ].
Nem sempre e possvel resolver um PVI analiticamente. Nesses casos podemos recorrer a algoritmos ja 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 funcao dinamica (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 condicao inicial yi;
em options, podemos ajustar parametros do algoritmo de integracao
como, por exemplo, tolerancia absoluta, tolerancia relativa, etc . . . (vide
odeset no help). Se nao quisermos modificar a configuracao padrao
podemos deixar este campo vazio escrevendo [];
e por u
ltimo colocamos os parametros que queremos levar para dentro
da funcao dinamica.
A funcao dinamica deve ter a seguinte estrutura:
function doty = f(t,y,parametros)
.
.
alculos intermedi
arios
. % c
doty = [doty1; doty2; ...; dotyn];
11

O resultado numerico ficara 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 solucao associada a este vetor tempo comanda-se:


Y = sol.y;

Note que Y e uma matriz e

y1 (ti )
y2 (ti )

Y = ..
.
yn (ti )

14.2

que possui a seguinte forma:

y1 (t2 ) y1 (t3 ) . . . y1 (tf )


y2 (t2 ) y2 (t3 ) . . . y2 (tf )

..
..
..

.
.
.
yn (t2 ) yn (t3 ) . . . yn (tf )

comando deval

Tambem pode ser u


til criar um outro vetor tempo diferente de sol.x e calcular a matriz Y correspondente. Para isso utiliza-se o comando deval:
T = linspace(ti,tf,n)
Y = deval(sol,T)
Um exemplo de aplicacao e na criacao 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)
Porem a matriz Y tera outra disposicao:

y1 (ti ) y2 (ti ) . . .
y1 (t2 ) y2 (t2 ) . . .

Y = y1 (t3 ) y2 (t3 ) . . .

..
..
..

.
.
.
y1 (tf ) y2 (tf ) . . .
12

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

14.4

Exemplo: Atrator Ca
otico de Lorenz

As equacoes de Lorenz resultam da simplificacao de modelos de conveccao


atmosferica, e sao descritas pelo sistema de equacoes diferenciais ordinarias
a seguir:
y 1 = (y2 y1 )
y 2 = y1 ( y3 ) y2
y 3 = y1 y2 y3
Note que trata-se de um sistema dinamico tri-dimensional, nao linear e
determinstico.
A funcao dinamica 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 simulacao das equacoes 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
15.1

plotagem
plot

Para visualizar a trajetoria 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)
Tambem podemos colocar varias trajetorias em um mesmo plot. No roteiro a seguir sao feitas duas simulacoes das equacoes de Lorenz, com a diferenca que o estado inicial da segunda simulacao 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 varios graficos numa mesma figura podemos usar o


comando subplot antes de cada plot:
subplot(linhas,colunas,numero)
onde linhas e o n
umero total de linhas da figura, colunas e o n
umero
total de colunas e numero e o n
umero do grafico na figura.
Por exemplo, se quisermos colocar os tres graficos da simulacao das equacoes de Lorenz em uma figura, dispostos em tres 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 visualizacao de uma linha tri-dimensional podemos usar o comando


plot3.
Ainda no exemplo das equacoes de Lorenz teremos:
figure
plot3(YA(1,:),YA(2:),YA(3,:))
xlabel(y1), ylabel(y2), zlabel(y3)

16

avi
ao modelo ponto-massa longitudinal

Neste exemplo vamos simular a dinamica de uma aeronave. O movimento


sera restrito apenas ao plano vertical, tambem chamado de longitudinal, em
termos praticos a aeronave nao faz curvas. As equacoes sao derivadas nas
aulas teoricas e correspondem a um modelo ponto-massa da aeronave. Isso
significa que derivam da segunda lei de Newton para translacao apenas, a
15

segunda lei de Newton para rotacao e ignorada e os efeitos de rotacao sao


considerados instantaneos.
mV = F cos( + F ) D mg sin
mV = F sin( + F ) + L mg cos
H = V sin
x t = V cos
onde:
V e a velocidade aerodinamica;
e o angulo de trajetoria;
e o angulo de ataque;
forcas aerodinamicos:
sustentacao aerodinamica: L = 0.5V 2 Sref CL
arrasto aerodinamico:
D = 0.5V 2 Sref CD
onde:
CL e o coeficiente adimensional de sustentacao;
CD e o coeficiente adimensional de arrasto;
e a densidade atmosferica;
Sref e a area de referencia usada na adimensionalizacao;
modelo linear do coeficiente de sustentacao:
CL = CL0 + CL
onde CL e uma derivada de estabilidade;
obs: as derivadas de estabilidade sao funcoes do n
umero de Mach e do
n
umero de Reynolds
modelo parabolico do coeficiente de arrasto:
CD = CD0 + K1 CL + KCL2
obs: os coeficientes da polar de arrasto tambem sao funcoes do n
umero
de Mach e do n
umero de Reynolds.

16

modelo da forca propulsiva:


F = mFmaxi

V
Vi

nV  n

;
i

onde:
m e a deflexao da manete do motor (0 m 1);
Fmaxi , Vi e i sao valores de referecia do modelo propulsivo.
estados e controles:

V



m

,
u=
x=

H
xo

Para uma aeronave tipo Airbus 320, cruzando a 10000 metros de altitude
com velocidade aerodinamica de 210 m/s:
m = 120000;
CL0 = 0;
CD0 = 0.0175;
F = 1/180;
Fmaxi = 240000;

16.1

Sref = 260;
CL = 4.982;
K1 = 0;
K = 0.06;
nV = 0;
n = 0.75;
Vi = 100;
i = 1.225;

exercicio

Faca uma simulacao da aeronave com controles = 5 graus e m = 0.5.


Repare que a velocidade, o angulo de trajetoria e a altitude apresentam um
movimento oscilatorio, tambem conhecido como fugoidal. Neste movimento
ha uma troca oscilatoria de energia potencial e energia cinetica, ha dissipacao
pela forca de arrasto e ha trabalho da forca propulsiva.

17

fsolve

Intuitivamente, um ponto de equilbrio e uma condicao em que nao ha tendencia de alteracao do movimento ao longo do tempo. Colocar a aeronave
em um ponto inicial de equilbrio significa encontrar os valores dos estados
e controles tais que a aeronave continuaria voando sem as oscilacoes apresentadas na simulacao anterior. Para isso e necessario que as derivadas dos
estados V , e H sejam nulas. Assim, temos que encontrar a solucao para o
sistema de equacoes nao lineares:

17

0 = F cos( + F ) D mg sin
0 = F sin( + F ) + L mg cos
0 = V sin
Repare que a terceira equacao e satisfeita para V = 0 ou sin = 0. Como
nao se trata de um voo pairado ficamos com sin = 0, que implica em = 0.
Assim o nosso sistema e reduzindo para duas equacoes nao 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 ja estiver


familiarizado com qualquer outro algoritmo que substitua o fsolve pode
utiliza-lo.

18.1

dicas

Lembre-se que para resolver um sistema de duas equacoes precisamos


usar duas variaveis. Como a velocidade e a altitude de cruzeiro sao
dados de entrada do problema, e deve ser zero para que H seja nulo,
sobraram apenas as variaveis de controle m e para resolver o sistema
de duas equacoes.
veja os exemplos do help. Quem nao tem o help completo instalado
visite o site: www.mathworks.com/help/toolbox/optim/ug/fsolve.html
nao deixe para u
ltima hora! Envie ja suas d
uvidas para morales@ita.br

18.2

data de entrega

segunda-feira, 2 de abril de 2012.

18

Você também pode gostar