matlab 线搜索-黄金分割(0.618)算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
线搜索-黄金分割(0.618)算法及Matlab程序
- 一、使用条件?
- 二、算法及程序
- 1.算法
- 2.程序
- 总结
一、使用条件?
优化函数在搜索区间内为单峰函数。
二、算法及程序
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
% 步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,转步骤1t=(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)% 步1if phip<=phiq% 步3if (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);elsebreak;endelse% 步3if (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);elsebreak;endendk=k+1; G(k+1,:)=[a,p,q,b];
endif phip<=phiqs=p; phis=phip;
elses=q; phis=phiq;
endds=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
matlab 线搜索-黄金分割(0.618)算法相关推荐
- 孙青椒排版八法 和 黄金分割0.618法则和构图法
2019独角兽企业重金招聘Python工程师标准>>> 孙青椒排版八法 1.纵向排列法 所有版面构成元素以一条纵向轴为中心,左右两边分布排列 2.放射性排列法 所有版 ...
- 0.618方法matlab流程图,0.618法的matlab实现
(3)从上述计算结果可以看出,利用 MATLAB 实现的黄金分割法,通过 14 次 迭代可以满足收敛精度要求,并且计算结果和理论结果基本一致,误差为 (1.0013) (1) 0....... 暂无评 ...
- matlab wolfe准则,[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则...
line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以及不精确的一维搜索两大类. 在本文中,我想用"人话&qu ...
- 黄金分割寻优算法(0.618法)的Matlab实现
最近我们开学了,今年选修了"优化算法",最近都在学习算法,所以想着把书本上的算法用Matlab实现,说不定以后能直接用上呢.废话不多说,直接开始,主要是代码的分享,原理请自行了解. ...
- matlab线性搜索确定步长,使用非精最速下降法确线搜索armijo算法确定步长的.doc...
使用非精最速下降法确线搜索armijo算法确定步长的.doc 数学与计算科学学院实验报告实验项目名称使用非精确线搜索ARMIJO算法确定步长的最速下降法所属课程名称最优化方法实验类型算法编程实验日期2 ...
- matlab实现进退法、0.618法、牛顿法
文章目录 实验一 一维最优化方法 实验目的及要求: 实验原理: 算法1:进退法 算法2:0.618法 算法3:牛顿法 实验内容(方法和步骤) 例题 题目1 编写程序实现进退法. 题目2 利用进退法求解 ...
- 黄金分割(0.618)法求解函数极值(附代码)
目录 黄金分割法 迭代公式 算法步骤: 例题 C++代码: 黄金分割法也称为中外比,指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比.其比值是一个无理数,取其前三位数字的近似值 ...
- 最优化方法 | 【线搜索:斐波那契法Fibonacci】的Matlab实现
最优化方法 | [线搜索:斐波那契法Fibonacci]的Matlab实现 MATLAB代码实现: function [num,temp,alpha] = method_Fibonacci(a0,b0 ...
- 0.618法matlab
0.618法 建立golds.m文件 function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon) %输入:phi是目标函数,a,b是搜索区间的两个端点 % ...
最新文章
- nfs文件服务器读取文件夹,NFS文件服务器.ppt
- Python csv模块的使用
- 常见通信协议HTTP、TCP、UDP的简单介绍
- vue验证整数_vue input 输入校验字母数字组合且长度小于30的实现代码
- Linux下安装Kafka(单机版)
- 机器人轨迹规划:三次样条曲线
- Project(8)——收货地址——增加 --- 省市区数据处理
- PMP-8. 项目经理的能力
- 北大光华女的超强面经! 感动之余,真的受益匪浅。
- 数据结构 队列学习总结
- CocosCreator学习示例合集v3.4.2
- javaweb-day03-7(基础加强-泛型)
- 学习 Linux 有哪些好处?
- 日利息用计算机怎么算,日利率计算器在线计算
- matlab_app实现一个简单的色彩分析可视化程序
- java线程池的参数设置
- LeetCode 887. 三维形体投影面积
- 不骗你,没读这一篇,你不可能懂二分
- Spring WebFlux入门
- 华为服务器系统管理,WEB界面轻松搞定服务器管理--iMana华为服务器内置的Web管理系统...