我正在读一篇关于布隆过滤器的文章,https://en.wikipedia.org/wiki/Bloom_filter,其中导出最佳数量的哈希函数的表达式。我想重现简化情况的计算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,这正是您所期望的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)