迭代反转复杂函数的算法?

时间:2012-03-17 03:01:05

标签: python algorithm finance

此算法通过在下限和上限之间迭代来查找给定值n,类似于二进制搜索。如何改进此算法?一些细节。值n几乎总是小于1.0,但这不是边界条件。但是,它永远不会少于0.

def approx_value(n, lower_bound, upper_bound, precision = 0.001):
    approx = (lower_bound + upper_bound) / 2.0
    while (abs(approx - n) > precision):
        if n > approx:
            lower_bound = approx
        else:
            upper_bound = approx
        approx = (lower_bound + upper_bound) / 2.0
    return approx

def approx_value_no_bounds(n, precision = 0.0001):
    approx = 1.0
    while (abs(approx - n) > precision):
        if approx > n: #decrease volatility
            return approx_value(n, 0.0, approx)
        else:
            approx *= 2
    return approx

我知道这看起来很奇怪,因为已经提供了n的值,但算法并不完整。基本上,n是一个复杂方程的解,无法以封闭形式求解approx,所以我是迭代地做的。最终,此算法将使用approx与值n比较函数的值,并返回approx它是否足够接近输入变量。

我希望将运行时间保持在O(log(n)),这就是为什么我在二进制搜索之后对它进行了一些建模,尽管只是因为上限不一定是立即知道的。

2 个答案:

答案 0 :(得分:3)

这听起来像是一个典型的优化问题。这些都经过深入研究,并且有几种众所周知的算法。一些简单但合理有效的Newton's methodgradient descent

如果上述方法对您的功能效果不佳,您也可以尝试使用nonlinear-simplex算法。

此处的运行时间与精度权衡取决于您尝试解决的功能的性质。

答案 1 :(得分:1)