中国矿业大学矿业学院
实验报告
课程名称 姓名: 学号: 成绩:
最优化方法
倪永波 01160252
班级: 日期: 教师:
工业工程一班 2024-12-24 李小林
一、在Matlab中,使用0.618法,求 在[1,2]上的极小点,取控制误差 。 过程程序:
function bo=s_(a,b) a=1;b=2;e=0.05; for i=1:10000
z=a+0.382*(b-a); y=a+0.618*(b-a); fz=z^2-3*z+5; fy=y^2-3*y+5; if fz>fy a=z; if b-a<=e y fy break; end else
b=y; if b-a<=e z fz
break; end end end
运行结果: Untitled y =1.5066 fy =2.7500
二、求出函数 的所有平稳点。问哪些是极小点?是否为全局极小点。并绘制出该函数的局部三维图形及等值线图,以显示这些极小点的位置。 解:(1)使用梯度等于零,求出驻点 程序代码:syms x1 x2;
fx=2*x1^2+x2^2-2*x1*x2+2*x1^3+x1^4; dif1=diff(fx,x1);dif2=diff(fx,x2); [x1,x2]=solve(dif1,dif2,'x1','x2'); x1=vpa(x1,4) x2=vpa(x2,4)
解得:x1?(0,?1,?0.5),x2?(0,?1,?0.5) 所以平稳点有(0,0),(?1,?1),(?0.5,?0.5)
TT(2)计算Hessian矩阵 syms x1 x2;
fx=2*x1^2+x2^2-2*x1*x2+2*x1^3+x1^4; dif1=diff(fx,x1);dif2=diff(fx,x2); dif3=diff(dif1,x1);dif4=diff(dif2,x1); dif5=diff(dif1,x2);dif6=diff(dif2,x2); h=[dif3,dif4;dif5,dif6]
得到:h =
[ 12*x1^2 + 12*x1 + 4, -2] [ -2, 2]
在三个驻点处,Hessian矩阵分别为
?4?2???22?,矩阵特征值:3?5,大于零,正定矩阵,极小值点。 ???4?2???22?,特征矩阵值:3?5,大于零,正定矩阵,极小值点。 ???1?2?3?17,特征矩阵值:,值不定,不定矩阵,不是极值点。 ??22?2??把三个驻点带入
因此(0,0),(?1,?1)为极小值点 (3)通过matlab绘图,查看图形特征
程序代码:[x1,x2]=meshgrid(-2:0.01:2);
fx=2*x1.^2+x2.^2-2*x1.*x2+2*x1.^3+x1.^4; surf(x1,x2,fx)
程序代码:[x1,x2]=meshgrid(-2:0.01:2); fx=2*x1.^2+x2.^2-2*x1.*x2+2*x1.^3+x1.^4;