首页 共轭梯度法c++程序

共轭梯度法c++程序

举报
开通vip

共轭梯度法c++程序共轭梯度法c++程序 共轭梯度法程序源代码 #include #include #define N 10 #define eps pow(10,-6) double f(double x[],double p[],double t) { double s; s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s; } /*以下是进退法搜索区间源程序*/ void sb(double *a,double *b,double x[],double p[...

共轭梯度法c++程序
共轭梯度法c++程序 共轭梯度法程序源代码 #include #include #define N 10 #define eps pow(10,-6) double f(double x[],double p[],double t) { double s; s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s; } /*以下是进退法搜索区间源程序*/ void sb(double *a,double *b,double x[],double p[]) { double t0,t1,t,h,alpha,f0,f1; int k=0; t0=2.5; /*初始值*/ h=1; /*初始步长*/ alpha=2; /*加步系数*/ f0=f(x,p,t0); t1=t0+h; f1=f(x,p,t1); while(1) { if(f1t1?t:t1; break; } } t1=t0+h; f1=f(x,p,t1); } } /*以下是黄金分割法程序源代码*/ double hjfg(double x[],double p[]) { double beta,t1,t2,t; double f1,f2; double a=0,b=0; double *c,*d; c=&a,d=&b; sb(c,d,x,p);/*调用进退法搜索区间*/ printf("\nx1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]); printf("\n[a,b]=[%lf,%lf]",a,b); beta=(sqrt(5)-1.0)/2; t2=a+beta*(b-a); f2=f(x,p,t2); t1=a+b-t2; f1=f(x,p,t1); while(1) { if(fabs(t1-t2)eps) { p[0]=-g[0]; p[1]=-g[1]; k=0; while(1) { t=hjfg(x,p);/*调用黄金分割法求t的值*/ printf("\np1=%lf,p2=%lf,t=%lf",p[0],p[1],t); x[0]=x[0]+t*p[0]; x[1]=x[1]+t*p[1]; g[0]=2*x[0]; g[1]=50*x[1]; /*printf("\nx1=%lf,x2=%lf,g1=%lf,g2=%lf",x[0],x[1],g[0],g[1]);*/ mod2=sqrt(pow(g[0],2)+pow(g[1],2)); /*求梯度的长度*/ if(mod2<=eps) break; else { if(k+1==n) { g[0]=2*x[0]; g[1]=50*x[1]; p[0]=-g[0]; p[1]=-g[1]; k=0; } else { nanda=pow(mod2,2)/pow(mod1,2); printf("\nnanda=%lf,mod=%lf",nanda,mod2); p[0]=-g[0]+nanda*p[0]; p[1]=-g[1]+nanda*p[1]; mod1=mod2; k++; } } printf("\n--------------------------"); } } printf("\n最优解为x1=%lf,x2=%lf",x[0],x[1]); printf("\n最终的函数值为%lf",f(x,g,t)); } main() { gtd(); } 运行结果如下: 请输入函数的元数值n=2 请输入初始值: 2 2 x1=2.000000,x2=2.000000,p1=-4.000000,p2=-100.000000 [a,b]=[-4.500000,1.500000] p1=-4.000000,p2=-100.000000,t=0.020030 nanda=0.001474,mod=3.842730 -------------------------- x1=1.919879,x2=-0.003022,p1=-3.845655,p2=0.003665 [a,b]=[-4.500000,1.500000] p1=-3.845655,p2=0.003665,t=0.499240 -------------------------- x1=-0.000026,x2=-0.001192,p1=0.000052,p2=0.059610 [a,b]=[-4.500000,1.500000] p1=0.000052,p2=0.059610,t=0.020000 nanda=0.000000,mod=0.000050 -------------------------- x1=-0.000025,x2=-0.000000,p1=0.000050,p2=0.000001 [a,b]=[-4.500000,1.500000] p1=0.000050,p2=0.000001,t=0.495505 -------------------------- x1=-0.000000,x2=0.000000,p1=0.000000,p2=-0.000023 [a,b]=[-4.500000,1.500000] p1=0.000000,p2=-0.000023,t=0.020007 最优解为x1=-0.000000,x2=-0.000000 最终的函数值为0.000000 Press any key to continue
本文档为【共轭梯度法c++程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:23KB
软件:Word
页数:7
分类:互联网
上传时间:2017-09-25
浏览量:60