您的位置:首页 > 编程语言 > MATLAB

matlab黄金分割算法实现与解析

2017-09-23 10:20 239 查看
% 0.618法求f(x) = x^2 - 7x + 10最小值,初始区间[1, 7],判断精度0.01

lower = 1;
upper = 7;
f = @(x) x ^ 2 - 7* x + 10;  %匿名函数

e = 0.01;
tic
while((upper - lower) >= e)
alpha1 = lower + 0.382 * (upper - lower);
alpha2 = lower + 0.618 * (upper - lower);
if f(alpha1) < f(alpha2)
upper = alpha2;
else
lower = alpha1;
end
end
X = (lower + upper) / 2;
toc
disp(['最优解: X = ',num2str(X)]);
disp(['此时: f(X) = ',num2str(f(X))]);


%{

学习收获:

Anonymous functions:
handle = @(arglist)anonymous_function

(example :)
f=@(x,y)x^2+y^2;
f(1,2)
%ans =  5
(基本)

f=@(x,y)x.^2+y.^2;
a=1:1:10;
b=10:-1:1;
f(a,b)
%ans =    101    85    73    65    61    61
65    73    85   101
(输入数组)

(3)(3)>> a=1:5;
>> b=5:-1:1;
>> c=0.1:0.1:0.5;
>> f=@(x,y)x.^2+y.^2+c;
>> f(a,b)
% ans =    26.1000   20.2000   18.3000
20.4000   26.5000
(包含参数)

f=@(x,y)@(a) x^2+y^+a;
f1=f(2,3)
f1 = @(a)x^2+y^+a
f2=f1(4)
f2 =   85
(多重)


advantage——Golden Section Method:

以0.618与0.382 作为系数考虑,相比于

其他系数经过试验发现它能有效提升求极

小值的收敛速度

具体为什么没想出来。。。

然后——参照了《关于黄金分割法的几点讨论》–刘艳

推荐可以看看

%}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 算法