【发布时间】:2014-04-30 19:00:39
【问题描述】:
我需要在win7中用python 3.2解一个积分方程。
我想先找到一个初始的猜测解,然后在python中使用“fsolve()”求解。
这是代码:
import numpy as np
from scipy.optimize.minpack import fsolve
from cmath import cos, exp
from scipy.integrate.quadpack import quad
def integrand2(x, b):
return exp(-x)/b
def intergralFunc2(b):
integral,err = quad(integrand2, 0, 10, args=(b)) // **error here**
return 0.01 - integral
import matplotlib.pyplot as plt
def findGuess():
vfunc = np.vectorize(intergralFunc2)
f = np.linspace(-20, 20,10)
plt.plot(f, vfunc(f))
plt.xlabel('guess value')
plt.show()
def solveFunction():
y= fsolve(intergralFunc2, 10)
return y
if __name__ == '__main__':
findGuess()
solution = solveFunction()
print("solution is ", solution)
我收到错误:
quadpack.error: Supplied function does not return a valid float.
任何帮助将不胜感激。
【问题讨论】:
-
您不能将
cmath中的函数与 NumPy/SciPy 混合使用,因为它们不适用于 NumPy 数组。 (这不是您问题的唯一原因。)您应该只使用from ... import从包中导入模块,然后使用限定名称来访问函数——否则,您会在 NumPy 和标准库函数。 -
尝试使用
from numpy import cos, exp而不是使用cmath -
它有效,谢谢!但是,当我更改 integrand2 时,我得到了同样的错误,以便我可以求解嵌入另一个积分 eq 的积分方程。我会发一个新帖子。
标签: python python-3.x numpy scipy