我发现 Excel 循环计算存在奇怪的行为。启用后(通过选项),循环引用可用于迭代。在我的示例中,我使用 Newton's method 。我看到的问题是,当我在特定的空间布局中输入单元格公式时,迭代不会收敛。如果我使用不同的布局,它将收敛。这是一个错误,还是我错过了什么?以下是重现它的方法(在 Excel 2010、2011 上测试):
f(x) = x*ln(x)
- 新的 Excel 工作簿。
创建“水平”布局:
2.1 制作标签。在单元格 A1-F1 中,写入 x_start、x_old、x_new、f(x)、f'(x)、f-goal
2.2 设置单元格公式(按此顺序):
- A2=4
- B2 =IFERROR(C2,A2)
- C2=B2-D2/E2
- D2=B2*LN(B2)-F2
- E2=LN(B2)+1
- F2 =10
创建“垂直”布局:
3.1 制作标签。在单元格 A4-A9 中,写入 x_start、x_old、x_new、f(x)、f'(x)、f-goal
3.2 设置单元格公式(按此顺序):
- B4=4
- B5 =IFERROR(B6,B4)
- B6=B5-B7/B8
- B7=B5*LN(B5)-B9
- B8 =LN(B5)+1
- B9=10
创建“两列”布局:
4.1 制作标签。在单元格 E4-E6 中,写入 x_start、x_old、x_new。在单元格 H4-H6 中写入 f-目标、f(x)、f'(x)。
4.2 设置单元格公式(按此顺序):
- F4 =4
- F5 =IFERROR(F6,F4)
- F6=F5-G5/G6
- G5 =F5*LN(F5)-G4
- G6 =LN(F5)+1
- G4 =10
x_old 和 x_new 的解应收敛于约 5.728926,其中 f(x) 几乎为零。现在按 F9 或 Shift-F9 重新计算单元格值。 它仅针对“两列”布局收敛,这意味着值不会改变(几乎不会改变)。水平和垂直布局不断随机改变数字,并没有接近答案。
您可以检查上述公式对于预期变量是否完全相同(通过为每个布局分配 x_old 单元格一个固定值来验证。数字将完美匹配。)我疯了还是这是一个错误?
最佳答案
Excel 对循环引用使用不同的计算过程。
循环中的单元格从左到右、从上到下计算,直到达到最大迭代或更改限制。
这可能是收敛依赖于空间排列的原因(但我没有详细查看你的示例)。
有关更多详细信息,请参见 http://www.decisionmodels.com/calcsecretsc.htm
关于Excel:如果在某些空间布局中输入,循环计算将不会收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25458135/