如何优化使用循环为变量找到稳定值的算法
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,这正是您尝试解决的问题类型.
我有一个情况,在每次循环迭代时计算一个变量(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,这正是您尝试解决的问题类型.