Python 用符号替换同态求和表达式中的符号
我想在求和中替换符号并打印计算出的表达式,但我尝试这样做时会出错 正确的方法是什么?这可能吗 我用这种方式创建了一个求和表达式: 来自sympy导入的Python 用符号替换同态求和表达式中的符号,python,sympy,Python,Sympy,我想在求和中替换符号并打印计算出的表达式,但我尝试这样做时会出错 正确的方法是什么?这可能吗 我用这种方式创建了一个求和表达式: 来自sympy导入的>>* >>>从sympy.interactive导入打印 >>>printing.init_printing() >>>n=符号('n',整数=真,正=真) >>>i=Idx('i',(1,n)) >>>d=索引数据库('d') >>>s=总和(d[i],i) >>> N ___ ╲ ╲ d[i] ╱
>>*
>>>从sympy.interactive导入打印
>>>printing.init_printing()
>>>n=符号('n',整数=真,正=真)
>>>i=Idx('i',(1,n))
>>>d=索引数据库('d')
>>>s=总和(d[i],i)
>>>
N
___
╲
╲ d[i]
╱
╱
‾‾‾
i=1
当我尝试替换n
时,它给出了“类型错误:无法确定关系的真值”
似乎SymPy中有一个bug。我已经准备好了 解决方法是指定
总和的限制,而不是Idx
:
>>> i = Idx('i')
>>> s = Sum(d[i], (i, 1, n))
>>> s.subs(n, 5)
Sum(d[i], (i, 1, 5))
>>> s.subs(n, 5).doit()
d[1] + d[2] + d[3] + d[4] + d[5]
将索引数据库
替换为列表是另一种选择。以下是一个解决方案,可以让这项工作顺利进行:
>>> l = range(6)
>>> s.subs(n, 5).doit().replace(Indexed, lambda i, j: Indexed(i, j) if i != d else l[j])
15
>>>
请注意,您的原始版本不起作用,因为它在范围上使用基于1的索引,但Python使用基于0的索引,因此您需要像我一样增加范围,或者将总和从0修改为n-1。非常感谢。用索引数据库
替换列表是否有解决方法?
>>> i = Idx('i')
>>> s = Sum(d[i], (i, 1, n))
>>> s.subs(n, 5)
Sum(d[i], (i, 1, 5))
>>> s.subs(n, 5).doit()
d[1] + d[2] + d[3] + d[4] + d[5]
>>> l = range(6)
>>> s.subs(n, 5).doit().replace(Indexed, lambda i, j: Indexed(i, j) if i != d else l[j])
15
>>>