鲍威尔方法求函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); }