清华大学数学实验报告6.docx

上传人:b****8 文档编号:10111194 上传时间:2023-02-08 格式:DOCX 页数:12 大小:149.89KB
下载 相关 举报
清华大学数学实验报告6.docx_第1页
第1页 / 共12页
清华大学数学实验报告6.docx_第2页
第2页 / 共12页
清华大学数学实验报告6.docx_第3页
第3页 / 共12页
清华大学数学实验报告6.docx_第4页
第4页 / 共12页
清华大学数学实验报告6.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

清华大学数学实验报告6.docx

《清华大学数学实验报告6.docx》由会员分享,可在线阅读,更多相关《清华大学数学实验报告6.docx(12页珍藏版)》请在冰豆网上搜索。

清华大学数学实验报告6.docx

清华大学数学实验报告6

 

数学实验报告6

无约束优化

电机工程与应用电子技术系

苗键强

2011010645

 

 

 

 

一、实验目的

1.掌握用MATLAB优化工具箱和LINGO解线性规划的方法;;

2.练习建立实际问题的线性规划模型。

二、实验内容

题目1

【问题描述】

取不同的初值计算下列非线性规划,尽可能求出所有局部极小点,进而找出全局极小点,并对不同算法(搜索方向、搜索步长、数值梯度与分析梯度等)的结果进行分析、比较。

min

【分析与解】

Step1:

初步分析

初步观察函数表达式可知,由于该式为二次项乘积的形式,所以函数值始终大于等于0,当

时,函数值为0,而当

均趋于无穷大时,函数值也趋于无穷大,因而函数的所有局部极小点处对应的自变量均为有限值。

为分析函数存在的所有局部极小点,对于函数的二位图像进行初步分析,在Matlab中编程如下:

clear

clc

[x1,x2]=meshgrid(-20:

0.1:

20,-20:

0.1:

20)

f=((x1.*x2).^2).*((1-x1).^2).*((1-x1-x2.*((1-x1).^5)).^2);

mesh(x1,x2,f)

pause;

contour(x1,x2,f,100)

运行以上代码,得到如下图像:

三维网格图

等高线图

通过分析以上图像可以发现,在自变量取值变化范围内,函数值的最大值已经达到

的数量级,因此自变量取值范围已经足够大。

Step2:

确定自变量范围

为进一步分析所有局部极小点处对应的自变量的具体值,缩小自变量变化范围,在Matlab中编程如下:

clear

clc

[x1,x2]=meshgrid(-0.1:

0.01:

1.1,-0.3:

0.01:

0.3)

f=((x1.*x2).^2).*((1-x1).^2).*((1-x1-x2.*((1-x1).^5)).^2);

mesh(x1,x2,f)

pause;

contour(x1,x2,f,100)

运行以上代码,得到如下图像:

三维网格图

等高线图

由等高线可知,函数局部极小值位于直线

附近。

Step3:

对不同算法的结果进行分析和比较

Action1:

数值方法:

编写函数文件,在Matlab中编程如下:

functionf=jixiao(x)

f=((x

(1).*x

(2)).^2).*((1-x

(1)).^2).*((1-x

(1)-x

(2).*((1-

x

(1)).^5)).^2);

end

对不同算法的结果进行分析和比较,取初始点(0.5,0.5):

[1]BFGS,混合二三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

[x1,v1,ef1,out1]=fminunc('jixiao',x0,opt1)

运行以上代码,得到以下结果:

x1=

-0.0000  0.5033

v1=

5.0074e-13

ef1=

1

out1=

iterations:

5

funcCount:

18

stepsize:

1

firstorderopt:

3.5473e-07

algorithm:

[1x38char]

message:

[1x436char]

[2]BFGS,三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

opt2=optimset(opt1,'LineSearchType','cubicpoly');

[x2,v2,ef2,out2]=fminunc('jixiao',x0,opt2)

运行以上代码,得到以下结果:

x4=

-0.0000  0.5033

v4=

5.0074e-13

ef4=

1

out4=

iterations:

5

funcCount:

18

stepsize:

1

firstorderopt:

3.5473e-07

algorithm:

[1x38char]

message:

[1x436char]

[3]DFP,混合二三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

fopt=optimset(opt1,'HessUpdate','dfp');

[x3,v3,ef3,out3]=fminunc('jixiao',x0,fopt)

运行以上代码,得到以下结果:

x2=

-0.0000  0.5030

v2=

4.6614e-13

ef2=

1

out2=

iterations:

5

funcCount:

18

stepsize:

1

firstorderopt:

3.4229e-07

algorithm:

[1x38char]

message:

[1x436char]

[4]DFP,三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

opt2=optimset(opt1,'LineSearchType','cubicpoly');

fopt=optimset(opt2,'HessUpdate','dfp');

[x4,v4,ef4,out4]=fminunc('jixiao',x0,fopt)

运行以上代码,得到以下结果:

x5=

-0.0000  0.5030

v5=

4.6614e-13

ef5=

1

out5=

iterations:

5

funcCount:

18

stepsize:

1

firstorderopt:

3.4229e-07

algorithm:

[1x38char]

message:

[1x436char]

[5]STEEPDESC,混合二三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

fopt=optimset(opt1,'HessUpdate','steepdesc');

[x5,v5,ef5,out5]=fminunc('jixiao',x0,fopt)

运行以上代码,得到以下结果:

x3=

0.0000  0.4957

v3=

3.9415e-12

ef3=

1

out3=

iterations:

68

funcCount:

207

stepsize:

1

firstorderopt:

9.9355e-07

algorithm:

[1x38char]

message:

[1x436char]

[6]STEEPDESC,三次插值:

clear

clc

x0=[0.5,0.5];

opt1=optimset('LargeScale','off','MaxFunEvals',1000);

opt2=optimset(opt1,'LineSearchType','cubicpoly');

fopt=optimset(opt2,'HessUpdate','steepdesc');

[x6,v6,ef6,out6]=fminunc('jixiao',x0,fopt)

运行以上代码,得到以下结果:

x3=

0.0000  0.4957

v3=

3.9415e-12

ef3=

1

out3=

iterations:

68

funcCount:

207

stepsize:

1

firstorderopt:

9.9355e-07

algorithm:

[1x38char]

message:

[1x436char]

将各种算法的计算结果列入下表:

函数f不同算法的计算结果

情况

搜索方向

步长搜索

最优解x1

最优解x2

最优值

目标函数调用次数

1

BFGS

混合二三

次插值

0.0000

0.5033

5.0074*10-13

18

2

DFP

0.0000

0.5030

4.6614*10-13

18

3

STEEPDESC

0.0000

0.4957

3.9415*10-12

207

4

BFGS

三次插值

0.0000

0.5033

5.0074*10-13

18

5

DFP

0.0000

0.5030

4.6614*10-13

18

6

STEEPDESC

0.0000

0.4957

3.9415*10-12

207

 

 

 

 

 

 

 

【结论】分析上表可知,对于不同的算法,通过有限次的循环最终都可以得到最优解x1=0。

当选择不同的搜索方向和步长时,要达到相同的精度要求,各种算法对于目标函数的调用次数差异较大。

BFGS和DFP对于目标函数的调用次数比STEEPDESC所用的少。

而对于同一种搜索方向,在不同步长搜索的情形下,对于目标函数的调用次数大致相等。

Action2:

分析方法:

对于函数

进行梯度分析:

通过分析方法计算梯度,对于函数进行修改,在Matlab中编程如下:

function[f,df]=jixiao(x)

f=((x

(1).*x

(2)).^2).*((1-x

(1)).^2).*((1-x

(1)-x

(2).*    

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1