约束坐标轮换法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.hdoubleminfun(doublex1,doublex2){doublef;f=x1*x1+2*x2*x2-4*x1-8*x2+15;returnf;}doubleg1(doublex1,doublex2){doublef;f=9-x1*x1-x2*x2;returnf;}doubleg2(doublex1,doublex2){doublef;f=x1+0*x2;returnf;}doubleg3(doublex1,doublex2){doublef;f=0*x1+x2;returnf;}intmain(){doublex0[2],h0,e,x1[2],x2[2],a0;doublee1[2]={1,0},e2[2]={0,1};doublefx0,fx1,fx2,fx11[100],fx22[100];inti,j,k;h0=0.5;e=0.0001;printf(请输入初始点x0:);scanf(%lf%lf,&x0[0],&x0[1]);printf(%lf%lf\n,x0[0],x0[1]);if(g1(x0[0],x0[1])=0&&g2(x0[0],x0[1])=0&&g3(x0[0],x0[1])=0){fx0=minfun(x0[0],x0[1]);printf(fx0=%lf\n,fx0);}else{printf(请重新输入初始点x0:);scanf(%lf%lf,&x0[0],&x0[1]);}//实现初始点的判断;for(k=0;;k++){for(i=0;i2;i++)x1[i]=x0[i]+h0*e1[i];printf(%lf%lf\n,x1[0],x1[1]);if(g1(x1[0],x1[1])=0&&g2(x1[0],x1[1])=0&&g3(x1[0],x1[1])=0){fx1=minfun(x1[0],x1[1]);printf(fx1=%lf\n,fx1);if(fx1fx0)a0=h0;elsea0=-h0;}elsea0=-h0;//首次加大步长;for(j=0;;){for(i=0;i2;i++)x1[i]=x0[i]+a0*e1[i];printf(x1[0]=%fx1[1]=%f\n,x1[0],x1[1]);if(g1(x1[0],x1[1])=0&&g2(x1[0],x1[1])=0&&g3(x1[0],x1[1])=0){fx11[j]=minfun(x1[0],x1[1]);printf(fx1=%lf\n,fx11[j]);if(fx11[j]fx0){fx0=fx11[j];x0[0]=x1[0];x0[1]=x1[1];a0=2*a0;j++;}//实现X方向的多次搜索;elsebreak;}elsebreak;}for(i=0;i2;i++)x2[i]=x0[i]+a0*e2[i];printf(x2[0]=%fx2[1]=%f\n,x2[0],x2[1]);if(g1(x2[0],x2[1])=0&&g2(x2[0],x2[1])=0&&g3(x2[0],x2[1])=0){fx2=minfun(x2[0],x2[1]);printf(fx2=%lf\n,fx2);if(fx2fx0)a0=a0;elsea0=-a0;}elsea0=-a0;//Y正反方向;for(j=0;;){for(i=0;i2;i++)x2[i]=x0[i]+a0*e2[i];printf(x2[0]=%fx2[1]=%f\n,x2[0],x2[1]);if(g1(x2[0],x2[1])=0&&g2(x2[0],x2[1])=0&&g3(x2[0],x2[1])=0){fx22[j]=minfun(x2[0],x2[1]);printf(fx2=%lf\n,fx22[j]);if(fx22[j]fx0){fx0=fx22[j];x0[0]=x2[0];x0[1]=x2[1];a0=2*a0;j++;}//实现Y方向的多次搜索;elsebreak;}elsebreak;}if(h0e)h0=0.5*h0;elsebreak;}printf(%lf%lf\n,x0[0],x0[1]);printf(fx[min]=%lf\n,fx0);}//输出结果,开始判断出去.

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功