我遇到了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
。
如何解决此问题?
答案 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.)