28
Escola Polit´ ecnica da Universidade de S˜ ao Paulo Tutorial para Scilab Integra¸c˜aodeequa¸c˜ oes do movimento Tutorial escrito pelos monitores: Bruno Peixoto [email protected] Yuri Yokota [email protected] Gustavo Rauscher gustavo [email protected] Gabriel Francisco [email protected] PME2200 - Mecˆ anica B

Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Escola Politecnica da Universidade de Sao Paulo

Tutorial para ScilabIntegracao de equacoes do

movimento

Tutorial escrito pelos monitores:

Bruno [email protected]

Yuri [email protected]

Gustavo Rauschergustavo [email protected]

Gabriel [email protected]

PME2200 - Mecanica B

Page 2: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Sumario

1 Introducao 1

2 Fundamentos de programacao 22.1 Entrada e execucao de comandos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 O Scinotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Entrada e execucao de codigos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4 Metodos de integracao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Aplicacoes em Mecanica 123.1 Sistema massa-mola-amortecedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Partıcula que colide contra o solo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 Veıculo 2D passando por lombada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Bibliografia 26

ii

Page 3: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 1 Introducao

O proposito deste texto e apresentar aos alunos das disciplinas de Mecanica Geral da Escola Politecnicada Universidade de Sao Paulo ferramentas computacionais para a simulacao numerica do comportamentodinamico de sistemas mecanicos.

Para tal proposito sera usado o Scilab, um software de codigo aberto com um ambiente com-putacional ideal para aplicacoes cientıficas e de engenharia. Desenvolvido inicialmente pelo INRIA(http://www.inria.fr/), atualmente o Scilab e mantido e desenvolvido pelo Scilab Enterprises (http://www.scilab-enterprises.com/).

O download da versao mais recente deste software pode ser feito atraves do site http://www.scilab.org/. Antes de fazer o download, certifique-se da versao correta do seu sistema operacional (Windows32 bit, Windows 64 bit ou Mac OS X) e escolha o programa de instalacao adequado.

Este tutorial foi escrito com base na versao 5.4.0 do Scilab, de modo que usuarios de versoes anterioresou posteriores a esta podem precisar adaptar algumas das instrucoes aqui apresentadas.

1

Page 4: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2Fundamentos de programacao

O ambiente de programacao padrao do Scilab e composto pelas seguintes janelas agrupadas e apresentadasna Figura 1: console do Scilab, navegador de arquivos, navegador de variaveis e historico de comandos.

Existem basicamente duas maneiras de efetuar operacoes no Scilab: a primeira e mais simples edigitar os comandos diretamente no console do Scilab, e a segunda e usar um editor de texto, como oSciNotes, para criar um arquivo com extensao “.sce” que podera entao ser executado no console do Scilab.

Em um primeiro momento, onde serao apresentados os comandos basicos, sera usado o modo simplesde programacao, ou seja, digitando os comandos diretamente no console. O uso do editor de texto serafeito mais adiante, quando comecarmos a escrever codigos mais complexos.

Usuarios com pouca ou nenhuma familiaridade com o Scilab sao aconselhados a seguir passo a passoesta primeira parte do tutorial. Os demais podem avancar diretamente para a secao (3).

Figura 2.1: Ambiente de programacao padrao do Scilab.

2.1 Entrada e execucao de comandos basicos

Conforme mencionado anteriormente, nesta parte sera utilizado o proprio console do Scilab para entrarcom os comandos, de modo que o usuario devera digita-los diretamente apos o prompt “-->” que apareceno console, e em seguida pressionar a tecla Enter para que o comando seja executado.

Variaveis constantes e operadores elementares

Comecemos com a entrada de variaveis. Para entrar com numeros reais, basta digitar

2

Page 5: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

a=1b=3.1416

Constantes complexas podem ser definidas como

c=-5-3*%i

onde %i representa a unidade imaginaria i. Valores como o π (Pi) ou e (numero de Euler) sao dadospor, respectivamente,

%pi%e

Numeros com potencias de dez, tal como h = 6, 626.10−34, podem ser escritos usando-se a notacaocientıfica

h=6.626D-34

As operacoes de adicao, subtracao, multiplicacao e divisao sao efetuadas conforme o exemplo a seguir:

d=1+2*3-4/5

Potenciacao e radiciacao podem ser efetuadas com o mesmo operador, de modo que 23 e 3√27 saodados por, respectivamente,

2ˆ327ˆ(1/3)

Funcoes elementares

No caso especial da raiz quadrada existe uma funcao especial. Assim,√

64 pode ser calculado como

sqrt(64)

As funcoes logaritmo natural, ln(e), logaritmo na base 10, log1010, e a funcao exponencial, eπ, saodadas por, respectivamente,

log(%e)log10(10)exp(%pi)

As funcoes trigonometricas elementares e suas respectivas inversas tambem estao presentes. Assim,as funcoes sen(30o), cos(60o), tan(45o), arcsen(0,5) e arctan(1) sao dados por, respectivamente,

sin(%pi/6)cos(%pi/3)tan(%pi/4)asin(0.5)acos(0.5)atan(1)

Note que o Scilab trabalha com angulos em radianos.

3

Page 6: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

Vetores e matrizes

O Scilab interpreta vetores e matrizes de forma indistinta, de modo que um vetor linha com 6 elementose um vetor coluna com 3 elementos sao vistos pelo programa como matrizes de dimensoes 1x6 e 3x1,respectivamente. Deve-se, porem, ficar atento com as dimensoes das matrizes durante a execucao deoperacoes que requerem uma configuracao adequada desses parametros, como por exemplo na multi-plicacao matricial.

Comecemos assim criando um vetor linha. Para tanto, pode-se digitar

v=[1 2 3 4 5]

Note que para diferenciar um elemento do seguinte pasta adicionar um espaco entre eles. Em parti-cular, vetores como o anterior, onde os elementos formam uma sequencia de inteiros, podem ser escritoscomo

v=1:5

Para inserir uma matriz qualquer pode-se fazer

A=[45 13 -713 22 -30-7 -30 -6]

ou

A=[45 13 -7; 13 22 -30; -7 -30 -6]

gerando o mesmo resultado.Pode-se tambem formar vetores e matrizes como o resultado de operacoes, conforme exemplo seguinte:

B=[a+aˆ2 %pi 2a+b %e atan(a)sqrt(a) 0 cos(%pi/3)]

Para formar um vetor linha com tres elementos nulos, um vetor coluna com quatro elementos nulosou uma matriz 3x4 nula, basta fazer, respectivamente,

v=zeros(1,3)u=zeros(4,1)C=zeros(3,4)

Para formar uma matriz de zeros com as mesmas dimensoes da matriz A, definida anteriormente,pode-se fazer

C=zeros(A)

E possıvel criar uma matriz diagonal cujos elementos formam uma sequencia de inteiros

4

Page 7: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

D=diag(2:6)

Com a mesma funcao, pode-se extrair os elementos da diagonal de uma matriz qualquer, inserindo-osem um vetor coluna

u=diag(A)

Para formar uma matriz diagonal com os elementos da diagonal de outra matriz pode-se fazer

D=diag(diag(A))

E para criar uma matriz identidade de ordem qualquer basta fazer

I=diag(ones(1,3))

A soma e a subtracao de matrizes de mesma dimensao e feita diretamente

D=A+B-C

Para somar, subtrair, multiplicar ou dividir cada elemento de uma matriz por um numero qualquer,basta fazer

D=((((A+1)-2)*3)/4)

A multiplicacao de matrizes com dimensoes compatıveis tambem pode ser feita diretamente

D=A*B

Lembre-se que, em se tratando de uma multiplicacao matricial, a ordem entre as matrizes e relevante.Tambem, pode-se desejar efetuar a multiplicacao de elemento por elemento entre matrizes de di-

mensoes iguais. Se esse for o caso, a operacao deve ser feita da seguinte forma:

D=A.*B

Aqui, evidentemente, a ordem do produto nao e relevante.E possıvel extrair os elementos de uma determinada linha ou coluna de uma matriz. No exemplo

seguinte sao extraıdos os elementos da linha 1 da matriz A e da coluna 3 da matriz B:

D=A.*Bv=A(1,:)u=B(:,3)

Para a extracao da ultima linha ou coluna, pode-se tambem substituir o ındice numerico por $. Otraco de uma matriz e dado por

d=trace(A)

5

Page 8: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

A transposta de uma matriz e dada por

D=A’

E a inversa por

D=inv(A)

Para o calculo de determinantes tem-se

d=det(A)

Finalmente, para se determinar os autovalores e os autovetores de uma matriz, faz-se

[v, d]=spec(A)

onde v e uma matriz cujas colunas representam os autovetores e d uma matriz cujos elementos dadiagonal fornecem os respectivos autovalores.

Polinomios

Para criar um polinomio em x com raızes nos pontos -2, 1 e 3 define-se um vetor v com as raızes e emseguida cria-se o polinomio

v=[-2 1 3]pl=poly(v,’x’)

Note que, diferentemente do que ocorre no MATLAB, os polinomios no Scilab sao definidos natural-mente com uma ordem crescente dos graus dos termos. Assim, recomenda-se atencao durante operacoesem que este detalhe e relevante.

Uma segunda maneira de se inserir um polinomio e diretamente atraves de seus coeficientes, de modoque o resultado obtido anteriormente pode ser reproduzido da seguinte maneira:

c=[6 -5 -2 1]pl=poly(c,’x’,’coeff’)

De posse de dois polinomios, e possıvel gerar uma funcao racional f:

p1=poly([1 2],’x’)p2=poly([-1 0 3], ’x’)f=p1/p2

Dado um polinomio, e possıvel obter um vetor com os seus coeficientes

v=coeff(p1)

ou ainda com suas raızes

u=roots(p1)

6

Page 9: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

Operadores logicos

Para verificar se uma determinada variavel e igual, maior, maior ou igual, menor, menor ou igual a umdeterminado parametro, basta efetuar as respectivas operacoes:

a==1a>1a>=1a<1a<=1

As respostas do programa em relacao as operacoes anteriores serao as variaveis booleanas T “true”,caso a afirmacao seja verdadeira, ou F “false”, caso a afirmacao seja falsa. Note que essas operacoes seraode grande importancia como criterios de entrada e parada de comandos como if/else e while, conformesera mostrado adiante. Evidentemente, estao presentes tambem os operadores logicos “e” e “ou”, cujautilizacao e exemplificada a seguir:

a==1&b==2a==1 |b==2

Se a=1 e b=3, as respostadas as operacoes anteriores serao, respectivamente, F (falso) e T (verda-deiro).

2.2 O Scinotes

Embora pratico para a execucao de pequenas tarefas, como a determinacao dos autovalores de umamatriz ou a determinacao das raızes de um polinomio, digitar os comandos diretamente no console doScilab pode nao ser vantajoso para a elaboracao de codigos mais complexos. Isso porque e difıcil editarcomandos ja executados e tambem porque nao e possıvel salvar o codigo escrito.

Assim, o metodo mais indicado para se inserir codigos longos e digitando-os em editores de texto,permitindo que sejam editados, salvos e executados sempre que necessario.

O editor a ser usado e o SciNotes, disponıvel atraves do botao SciNotes, proximo ao canto superioresquerdo da janela do Scilab, conforme mostra a Figura (2.2), ou atraves do menu Aplicativos na opcaoSciNotes.

Figura 2.2: Localizacao do botao SciNotes.

Todos os comandos mostrados anteriormente podem ser usados nos codigos escritos no SciNotes,bastando apenas adicionar o ponto e vırgula ao final de cada comando.

7

Page 10: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

A tıtulo de comparacao e mostrado a seguir o ultimo exemplo da secao 2.1 Polinomios, mas agoraescrito no SciNotes:

p1=poly([1 2],’x’);p2=poly([-1 0 3], ’x’);f=p1/p2;v=coeff(p1);u=roots(p1);

Depois de escrito, o codigo deve ser salvo em um diretorio apropriado para entao ser executadoatraves do botao Executar mostrado na Figura (2.3). Adicionalmente pode-se salvar e executar o codigosimultaneamente atraves do botao Salvar e executar mostrado na Figura (2.4), ou atraves do menuExecutar na opcao Salvar e executar.

Figura 2.3: Localizacao do botao Executar.

Figura 2.4: Localizacao do botao Salvar e executar.

Quando um codigo no SciNotes e executado com sucesso a seguinte mensagem e impressa no consoledo Scilab:

-->exec(’D:\exemplo.sce’, -1)

Da mesma forma, quando ocorre um erro na execucao e impresso uma mensagem de erro identificandoo erro ocorrido e a linha em que ocorreu. No exemplo anterior, se substituirmos p1 por p3 na ultimalinha do codigo, apos a execucao sera exibida a seguinte mensagem:

-->exec(’D:\exemplo.sce’, -1)

8

Page 11: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

u=roots(p3);!--error 4

Variavel indefinida: p3at line 5 of exec file called by :exec(’D:\exemplo.sce’, -1)

Vale ressaltar que a identificacao do erro e a sua localizacao nem sempre e exibida de forma clara edireta pelo Scilab.

Para exibir o valor final de uma variavel qualquer do codigo, basta digitar o seu nome no consoledo Scilab e pressionar Enter. Outros metodos de exibicao de resultados, especialmente o grafico, seraoexplorados mais adiante.

2.3 Entrada e execucao de codigos basicos

Os proximos comandos e codigos que serao mostrados devem ser escritos e executados preferencialmenteatraves do SciNotes.

O comando if/else

A sintaxe do comando if/else e a seguinte:

se (if) condicao satisfeita entao (then)execute estes comandos

senao (else)execute estes comandos

fim (end)

Como exemplo, observe o codigo seguinte:

clear

a=-1;

if a>0 thenb=a;

elseb=-a;

end

A saıda do codigo anterior na variavel b e o modulo da variavel a. O comando clear, presentena primeira linha do exemplo anterior, remove da memoria todas as variaveis de execucoes anteriores,evitando eventuais comportamentos anormais do codigo causado por inicializacoes incorretas de variaveis.Assim, embora nao seja essencial ao funcionamento, recomenda-se o seu emprego.

O comando while

O comando while e um comando de laco, atraves do qual pode-se executar um conjunto de operacoesenquanto uma ou mais condicoes forem ou nao satisfeitas. A sintaxe do comando while e dada a seguir:

enquanto (while) condicao satisfeitaexecute estes comandos

fim (end)

9

Page 12: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

Como exemplo, e dado o codigo seguinte:

clear

i=0;n=10;a=2;r=1;

while i<n,r=r*a;i=i+1;

end

A saıda do codigo anterior na variavel r e a variavel a elevada a potencia inteira positiva n.

O comando for

Assim como o comando while, o comando for destina-se a execucao de lacos, sendo sua sintaxe dada aseguir:

para (for) cada elemento desta sequencia de inteirosexecute estes comandos

fim (end)

Como exemplo, e dado o mesmo codigo anterior, mas substituindo o laco while pelo laco for:

clear

n=3;a=3;r=1;

for i=1:nr=r*a;

end

Definicao de funcoes

O Scilab permite a definicao de funcoes por parte do usuario. A seguir sera definida a funcao teste:

deff(’[y]=teste(x)’,’if x<0 then y=-(xˆ2),else y=sin(x),end’);

Apos definida a funcao, pode-se calcular o seu valor em um ponto qualquer do intervalo para o qualesta definida:

y=teste(0.5*%pi);

No exemplo anterior, a variavel de entrada x era um escalar. No exemplo seguinte, a variavel deentrada e um vetor:

10

Page 13: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 2. Fundamentos de programacao

deff(’[y]=h(x)’,’n=length(x);for i=1:n, if x(i)<0 then y(i)=2,else y(i)=1+(x(i)-1)ˆ2,end,end’);

Plotagem de graficos

Definida a funcao anterior, criemos inicialmente um vetor de entrada com valores variando de -4 a 4 compasso 0,1

x=-4:0.1:4;

Em seguida, calculamos o vetor de saıda

y=h(x);

Para plotar o grafico da funcao y=h(x) basta o comando

plot2d(x,y);

E possıvel plotar graficos em multiplas janelas. Para exemplificar, sera usada a funcao anterior paraplotar quatro graficos onde a linha solida e substituıda por diferentes tipos de marcacoes. Para tantobasta substituir o comando plot2d(x,y); pelos comandos a seguir:

scf(1);plot2d(x,y,-1);scf(2);plot2d(x,y,-2);scf(3);plot2d(x,y,-3);scf(4);plot2d(x,y,-4);

2.4 Metodos de integracao

Para a simulacao numerica de sistemas mecanicos e essencial a capacidade de integrar no tempo ossistemas de equacoes diferenciais que descrevem o seu comportamento. Para isso, podem-se utilizaralgoritmos de integracao numerica como metodo de Euler ou o metodo de Runge-Kutta, ou ainda funcoesintegradoras prontamente disponıveis nas bibliotecas dos ambientes computacionais de simulacao. Essesmetodos, aplicados ao Scilab, serao descritos e utilizados a partir da secao seguinte.

11

Page 14: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3Aplicacoes em Mecanica

3.1 Sistema massa-mola-amortecedor

Considere um bloco com massa m preso a um referencial inercial por uma mola de rigidez k e por umamortecedor de coeficiente de amortecimento viscoso c. A posicao x(t) do bloco e tambem medida apartir de um referencial inercial. O esquema esta representado na Figura (3.1).

Figura 3.1: Sistema massa-mola-amortecedor

A equacao do movimento

A equacao que rege o movimento do sistema pode ser obtida facilmente por meio do Teorema do Movi-mento do Baricentro (TMB), atraves do equilıbrio de forcas:

mx+ cx+ kx = 0 (3.1)

ou, isolando o x,

x = − c

mx− k

mx (3.2)

A razao da forma apresentada em (3.2) sera explicada posteriormente.

Declaracao de parametros do sistema

Como descrito, o bloco tem massa m, a mola tem rigidez k, o amortecedor tem coeficiente de amorte-cimento viscoso c. Entretanto, o programa que utilizaremos, Scilab, necessita do valor numerico destas

12

Page 15: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

variaveis para realizar a simulacao. Desta forma, define-se no inıcio do programa todos os parametrosnecessarios para executa-lo. O script esta a seguir:

//Incremento de tempo na resposta [s]Dt = 0.0005;

// massas do problema [kg]m=1.0;

// Rigidez da mola [N/m]k = 1.0;

// Coeficiente de amortecimento viscoso [Ns/m]c = 1.0;

// Instante inicial de integracao [s]t0 = 0.0;

// instante final de integracao [s]tf = 12.0;

O incremento de tempo Dt e necessario para os metodos de solucao da equacao diferencial em questao.O tempo final de integracao t final fica a escolha do usuario.

Resolucao da equacao do movimento

Apesar da equacao diferencial ordinaria (EDO) em estudo apresentar solucao analıtica conhecida emetodos simples para chegar a esta, o objetivo deste tutorial e apresentar ferramentas numericas paraa solucao de EDOs. Os principais metodos de resolucao de EDOs fazem uso da abordagem de sistemaspelo espaco de estados. Nesta abordagem, apenas existem estados e suas derivadas, como apresentadona equacao (3.3).

y = f(t, y) (3.3)

ey(t0) = y0 (3.4)

para y o conjunto de equacoes diferenciais que descrevem o sistema, y seus estados e t o tempo.O numero de estados do sistema e igual a soma dos graus das EDOs que o descrevem, ou o numero

de condicoes iniciais que devem ser fornecidas para obter-se a solucao do problema. Frequentemente,adotamos a variavel que desejamos encontrar (neste caso, x) e sua derivada x como os estados do sistema.Sera utilizado neste exemplo tal adocao de estados.{

y1 = xy2 = x

Desta forma, obtemos as duas equacoes diferenciais, descritas no espaco de estados:{y1 = y2y2 = − c

my2 − kmy1

Para resolucao destas equacoes, e necessario criar uma funcao que forneca as derivadas y1 e y2 a partirdos estados y1, y2 e t. O script da funcao esta a seguir.

13

Page 16: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

// carrega definicao da funcao ffunction dx=f(t,x)// equacoes do movimento dx/dt= f(t,x)// onde x eh o vetor de estados definido// por x = [ x; dx/dt];

dy1= x(2);dy2= - (c/m)*x(2) - (k/m)*x(1);dx = [dy1; dy2];

endfunction

O Scilab dispoe de uma excelente biblioteca, ja implementada como funcoes, para solucao de EDOs.Entre elas, o metodo de Adams e Runge-Kutta. Nao entraremos em detalhes quanto a estes metodospois foge do escopo do curso. A funcao do Scilab para tal chama-se ode. Ela tem como argumentos ometodo de resolucao (Neste exemplo, adotaremos o metodo "adams"), as condicoes iniciais do sistemay0, o tempo inicial de execucao t0, o array tempo t contendo valores de t0 a tf espacados igualmentede Dt, e a funcao f onde estao definidas as derivadas dos estados do sistema. Para mais informacoessobre a funcao ode, digite help ode no console do Scilab e este abrira uma janela com a documentacaodo comando.

O script que realiza a resolucao das equacoes diferenciais e o seguinte:

// estado Inicial y0 = [x;xp]y0=[1.0;0.0];

// Vetor de tempot = t0:Dt:tf;

// Metodo de integracaoy = ode("adams", y0, t0, t, f);

Perceba que e necessario declarar as condicoes iniciais y0 como um array seguindo o padrao de entradaque adotamos para a funcao f (y0 = [x0 xp0]).

Visualizacao dos resultados

O Scilab possibilita que se faca graficos a partir de dados contidos em arrays. Perceba que e necessario quehaja duas sequencias de dados com mesmo tamanho e que dados na mesma posicao estejam relacionados(y[i] corresponde ao x[i], por exemplo). Para o nosso exemplo, fazendo uso de variaveis ja utilizadasanteriormente, obtemos o seguinte script:

// elabora um grafico do deslocamento x(t)//para o grafico dx/dt(t), basta substiuir y(1,:) por y(2,:)scf(0);xtitle(’Posicao x(t) (m) vs. Tempo (s)’);plot2d(t,y(1,:));

Para nosso exemplo, para m = 1; k = 1; c = 1;, obtivemos o seguinte resultado:Como esperado, o sistema e amortecido e tende a zero para um tempo suficientemente grande. Se

colocarmos c = 0, encontraremos a esperada senoide com velocidade angular ω =√

km = 1 rad/s, como

na figura (3.3).

14

Page 17: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

Figura 3.2: Posicao do bloco para m = 1, k = 1, c = 1, x0 = 1 e xp0 = 0.

Script de simulacao

O script final de simulacao obtido encontra-se abaixo.

// Codigo para simulacao - Massa-mola-amortecedorclcclear

//Incremento de tempo na resposta [s]Dt = 0.0005;

// massas do problema [kg]m=1.0;

// Rigidez da mola [N/m]k = 1.0;

// Coeficiente de amortecimento viscoso [Ns/m]c = 1.0;

// Instante inicial de integracao [s]t0 = 0.0;

// instante final de integracao [s]tf = 12.0;

15

Page 18: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

Figura 3.3: Posicao do bloco para m = 1, k = 1, c = 0, x0 = 1 e xp0 = 0.

// carrega definicao da funcao ffunction dx=f(t,x)

// equacoes do movimento dx/dt= f(t,x)// onde x eh o vetor estado definido por// x = [ x; dx/dt];dy1= x(2);dy2= - (c/m)*x(2) - (k/m)*x(1);dx = [dy1; dy2];

endfunction

// estado Inicial y0 = [x;xp]y0=[1.0;0.0];

// Vetor de tempot = t0:Dt:tf;

// Metodo de integracaoy = ode("adams", y0, t0, t, f);

// elabora um grafico do deslocamento x(t)// para o grafico dx/dt(t), basta substiuir y(1,:) por y(2,:)scf(0);xtitle(’Posicao X(t) (m) vs. Tempo (s)’);plot2d(t,y(1,:));

16

Page 19: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

3.2 Partıcula que colide contra o solo

Considere uma partıcula de massa m que e abandonada de uma altura h0 do solo com velocidade verticalv0, esta velocidade e considerada positiva quando a partıcula se afasta do solo. Admite-se ainda que aaceleracao da gravidade e g = 9,81 m/s2 e que o coeficiente de restituicao da colisao partıcula/solo e e= 0, 85. Nestas condicoes, a partıcula ira colidir diversas vezes contra o solo conforme a figura (3.4)

Figura 3.4: Partıcula colidindo contra o solo

Equacoes do movimento

Do teorema do movimento do baricentro, podemos afirmar que a partıcula encontra-se somente sobreacao da gravidade. Logo, y = −g. Devido ao metodo de integracao que adotaremos, e mais convenienteutilizarmos a notacao {

y1 = yy2 = y

Desta forma, a equacao do movimento, de segunda ordem, pode ser descrita por duas de primeiraordem da forma {

y1 = y2y2 = −g

na forma matricial, encontramos[y1y2

]=[

0 10 0

] [y1y2

]+[

0−g

]Definindo as matrizes A e B como

A =[

0 10 0

]

17

Page 20: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

e

B =[

0−g

]podemos adotar uma notacao matricial para o problema da forma

y = Ay +B (3.5)A funcao do Scilab com as equacoes do movimento pode ser escrita no scinotes como reproduzido

abaixo:

function dy=f(t,y)dy = A*y+B;

endfunction

O criterio algebrico para encerrar a integracao numerica

Como este se trata de um problema de mecanica onde ha um choque, sera preciso interromper a integracaonumerica sempre que o mesmo ocorrer, e definir uma nova condicao inicial para o estado y.

Para tanto, se pode criar uma funcao (g) que, quando retorna um valor menor ou igual a zero, indicaa ocorrencia de um choque, e, portanto a integracao deve ser interrompida.

function [z]=g(y);z=y(1)+sqrt(y(2)*y(2))+y(2);

endfunction

z e a variavel que a funcao retorna, quando seu valor e menor ou igual a zero, houve choque. y(1) eo primeiro valor do vetor de entrada da funcao, que corresponde a altura da partıcula, e y(2), o segundovalor, corresponde a velocidade. Nota-se que a funcao so valera zero se a altura for menor ou igual azero, e a velocidade, negativa.

Metodo de integracao

O metodo de integracao numerica usado nesse exemplo sera o metodo de Runge-Kutta de 4a ordem,tambem chamado RK4. Seja uma equacao ordinaria de primeira ordem, da forma:

dy

dt= f(t, y) , y(t0) = y0 (3.6)

Entao, segundo o metodo Runge-Kutta, a aproximacao yn+1 para y(tn+1) e:

yn+1 = yn + h

6 (k1 + 2k2 + 2k3 + k4) (3.7)

tn+1 = tn + h (3.8)E os coeficientes ki sao definidos como:

k1 = f(tn, yn)

k2 = f(tn + h

2 , yn + h

2k1)

k3 = f(tn + h

2 , yn + h

2k2)

k4 = f(tn + h, yn + hk3)

18

Page 21: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

O que acontece, portanto, e que yn+1 e igual a yn acrescido de uma estimativa da inclinacao dointervalo multiplicada pelo tamanho (h) do intervalo. Para maiores informacoes sobre o metodo, visite osıtio: http://pt.wikipedia.org/wiki/M%C3%A9todo_de_Runge-Kutta

Rotina de integracao

A rotina de integracao sera realizada da seguinte maneira: Define-se um laco for com um contador iassociado. O laco descrito abaixo inicializa a variavel i com o valor 1, e a cada iteracao aumenta o seuvalor em 1, ate que seja atingida a condicao de parada do loop (i=imax).

for i=1:imax

k1=f(y(:,i));k2=f(y(:,i)+[k1*dt/2]);k3=f(y(:,i)+[k2*dt/2]);k4=f(y(:,i)+[k3*dt]);

y(:,i+1)=y(:,i)+dt/6*(k1+2*k2+2*k3+k4);

end

A rotina acima define os coeficientes ki usando a funcao f (previamente definida) e o valor atual dey (condicao atual da partıcula). y(:,i) indica um vetor coluna, contendo todos os valores da coluna i damatriz y. A coluna i da matriz y representa o estado da variavel no instante atual da integracao, no casodeste exemplo, a matriz y possui apenas duas linhas, a primeira sendo referente a altura e a segunda, avelocidade da partıcula. Uma vez definidos os coeficientes, calcula-se o valor de y(:,i+1) usando o metodoRK4.

Cada passo do loop calcula o proximo valor de y, referente ao instante seguinte. Quando todos osvalores de y foram calculados para o intervalo de tempo especificado, o laco termina.

Porem no caso da partıcula colidindo com o solo, os valores da altura da mesma nao podem sermenores do que zero. Para resolver este problema define-se um novo laco de condicao (if), que avalia acondicao de choque (usando a funcao g) apos cada passo da integracao numerica e redefine os valores dey se necessario, para os valores corrigidos pos-choque.

if g(y(:,i+1))<=0 thennovo_y0=[0;(-1)*y(2,i+1)*e];y(:,i+1)=novo_y0; //definicao da nova condicao //inicialend

O laco diz que, se, no instante atual de integracao, o valor da funcao g(y) e menor ou igual a zero, oestado atual da variavel y deve ser modificado, tornando a altura igual a zero e multiplicando a velocidadepelo coeficiente –e.

Script de integracao

Na primeira parte do script os parametros do problema sao informados, como variaveis globais. Define-seo tempo inicial, o tempo final de integracao, o intervalo de tempo em que gostarıamos de conhecer oestado do sistema dt, a altura inicial da partıcula h0, a velocidade inicial da partıcula v0, o estado inicialy0, o coeficiente de restituicao e, e a aceleracao da gravidade grav. O valor imax sera usado no laco(loop) de integracao, como o limite do contador do laco.

//apaga todos as variaveis criadas pelo usuario no scilab

19

Page 22: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

clear

//gravidade e coeficiente de restituicaograv=9.81;e=0.85;

//matrizes auxiliares para a funcao f (que sera //integrada)A=[0,1;0,0];B=[0;-grav];

//condicoes iniciaish0=5;v0=-1;y0=[h0;v0];t0=0;y=y0;

//variaveis de tempodt=0.001;t_final=7;t=(0:dt:t_final);

//valor maximo do contador para a integracaoimax=round(t_final/dt);

A seguir definem-se as funcoes f (do movimento) e g (condicao do choque) no script do scinotes:

//funcao a ser integradafunction [dy]=f(y)

dy=A*y+B;endfunction

//funcao criterio de interrupcao da integracaofunction [z]=g(y);

z=y(1)+sqrt(y(2)*y(2))+y(2);endfunction

Procede-se, entao, uma sequencia de integracoes numericas que sao interrompidas pelo criterio de co-lisao. Apos cada colisao, as condicoes de velocidade pos-choque sao impostas. A sequencia de integracoesnumericas e gerenciada pelo laco (loop) de programacao for que segue.

//rotina de integracao usando metodo de Runge-Kuttafor i=1:imax

k1=f(y(:,i));k2=f(y(:,i)+[k1*dt/2]);k3=f(y(:,i)+[k2*dt/2]);k4=f(y(:,i)+[k3*dt]);

y(:,i+1)=y(:,i)+dt/6*(k1+2*k2+2*k3+k4);

20

Page 23: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

//condicao de choqueif g(y(:,i+1))<=0 then

novo_y0=[0;(-1)*y(2,i+1)*e];y(:,i+1)=novo_y0; //definicao da nova condicao //inicial

endend

Por ultimo realiza-se a rotina de plotagem dos dados em uma janela grafica do scilab.

//plot da respostaplot2d (t,y’);// o apostrofe no y significa que o// vetor/matriz e transposto(a)legend (’h’,’v’);title (’Altura x Tempo’);xlabel (’Tempo’);

3.3 Veıculo 2D passando por lombada

O sistema mostrado na Figura (3.5) representa uma simplificacao de um veıculo e seu sistema de sus-pensao. Nesta simplificacao, o sistema e composto por um solido retangular de massa M e por duasmassas concentradas m1 e m2. O ponto P indica o local onde o condutor do veıculo esta posicionado.O solido retangular esta apoiado sobre dois conjuntos mola-amortecedor, cada um dos quais com valo-res proprios de rigidez da mola k e da constante c do amortecedor viscoso linear. As duas molas temcomprimento l0 quando a deformacao e nula. No instante mostrado na Figura (3.5), o conjunto move-sesobre uma superfıcie horizontal, com velocidade constante ~v = v~i.

Figura 3.5: Modelo 2D de veıculo e via com lombada.

Apos percorrer uma distancia L1, o veıculo tem de suplantar um obstaculo em sua trajetoria, comoindicado na Figura (3.6). Durante a passagem pelo obstaculo, o veıculo permanece com velocidadeconstante. O pavimento tem altura definida por:

h =

0 se x ≤ L1 + L

2 ;H2

(1− cos( 2π

L2)x)

se L1 + L2 < x < L1 + L2 + L

2 ;0 se x ≥ L1 + L2 + L

2 .

(3.9)

Admitem-se como dados X0 = 0;L = 5m;L1 = 50m;L2 = 3, 7m;H = 0, 1m; b = 0, 1m; b1 =0, 7m;M = 400 kg;V = 18m/s e g = 9, 8m/s2. Sugere-se utilizar 0,001 s como intervalo de inte-

21

Page 24: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

Figura 3.6: Veıculo sobre a lombada.

gracao. Considerando-se ainda m1 = m2 = 120 kg; d1 = d2 = 2, 5m; k1 = k2 = 30000N/m; c1 = c2 =2100Ns/m; yO(0) = l0 = 0, 3m e α(0) = 0.

As equacoes do movimento foram determinadas para o movimento de arfagem α, Equacao (3.10).A deducao pode ser feita atraves dos teoremas do movimento do centro de massa e do teorema daquantidade de movimento angular ou atraves da Mecanica Analıtica.

sen(α)(M2d2 −M1d1)xO+cos(α)(M1d1 −M2d2)yO+

(M1d21 −M2d

22)α+

cos(α)(M1d1 −M2d2)g−k1Lcos(α)(l0 − yO − Lsen(α) + yA)+k2Lcos(α)(l0 − yO − Lsen(α) + yB) =− c1Lcos(α)(yO + Lαcos(α))−

yA + c2Lcos(α)(yO − Lα)− yB

(3.10)

e para a oscilacao vertical yO, Equacao (3.11).

(M1 +M2 +M +m)yO+cos(α)(M1d1 −M2d2)α+sen(α)(M2d2 −M1d1)α2+

(M1 +M2 +M +m)g − k1(l0 − y0 − Lsen(α) + yA)+k2(l0 − y0 + Lsen(α) + yB) =− c1(yO − Lαcos(α)− yA)+

c2(yO − Lαcos(α))− yA

(3.11)

O procedimento basico para efetuar a simulacao numerica do comportamento dinamico do sistema eo mesmo que tem sido aplicado nos exemplos anteriores, ou seja, definicao dos parametros constantes,reducao das duas equacoes diferenciais de segunda ordem do sistema, no caso as Equacoes (3.10) e3.11, para quatro equacoes diferenciais de primeira ordem, definicao dos parametros iniciais, definicao doincremento de tempo e do instante final, integracao propriamente dita e exposicao grafica dos resultados.O codigo usado para a simulacao e apresentado a seguir:

clear

22

Page 25: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

k1 = 30000;k2 = 30000;d1 = 2.50;d2 = 2.50;M = 400;M1 = 120;M2 = 120;L = 5.0;L1 = 50.0;L2 = 3.7;L0 = 0.3;Y_0 = L0;b = 0.1;c1 = 2100.0;c2 = 2100.0;v = 18.0;g = 9.8;H = 0.1;b1 = 0.7;y0 = [L0; 0.0; 0.0; 0.0; 0.0];JO = M*(b*b + L*L)/12;A = M1 + M2 + M;B = (M1*d1 - M2*d2);C = M1*d1*d1 + M2*d2*d2 + M*(b*b + L*L)/12;tA1 = L1/vtA2 = (L1 + L2)/vtB1 = (L1 + L)/vtB2 = (L1 + L2 + L)/v

t_inicial = 0.0;Dt = 0.001;t_final = 10.0;t = [t_inicial:Dt:t_final];

function [dy]=car(t,y)if t < tA1 then

yA = 0.0;dyA = 0.0;

elseif t < tA2 then

yA = H*(1 - cos(2*%pi*(v*t - L1)/L2))/2;dyA = H*(sin(2*%pi*(v*t - L1)/L2))*%pi*v/L2;

elseyA = 0.0;dyA = 0.0;

endendif t < tB1 then

yB = 0.0;dyB = 0.0;

elseif t < tB2 then

yB = H*(1 - cos(2*%pi*(v*t - L1 - L)/L2))/2;dyB = H*(sin(2*%pi*(v*t - L1 - L)/L2))*%pi*v/L2;

23

Page 26: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

elseyB = 0.0;dyB = 0.0;

endendF = -A*g + B*sin(y(3))*y(4)*y(4) + k1*(L0-y(1) - L*sin(y(3))/2 + yA) +...k2*(L0-y(1)+L*sin(y(3))/2 + yB) - c1*(y(2) + L*y(4)*cos(y(3))/2 - dyA) - ...c2*(y(2) - L*y(4)*cos(y(3))/2 - dyB);H = -B*g*cos(y(3)) + k1*L*cos(y(3))*(L0 - y(1) - L*sin(y(3))/2 + yA)/2 - ...k2*L*cos(y(3))*(L0 - y(1) + L*sin(y(3))/2 + yB)/2 - c1*L*cos(y(3))*(y(2) + ...L*y(4)*cos(y(3))/2 - dyA)/2 + c2*L*cos(y(3))*(y(2) - L*y(4)*cos(y(3))/2 - dyB)/2;determinante = A*C - B*B*cos(y(3))*cos(y(3));dy1 = y(2);dy2 = (C*F - B*cos(y(3))*H)/determinante;dy3 = y(4);dy4 = (A*H-B*cos(y(3))*F)/determinante;dy5 = dy2;dy = [dy1;dy2;dy3;dy4;dy5];

endfunction

ys = ode(’stiff’, y0, t_inicial, t, car);

scf(1);plot2d(t’,[ys(1,:)’]);xtitle(’Deslocamento vertical do ponto O vs. tempo’,’t’,’Yo’);scf(2);plot2d(t’,[ys(3,:)’]);xtitle(’Arfagem vs. tempo’,’t’,’Angulo alfa’);

for i = 1:tA1/Dtyb1(i) = ys(1,tA1/Dt) + b1*sin(ys(3,tA1/Dt));

endfor i = tA1/Dt:t_final/Dt

yb1(i) = ys(1,i) + b1*sin(ys(3,i));enddesconforto = max(abs(yb1(:) - yb1(t_final/Dt - 1)));

scf(3);plot2d(yb1);xtitle(’Altura na posicao do piloto vs. tempo’,’t’,’Yb1 (m)’);

Observe que nesta simulacao foi usado o solucionador de equacoes diferenciais ordinarias ode. Tresgraficos sao gerados, estando no primeiro a historia temporal do deslocamento vertical variavel yO, nosegundo a historia temporal do angulo de arfagem α e no terceiro o deslocamento vertical no assentodo piloto yb1, que depende tanto de α quanto de yO. A Figura (3.7) apresenta o grafico de yO = yO(t)e a Figura (3.8) apresenta o grafico de αO = αO(t) para esta condicao. Observe que o grafico de yOpermite identificar dois instantes distintos do movimento, um deles, inicial, associado a estabilizacao deyO em um valor de equilıbrio e outro associado a passagem do veıculo pelo obstaculo. Desta forma epossıvel obter informacoes sobre conforto ou seguranca de um veıculo na fase de projeto, lembrando queas hipoteses de modelagem restringem o campo de perguntas que podemos dirigir a simulacao numerica,ou em outras palavras, a metodologia restringe o campo das conclusoes pertinentes.

24

Page 27: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3. Aplicacoes em Mecanica

Figura 3.7: Veıculo sobre a lombada.

Figura 3.8: Veıculo sobre a lombada.

25

Page 28: Tutorial para Scilab Integra¸c˜ao de equa¸c˜oes do movimentosites.poli.usp.br/d/pme2200/Tutorial_scilab_novo.pdf · Escola Polit´ecnica da Universidade de S˜ao Paulo Tutorial

Capıtulo 3Bibliografia

[1] Ajuda Scilab. Mar. de 2013. url: http://help.scilab.org/docs/5.4.0/pt_BR/index.html.[2] R. G. Lima. Tutorial para integrar equacoes de movimento utilizando o Scilab. Mar. de 2013. url:

http://sites.poli.usp.br/d/pme2200/Tutorial_scilab.pdf.[3] Lista A - Aulas praticas de Scilab. Mar. de 2013. url: http://sites.poli.usp.br/d/pme2371/

PDF/Lista_A_PME2371_2007.pdf.[4] Scilab for very beginners tutorial. Mar. de 5. url: http://www.scilab.org/community/news/

20130214.

26