2

我有一个来自 scipy 的 lognorm 分布,它的参数是已知的。

import scipy

log_norm_obj = scipy.stats.lognorm([log_mu], shape=sigma)

我需要求解满足以下等式的 ax:

x = (1 - log_norm_obj.cdf(x)) / log_norm_obj.pdf(x)

我怎么能用 numpy/scipy 做到这一点?谢谢!

4

1 回答 1

4

您使用scipy.optimize。从 scipy 0.11 及更高版本开始,您可以使用新功能minimizeminimize_scalar. 假设你的 x 是一个标量,这里有一些关于如何做到这一点的示例代码:

from scipy.optimize import minimize_scalar

def f(x):
    return (1 - log_norm_obj.cdf(x)) / log_norm_obj.pdf(x) - x

result = minimize_scalar(f)        
print result.x 
# this would print your result

上面使用的是 Brent 的方法,默认的。您也可以使用Golden 方法,或 Brent 方法的有界版本。如果您的函数仅在给定域中定义,或者您希望在特定时间间隔内获得解决方案,则后者可能很有用。一个例子:

result = minimize_scalar(f, bounds=(0, 10.), method='bounded')

如果您的函数采用向量而不是标量,则可以使用类似的方法minimize。如果您的 scipy 版本早于 0.11,只需使用fmin.

于 2012-12-19T05:03:51.877 回答