使用http://en.wikipedia.org/wiki/Golden_section_search 的符号,您的搜索过程应该基于类似于迭代步骤的东西
- 从三个值 x1、x2 和 x3 开始,使得 x1
- 计算第四个值 x4,以便涉及它的某些差异也属于黄金比例
- 根据 f(x2) 是否大于或小于 f(x4),使用不同的规则从当前的一组值 {x1,x2,x3,x4} 中计算出一组新的值 {x1,x2,x3} .新值还满足 x1
虽然看起来有两种情况需要考虑 [根据 f(x2) 是否大于或小于 f(x4)],但实际上有 4 种情况需要考虑。
出现额外的情况是因为有两种方式可以排列 x1、x2 和 x3 的值,并且仍然满足上面 1. 中规定的条件。维基百科文章中的图表显示 x2 比 x3 更接近 x1。我将这种情况称为 RIGHT,因为 x1 和 x3 之间的两条线段中较长的一条出现在右侧。还有第二种情况,x2 更接近 x3,因此较长的段在左侧,我将其称为 LEFT。在这两种情况下 x4 的计算不同 - 对于 RIGHT 情况,x4 大于 x2,而在 LEFT 情况下,x4 应该小于 x2。根据当前的 x1、x2 和 x3 值是属于右排列还是左排列以及 f( x2) 大于或小于 f(x4) - 2 种可能性(右或左)乘以 2 种可能性(f(x2) 大于或小于 f(x4))总共给出 4 种可能的情况。此外,其中 2 种情况导致新的 x1、x2 和 x3 值属于 RIGHT 排列,2 种导致 LEFT 排列。
要正确管理迭代步骤,您需要正确识别这 4 种情况。使用类似 Excel 的符号,计算 x4 的公式(每个迭代步骤的第 2 部分)是
=x2*(1 + 1/r) - IF(case="RIGHT", x1, x3)/r [where r is the golden ratio]
计算新x1值的公式(每个迭代步骤的第3部分的一部分)是
=IF(case="RIGHT",IF(f(x4)<f(x2), x2, x1), IF(f(x4)<f(x2), x1, x4))
第一个公式使用 IF() 根据 x1、x2 和 x3 的当前排列是否分别符合 RIGHT 或 LEFT 情况来传递 x1 或 x3,然后将传递的值用作计算表达式的一部分x4。第二个公式使用嵌套的 IF(),您应该能够看到该公式如何表示上面讨论的 4 种情况。我将把它留给你作为练习来计算 x2 和 x3 的新值的公式,但它们都使用与上面第二个公式相同的嵌套 IF() 结构。您还可以使用相同的结构作为公式来提供新的 x1、x2 和 x3 值的新大小写排列。用铅笔和纸画出每个案例是制定所需公式的良好起点。
如果你能正确计算出所有的公式,那么你可以构建一个包含 7 列的列表
case, x1, x2, x3, x4, f(x2), f(x4)
其中连续的行表示连续的迭代步骤。每行的第五个值是使用上面的第一个公式从同一行的前 4 个值计算出来的,第六个和第七个值是分别从同一行的第三个和第五个值计算出来的。第二个值是使用上一行中的值使用上面的第二个公式计算的。同样,第一个、第三个和第四个值是使用我留给您自己计算的公式计算的,但每个公式都将引用前一行的值。您可以添加第 8 列来告诉您迭代过程何时充分收敛 - 可能基于第 7 列和第 8 列之间的绝对差异。
作为最后的评论,除非您有特定原因使用迭代方法来查找函数最小值,否则使用微积分完全解决您的问题会容易得多 - 也许这就是您所说的意思“以数字方式完成问题”。