在 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 - 采用符号数元素之和的导数中的答案也适用于这种情况。

简而言之,我们需要使用

IndexedBase
代替
Function
。 为了完整起见,这里是解决此问题的代码。

N_T = sym.Symbol("N_T")
qT = sym.IndexedBase("q")
t, k = sym.symbols("t k")

ht_expr = sym.summation( qT[t] * sym.log(qT[t]), (t, 1, N_T) )
sym.diff(ht_expr, k)

输出:

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