我在使用scipy.fsolve时遇到以下问题,但是我不知道该怎么办:

U = 0.00043
ThC =1.19
Dist = 7
IncT = 0.2
pcw = 1180000
k = 1.19
B = U * pcw / (2 * k)

fugato = fsolve((((Ql/(2*math.pi* k))*math.exp(B * x)*special.kv(0, B * x))-IncT),0.01)

print fugato


我在fsolve中收到错误TypeError: 'numpy.float64' object is not callable

我该如何解决这个问题?

最佳答案

fsolve的参数必须是一个函数。

我想您想求解x的方程式?如果是这样,写:

fugato = fsolve(lambda x: Ql/(2*math.pi* k)*math.exp(B * x)*special.kv(0, B * x)-IncT,
                0.01)


作品。



为了解释这里发生了什么,构造lambda x: 2*x是一个函数定义。它类似于编写:

def f(x):
    return 2*x


lambda构造通常用于定义只需要一次的功能。在注册回调或表示数学表达式时通常是这种情况。例如,如果要集成f(x) = 2*x,可以编写:

from scipy.integrate import quad
integral = quad(lambda x: 2*x, 0., 3.)


同样,如果要求解2 * x = 1,则可以编写:

from scipy.optimize import fsolve
fsolve(lambda x: 2*x-1, 0.)

关于python - 将fsolve与scipy函数一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27150687/

10-12 07:32