gpt4 book ai didi

python - Sympy:如何将乘积的对数简化为对数和?

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:38 25 4
gpt4 key购买 nike

为了激发这个问题,sympy.concrete 有一些有效的工具来处理符号和。为了将这些工具应用于符号产品,必须取对数。然而,直接取对数并不会自动给出转换:

import sympy as sp
sp.init_printing() # display math as latex
z = sp.Symbol('z')
j,k = sp.symbols('j,k')
Prod = sp.Product( (z + sp.sqrt(1-4*j*z**2))**(-1), (j,1,k) )
sp.log(Prod)

给予

\log{\left (\prod_{j=1}^{k} \frac{1}{z + \sqrt{- 4 j z^{2} + 1}} \right )}

在所有可能的变化中:

sp.log(Prod)
sp.log(Prod).expand()
sp.log(Prod).simplify()
sp.expand_log(sp.log(Prod),force=True)

Question. How to convert it into sum of logarithms?

相关:

How to simplify logarithm of exponent in sympy?

最佳答案

假设还没有具有所需行为的标准函数,我编写了自己的函数,模仿了

sp.expand_log(expr, force=True)

此代码递归地遍历表达式,试图找到模式 log(product) 并将它们替换为 sum(log)。这也支持多索引求和。

Code.

def concrete_expand_log(expr, first_call = True):
import sympy as sp
if first_call:
expr = sp.expand_log(expr, force=True)
func = expr.func
args = expr.args
if args == ():
return expr
if func == sp.log:
if args[0].func == sp.concrete.products.Product:
Prod = args[0]
term = Prod.args[0]
indices = Prod.args[1:]
return sp.Sum(sp.log(term), *indices)
return func(*map(lambda x:concrete_expand_log(x, False), args))

Example.

import sympy as sp
from IPython.display import display
sp.init_printing() # display math as latex
z = sp.Symbol('z')
j,k,n = sp.symbols('j,k,n')
Prod = sp.Product( (z + sp.sqrt(1-4*j*z**2))**(-1), (j,0,k))
expr = sp.log(z**(n-k) * (1 - sp.sqrt((1 - 4*(k+2)*z**2)/(1-4*(k+1)*z**2)) ) * Prod)
display(expr)

\log{\left (z^{- k + n} \left(- \sqrt{\frac{- z^{2} \left(4 k + 8\right) + 1}{- z^{2} \left(4 k + 4\right) + 1}} + 1\right) \prod_{j=0}^{k} \frac{1}{z + \sqrt{- 4 j z^{2} + 1}} \right )}

display(concrete_expand_log(expr))

\left(- k + n\right) \log{\left (z \right )} + \log{\left (- \sqrt{\frac{- z^{2} \left(4 k + 8\right) + 1}{- z^{2} \left(4 k + 4\right) + 1}} + 1 \right )} + \sum_{j=0}^{k} \log{\left (\frac{1}{z + \sqrt{- 4 j z^{2} + 1}} \right )}

关于python - Sympy:如何将乘积的对数简化为对数和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46317948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com