En una dimensión, este problema puede resolverse analíticamente. Los pasos de la solución se dan en el sitio web de hiperfísica
Reproduciré aquí los pasos clave (para el problema del movimiento horizontal con arrastre cuadrático - solución aquí se da ). Combinaremos todos los coeficientes que contribuyen al arrastre en un único coeficiente $c = \frac12 \rho A C_D$ para simplificar. Entonces podemos escribir la ecuación diferencial para la velocidad $v$ como
$$m \dot{v} = - c v^2$$
Integrar:
$$\int \frac{dv}{v^2} = -\frac{c}{m}\int dt\\ \frac{1}{v} = \frac{ct}{m} + C$$ en $t=0$ , $v=v_0$ así que $C = \frac{1}{v_0}$ . Poniendo $\frac{m}{c v_0}=\tau$ podemos escribir
$$v(t) = \frac{v_0}{1+ \frac{t}{\tau}}$$
Ahora nos integramos una vez más para conseguir la posición:
$$x(t) = v_0 \tau \log(1 + \frac{t}{\tau}) + C$$
Si ponemos $x(0)=0$ entonces, obviamente $C=0$ .
Una cosa interesante que se encuentra aquí es que NO HAY LÍMITE en el rango de x - a medida que el objeto se ralentiza, el arrastre disminuye más rápidamente. En realidad, a velocidades muy bajas la resistencia se vuelve lineal y el objeto se detiene - pero matemáticamente este objeto nunca se detiene.
Normalmente, la gente resuelve este tipo de problemas utilizando la integración numérica. De la forma más sencilla, se utilizaría el método de integración de Euler: a partir de la velocidad en un momento dado, se calcula la fuerza, y por tanto la aceleración, y por tanto la nueva velocidad, en un momento posterior. Y la velocidad instantánea por el paso de tiempo da la nueva distancia.
En pseudocódigo:
x = 0
v = v_init
g = 9.81
m = mass
drag_factor = 123.45 // whatever 1/2 rho C_d A is calculated to be
time_step = 0.01
tmax = 5
xmax = 100
time = 0
while (true):
f = -drag_factor * v * v // add m*g here if gravity plays
a = f / m
v = v + time_step * a
x = x + v * time_step
time += time_step
if x > xmax || time > tmax:
break
Es mucho mejor utilizar la integración por salto o Runge-Kutta (búsquelo) - esos métodos no sufren los mismos defectos que este enfoque tan simplista (que no tiene en cuenta adecuadamente el cambio de fuerza / velocidad durante el paso de tiempo, y por lo tanto dará respuestas muy diferentes cuando cambie el paso de tiempo). Pero estos métodos te permiten hacer movimientos más complejos (por ejemplo, un proyectil viajando alrededor de la tierra, con la resistencia debida a la atmósfera que cambia con la altitud, y lo mismo para la gravedad).
Sólo por diversión, escribí una variación de lo anterior que aumenta el paso de tiempo a medida que la aceleración disminuye usando time_step=abs(0.001 * v_0 / a)
para poder apreciar mejor el comportamiento asintótico. Efectivamente, esto se parece mucho a una curva logarítmica (trazada en la misma escala, utilizando la expresión derivada anteriormente):
La concordancia entre la integración numérica y la solución de forma cerrada debería darte una confianza razonable de que ésta es la solución que buscabas (aunque parece que esperabas algo que tuviera un valor finito...)