pythonsymy:lambdify在分段定义函数时返回错误答案

pythonsymy:lambdify在分段定义函数时返回错误答案,python,sympy,piecewise,Python,Sympy,Piecewise,我对以下代码的答案为什么是10而不是1感到困惑。有人能帮我了解一下lambdify是怎么回事,或者是什么造成了错误的答案 import sympy from sympy.utilities.lambdify import lambdify from sympy import Function from sympy.abc import x, y def kFct(xIndex,loc,k1,k2): ... if xIndex <= loc: ... return k1 ..

我对以下代码的答案为什么是10而不是1感到困惑。有人能帮我了解一下
lambdify
是怎么回事,或者是什么造成了错误的答案

import sympy
from sympy.utilities.lambdify import lambdify
from sympy import Function
from sympy.abc import x, y

def kFct(xIndex,loc,k1,k2):
...   if xIndex <= loc:
...     return k1
...   else:
...     return k2
... 
loc = 0.5
k1 = 1
k2 = 10

kfun = lambdify( (x,y), kFct(x,loc,k1,k2) )
print kfun(0,0)
>>> 10
我需要将
kfun
作为x和y的函数,因为稍后,我将它用作积分参数的一部分。它最终也将取决于y


我正在Mac10.6.x上使用Python2.6.8

在传递
lambdify
的参数之前,会对其进行求值,因此您实际上并没有将函数传递给
lambdify
,而是传递了数字10:

>>> kFct(x, loc, k1, k2)
10
你得到10分是因为

>>> x <= loc
x <= 0.5
>>> bool(x <= loc)
False

不过,考虑到额外的间接性,我不确定这对您有多大好处:我可能只处理函数本身(假设您最终要寻找积分的数值计算)。

您想使用分段的
,它以符号方式表示Symphy可以处理的if分支

下面是您的示例,其中明确输入了
loc
k1
k2
的值。当然,您可以象征性地使用它们,并在以后使用
subs
替换它们,如果您的代码要求这样做的话

>>> kFct = Piecewise((1, x < 0.5), (10, True))
>>> kfun = lambdify(x, kFct)
>>> kfun(0)
1
>>> kfun(1)
10
kFct=分段((1,x<0.5),(10,真)) >>>kfun=lambdify(x,kFct) >>>kfun(0) 1. >>>kfun(1) 10
>>> f = implemented_function(Function('kFct'), lambda x,y: kFct(x, loc, k1, k2))
>>> kfun = lambdify((x,y), f(x,y))
>>> kfun(0,0)
1
>>> kfun(0.5,0)
1
>>> kfun(0.51,0)
10
>>> kfun(1, 0.0)
10
>>> kFct = Piecewise((1, x < 0.5), (10, True))
>>> kfun = lambdify(x, kFct)
>>> kfun(0)
1
>>> kfun(1)
10