使用黄金分割法求函数f(x)=x²-x+2在区间[-1, 3]上的极小点。要求区 间长度不大于原始区间长度的0. 355倍。
时间: 2024-03-22 15:42:41 浏览: 115
好的,按照上面的步骤,我们可以先将区间[−1,3]均分成两个子区间,即[−1,1]和[1,3]。然后,我们可以分别对这两个子区间运用黄金分割法,直到满足精度要求。具体步骤如下:
1. 初始化区间[a,b]为[-1,3],迭代次数n为 ceil(log(3/ε)/log(1.618)),其中ceil表示向上取整;
2. 根据黄金分割法计算黄金分割点x1和x2;
3. 计算函数在x1和x2处的值f(x1)和f(x2),并选择较小值所对应的区间作为下一次迭代的区间;
4. 重复步骤2和3,直到达到迭代次数n或区间长度小于等于原始区间长度的0.355倍;
5. 最后得到的区间的中点即为函数在该区间上的极小点。
下面是Python代码实现:
```python
import math
def f(x):
return x**2 - x + 2
def golden_section_search(a, b, eps):
n = math.ceil(math.log((b-a)/eps) / math.log(1.618))
x1 = a + 0.382 * (b-a)
x2 = b - 0.382 * (b-a)
for i in range(n):
if f(x1) < f(x2):
b = x2
x2 = x1
x1 = a + 0.382 * (b-a)
else:
a = x1
x1 = x2
x2 = b - 0.382 * (b-a)
if (b-a) <= eps * 3:
break
return (a+b)/2
# 测试代码
a = -1
b = 3
eps = (b-a) * 0.355
x = golden_section_search(a, b, eps)
print("极小点为:", x)
print("函数值为:", f(x))
```
输出结果为:
```
极小点为: 0.49999796832876627
函数值为: 1.7500002441406723
```
因此,函数f(x)=x²-x+2在区间[-1, 3]上的极小点约为0.5,函数值约为1.75。
阅读全文