优化设计鲍威尔法程序c语言Word文件下载.docx
《优化设计鲍威尔法程序c语言Word文件下载.docx》由会员分享,可在线阅读,更多相关《优化设计鲍威尔法程序c语言Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
floatresult;
result=60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-x[0]*x[1];
returnresult;
}
/*多维进退法子程序*/
f3=f(x3);
}/*已完成*/
for(i=0;
i<
n;
i++)/*输出初始搜索区间*/
{
if(x1[i]<
x3[i])
a[i]=x1[i];
b[i]=x3[i];
}
else
a[i]=x3[i];
b[i]=x1[i];
/*多维黄金分割法子程序*/
voidmhjfgf(intn,floata[],floatb[],floatflag,floatx[])
inti;
floatx1[m],x2[m],f1,f2,sum;
i++)/*计算初始两试点*/
x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
f1=f(x1);
i++)
x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
f2=f(x2);
do
if(f1<
=f2)/*判断消去区间*/
{/*消去右*/
b[i]=x2[i];
x2[i]=x1[i];
f2=f1;
{/*消去左*/
x1[i]=x2[i];
f1=f2;
sum=0;
sum+=(b[i]-a[i])*(b[i]-a[i]);
}while(sqrt(sum)>
flag*0.1);
x[i]=(float)0.5*(b[i]+a[i]);
/*鲍威尔法子程序*/
voidmbwef(intn,floatx0[],floath,floatflag,floata[],floatb[],floatx[])
inti,j,k,r;
floatx1[m],x2[m],f0,f1,f2,fn[m],s[m][m],sum;
i++)
for(k=0;
k<
k++)
if(i==k)
s[i][k]=1;
s[i][k]=0;
k=1;
while
(1)
x1[i]=x0[i];
mjtf(n,x1,h,s[i],a,b);
mhjfgf(n,a,b,flag,x1);
fn[i]=f(x0)-f(x1);
x2[i]=2*x1[i]-x0[i];
for(i=1;
if(fn[0]<
fn[i])
fn[0]=fn[i];
r=i;
r=0;
f0=f(x0);
if(f2>
=f0||(f0-2*f1+f2)*(f0-f1-fn[0])*(f0-f1-fn[0])>
=0.5*fn[0]*(f0-f2)*(f0-f2))
{
sum+=(x1[i]-x0[i])*(x1[i]-x0[i]);
=f2)
x0[i]=x1[i];
x0[i]=x2[i];
for(i=r;
for(j=0;
j<
j++)
s[i][j]=s[i+1][j];
s[n][i]=x1[i]-x0[i];
mjtf(n,x1,h,s[n],a,b);
if(sqrt(sum)<
=flag)
break;
k+=1;
x[i]=x1[i];
/*鲍威尔法主程序*/
voidmain()
inti,n;
floath,flag,x0[m],a[m],b[m],x[m];
printf("
\n<
鲍威尔法>
\n"
);
请输入维数:
scanf("
%d"
&
n);
请输入初始点:
"
\nx0[%d]="
i);
%f"
x0[i]);
\n请输入初始步长:
h);
\n请输入精度:
flag);
mbwef(n,x0,h,flag,a,b,x);
\n极小点坐标为:
x[%d]=%f\n"
i,x[i]);
\n极小值为:
\n%f\n"
f(x));