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

进退法优化子程序

本程序包含3个C文件
mjtf.c
funct.c
jtf.c

本程序由heizi友情提供

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

mjtf.c代码如下:


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

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

funct.c代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
double objf(double x[])
{double ff;
ff=3*pow(x,3)-8*x+9;
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);
}

kohanlam 发表于 2007-5-16 18:11

进退法优化子程序

:handshake
页: [1]
查看完整版本: 进退法优化子程序