Sympy:可以使用Idx范围自动计算分段表达式吗?

2024-04-29 10:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定义有限范围内的索引,以消除分段表达式中的歧义

例如:

from sympy import *
x = IndexedBase('x')
n = Symbol('n', nonnegative = True, integer = True)
k = Idx('k', (1, n))
f = 1/sqrt(Sum(x[k]**2, (k, 1, n)))
j  = Idx('j', (1,n))
diff = diff(f,x[j])

print(diff.simplify())返回:

-Piecewise((x[j], n >= j), (0, True))/Sum(x[k]**2, (k, 1, n))**(3/2)

然而,我在定义j时已经声明,n>=j、 我希望分子中有x[j],而不是分段表达式。有没有办法解决这个问题


Tags: fromimporttrue定义表达式diffintegersymbol
1条回答
网友
1楼 · 发布于 2024-04-29 10:18:43

为什么使用索引j?这似乎混淆了简化算法

相反,使用索引k进行微分,它返回预期的 结果,没有虚假的分段分割:

from sympy import *

x = IndexedBase('x')
n = Symbol('n', nonnegative = True, integer = True)
k = Idx('k', (1, n))
f = 1/sqrt(Sum(x[k]**2, (k, 1, n)))
diff = diff(f, x[k])
print(str(diff.simplify()))

输出:

# -Sum(x[k], (k, 1, n))/Sum(x[k]**2, (k, 1, n))**(3/2)

相关问题 更多 >