pythonsymy:lambdify在分段定义函数时返回错误答案
我对以下代码的答案为什么是10而不是1感到困惑。有人能帮我了解一下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 ..
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