在 Sympy 中求和

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

我想使用 Sympy 区分离散随机变量 T 相对于质量 q(t') 之一的熵 H(T)。 以下实现了 H(T) 的表达式:

import sympy as sym
sym.init_printing(use_latex=True)

N_T = sym.Symbol("N_T")
qT = sym.Function("q")

t = sym.Symbol("t")
ht_expr = sym.summation( qT(t) * sym.log(qT(t)), (t, 1, N_T) )
ht_expr

这将打印 H(T) 的正确表达式,如预期的那样:

现在,如果 t' 在 1...N_T 中,则对 q(t') 进行微分应该会得到在 t' 处计算的 q(t)log(q(t)) 的导数,否则为 0(这是已知结果,易于检查)。 IE。它应该返回:

相反,我得到 0:

tprime = sym.Symbol("t'")
sym.diff(ht_expr, qT(tprime))
[Out]: 0

如何让 Sympy 处理这样的求和并给出正确的结果?

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

构建您想要的结果。 SymPy 如何知道 t 是否在所需范围内?假设是这样,然后制作你自己的分段:

from sympy import *
N_T = sym.Symbol("N_T")
qT = sym.Function("q")

t = sym.Symbol("t")
ht_expr = sym.summation( qT(t) * sym.log(qT(t)), (t, 1, N_T) )
d = ht_expr.diff(qT(t))
>>> d
Sum(log(q(t)) + 1, (t, 1, N_T))
>>> Piecewise((d, And(t>=1,t<=N_T)),(0, True))
Piecewise((Sum(log(q(t)) + 1, (t, 1, N_T)), (N_T >= t) & (t >= 1)), (0, True))

如果您输入非整数

t
,这将会失败,但它会接近所需的输出。

© www.soinside.com 2019 - 2024. All rights reserved.