6 votos

Solución para primavera armónica sobre-amortiguado

(Una especie de alma en la física.stackexchange sugirió que he puesto aquí, así, lo siento si fuera de los límites.)

Estoy tratando de programación modelo de un armónico amortiguado de la primavera para el uso en el móvil de interfaz de usuario animaciones (la física matemática no es mi fondo, por favor, perdone cualquier malentendido).

Deriva de los parámetros para el caso general de la ecuación, puedo de forma iterativa calcular los valores hasta alcanzar un umbral adecuado, porque aunque esto está vinculado a una "simple" trigonométricas y $e^{x}$ funciones de la CPU, el 4000-algunos-impar pasos pueden causar alrededor de 0,25 segundos de retraso en la lentitud de los dispositivos, mientras que se calcula. Me gustaría velocidad esta usando mi plataforma super optimizado vector y BLAS/LAPACK variantes.

El requisito para ello es siempre puede calcular previamente el número de pasos necesarios para llegar a mi umbral de valor.


En el underdamped caso, donde las raíces de la función característica de la ecuación diferencial no son reales, puedo usar algebraicas trucos para conseguir mis valores:

$$x(t) = c_{1}e^{r_{1}}\cos(i_{1}t) + c_{2}e^{r_{2}}\sin(i_{2}t)$$

(Dado $r_{1}$, $i_{1}$, $r_{2}$, y $i_{2}$ son los reales y los componentes irracionales de mis dos raíces, respectivamente).

Sabiendo que $r_{1} = r_{2}$$i_{1} = -i_{2}$, me puede simplificar a:

$$x(t) = c_{1}e^{r_{1}}\cos(i_{1}t)$$

Conseguir el valor deseado de $t$ para mi umbral de $a$:

$$t = \arccos(a / c_{1} / e^{r_{1}}) / i_{1}$$


Cuando las raíces son reales, la ecuación parece mucho más sencillo:

$$x(t) = c_{1}e^{r_{1}} + c_{2}e^{r_{2}}$$

Sin embargo, no tengo mis funciones trigonométricas flotando alrededor que me ayude a resolverlo (aunque yo lo hice, los componentes irracionales 0 causaría problemas, por supuesto).

Tome el ejemplo concreto en las páginas 3 y 4 de este documento (mi biblia durante este proceso), ya que al menos resolver limpiamente:

$$x(t) = 1.5e^{-t} - 0.5e^{-3t}$$

Sé cómo iba a resolver por $t$ para obtener mi para al $x(t) = a$ sobre el papel, mediante el establecimiento $x=e^{t}$, resolución de problemas, y de nuevo sustituyendo, pero no tengo ese lujo aquí.

Puedo hacer algunas suposiciones: las raíces y las constantes son todos los reales. Estoy siempre va a estar buscando para los más pequeños, en primer lugar, el valor positivo de $t$. Obviamente, el proceso iterativo de solución es la más simple para este caso, pero al final lo que entraña más pasos y por lo tanto ser más lento no importa lo que mis otras optimizaciones sería. Entonces, ¿cómo se podría ir sobre la solución para que mi umbral de valor a través de algoritmos en esta (supuestamente) simplificado caso?

Anexo

El underdamped solución presenta un extra de exigencia. El movimiento de la curva de oscilará de ida y vuelta un par de veces a través de la estación. Por lo tanto, "el primero y el más bajo" $t$ requisito no es necesariamente cierto. En mi actual iterativo en el código, el valor de umbral es tanto comprueba con la distancia de la actual $x(t)$ hasta el extremo, así como a la distancia de la anterior $x(t)$ como para permitir un número de oscilaciones. Esto podría hacer más eficientes de solución casi imposible.

6voto

Sergio del Amo Puntos 390

Para la ecuación general $m \ddot{x} + b \dot{x} + k x = 0$ usted puede encontrar una solución con los siguientes pasos

Respuesta Actualizada

  1. Desde el problema de los coeficientes de calcular los valores de característica $$ \begin{aligned} \omega_n & = \sqrt{\frac{k}{m}} \\ \zeta & = \frac{b}{2 \sqrt{k m}} \end{aligned}$$
  2. Si $\zeta<1$, a continuación, calcular la solución de los coeficientes de las condiciones iniciales $x(0)=x_0$ $\dot{x}(0)=v_0$ $$ \begin{aligned} \omega & = \omega_n \sqrt{1-\zeta^2} \\ A & = x_0 \\ B & = \frac{v_0+x_0 \omega_n \zeta}{\omega} \\ r & = \omega_n \zeta \end{aligned} $$
  3. La solución la función es $$ x(t) = e^{-r t} \left( A \cos(\omega t) + B \sin(\omega t) \right)$$
  4. El tiempo final $$ x_{tol} \approx e^{-r t_{final}} \sqrt{A^2+B^2} \\ t_{final} = \frac{ \ln{ \left( \frac{ \sqrt{A^2+B^2}}{x_{tol}} \right)} } {r} $$
  5. Si $\zeta>1$, a continuación, calcular la solución de los coeficientes de las condiciones iniciales $x(0)=x_0$ $\dot{x}(0)=v_0$ $$ \begin{aligned} \omega & = \omega_n \sqrt{\zeta^2-1} \\ C & = \frac{1}{2} \left( x_0 + \frac{v_0 + x_0 \zeta \omega_n}{\omega} \right) \\ D & = \frac{1}{2} \left( x_0 - \frac{v_0 + x_0 \zeta \omega_n}{\omega} \right) \\ r_1 & = \left(\zeta - \sqrt{\zeta^2-1}\right) \omega_n \\ r_2 & = \left(\zeta + \sqrt{\zeta^2-1}\right) \omega_n \end{aligned} $$
  6. La solución la función es $$ x(t) = C e^{-r_1 t} + D e^{-r_2 t} $$
  7. El tiempo final $$ \begin{aligned} x_{tol} & \approx C e^{-r_1 t_{final}} + 0 \\ t_{final} & = \frac{ \ln{\left( \frac{C}{x_{tol}} \right)}}{r_1} \end{aligned} $$ because $r_1<r_2$ y por lo tanto en descomposición más lenta.
  8. Para el crítico de amortiguación $\zeta=1$ la solución la función es $$ x(t) = e^{-\omega_n t} \left(x_0 + (v_0+x_0 \omega_n) t \right) $$
  9. El tiempo final $$ \begin{aligned} \ln{\left(x_{tol}\right)} & \approx {\rm Taylor}\left( \ln{\left( (v_0 + x_0 \omega_n) t + x_0 \right)} -\omega_n t, t=\frac{2\pi}{\omega_n},{\rm order}:=1 \right) \\ X & = \frac{2\pi v_0}{\omega_n} + x_0 (2\pi+1) \\ t_{final} &= \frac{ 2 \pi \left( X \ln \left( \frac{X}{x_{tol}} \right) -X+x_0 \right)}{\omega_n \left( X ( 2\pi -1)+x_0 \right)} \end{aligned}$$

2voto

Shabaz Puntos 403

Como el documento dice, cuando tiene dos raíces reales y el sistema es overdamped, el uno con el más constante de tiempo (inverso de la raíz) controla cómo de cerca está a cero. Así que si usted está tratando de ver cuánto tiempo toma para conseguir a cerca de cero (si $a$ es mucho más pequeño que el original de desplazamiento) se puede omitir el que cae más rápido. En tu ejemplo, que es el $e^{-3t}$ plazo. Usted puede entonces resolver $a=1.5e^{-t}$ conseguir $t=-\log \frac a{1.5}$. Como un ejemplo, si $a=0.1$, obtenemos $t \approx 2.7$ El otro término, a continuación, contribuye $-0.00015$, bastante insignificante.

Si están muy cerca, se puede utilizar el método de Newton o de la iteración de punto fijo. Dicen que se fueron resolviendo $0.1=1.5e^{-t}-0.5e^{-1.01t}$ Usted podría estar buscando una raíz de $f(x)=-0.1+1.5e^{-t}-0.5e^{-1.01t}$, lo que da $f'(x)=-1.5e^{-t}+0.505e^{-1.01t}$ Para un valor de partida, ignorar la diferencia de la exponenciales y tome $x_0=-\log \frac {0.1}{1.5-0.5}\approx2.3$ $x_{i+1}=x_i-\frac {f(x_i)}{f'(x_i)}$ que convergen rápidamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X