matlab实验一0.618法

今天做了工程数学的实验一,由于我们这届是第一次开这门课,所以上机实验还是挺难的

实验一:一维寻优法(0.618 法)程序设计

一、实验目的

通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。

 

二、实验内容

(1)请用 0.618 法求解优化问题:

 

在区间[0,1]上的极小点和极小值;

(2)根据 0.618 法算法步骤编写 Matlab 的程序实现 0.618 搜索法;

(3)要求输出内容包括:极小点、极小值、每次迭代的 abala的值;

 

三、算法步骤、代码、及结果

   1. 算法步骤

    步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

 步1   若phi(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

   2. 代码

复制代码
function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)
%输入:phi是目标函数,a,b 是搜索区间的两个端点
%delta,epsilon分别是自变量和函数值的容许误差
%输出:s, phis分别是近似极小点和极小值,G是nx4矩阵,
%其第k行分别是a,b,的第k次迭代值[ak,pk,qk,bk],
%E=[ds,dphil],分别是s和phis的误差限.

%黄金分割点
t=(sqrt(5)-1)/2;
h=b-a;        % 自变量差
phia=feval(phi,a);phib=feval(phi,b);     %求出a,b点出的函数值
p=a+(1-t)*h; q=a+t*h;
phip=feval(phi,p); phiq=feval(phi,q);    %求出p,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];
复制代码

 

posted @   意い十三章  阅读(284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示