Я использую odeint для решения системы из 4 связанных уравнений, которые имитируют вибрацию транспортного средства во время вождения. Я надеялся, что мои результаты будут похожи на те, что я получаю в MATLAB, но, к сожалению, этого не происходит. Я проверял свои уравнения несколько раз, и в них нет ошибок, поэтому проблема должна возникать во время интеграции.
Я закодировал решение в MATLAB, чтобы проверить, что я получаю от сценария C ++. При тех же условиях это решение, которое я получаю от odeint:
И это то же самое решение в MATLAB:
Я не ожидал, что микроколебания, наблюдаемые в MATLAB, появятся в результатах odeint, но большинство значений даже не близки к правильным. Я использую не тот интегратор, или я просто не буду работать с этим приложением?
Файл c ++ можно найти на Github, здесь. Класс под названием «coupledODE» представляет собой систему уравнений относящиеся к моей системе, и odeint заблокирован в основной функции.
dt=0.01
илиdt=0.005
должны подойти. С данными класса 4 из кода C ++ и остальными константами (сравните параметры демпфирования) из файла matlab я могу воспроизвести второй график matlab на python, как сlsoda-scipy.integrate.odeint
, так и с моим собственным адаптивным вариантом RK4 - только там не происходит любое изменение размера шага, этоdt=0.0033
без изменений для относительной ошибки1e-5
. - person Lutz Lehmann   schedule 03.12.2016