机械优化设计惩罚函数内点法Word格式.doc

上传人:b****3 文档编号:15273419 上传时间:2022-10-29 格式:DOC 页数:6 大小:33KB
下载 相关 举报
机械优化设计惩罚函数内点法Word格式.doc_第1页
第1页 / 共6页
机械优化设计惩罚函数内点法Word格式.doc_第2页
第2页 / 共6页
机械优化设计惩罚函数内点法Word格式.doc_第3页
第3页 / 共6页
机械优化设计惩罚函数内点法Word格式.doc_第4页
第4页 / 共6页
机械优化设计惩罚函数内点法Word格式.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

机械优化设计惩罚函数内点法Word格式.doc

《机械优化设计惩罚函数内点法Word格式.doc》由会员分享,可在线阅读,更多相关《机械优化设计惩罚函数内点法Word格式.doc(6页珍藏版)》请在冰豆网上搜索。

机械优化设计惩罚函数内点法Word格式.doc

//s=x[0]*x[0]+x[1]*x[1];

s=x[0]*x[0]+x[1]*x[1]+x[2]*x[2]+x[3]*x[3];

returns;

doublef(doublex[],doubler)

doubles,t,t2;

//t=1-x[0];

t=1-x[0];

t2=2-x[1];

//s=yuanhansu(x)-r*log(fahansu(t));

s=yuanhansu(x)-r*log(fahansu(t))-r*log(fahansu(t2));

voidjintuifa(doubleab[m][m],intn,doublex0[],doubleh,intij,doublea[],doubleb[],doubler0)

inti,j,z;

doublex1[m],x2[m],x3[m],f1,f2,f3;

doubles[m];

for(i=0;

i<

n;

i++)

{

s[i]=ab[i][ij];

}

for(i=0;

i<

n;

i++)

{

x1[i]=x0[i];

x2[i]=x0[i]+(double)h*s[i];

}

f1=f(x1,r0);

f2=f(x2,r0);

if(f2>

=f1)

h=(-1)*h;

for(i=0;

x3[i]=x1[i];

f3=f1;

x1[i]=x2[i];

f1=f2;

x2[i]=x3[i];

f2=f3;

x3[i]=x2[i]+(double)h*s[i];

f3=f(x3,r0);

while(f3<

f2)

h=2*h;

x3[i]=x2[i]+(double)h*s[i];

f3=f(x3,r0);

if(x1[i]<

x3[i])

a[i]=x1[i];

b[i]=x3[i];

}

else

a[i]=x3[i];

b[i]=x1[i];

voidhongjinfa(intn,doublea[],doubleb[],doubleflag,doublex[],doubler0)

inti;

doublex1[m],x2[m],f1,f2;

while

(1)

x1[i]=b[i];

f1=f(x1,r0);

x2[i]=a[i];

f2=f(x2,r0);

if(fabs((f2-f1)/f2)<

=flag)

{

for(i=0;

x[i]=(double)(b[i]+a[i])/2.0;

break;

}

else

x1[i]=b[i]-(double)0.618*(b[i]-a[i]);

x2[i]=a[i]+(double)0.618*(b[i]-a[i]);

if(f(x1,r0)>

f(x2,r0))

for(i=0;

a[i]=x1[i];

else

b[i]=x2[i];

voidbaoweifa(intn,doublex0[],doubleh,doubleflag,doublea[],doubleb[],doublex[],doubler0)

inti,j,k,r,sum,p,e;

doublex1[m],x2[m],abc[m],kr[m],f0,f1,f2,fn[m],c[m],q,wo;

k=0;

doubleab[m][m];

{

for(j=0;

j<

j++)

{

if(i==j)

ab[i][j]=1;

else

ab[i][j]=0;

}

wo=f(x0,r0);

for(p=0;

p<

p++)

q=f(x0,r0);

jintuifa(ab,n,x0,h,p,a,b,r0);

hongjinfa(n,a,b,flag,x1,r0);

for(e=0;

e<

e++)

{

x0[e]=x1[e];

}

fn[p]=(double)(q-f(x1,r0));

k=k+1;

x2[i]=(double)2*x1[i]-x0[i];

c[i]=(double)x1[i]-x0[i];

r=0;

if(fn[0]<

=fn[i])

fn[0]=fn[i];

r=i;

}

f0=f(x0,r0);

if(f2>

=f0||((double)f0-(double)2*f1+(double)f2)*((double)f0-(double)f1-(double)fn[0])*((double)f0-(double)f1-(double)fn[0])>

=0.5*fn[0]*(double)(f0-f2)*(double)(f0-f2))

if(f1<

x0[i]=x1[i];

x0[i]=x2[i];

intij;

ij=n-1;

for(i=0;

kr[i]=x1[i];

for(i=0;

{

for(j=0;

n-1;

{

if(j>

=r)

ab[i][j]=ab[i][j+1];

}

ab[i][n-1]=c[i];

}

jintuifa(ab,n,kr,h,ij,a,b,r0);

hongjinfa(n,a,b,flag,x1,r0);

x0[i]=x1[i];

if((fabs(f(x0,r0)-wo))/f(x0,r0)<

break;

x[i]=x0[i];

intmain()

intv,i,n;

doubleh,flag,x0[m],a[m],b[m],x[m];

doublefom,fxo,c,r0;

c=0.5;

r0=100.0;

fom=100;

printf("

请输入维数:

\n"

);

scanf("

%d"

&

n);

请输入初始点:

"

printf("

\nx0[%d]="

i);

scanf("

%lf"

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

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

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

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