Python Symphy和#x27中未实施错误;s解决

Python Symphy和#x27中未实施错误;s解决,python,sympy,Python,Sympy,我正在读一篇关于Bloom过滤器的文章,在这篇文章中,表达式是为哈希函数的最佳数量而派生的。我想重现简化情况下的计算,m=n,也就是说,我想确定函数的最小值 (1-exp(-x))**x 从文章中可以看出,应该出现在x=ln(2)处。我用sympy尝试了如下操作: In [1]: from sympy import * In [2]: x, y, z = symbols('x y z') In [3]: init_printing(use_unicode=True) In [8]: fr

我正在读一篇关于Bloom过滤器的文章,在这篇文章中,表达式是为哈希函数的最佳数量而派生的。我想重现简化情况下的计算,
m
=
n
,也就是说,我想确定函数的最小值

(1-exp(-x))**x
从文章中可以看出,应该出现在
x=ln(2)
处。我用
sympy
尝试了如下操作:

In [1]: from sympy import *

In [2]: x, y, z = symbols('x y z')

In [3]: init_printing(use_unicode=True)

In [8]: from sympy.solvers import solve

In [9]: solve(diff((1-exp(-x))**x,x), x)
然而,我得到了一份工作

NotImplementedError: multiple generators [x, exp(x), log(1 - exp(-x))]
No algorithms are implemented to solve equation x*exp(-x)/(1 - exp(-x)) + log(1 - exp(-x))

我只是想再次检查一下Sympy是否真的不能解决这个问题?也许我需要在
x

上添加额外的约束/假设当你遇到这个问题时,一个方程不能通过操纵符号(解析求解)来求解,它可能仍然可以通过尝试不同的数字来求解,并得到(或非常接近)正确的答案(数值求解)

您可以将sympy解转换为基于numpy的函数,并使用scipy进行数值求解

from sympy import lambdify
from scipy.optimize import fsolve

func_np = sp.lambdify(x, diff((1-exp(-x))**x,x), modules=['numpy'])
solution = fsolve(func_np, 0.5)
这将方程解为0.69314718,这正是您所期望的。

看起来不可能。只在数值上找到解,考虑到投入的资源,Mathematica通常比SymPy知道更多的符号技巧。(顺便说一下,该解决方案与
ln(2)
的值匹配)