我想通过指定
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 。 在简化表达式时如何合并此类条件/假设?
您可以对索引设置界限:
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