中科大《优化设计》课程大作业之无约束优化实验报告.docx

上传人:b****8 文档编号:9010803 上传时间:2023-05-16 格式:DOCX 页数:27 大小:23.81KB
下载 相关 举报
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第1页
第1页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第2页
第2页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第3页
第3页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第4页
第4页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第5页
第5页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第6页
第6页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第7页
第7页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第8页
第8页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第9页
第9页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第10页
第10页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第11页
第11页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第12页
第12页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第13页
第13页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第14页
第14页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第15页
第15页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第16页
第16页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第17页
第17页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第18页
第18页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第19页
第19页 / 共27页
中科大《优化设计》课程大作业之无约束优化实验报告.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

中科大《优化设计》课程大作业之无约束优化实验报告.docx

《中科大《优化设计》课程大作业之无约束优化实验报告.docx》由会员分享,可在线阅读,更多相关《中科大《优化设计》课程大作业之无约束优化实验报告.docx(27页珍藏版)》请在冰点文库上搜索。

中科大《优化设计》课程大作业之无约束优化实验报告.docx

中科大《优化设计》课程大作业之无约束优化实验报告

无约束优化设计实验报告

力学系

型号:

联想y470

CPU:

i5-2450M

内存:

2GB

系统:

win7-64位

 

如下是三个目标函数(包括自定义函数)以及初值和精度选取:

1.minf(x)=x1^2+2*x2^2-2*x1*x2-4*x1

初值x0=[1,1]’;精度为:

0.1

2.minf(x,y)=x^4-2*x*x*y-2*x*y+x^2+2*y*y+4.5*x-4*y+4

初值为(-2.5,4.25);精度为0.01

3.minf(x)=x1^2+x2^2+x3^2

初值为(3,2,1);精度为0.01

 

如下是运算结果:

目标函数

无约束方法

一维搜索

所需时间

迭代次数

极值点

极值

1

最速下降法

黄金分割法

5.81

8

(3.9,1.9)

-8.0

牛顿法

2.61

8

(3.9,1.9)

-8.0

不精确法

2.96

8

(3.9,1.9)

-8.0

阻尼牛顿法

黄金分割法

1.66

1

(4.0,2.0)

-8.0

牛顿法

1.02

1

(4.0,2.0)

-8.0

不精确法

0.76

1

(4.0,2.0)

-8.0

共轭梯度法

黄金分割法

14.65

24

(3.9,2.0)

-8.0

牛顿法

7.91

24

(4.0,2.0)

-8.0

不精确法

11.28

27

(3.9,2.0)

-8.0

鲍维尔法

黄金分割法

9.53

2

(4.0,2.0)

-8.0

牛顿法

2.86

2

(4.0,2.0)

-8.0

不精确法

--

--

--

--

变尺度法

黄金分割法

8.04

2

(4.0,2.0)

-8.0

牛顿法

1.24

2

(4.0,2.0)

-8.0

不精确法

1.35

3

(4.0,2.0)

-8.0

单形替换法

0.02

9

(4.1,2.2)

-8.0

 

目标函数

无约束方法

一维搜索

所需时间

迭代次数

极值点

极值

2

最速下降法

黄金分割法

20.76

21

(1.90,3.73)

0.99

牛顿法

3.23

6

(1.93,3.82)

0.99

不精确法

10.49

27

(1.94,3.84)

0.99

阻尼牛顿法

黄金分割法

3.50

3

(-1.05,1.03)

-0.51

牛顿法

1.61

3

(-1.05,1.03)

-0.51

不精确法

1.58

4

(-1.05,1.03)

-0.51

共轭梯度法

黄金分割法

25.06

30

(-1.05,1.03)

-0.51

牛顿法

24.40

35

(-1.05,1.03)

-0.51

不精确法

19.80

33

(1.94,3.86)

0.99

鲍维尔法

黄金分割法

11.49

3

(-1.05,1.03)

-0.51

牛顿法

6.17

3

(-1.05,1.03)

-0.51

不精确法

4.75

1

(-1.50,4.25)

17.31

变尺度法

黄金分割法

3.94

3

(1.94,3.85)

0.99

牛顿法

2.39

3

(1.94,3.85)

0.99

不精确法

2.46

6

(1.94,3.84)

0.99

单形替换法

0.01

16

(1.92,3.81)

0.99

目标函数

无约束方法

一维搜索

所需时间

迭代次数

极值点

极值

3

最速下降法

黄金分割法

2.70

2

(0,0,0)

0

牛顿法

0.76

1

(0,0,0)

0

不精确法

0.78

1

(0,0,0)

0

阻尼牛顿法

黄金分割法

1.61

1

(0,0,0)

0

牛顿法

0.66

1

(0,0,0)

0

不精确法

0.65

1

(0,0,0)

0

共轭梯度法

黄金分割法

3.15

3

(0,0,0)

0

牛顿法

0.40

0

(0,0,0)

0

不精确法

0.44

0

(0,0,0)

0

鲍维尔法

黄金分割法

7.17

1

(0,0,0)

0

牛顿法

1.99

1

(0,0,0)

0

不精确法

4.08

0

(3.00,2.00,1.00)

14.00

变尺度法

黄金分割法

2.69

2

(0,0,0)

0

牛顿法

0.67

1

(0,0,0)

0

不精确法

0.77

1

(0,0,0)

0

单形替换法

0.01

24

(-0.01,0.03,-0.08)

0.01

 

总结及比较:

根据上面三个函数的表格可以看出:

首先,从迭代时间来看,三种一维搜索方法中黄金分割法所用时间最久,牛顿法和不精确法所用时间较少,这两种方法相比较而言牛顿法所用时间更少一些。

而六种无约束方法中,由于单形替代法不需要使用一维搜索方法,故迭代时间最少,紧接着在使用一维搜索的五种方法中以阻尼牛顿法迭代时间相对较少,共轭梯度法迭代时间最久;然后,从迭代次数来看,共轭梯度法往往需要较多的迭代次数,从而所需时间也最久;接着,从计算结果的精度来看,阻尼牛顿法的结果精度最高,而单形替换法的精度最低;最后,从编程来看,在编好一维搜索方法的情况下,最速下降法和阻尼牛顿法编程简单容易,而共轭梯度法、变尺度法和单形替代法需要两重循环实现,鲍威尔法和单形替换法则需要编程者对矩阵的操作能力有较高的要求,故编程较难。

同时,从上面的结果也可以发现,鲍威尔法在使用不精确的一维搜索方法时,对函数1无法收敛,对函数2、3收敛到错误的结果,所以鲍威尔法是依赖于精确的一维搜索过程的,而其他几个则不依赖于精确一维搜索过程。

精确的一维搜索方法通常需要花费很大的工作量,特别是当迭代点远离问题的解时,精确的求解一个一维子问题通常不是十分有效率的。

因此,只要保证目标函数值在每一步都有满意的下降,使用不是非常精确的一维搜索,就可以大大节省工作量。

在分析函数2的计算结果时,可以发现存在两个收敛结果,当然这两个结果都是极值,因为函数2是二元四次函数,存在多个极值。

故为了验证正确性,自己曾将初始点(-2.5,4.25)调成(2.5,4.25),分别代入程序中计算,计算结果都收敛于极值为0.99的这个点上。

所以,在存在多个极值点的情况下结果是和初始点的选取有关。

对于单形替换法,这种方法不需要一维搜索最佳步长,故没有一维搜索方法反复地计算最佳步长的计算时间,程序运行效率快。

但它的收敛条件不好选择,通过查找文献资料总结出以下三个收敛条件:

1.利用最坏点函数值与最好点函数值之差判别;2.利用相邻两次函数值差值的绝对值判别;3.利用各点的函数值与最好点函数值之差的均方根判别。

为了保证程序的执行可靠性,这三种常用的方法中自己选择了判别3,即:

综上所述,阻尼牛顿法是无约束方法中最有效的方法。

不仅编程简单,而且迭代次数较少,运行时间较短,结果的精度也较高。

在程序的运行方面,分别设置了可变的函数选择、无约束方法选择、一维搜索方法选择、起始点、精度这五个输入,故可以在命令窗口运行主程序main,再根据提示要求分别输入这五个参数的所需值,就可以得到运行结果。

 

程序如下:

1、主函数

clear;

globalk;

k=0;

disp('1.f(x)=x1^2+2*x2^2-2*x1*x2-4*x1');

disp('2.f(x,y)=x^4-2*x*x*y-2*x*y+x^2+2*y*y+4.5*x-4*y+4');

disp('3.f(x)=x1^2+x2^2+x3^2');

while1

n0=input('请输入上面所想选择函数的编号(1、2、3):

');

ifn0==1||n0==2||n0==3

break;

end

disp('此次输入无效.');

end

disp('');

disp('1.最速下降法');

disp('2.阻尼牛顿法');

disp('3.共轭梯度法');

disp('4.鲍威尔法');

disp('5.变尺度法');

disp('6.单纯形法');

while1

m0=input('请输入上面所想选择无约束方法的编号(1、2、3、4、5、6):

');

ifm0==1||m0==2||m0==3||m0==4||m0==5||m0==6

break;

end

disp('此次输入无效.');

end

disp('');

disp('1.黄金分割法');

disp('2.牛顿法');

disp('3.不精确一维搜索法');

while1

m1=input('请输入上面所想选择一维搜索方法的编号(1、2、3):

');

ifm1==1||m1==2||m1==3

break;

end

disp('此次输入无效.');

end

disp('');

s=input('请输入用空格隔开的初始值坐标向量(如:

1.12.0):

','s');

x=str2num(s);

x=x';

disp('');

while1

e=input('请输入精度(建议0.1或0.01):

');

ife>0

break;

end

disp('此次输入无效.');

end

disp('');

disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');

[xx,yy]=fmins(m0,m1,n0,x,e);

fprintf('迭代次数为:

%8.0f\n',k);

disp('所求极值点的坐标向量为:

');

fprintf('%16.5f\n',xx);

fprintf('所求函数的极值为:

%16.5f\n',yy);

2、外部多维的调用函数

function[xx,yy]=fmins(m0,m1,n0,x,e)

%UNTITLED此处显示有关此函数的摘要

%此处显示详细说明

ifm0==1

tic;[xx,yy]=zuisu(m1,n0,x,e);toc;

elseifm0==2

tic;[xx,yy]=zuni(m1,n0,x,e);toc;

elseifm0==3

tic;[xx,yy]=gonge(m1,n0,x,e);toc;

elseifm0==4

tic;[xx,yy]=powell(m1,n0,x,e);toc;

elseifm0==5

tic;[xx,yy]=bianchi(m1,n0,x,e);toc;

elseifm0==6

tic;[xx,yy]=danxing(n0,x,e);toc;

end

end

3、最速法

function[xx,yy]=zuisu(m1,n0,x,e)

%UNTITLED2此处显示有关此函数的摘要

%此处显示详细说明

globalk;

[g,ss]=gra(n0);

while1

d=-double(subs(g,ss,x));

a=fmin(m1,n0,x,d,e);

x1=x+a*d;

ifnorm(x1-x)

break;

end

x=x1;

k=k+1;

end

xx=x1;

yy=f0(n0,xx);

end

4、阻尼法

function[xx,yy]=zuni(m1,n0,x,e)

%UNTITLED此处显示有关此函数的摘要

%此处显示详细说明

globalk;

[g,ss]=gra(n0);

h=jacobian(g',ss);

while1

d=-double(subs(h,ss,x)^(-1)*subs(g,ss,x));

a=fmin(m1,n0,x,d,e);

x1=x+a*d;

ifnorm(x1-x)

break;

end

x=x1;

k=k+1;

end

xx=x1;

yy=f0(n0,xx);

end

5、共轭梯度法

function[xx,yy]=gonge(m1,n0,x,e)

%UNTITLED2此处显示有关此函数的摘要

%此处显示详细说明

globalk;

ifn0==1

n=2;

elseifn0==2

n=4;

elseifn0==3

n=2;

end

[g,ss]=gra(n0);

while1

kk=0;

d=-double(subs(g,ss,x));

while1

a=fmin(m1,n0,x,d,e);

x1=x+a*d;

gx=double(subs(g,ss,x));

gx1=double(subs(g,ss,x1));

ifnorm(gx1)

break;

elseifkk==n

break;

end

beta=norm(gx1)^2/norm(gx)^2;

d=-gx+beta*d;

x=x1;

k=k+1;

kk=kk+1;

end

ifnorm(gx1)

break;

end

x=x1;

k=k+1;

end

xx=x1;

yy=f0(n0,xx);

end

6、鲍威尔法

function[xx,yy]=powell(m1,n0,x,e)

%UNTITLED3此处显示有关此函数的摘要

%此处显示详细说明

globalk;

ifn0==1

n=2;

elseifn0==2

n=2;

elseifn0==3

n=3;

end

d=zeros(n,n+1);

xk=zeros(n,n+1);

deta=zeros(n,1);

forj=1:

n

d(j,j)=1;

end

while1

xt=x;

fori=1:

n

a=fmin(m1,n0,xt,d(:

i),e);

xk(:

i)=xt+a*d(:

i);

deta(i)=f0(n0,xt)-f0(n0,xk(:

i));

xt=xk(:

i);

end

xt=x;

xk(:

n+1)=2*xk(:

n)-x;

ff0=f0(n0,x);

ff2=f0(n0,xk(:

n));

ff3=f0(n0,xk(:

n+1));

md=max(deta);

m=find(deta==md);

if(ff3

d(:

n+1)=xk(:

n)-xt;

a=fmin(m1,n0,xk(:

n),d(:

n+1),e);

x=xk(:

n)+a*d(:

n+1);

fori=m:

n

d(:

i)=d(:

i+1);

end

else

ifff2

x=xk(:

n);

else

x=xk(:

n+1);

end

end

ifnorm(x-xt)

break;

end

k=k+1;

end

xx=x;

yy=f0(n0,xx);

end

7、变尺度法

function[xx,yy]=bianchi(m1,n0,x,e)

%UNTITLED此处显示有关此函数的摘要

%此处显示详细说明

globalk;

ifn0==1

n=2;

elseifn0==2

n=2;

elseifn0==3

n=3;

end

[g,ss]=gra(n0);

while1

gx=double(subs(g,ss,x));

h=eye(n);

kk=0;

while1

d=-h*gx;

a=fmin(m1,n0,x,d,e);

xk=x+a*d;

ifnorm(xk-x)

break;

end

ifkk==n

break;

end

gxk=double(subs(g,ss,xk));

yk=gxk-gx;

sk=xk-x;

h=h+(sk*sk')/(sk'*yk)-((h*yk)*yk'*h)/(yk'*h*yk);

x=xk;

gx=gxk;

kk=kk+1;

k=k+1;

end

ifnorm(xk-x)

break;

end

x=xk;

k=k+1;

end

xx=xk;

yy=f0(n0,xx);

end

8、单形替换法

function[xx,yy]=danxing(n0,x,e)

%UNTITLED此处显示有关此函数的摘要

%此处显示详细说明

globalk;

ifn0==1

n=2;

elseifn0==2

n=2;

elseifn0==3

n=3;

end

f=zeros(n+5,1);

xk=zeros(n,n+5);

h=2*eye(n);

xk(:

1)=x;

fori=1:

n

xk(:

i+1)=x+h(:

i);

end

while1

fori=1:

n+1

f(i)=f0(n0,xk(:

i));

end

while1

f(n+2)=nan;

f(n+3)=nan;

f(n+4)=nan;

f(n+5)=nan;

fl=min(f);

xll=find(f==fl);

xl=xll

(1);

fh=max(f);

xhh=find(f==fh);

xh=xhh

(1);

fff=f;

fff(xh)=[];

fg=max(fff);

fz=0;

fori=1:

n+1

fz=fz+(f(i)-f(xl))^2;

end

fz=sqrt(fz/n);

iffz

break;

end

xkk=xk(:

1);

fori=1:

n

xkk=xkk+xk(:

i+1);

end

xk(:

n+2)=(xkk-xk(:

xh))/n;

xk(:

n+3)=2*xk(:

n+2)-xk(:

xh);

f(n+3)=f0(n0,xk(:

n+3));

iff(n+3)

xk(:

n+4)=xk(:

n+2)+2*(xk(:

n+3)-xk(:

n+2));

f(n+4)=f0(n0,xk(:

n+4));

iff(n+4)

xk(:

xh)=xk(:

n+4);

f(xh)=f(n+4);

else

xk(:

xh)=xk(:

n+3);

f(xh)=f(n+3);

end

else

iff(n+3)

xk(:

xh)=xk(:

n+3);

f(xh)=f(n+3);

else

iff(n+3)>=fh

xk(:

n+3)=xk(:

xh);

end

xk(:

n+5)=xk(:

n+2)+0.5*(xk(:

n+3)-xk(:

n+2));

f(n+5)=f0(n0,xk(:

n+5));

iff(n+5)

xk(:

xh)=xk(:

n+5);

f(xh)=f(n+5);

else

fori=1:

n+1

xk(:

i)=(xk(:

i)+xk(:

xl))/2;

end

break;

end

end

end

k=k+1;

end

iffz

break;

end

k=k+1;

end

xx=xk(:

xl);

yy=f0(n0,xx);

end

9、内部循环一维调用函数

functionxx=fmin(m1,n0,x,d,e)

x0=0;%初始步长默认为0

[amin,amax]=range1(n0,x,d,x0);

ifm1==1

xx=gold(n0,x,d,amin,amax,e);

elseifm1==2

xx=newton(n0,x,d,amax,e);

elseifm1==3

xx=wolfe(n0,x,d);

end

end

10、一维搜索确定区间函数

function[amin,amax]=range1(n0,x,d,x0)

%UNTITLED5此处显示有关此函数的摘要

%此处显示详细说明

h=1;

a1=x0;y1=f_1(n0,x,d,a1);

a2=a1+h;y2=f_1(n0,x,d,a2);

ify2>y1

h=-h;a3=a1;y3=y1;

a1=a2;

a2=a3;y2=y3;

end

a3=a2+h;y3=f_1(n0,x,d,a3);

whiley3

h=h*2;

a1=a2;

a2=a3;y2=y3;

a3=a2+h;y3=f_1(n0,x,d,a3);

end

amin=min(a1,a3);

amax=max(a1,a3);

end

11、黄金一维法

functionxx=gold(no,x,d,amin,amax,e)

%UNTITLED6此处显示有关此函数的摘要

%此处显示详细说明

a1=amax-0.618*(amax-amin);

y1=f_1(no,x,d,a1);

a2=amin+0.618*(amax-amin);

y2=f_1(no,x,d,a2);

whileabs(amax-amin)>=e

ify1>=y2

amin=a1;

a1=a2;

y1=y2;

a2=amin+0.618*(amax-amin);

y2=f_1(no,x,d,a2);

else

amax=a2;

a2=a1;

y2=y1;

a1=amax-0.618*(amax-amin);

y1=f_1(no,x,d,a1);

end

end

xx=(amax+amin)/2;

end

12、牛顿一维法

functionxx=newton(n0,x,d,amax,e)

%UNTITLED9此处显示有关此函数的摘要

%此处显示详细说明

symss;

z=x+s*d;

ifn0==1

a=z

(1);

b=z

(2);

f=a^2+2*b^2-2*a*b-4*a;

elseifn0==2

a=z

(1);

b=z

(2);

f=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;

elseifn0==3

a=z

(1);

b=z

(2);

c=z(3);

f=a*a+b*b+c*c;

end

x0=amax;

while

(1)

ifsubs(diff(diff(f,s),s),x0)==0

break;

end

x0=x0-double(

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2