OK, voici un puzzle de programmation/physique, disons Java (bien que ce ne soit pas vraiment important - mais par souci de cohérence, nous utiliserons Java).Calcul de la position, de la vélocité et d'autres dérivées d'un mouvement de manière efficace
J'ai un tableau de doubles où chaque élément représente les dérivées successives de la position d'un objet. Alors:
d[0] // position
d[1] // velocity
d[2] // accelleration
etc ...
Il y aura au moins 1 et potentiellement un certain nombre d'éléments (mais dans la pratique, probablement pas plus de 5). Tous les éléments au-delà de la fin du tableau sont supposés être zéro. Nous avons également un double t
pour le temps.
Donc, si d.length
étaient 3 alors très précisément:
d[0] += d[1] * t + d[2] * t * t/2
d[1] += d[2] * t
Mais comment pouvons-nous écrire une solution itérative (pas récursion!) Qui mettra à jour tous les éléments du tableau pour l'instant t pour une durée de une?
Des votes devraient être accordés pour l'efficacité et la concision.
EDIT: Les lois du mouvement sont sur les pages de la physique de ce site, mais essentiellement chaque terme a la forme:
power(t,n)/factorial(n)
Ainsi, le prochain mandat de la première équation serait d[3] * t*t*t/6
Si vous n'êtes pas familier avec ces équations, s'il vous plaît ne me demandez pas d'expliquer.
Un cas de test:
final static double[] D = { 5.0, 4.0, 3.0, 2.0, 1.0 };
double t = 10.0
devrait donner:
[945.0, 300.66666666666663, 73.0, 12.0, 1.0]
Le deuxième élément peut varier en raison d'erreurs de précision.
S'il vous plaît, pouvez-vous mettre à jour votre question en montrant un exemple avec a.length == 3? – davidbuzatto
Vous posez donc des questions sur un schéma d'intégration? avez-vous un pas de temps fixe? – MinaKamel
Doit avoir été length == 3. Passez à d pour le nom du tableau afin de ne pas le confondre avec l'accélération. t n'est évidemment pas fixe. – rghome