黄金分割法及程序求解
第 5 题:对函数 f(x)=(x^2-1)^2+(x-1)^2+3,当给定搜索区-10≤
x≤10 使用黄金分割法求极小点α*。
解:显然,此时的 a=-10,b=10。首先插入两个点 a1 和 a2,由黄金分割点法得:
a1=b-γ (b-a)=10-0.618× (10-(-10))=-2.36
a2=a+γ (b-a)=-10+0.618 ×20=2.36
再计算相应插图点的函数值,得
y1=f(a1)=35.171
y2=f(a2)=25.731
因为 y1>y2,所以,消去区间〔-10,-2.36〕,则新的搜索区间〔a,b〕为〔-2.36,
10〕。
第一次迭代:此时插入点
a1=b-γ(b-a)=10-0.618×[10-(-2.36)]=2.362
a2=a+γ(b-a)=-2.36+0.618×[10-(-2.36)]=5.279
相应插入点的函数值为: y1=25.823
y2=743.191
由于 y2>y1,同理,得新的搜索区间为〔-2.36,5.279〕.如此继续迭代下去 ,
列出前六次迭代的结果:
迭代序号 a
y1
y2
a1
a2
b
比
较
0
1
2
3
4
5
6
-10
-2.36
2.36
-2.36
2.362
5.279
10
10
35.171 > 25.731
25.832 < 743.191
-2.36
-2.36
0.558
-0.557
2.361
0.558
5.279
2.361
3.669 < 25.777
5.900 > 3.669
-0.557
0.558
1.246
2.361
3.669 > 3.366
0.558
1.247
1.443
2.361
3.369 < 4.368
0.558
0.896
1.105
1.443
假定,经过前六次迭代后已满足收敛精度要求,则得
α*=(a+b)/2=(0.558+1.443)/2=1.0005
相应的函数极值 :
f(α*)=3.000001
MATLB
MATLB程序求解::::
MATLB
运用MATLB
建立mmmm文件:
function [x,minf] = minHJ(f,a,b,k)
format long;
if nargin == 3
eps = 0.000001;
end
a1 = b- 0.618*(b-a);
a2 = a + 0.618*(b-a);
k=1;
tol = b-a;
while tol>eps && k<100000
fa1 = subs(f , findsym(f),a1);
fa2= subs(f , findsym(f), a2);
if fa1 > fa2
a = a1;
a1 = a2;
a2 = a + 0.618*(b - a);
b = a2;
a2 = a1;
a1 = b- 0.618*(b-a);
else
end
k = k+1;
tol = abs(b - a);
end
if k == 100000
disp('找不到最小值');
x = NaN;
minf = NaN;
return;
end
k
x = (a+b)/2
minf = subs(f, findsym(f),x)
format short
函数文件:
syms x;
f=(x^2-1)^2+(x-1)^2+3;
[x,minf]=minHJ(f,-10,10);
运行结果::::
kkkk ====
36363636
36363636
kkkk ====
xxxx ====
1.000004289112507
1.000004289112507
1.000004289112507
1.000004289112507
minfminfminfminf ====
3.000000000091983
3.000000000091983
3.000000000091983
3.000000000091983