Comments 12
Честно говоря, не понимаю смысла данной статьи. С одной стороны, её тон — это "сейчас всё на пальцах объясним", с другой стороны — отсылки к Гамильтоновым системам и к симплектическим интеграторам, а они уже требуют некоего знания матана (и в прямом, и в луркморовском смысле).
Ещё речь заходит о точности интегрирования в терминах порядков производной (накапливаемая ошибка имеет порядок четвёртой производной), но это а) проблема, если у вашей функции нужного количества производных нет б) вообще не упоминается шаг по времени/пространству, а это и есть самая важная часть оценок погрешности.
ru.wikiversity.org/wiki/Численные_методы_решения_задачи_Коши_для_обыкновенных_дифференциальных_уравнений
В недавней статье про физический движок было следующее улучшение метода Эйлера:
position += velocity * dt * 0,5;
velocity += acceleration * dt;
position += velocity * dt * 0,5;
ИМХО, МКР и МКЭ это первые приложения компьютеров собственно и были — проверить «синус» это как бы ерунда, можно и на бумажке проинтегрировать — а вот если система уже не так линейна, однообразные «рутинные» вычисления делает одна машина вместо целого этажа «расчётчиков»!
К примеру, предложенный Вами осциллятор имеет не постоянный коэффициент жесткости (при деформациях больше заданной пружина «растягивается» и/или обрывается")? или демпфер меняет свой коэффициент по времени/по деформации? а если к одному грузу на пружине с демпфером присоединён ещё один с m2, c2, b2? а если в системе возбуждение есть?
И наконец, если вы всё ещё пишете в игре такое...
...потратьте время на "подумать" и замените это на:
position += velocity * dt + 0.5 * acceleration * dt * dt;
velocity += acceleration * dt;
Интегрирование уравнений движения