二次插值法求极小值,并记录步数。代码
时间: 2023-07-10 11:10:44 浏览: 171
二次插值法求极小值
以下是使用 Python 实现的二次插值法求解函数极小值的代码,同时记录了迭代步数。
```python
import math
# 定义目标函数
def f(x):
return math.sin(x)
# 定义一阶导数
def df(x):
return math.cos(x)
# 二次插值法求解极小值
def quadratic_interpolation(x1, h, epsilon):
# 初始化迭代步数
count = 0
while True:
# 计算函数值和一阶导数
f1 = f(x1)
df1 = df(x1)
# 向左或向右移动一个位置
x2 = x1 + h
f2 = f(x2)
df2 = df(x2)
# 向左或向右移动一个位置
x3 = x2 + h
f3 = f(x3)
df3 = df(x3)
# 构造二次函数
p = f1 + (x - x1) * (f2 - f1) / (x2 - x1) + (x - x1) * (x - x2) / ((x3 - x1) * (x3 - x2)) * ((f3 - f1) - (f2 - f1))
# 计算极小值点
x_star = x1 - df1 * (x2 - x1) / (df2 - df1)
# 更新迭代步数
count += 1
# 判断是否满足停止条件
if abs(x_star - x1) < epsilon:
return x_star, f(x_star), count
# 更新 x1
x1 = x_star
```
使用方法:
```python
x_star, f_star, count = quadratic_interpolation(x1=2, h=0.01, epsilon=1e-6)
print('x_star:', x_star)
print('f_star:', f_star)
print('迭代步数:', count)
```
其中,x1 为初始点,h 为步长,epsilon 为停止条件。
阅读全文