预测迭代加权平均达到指定精度所需的迭代次数
预测加权迭代逼近目标值的停止次数
首先我们来拆解这个问题:这段Python代码通过加权平均迭代让x逐步逼近target,当x与target的差值小于**初始差值的1%**时停止,我们可以通过数学推导来计算需要多少次迭代才能满足这个条件。
代码回顾
x = start = 1.0 target = 0.1 coeff = 0.999 for c in range(100000): print('{:5d} {:f}'.format(c, x)) if abs(target - x) < abs((x - start) * 0.01): break x = x * coeff + target * (1 - coeff)
数学推导过程
要计算迭代次数,我们先分析差值的变化规律:
- 初始差值与阈值:初始时
x=start=1.0,与target=0.1的差值为d₀ = 1.0 - 0.1 = 0.9,停止条件要求差值小于初始差值的1%,也就是阈值为0.9 * 0.01 = 0.009。 - 迭代差值的规律:设第
n次迭代后x与target的差值为dₙ = xₙ - target,代入迭代公式推导:
可以看到,差值是一个等比数列,每次迭代都乘以xₙ₊₁ = coeff * xₙ + target*(1 - coeff) dₙ₊₁ = xₙ₊₁ - target = coeff*xₙ + target*(1-coeff) - target = coeff*(xₙ - target) = coeff * dₙcoeff,即dₙ = d₀ * coeffⁿ。 - 求解迭代次数:我们需要
|dₙ| < 0.009,代入差值表达式后化简:
对两边取自然对数(注意0.9 * (0.999)ⁿ < 0.009 (0.999)ⁿ < 0.010.999 < 1,取对数后不等号方向反转):
代入数值计算:n > ln(0.01) / ln(0.999)ln(0.01) ≈ -4.60517,ln(0.999) ≈ -0.0010005,因此:
因为迭代次数必须是整数,且第4602次迭代后差值仍略大于阈值,所以需要4603次迭代才能满足停止条件。n ≈ (-4.60517) / (-0.0010005) ≈ 4602.9
实际验证
如果你运行这段代码,会发现当循环计数c=4603时,x与target的差值会小于0.009,此时触发break停止循环,和我们的推导结果一致。
内容的提问来源于stack exchange,提问作者user6369958
相关产品推荐
相关产品推荐

