黄金分割法是一种用于优化问题的区间收缩方法,通过不断缩小包含最优解的区间来逼近最优解。以下是一个使用Python实现黄金分割法的示例:
```python
def golden_section_search(f, a, b, tol=1e-6):
"""
使用黄金分割法在区间[a, b]上寻找函数f的最小值点。
参数:
f (function): 需要优化的函数
a (float): 区间左端点
b (float): 区间右端点
tol (float): 精度要求
返回:
float: 函数f在区间[a, b]上的最小值点
"""
c = 0.618033988749895
while (b - a) / 2.0 > tol:
if f(a + c * (b - a)) < f(a + (1 - c) * (b - a)):
b = a + c * (b - a)
else:
a = a + (1 - c) * (b - a)
return (a + b) / 2.0
示例函数
def example_function(x):
return x2
初始区间和精度要求
a = 0
b = 10
tol = 1e-6
调用黄金分割法
min_value = golden_section_search(example_function, a, b, tol)
print(f"函数在区间[{a}, {b}]上的最小值点为: {min_value}")
```
代码解释
函数定义:
`golden_section_search(f, a, b, tol)`: 这是一个函数,用于在区间`[a, b]`上寻找函数`f`的最小值点。它使用黄金分割法来逐步缩小搜索区间,直到满足精度要求`tol`。
参数:
`f`: 需要优化的函数。
`a`: 区间左端点。
`b`: 区间右端点。
`tol`: 精度要求,当区间长度小于此值时停止迭代。
算法步骤:
初始化`c`为黄金分割比`0.618033988749895`。
进入一个循环,只要区间长度大于精度要求,就继续迭代:
计算`a + c * (b - a)`和`a + (1 - c) * (b - a)`。
如果`f(a + c * (b - a))`小于`f(a + (1 - c) * (b - a))`,则将`b`更新为`a + c * (b - a)`,否则将`a`更新为`a + (1 - c) * (b - a)`。
当区间长度小于精度要求时,返回`(a + b) / 2.0`作为最小值点。
示例函数:
`example_function(x)`: 这是一个简单的二次函数`x^2`,用于测试黄金分割法。
初始区间和精度要求:
`a = 0`和`b = 10`定义了搜索区间。
`tol = 1e-6`是精度要求。
调用函数:
调用`golden_section_search`函数,传入示例函数和初始区间,得到最小值点并打印结果。
通过这种方式,你可以将黄金分割法应用于任何需要优化的问题,只需将目标函数和相应的区间提供给函数即可。