introduction matlab
DESCRIPTION
ProgramacaoTRANSCRIPT
-
Tutorial de Introducao ao Matlab
2012
Neste breve tutorial os comandos de Matlab serao apresentados dentrode caixas para facilitar sua visualizacao.
comando do Matlab
1 Janelas do Matlab
Uma breve descricao das janelas do Matlab:
command window: janela na qual sao colocadas linhas de comandoe na qual sao apresentados os resultados e as mensagens de erro.Se quisermos limpar a janela command window devemos comandarclc ;
janela do Editor: janela na qual sao feitas as m-files, arquivos quepossuem extensao .m. Uma m-file pode ser simplesmente uma se-quencia de linhas de comando, formando assim um roteiro; ouentao pode ser uma funcao, que sera vista mais adiante;
workspace: janela que mostra todas as variaveis existentes. Se qui-sermos apagar todas as variaveis do workspace devemos comandarclear all ;
command history: janela que exibe a sequencia dos comandos queforam executados na command window. Para nao ter que digitar nova-mente comandos executados anteriormente clique para cima na com-mand window;
1
-
current folder: janela que mostra todo o conteudo presente na pastaselecionada no toolbar current folder.
2 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 nacommand windowacrescente um ponto-vrgula no final (exemplo: x = 0.2;);
o nome de uma variavel pode ser composto por varias letras e numeros,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 espaco ou por vrgula;
pode-se utilizar valores de variaveis, por exemplo:
a = 1;b = 2;c = 3;x = [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 guardana variavel x;
o primeiro elemento tera o valor da variavel x1;
o ultimo 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;
o ultimo elemento tera o valor da variavel xn;
o vetor linha tera um total de n elementos.
4 criando um vetor coluna
x = [1;2;3]
as linhas sao separadas por ponto-vrgula (;);
tambem pode-se aplicar a operacao transaposta () a` um vetor linha:
x = [1,2,3]
3
-
5 lendo o comprimento de um vetor - co-
mando length
n = length(x)
retorna o numero de elementos de um vetor linha ou coluna x.
6 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 o ultimo o elemento do vetor
ultimoelem = x(end)
seleciona o ultimo 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 elementodo 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:
A =
1 2 34 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 diagonalprincipal.
8 lendo as dimensoes de uma matriz - co-
mando size
[nl,nc] = size(A)
retorna os valores do numero de linhas e do numero de colunas;
neste exemplo esses valores sao colocados nas variaveis nl e nc respec-tivamente.
9 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.
5
-
10 criando funcoes
Uma funcao possui a seguinte estrutura:
function output = NomeDaFuncao(input)... % calculos intermediarios
output = ...; % calculo 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 omesmo nome da funcao, exemplo: NomeDaFuncao.m;
a funcao e chamada pelo NomeDaFuncao, como no exemplo de roteiroa seguir:
x = 0.2;
y = NomeDaFuncao(x);
Neste exemplo, o valor do output retornado pela funcao foi colocado navariavel 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);
6
-
Tambem podemos colocar os valores dos parametros CD0, k1 e k em umvetor 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 cuidadopara nao confundir a ordem dos parametros. Para contornar este problemapodemos 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 = 0m
T0 = 288, 15K
g0 = 9, 80665m/s2
0 = 1, 225 kg/m3
L = 6, 5 103K/m
R = 287, 053m2/s2-K
Vamos agrupar todos esses valores na variavel 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 logica...
else...
end
Na estrutura logica podemos utilizar operadores relacionais e operado-res logicos. Exemplos de operadores relacionais: igual (==), diferente ( =),maior (>), maior ou igual (>=), menor (
-
function T = temperatura(H,paramAtm)
T0 = paramAtm.T0;
L = paramAtm.L;
H0 = paramAtm.H0;
if H
-
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 paraplotar os graficos de T H e H .
14 Problema de valor inicial
Muitos modelos em engenharia sao matematicamente expressos na forma deum sistema de n equacoes diferenciais ordinarias:
y1(t) = f1 (t, y1(t), y2(t), . . . , yn(t))
y2(t) = f2 (t, y1(t), y2(t), . . . , yn(t))
...
yn(t) = fn (t, y1(t), y2(t), . . . , yn(t))
ou simplesmente:yyy(t) = fff (t, yyy(t))
onde t I R, yyy N Rn e fff : I N Rn.
Resolver um problema de valor inicial (PVI) significa encontrar a fun-cao y : I N que satifaz a equacao diferencial yyy(t) = fff (t, yyy(t)) e tambemsatisfaz a uma condicao inicial yyy(t = ti) = yyyi
10
-
OTeorema Fundamental do Calculo estabelece uma importante cone-xao entre as equacoes diferenciais e as intregrais, dentro de algumas condicoes(vide mat-12):
yyy(tf) = xxx(ti) +
tfti
fff (s,yyy(s))ds
Repare que para realizar essa integral e preciso conhecer:
a funcao dinamica fff (t, yyy(t));
a condicao inicial yi;
e o intervalo de integracao [titf ].
Nem sempre e possvel resolver um PVI analiticamente. Nesses casos po-demos recorrer a algoritmos ja implementados no Matlab, como por exemploo 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 emum vetor [ti tf];
depois vem a condicao inicial yi;
em options, podemos ajustar parametros do algoritmo de integracaocomo, por exemplo, tolerancia absoluta, tolerancia relativa, etc . . . (videodeset no help). Se nao quisermos modificar a configuracao padraopodemos deixar este campo vazio escrevendo [];
e por ultimo colocamos os parametros que queremos levar para dentroda funcao dinamica.
A funcao dinamica deve ter a seguinte estrutura:
function doty = f(t,y,parametros)... % calculos intermediarios
doty = [doty1; doty2; ...; dotyn];
11
-
O resultado numerico ficara guardado na estrutura sol. Para extrair ovetor 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 que possui a seguinte forma:
Y =
y1(ti) y1(t2) y1(t3) . . . y1(tf)y2(ti) y2(t2) y2(t3) . . . y2(tf)...
......
...yn(ti) yn(t2) yn(t3) . . . yn(tf )
14.2 comando deval
Tambem pode ser util 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 aplicacao e na criacao de filmes, que consistem em umasequencia de frames com uma taxa constante.
14.3 resultado direto
Uma forma de colocar os resultados fornecido pelo ode45 diretamente em Te Y:
[T,Y] = ode45(@f,[ti tf],yi,options,parametros)
Porem a matriz Y tera outra disposicao:
Y =
y1(ti) y2(ti) . . . yn(ti)y1(t2) y2(t2) . . . yn(t2)y1(t3) y2(t3) . . . yn(t3)
......
......
y1(tf ) y2(tf) . . . yn(tf )
12
-
14.4 Exemplo: Atrator Caotico de Lorenz
As equacoes de Lorenz resultam da simplificacao de modelos de conveccaoatmosferica, e sao descritas pelo sistema de equacoes diferenciais ordinariasa seguir:
y1 = (y2 y1)
y2 = y1( y3) y2
y3 = y1y2 y3
Note que trata-se de um sistema dinamico tri-dimensional, nao linear edeterminstico.
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 plotagem
15.1 plot
Para visualizar a trajetoria de cada um dos estados podemos usar o comandoplot:
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 ro-teiro a seguir sao feitas duas simulacoes das equacoes de Lorenz, com a di-ferenca que o estado inicial da segunda simulacao possui um incremento de1e 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 ocomando subplot antes de cada plot:
subplot(linhas,colunas,numero)
onde linhas e o numero total de linhas da figura, colunas e o numerototal de colunas e numero e o numero do grafico na figura.
Por exemplo, se quisermos colocar os tres graficos da simulacao das equa-coes 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 comandoplot3.
Ainda no exemplo das equacoes de Lorenz teremos:
figure
plot3(YA(1,:),YA(2:),YA(3,:))
xlabel(y1), ylabel(y2), zlabel(y3)
16 aviao modelo ponto-massa longitudinal
Neste exemplo vamos simular a dinamica de uma aeronave. O movimentosera restrito apenas ao plano vertical, tambem chamado de longitudinal, emtermos praticos a aeronave nao faz curvas. As equacoes sao derivadas nasaulas teoricas e correspondem a um modelo ponto-massa da aeronave. Issosignifica 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 saoconsiderados instantaneos.
mV = F cos( + F )D mg sin
mV = F sin( + F ) + Lmg cos
H = V sin
xt = 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 2SrefCLarrasto aerodinamico: D = 0.5V 2SrefCD
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 numero de Mach e donumero de Reynolds
modelo parabolico do coeficiente de arrasto:
CD = CD0 +K1CL +KC2L
obs: os coeficientes da polar de arrasto tambem sao funcoes do numerode Mach e do numero de Reynolds.
16
-
modelo da forca propulsiva:
F = mFmaxi
(V
Vi
)nV ( i
)n;
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:
x =
VHxo
, u =
[m
]
Para uma aeronave tipo Airbus 320, cruzando a 10000 metros de altitudecom velocidade aerodinamica de 210 m/s:
m = 120000; Sref = 260;CL0 = 0; CL = 4.982;CD0 = 0.0175; K1 = 0; K = 0.06;F = 1pi/180; nV = 0; n = 0.75;Fmaxi = 240000; Vi = 100; i = 1.225;
16.1 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 ummovimento oscilatorio, tambem conhecido comofugoidal. Neste movimentoha uma troca oscilatoria de energia potencial e energia cinetica, ha dissipacaopela forca de arrasto e ha trabalho da forca propulsiva.
17 fsolve
Intuitivamente, um ponto de equilbrio e uma condicao em que nao ha ten-dencia de alteracao do movimento ao longo do tempo. Colocar a aeronaveem um ponto inicial de equilbrio significa encontrar os valores dos estadose controles tais que a aeronave continuaria voando sem as oscilacoes apre-sentadas na simulacao anterior. Para isso e necessario que as derivadas dosestados V , e H sejam nulas. Assim, temos que encontrar a solucao para osistema de equacoes nao lineares:
17
-
0 = F cos(+ F )D mg sin
0 = F sin( + F ) + Lmg cos
0 = V sin
Repare que a terceira equacao e satisfeita para V = 0 ou sin = 0. Comonao 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 ) + Lmg cos
18 Trabalho
Utilize o comando fsolve para realizar esta tarefa. Se o aluno ja estiverfamiliarizado com qualquer outro algoritmo que substitua o fsolve podeutiliza-lo.
18.1 dicas
Lembre-se que para resolver um sistema de duas equacoes precisamosusar duas variaveis. Como a velocidade e a altitude de cruzeiro saodados de entrada do problema, e deve ser zero para que H seja nulo,sobraram apenas as variaveis de controle m e para resolver o sistemade duas equacoes.
veja os exemplos do help. Quem nao tem o help completo instaladovisite o site: www.mathworks.com/help/toolbox/optim/ug/fsolve.html
nao deixe para ultima hora! Envie ja suas duvidas para [email protected]
18.2 data de entrega
segunda-feira, 2 de abril de 2012.
18
Janelas do MatlabCriando um escalarCriando um vetor linhaespecificando cada elementocolon operatorcomando linspace
criando um vetor colunalendo o comprimento de um vetor - comando lengthselecionando elementos de um vetoro i-simo elemento de um vetoro ltimo o elemento do vetoruma parte do vetor
criando uma matrizespecificando cada elementocomando onescomando zeroscomando diag
lendo as dimenses de uma matriz - comando sizeselecionando o elemento (i,j) da matrizcriando funesExemplo: polar de arrasto
structuresExemplo: structure
if - elseExemplo: funo temperaturaExemplo: funo densidade
forExerccio: plotar
Problema de valor inicialode45comando devalresultado diretoExemplo: Atrator Catico de Lorenz
plotagemplotsubplotplot3
avio modelo ponto-massa longitudinalexercicio
fsolveTrabalhodicasdata de entrega