FR共轭梯度法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档