一、题目: 0. 618法寻最优解←
问题描述:←
求函数f(x)= 3x2- 2 tan x在区间[0, 1]上的极小值,其中容许误差ε= 10-4。《●实验的基本 要求<
1、输出最优解、函数的最优值、终止条件; k
2、画图显示其寻优过程。
一、题目: 0. 618法寻最优解←
问题描述:←
求函数f(x)= 3x2- 2 tan x在区间[0, 1]上的极小值,其中容许误差ε= 10-4。《●实验的基本 要求<
1、输出最优解、函数的最优值、终止条件; k
2、画图显示其寻优过程。
可以这么写
f = @(x)3*x.^2- 2*tan(x); %目标函数
ratio = 0.618;
left = 0;
right = 1;
epsil = right-left;
count = 0;
xp = linspace(0,1,101);
yp = f(xp);
plot(xp,yp,'b-'); hold on;
sol = [(left+right)/2,f((left+right)/2)];
fprintf('迭代次数\t误差\t\t\t\t最优解位置\t最优值\n')%打印输出(表头)
while (epsil>1e-4)
count = count + 1;
a = left + (1-ratio)*(right-left);
b = left + ratio*(right-left);
f1 = f(a);
f2 = f(b);
if(f1<f2)
right = b;
else
left = a;
end
epsil = right-left;
solution = (left+right)/2;
sol = [sol;solution, f(solution)]; %保存每次的最优解
fprintf('%d\t\t%E\t%f\t%f\n',count, epsil, solution, f(solution))%打印输出
end
for i = 1:1:size(sol,1)-1
plot(sol(i:i+1,1),sol(i:i+1,2),'r-o','markerfacecolor','r')
pause(0.1)
end
然后输出每一步
迭代次数 误差 最优解位置 最优值
1 6.180000E-01 0.309000 -0.352007
2 3.819240E-01 0.427038 -0.362997
3 2.360290E-01 0.354091 -0.363202
4 1.458659E-01 0.399172 -0.365620
5 9.014515E-02 0.371312 -0.365129
6 5.570970E-02 0.388529 -0.365808
7 3.442860E-02 0.399170 -0.365620
8 2.127687E-02 0.392594 -0.365791
9 1.314911E-02 0.388530 -0.365808
10 8.126148E-03 0.391042 -0.365805
11 5.021960E-03 0.389490 -0.365810
12 3.103571E-03 0.390449 -0.365808
13 1.918007E-03 0.389856 -0.365810
14 1.185328E-03 0.389490 -0.365810
15 7.325329E-04 0.389716 -0.365810
16 4.527053E-04 0.389576 -0.365810
17 2.797719E-04 0.389490 -0.365810
18 1.728990E-04 0.389543 -0.365810
19 1.068516E-04 0.389510 -0.365810
20 6.603429E-05 0.389490 -0.365810
可见最优解位置是x=0.389490,最优解是f=-0.365810,终止条件是k=count=20