2016-06-28 14 views
2

documentation對於scipy.integrate.ode.integrate沒有描述relax參數的作用。它有什麼作用?打開源代碼顯示它是一個布爾標誌,但是我得到了。在scipy集成器中做什麼「放鬆」

+0

一旦你停止關心它的價值應該設置爲'真正',否則默認爲'False'。 –

+1

運行:'''使用y0作爲初始條件從t = t0到t = t1進行積分。返回2元組(y1,t1)'''run_relax:''從t = t0到t> = t1的積分返回(y1,t)''' – sascha

+0

@sascha這實際上是一個很酷的功能。我會接受這個答案。 – drhagen

回答

3

簡短回答:該參數只給該方法一個權限返回一個不太確切的答案。保持默認值False。它與放鬆僵硬的系統無關。

龍回答:本current version of documentation解釋了這個參數作爲

放鬆:布爾
如果真,如果積分支持run_relax方法,然後整合到T -1> = T和回報。如果step = True,則不會引用relax。提供此參數是爲了暴露實現的內部,並且在大多數情況下不應該從其默認值更改。

英文:integrate方法取值爲t您要評估解決方案。但是積分器自己選擇步長,一般來說t不會是它擊中的點之一。如何處理這個?

  • 默認情況下,求解直到某點t1> = t,然後t處的值通過插值(在t1和前一個值之間)計算。
  • 但是,如果relax=True,計算解決方案達到某個點t1> = t,並返回在t1的值。沒有內插。

當然,這意味着該方法超調並返回一個不太準確的值,所以它不是您想要接受的最終答案。它可能在實現自己的插值的更復雜的算法中很有用,但很難想象在SciPy級別會發生這種情況,因爲t1不會被返回。例如:將y'= y與y(0)= 1進行積分。確切的解決方案是y = exp(t)。比較精確解和兩個近似在t = 0.1計算:

from scipy.integrate import ode 
r = ode(lambda t, y: y).set_integrator('vode').set_initial_value(1, 0) 
print(np.exp(0.1), r.integrate(0.1), r.integrate(0.1, relax=True)) 

輸出:

1.10517091808 1.10517178  1.10959337 

隨着放鬆=真過沖是非常明顯的。