鲍威尔法.docx

上传人:b****6 文档编号:5618559 上传时间:2022-12-29 格式:DOCX 页数:7 大小:15.14KB
下载 相关 举报
鲍威尔法.docx_第1页
第1页 / 共7页
鲍威尔法.docx_第2页
第2页 / 共7页
鲍威尔法.docx_第3页
第3页 / 共7页
鲍威尔法.docx_第4页
第4页 / 共7页
鲍威尔法.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

鲍威尔法.docx

《鲍威尔法.docx》由会员分享,可在线阅读,更多相关《鲍威尔法.docx(7页珍藏版)》请在冰豆网上搜索。

鲍威尔法.docx

鲍威尔法

#include

#defineN2

floatgs(floatz[N])

{floatf;//f=10*(z[0]+z[1]-5)*(z[0]+z[1]-5)+(z[0]-z[1])*(z[0]-z[1]);f=4+4.5*z[0]-4*z[1]+z[0]*z[0]+2*z[1]*z[1]-2*z[0]*z[1]+z[0]*z[0]*z[0]*z[0]-2*z[0]*z[0]*z[1];//f=1.5*z[0]*z[0]+0.5*z[1]*z[1]-z[0]*z[1]-2*z[0];return(f);}floatywyh(floatx[N],floatt,floats[N],floatz[N])

{floatq=0.618,e,A[N],f[2],a,b,c=0.1,d=0.1;inti,j=0;a=0;b=t;f[0]=gs(x);

for(i=0;i

z[i]=x[i]+b*s[i];

f[1]=gs(z);

if(f[1]

{do{t=2*t;b=b+t;f[0]=f[1];

for(i=0;i

z[i]=x[i]+b*s[i];

f[1]=gs(z);

if(f[0]>f[1])

a=b-t;

elsebreak;}

while(f[0]>f[1]);

}

else

{t=0-t;

do

{a=a+t;

f[1]=f[0];

for(i=0;i

f[0]=gs(z);if(f[1]>f[0])

{b=a-t;

t=2*t;

}

elsebreak;

}

while(f[1]>f[0])

}

do

{j=j+1;

A[0]=b-q*(b-a);

for(i=0;i

z[i]=x[i]+A[0]*s[i];

f[0]=gs(z);

A[1]=a+q*(b-a);

for(i=0;i

z[i]=x[i]+A[1]*s[i];

f[1]=gs(z);

do{if(f[0]>f[1])

{a=A[0];

A[0]=A[1];

f[0]=f[1];

A[1]=a+q*(b-a);

for(i=0;i

z[i]=x[i]+A[1]*s[i];

f[1]=gs(z);

j=j+1;

if(j>50)

break;

}

else

{b=A[1];

A[1]=A[0];

f[1]=f[0];

A[0]=b-q*(b-a);

for(i=0;i

z[i]=x[i]+A[0]*s[i];

f[0]=gs(z);

j=j+1;

if(j>50)

break;

}

if((f[1]-f[0])/f[1]>0)

e=(f[1]-f[0])/f[1];

elsee=0-(f[1]-f[0])/f[1];

}

while(e>c)

if((A[1]-A[0])/A[0]>0)

e=(A[1]-A[0])/A[0];

elsee=0-(A[1]-A[0])/A[0];

if(e<=d)break;

else

{a=A[0];

b=A[1];

}

if((A[1]-A[0])/A[0]>0)

e=(A[1]-A[0])/A[0];

elsee=0-(A[1]-A[0])/A[0];

}

while(e>d)

if(f[0]

{for(i=0;i

z[i]=x[i]+A[0]*s[i];

return(f[0]);

}

else

{for(i=0;i

z[i]=x[i]+A[1]*s[i];

return(f[1]);

}

}

voidmain()

{floatxo[N],ss[N][N],z[N],c,d,t,fmin,xooo[N],xoo[N],fi[N],s[N],x[N],xe[N],f[N],fio,dm,dml,df,dx,dxl;

inti,j,k,ks,m;

for(i=0;i

{printf("请输入初始点x[%d]=",i);

scanf("%f",&xo[i]);

}

printf("请输入迭代精度Ef,Ex=");

scanf("%f,%f",&c,&d);

printf("请输入步长T=");

scanf("%f",&t);

k=0;ks=0;

for(i=0;i

xooo[i]=xo[i];

for(i=0;i

for(j=0;j

{if(i==j)ss[i][j]=1;

elsess[i][j]=0;

}

do

{for(i=0;i

xoo[i]=xooo[i];

k=k+1;

for(i=0;i

{

{for(j=0;j

s[j]=ss[i][j];

}

fmin=ywyh(xooo,t,s,z);

for(j=0;j

fi[i]=fmin;

for(j=0;j

xooo[j]=x[j];

}

for(i=0;i

{s[i]=x[i]-xoo[i];

xe[i]=2*x[i]-xoo[i];

}

f[0]=gs(xoo);

f[1]=fmin;

f[2]=gs(xe);

fio=f[0];

dm=fio-fi[0];

m=0;

for(i=0;i

{dml=fi[i]-fi[i+1];

if(dm

{dm=dml;m=i+1;

}

else;

}if((f[0]+f[2]-2*f[1])*(f[0]-f[1]-dm)*(f[0]-f[1]-dm)<0.5*dm*(f[0]-f[2])*(f[0]-f[2])&&f[2]

{fmin=ywyh(xooo,t,s,z);

f[1]=fmin;f

or(j=0;j

x[j]=z[j];

for(i=0;i

{if(i

{for(j=0;j

ss[i][j]=ss[i][j];

}

else

{for(j=0;j

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

}

}

for(i=0;i

ss[N-1][i]=s[i];

ks=ks+1;

}

else

{if(fmin>f[2])

{for(i=0;i

x[i]=xe[i];

f[1]=f[2];

fmin=f[2];

}

else

}

for(i=0;i

xooo[i]=x[i];

if((f[0]-f[1])/f[1]>0)

df=(f[0]-f[1])/f[1];

elsedf=0-(f[0]-f[1])/f[1];

if(xoo[0]-x[0]>0)dx=xoo[0]-x[0];

else

dx=x[0]-xoo[0];

for(i=1;i

{if(xoo[i]-x[i]>0)

dxl=xoo[i]-x[i];

elsedxl=x[i]-xoo[i];

if(dx

else

}

}

while(dx>c||df>d)

for(i=0;i

z[i]=x[i];

for(i=0;i

printf("\n最优点坐标x[%i]=%f\n",i,z[i]);

printf("\n最优函数值f(x)=%f\n",fmin);

printf("\n搜索累计次数k=%d\n",k);

printf("\n替换方向累计次数ks=%d\n",ks);}

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

当前位置:首页 > PPT模板 > 商务科技

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

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