#定义函数 t0 及h
f = lambda t : t**3 - 2*t**2 + 1
t0 = -0.5 #初始点
h = 0.5 #初始步长
t2 = t0 + h
t0_value = round(f(t0), 3)
t2_value = round(f(t2), 3)
h = h if t2_value < t0_value else -h
print(f't0={t0},t2={t2},f(t0)={t0_value},f(t2)={t2_value},h={h}')
print()
t1 = t0 +h
h = 2 * h
t2 = t0
t0 = t1
t1 = t0 + h
print(f't2=t0={round(t2, 3)} t0=t1={round(t0, 3)} t1=t0+h={round(t1, 3)} ')
t1_value = round(f(t1), 3)
t0_value = round(f(t0), 3)
print(f'f(t1)={t1_value}, f(t2)={t2_value}')
while(t1_value < t0_value):
print('f(t1) < f(t0)')
print()
h = 2 * h
t2 = t0
t0 = t1
t1 = t0 + h
print(f't2=t0={round(t2, 3)} t0=t1={round(t0, 3)} t1=t0+h={round(t1, 3)} ')
t1_value = round(f(t1), 3)
t0_value = round(f(t0), 3)
print(f'f(t1)={t1_value}, f(t0)={t0_value}')
print('f(t1) > f(t0) 算法截止')
print()
a = round(min(t1, t2), 3)
b = round(max(t1,t2), 3)
print(f'a=min(t1, t2)={a} b=max(t1,t2)={b}')
print(f'初始搜索区间[{a},{b}])')
print(f'初始点[{round((a+b)/2,3)}]')
python实现一维搜索搜索进退法
最新推荐文章于 2024-07-27 12:20:46 发布