通过指定范围使用 SymPy 简化表达式

问题描述 投票:0回答:1

我想通过指定

Idx
对象的范围来简化带有案例/分支的表达式。考虑以下示例:

import sympy as sym

i = sym.Idx("i")
j = sym.Idx("j")
N = sym.Symbol("N", integer=True)
expr = sym.Sum(sym.KroneckerDelta(i, j), (i, 1, N))
expr.doit()

输出:

我尝试将

refine
Q
一起使用,我希望通过阅读文档来实现。但它不起作用:

sym.refine(expr.doit(), sym.Q.positive_definite(j))

这输出与之前相同。它没有像我预期的那样将第一种情况简化为 N >= j 。 在简化表达式时如何合并此类条件/假设?

python sympy symbolic-math
1个回答
0
投票

您可以对索引设置界限:

In [4]: import sympy as sym
   ...: 
   ...: N = symbols('N')
   ...: i = sym.Idx("i", (1, N))
   ...: j = sym.Idx("j", (1, N))
   ...: expr = sym.Sum(sym.KroneckerDelta(i, j), (i, 1, N))
   ...: expr.doit()
Out[4]: 
⎧1  for N ≥ j
⎨            
⎩0  otherwise
© www.soinside.com 2019 - 2024. All rights reserved.