我是相對較新的python和scipy,是從MATLAB轉換。我正在做scipy.integrate中的odeint函數的快速測試,並遇到了這個潛在的錯誤。考慮下面的片段:odeint中可能存在的錯誤<-> interp1d interplay?
from scipy import *
from scipy.integrate import odeint
from scipy.interpolate import interp1d
from pylab import *
# ODE system with forcing function u(t)
def sis(x,t,u):
return [x[1], u(t)]
# Solution time span
t = linspace(0, 10, 1e3)
# Profile for forcing function u(t)
acel = lambda t: 3*(t<2)-3*(t>8)
# Interpolator for acelerator
acel_interp = interp1d(t, acel(t), bounds_error=False, fill_value=0)
# ODE integration with u(t) = acel, a lambda function
x_1 = odeint(sis, [0,0], t, args=(acel,)) # Correct result
# ODE integration with u(t) = acel_interp, an interpolator
x_2 = odeint(sis, [0,0], t, args=(acel_interp,)) # Incorrect result
我做了一個情節,說明兩個結果的差異,click here。
你對此有何看法,至少對我而言,結果之間存在着毫無根據的區別?我在Python 2.6.6上使用NumPy版本1.5.0和SciPy版本0.8.0
恭喜從Matlab開關。我在18個月前採取行動。能夠訪問所有其他Python功能並能夠與尚未支付數千次Matlab許可證的人分享您的代碼是非常好的。 – 2011-04-17 11:41:37