黄金分割法与Fibonacci法
最优化原理与算法
实验内容:
用matlab编制一维搜索程序(黄金分割法(0.618法)和Fibonacci法为例子)来求解一维问题
(1)minαϕ(α)=eα−5α(1)\quad\min_{\alpha}\quad\phi(\alpha)=e^\alpha-5\alpha (1)αminϕ(α)=eα−5α
(2)minαϕ(α)=α3−2α2+1(2)\quad\min_{\alpha}\quad\phi(\alpha)=\alpha^3-2\alpha^2+1 (2)αminϕ(α)=α3−2α2+1
其中ϵ=0.001其中\epsilon=0.001 其中ϵ=0.001
此问题中,需要先找出两个一维问题的初始区间,下面用进退法求出两函数的初始区间。
进退法求搜索区间
1.算法思想:
(1)给定初始点,初始步长>0,置,计算,并置.
(2)令,计算,置.
(3)若,则转步骤(4);否则转步骤(5).
(4)令置,转步骤(2).
(5)若,则转步骤(6);否则,转步骤(7).
(6)置转步骤(2).
(7)令,停止计算.
这样得到含有极小点的区间.
2.代码实现:
该进退法现以.m文件实现
search_field.m
%% 求搜索区间
%在这我们将步长α记为a,将点μ,μ1,μ2,μ3记为m,m1,m2,m3
%将函数值φ,φ1,φ2,φ3记为f,f1,f2,f3,将[b1,b2]记为最终的搜索空间
clear all;
clc;
a = 1; m3 = 0; f3 = ft1(m3); k = 0; %其中ft1为第一个函数的.m文件
m = m3+a; f = ft1(m); k = k+1;
while f<f3m2 = m3; f2 = f3; m3 = m; f3 = f; a = 2*a; k = k+1;m = m3+a; f = ft1(m); k = k+1;
endwhile k==1m2 = m; f2 = f; a=-1*a;m = m3+a; f = ft1(m); k = k+1;while m<m3m2 = m3; f2 = f3; m3 = m; f3 = f;a = 2*a; k = k+1;end
end
m1 = m2; f1 = f2; m2 = m3; f2 = f3; m3 = m;
f3 = f;
b1 = min(m1,m3)
b2 = max(m1,m3)
ft1.m
function y = ft1(x)y = exp(x)-5*x;
求第二问的搜索区间时,只需把search_field.m中的ft1改为ft2即可
ft2.m
function y = ft2(x)y = x^3-2*x^2+1;
search_field.m运行后得出ft1的结果为b1=0, b2=3
search_field.m运行后得出ft2的结果为b1=0, b2=3
即两函数的初始搜索区间都为[0,3].
求出初始搜索区间后,紧接着用黄金分割法和Fibonacci法计算出最优解.
一、黄金分割法
1.算法思想:
(1) 置初始搜索区间[a,b],并置精度要求 ε ,并计算左右试探点
αl=a+(1−τ)(b−a)\alpha_l=a+(1-\tau)(b-a) αl=a+(1−τ)(b−a)
αr=a+τ(b−a)\alpha_r=a+\tau(b-a) αr=a+τ(b−a)
其中
τ=5−12,\tau=\frac{\sqrt{5}-1}{2}, τ=25−1,
及相应的函数值
ψl=ψ(αl),ψr=ψ(αr)\psi_l=\psi(\alpha_l),\quad\psi_r=\psi(\alpha_r) ψl=ψ(αl),ψr=ψ(αr)
(2)如果
ψl<ψr\psi_l<\psi_r ψl<ψr
则置
b=αr,αr=αl,ψr=ψlb=\alpha_r,\quad\alpha_r=\alpha_l,\quad\psi_r=\psi_l b=αr,αr=αl,ψr=ψl
并计算
αl=a+(1−τ)(b−a),ψr=ψl\alpha_l=a+(1-\tau)(b-a),\quad\psi_r=\psi_l αl=a+(1−τ)(b−a),ψr=ψl
否则,置
a=αl,αl=αr,ψl=ψra=\alpha_l,\quad\alpha_l=\alpha_r,\quad\psi_l=\psi_r a=αl,αl=αr,ψl=ψr
并计算
αr=a+τ(b−a),ψr=ψ(αr)\alpha_r=a+\tau(b-a),\quad\psi_r=\psi(\alpha_r) αr=a+τ(b−a),ψr=ψ(αr)
(3)如果
∣b−a∣≤ϵ|b-a|\leq\epsilon ∣b−a∣≤ϵ
停止计算,极小点含于[a,b];否则转步骤(2).
(4)计算极小点
x=a+b2,ψ(x)x=\frac{a+b}{2} ,\quad\psi(x) x=2a+b,ψ(x)
2.代码实现:
黄金分割法不以.m文件实现
一维问题(1)的求解:
clc;
clear;
a=0;b=3; %初始区间
f = @(x)exp(x)-5*x; %创建题目要求的匿名函数,方便使用
eps = 0.001; %区间精度
r = 0.618; %黄金分割数
while((b-a)>=eps)x1 = a+(1-r)*(b-a);x2 = a+r*(b-a); %黄金分割主要步骤if f(x1)<f(x2) %两种情形的判断b = x2;x2 = x1;x1 = a+(1-r)*(b-a);elsea = x1;x1 = x2;x2 = a+r*(b-a);end
end
x = (a+b)/2; %得到满足条件的最优解
disp(['最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f(x))]); %使用disp函数和num2str()进行输出
一维问题(2)的求解:
clc;
clear;
a=0;b=3; %初始区间
f = @(x)x^3-2*x^2+1; %创建题目要求的匿名函数,方便使用
eps = 0.001; %区间精度
r = 0.618; %黄金分割数
while((b-a)>=eps)x1 = a+(1-r)*(b-a);x2 = a+r*(b-a); %黄金分割主要步骤if f(x1)<f(x2) %两种情形的判断b = x2;x2 = x1;x1 = a+(1-r)*(b-a);elsea = x1;x1 = x2;x2 = a+r*(b-a);end
end
x = (a+b)/2; %得到满足条件的最优解
disp(['最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f(x))]); %使用disp函数和num2str()进行输出
3.运行结果:
运行的结果为:
运行的结果为:
二、Fibonacci法
1.算法思想:
(1)给定初始区间[a,b]和最终区间长度.求计算函数值的次数,使置辨别常数,计算试探点
及相应的函数值
(2)置.
(3)如果,则置
若,则计算
否则计算
(4)如果,置
若,则计算
否则计算
(5)若,停止计算
极小点含于[a,b]内,否则转步骤(2).
(6)计算极小点
x=a+b2,ψ(x)x=\frac{a+b}{2} ,\quad\psi(x) x=2a+b,ψ(x)
2.代码实现:
Fibonacci法现以.m文件的形式实现
定义fibonacci.m文件
function [x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror)
Fn=(b-a)/ferror;
x = [];
x(1) = 1;
x(2) = 1;
i = 1;
while x(i)<Fnx(i+2) = x(i)+x(i+1);i = i+1;
endN = i;
al = x(N-2)/x(N)*(b-a)+a;
ar = x(N-1)/x(N)*(b-a)+a;for i = 1:N-3f1 = feval(f,al);f2 = feval(f,ar);
if f1>f2a = al;f1 = f2;al = ar;ar = a+x(N-i-1)/x(N-i)*(b-a);
elseb = ar;ar = al;f2 = f1;al = a+x(N-i-2)/x(N-i)*(b-a);
end
stepNum = i;
end
x_opt = (a+b)/2;
f_opt = feval(f,x_opt);
stepNum = stepNum + 1;
定义f1.m文件
clear all;clc;
f=@(x)exp(x)-5*x;
a=0;
b=3;
ferror=0.001;
[x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror);x_opt
f_opt
stepNum
定义f2.m文件
clear all;clc;
f=@(x) x^3-2*x^2+1;
a=0;
b=3;
ferror=0.001;
[x_opt,f_opt,stepNum]=Fibonacci(f,a,b,ferror);x_opt
f_opt
stepNum
3.运行结果:
运行f1.m文件后的结果为:
运行f2.m文件后的结果为:
黄金分割法与Fibonacci法相关推荐
- 【最优化】黄金分割法与Fibonacci法
(1)黄金分割法(0.618法) 基本思想: 它通过对试探点的函数值进行比较,使得包含极小点的区间不断缩短,当区间长度小到精度范围之内时,可以粗略地认为区间上各点的函数值均接近于极小值. 算 ...
- 【最优化】C++实现0.618法、Fibonacci法、二分法
参考课本:最优化方法 - 孙文瑜等 根据课本P110算法3.2.1(0.618法计算步骤)编写C++代码,例题为P137第4题(1)(2) 0.618法代码 #include <iostream ...
- Fibonacci法的matlab实现
推导过程看百度文库中的ppt Fibonacci法的基本步骤: 测试程序:try_FibonacciOpt.m clear all;clc %% the original conditions f=@ ...
- 黄金分割点c的坐标c语言,黄金分割法与进退法的C语言程序
<黄金分割法与进退法的C语言程序>由会员分享,可在线阅读,更多相关<黄金分割法与进退法的C语言程序(5页珍藏版)>请在人人文库网上搜索. 1.基本思想:对f(x)任选一个初始点 ...
- 参数寻优问题详细解析
参数寻优 参数寻优背景 参数寻优问题随处可见,举几个例子. 1. 小明假期结束回校,可以坐火车,可以坐汽车,可以坐飞机,还可以走着,小明从哪条路去学校更好呢? 2. 简单的数学,一元二次方程求根. ...
- matlab无约束最优化的一般算法流程图及代码(进退法,Fibonacci,黄金分割法,抛物线法)
本实验中函数用单独function计算 %函数[fx]=f(x) function fx=f(x) fx=x.^4-4*x.^3-6*x.^2-16*x+4; 一,进退法,Fibonacci,黄金分割 ...
- c语言精确线搜索抛物线法,一维迭代搜索(黄金分割法抛物线法).ppt
一维迭代搜索(黄金分割法抛物线法) 作业 P127页 3-15:3-17:3-19. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...
- 用等步长分割法(Equal Interval Search Method)求函数最大值的Python程序
一维搜索方法:一维搜索,又称一维优化,是指求解一维目标函数 f(X) 最优解的过程,分为试探法和插值法.一维搜索最优化是优化方法中最简单.最基本的方法. 常用的方法有:等步长分割法.黄金分割法(0.1 ...
- 用黄金分割法(Golden Section Search Method)求函数最大值的python程序
一维搜索方法:一维搜索,又称一维优化,是指求解一维目标函数 f(X) 最优解的过程,分为试探法和插值法.一维搜索最优化是优化方法中最简单.最基本的方法. 常用的方法有:等步长分割法.黄金分割法(0.1 ...
- 精确一维搜索——黄金分割法(0.618)
文章内容摘自UESTC最优化张老师的PPT 代码:https://github.com/LHesperus/optimization-algorithm/tree/master/unconstrain ...
最新文章
- UVA 307 Sticks
- MapReduce-Reduce端join操作-步骤分析
- jquery 获取id最大的元素_超全整理!JQuery中的选择器集合
- Angular Universal 官网翻译
- Character中的奇葩
- php+如何按文字分割文件夹,PHP实现的大文件切割与合并功能示例
- [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
- python实现组合问题_python3 最基本且简单的实现组合设计模式
- Java提高篇 —— Java关键字之static的四种用法
- Elasticsearch aggregations API
- [C++] map 迭代器 查找
- 为什么要学习 Spring Boot?
- getAttribute 与getParmeter 区别
- linux 运行级别,linux执行流程 /etc/rc.d/init.d目录理解
- ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memor
- MASM5.0下载安装与运行第一个HelloWorld
- Canvas API
- 硅钢片铁芯、坡莫合金、非晶及纳米晶软磁合金
- [Android 4.4.3] 泛泰A870 Mokee4.4.3 20140610 RC2.0 通过刷第三版 by syhost
- QQ空间认证之数据篇