📄 hjfgc.txt.bak
字号:
c程序2007-05-20 09:39
#include <stdio.h>
#include <math.h>
#define N 100
double F(double x[],double p[],double t)
{
double f;
f=(0.5*(x[0]+t*p[0])*(x[0]+t*p[0])+(x[1]+t*p[1])*(x[1]+t*p[1]));
return f;
}
double HJFC(double x[],double p[])
{
double a=-1,b=1,x1,x2,f1,f2,e=0.00001,y;
x2=a+0.618*(b-a);
f2=F(x,p,x2);
x1=a+0.382*(b-a);
f1=F(x,p,x1);
while(fabs(b-a)>e)
{
if(f1<f2)
{
b=x2;x2=x1;f2=f1;
x1=a+0.382*(b-a);
f1=F(x,p,x1);
}
else if(f1==f2)
{
a=x1;b=x2;
x2=a+0.618*(b-a);
f2=F(x,p,x2);
x1=a+0.382*(b-a);
f1=F(x,p,x1);
}
else
{
a=x1;x1=x2;f1=f2;
x2=a+0.618*(b-a);
f2=F(x,p,x2);
}
}
y=0.5*(b+a);
return y;
}
main()
{
int k=1;
double eps,bita,arph,g[4],x[2],p[4];
eps=0.001;
x[0]=1.0,x[1]=1.0;
printf("x[0]=%f\n",x[0]);
g[0]=x[0];
g[1]=2*x[1];
printf("过程\n\n");
while((sqrt(g[0]*g[0]+g[1]*g[1])>eps)&&(k<N))
{
if(k==1)
{
p[0]=-g[0];
p[1]=-g[1];
bita=0;
}
else
{
bita=(g[0]*g[0]+g[1]*g[1])/(g[2]*g[2]+g[3]*g[3]);
p[0]=-g[0]+bita*p[0];
p[1]=-g[1]+bita*p[1];
}
arph=HJFC(x,p);
x[0]=x[0]+arph*p[0];
x[1]=x[1]+arph*p[1];
g[2]=g[0];
g[3]=g[1];
g[0]=x[0];
g[1]=2*x[1];
printf("第%d次迭代:\n\n",k);
printf("步长buchan=%f\t",arph);
printf("bb=%f\t\n",bita);
printf("x[0]=%f\tx[1]=%f\n",x[0],x[1]);
k++;
}
printf("最后结果为:\n");
printf("x[0]=%f\nx[1]=%f\n",x[0],x[1]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -