我正在尝试使用sympy在python中总结一个函数.我的功能是
x=symbols('x')
def f(k):
if k==0:
return x
else:
return 1
如果我问f(0)是什么,我得到x,我可以高兴地问一些事情
integrate(f(0),(x,0,1))
我得到了1/2,正如我所料.
但如果我写
summation(f(i),(i,0,3))
我得到4而不是x 3.这看起来有点奇怪,特别是因为如果我没有指定函数f并且去了
f=Function('f')
然后
summation(f(i),(i,0,3))
给我f(0)f(1)f(2)f(3).那么,为什么,当f如上定义时,我最终会得到4而不是x 3?
后来添加:我只是注意到我甚至不需要符号x,因为行为不是我所期望的.例如
def f(k):
if k==0:
return 100
else:
return 1
summation(f(i),(i,0,3))
返回4而不是103.
解决方法:
当你做f(i)in
summation(f(i),(i,0,3))
你正在调用f函数:
def f(k):
if k==0:
return x
else:
return 1
将i与0进行比较,然后返回x或1.由于i == 0的计算结果为False,它返回1,所以你实际上只是将0从0加到3.
总和永远不会看到f.它只看到1,因为在求和运行之前完全评估了f(i)调用.求和只能看到返回值.