黄金分割算法是一种特殊的序列消去算法,黄金分割法的基本思想是:计算并比较插入的值的函数值,并且不断舍弃函数峰值旁边的一部分,进行对原有区间的消去,使其区间按等比例(0.618)等速缩短 ,(感觉是不是可以按更高的比例进行缩短,这样是不是更快)
1,黄金分割法迭代过程
2,黄金分割法的程序框图
3,MATLAB可运行程序
function [x,fx] = Golden_Section(f,a,b,exp)
%% 说明
%{
本函数用于黄金分割法精确函数极值的区间
其中f为输入的目标函数
a,b分别为初始区间的左右端点
exp为精度
调用方法:
clear; clc;
fun = @(x) ((1/4)*x^4-(2/3)*x^3-2*x^2-7*x+8);
[x,fx]=HJ(fun,3,4,0.05);
disp('函数的极小值点为:');
x
disp('函数的极小值为:');
fx
%}
%% 函数主体
rbd=0.618;
d=a+rbd*(b-a);
c=a+(1-rbd)*(b-a);
fc=f(c);
fd=f(d);
while abs(b-a)>=exp
if fc<fd
b=d;
d=c;
fd=fc;
c=a+(1-rbd)*(b-a);
fc=f(c);
end
if fc>fd
a=c;
c=d;
fc=fd;
d=a+rbd*(b-a);
fd=f(d);
end
end
x=(a+b)/2;
fx=f(x);
end