gpt4 book ai didi

python - 求有约束的方程的根

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:57 24 4
gpt4 key购买 nike

在Python中,我想找到以下形式的方程根:

-x*log(x) + (1-x)*log(n) - (1-x)*log(1 - x) - k = 0

其中 n 和 k 是将指定的参数。

对根的另一个约束是 x >= (1-x)/n。因此,为了它的值(value),我将过滤掉不满足这一点的根。

我的第一次尝试是使用 scipy.optimize.fsolve (请注意,我只是将 k 和 n 分别设置为 0 和 1):

def f(x):                                                                       
return -x*log(x) + (1-x)*log(1) - (1-x)*log(1-x)

fsolve(f, 1)

使用 math.log,我遇到了值错误,因为我向日志提供了错误的输入。使用 numpy.log 给了我一些被零除和乘法中的无效值。

我这样调整了 f,只是为了看看它会做什么:

def f(x):                                                                       
if x <= 0:
return 1000
if x >= 1:
return 2000
return -x*log(x) + (1-x)*log(1) - (1-x)*log(1-x)

现在我明白了

/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py:221: RuntimeWarning: The iteration is not making good progress, as measured by the 
improvement from the last ten iterations.
warnings.warn(msg, RuntimeWarning)

使用 python,如何求解原始方程中各种 n 和 k 参数的 x?

最佳答案

fsolve 还允许插入猜测以了解从哪里开始。我的建议是绘制方程并让用户使用鼠标或通过文本输入初始猜测以用作初始猜测。您可能还想更改越界值:

if x <= 0:
return 1000 + abs(x)
if x >= 1:
return 2000 + abs(x)

这样,函数在感兴趣区域之外就有一个斜率,它将引导求解器回到感兴趣区域。

关于python - 求有约束的方程的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340285/

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