鲍威尔方法求函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本实验用鲍威尔方法求函数f(x)=(x1-5)2+(x2-6)2 的最优解#include

#include

#include

const MAXN = 10;

double xkk[MAXN],xk[MAXN],sk[MAXN];

int N;

double F(double *x)

{

return 4*pow(x[0]-5,2.0)+pow(x[1]-6,2.0);

}

double f(double x)

{

for (int i=0; i

return F(xkk);

}

/*

无约束坐标轮换法

x0--初始点

e1--一维搜索精度

e2--求解精度

*/

double nc_trans(double *x0,double e1,double e2)

{

int i,j,k=1;

double a,b,ax,ay,d;

for (;;) {

for (j=0; j

for (i=0; i

for (j=0; j

else sk[j]=0;

find_ab(0,1,&a,&b);

search_gold(a,b,e2,&ax,&ay);

for (j=0; j

}

d=0;

for (j=0; j

d+=(x0[j]-xkk[j])*(x0[j]-xkk[j]);

d=sqrt(d);

printf("k=%d;",k);

for (j=0; j

printf(",x[%d]=%lf;",j+1,xkk[j]);

printf("d=%lf\n",d);

if (d<=e1) break;

for (j=0; j

k++;

}

for (j=0; j

return F(xkk);

}

/*

鲍威尔法

x0--初始点

e1--一维搜索精度

e2--求解精度

*/

double nc_powell(double *x0,double e1,double e2) {

int i,j,k=1,m;

double a,b,ax,ay,d;

double ss[MAXN][MAXN],s1[MAXN],

ff[MAXN],x[MAXN],xn[MAXN],

xn1[MAXN],f0,f1,f2,f3;

for (i=0; i

for (;;) {

for (j=0; j

for (i=0; i

for (j=0; j

find_ab(0,1,&a,&b);

search_gold(a,b,e2,&ax,&ay);

for (j=0; j

ff[i]=F(xk);

}

for (j=0; j

for (j=0; j

sk[j]=xkk[j]-x0[j]; s1[j]=sk[j];

}

find_ab(0,1,&a,&b);

search_gold(a,b,e2,&ax,&ay);

for (j=0; j

d=0;

for (j=0; j

d=sqrt(d);

printf("k=%d;",k);

for (j=0; j

printf("x[%d]=%lf;",j+1,x0[j]);

printf("d=%lf\n",d);

if (d<=e1) {

for (j=0; j

break;

}

f0=F(x0); d=f0-ff[0]; m=0;

for (j=1; j

m=j; d=ff[j-1]-ff[j];

}

for (j=0; j

f1=F(x0); f2=F(xn); f3=F(xn1);

if (0.5*(f1-2*f2+f3)>=d) {

if (f2

else for (j=0; j

} else {

for (i=m+1; i

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

for (j=0; j

for (j=0; j

}

k++;

}

for (j=0; j

return F(xkk);

}

相关文档
最新文档