⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hjfgc.txt.bak

📁 利用黄金分割法求解线性方程组逼近问题。转载
💻 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 + -