优化设计实验报告(..)(1)Word格式.doc
- 文档编号:15270008
- 上传时间:2022-10-29
- 格式:DOC
- 页数:14
- 大小:137KB
优化设计实验报告(..)(1)Word格式.doc
《优化设计实验报告(..)(1)Word格式.doc》由会员分享,可在线阅读,更多相关《优化设计实验报告(..)(1)Word格式.doc(14页珍藏版)》请在冰豆网上搜索。
floatff(floatx)
{
floaty;
y=x*x+2*x;
return(y);
}
main()
floata,b,ab,Epsilon;
floaty1,y2,Alpha1,Alpha2;
floatLambda=0.618;
printf("
pleaseinputthearearandEpsilon\n"
);
scanf("
%f,%f,%f"
&
a,&
b,&
Epsilon);
Alpha1=b-Lambda*(b-a),Alpha2=a+Lambda*(b-a);
%f,%f\n"
Alpha1,Alpha2);
y1=ff(Alpha1);
y2=ff(Alpha2);
y1=%f,y2=%f\n"
y1,y2);
do
{if(y1>
=y2)
{a=Alpha1;
Alpha1=Alpha2;
y1=y2;
Alpha2=a+Lambda*(b-a);
y2=Alpha2*Alpha2+2*Alpha2;
else{
b=Alpha2;
Alpha2=Alpha1;
y2=y1;
Alpha1=b-Lambda*(b-a);
y1=Alpha1*Alpha1+2*Alpha1;
a=%f,b=%f,y1=%f,y2=%f\n"
a,b,y1,y2);
}while(!
(abs((b-a)/b)<
Epsilon&
&
abs((y2-y1)/y2)<
Epsilon));
ab=0.5*(a+b);
y1=ff(ab);
theresultis:
%f"
y1);
getch();
4、运行结果:
一、变尺度法
2、变尺度法简介
基本思想:
(1)用简单矩阵代替二阶导数矩阵的逆矩阵
(2)用坐标变换简化目标函数
具体如下:
当用牛顿法寻求极小点时,其牛顿迭代公式为
其中
在迭代中建立变尺度矩阵来替换,即构造一个矩阵序列来逼近海赛逆矩阵序列。
每迭代一次,尺度就改变一次,这正是“变尺度”的含义。
这样,上式变为
其中是从出发,沿方向作一维搜索而得到
的最佳步长。
当(单位矩阵)时,它就变成最速下降法。
这就是变尺度法的基本思想。
变尺度法程序清单:
/*计算f(x1,x2)=x1^2+8*x2^2-4*x1-2*x1*x2的无约束极值,初始点x0=[1,1]。
tt----一维搜索初始步长
ff----差分法求梯度时的步长
ac----终止迭代收敛精度
ad----一维搜索收敛精度
n-----设计变量的维数
xk[n]--迭代初始点
*/
stdlib.h>
conio.h>
#definett0.01
#defineff1.0e-6
#defineac1.0e-6
#definead1.0e-6
#definen8
doubleia;
doublefny(double*x)
{
doublex1=x[0],x2=x[1];
doublef;
f=x1*x1+8*x2*x2-4*x1-2*x1*x2;
returnf;
double*iterate(double*x,doublea,double*s)
double*x1;
inti;
x1=(double*)malloc(n*sizeof(double));
for(i=0;
i<
n;
i++)
x1[i]=x[i]+a*s[i];
returnx1;
doublefunc(double*x,doublea,double*s)
x1=iterate(x,a,s);
f=fny(x1);
voidfinding(doublea[3],doublef[3],double*xk,double*s)
doublet=tt;
doublea1,f1;
a[0]=0;
f[0]=func(xk,a[0],s);
;
a[1]=a[0]+t;
f[1]=func(xk,a[1],s);
if(f[1]<
f[0])break;
if(fabs(f[1]-f[0])>
=ad)
{
t=-t;
a[0]=a[1];
f[0]=f[1];
}
else
if(ia==1)return;
t=t/2;
ia=1;
a[2]=a[1]+t;
f[2]=func(xk,a[2],s);
if(f[2]>
f[1])break;
t=2*t;
a[0]=a[1];
a[1]=a[2];
f[1]=f[2];
if(a[0]>
a[2])
a1=a[0];
f1=f[0];
a[0]=a[2];
f[0]=f[2];
a[2]=a1;
f[2]=f1;
return;
doublelagrange(double*xk,double*ft,double*s)
{
doublea[3],f[3];
doubleb,c,d,aa;
finding(a,f,xk,s);
if(ia==1){aa=a[1];
*ft=f[1];
break;
}
d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]);
if(fabs(d)==0)break;
c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d;
if(fabs(c)==0)break;
b=((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]);
aa=-b/(2*c);
*ft=func(xk,aa,s);
if(fabs(aa-a[1])<
=ad){if(*ft>
f[1])aa=a[1];
break;
if(aa>
a[1])
if(*ft>
f[1]){a[2]=aa;
f[2]=*ft;
elseif(*ft<
f[1]){a[0]=a[1];
a[1]=aa;
f[1]=*ft;
elseif(*ft==f[1])
{
a[2]=aa;
a[0]=a[1];
f[2]=*ft;
a[1]=(a[0]+a[2])/2;
f[1]=func(xk,a[1],s);
}
f[1]){a[0]=aa;
f[0]=*ft;
f[1]){a[2]=a[1];
f[2]=f[1];
{a[0]=aa;
a[2]=a[1];
f[0]=*ft;
if(*ft>
f[1]){*ft=f[1];
aa=a[1];
returnaa;
double*gradient(double*xk)
double*g,f1,f2,q;
g=(double*)malloc(n*sizeof(double));
f1=fny(xk);
for(i=0;
{q=ff;
xk[i]=xk[i]+q;
f2=fny(xk);
g[i]=(f2-f1)/q;
xk[i]=xk[i]-q;
returng;
double*bfgs(double*xk)
doubleu[n],v[n],h[n][n],dx[n],dg[n],s[n];
doubleaa,ib;
double*ft,*xk1,*g1,*g2,*xx,*x0=xk;
doublefi;
inti,j,k;
ft=(double*)malloc(sizeof(double));
xk1=(double*)malloc(n*sizeof(double));
s[i]=0;
for(j=0;
j<
j++)
h[i][j]=0;
if(j==i)h[i][j]=1;
g1=gradient(xk);
fi=fny(xk);
x0=xk;
for(k=0;
k<
k++)
ib=0;
if(ia==1){xx=xk;
i++)s[i]=0;
for(j=0;
s[i]+=-h[i][j]*g1[j];
aa=lagrange(xk,ft,s);
xk1=iterate(xk,aa,s);
g2=gradient(xk1);
if((fabs(g2[i])>
=ac)&
(fabs(g2[i]-g1[i])>
=ac))
{ib=ib+1;
if(ib==0){xx=xk1;
fi=*ft;
if(k==n-1)
{int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 设计 实验 报告