风花雪月 发表于 2006-10-11 16:48

黄金分割法优化子程序

本程序包含4个C文件
mhjfgf.c
funct.c
jtf.c
hjfgf.c


本程序由heizi友情提供

风花雪月 发表于 2006-10-11 16:49

mhjfgf.c代码如下:

#include "hjfgf.c"
main()
{double xx,a,b,ff;
double s[]={1},x0[]={0};
jtf(x0,0.1,s,1,a,b);
ff=gold(a,b,0.00001,1,xx);
printf("\nx=%f,,ff=%f",xx,ff);
getch();
}

风花雪月 发表于 2006-10-11 16:50

funct.c代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
double objf(double x[])
{double ff;
ff=8*pow(x,3)-2*x*x-7*x+3;
return(ff);
}



jtf.c代码如下:

#include "funct.c"
void jtf(double x0[],double h0,double s[],int n,double a[],double b[])
{int i;
double *x,h,f1,f2,f3;
for(i=0;i<3;i++)
x=(double *)malloc(n*sizeof(double));
h=h0;
for(i=0;i<n;i++)
*(x+i)=x0;
f1=objf(x);
for(i=0;i<n;i++)
*(x+i)=*(x+i)+h*s;
f2=objf(x);
if(f2>=f1)
{h=-h0;
    for(i=0;i<n;i++)
    *(x+i)=*(x+i);
   f3=f1;
    for(i=0;i<n;i++)
    {*(x+i)=*(x+i);
   *(x+i)=*(x+i);
    }
   f1=f2;
   f2=f3;
   }
   for(;;)
   {h=2*h;
   for(i=0;i<n;i++)
   *(x+i)=*(x+i)+h*s;
   f3=objf(x);
   if(f2<f3) break;
   else
    { for(i=0;i<n;i++)
       {*(x+i)=*(x+i);
      *(x+i)=*(x+i);
       }
      f1=f2;
      f2=f3;
    }
   }
   if(h<0)
    for(i=0;i<n;i++)
    {a=*(x+i);
   b=*(x+i);
    }
   else
    for(i=0;i<n;i++)
    {a=*(x+i);
   b=*(x+i);
   }
   for(i=0;i<3;i++)
   free(x);
}



hjfgf.c代码如下:

#include "jtf.c"
double gold(double a[],double b[],double eps,int n,double xx[])
{int i;
double f1,f2,*x,ff,q,w;
for(i=0;i<2;i++)
x=(double *)malloc(n*sizeof(double));
for(i=0;i<n;i++)
{*(x+i)=a+0.618*(b-a);
   *(x+i)=a+0.382*(b-a);
}
f1=objf(x);
f2=objf(x);
do
   {if(f1>f2)
   {for(i=0;i<n;i++)
      {b=*(x+i);
       *(x+i)=*(x+i);
       }
   f1=f2;
   for(i=0;i<n;i++)
      *(x+i)=a+0.382*(b-a);
   f2=objf(x);
   }
    else
   { for(i=0;i<n;i++)
       {a=*(x+i);
       *(x+i)=*(x+i);}
   f2=f1;
    for(i=0;i<n;i++)
   *(x+i)=a+0.618*(b-a);
    f1=objf(x);
   }
q=0;
for(i=0;i<n;i++)
   q=q+(b-a)*(b-a);
w=sqrt(q);
}while(w>eps);
for(i=0;i<n;i++)
   xx=0.5*(a+b);
ff=objf(xx);
for(i=0;i<2;i++)
free(x);
return(ff);
}

gmda191 发表于 2009-5-13 22:04

好帖,感谢,顶

如题:好帖,感谢,顶

sunshinexj 发表于 2009-5-28 15:47

这也行 不错 学习了 谢过

5526232 发表于 2011-5-28 12:43

这个怎么组合啊
我怎出现: fatal error C1083: Cannot open include file: 'hjfgf.c': No such file or directory
页: [1]
查看完整版本: 黄金分割法优化子程序