进退法优化子程序
本程序包含3个C文件mjtf.c
funct.c
jtf.c
本程序由heizi友情提供 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();
}
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);
}
进退法优化子程序
:handshake
页:
[1]