0.618法程序及算例
时间: 2023-12-20 19:05:41 浏览: 136
0.618法,也称黄金分割法,是一种用于寻找最优解的搜索方法。下面给出一个简单的0.618法程序及算例。
算法步骤:
1. 确定搜索区间[a,b]和误差精度ε。
2. 令c = a + 0.618(b - a),d = b - 0.618(b - a)。
3. 若|b - a| < ε,则停止搜索,输出最优解为(a + b) / 2。
4. 若f(c) > f(d),则最优解在[a,d]之间,令b = d,重复第2步。
5. 若f(c) < f(d),则最优解在[c,b]之间,令a = c,重复第2步。
程序代码:
```python
def golden_section_search(f, a, b, epsilon=0.0001):
'''
:param f: 目标函数
:param a: 搜索区间左端点
:param b: 搜索区间右端点
:param epsilon: 误差精度
:return: 最优解 x
'''
c = a + 0.618 * (b - a)
d = b - 0.618 * (b - a)
while abs(b - a) > epsilon:
if f(c) > f(d):
b = d
d = c
c = a + 0.618 * (b - a)
else:
a = c
c = d
d = b - 0.618 * (b - a)
x = (a + b) / 2
return x
```
算例:
求函数f(x) = x^3 - 2x^2 - 5在区间[0, 3]上的最优解。
```python
def f(x):
return x ** 3 - 2 * x ** 2 - 5
a = 0
b = 3
x = golden_section_search(f, a, b)
print("最优解为:", x)
print("函数值为:", f(x))
```
运行结果:
```
最优解为: 1.9388718907890955
函数值为: -10.416670057309646
```
因此,f(x)在区间[0, 3]上的最优解为x=1.9389,此时函数值为f(x)=-10.4167。
阅读全文