2016-12-28 28 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) 

我得到的錯誤是說ITMP類型爲「頌歌」,而我需要它像odeint給我的一個浮子。

下面是具體的錯誤,(我嘗試從一個浮動減去ITMP):

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

當我使用Python調試器,並嘗試打印出ITMP,它給了我

<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類型的實例對象。此時,沒有發生整合。爲此,您需要調用集成器的階躍函數。在該步驟之後,新狀態位於ode對象的y字段中。

請參閱ode課程的文檔以獲取更多詳細信息。

您應該注意到您沒有將初始條件和積分間隔的結束都傳遞給積分器。

相關問題