鲍威尔法C源程序文档格式.docx
- 文档编号:17517173
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:8
- 大小:15.53KB
鲍威尔法C源程序文档格式.docx
《鲍威尔法C源程序文档格式.docx》由会员分享,可在线阅读,更多相关《鲍威尔法C源程序文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
floatf;
f=10*pow((x[0]+x[1]-5),2)+pow((x[0]-x[1]),2);
//目标函数
return(f);
}
float*iterate(float*x,floata,float*s)
float*x1;
x1=(float*)malloc(n1*sizeof(float));
for(inti=0;
i<
n1;
i++)
x1[i]=x[i]+a*s[i];
return(x1);
floatfunc(float*x,floata,float*s)
x1=iterate(x,a,s);
floatf=fny(x1);
voidfinding(floata[3],floatf[3],float*xk,float*s)
floatt=tt;
floata1,f1;
a[0]=0;
f[0]=func(xk,a[0],s);
;
{
a[1]=a[0]+t;
f[1]=func(xk,a[1],s);
if(f[1]<
f[0])
break;
if(fabs(f[1]-f[0])>
=ad)
{
t=-t;
a[0]=a[1];
f[0]=f[1];
}
else{
if(ia==1)return;
t=t/2;
ia=1;
}
for(i=0;
a[2]=a[1]+t;
f[2]=func(xk,a[2],s);
if(f[2]>
f[1])
break;
t=2*t;
a[0]=a[1];
a[1]=a[2];
f[1]=f[2];
if(a[0]>
a[2])
a1=a[0];
f1=f[0];
a[0]=a[2];
f[0]=f[2];
a[2]=a1;
f[2]=f1;
return;
//secondinsert
floatlagrange(float*xk,float*ft,float*s)
floata[3],f[3];
floatb,c,d,aa;
finding(a,f,xk,s);
if(ia==1)
aa=a[1];
*ft=f[1];
d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]);
if(fabs(d)==0)
c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d;
if(fabs(c)==0)
b=((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]);
aa=-b/(2*c);
*ft=func(xk,aa,s);
if(fabs(aa-a[1])<
if(*ft>
f[1])aa=a[1];
if(aa>
a[1])
{
a[2]=aa;
f[2]=*ft;
}
elseif(*ft<
a[0]=a[1];
a[1]=aa;
f[0]=f[1];
f[1]=*ft;
elseif(*ft==f[1])
a[0]=a[1];
f[2]=*ft;
a[1]=(a[0]+a[2])/2;
else
a[0]=aa;
f[0]=*ft;
a[2]=a[1];
f[2]=f[1];
a[2]=a[1];
f[0]=*ft;
f[2]=f[1];
if(*ft>
aa=a[1];
return(aa);
float*powell(float*xk)
floath[n1][n1],s[n1]={0,0},ff[n1+1]={0,0,0};
floatf1,f3,aa;
floatdk[n1],*x0,xk1[n1];
intm=0,i,j;
for(j=0;
j<
j++)
h[i][j]=0;
if(j==i)
h[i][j]=1;
for(intk=0;
k++)
ff[0]=fny(xk);
x0=xk;
for(i=0;
for(j=0;
s[j]=h[i][j];
floataa=lagrange(xk,&
ff[i+1],s);
xk=iterate(xk,aa,s);
floata,b;
dk[i]=xk[i]-x0[i];
xk1[i]=2*xk[i]-x0[i];
floatmax=fabs(ff[1]-ff[0]);
for(i=1;
if(fabs(ff[i+1]-ff[i])>
max)
max=fabs(ff[i+1]-ff[i]);
m=i;
f3=fny(xk1);
if((f3<
ff[0])&
&
((ff[0]+f3-2*ff[2])*pow((ff[0]-ff[n1]-max),2)<
0.5*max*pow((ff[0]-f3),2)))
{
aa=lagrange(xk,&
f1,dk);
xk=iterate(xk,aa,dk);
for(i=m;
n1-1;
for(j=0;
h[i][j]=h[i+1][j];
h[n1-1][j]=dk[j];
}
else
if(ff[n1]>
=f3)xk=xk1;
floatxq=0;
for(i=0;
xq+=pow((xk[i]-x0[i]),2);
if(xq<
break;
return(xk);
voidmain()
floatxk[n1]={0,0};
//取初始点
float*xx;
xx=(float*)malloc(n1*sizeof(float));
xx=powell(xk);
floatff=fny(xx);
cout<
<
"
优化的结果为:
endl;
printf("
\n\nTheOptimalDesignResultIs:
\n"
);
printf("
\n\tx[%d]*=%f"
i+1,xx[i]);
\n\tf*=%f"
ff);
getch();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 鲍威尔 源程序