黄金分割算法适用于一元函数f(x)在给定区间[a, b]内搜索极小点的问题。其基本原理为: 按照黄金分割比例原则逐步缩小搜索区间, 可类比二分法, 二分法是取a和b的中点逐渐缩小搜索空间, 而黄金分割算法是取a和b的黄金分割点。 一、Matlab脚本文件在此文件进行相应修改,然后运行即可。 % 1.设置要求的目标函数和搜索区间 syms x; %定义x为自变量 y = (x-1)^2 + 1; %要求的目标函数 a = 0.1; b = 2; %a,b为搜索区间 epsilon = 1e-3; %epsilon为收敛精度 % 2.调用黄金分割算法函数求解 [best_x, best_y] = golddiv(y, x, a, b, epsilon)
二、黄金分割算法的函数文件function [best_x, best_y] = golddiv(y, x, a, b, epsilon) % 本函数实现黄金分割算法 % y是目标函数, x是自变量, a,b为区间范围, epsilon为精度 % best_x为黄金分割算法找到的最优点 % best_y为最优点处的函数值 if nargin == 4 %如果输入参数没有精度要求 epsilon=0.001; %设置默认的epsilon end x1 = a + 0.382 * (b - a); %根据黄金分割比例确定搜索点 f1 = subs(y, x, x1); %函数y在x1处的值 x2 = a + 0.618 * (b - a); %根据黄金分割比例确定搜索点 f2 = subs(y, x, x2); %函数y在x2处的值 while(abs(b - a) > epsilon) if f1 < f2=""> b = x2; %b为新的右边界 x2 = x1; %更新x2值 f2 = f1; x1 = a + 0.382 * (b - a); %更新x1值 f1 = subs(y, x, x1); else a = x1; x1 = x2; f1 = f2; x2 = a + 0.618 * (b - a); f2 = subs(y, x, x2); end end best_x = (a + b) / 2; %最优的x值取a和b的平均值 best_y = subs(y, x, best_x); %最优的函数值 end
|