用python编写一个黄金分割函数:输入函数f,区间a,b,误差范围tol,输出使用黄金分割法求出的最优解与估计的最小值,同时打印出每次迭代后的更新区间与区间长度,写出完整可运行的代码
时间: 2024-09-15 07:05:55 浏览: 44
在Python中,你可以使用递归的方式来实现黄金分割搜索算法。黄金分割法是一种优化搜索技术,它通过不断缩小搜索区间来逼近目标函数的最小值。以下是一个完整的可运行的代码示例:
```python
def golden_section_search(f, a, b, tol=1e-6):
# 定义黄金比例phi = (sqrt(5) - 1) / 2
phi = (math.sqrt(5) - 1) / 2
def _gss(current_a, current_b):
# 计算分割点c
c = a + phi * (b - a)
# 计算分割点d,使得(a, d)和(c, b)的区间长度相等
d = a + (1 - phi) * (b - a)
# 检查两个分割点是否接近
if abs(b - c) < tol:
return current_a, f(current_a)
# 如果f(c)小于f(d),则更新区间和最小值
elif f(c) < f(d):
return _gss(a, c)
else:
return _gss(c, b)
# 开始搜索并返回结果
optimal_x, min_val = _gss(a, b)
print(f"Optimal solution: x = {optimal_x}, minimum value: {min_val}")
print("Iteration history:")
while current_b > current_a + tol:
mid = (current_a + current_b) / 2
print(f"Iteration: [a={current_a}, b={current_b}], length={current_b - current_a}, value at mid={f(mid)}")
if f(mid) < min_val:
min_val = f(mid)
optimal_x = mid
# 更新区间
current_a, current_b = mid, current_b
return optimal_x, min_val
# 使用示例,这里假设有一个简单的函数供测试
import math
def test_func(x):
return x**2 - 10
result = golden_section_search(test_func, 0, 10, tol=0.0001)
阅读全文