每日 23

(1)请用0.618法求解优化问题:
min f(x) = x²-x+6
的极小点和极小值(进退法确定初始区间),精度为106;
(2)根据0.618 法算法步骤编写 Matlab的程序实现 0.618 搜索法;
(3)要求输出内容包括:极小点、极小值、每次迭代的a、b、a、ak的值;
(4)按照模板撰写实验报告,要求规范整洁。

python:
import numpy as np

def f(x):
"""目标函数:f(x) = x² - x + 6"""
return x**2 - x + 6

def进退法(x0=0, h0=0.1, max_iter=100):
"""用进退法确定初始搜索区间[a, b]"""
h = h0
x1 = x0
x2 = x1 + h
f1 = f(x1)
f2 = f(x2)

# 前进搜索(函数值递减)
if f2 < f1:
    for _ in range(max_iter):
        x3 = x2 + h
        f3 = f(x3)
        if f3 >= f2:  # 找到上升点,停止
            return (x1, x3)
        else:  # 继续前进,步长加倍
            x1, f1 = x2, f2
            x2, f2 = x3, f3
            h *= 2
# 后退搜索(函数值递增)
else:
    h = -h0
    x3 = x1 + h
    f3 = f(x3)
    for _ in range(max_iter):
        if f3 < f1:
            x1, f1 = x3, f3
            h *= 2
            x3 = x1 + h
            f3 = f(x3)
        else:
            return (x3, x2)
raise ValueError("进退法未找到有效区间")

def黄金分割法(a, b, eps=1e-6):
"""0.618法求解极小点,返回迭代过程和结果"""
iteration = []
phi = 0.618
x1 = a + (1 - phi)(b - a)
x2 = a + phi
(b - a)
f1 = f(x1)
f2 = f(x2)

while (b - a) > eps:
    iteration.append({
        "a": a, "b": b,
        "x1": x1, "x2": x2,
        "f(x1)": f1, "f(x2)": f2
    })
    if f1 < f2:
        b = x2
        x2 = x1  # 利用已计算的x1作为新的x2
        f2 = f1
        x1 = a + (1 - phi)*(b - a)
        f1 = f(x1)
    else:
        a = x1
        x1 = x2  # 利用已计算的x2作为新的x1
        f1 = f2
        x2 = a + phi*(b - a)
        f2 = f(x2)

x_min = (a + b) / 2  # 最终区间中点为极小点近似值
f_min = f(x_min)
return x_min, f_min, iteration

主程序

if name == "main":
# 步骤1:确定初始区间
a0, b0 =进退法(x0=0, h0=0.1)
print(f"初始区间确定为: [a0, b0] = [{a0:.4f}, {b0:.4f}]")

# 步骤2:0.618法迭代搜索
x_min, f_min, iteration =黄金分割法(a0, b0, eps=1e-6)

# 输出迭代过程
print("\n迭代过程记录:")
print(f"{'迭代次数':<8} {'a':<12} {'b':<12} {'x1':<12} {'x2':<12}")
for i, step in enumerate(iteration):
    print(f"{i+1:<8} {step['a']:<12.6f} {step['b']:<12.6f} {step['x1']:<12.6f} {step['x2']:<12.6f}")

# 输出最终结果
print(f"\n极小点近似值: x_min = {x_min:.8f}")
print(f"极小值近似值: f_min = {f_min:.8f}")
posted @ 2025-05-07 20:42  一如初见233  阅读(29)  评论(0)    收藏  举报