我想重現使用scipy,不使用erf方法的錯誤函數。集成使用四方法python
這是我的代碼:
#!/usr/bin/env python
import numpy as np
import math
from scipy.integrate import quad
def error_func(y):
return 2/math.sqrt(np.pi)*quad(np.exp(-y**2), 1, np.inf, args=(y))[0]
g = [error_func(x) for x in np.arange(-1,1,0.2)]
print g
此代碼返回以下錯誤消息:
File "./test.py", line 9, in <module>
g = [error_func(x) for x in np.arange(-1,1,0.2)]
File "./test.py", line 7, in error_func
return 2/math.sqrt(np.pi)*quad(np.exp(-y**2), 1, np.inf, args=(y))[0]
File "/usr/local/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 316, in quad
points)
File "/usr/local/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 383, in _quad
return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
quadpack.error: quad: first argument is not callable
如果我理解正確的話,四的第一個參數必須是一個函數。我通過它的權利。 我的代碼出了什麼問題?
您發佈的代碼與堆棧跟蹤中的代碼明顯不同。堆棧跟蹤中的代碼沒有'lambda y'。確保你正在運行你認爲你是的代碼。 – user2357112
我看到你編輯了你的帖子...但是由於你的代碼仍然明顯不符合堆棧跟蹤,很明顯你試圖只修補我指出的部分。不要這樣做。運行代碼,獲取錯誤消息,然後將您運行的確切代碼和確切的錯誤消息複製粘貼到您的問題中。其他任何東西都會隱藏錯誤,引入其他錯誤,並且通常會讓任何人都更難以幫助您。 – user2357112
'scipy.integrate.quad'需要一個函數作爲它的第一個參數。你給它'np.exp(-y ** 2)',這是一個數字。嘗試用'lambda x:np.exp(-x ** 2)'替換它。另外,請閱讀'scipy.integrate.quad'文檔:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.integrate.quad.html –