Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用符号替换同态求和表达式中的符号_Python_Sympy - Fatal编程技术网

Python 用符号替换同态求和表达式中的符号

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导入的
>>*
>>>从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
>>>