综上所述,黄金分割法的计算步骤如下:
1)给定初始区间[a,b]和收敛精度ε。
2)产生中间插入点并计算其函数值:
x1=a+0.382(b-a),f1=f(x1)
x2=a+0.618(b-a),f2=f(x2)
3)比较函数值f1和f2,确定区间的取舍:
若f1<f2,则新区间[a,b]=[a,x2],令b=x2,x2=x1,f2=f1,记N0=0;
若f1>f2,则新区间[a,b]=[x1,b],令a=x1,x1=x2,f1=f2,记N0=1,如图3-7所示。
图3-7 区间取舍
4)收敛判断:若区间的长度足够小,即满足|b-a|≤ε,则将区间中点作为一维极小点,即令,结束一维搜索;否则,转5)。
5)产生新的插入点:若N0=0,则取x1=a+0.382(b-a),f1=f(x1);若N0=1,则取x2=a+0.618(b-a),f2=f(x2)。转3)迸行新的区间缩小。
黄金分割法的迭代过程和程序框图如图3-8所示。
例3-1 用黄金分割法求函数f(x)=3x3-4x+2的极小点,给定x0=0,h=1,ε=0.2。
解:(1)确定初始区间
x1=x0=0,f1=f(x1)=2
x2=x0+h=0+1=1,f2=f(x2)=1
由于f1>f2应加大步长继续向前探测。令
x3=x0+2h=0+2=2,f3=f(x3)=18
由于f2<f3可知初始区间已经找到,即[a,b]=[0,2]
(2)用黄金分割法缩小区间
1)第一次缩小区间:
图3-8 黄金分割法的程序框图
x1=0+0.382(2-0)=0.764,f1=0.282
由于f1<f2,故新区间[a,b]=[a,x2]=[0,1.236](www.xing528.com)
因为b-a=1.236>0.2所以应继续缩小区间。
2)第二次缩小区间:
令
x2=x1=0.764,f2=f1=0.282
x1=0+0.382(1.236-0)=0.472,f1=0.317
由于f1>f2,故新区间为[a,b]=[x1,b]=[0.472,1.236]
3)第三次缩小区间:
令
x1=x2=0.764,f1=f2=0.282
x2=0.472+0.618×(1.236-0.472)=0.944,f2=0.747
由于f1<f2,故新区间为[a,b]=[a,x2]=[0.472,0.944]
4)第四次缩小区间:
令
x2=x1=0.764,f2=f1=0.282
x1=0.472+0.382(0.944-0.472)=0.652,f1=0.223
由于f1<f2,故新区间为[a,b]=[a,x2]=[0.472,0.764]
因为b-a=0.764-0.472=0.292>0.2,所以应继续缩小区间。
5)第五次缩小区间
令
x2=x1=0.652,f2=f1=0.223
x1=0.472+0.382(0.764-0.472)=0.584,f1=0.262
由于f1>f2,故新区间为[a,b]=[x1,b]=[0.584,0.764]
因为b-a=0.764-0.584=0.18<0.2
所以得到极小点和极小值分别为
x*=0.5×(0.584+0.764)=0.674,f*=0.222
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。