使用fsolve和scipy函数

时间:2014-11-26 13:39:11

标签: python scipy

我遇到了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

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

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.)