FR共轭梯度法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*min f(x)=x1^2-2*x1*x2+4*x2^2+x1-3*x2 初值,x=(1,1)*/
//FR共轭梯度法
#include
#include
#include
float buchang(float p[2])
{float a;
a=(p[0]*p[0]+p[1]*p[1])/(2*p[0]*p[0]-4*p[0]*p[1]+8*p[1]*p[1]);
return a;
}
float buchang1(float p[2],float g[2])
{float a;
a=-1*(p[0]*g[0]+p[1]*g[1])/(2*g[0]*g[0]-4*g[0]*g[1]+8*g[1]*g[1]);
return a;
}
main()
{float a=0,b=0,c=0,d=0,x[2],p[2],g[2]={0,0},e=0.000001,mo;
int i=0;
x[0]=1.0;
x[1]=1.0;
p[0]=2*x[0]-2*x[1]+1;
p[1]=-2*x[0]+8*x[1]-3;
g[0]=-p[0];
g[1]=-p[1];
a=buchang(g);
printf("\n\n");
while(!(p[0] { c=p[0]*p[0]+p[1]*p[1]; x[0]=x[0]+a*g[0]; x[1]=x[1]+a*g[1]; p[0]=2*x[0]-2*x[1]+1; p[1]=-2*x[0]+8*x[1]-3; d=p[0]*p[0]+p[1]*p[1]; b=d/c; g[0]=-p[0]+b*g[0]; g[1]=-p[1]+b*g[1]; a=buchang1(p,g); printf("di %d ci mo=%f x1=%f\tx2=%f\tbuchang a=%f\n",++i,b,x[0],x[1],a); } printf("\nthe x[1]=%f,x[2]=%f y=%f",x[0],x[1],x[0]*x[0]-2*x[0]*x[1]+4*x[1]*x[1]+x[0]-3*x[1]); system ("pause"); return 0; }