基于黄金分割法的一维最优化搜索算法实现
项目介绍
本项目实现了黄金分割法(又称0.618法)这一经典的一维最优化搜索算法。该算法通过不断缩小搜索区间来逼近单峰函数的极值点,具有收敛稳定、计算简单的特点。算法基于黄金分割比例(约为0.618)构造搜索点,能高效地压缩区间长度,适用于连续单峰函数的最优化问题求解。
功能特性
- 自动确定初始区间:支持用户指定初始搜索区间,确保包含极值点
- 智能区间收缩:基于黄金分割比例动态调整搜索区间范围
- 精确收敛控制:支持自定义精度要求和最大迭代次数
- 完整过程记录:详细记录每次迭代的区间变化和计算点信息
- 可视化支持:可展示迭代过程和区间收缩轨迹(需配合绘图功能)
使用方法
基本调用格式
[x_opt, f_opt, iter, converged, process_data] = main(fun, initial_interval, tolerance, max_iter)
参数说明
- fun:目标函数(匿名函数或函数句柄),例如
@(x) x^2 + 2*x + 1 - initial_interval:初始搜索区间(二元数组),例如
[0, 2] - tolerance:精度要求(正数标量),例如
1e-6 - max_iter:最大迭代次数(正整数),默认值为100
输出结果
- x_opt:最优解(函数极值点的x坐标)
- f_opt:最优值(函数在极值点处的函数值)
- iter:实际收敛所需的迭代次数
- converged:收敛状态(true表示收敛,false表示未收敛)
- process_data:迭代过程数据(包含区间范围、计算点等信息)
使用示例
% 定义目标函数
f = @(x) x^2 - 4*x + 4;
% 设置搜索参数
a = 0; b = 5; % 初始区间
tol = 1e-6; % 精度要求
max_it = 50; % 最大迭代次数
% 执行黄金分割搜索
[x_min, f_min, n_iter, flag, data] = main(f, [a, b], tol, max_it);
系统要求
- MATLAB R2016a 或更高版本
- 支持基本数学运算和函数句柄操作
文件说明
主程序文件实现了黄金分割法的完整计算流程,包括初始区间验证、黄金分割点计算、区间收缩策略、收敛性判断等核心功能。该文件负责协调算法各组成部分的执行顺序,处理输入参数的校验与默认值设置,组织迭代过程的逻辑控制,并最终输出优化结果和详细的迭代信息。