资源描述
精选优质文档-倾情为你奉上#includedouble minfun(double x1,double x2) double f; f=x1*x1+2*x2*x2-4*x1-8*x2+15;return f;double g1(double x1,double x2) double f;f=9-x1*x1-x2*x2; return f;double g2(double x1,double x2) double f;f=x1+0*x2; return f;double g3(double x1,double x2) double f;f=0*x1+x2; return f;int main() double x02,h0,e,x12,x22,a0;double e12=1,0,e22=0,1;double fx0,fx1,fx2,fx11100,fx22100; int i,j,k;h0=0.5;e=0.0001;printf(请输入初始点x0:);scanf(%lf%lf,&x00,&x01);printf(%lf %lfn,x00,x01);if(g1(x00,x01)=0 & g2(x00,x01)=0 & g3(x00,x01)=0)fx0=minfun(x00,x01); printf(fx0=%lfn,fx0); else printf(请重新输入初始点x0:); scanf(%lf%lf,&x00,&x01); /实现初始点的判断;for(k=0;k+)for(i=0;i=0 & g2(x10,x11)=0 & g3(x10,x11)=0) fx1=minfun(x10,x11); printf(fx1=%lfn,fx1); if(fx1fx0) a0=h0; else a0=-h0; else a0=-h0;/首次加大步长;for(j=0;)for(i=0;i=0 & g2(x10,x11)=0 & g3(x10,x11)=0) fx11j=minfun(x10,x11);printf(fx1=%lfn,fx11j);if(fx11jfx0) fx0=fx11j;x00=x10; x01=x11;a0=2*a0;j+; /实现X方向的多次搜索; else break;elsebreak; for(i=0;i=0 & g2(x20,x21)=0 & g3(x20,x21)=0) fx2=minfun(x20,x21);printf(fx2=%lfn,fx2);if(fx2fx0) a0=a0; else a0=-a0; else a0=-a0;/Y正反方向;for(j=0; ;)for(i=0;i=0 & g2(x20,x21)=0 & g3(x20,x21)=0) fx22j=minfun(x20,x21);printf(fx2=%lfn,fx22j);if(fx22je)h0=0.5*h0;elsebreak; printf(%lf %lfn,x00,x01);printf(fxmin=%lfn,fx0); /输出结果,开始判断出去.专心-专注-专业
展开阅读全文