黄金分割法是一种用于单峰函数最小值点搜索的区间收缩方法。以下是一个使用黄金分割法的Python代码示例,用于求解给定区间内的函数最小值:
```python
import numpy as np
import matplotlib.pyplot as plt
def f(x):
求解体积函数公式,乘1.0将结果变为浮点数
return -1.0 * x * (350 - 2 * x) * (260 - 2 * x)
def golden_section_search(f, a, b, tol=1.0e-6):
x1 = a + 0.382 * (b - a)
x2 = a + 0.618 * (b - a)
f1 = f(x1)
f2 = f(x2)
while (b - a) / 2 > tol:
if f1 <= f2:
b = x2
x2 = x1
f2 = f1
x1 = a + (b - a) / 2
f1 = f(x1)
else:
a = x1
x1 = x2
f1 = f2
x2 = a + (b - a) / 2
f2 = f(x2)
return (x1 + x2) / 2, f1
示例使用
a = 0
b = 130
x_min, f_min = golden_section_search(f, a, b)
print(f"函数最小值点: x = {x_min}, f(x) = {f_min}")
```
代码解释
函数定义:
`f(x)`: 需要求解最小值的函数。
`golden_section_search(f, a, b, tol)`: 黄金分割法搜索函数,返回最小值点及其函数值。
黄金分割法步骤:
初始化两个点 `x1` 和 `x2`,分别位于区间 `[a, b]` 的 `0.382` 和 `0.618` 分位点。
计算 `f1` 和 `f2`,即 `f(x1)` 和 `f(x2)`。
如果 `f1 <= f2`,则将 `b` 更新为 `x2`,并将 `x2` 更新为 `x1`,然后重新计算 `x1` 和 `f1`。
否则,将 `a` 更新为 `x1`,并将 `x1` 更新为 `x2`,然后重新计算 `x2` 和 `f2`。
重复上述步骤,直到区间长度小于给定的精度 `tol`。
示例使用:
定义区间 `[a, b]` 和精度 `tol`。
调用 `golden_section_search(f, a, b, tol)` 函数,获取最小值点及其函数值。
打印结果。
建议
确保函数 `f(x)` 在区间 `[a, b]` 内是单峰的,否则黄金分割法可能无法找到正确的最小值点。
可以根据具体问题调整精度 `tol`,以获得更精确的结果。