逐次插值逼近法求最小值,并记录步数,代码
时间: 2023-07-02 11:12:25 浏览: 205
ad-zhuanhuan.zip_8088 采集_A/D0809实验_逐次逼近法
逐次插值逼近法可以用于求函数的最小值。下面是使用逐次插值逼近法求函数 $f(x) = x^2+5\sin(x)$ 最小值的 Python 代码,并记录了迭代的步数:
```python
import numpy as np
def f(x):
return x**2 + 5*np.sin(x)
def sequential_interpolation_approximation(x0, h, eps):
x1 = x0 + h
x2 = x1 + h
k = 0
while (abs(h) > eps):
y0, y1, y2 = f(x0), f(x1), f(x2)
a0 = y0
a1 = (y1 - y0) / h
a2 = ((y2 - y1) / h - a1) / h
x_min = x1 - a1 / (2*a2)
y_min = f(x_min)
if (y_min < y1):
h = h / 2
x2 = x1
x1 = x_min
else:
h = 2 * h
x0 = x1
x1 = x_min
k += 1
return x_min, y_min, k
x_min, y_min, k = sequential_interpolation_approximation(0, 0.5, 0.0001)
print("最小值 x =", x_min)
print("最小值 y =", y_min)
print("迭代步数 k =", k)
```
其中,`x0` 是初始点,`h` 是迭代步长,`eps` 是误差容限。算法不断缩小步长,直到误差小于容限。在每一步中,根据当前的三个点,用二次插值公式计算极小值点,然后判断是否距离当前点足够近,如果是则将步长缩小,否则将步长加倍。
阅读全文