黄金分割法 matlab_写出黄金分割法算法步骤

黄金分割法 matlab_写出黄金分割法算法步骤黄金分割法及Matlab实现黄金分割法也称为0.618法,其基本思想是通过取试探点和进行函数值比较,使包含极小点的搜索区间不断缩短以逼近极小值点

黄金分割法

黄金分割法及Matlab实现

基本思想

黄金分割法也称为 0.618 法,其基本思想是通过取试探点和进行函数值比较,使包含极小点的搜索区间不断缩短以逼近极小值点。适用于确定区间上的任何单谷函数求极小值的问题

公式推导

设有定义在 [ a , b ] [a,b] [a,b]上的单谷函数 φ ( α ) = f ( x k + α d k ) \varphi \left( \alpha \right) =f\left( x_k+\alpha d_k \right) φ(α)=f(xk+αdk) [ a , b ] [a,b] [a,b]上取两个试探点 x 1 x_1 x1 x 2 x_2 x2,且 x 1 < x 2 x_1<x_2 x1<x2。计算 φ ( x 1 ) \varphi \left( x_1\right) φ(x1) φ ( x 2 ) \varphi \left( x_2\right) φ(x2),可能会出现以下两种情形:

  1. φ ( x 1 ) ⩽ φ ( x 2 ) \varphi \left( x_1\right) \leqslant \varphi \left( x_2\right) φ(x1)φ(x2),则令 a 1 = a a_1=a a1=a b 1 = x 2 b_1=x_2 b1=x2
  2. φ ( x 1 ) > φ ( x 2 ) \varphi \left( x_1\right) > \varphi \left( x_2\right) φ(x1)>φ(x2),则令 a 1 = x 1 a_1=x_1 a1=x1 b 1 = b b_1=b b1=b

我们要求试探点满足下列两个原则:

  • b − x 1 = x 2 − a b-x_1=x_2-a bx1=x2a (对称原则)
  • λ = 新 区 间 长 度 原 区 间 长 度 = \lambda =\frac{新区间长度}{原区间长度}= λ==定值(保持缩减比)

从而可得
{ x 1 = a + ( 1 − λ ) ( b − a ) x 2 = a + λ ( b − a ) \begin{cases} x_1=a+\left( 1-\lambda \right) \left( b-a \right)\\ x_2=a+\lambda \left( b-a \right)\\ \end{cases} {
x1=a+(1λ)(ba)x2=a+λ(ba)

考虑情形1,此时新的搜索区间为 [ a 1 , b 1 ] [a_1,b_1] [a1,b1],选取新的试探点 x 3 x_3 x3 x 4 x_4 x4,此时有:
x 4 = a 1 + λ ( b 1 − a 1 )        = a + λ ( x 2 − a 1 )   = a + λ 2 ( b − a ) x_4=a_1+\lambda \left( b_1-a_1 \right) \\\,\,\,\,\,\, =a+\lambda \left( x_2-a_1 \right) \\\, =a+\lambda ^2\left( b-a \right) x4=a1+λ(b1a1)=a+λ(x2a1)=a+λ2(ba)
若令 λ 2 = 1 − λ ( λ > 0 ) \lambda ^2=1-\lambda\left( \lambda>0 \right) λ2=1λ(λ>0),则有
x 4 = a + ( 1 − λ ) ( b − a ) = x 1 x_4=a+\left( 1-\lambda \right) \left( b-a \right)=x_1 x4=a+(1λ)(ba)=x1
此时新的试探点 x 4 x_4 x4就不需要重新计算,类似的,对于情形2也有类似的结果。解方程 λ 2 = 1 − λ \lambda ^2=1-\lambda λ2=1λ λ ≈ 0.618 \lambda \approx0.618 λ0.618

具体练习及Matlab实现

使用黄金分割法计算如下问题: m i n    f ( x ) = 2 x 2 − x − 1 min\,\,f\left( x \right) =2x^2-x-1 minf(x)=2x2x1初始区间取 [ − 1 , 1 ] [-1,1] [1,1],区间精度取 δ = 0.08 \delta=0.08 δ=0.08

clc;
clear;
a = -1;b = 1; %初始区间
f = @(x) 2 * x ^ 2 -  x - 1; %创建题目要求匿名函数,方便使用
eps = 0.08; %区间精度
while((b - a) >= eps)
    x1 = a + 0.382 * (b - a);
    x2 = a + 0.618 * (b - a); %黄金分割法主要步骤
    if f(x1) < f(x2) %两种情形的判断
        b = x2;
    else
        a = x1;
    end
end
x = (a + b) / 2; %得到满足条件的最优解
disp(['最优解: x = ',num2str(x)]);
disp(['此时: f(x) = ',num2str(f(x))]);%使用disp函数和num2str()进行输出

此程序也可改写成函数,此处不再赘述。

今天的文章黄金分割法 matlab_写出黄金分割法算法步骤分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/77876.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注