一维搜索之黄金分割法(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。
计算黄金分割比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。