如何优化使用循环为变量找到稳定值的算法

How to optimize a algorithm that uses loops to find a stable value for a variable

我有一个情况,在每次循环迭代时计算一个变量(a,在这种情况下)并在两次迭代之间的值增量足够小时停止。

我想知道在这种情况下找到该变量值的通用方法,而不必 "convergence" 使用循环来工作。

我想知道解决方案是否是将所有内容都放在方程式中,或者是否存在一些工具来解决这个问题。

a = 10
b = 10

diff = 1

while diff > .1:
    old_a = a
    a += b
    diff = 1 - (old_a/a)
    print(diff)

当前代码生成:

0.5
0.33333333333333337
0.25
0.19999999999999996
0.16666666666666663
0.1428571428571429
0.125
0.11111111111111116
0.09999999999999998

因此,需要9次迭代才能找到两次迭代之间a的值的相对差小于10%。

你有

a_n = a_0 + n * b

并尝试找到位置

1 - (a_(n-1) / a_n) 
= 1 - (a_0 + (n--1)*b) / ( a_0 + n * b) 
= 1 - (a_0 + n*b -b) / (a_0 + n*b) 
= 1 - 1 + b / (a_0 + n*b)
= b / (a_0 + n * b)
< 0.1

相同
(a_0 / b) + n * b / b
= (a_0 / b) + n
> 10

(因为 0.1 = 1 / 10 和 1/x > 1/y <=> y > x 如果 x,y != 0)

由于您在评论中提到您的实际问题更复杂:如果找到上述封闭形式的解决方案不可行,请查看 this wikipedia page about fixed point iteration,这正是您尝试解决的问题类型.