机械优化设计实验指导书Word格式文档下载.docx
《机械优化设计实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《机械优化设计实验指导书Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
![机械优化设计实验指导书Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/27/96d557cd-7829-496e-8c9a-667ac6b744be/96d557cd-7829-496e-8c9a-667ac6b744be1.gif)
/*
黄金分割法
a,b---搜索区间[a,b];
e---精度
x,y---最优解X*,F*
*/
voidsearch_gold(doublea,doubleb,doublee,double*x,double*y)
doublex1,x2,y1,y2;
x1=******;
x2=******;
do{
if(y1<
y2){
******
}else{
}
}while(b-a>
e);
*****
二次插值法
xpt,ypt---最优解X*,F*
voidsearch_insert(doublea,doubleb,doublee,double*xpt,double*fpt)
doublex1,x2,f1,f2,x3,f3,xp,fp,xp0,c1,c2;
intk=1;
x1=a;
x3=b;
x2=0.5*(a+b);
f1=f(x1);
f2=f(x2);
f3=f(x3);
xp0=0;
){
c1=(f3-f1)/(x3-x1);
c2=((f2-f1)/(x2-x1)-c1)/(x2-x3);
if(c2==0.0){******,break;
xp=0.5*(x1+x3-c1/c2);
fp=f(xp);
if((xp-x1)*(x3-xp)<
=0.0){
*******
break;
if(k!
=1)if(fabs(xp0-xp)<
=e){
*********
if(xp>
x2)if(f2<
fp){
********
}elseif(f2<
x1=xp;
f1=fp;
*********
xp0=xp;
k++;
实验二无约束优化方法---鲍威尔方法
本实验用鲍威尔方法求函数f(x)=(x1-5)2+(x2-6)2的最优解。
stdlib.h>
constMAXN=10;
doublexkk[MAXN],xk[MAXN],sk[MAXN];
intN;
doubleF(double*x)
return4*pow(x[0]-5,2.0)+pow(x[1]-6,2.0);
doublef(doublex)
for(inti=0;
i<
N;
i++)xkk[i]=xk[i]+x*sk[i];
returnF(xkk);
无约束坐标轮换法
x0--初始点
e1--一维搜索精度
e2--求解精度
doublenc_trans(double*x0,doublee1,doublee2)
inti,j,k=1;
doublea,b,ax,ay,d;
for(j=0;
j<
j++)xk[j]=x0[j];
for(i=0;
i++){
for(j=0;
j++)if(j==i)sk[j]=1;
elsesk[j]=0;
find_ab(0,1,&
a,&
b);
search_gold(a,b,e2,&
ax,&
ay);
j++)xk[j]=xkk[j];
d=0;
j++)
d+=(x0[j]-xkk[j])*(x0[j]-xkk[j]);
d=sqrt(d);
printf("
k=%d;
"
k);
j++)
x[%d]=%lf;
j+1,xkk[j]);
d=%lf\n"
d);
if(d<
=e1)break;
j++)x0[j]=xkk[j];
鲍威尔法
doublenc_powell(double*x0,doublee1,doublee2)
inti,j,k=1,m;
doubless[MAXN][MAXN],s1[MAXN],
ff[MAXN],x[MAXN],xn[MAXN],
xn1[MAXN],f0,f1,f2,f3;
i++)for(j=0;
j++)if(j==i)
ss[i][j]=1;
elsess[i][j]=0;
j++)sk[j]=ss[i][j];
ff[i]=F(xk);
j++)xn[j]=xkk[j];
j++){
sk[j]=xkk[j]-x0[j];
s1[j]=sk[j];
find_ab(0,1,&
search_gold(a,b,e2,&
j++)x[j]=xkk[j];
j++)d+=(x[j]-x0[j])*(x[j]-x0[j]);
x[%d]=%lf;
j+1,x0[j]);
=e1){
j++)x0[j]=x[j];
break;
f0=F(x0);
d=f0-ff[0];
m=0;
for(j=1;
j++)if(d<
ff[j-1]-ff[j]){
m=j;
d=ff[j-1]-ff[j];
j++)xn1[j]=2*xn[j]-x0[j];
f1=F(x0);
f2=F(xn);
f3=F(xn1);
if(0.5*(f1-2*f2+f3)>
=d){
if(f2<
f3)for(j=0;
j++)x0[j]=xn[j];
elsefor(j=0;
j++)x0[j]=xn1[j];
for(i=m+1;
ss[i-1][j]=ss[i][j];
j++)ss[N-1][j]=s1[j];
实验三无约束优化方法---DFP方法
本实验用DFP方法求函数f(x)=(x1-5)2+(x2-6)2的最优解。
/*DFP法--求梯度*/
doubleDF(double*x,double*df)
df[0]=8*(x[0]-5);
df[1]=2*(x[1]-6);
return(sqrt(df[0]*df[0]+df[1]*df[1]));
/*DFP法--求构造矩阵Ak+1*/
voidcomputer_A(doubleA[][MAXN],double*cc,
double*yy)
doubleB[MAXN][MAXN],C[MAXN][MAXN],
D[MAXN][MAXN],E[MAXN][MAXN];
doublea,b,c;
inti,j,k;
B[i][j]=cc[i]*cc[j];
D[i][j]=yy[i]*yy[j];
j++){
E[i][j]=0;
for(k=0;
k<
k++)E[i][j]+=A[i][k]*D[k][j];
C[i][j]=0;
k++)C[i][j]+=E[i][k]*A[k][j];
a=0;
i++)a+=cc[i]*cc[i];
b=0;
c=0;
j++)c+=yy[j]*A[j][i];
b+=c*yy[i];
A[i][j]+=B[i][j]/a-C[i][j]/b;
DFP法
doublenc_dfp(double*x0,doublee1,doublee2)
doubleA[MAXN][MAXN],gk[MAXN],
g0[MAXN],cc[MAXN],yy[MAXN];
d=DF(x0,g0);
=e1)returnF(x0);
A[i][j]=1;
elseA[i][j]=0;
i++)xk[i]=x0[i];
k++){
sk[j]=0;
for(i=0;
i++)sk[j]+=-A[j][i]*g0[i];
printf("
==%lf=="
ax);
d=DF(xk,gk);
j+1,xk[j]);
if(d<
i++)x0[i]=xk[i];
returnF(x0);
for(i=0;
i++){
cc[i]=xk[i]-x0[i];
yy[i]=gk[i]-g0[i];
computer_A(A,cc,yy);
i++){x0[i]=xk[i];
g0[i]=gk[i];
实验四约束优化方法---约束随机方向法
本实验用随机方向法求目标函数的最优解。
数学模型:
F(x)=(x1-8)2+(x2-8)2
g1(x)=x1
g2(x)=x2-1
g3(x)=11-x1-x2
time.h>
#definesqr(x)((x)*(x))
#defineN10
intnt;
doublefunt(double*x,double*g,int*b)
{inti;
g[0]=x[0];
g[1]=x[1]-1;
g[2]=11-x[0]-x[1];
*b=1;
nt;
i++)if(g[i]<
0){*b=0;
returnsqr(x[0]-8)+sqr(x[1]-8);
voidfind_sk(intnmax,doublesk[])
{doublesm,c;
inti;
sm=0;
for(i=0;
i<
nmax;
i++){
c=(double)(rand()+1.0)/RAND_MAX;
c=2*c-1;
sm+=c*c;
sk[i]=c;
sm=sqrt(sm);
nmax;
i++)sk[i]=sk[i]/sm;
voidmain()
{doublea,a0,f0,f,e,sk[N],xk[N],x0[N],g[N];
intb1,b2,b,mt,M,i,k;
nt=3;
M=50;
a0=0.4,e=0.01;
x0[0]=2;
x0[1]=3;
mt=2;
f0=funt(x0,g,&
for(i=0;
mt;
if(!
b)return;
k=0;
srand((unsigned)time(NULL));
for(;
if(a0<
=e)break;
if(k==M){a0=0.5*a0;
find_sk(mt,sk);
a=a0;
for(i=0;
i++)xk[i]=x0[i]+a*sk[i];
f=funt(xk,g,&
b1);
if(!
(b1&
&
f<
f0)){
a=-a0;
b2);
if(b2&
f0)b=1;
}elseb=1;
b){k++;
continue;
k=0;
f0=f;
for(i=0;
for(;
if((b1&
f0)){f0=f;
elsebreak;
%s\n"
"
********最优结果*********"
);
i++)printf("
x*[%d]=%lf\n"
i+1,x0[i]);
f*=%lf\n"
f0);
/*********最优结果*********x*[1]=5.511014x*[2]=5.488826f*=12.501044*/
实验五约束优化方法---复合型法
本实验用复合型法求目标函数的最优解。
inti;
/*排序--按函数值从小到大*/
voidsort(doublepx[N][N],double*pf,intK,intmt)
doublet;
K-1;
i++)for(j=i+1;
K;
j++)if(pf[j]<
pf[i]){
t=pf[i];
pf[i]=pf[j];
pf[j]=t;
for(k=0;
k++){t=px[i][k];
px[i][k]=px[j][k];
px[j][k]=t;
{inti,j,mt,b;
doublea,f,f0,fr,d,e,c,g[N],x0[N],xr[N];
intH,K;
/*H--坏点,K--复合形顶点数*/
doublepx[N][N],pf[N];
/*复合形顶点及相应的函数值*/
doubleXL[N]={2,2},XH[N]={10,10};
/*给定变量的下限和上限*/
/*不等式个数*/
/*变量个数*/
e=0.001;
K=3;
i++){/*产生初始复合形*/
do{
for(j=0;
j<
mt;
j++){
px[i][j]=XL[j]+c*(XH[j]-XL[j]);
pf[i]=funt(px[i],g,&
}while(!
sort(px,pf,K,mt);
a=1.3;
H=K-1;
){
x0[i]=0;
for(j=0;
j++)if(j!
=H)x0[i]+=px[j][i];
x0[i]/=K-1;
i++)xr[i]=x0[i]+a*(x0[i]-px[H][i]);
fr=funt(xr,g,&
if(b&
fr<
pf[K-1])break;
if(a<
1.0e-5){a=1.3;
H--;
}elsea*=0.5;
i++)px[K-1][i]=xr[i];
pf[K-1]=fr;
sort(px,pf,K,mt);
d=0;
for(i=1;
i++)d+=sqr(pf[i]-pf[0]);
d=sqrt(d)/K;
if(d<
e)break;
if(d<
i++)d+=fabs(pf[i]-pf[0]);
f0=pf[0];
i++)x0[i]=px[0][i];
//最优结果x*[1]=5.749423x*[2]=5.203676f*=12.884525