中北大学最优化实验报告.docx

上传人:b****5 文档编号:8635137 上传时间:2023-02-01 格式:DOCX 页数:13 大小:152.59KB
下载 相关 举报
中北大学最优化实验报告.docx_第1页
第1页 / 共13页
中北大学最优化实验报告.docx_第2页
第2页 / 共13页
中北大学最优化实验报告.docx_第3页
第3页 / 共13页
中北大学最优化实验报告.docx_第4页
第4页 / 共13页
中北大学最优化实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

中北大学最优化实验报告.docx

《中北大学最优化实验报告.docx》由会员分享,可在线阅读,更多相关《中北大学最优化实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

中北大学最优化实验报告.docx

中北大学最优化实验报告

 

中北大学

 

实验报告

课程名:

最优化方法

任课教师:

李卉

专业:

数学与应用数学

学号:

14080141

姓名:

 

2015/2016学年第2学期

中北大学理学院

《最优化方法》课程实验第1次实验报告

一、实验内容及基本要求

实验项目名称:

黄金分割法程序设计

实验类型:

设计型

每组人数:

1

实验内容及要求:

内容:

能够应用MATLAB或C++设计黄金分割法的程序,并用实例进行验证

要求:

能够独立完成程序的设计及验证

二、实验题目

利用黄金分割法求函数

上的极小点。

取容许误差

三、实验步骤及结果

1)、建立y函数M文件(fun_gs.m)

functiony=fun_gs(x)

y=3*x^2-2*tan(x);

end

2)、建立求解极小值点的M文件(Untitled5.m)

functiongs(x)

a=0;

b=1;

eps=0.0001;

i=100;

a1=b-0.618*(b-a);

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

y1=fun_gs(a1);

y2=fun_gs(a2);

fork=1:

i;

if(abs(b-a)<=eps)

y=fun_gs((b+a)/2);

break;

else

if(y1<=y2)

y2=fun_gs(a1);

b=a2;

a2=a1;

a1=b-0.618*(b-a);

y1=fun_gs(a1);

else

y1=fun_gs(a2);

a=a1;

a1=a2;

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

y2=fun_gs(a2);

end

i=i+1;

end

end

i

a0=(b+a)/2

y=fun_gs((b+a)/2)

end

实验结果:

根据实验结果可知:

迭代次数i=120,极小值点a0=0.3895,在极小点处的函数值为y=-0.3658.

《最优化方法》课程实验第2次实验报告

一、实验内容及基本要求

实验项目名称:

牛顿法程序设计

实验类型:

设计型

每组人数:

1

实验内容及要求:

内容:

能够应用MATLAB或C++设计牛顿法的程序,并用实例进行验证

要求:

能够独立完成程序的设计及验证

二、实验题目

利用牛顿法程序求解

该问题有精确解

三、实验步骤及结果

通过牛顿迭代思想编写c++程序如下:

#include

#include

doublef1(doublex,doubley)

{return(4*pow(x*x-y,2)+3*pow(x-1,2));}

voidmain(){

doubleh=3,x0=2,x1,y0=2,y1,s,r0,r1;

doublee0=0.000001,e1=0.000001;

intk=0;

s=sqrt(pow(16*x0*x0*x0-16*x0*y0+6*x0-6,2)+pow(-8*x0*x0+8*y0,2));

printf("%dx=%fy=%fs=%f\n",k,x0,y0,s);

while(s>e1){

x1=x0;y1=y0;r0=f1(x0,y0);h=3;

while(fabs(h)>e0){

r1=f1(x1-h*(16*x1*(x1*x1-y1)+6*(x1-1)),y1-h*(-8*(x1*x1-y1)));

if(r1

x0=x1-h*(16*x1*(x1*x1-y1)+6*(x1-1));

y0=y1-h*(-8*(x1*x1-y1));

r0=r1;

h=h+h;

}

elseif(fabs(h)>e0)

h=-1*h/4;

}

s=sqrt(pow(16*x0*x0*x0-16*x0*y0+6*x0-6,2)+pow(-8*x0*x0+8*y0,2));

k++;

printf("%dx=%fy=%fs=%f\n",k,x0,y0,s);

}

printf("x=%fy=%f",x0,y0);

}

实验结果:

通过c的程序运行结果可得知,用牛顿法迭代需要进行110次迭代可以求得最优解,最优解为

《最优化方法》课程实验第3次实验报告

一、实验内容及基本要求

实验项目名称:

共轭梯度法程序设计

实验类型:

设计型

每组人数:

1

实验内容及要求:

内容:

能够应用MATLAB或C++设计共轭梯度法的程序,并用实例进行验证

要求:

能够独立完成程序的设计及验证

二、实验题目

利用线性共轭梯度程序求解无约束优化问题

式中:

该问题有精确解

,n=10,初始向量为零向量,终止准则为

三、实验步骤及结果

1)、建立M文件(cg.m)

function[x,iter]=cg(G,b,x0,max_iter)

x=x0;

tolerance=1.0e-5;

fprintf('\nx0=');

fprintf('%10.6f',x0);

r=G*x-b;

d=-r;

fork=1:

max_iter

ifnorm(r,2)<=tolerance

iter=k-1;

fprintf('\nAlgorithmfindsasolution!

');

return

end

alpha=(r'*r)/(d'*G*d);

xx=x+alpha*d;

rr=r+alpha*G*d;

beta=(rr'*rr)/(r'*r);

d=-rr+beta*d;

x=xx;

r=rr;

fprintf('\nx%d=',k);

fprintf('%10.6f',x);

end

iter=max_iter;

return

end

2)、建立M文件(CG_main.m)

functionCG_main()

G=[4-100000000;...

-14-10000000;...

0-14-1000000;...

00-14-100000;...

000-14-10000;...

0000-14-1000;...

00000-14-100;...

000000-14-10;...

0000000-14-1;...

00000000-14];

b=[3222222223]';

x0=[0000000000]';

max_iter=1000;

fprintf('\n');

fprintf('ConjugateGradientMethod:

\n');

fprintf('==========================\n');

[y,iter]=cg(G,b,x0,max_iter);

fprintf('\n');

fprintf('Iterativenumber:

\n%d\n',iter);

fprintf('Solution:

\n');

fprintf('%10.6f',y);

fprintf('\n\n=====================\n\n');

实验结果:

通过上面的计算结果可以看出,用共轭梯度法迭代5次求得最优解,其中最优解为

 

《最优化方法》课程实验第4次实验报告

一、实验内容及基本要求

实验项目名称:

BFGS算法程序设计

实验类型:

设计型

每组人数:

1

实验内容及要求:

内容:

能够应用MATLAB或C++设计BFGS算法的程序,并用实例进行验证

要求:

能够独立完成程序的设计及验证

二、实验题目

利用BFGS算法求解无约束优化问题

该问题有唯一极小点

,极小值

三、实验步骤及结果

1)、建立

函数的M文件(fun.m):

functionf=fun(x)

f=2*(x

(1)-x

(2)^2)^2+(x

(2)-2)^2;

建立M文件(gradient.m)

functiong=gradient(x)

g=[4*(x

(1)-x

(2)^2);

2*(x

(2)-2)];

2)、建立搜索函数的M文件(wolfe_search.m)

functionalphak=wolfe_search(x,g,d)

alphamax=inf;

ruo=0.1;

sigma=0.6;

alpha1=0;

alpha2=alphamax;

fai1=fun(x);

dfai1=g'*d;

alpha=1;

faialpha=fun(x+alpha*d);

afai=gradient(x+alpha*d)'*d;

while1

iffaialpha-fai1>ruo*alpha*dfai1

whilefaialpha-fai1>ruo*alpha*dfai1

alphaba=alpha1+(alpha-alpha1)/...

(2*(1+(fai1-faialpha/((alpha-alpha1)*dfai1))));

alpha2=alpha;

alpha=alphaba;

faialpha=fun(x+alpha*d);

end

dfai=gradient(x+alpha*d)'*d;

end

ifdfai>=sigma*dfai1

alphak=alpha;

return

else

alphaba=alpha+((alpha-alpha1)*dfai)/(dfai1-dfai);

alpha1=alpha;

fai1=faialpha;

dfai1=dfai;

alpha=alphaba;

faialpha=fun(x+alpha*d);

dfai=gradient(x+alpha*d)'*d;

end

end

3)、建立BFGS算法的M文件(bfgs.m)

function[x,iter]=bfgs(H,x0,max_iter,TOL)

k=0;

fprintf('\nx0=');

fprintf('%10.6f',x0);

x=x0;

g=gradient(x);

whilenorm(g)>TOL&k<=max_iter

d=-H*g;

afa=wolfe_search(x,g,d);

s=afa*d;

x=x+s;

fprintf('\nx%2d=',k+1);

fprintf('%10.6f',x);

gnew=gradient(x);

y=gnew-g;

H=H+((s-H*g)*s'+s*(s-H*y)')/(s'*y)-(s-H*y)'*y*y*y'/((s'*y)^2);

g=gnew;

k=k+1;

end

ifnorm(g)<=TOL

fprintf('\nAlgorithmfindsasolution!

\n');

else

fprintf('\nNumberofiterationsexceedsmax_iter.\n');

end

iter=k;

end

4)、建立求最优解的M文件(bfgs_main.m)

functionbfgs_main()

x0=[32]';

n=length(x0);

H=eye(n);

max_iter=1000;

tolerance=1.0e-6;

fprintf('\n');

fprintf('BFGSMethod:

\n');

fprintf('============\n');

[x,iter]=bfgs(H,x0,max_iter,tolerance);

fprintf('Iterativenumber:

\n%d\n',iter);

fprintf('Solution:

\n');

fprintf('%10.6f',x);

fprintf('\nOptimalobjectivefunctionvalue:

\n');

fprintf('%10.6f\n',fun(x));

fprintf('\n=========\n');

 

实验结果:

上面的计算结果表明,用BFGS方法经3次迭代达到极小值点,极小值点最优解为

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

当前位置:首页 > 初中教育

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

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