欢迎来到天天文库
浏览记录
ID:9973909
大小:59.50 KB
页数:4页
时间:2018-05-17
《共轭梯度法求极小值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、应用共轭梯度法求解方程组的根。初始值分析:将方程组转化为优化问题中的极值问题然后应用共轭梯度法进行求解。令,只需求得,使得取得最小值。则有:与比较则有:回到题目问题中,则对应有也就是应用共轭梯度法求点使取得最小值。程序清单:#include#includedoublea,b,s[2];/*全局变量*/doubleE=1e-6;doubleF(doublex1,doublex2){doubley;y=2*x1*x1+2*x2*x2-12*x1-4*x2+20;return(y);}voidqujian(doublex1,doublex2)/*用前进后退法求a
2、的探索区间*/{doublea0=0,h=1,a1,a2,f1,f2,X1,X2,X3,X4;a1=a0;a2=a0+h;X1=x1+a1*s[0];X2=x2+a1*s[1];f1=F(X1,X2);X3=x1+a2*s[0];X4=x2+a2*s[1];f2=F(X3,X4);if(f1>f2){4while(1){h=h*2;a2=a2+h;f1=f2;X3=x1+a2*s[0];X4=x2+a2*s[1];f2=F(X3,X4);if(f1>f2){a1=a2-h;}else{a=a1;b=a2;break;}}}else{h=-h/4;while(1){a1=a1+h;f2=f1
3、;X1=x1+a1*s[0];X2=x2+a1*s[1];f1=F(X1,X2);if(f14、0];X4=x2+x02*s[1];X5=x1+x03*s[0];X6=x2+x03*s[1];f1=F(X1,X2);f2=F(X3,X4);f3=F(X5,X6);while(1){k1=(f3-f1)/(x03-x01);k2=((f2-f1)/(x02-x01)-k1)/(x02-x03);x0=(x01+x03-k1/k2)/2;X7=x1+x0*s[0];X8=x2+x0*s[1];f=F(X7,X8);if(fabs(x0-x02)<=E){xmin=x0;break;4}elseif(x025、=f2;x02=x0;f2=f;}}else{if(f26、];g[1]=4*x1-12;m2=g[1]*g[1]+g[2]*g[2];if(sqrt(g[1]*g[1]+g[2]*g[2])<=E)break;if(k+1==n){g[1]=4*x1-12;g[2]=4*x2-4;s[0]=-g[1];s[1]=-g[2];}else{b=m2/m1;s[0]=-g[1]+b*s[0];s[1]=-g[2]+b*s[1];k=k+1;}printf("最优解:X1=%fX2=%f",x1,x2);}}运行结果:最优解:X1=3.000000X2=1.00000044
4、0];X4=x2+x02*s[1];X5=x1+x03*s[0];X6=x2+x03*s[1];f1=F(X1,X2);f2=F(X3,X4);f3=F(X5,X6);while(1){k1=(f3-f1)/(x03-x01);k2=((f2-f1)/(x02-x01)-k1)/(x02-x03);x0=(x01+x03-k1/k2)/2;X7=x1+x0*s[0];X8=x2+x0*s[1];f=F(X7,X8);if(fabs(x0-x02)<=E){xmin=x0;break;4}elseif(x025、=f2;x02=x0;f2=f;}}else{if(f26、];g[1]=4*x1-12;m2=g[1]*g[1]+g[2]*g[2];if(sqrt(g[1]*g[1]+g[2]*g[2])<=E)break;if(k+1==n){g[1]=4*x1-12;g[2]=4*x2-4;s[0]=-g[1];s[1]=-g[2];}else{b=m2/m1;s[0]=-g[1]+b*s[0];s[1]=-g[2]+b*s[1];k=k+1;}printf("最优解:X1=%fX2=%f",x1,x2);}}运行结果:最优解:X1=3.000000X2=1.00000044
5、=f2;x02=x0;f2=f;}}else{if(f26、];g[1]=4*x1-12;m2=g[1]*g[1]+g[2]*g[2];if(sqrt(g[1]*g[1]+g[2]*g[2])<=E)break;if(k+1==n){g[1]=4*x1-12;g[2]=4*x2-4;s[0]=-g[1];s[1]=-g[2];}else{b=m2/m1;s[0]=-g[1]+b*s[0];s[1]=-g[2]+b*s[1];k=k+1;}printf("最优解:X1=%fX2=%f",x1,x2);}}运行结果:最优解:X1=3.000000X2=1.00000044
6、];g[1]=4*x1-12;m2=g[1]*g[1]+g[2]*g[2];if(sqrt(g[1]*g[1]+g[2]*g[2])<=E)break;if(k+1==n){g[1]=4*x1-12;g[2]=4*x2-4;s[0]=-g[1];s[1]=-g[2];}else{b=m2/m1;s[0]=-g[1]+b*s[0];s[1]=-g[2]+b*s[1];k=k+1;}printf("最优解:X1=%fX2=%f",x1,x2);}}运行结果:最优解:X1=3.000000X2=1.00000044
此文档下载收益归作者所有