您的位置:首页 > 编程语言 > C#

一维搜索之黄金分割法(C#实现)

2015-09-14 18:46 471 查看
在非线性最优化中,一元最优化最简单且是多元最优化的基础,一元最优化即对函数f(x)在区间[a,b]上寻找极小值或极大值(令g(x)=-f(x))。一元最优化的方法之一即一维搜索之黄金分割法,步骤如下:

计算黄金分割比g=5√−12g=\frac{\sqrt{5}-1}{2}.

x1=a+(1−g)(b−a)x_{1}=a+(1-g)(b-a) \

x2=a+g(b−a)x_{2}=a+g(b-a)

计算f(x1),f(x2)f(x_{1}),f(x_{2})

当计算未达到最大迭代次数时,重复5~7

如果f(x1)<f(x2)f(x_{1}),则

b=x2b =x_{2};

x2=x1x_{2}= x_{1};

x1=a+(1−g)∗(b−a)x_{1} = a + (1 - g) * (b - a);

f(x2)=f(x1)f(x_{2})=f(x_{1});

如果f(x1)>f(x2)f(x_{1})>f(x_{2}),则

a=x1a =x_{1};

x1=x2x_{1}= x_{2};

x2=a+g∗(b−a)x_{2} = a +g * (b - a);

f(x1)=f(x2)f(x_{1})=f(x_{2});

判断精度是否满足,若满足则退出循环

计算结果取a+b2\frac{a+b}{2}

该代码来自《C#科学计算讲义》这本书的源码,代码地址http://download.csdn.net/detail/researchstep/9106041
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: