Excel:如果在某些空间布局中输入,循环计算将不会收敛

标签 excel iteration circular-reference

我发现 Excel 循环计算存在奇怪的行为。启用后(通过选项),循环引用可用于迭代。在我的示例中,我使用 Newton's method 。我看到的问题是,当我在特定的空间布局中输入单元格公式时,迭代不会收敛。如果我使用不同的布局,它将收敛。这是一个错误,还是我错过了什么?以下是重现它的方法(在 Excel 2010、2011 上测试):

f(x) = x*ln(x)

  1. 新的 Excel 工作簿。
  2. 创建“水平”布局:

    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. 创建“垂直”布局:

    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. 创建“两列”布局:

    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/

相关文章:

vba - 在VBA中使用for循环调用连续的变量名(即car1,car2...car10)

c - 多线程在同一个链表上工作,错过了列表的最后一个元素

javascript - 这种模式是否会导致闭包中的循环引用?

excel - 设置页面格式以按 2 列打印

javascript - 下载的 Excel 中的阿拉伯字符出现错误

python - Python 中的 "yield"

arrays - 将所有数组值转换为哈希值?

sql - 防止 MS-SQL 表中的循环引用

ocaml - 在同一记录的其他字段中使用记录字段

excel - MsgBox vbOKCancel 在单元格中留下 1 或 2