版权归原作者所有,如有侵权,请联系我们

[科普中国]-迭代计算

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏
迭代特性

在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。

在第一种意义下,递归是迭代的一个例子,但是通常使用一种递归式的表达。比如用0!=1,n!=n*(n-1)!来表示阶乘。而迭代通常不是这样写的。

而在第二种(更严格的)意义下,迭代描述了在指令式编程语言中使用的编程风格。与之形成对比的是递归,它更偏向于声明式的风格。

终止准则

由于数值迭代是逐步逼近最优点而获得近似解的,它无限地接近于最优点却又不是理论上的最优点,所以就需要考虑在什么样的条件下才终止迭代,获得一个足够精度的近似极小点,这一条件就是迭代计算的终止准则。

对最优化问题常用的迭代过程终止准则一般有以下几种。2

(1) 点距准则

当相邻两迭代点X(k)、X(k+1)之间的距离已达到充分小时,即小于或等于规定的某一很小正数ε时,迭代终止。一般用两个迭代点向量差的模来表示,即

或用X(k)、X(k+1)在各坐标轴上的分量来表示,即

(2)函数下降量准则

当相邻两迭代点X(k)、X(k+1)的目标函数值的下降量已达到充分小时,迭代终止。一般用目标函数值下降量的绝对值来表示,即

或用目标函数值下降量的相对值来表示,即

(3)梯度准则

当目标函数在迭代点的梯度已达到充分小时,迭代终止。一般用梯度向量的模来表示,即

以上各式中的ε是根据设计要求预先给定的迭代精度。

在优化设计中,一般只要满足以上终止准则之一,则可认为设计点收敛于极值点。应该指出,有时为了防止当函数变化剧烈时,点距准则虽已满足,求得的最优值f(X(k+1))与真正的最优值f(x*)仍相差较大;或当函数变化缓慢时,目标函数值下降量准则虽已得到满足,但所求得的最优点X(k+1)与真正的最优点X*仍相距较远,往往将前两种终止准则结合起来使用,要求同时成立。至于梯度准则,仅用于需要计算目标函数梯度的最优化方法中。2

迭代计算设置

在“Excel选项”中启用迭代计算后,可以对迭代计算的次数进行设置,以满足计算要求,具体的操作步骤如下所述。3

(1)打开存在循环引用的工作表,例如,此处打开“\源文件\ch20\设置循环引用.xlsx,如图20.17所示。

(2)切换到“文件”选项卡,然后单击“选项”命令,打开“Excel选项”对话框。

(3)在“Excel选项”对话框的左侧窗格中单击“公式”项,然后勾选“启用迭代计算”复选框,设置“最多迭代次数”为1000, “最大误差”保持默认设置,如图20.18所示。

(4)单击“确定"按钮,完成迭代计算的设置操作,同时在工作表中显示进行1000 次迭代计算的结果,如图20.19所示。

其中,“最多迭代次数”即重新计算的最多次教,“最大误差”即两次计算结果之间可以接受的最大误差。3

迭代计算应用累加

利用迭代计算和循环引用可以实现单元格数值累加。例如,要求在A2录入数据.C2累加A2 录入的所有数据,D2累加A2的录入次数.实现步骤如下:

(1)将迭代计算次数设置为1;

(2)在C2单元格录入以下公式,如图2-6l所示,表示在C2的值的基础上追加A2的值。

=C2+A2

(3)在D2单元格录入以下公式,表示A2和D2都是0时,公式返回0;如果A2为0但D2大于0时,公式返回D2的值;如果以上两个条件都不满足,则在D2的值的基础上累加1。4

=IF(AND(A2=0,D2=0),0,IF(AND(A2=0,D2>O),D2,D2+1))

D2本身只需要“=D2+l”即可实现需求,只是为了防止一些意外情况而采用IF函数防错。例如,D2录入公式后会自动计算一次,不管A2单元格是否空白,这将造成多累加一次,而公式中第一个IF函数可以解决这个问题。第二个IF函数用于解决A2单元格录入删除数据时造成D2也累加一次的问题。

(4)在A2单元格录入10,C2单元格的公式返回10,D2单元格的公式返回1,表示第一次累加,总数量为10,如图2-62所示。

(5)在A2单元格录入40,C2单元格的公式返回50,D2单元格的公式返回2,表示第二次累加,总数量为50,如图2-63所示。

从以上步骤可以发现迭代计算搭配循环引用可以成功实现对同一个单元格反复累加。公式中嵌套的IF函数也能正常工作,当删除A2的值时不会错误地累加一次。4

自动添加不更新的时间

Excel有一个时间函数Now,它可以生成当前系统时间。函数运算结果在工作簿刷新时会随时间变化而自动更新。例如,在单元格中录入公式“=NoW()”,公式返回录入公式的时间,包括年、月、日、时、分、秒。当按下【F9】键刷新工作簿时,时间会自动更新,变为刷新工作簿的时间。4

如果需要函数一旦产生时间后,该时间值不再更新,那么可以采用循环引用配合迭代计算来实现,步骤如下:

(1)在图2-64所示的仓库入库表中的C2单元格录入以下公式:

=IF(B2="","",IF(C2"",C2,TEXT(NOW,"hh:mm:ss")))

公式表示如果B2单元格是空白,那么公式也返回空白;如果C2单元格不是空白,则返回C2的值,否则返回当前系统时间,时间只显示时分秒部分。

(2)在B2录入数量50, C2将自动产生当前系统 时间,如图2-65所示.

(3)21分钟后在B3录入第二笔入库数量80,对应的C2单元格则产生新的当前系统时间,而C2的时间并不会更新,如图2-66所示。

或许有读者会有疑问,直接在C列录入当前时间不是也可以实现不更新的时间吗?况且它还不涉及如此复杂的操作。其实使用公式有它独特的作用——自动,即时间自动产生,不需要手工录入,它除了减少输入数据的时间外,还能确保时间准确,而且格式统一。4

解方程

解二元一次方程,迭代计算实在得心应手。

假设得知有以下两个方程式,需求X与Y的解:

10X+5Y=200

3X=Y+25

思路与步骤如下:

(1)将以上两个方程式转换成“X=…”、 “Y=…”的形式。

X=(Y+25)/3

Y=(200-5X)/10

(2)将迭代计算次数设定为10000次。

(3)在C2单元格录入以下公式:

=(C3+25)/3

(4)在C3单元格录入以下公式:

=(200-5+C2)/10

(5)按回车键后,两个单元格的公式会自动计算,产生X、Y两个未知数的解,如图2.67所示:

由于迭代计算是一个推算过程,逐渐产生最接近真实结果的解,所以它得到的解有可能正确有可能错误。但误差会相当小。在选项中设置的误差值和迭代计算次数直接影响所得到的解的正确性,次数越大越接近真实的解,但是也耗费更长的时间。4

测绘应用

迭代法是一种不断用变量的旧值递推新值直到误差小于事先设定的容许误差完成迭代计算的过程。迭代法作为一种很常用也很重要的计算方法在测绘诸多领域中均有应用, 如:监测网优化设计规划求解、卡尔曼滤波五组核心递推公式、BP神经网络训练、空间直角坐标反算大地坐标、赫尔默特方差分量估计、道路点位坐标反算施工坐标、拱坝溢流坝计算点位径向距离等。5