www.pudn.com > powell4.rar > powell.cpp
#include#include double fxy1(double *p) { return (10*(*p+*(p+1)-5)*(*p+*(p+1)-5)+(*p-*(p+1))*(*p-*(p+1))); } double fxy2(double *p) { return ((*p-2)*(*p-2)+(*(p+1)-3)*(*(p+1)-3)+(*(p+2)-10)*(*(p+2)-10)); } double fxy(double *p) { return ((*p-2)*(*p-2)+(*(p+1)-3)*(*(p+1)-3)+1.0/(*p)+1.0/(*(p+1))); } double fxy4(double *p) { return(*p); } class powell { private: int n; double jing; double h; double kkk[6]; public: void tansuo(double *b,double *e1,int ii) { int j; double h0; double yy2; double x1,x2,x3,y1,y2,y3,xx,yy; h0 = h; double *pm = new double [n]; //临时存放前一分量 double *pt = new double [n]; //临时存放探索分量 double *ee = new double [n]; //临时存放方向向量 double *p1 = new double [n]; //临时存放区间分量 double *p2 = new double [n]; //临时存放区间分量 double *p3 = new double [n]; //临时存放区间分量 double aa,bb,cc; //用于探索区间 for(j=0;j bb) { for(j=0;j cc) { h = h*2; for(j=0;j jing*100) { xx2 = xx; xx = 0.5*(x1+x3-((y3-y1)/(x3-x1)*(x2-x3))/((y2-y1)/(x2-x1)-(y3-y1)/(x3-x1))); //二次插值公式 yy2 = y2; for(j=0;j 1e+010||yy<-1e+010||yy2>1e+010||yy2<-1e+010) { xx = xx2; break; } } delete zx; for(j=0;j jing) { for(i=1;i maxfc) { maxfc = *(fc+i); m = i; } } delete fc; delete fx; int some; some = (F3>F0)&&(((F0-2*F2+F3)*(F0-F2-maxfc)*(F0-F2-maxfc))<(0.5*maxfc*(F0-F3)*(F0-F3))); if(0) { h = 10; for(i=m;i bb) { for(i=0;i cc) { h = h*2; for(i=0;i jing*jing) { xx2 = xx; xx = 0.5*(x1+x3-((y3-y1)/(x3-x1)*(x2-x3))/((y2-y1)/(x2-x1)-(y3-y1)/(x3-x1))); //二次插值公式 yy2 = y2; for(j=0;j 1e+010||yy<-1e+010||yy2>1e+010||yy2<-1e+010) { xx = xx2; break; } } delete zx; for(i=0;i F3) for(i=0;i