Хорошо, вот головоломка программирования/физики, скажем, на Java (хотя это не имеет большого значения, но для согласованности мы будем использовать Java).
У меня есть массив двойников, где каждый элемент представляет последовательные производные позиции объекта. Так:
d[0] // position
d[1] // velocity
d[2] // accelleration
так далее ...
Будет как минимум 1 и потенциально любое количество элементов (но на практике, вероятно, не более 5). Все элементы за пределами конца массива считаются равными нулю.
У нас также есть double t
для времени.
Итак, если бы d.length
было 3, то очень конкретно:
d[0] += d[1] * t + d[2] * t * t / 2
d[1] += d[2] * t
Но как написать итеративное решение (без рекурсии!), которое будет обновлять все элементы массива за время t для любой длины a?
Голоса должны быть присуждены за эффективность и лаконичность.
РЕДАКТИРОВАТЬ: Законы движения находятся на страницах физики этого сайта, но в основном каждый термин имеет форму:
power(t,n) / factorial(n)
Таким образом, следующий член первого уравнения будет d[3] * t*t*t / 6
Если вы не знакомы с этими уравнениями, пожалуйста, не просите меня объяснить.
Тестовый пример:
final static double[] D = { 5.0, 4.0, 3.0, 2.0, 1.0 };
double t = 10.0
должен дать:
[945.0, 300.66666666666663, 73.0, 12.0, 1.0]
Второй элемент может отличаться из-за ошибок точности.