Movimento de uma Mola Pedro Barahona DI/FCT/UNL Março 2004 30/31 Março de 2004 Movimento de uma Mola 1 Molas - Bases Físicas • Como no caso da queda de corpos, o movimento de uma mola (isto é, um corpo agarrado ao fim da mola) deve ser determinado pelas forças que nela actuam. Antes de as definir, vamos considerar que a mola em repouso ocupa a posição 0. • Podemos considerar 3 forças: – A força que atrai a mola para a sua posição de repouso. – A força do atrito, contrária à velocidade da mola. – A força da gravidade (se a mola não estiver na horizontal), que puxa a mola para baixo • Dividindo a força pela massa do corpo obtemos a respectiva aceleração. 30/31 Março de 2004 Movimento de uma Mola 2 Molas - Bases Físicas F2 > 0 F1 < 0 |F2 | < |F1 | 0 x1 x • A aceleração provocada pela força que atrai a mola para a sua posição de repouso a1 = - k1 x • A aceleração provocada pelo atrito, pode ser expressa por a2 = - k2 v • A aceleração da gravidade (g = -9.8ms-2), afectada por um factor que reflecte a inclinação (p.ex., k3 = 0 para movimento horizontal) a3 = - k3 g • Considerando todos estes componentes temos a = - k1 x - k2 v - k3 g 30/31 Março de 2004 Movimento de uma Mola 3 Modelação de Equações Diferenciais Baseado na aproximação de funções por séries de Taylor, vamos simular o comportamento temporal de uma função x(t) através de f(t+dt) = f(t) + df Sendo df o valor da variação da função f no intervalo dt, ele pode ser calculado a partir da aproximação de primeira ordem df df dt dt A velocidade do corpo (v) e a posição são assim obtidas já que a aceleração é a velocidade são, respectivamente, as suas derivadas em ordem ao tempo dv dx dv dt = a · dt dx dt = v · dt dt dt 30/31 Março de 2004 Movimento de uma Mola 4 Especificação do Problema Com base na situação inicial (posição inicial da mola, x0), características da mola (“força”, atrito e inclinação), determinar a evolução ao longo de um tempo t da posição da mola. Entrada Posição Inicial “Força” da Mola Coeficiente deAtrito Inclinação Intervalo de Tempo Tempo de Simulação 30/31 Março de 2004 Resultados Algoritmo de Movimento de Uma Mola Movimento de uma Mola Gráficos para • Posição da mola • Velocidade da mola • Aceleração da mola 5 Gráficos Em Octave a forma mais simples de desenhar um gráfico da função f(x) é utilizar a função pre-definida 1.00 plot(X,F) sendo X e F vectores da mesma dimensão, e em que o i-ésimo elemento do vector F corresponde ao valor da função no ponto x indicado pelo i-ésimo elemento do vector X. i X F 1 0.00 0.00 30/31 Março de 2004 2 0.10 0.00 3 0.20 0.01 4 0.30 0.03 5 0.40 0.06 0.80 0.60 F 0.40 0.20 0.00 0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00 X 6 0.50 0.13 7 0.60 0.22 Movimento de uma Mola 8 0.70 0.34 9 0.80 0.51 10 0.90 0.73 11 1.00 1.00 6 Tipos de Dados As variáveis dt, k1, k2 e k3 são do tipo real e mantêm-se constantes ao longo do problema, uma vez inicializadas. Como se pretendem gráficos para a posição, velocidade e aceleração ao longo do tempo, deverá este manter um conjunto de vectores T, X, V e A com o significado esperado para registar os valores sucessivos de • T : os instantes em que são avaliadas as outras grandezas • X : a posição do corpo nos instantes registados em T • V : a velocidade do corpo nos instantes registados em T • A : a aceleração do corpo nos instantes registados em T 30/31 Março de 2004 Movimento de uma Mola 7 Vectores e Matrizes Todas as linguagens de programação de alto nível permitem a especificação de vectores (“arrays”) para agrupar dados do mesmo tipo. Em geral, os dados destas estruturas estão organizados em uma ou mais dimensões, sendo as matrizes um caso particular de vectores bidimensionais (2 dimensões). Em Octave apenas se podem utilizar, como “primitivas”, vectores uni- e bi-dimensionais (vectores de outras dimensões, e respectivas operações têm de ser tratados pelo utilizador, que tem de criar as respectivas operações de acesso e manipulação). 1 2 3 Por exemplo, A = [ 1, 2, 3] ou B = [ 1 2 3 ; 4 5 6]. 30/31 Março de 2004 Movimento de uma Mola 1 2 3 4 5 6 8 Vectores e Matrizes As linguagens compiladas requerem em geral que as matrizes sejam declaradas (como o tamanho das várias dimensões) antes de utilizadas. Tal não é estritamente necessário em Octave (!) que vai alocando espaço de memória à medida que novos elementos são introduzidos. Notar no entanto que: • Esta flexibilidade tem como custo a maior lentidão de execução. • Em execuções sucesivas do mesmo programa, pode-se dar o caso do vector manter uma dimensão (anterior), maior do que a pretendida na execução corrente. 30/31 Março de 2004 Movimento de uma Mola 9 Vectores e Matrizes Desta forma, é conveniente inicializar os vectores utilizados num programa, sempre que se conheçam as suas dimensões e tamanho de cada dimensão. Em Octave, a inicialização pode ser feita através das operações de “construção” de vectores e matrizes, indicadas através de parênteses rectos (como indicado atrás) Em Octave, podem-se ainda inicializar vectores através das instruções eye, zeros ou ones (que inicializam matrizes diagonais, ou preenchidas com zeros e uns, respectivamente. Alguns exemplos: 0 1 0 A = eye(2) 0 0 1 B = zeros(3,1) 0 1 1 1 C = ones (2,3) 1 1 1 30/31 Março de 2004 Movimento de uma Mola 10 Vectores e Matrizes Um elemento de uma matriz é referido, indicando-se a ordem desse elemento em cada dimensão. A notação é diferente nas várias linguagens. Em Octave a referência faz-se com parênteses curvos. Por exemplo: x = A(2, 1) % = 4 1 2 3 2ª linha, 1ª coluna 4 5 6 O Octave permite endereçar sub-vectores directamente, utilizando o operador : como identificador de todos os elementos de uma dimensão. Por exemplo L1 = A(1 , : ) ou C2 = A(: , 2 ) 2 1 1ª linha, todas as colunas 30/31 Março de 2004 2 3 Todas as linhas da 2ª coluna, Movimento de uma Mola 5 11 Vectores e Matrizes : Ciclos Para efeito de endereçamento é vulgar utilizar índices (i, j, k, ...) que indicam a posição nas respectivas dimensões. Variando estes índices pode variar-se o elemento do vector que é referido. É muito frequente pretender-se num programa “varrer” todos os elementos de um vector, isto é, percorrê-los por ordem crescente do(s) seu(s) índice(s). No caso de vectores unidimensionais, tal pode ser feito num único ciclo enquanto 30/31 Março de 2004 i 1; enquanto i < imax fazer A(i) ... ...... i i + 1; fim enquanto; Movimento de uma Mola 12 Ciclos Para Para evitar a necessidade de inicializar um índice e de ir procedendo ao seu incremento dentro do ciclo enquanto, todas as linguagens de programação prevêem um ciclo para que elimina essa necessidade. i 1; enquanto i < imax fazer A(i) ... ...... i i + 1; fim enquanto; para i de 1 a imax fazer A(i) ... ...... fim para; Notas: 1. É necessário conhecer imax, o tamanho máximo da dimensão i. 2. Assume-se que o primeiro elemento tem índice 1 (obrigatório em OCTAVE) 30/31 Março de 2004 Movimento de uma Mola 13 Estrutura do Algoritmo Estamos agora em condições de especificar o algoritmo para simulação do movimento de uma mola, que tal como no caso da queda de corpos pode ser decomposto em 3 “componentes” 1. Inicialização de Variáveis 2. Ciclo de Simulação da Queda 3. Apresentação de Resultados Entrada Posição Inicial “Força” da Mola Coeficiente deAtrito Inclinação Intervalo de Tempo Número de Iterações 30/31 Março de 2004 Algoritmo de Movimento de Uma Mola Movimento de uma Mola Resultados Gráficos para • Posição da mola • Velocidade da mola • Aceleração da mola 14 Constantes e Variáveis Utilizadas Constantes: • g = 9.8 a aceleração da gravidade (na Terra) Variáveis: • • • • • • • • • • • i: variável que indica a iteração corrente imax: o número máximo de iterações k1: o coeficiente de força da mola k2: o coeficiente de atrito k3: a inclinação da mola xo: posição inicial do corpo dt: o valor do intervalo de tempo usado na simulação T: um vector que regista o tempo registado em cada iteração X : vector com as posição do corpo em cada iteração V : vector com a velocidade do corpo em cada iteração A : vector com a aceleração do corpo em cada iteração 30/31 Março de 2004 Movimento de uma Mola 15 Inicialização de Variáveis • As variáveis x0, dt, k1, k2 e k3 e imax são numéricas e devem ser introduzidas pelo utilizador, mantendo-se constantes após a inicialização. • Na realidade imax é de tipo inteiro e as outras de tipo real, mas no Octave não é necessário distinguir os tipos de dados numéricos. • Os primeiros elementos dos vectores T, X, V e A - isto é, T(1), X(1), V(1) e A(1) - são atribuídos antes do ciclo, • Os restantes elementos dos vectores – isto é, T(i), X(i), V(i) e A(i), com i 2 .. imax - vão sendo calculados nas sucessivas iterações do ciclo para. 30/31 Março de 2004 Movimento de uma Mola 16 1. Inicialização de Variáveis Entra x0; % Altura inicial Entra k1; % Coef. de força da mola Entra k2; % Coeficiente de atrito Entra k3; % Inclinação da mola Entra imax; % Número de iterações Entra dt; % Intervalo de tempo g 9.8; % Aceleração da Gravidade % T, X, V e são A vectores com imax elementos; T(1) X(1) V(1) A(1) 30/31 Março de 2004 0; x0; 0; - k1 * X(1) - k3 * g; Movimento de uma Mola 17 2. Ciclo de Simulação A parte fundamental do algoritmo é o ciclo para de simulação em que se vão calculando os sucessivos valores de tempo t, da altura x, da velocidade v e da aceleração a, em tempos espaçados de um intervalo dt para i de T(i) X(i) V(i) A(i) fim para; 30/31 Março de 2004 2 até imax fazer T(i-1) + dt ; X(i-1) + V(i-1)· dt; V(i-1) + A(i-1)·dt; -k1· X(i) - k2· V(i) - k3·g; Movimento de uma Mola 18 3. Apresentação de Resultados Os resultados que se pretendem apresentar são a evolução da posição, da velocidade e da aceleração ao longo do tempo de simulação. Em pseudo-código, estes gráficos podem ser representados por Gráfico(T,X); Gráfico(T,V); Gráfico(T,A); % Posição da Mola % Velocidade da Mola % Aceleração da Mola Que terá de ser particularizado para uma qualquer linguagem (por exemplo Octave) através das primitivas disponibilizadas nessa linguagem. 30/31 Março de 2004 Movimento de uma Mola 19 Algoritmo Completo % Inicialização de Variáveis Entra x0; % Altura inicial Entra k1; % Coef. de força da mola Entra k2; % Coeficiente de atrito Entra k3; % Inclinação da mola Entra imax; % Número de iterações Entra dt; % Intervalo de tempo g 9.8; % Aceleração da Gravidade T(1) 0; X(1) x0; V(1) 0; A(1) - k1 * X(1) - k3 * g; % Ciclo de Simulação para i de 2 até imax fazer T(i) T(i-1) + dt ; X(i) X(i-1) + V(i-1)· dt; V(i) V(i-1) + A(i-1)·dt; A(i) -k1· X(i) - k2· V(i) - k3·g; fim para; % Apresentação de Resultados Gráfico(T,X); % Posição da Mola Gráfico(T,V); % Velocidade da Mola Gráfico(T,A); % Aceleração da Mola 30/31 Março de 2004 Movimento de uma Mola 20 Programa Octave x0 = input("Quais são: a posição inicial (em metros? "); k1 = input("... o coeficiente de força da mola (1/s2)? "); k2 = input(" ... o coeficiente de atrito (1/s) ? "); k3 = input(" ... e a inclinação da mola (0..1) ? "); imax = input(" ... e o número de iterações (>100) ? "); dt = input(" ... e o intervalo de tempo (em s) ? "); g = 9.8; t=ones(imax,1); x=ones(imax,1); v=ones(imax,1); a=ones(imax,1); t(1) = 0; x(1) = -x0; v(1) = 0; a(1) = -k1 * x(1) - k2 * v(1) - k3 * g; for i = 2:imax t(i) = t(i-1) + dt; x(i) = x(i-1) + v(i-1)*dt; v(i) = v(i-1) + a(i-1)*dt; a(i) = -k1 * x(i) - k2 * v(i) - k3 * g; end; % mostrar gráficos de x, v e a em função de t 30/31 Março de 2004 Movimento de uma Mola 21 Gráficos em Octave Como se pretende mostrar 3 gráficos, com eixos diferentes, tal pode ser feito em Octave através da criação de 3 janelas de gráficos, e usando cada uma para a função pretendida % mostrar gráficos de x, v e a em função de t multiplot(1,3); subwindow(1,1); xlabel("posição") plot(t,x); subwindow(1,2); xlabel("velocidade") plot(t,v); subwindow(1,3); xlabel("aceleração") plot(t,a); 30/31 Março de 2004 Movimento de uma Mola 22 Progama Octave • O programa pode ser testado com vários valores dos diferentes parâmetros. Por exemplo Pouco atrito • x0 = 15, k1 = 3, k2 = 0.5, k3 = 1, dt = 0.01, imax = 1500 Muito atrito • x0 = 15, k1 = 3, k2 = 3.0, k3 = 1, dt = 0.01, imax = 1000 Nenhum atrito • x0 = 15, k1 = 3, k2 = 0.0, k3 = 1, dt = 0.01, imax = 1500 • Realçar a importância de dt tomar valores pequenos, de forma a garantir que erros cometidos pela aproximação das equações diferenciais não sejam muito significativos (dt 0.1 seg). • Para valores “grosseiros” de dt (por exemplo, dt >= 0.1), a mola pode mesmo divergir! 30/31 Março de 2004 Movimento de uma Mola 23