gpt4 book ai didi

python - Sympy 解决方案中的 NotImplementedError

转载 作者:行者123 更新时间:2023-12-04 11:37:19 25 4
gpt4 key购买 nike

我正在阅读一篇关于布隆过滤器的文章,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 ,这正是您所期望的。

关于python - Sympy 解决方案中的 NotImplementedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45894976/

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