Pull to refresh

Comments 12

Честно говоря, не понимаю смысла данной статьи. С одной стороны, её тон — это "сейчас всё на пальцах объясним", с другой стороны — отсылки к Гамильтоновым системам и к симплектическим интеграторам, а они уже требуют некоего знания матана (и в прямом, и в луркморовском смысле).


Ещё речь заходит о точности интегрирования в терминах порядков производной (накапливаемая ошибка имеет порядок четвёртой производной), но это а) проблема, если у вашей функции нужного количества производных нет б) вообще не упоминается шаг по времени/пространству, а это и есть самая важная часть оценок погрешности.

Метод Эйлера из смого первого примера просто неустойчивый при таком шаге и таких параметрах системы. выберите шаг поменьше и сразу в решении система перестанет набирать энергию. здесь про это написано.
ru.wikiversity.org/wiki/Численные_методы_решения_задачи_Коши_для_обыкновенных_дифференциальных_уравнений
К сожалению вы не рассказали про одно из ключевых приемуществ методов Рунге-Кутты — это возможность контроля погрешности на каждом шаге (так как он может быть неустойчивым для некоторых систем). А есть еще методы Адамса, которые позволяют явно оценить погрешность на каждом шаге и контролировать ее.

Ещё вроде leapfrog метод есть, стоило его упомянуть — или я запутался? Он как будто бы тоже симплектический, сохраняет общую энергию системы неизменной (RK4, кстати, не сохраняет).

ЕМНИП, он сохраняет не саму энергию, а некую её слегка модифицированную разновидность, но это мелочи. Каждый инвариант на вес золота!=)
Не упомянута «Модель Пространства Состояний». Когда дифф. уравнение приводится к Форме Коши, а из нее через дискретизацию составляются разностные уравнения для ЭВМ. Это тоже интегрирование, хоть квант времени там фиксированный.

В недавней статье про физический движок было следующее улучшение метода Эйлера:


position += velocity * dt * 0,5;
velocity += acceleration * dt;
position += velocity * dt * 0,5;
Киньте ссылочку на статью пожалуйста.
Тоже не понимаю зачем писать тут стандартную работу студента 1-2 курсов технических вузов?
То есть если я умею реализовывать метод РК4 то я могу идти в геймдев? а если знаю разницу между МетодомКонечныхРазностей и МетодомКонечныхЭлементов?
ИМХО, МКР и МКЭ это первые приложения компьютеров собственно и были — проверить «синус» это как бы ерунда, можно и на бумажке проинтегрировать — а вот если система уже не так линейна, однообразные «рутинные» вычисления делает одна машина вместо целого этажа «расчётчиков»!
К примеру, предложенный Вами осциллятор имеет не постоянный коэффициент жесткости (при деформациях больше заданной пружина «растягивается» и/или обрывается")? или демпфер меняет свой коэффициент по времени/по деформации? а если к одному грузу на пружине с демпфером присоединён ещё один с m2, c2, b2? а если в системе возбуждение есть?

И наконец, если вы всё ещё пишете в игре такое...

...потратьте время на "подумать" и замените это на:

position += velocity * dt + 0.5 * acceleration * dt * dt;
velocity += acceleration * dt;

Sign up to leave a comment.

Articles