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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐