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

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

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

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

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

本课程实验成绩依据以下几个方面进行考核

1、实验报告

2、考核所编制的程序

3、实验纪律、出勤等

实验一一维搜索方法

本实验求函数f(x)=(x-3)2的搜索区间[a,b]。

并用黄金分割法和插值法分别求最优解

#include<

math.h>

stdio.h>

/*函数f(x)=(x-3)2*/

doublef(doublex)

{

return(x-3)*(x-3);

}

/*求搜索区间[a,b]的函数,x0---初始点;

h0---初始步长*/

voidfind_ab(doublex0,doubleh0,double*a,double*b)

{

doubleh,x1,y1,x2,y2,x3,y3;

h=h0;

x1=x0;

y1=f(x1);

x2=x1+h;

y2=f(x2);

if(y2>

=y1){

h=-h0;

x3=x1;

y3=y1;

x1=x2;

y1=y2;

x2=x3;

y2=y3;

}

for(;

;

){

h*=2.0;

x3=x2+h;

y3=f(x3);

if(y2<

y3)break;

if(h>

0){*a=x1;

*b=x3;

else{*a=x3;

*b=x1;

/*

黄金分割法

a,b---搜索区间[a,b];

e---精度

x,y---最优解X*,F*

*/

voidsearch_gold(doublea,doubleb,doublee,

double*x,double*y)

doublex1,x2,y1,y2;

x1=a+0.382*(b-a);

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

do{

if(y1<

y2){

b=x2;

x2=x1;

y2=y1;

x1=a+0.382*(b-a);

}else{

a=x1;

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

}while(b-a>

e);

*x=0.5*(a+b);

*y=f(*x);

二次插值法

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){*xpt=x2;

*fpt=f2;

break;

xp=0.5*(x1+x3-c1/c2);

fp=f(xp);

if((xp-x1)*(x3-xp)<

=0.0){

*xpt=x2;

if(k!

=1)if(fabs(xp0-xp)<

=e){

*xpt=xp;

*fpt=fp;

if(xp>

x2)if(f2<

fp){

x3=xp;

f3=fp;

x1=x2;

f1=f2;

x2=xp;

f2=fp;

}elseif(f2<

x1=xp;

f1=fp;

x3=x2;

f3=f2;

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++){/*产生初始复合形*/

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,&

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

当前位置:首页 > 解决方案 > 解决方案

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

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