黄金分割法与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ϕ(α)=α32α2+1

其中 ϵ = 0.001 其中\epsilon=0.001 其中ϵ=0.001


此问题中,需要先找出两个一维问题的初始区间,下面用进退法求出两函数的初始区间。

进退法求搜索区间

1.算法思想:

(1)给定初始点img,初始步长img>0,置img,计算img,并置img.

(2)令img,计算img,置img.

(3)若img,则转步骤(4);否则转步骤(5).

(4)令imgimg,转步骤(2).

(5)若img,则转步骤(6);否则,转步骤(7).

(6)置img转步骤(2).

(7)令img,停止计算.

这样得到含有极小点的区间img.

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<f3
	m2 = m3;  f2 = f3;  m3 = m;  f3 = f;  a = 2*a;  k = k+1;
	m = m3+a;  f = ft1(m);	k = k+1;
end

while k==1
	m2 = m;	 f2 = f;  a=-1*a;
	m = m3+a;	f = ft1(m);	 k = k+1;
	while m<m3
		m2 = 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].

求出初始搜索区间后,紧接着用黄金分割法Fib

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值