introduction matlab

18
Tutorial de Introdu¸ c˜ao ao Matlab [email protected] 2012 Neste breve tutorial os comandos de Matlab ser˜ao apresentados dentro de “caixas” para facilitar sua visualiza¸ c˜ao. comando do Matlab 1 Janelas do Matlab Uma breve descri¸c˜ao das janelas do Matlab: command window: janela na qual s˜ao colocadas linhas de comando e na qual s˜ao 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˜ao feitas as m-files, arquivos que possuem extens˜ ao “.m”. Uma m-file pode ser simplesmente uma se- quencia de linhas de comando, formando assim um roteiro; ou ent˜ao pode ser uma fun¸ ao, que ser´a vista mais adiante; workspace: janela que mostra todas as vari´aveis existentes. Se qui- sermos apagar todas as vari´aveis do workspace devemos comandar clear all ; command history: janela que exibe a sequencia dos comandos que foram executados na command window. Para n˜ao ter que digitarnova- mente comandos executados anteriormente clique para cima na com- mand window; 1

Upload: arnoldo-furtado

Post on 07-Nov-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Programacao

TRANSCRIPT

  • Tutorial de Introducao ao Matlab

    [email protected]

    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