2016-12-28 4 views
0

Я начинаю программист, и я хотел бы интегрировать функцию с помощью ode 'dopri5', но я не думаю, что я делаю это правильно. Ссылка не помогла, и у меня ошибка, которую я не узнаю. Итак, изначально я использовал odeint, и он работал нормально. Вот что кусок кода:Запуск ode, метод dopri5, ошибка: неподдерживаемый тип операнда 'ode'

Itmp = odeint(te.rhs, Itmp, [xLim[i], xLim[i+1]], mxstep=10000, 
          atol=1e-11, rtol=1e-11, args=(f,))[1] 

И моя попытка интегрировать с помощью dopri5 заключается в следующем:

Itmp = ode(te.rhs).set_integrator('dopri5', max_step=10000,atol=1e-11, rtol=1e-11) 

Я получаю ошибку говорит, что ГПИТ имеет тип «ода», а мне нужно, чтобы это было поплавок, как и odeint, дает мне.

Вот конкретная ошибка, (я пытаюсь вычесть ГПИТ из поплавка):

unsupported operand type(s) for -: 'ode' and 'float' 

И когда я использую питона отладчик и попытаться распечатать ГПИТ, это дает мне

<scipy.integrate._ode.ode object at 0x10d6ab410> 

И после того, как я продолжаю, он останавливается с вышеуказанной ошибкой. Я предполагаю, что у меня нет команды ode, написанной правильно. Любая помощь будет принята с благодарностью!

+0

Можете ли вы отправить сообщение [mcve]? Как бы то ни было, трудно сказать, откуда возникли ваши проблемы. Единственное, что приходит в голову, это то, что вы используете одно и то же имя переменной для ваших начальных условий и объекта-интегратора ('Itmp'), что является ужасно плохой практикой и может привести к ошибкам. – Wrzlprmft

+0

Вы объясняли разные аргументы аргументов функций ODE? В то время как 'odeint' требует' odefunc (state, time) ',' ode' использует 'odefunc (time, state)'. – LutzL

ответ

0

Возвращаемое значение конструктора класса ode является экземпляром объекта типа ode. На данный момент никакой интеграции не произошло. Для этого вам нужно вызвать ступенчатые функции интегратора. После шага новое состояние находится в поле y объекта ode.

Для получения дополнительной информации обратитесь к документации класса ode.

Вы должны были заметить, что вы не прошли ни начальные условия, ни конец интервала интеграции интегратору.