python - 在 Sympy 中对总和进行微分

标签 python sympy symbolic-math differentiation

我想使用 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) 的正确表达式,如预期的那样:

enter image description here

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

enter image description here

相反,我得到 0:

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

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

最佳答案

我在 sympy - taking derivative of sum of symbolic number of elements 中找到了答案也适用于本例。

简而言之,我们需要使用 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)

输出:

enter image description here

关于python - 在 Sympy 中对总和进行微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77626748/

相关文章:

python - 在for循环中求和绝对值 - python

python - 如何在Python中求解两个矩阵的方程?

python - SymPy:如何使用常量计算表达式?

MATLABsolve() 无法求解特定值的三角矩阵

python - sympy 非平凡替换

python - Python 中的单位转换

python - 查找与给定日期最近的日期

python - Sed 一个衬里在 python 子进程中不起作用

python - 如何为 click 中的组操作创建异常(exception)

python - 非线性方程组 Julia