资源描述:
《共轭梯度法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#defineN10#defineepspow(10,-6)doublef(doublex[],doublep[],doublet){doubles;s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2);returns;}/*以下是进退法搜索区间源程序*/voidsb(double*a,double*b,doublex[],doublep[]){doublet0,t1,t,h,alpha,f0,f1;intk=0;t0=2.5; /*初始值*/h=1; /
2、*初始步长*/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);}}/*以下是黄金分割法程序源代码*/doublehjfg(doublex[
3、],doublep[]){doublebeta,t1,t2,t;doublef1,f2;doublea=0,b=0;double*c,*d;c=&a,d=&b;sb(c,d,x,p);/*调用进退法搜索区间*/printf("x1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]);printf("[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(
4、fabs(t1-t2)5、lex[N],g[N],p[N],t=0,f0,mod1=0,mod2=0,nanda=0;inti,k,n;printf("请输入函数的元数值n=");scanf("%d",&n);printf("请输入初始值:");for(i=0;ieps){ p[0]=-g[0];p[1]=-g[1];k=0; while(1) { t
6、=hjfg(x,p);/*调用黄金分割法求t的值*/ printf("p1=%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("x1=%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
7、(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("nanda=%lf,mod=%lf",nanda,mod2);