Lo que quiero: tengo una cuerda de goma que es de longitud cuando no está estresado y es capaz de estirarse (a largo). Quiero acelerar horizontalmente una masa constante, que tiene una fricción despreciable. Me gustaría tener una función que me diga la velocidad de la masa en función del tiempo, por ejemplo, la velocidad después de soltarlo.
Lo que hice: He hecho algunas mediciones de las fuerzas de la cuerda al tirar de ella en diferentes longitudes. Por supuesto, al tirar (largo total ) Tengo una fuerza de . Aquí hay un gráfico de mis resultados.
: desplazamiento de un extremo de la cuerda
: fuerza medida
También pude hacer una regresión y encontré una función que describe cuánta fuerza obtengo después de tirar de una longitud determinada. Nombro esta función para Fuerza dependiente del desplazamiento. A partir de esto, es fácil obtener la función de aceleración, que es con del objeto que quiero acelerar. Pero ahora estoy atascado. De alguna manera necesito conseguir en lugar de , por lo tanto, la aceleración por tiempo, no por longitud, entonces puedo integrar eso para obtener .
¿Cómo convierto la dependencia de la función?
Ciertamente desea integrar numéricamente su ecuación de movimiento dada su expresión de la fuerza.
Asumiré que la masa está unido a un lado de la cuerda, mientras que el otro lado está unido a una pared o algo que no se moverá durante la integración. Algo como esto, donde el resorte es de hecho tu cuerda, con la extensión de la cuerda
Luego, simplemente puede integrar (por ejemplo, usando el esquema de Euler) la ecuación
##################################################
## Integration using Euler (mid-point) method knowing position x and speed xp=\dot{x}
##################################################
def integration(x,xp)
dxp = force(x)*@dt
dx = (xp+dxp/2)*@dt
return x+dx,xp+dxp
end
##################################################
## Force expression knowing position x
##################################################
def force(x)
return -10*x
end
##################################################
## Effective integration loop
##################################################
@dt = 0.001 # time increment
t = 0 # initial time
x = 5 # initial position
xp= 0 # initial speed
10000.times do |i|
t += @dt
x,xp = integration(x,xp)
puts "#{t}\t#{x}\t#{xp}"
end
Simplemente ingrese sus condiciones iniciales y fuerce la expresión de sus medidas y tendrá tanto la posición como la velocidad a lo largo del tiempo (NB: tomé
en mi código, pero puede agregar el valor correcto donde quiera en la integration
función o en la force
función [que pasará a llamarse "aceleración" entonces]).
También puede refinarlo para integrarlo en un tiempo total constante y generar menos resultados que los pasos de integración (la precisión aumenta con un paso de integración más pequeño, @dt
pero puede volverse difícil de dibujar cuando tiene un millón de puntos solo para ser más preciso en la integración)
Cuando la aceleración es una función de la posición, use lo siguiente
que se resuelve para .
La posición se encuentra a partir de
que se resuelve para .
Ejemplo
cuando en entonces o
Entonces
y cuando , entonces o
Si tu masa fuera entonces en gráfico y
usuario23224
invierno
usuario23224