机械优化设计实验指导书Word格式文档下载.docx

上传人:b****6 文档编号:16939138 上传时间:2022-11-27 格式:DOCX 页数:15 大小:18.13KB
下载 相关 举报
机械优化设计实验指导书Word格式文档下载.docx_第1页
第1页 / 共15页
机械优化设计实验指导书Word格式文档下载.docx_第2页
第2页 / 共15页
机械优化设计实验指导书Word格式文档下载.docx_第3页
第3页 / 共15页
机械优化设计实验指导书Word格式文档下载.docx_第4页
第4页 / 共15页
机械优化设计实验指导书Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

机械优化设计实验指导书Word格式文档下载.docx

《机械优化设计实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《机械优化设计实验指导书Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

机械优化设计实验指导书Word格式文档下载.docx

/*

黄金分割法

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

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

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

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

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