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

来源:互联网 发布:学java走前端还是后端 编辑:程序博客网 时间:2024/06/10 13:31

% 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;ticwhile((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;    endendX = (lower + upper) / 2;tocdisp(['最优解: 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 作为系数考虑,相比于
其他系数经过试验发现它能有效提升求极
小值的收敛速度

具体为什么没想出来。。。
然后——参照了《关于黄金分割法的几点讨论》–刘艳
推荐可以看看
%}

原创粉丝点击