matlab 线搜索-黄金分割(0.618)算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

线搜索-黄金分割(0.618)算法及Matlab程序


一、使用条件?

优化函数在搜索区间内为单峰函数。

二、算法及程序

1.算法

p=a+(1-t)*(b-a); q=a+t*(b-a);

2.程序

代码如下(示例):

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%0.618法求单变量函数在单峰区间[a,b]上的近似极小点
%在命令窗口输入函数:[s,phis,k,G,E]=gods(inline('(s-1)^2'),0,1,1e-4,1e-5)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [s,phis,k,G,E]=gods(phi,a,b,delta,epsilon)
%功能: 0.618法精确线搜索
%输入: phi是目标函数, a, b是搜索区间的两个端点
%      epsilon,delta分别是自变量和函数值的容许误差
%输出: s, phis分别是近似极小点和极小值,  G是nx4矩阵,
%      其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],
%      E=[ds,dphi], 分别是s和phis的误差限.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%0    确定初始搜索区间[a0,b0]和容许误差0\leq\epsilon\leq1. 
%       令t=(sqrt(5)-1)/2
%       计算初始试探点p0=a0+(1-t)(b0-a0),q0=a0+t(b0-a0),
%       及相应的函数值phi(p0),phi(q0)。令k=0
%1phi(pi)<=phi(qi),转步骤2;否则,转步骤3
%2   计算左试探点. 若qi-ai<=epsilon,停算,输出pi;否则,令
%       a{i+1}=ai,b{i+1}=qi,phi(q{i+1})=phi(pi),
%       q{i+1}=pi,p{i+1}=a{i+1}+(1-t)(b{i+1}-a{i+1}).
%       计算phi(p{i+1}), i=i+1,转步骤1
%3   计算右试探点.若bi-pi<=epsilon,停算,输出qi;否则,令
%       a{i+1}=pi,b{i+1}=bi,phi(p{i+1})=phi(qi),
%       p{i+1}=qi,q{i+1}=a{i+1}+t(b{i+1}-a{i+1}).
%       计算phi(q{i+1}), i=i+1,转步骤1

t=(sqrt(5)-1)/2;    
% h=b-a;      % 自变量差
phia=feval(phi,a);  phib=feval(phi,b);      %求出a,b点出的函数值   
p=a+(1-t)*(b-a);    q=a+t*(b-a);
phip=feval(phi,p);  phiq=feval(phi,q);      %求出p,q点出的函数值 
k=0;    
G(k+1,:)=[a,p,q,b];
while(1)     % 判断循环终止条件(abs(h)>epsilon) || (abs(phib-phia)>delta)
    %1
    if phip<=phiq
        %3
        if (abs(b-a)>epsilon)||(abs(phib-phia)>delta)
            b=q;    phib=phiq;    phiq=phip;    q=p;    
%             h=b-a;  
            p=a+(1-t)*(b-a);    phip=feval(phi,p);
        else
            break;
        end
    else
        %3
        if (abs(b-a)>epsilon)||(abs(phib-phia)>delta)
            a=p;    phia=phip;     phip=phiq;   p=q; 
%             h=b-a;  
            p=a+t*(b-a);    phiq=feval(phi,q);
        else
            break;
        end
    end
    k=k+1;  
    G(k+1,:)=[a,p,q,b];
end

if phip<=phiq
    s=p;    phis=phip;
else
    s=q;    phis=phiq;
end

ds=abs(b-a);    
dphi=abs(phib-phia);
E=[ds,dphi];

在这里插入图片描述


总结

结果好像不怎么正确,欢迎大佬指导。
s =
0.6525
phis =
0.0557
k =
106
G =

E =
1.0e-05 *
0.9252 0.6431

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

眰恦I

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值