最优化方法与实践-黄金分割法(matlab实现)

作用:确定单变量函数的近似极小点

算法:

代码:

%Author:风君子
%Date:2022.9.24
%Course:Optimization
%Golden section method
function [s, phis, k, G, E] = golds(phi, a, b, delta, epsilon)
%输入:phi目标函数;[a, b]是搜索区间的
%delta, epsilon分别为自变量和函数值的容许误差
%输出:s,phis分别是近似极小点和极小值
%G是n*4矩阵:其第k行分别为第k次迭代值[ak,pk,qk,bk]
%E=[ds,dphi]为s和phis的误差限
t = (sqrt(5) - 1) / 2;%黄金分割率
h = b - a;
phia = feval(phi, a);
phib = feval(phi, b);
p = a + (1 -t)*h;
q = a + t*h;
phip = feval(phi, p);
phiq = feval(phi, q);
k = 1;
G(k, :) = [a, p, q, b];
while(abs(phib - phia) > epsilon) | (h > delta)
    if (phip < phiq)
        b = q;
        phib = phiq;
        q =p;
        phiq = phip;
        h = b - a;
        p = a + (1 - t) * h;
        phip = feval(phi,p);
    else
        a = p;
        phia = phip;
        p = q;
        phip = phiq;
        h = b - a;
        q = a + t * h;
        phiq = feval(phi,q);
    end
    k = k + 1;
    G(k,:) = [a, p, q, b];
end
ds = abs(b - a);
dphi = abs(phib - phia);
if (phip <= phiq)
    s = p;
    phis = phip;
else
    s = q;
    phis = phiq;
end
E = [ds, dphi];

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值