实验一:一维寻优法(0.618 法)程序设计

实验一:一维寻优法(0.618 法)程序设计

一、实验目的

通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。

 

二、实验内容

1)请用0.618 法求解优化问题: min f (x) = x^2 − sin(x) 在区间[0,1]上的极小点和极小值;

2)根据0.618 法算法步骤编写Matlab 的程序实现0.618 搜索法;

3)要求输出内容包括:极小点、极小值、每次迭代的abalak 的值;

4)按照模板撰写实验报告,要求规范整洁。

  

 

三、算法步骤、代码、及结果

1. 算法步骤

步骤1:置初始区间[a,b],给定待优化函数,置精度要求eps,计算左右试探点x1=a+0.382*(b-a),x2=a+0.618*(b-a)及相应的函数值f(x1), f(x2)

步骤2:如果a-b<eps, 输出最优解a+b/2, 终止, 否则进入步骤3

步骤3:置k=k+1,计算x1=a+0.382*(b-a),x2=a+0.618*(b-a)

步骤4:如果 f(x1)>f(x2) a=x1,b=b 否则,置a=a,b=x2; 转步骤2

 

2. 代码

golds.m:

function[] = goldmin()

% 黄金分割法求解函数最小值

% 输入

% f 待优化函数

% a,b 区间

% eps 精度

% 输出

% 每次迭代的 k次数 abal ak 的值

% x 最优解

%%

clear;

format short

f=input('请输入函数表达式:f = ');

a = input('请输入区间左端点a的值:');

b = input('请输入区间右端点b的值:');

eps= input('请输入运算精度:');   

k=0;

x1=a+0.382*(b-a);

x2=a+0.618*(b-a);

fprintf(' k          [a,b]          x1        x2        f(x1)       f(x2)\n ');

fprintf('%d      [%.3f,%.3f]    %.3f     %.3f     %.4f      %.4f\n', k,a,b,x1,x2,f(x1),f(x2));

while abs(a-b)>eps

    k=k+1;

    x1=a+0.382*(b-a);

    x2=a+0.618*(b-a);

    if  f(x1)>f(x2)

        a=x1;

        b=b;

    elseif  f(x1)<=f(x2)

        a=a;

        b=x2;

    end

   fprintf(' %d      [%.3f,%.3f]    %.3f     %.3f     %.4f      %.4f\n', k,a,b,x1,x2,f(x1),f(x2));

end

fprintf('经过%d次迭代,可取%.3f作为近似最优解',k,(a+b)/2);

 

 

3. 结果

golds();

请输入函数表达式:f = @(x) x^2-sin(x);

请输入区间左端点a的值:0

请输入区间右端点b的值:1

请输入运算精度:0.001

 k          [a,b]          x1        x2        f(x1)       f(x2)

 0      [0.000,1.000]    0.382     0.618     -0.2269      -0.1975

 1      [0.000,0.618]    0.382     0.618     -0.2269      -0.1975

 2      [0.236,0.618]    0.236     0.382     -0.1782      -0.2268

 3      [0.382,0.618]    0.382     0.472     -0.2268      -0.2319

 4      [0.382,0.528]    0.472     0.528     -0.2319      -0.2251

 5      [0.382,0.472]    0.438     0.472     -0.2323      -0.2319

 6      [0.416,0.472]    0.416     0.438     -0.2311      -0.2323

 7      [0.438,0.472]    0.438     0.451     -0.2323      -0.2325

 8      [0.438,0.459]    0.451     0.459     -0.2325      -0.2324

 9      [0.446,0.459]    0.446     0.451     -0.2324      -0.2325

 10      [0.446,0.454]    0.451     0.454     -0.2325      -0.2324

 11      [0.449,0.454]    0.449     0.451     -0.2325      -0.2325

 12      [0.449,0.452]    0.451     0.452     -0.2325      -0.2325

 13      [0.449,0.451]    0.450     0.451     -0.2325      -0.2325

 14      [0.450,0.451]    0.450     0.450     -0.2325      -0.2325

 15      [0.450,0.450]    0.450     0.450     -0.2325      -0.2325

经过15次迭代,可取0.450作为近似最优解

posted @ 2023-05-18 15:17  STDU_DREAM  阅读(515)  评论(0编辑  收藏  举报