matlab实验一0.618法
今天做了工程数学的实验一,由于我们这届是第一次开这门课,所以上机实验还是挺难的
实验一:一维寻优法(0.618 法)程序设计
一、实验目的
通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。
二、实验内容
(1)请用 0.618 法求解优化问题:
在区间[0,1]上的极小点和极小值;
(2)根据 0.618 法算法步骤编写 Matlab 的程序实现 0.618 搜索法;
(3)要求输出内容包括:极小点、极小值、每次迭代的 a、b、al、ak 的值;
三、算法步骤、代码、及结果
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];
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)