Escolar Documentos
Profissional Documentos
Cultura Documentos
PME2200 - Mecânica B
Sumário
1 Introdução 1
2 Fundamentos de programação 2
2.1 Entrada e execução de comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 O Scinotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Entrada e execução de códigos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Métodos de integração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Aplicações em Mecânica 12
3.1 Sistema massa-mola-amortecedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Partı́cula que colide contra o solo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Veı́culo 2D passando por lombada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Bibliografia 26
ii
Capı́tulo 1
Introdução
O propósito deste texto é apresentar aos alunos das disciplinas de Mecânica Geral da Escola Politécnica
da Universidade de São Paulo ferramentas computacionais para a simulação numérica do comportamento
dinâmico de sistemas mecânicos.
Para tal propósito será usado o Scilab, um software de código aberto com um ambiente com-
putacional ideal para aplicações cientı́ficas e de engenharia. Desenvolvido inicialmente pelo INRIA
(http://www.inria.fr/), atualmente o Scilab é mantido e desenvolvido pelo Scilab Enterprises (http:
//www.scilab-enterprises.com/).
O download da versão mais recente deste software pode ser feito através do site http://www.scilab.
org/. Antes de fazer o download, certifique-se da versão correta do seu sistema operacional (Windows
32 bit, Windows 64 bit ou Mac OS X) e escolha o programa de instalação adequado.
Este tutorial foi escrito com base na versão 5.4.0 do Scilab, de modo que usuários de versões anteriores
ou posteriores a esta podem precisar adaptar algumas das instruções aqui apresentadas.
1
Capı́tulo 2
Fundamentos de programação
O ambiente de programação padrão do Scilab é composto pelas seguintes janelas agrupadas e apresentadas
na Figura 1: console do Scilab, navegador de arquivos, navegador de variáveis e histórico de comandos.
Existem basicamente duas maneiras de efetuar operações no Scilab: a primeira e mais simples é
digitar os comandos diretamente no console do Scilab, e a segunda é usar um editor de texto, como o
SciNotes, para criar um arquivo com extensão “.sce” que poderá então ser executado no console do Scilab.
Em um primeiro momento, onde serão apresentados os comandos básicos, será usado o modo simples
de programação, ou seja, digitando os comandos diretamente no console. O uso do editor de texto será
feito mais adiante, quando começarmos a escrever códigos mais complexos.
Usuários com pouca ou nenhuma familiaridade com o Scilab são aconselhados a seguir passo a passo
esta primeira parte do tutorial. Os demais podem avançar diretamente para a seção (3).
2
Capı́tulo 2. Fundamentos de programação
a=1
b=3.1416
c=-5-3*%i
onde %i representa a unidade imaginária i. Valores como o π (Pi) ou e (número de Euler) são dados
por, respectivamente,
%pi
%e
Números com potências de dez, tal como h = 6, 626.10−34 , podem ser escritos usando-se a notação
cientı́fica
h=6.626D-34
As operações de adição, subtração, multiplicação e divisão são efetuadas conforme o exemplo a seguir:
d=1+2*3-4/5
√
Potenciação e radiciação podem ser efetuadas com o mesmo operador, de modo que 23 e 3
27 são
dados por, respectivamente,
2ˆ3
27ˆ(1/3)
Funções elementares
√
No caso especial da raiz quadrada existe uma função especial. Assim, 64 pode ser calculado como
sqrt(64)
As funções logaritmo natural, ln(e), logaritmo na base 10, log10 10, e a função exponencial, eπ , são
dadas por, respectivamente,
log(%e)
log10(10)
exp(%pi)
As funções trigonométricas elementares e suas respectivas inversas também estão presentes. Assim,
as funções sen(30o ), cos(60o ), tan(45o ), arcsen(0,5) e arctan(1) são dados por, respectivamente,
sin(%pi/6)
cos(%pi/3)
tan(%pi/4)
asin(0.5)
acos(0.5)
atan(1)
3
Capı́tulo 2. Fundamentos de programação
Vetores e matrizes
O Scilab interpreta vetores e matrizes de forma indistinta, de modo que um vetor linha com 6 elementos
e um vetor coluna com 3 elementos são vistos pelo programa como matrizes de dimensões 1x6 e 3x1,
respectivamente. Deve-se, porém, ficar atento com as dimensões das matrizes durante a execução de
operações que requerem uma configuração adequada desses parâmetros, como por exemplo na multi-
plicação 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 espaço entre eles. Em parti-
cular, vetores como o anterior, onde os elementos formam uma sequência de inteiros, podem ser escritos
como
v=1:5
A=[45 13 -7
13 22 -30
-7 -30 -6]
ou
B=[a+aˆ2 %pi 2
a+b %e atan(a)
sqrt(a) 0 cos(%pi/3)]
Para formar um vetor linha com três elementos nulos, um vetor coluna com quatro elementos nulos
ou 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 dimensões da matriz A, definida anteriormente,
pode-se fazer
C=zeros(A)
É possı́vel criar uma matriz diagonal cujos elementos formam uma sequência de inteiros
4
Capı́tulo 2. Fundamentos de programação
D=diag(2:6)
Com a mesma função, pode-se extrair os elementos da diagonal de uma matriz qualquer, inserindo-os
em 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))
I=diag(ones(1,3))
D=A+B-C
Para somar, subtrair, multiplicar ou dividir cada elemento de uma matriz por um número qualquer,
basta fazer
D=((((A+1)-2)*3)/4)
A multiplicação de matrizes com dimensões compatı́veis também pode ser feita diretamente
D=A*B
Lembre-se que, em se tratando de uma multiplicação matricial, a ordem entre as matrizes é relevante.
Também, pode-se desejar efetuar a multiplicação de elemento por elemento entre matrizes de di-
mensões iguais. Se esse for o caso, a operação deve ser feita da seguinte forma:
D=A.*B
D=A.*B
v=A(1,:)
u=B(:,3)
Para a extração da última linha ou coluna, pode-se também substituir o ı́ndice numérico por $. O
traço de uma matriz é dado por
d=trace(A)
5
Capı́tulo 2. Fundamentos de programação
D=A’
E a inversa por
D=inv(A)
d=det(A)
[v, d]=spec(A)
onde v é uma matriz cujas colunas representam os autovetores e d uma matriz cujos elementos da
diagonal fornecem os respectivos autovalores.
Polinômios
Para criar um polinômio em x com raı́zes nos pontos -2, 1 e 3 define-se um vetor v com as raı́zes e em
seguida cria-se o polinômio
v=[-2 1 3]
pl=poly(v,’x’)
Note que, diferentemente do que ocorre no MATLAB, os polinômios no Scilab são definidos natural-
mente com uma ordem crescente dos graus dos termos. Assim, recomenda-se atenção durante operações
em que este detalhe é relevante.
Uma segunda maneira de se inserir um polinômio é diretamente através de seus coeficientes, de modo
que o resultado obtido anteriormente pode ser reproduzido da seguinte maneira:
c=[6 -5 -2 1]
pl=poly(c,’x’,’coeff’)
p1=poly([1 2],’x’)
p2=poly([-1 0 3], ’x’)
f=p1/p2
v=coeff(p1)
u=roots(p1)
6
Capı́tulo 2. Fundamentos de programação
Operadores lógicos
Para verificar se uma determinada variável é igual, maior, maior ou igual, menor, menor ou igual a um
determinado parâmetro, basta efetuar as respectivas operações:
a==1
a>1
a>=1
a<1
a<=1
As respostas do programa em relação às operações anteriores serão as variáveis booleanas T “true”,
caso a afirmação seja verdadeira, ou F “false”, caso a afirmação seja falsa. Note que essas operações serão
de grande importância como critérios de entrada e parada de comandos como if/else e while, conforme
será mostrado adiante. Evidentemente, estão presentes também os operadores lógicos “e” e “ou”, cuja
utilização é exemplificada a seguir:
a==1&b==2
a==1 |b==2
Se a=1 e b=3, as respostadas às operações anteriores serão, respectivamente, F (falso) e T (verda-
deiro).
2.2 O Scinotes
Embora prático para a execução de pequenas tarefas, como a determinação dos autovalores de uma
matriz ou a determinação das raı́zes de um polinômio, digitar os comandos diretamente no console do
Scilab pode não ser vantajoso para a elaboração de códigos mais complexos. Isso porque é difı́cil editar
comandos já executados e também porque não é possı́vel salvar o código escrito.
Assim, o método mais indicado para se inserir códigos longos é digitando-os em editores de texto,
permitindo que sejam editados, salvos e executados sempre que necessário.
O editor a ser usado é o SciNotes, disponı́vel através do botão SciNotes, próximo ao canto superior
esquerdo da janela do Scilab, conforme mostra a Figura (2.2), ou através do menu Aplicativos na opção
SciNotes.
Todos os comandos mostrados anteriormente podem ser usados nos códigos escritos no SciNotes,
bastando apenas adicionar o ponto e vı́rgula ao final de cada comando.
7
Capı́tulo 2. Fundamentos de programação
A tı́tulo de comparação é mostrado a seguir o último exemplo da seção 2.1 Polinômios, mas agora
escrito 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 código deve ser salvo em um diretório apropriado para então ser executado
através do botão Executar mostrado na Figura (2.3). Adicionalmente pode-se salvar e executar o código
simultaneamente através do botão Salvar e executar mostrado na Figura (2.4), ou através do menu
Executar na opção Salvar e executar.
Quando um código no SciNotes é executado com sucesso a seguinte mensagem é impressa no console
do Scilab:
-->exec(’D:\exemplo.sce’, -1)
Da mesma forma, quando ocorre um erro na execução é impresso uma mensagem de erro identificando
o erro ocorrido e a linha em que ocorreu. No exemplo anterior, se substituirmos p1 por p3 na última
linha do código, após a execução será exibida a seguinte mensagem:
-->exec(’D:\exemplo.sce’, -1)
8
Capı́tulo 2. Fundamentos de programação
u=roots(p3);
!--error 4
Variável indefinida: p3
at line 5 of exec file called by :
exec(’D:\exemplo.sce’, -1)
Vale ressaltar que a identificação do erro e a sua localização nem sempre é exibida de forma clara e
direta pelo Scilab.
Para exibir o valor final de uma variável qualquer do código, basta digitar o seu nome no console
do Scilab e pressionar Enter. Outros métodos de exibição de resultados, especialmente o gráfico, serão
explorados mais adiante.
O comando if/else
A sintaxe do comando if/else é a seguinte:
clear
a=-1;
if a>0 then
b=a;
else
b=-a;
end
O comando while
O comando while é um comando de laço, através do qual pode-se executar um conjunto de operações
enquanto uma ou mais condições forem ou não satisfeitas. A sintaxe do comando while é dada a seguir:
9
Capı́tulo 2. Fundamentos de programação
clear
i=0;
n=10;
a=2;
r=1;
while i<n,
r=r*a;
i=i+1;
end
O comando for
Assim como o comando while, o comando for destina-se à execução de laços, sendo sua sintaxe dada a
seguir:
Como exemplo, é dado o mesmo código anterior, mas substituindo o laço while pelo laço for:
clear
n=3;
a=3;
r=1;
for i=1:n
r=r*a;
end
Definição de funções
O Scilab permite a definição de funções por parte do usuário. A seguir será definida a função teste:
Após definida a função, pode-se calcular o seu valor em um ponto qualquer do intervalo para o qual
está definida:
y=teste(0.5*%pi);
10
Capı́tulo 2. Fundamentos de programação
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 gráficos
Definida a função anterior, criemos inicialmente um vetor de entrada com valores variando de -4 a 4 com
passo 0,1
x=-4:0.1:4;
y=h(x);
plot2d(x,y);
É possı́vel plotar gráficos em múltiplas janelas. Para exemplificar, será usada a função anterior para
plotar quatro gráficos onde a linha sólida é substituı́da por diferentes tipos de marcações. Para tanto
basta 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);
11
Capı́tulo 3
Aplicações em Mecânica
A equação do movimento
A equação que rege o movimento do sistema pode ser obtida facilmente por meio do Teorema do Movi-
mento do Baricentro (TMB), através do equilı́brio de forças:
c k
ẍ = − ẋ − x (3.2)
m m
A razão da forma apresentada em (3.2) será explicada posteriormente.
12
Capı́tulo 3. Aplicações em Mecânica
variáveis para realizar a simulação. Desta forma, define-se no inı́cio do programa todos os parâmetros
necessários para executá-lo. O script está a seguir:
ẏ = f (t, y) (3.3)
e
y(t0 ) = y0 (3.4)
para ẏ o conjunto de equações diferenciais que descrevem o sistema, y seus estados e t o tempo.
O número de estados do sistema é igual à soma dos graus das EDOs que o descrevem, ou o número
de condições iniciais que devem ser fornecidas para obter-se a solução do problema. Frequentemente,
adotamos a variável que desejamos encontrar (neste caso, x) e sua derivada ẋ como os estados do sistema.
Será utilizado neste exemplo tal adoção de estados.
(
y1 = x
y2 = ẋ
Desta forma, obtemos as duas equações diferenciais, descritas no espaço de estados:
(
ẏ1 = y2
c k
ẏ2 = − m y2 − m y1
Para resolução destas equações, é necessário criar uma função que forneça as derivadas ẏ1 e ẏ2 a partir
dos estados y1 , y2 e t. O script da função está a seguir.
13
Capı́tulo 3. Aplicações em Mecânica
O Scilab dispõe de uma excelente biblioteca, já implementada como funções, para solução de EDOs.
Entre elas, o método de Adams e Runge-Kutta. Não entraremos em detalhes quanto a estes métodos
pois foge do escopo do curso. A função do Scilab para tal chama-se ode. Ela tem como argumentos o
método de resolução (Neste exemplo, adotaremos o método "adams"), as condições iniciais do sistema
y0, o tempo inicial de execução t0, o array tempo t contendo valores de t0 a tf espaçados igualmente
de Dt, e a função f onde estão definidas as derivadas dos estados do sistema. Para mais informações
sobre a função ode, digite help ode no console do Scilab e este abrirá uma janela com a documentação
do comando.
O script que realiza a resolução das equações diferenciais é o seguinte:
// Vetor de tempo
t = t0:Dt:tf;
// Método de integração
y = ode("adams", y0, t0, t, f);
Perceba que é necessário declarar as condições iniciais y0 como um array seguindo o padrão de entrada
que adotamos para a função f (y0 = [x0 xp0]).
14
Capı́tulo 3. Aplicações em Mecânica
Script de simulação
O script final de simulação obtido encontra-se abaixo.
15
Capı́tulo 3. Aplicações em Mecânica
// Vetor de tempo
t = t0:Dt:tf;
// Método de integração
y = ode("adams", y0, t0, t, f);
16
Capı́tulo 3. Aplicações em Mecânica
Equações do movimento
Do teorema do movimento do baricentro, podemos afirmar que a partı́cula encontra-se somente sobre
ação da gravidade. Logo, ÿ = −g. Devido ao método de integração que adotaremos, é mais conveniente
utilizarmos a notação
(
y1 = y
y2 = ẏ
Desta forma, a equação do movimento, de segunda ordem, pode ser descrita por duas de primeira
ordem da forma
(
ẏ1 = y2
ẏ2 = −g
na forma matricial, encontramos
" # " #" # " #
ẏ1 0 1 y1 0
= +
ẏ2 0 0 y2 −g
Definindo as matrizes A e B como
" #
0 1
A =
0 0
17
Capı́tulo 3. Aplicações em Mecânica
e
" #
0
B =
−g
podemos adotar uma notação matricial para o problema da forma
ẏ = Ay + B (3.5)
A função do Scilab com as equações do movimento pode ser escrita no scinotes como reproduzido
abaixo:
function dy=f(t,y)
dy = A*y+B;
endfunction
function [z]=g(y);
z=y(1)+sqrt(y(2)*y(2))+y(2);
endfunction
z é a variável que a função retorna, quando seu valor é menor ou igual à zero, houve choque. y(1) é
o primeiro valor do vetor de entrada da função, que corresponde à altura da partı́cula, e y(2), o segundo
valor, corresponde à velocidade. Nota-se que a função só valerá zero se a altura for menor ou igual à
zero, e a velocidade, negativa.
Método de integração
O método de integração numérica usado nesse exemplo será o método de Runge-Kutta de 4a ordem,
também chamado RK4. Seja uma equação ordinária de primeira ordem, da forma:
dy
= f (t, y) , y(t0 ) = y0 (3.6)
dt
Então, segundo o método Runge-Kutta, a aproximação yn+1 para y(tn+1 ) é:
h
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 ) (3.7)
6
tn+1 = tn + h (3.8)
E os coeficientes ki são definidos como:
k1 = f (tn , yn )
h h
k2 = f (tn + , yn + k1 )
2 2
h h
k3 = f (tn + , yn + k2 )
2 2
k4 = f (tn + h, yn + hk3 )
18
Capı́tulo 3. Aplicações em Mecânica
O que acontece, portanto, é que yn+1 é igual a yn acrescido de uma estimativa da inclinação do
intervalo multiplicada pelo tamanho (h) do intervalo. Para maiores informações sobre o método, visite o
sı́tio: http://pt.wikipedia.org/wiki/M%C3%A9todo_de_Runge-Kutta
Rotina de integração
A rotina de integração será realizada da seguinte maneira: Define-se um laço for com um contador i
associado. O laço descrito abaixo inicializa a variável i com o valor 1, e a cada iteração aumenta o seu
valor em 1, até que seja atingida a condição 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 função f (previamente definida) e o valor atual de
y (condição atual da partı́cula). y(:,i) indica um vetor coluna, contendo todos os valores da coluna i da
matriz y. A coluna i da matriz y representa o estado da variável no instante atual da integração, no caso
deste exemplo, a matriz y possui apenas duas linhas, a primeira sendo referente à altura e a segunda, à
velocidade da partı́cula. Uma vez definidos os coeficientes, calcula-se o valor de y(:,i+1) usando o método
RK4.
Cada passo do loop calcula o próximo valor de y, referente ao instante seguinte. Quando todos os
valores de y foram calculados para o intervalo de tempo especificado, o laço termina.
Porém no caso da partı́cula colidindo com o solo, os valores da altura da mesma não podem ser
menores do que zero. Para resolver este problema define-se um novo laço de condição (if), que avalia a
condição de choque (usando a função g) após cada passo da integração numérica e redefine os valores de
y se necessário, para os valores corrigidos pós-choque.
if g(y(:,i+1))<=0 then
novo_y0=[0;(-1)*y(2,i+1)*e];
y(:,i+1)=novo_y0; //definição da nova condição //inicial
end
O laço diz que, se, no instante atual de integração, o valor da função g(y) é menor ou igual à zero, o
estado atual da variável y deve ser modificado, tornando a altura igual a zero e multiplicando a velocidade
pelo coeficiente –e.
Script de integração
Na primeira parte do script os parâmetros do problema são informados, como variáveis globais. Define-se
o tempo inicial, o tempo final de integração, o intervalo de tempo em que gostarı́amos de conhecer o
estado do sistema dt, a altura inicial da partı́cula h0, a velocidade inicial da partı́cula v0, o estado inicial
y0, o coeficiente de restituição e, e a aceleração da gravidade grav. O valor imax será usado no laço
(loop) de integração, como o limite do contador do laço.
19
Capı́tulo 3. Aplicações em Mecânica
clear
//condições iniciais
h0=5;
v0=-1;
y0=[h0;v0];
t0=0;
y=y0;
//variáveis de tempo
dt=0.001;
t_final=7;
t=(0:dt:t_final);
Procede-se, então, uma sequência de integrações numéricas que são interrompidas pelo critério de co-
lisão. Após cada colisão, as condições de velocidade pós-choque são impostas. A sequência de integrações
numéricas é gerenciada pelo laço (loop) de programação for que segue.
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
Capı́tulo 3. Aplicações em Mecânica
//condição de choque
if g(y(:,i+1))<=0 then
novo_y0=[0;(-1)*y(2,i+1)*e];
y(:,i+1)=novo_y0; //definição da nova condição //inicial
end
end
Por último realiza-se a rotina de plotagem dos dados em uma janela gráfica do scilab.
//plot da resposta
plot2d (t,y’);
// o apóstrofe no y significa que o
// vetor/matriz é transposto(a)
legend (’h’,’v’);
title (’Altura x Tempo’);
xlabel (’Tempo’);
Após percorrer uma distância L1 , o veı́culo tem de suplantar um obstáculo em sua trajetória, como
indicado na Figura (3.6). Durante a passagem pelo obstáculo, o veı́culo permanece com velocidade
constante. O pavimento tem altura definida por:
L
0
se x ≤ L1 + 2 ;
H
h= 2
2π
1 − cos( L2
)x se L1 + L2 < x < L1 + L2 + L2 ; (3.9)
0 se x ≥ L1 + L2 + L2 .
21
Capı́tulo 3. Aplicações em Mecânica
sen(α)(M2 d2 − M1 d1 )ẍO +
cos(α)(M1 d1 − M2 d2 )ÿO +
(M1 d21 − M2 d22 )α̈+
cos(α)(M1 d1 − M2 d2 )g−
(3.10)
k1 Lcos(α)(l0 − yO − Lsen(α) + yA )+
k2 Lcos(α)(l0 − yO − Lsen(α) + yB ) =
− c1 Lcos(α)(ẏO + Lα̇cos(α))−
ẏA + c2 Lcos(α)(ẏO − Lα̇) − ẏB
(M1 + M2 + M + m)ÿO +
cos(α)(M1 d1 − M2 d2 )α̈+
sen(α)(M2 d2 − M1 d1 )α̇2 +
(M1 + M2 + M + m)g − k1 (l0 − y0 − Lsen(α) + yA )+ (3.11)
k2 (l0 − y0 + Lsen(α) + yB ) =
− c1 (ẏO − Lα̇cos(α) − ẏA )+
c2 (ẏO − Lα̇cos(α)) − ẏA
clear
22
Capı́tulo 3. Aplicações em Mecânica
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/v
tA2 = (L1 + L2)/v
tB1 = (L1 + L)/v
tB2 = (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;
else
if 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;
else
yA = 0.0;
dyA = 0.0;
end
end
if t < tB1 then
yB = 0.0;
dyB = 0.0;
else
if 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
Capı́tulo 3. Aplicações em Mecânica
else
yB = 0.0;
dyB = 0.0;
end
end
F = -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
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/Dt
yb1(i) = ys(1,tA1/Dt) + b1*sin(ys(3,tA1/Dt));
end
for i = tA1/Dt:t_final/Dt
yb1(i) = ys(1,i) + b1*sin(ys(3,i));
end
desconforto = max(abs(yb1(:) - yb1(t_final/Dt - 1)));
scf(3);
plot2d(yb1);
xtitle(’Altura na posição do piloto vs. tempo’,’t’,’Yb1 (m)’);
Observe que nesta simulação foi usado o solucionador de equações diferenciais ordinárias ode. Três
gráficos são gerados, estando no primeiro a história temporal do deslocamento vertical variável yO , no
segundo a história temporal do ângulo de arfagem α e no terceiro o deslocamento vertical no assento
do piloto yb 1, que depende tanto de α quanto de yO . A Figura (3.7) apresenta o gráfico de yO = yO (t)
e a Figura (3.8) apresenta o gráfico de αO = αO (t) para esta condição. Observe que o gráfico de yO
permite identificar dois instantes distintos do movimento, um deles, inicial, associado à estabilização de
yO em um valor de equilı́brio e outro associado à passagem do veı́culo pelo obstáculo. Desta forma é
possı́vel obter informações sobre conforto ou segurança de um veı́culo na fase de projeto, lembrando que
as hipóteses de modelagem restringem o campo de perguntas que podemos dirigir à simulação numérica,
ou em outras palavras, a metodologia restringe o campo das conclusões pertinentes.
24
Capı́tulo 3. Aplicações em Mecânica
25
Capı́tulo 3
Bibliografia
26