funct.c代码如下:
- #include "stdio.h"
- #include "stdlib.h"
- #include "math.h"
- double objf(double x[])
- {double ff;
- ff=3*pow(x[0],3)-8*x[0]+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[3],h,f1,f2,f3;
- for(i=0;i<3;i++)
- x[i]=(double *)malloc(n*sizeof(double));
- h=h0;
- for(i=0;i<n;i++)
- *(x[0]+i)=x0[i];
- f1=objf(x[0]);
- for(i=0;i<n;i++)
- *(x[1]+i)=*(x[0]+i)+h*s[i];
- f2=objf(x[1]);
- if(f2>=f1)
- {h=-h0;
- for(i=0;i<n;i++)
- *(x[2]+i)=*(x[0]+i);
- f3=f1;
- for(i=0;i<n;i++)
- {*(x[0]+i)=*(x[1]+i);
- *(x[1]+i)=*(x[2]+i);
- }
- f1=f2;
- f2=f3;
- }
- for(;;)
- {h=2*h;
- for(i=0;i<n;i++)
- *(x[2]+i)=*(x[1]+i)+h*s[i];
- f3=objf(x[2]);
- if(f2<f3) break;
- else
- { for(i=0;i<n;i++)
- {*(x[0]+i)=*(x[1]+i);
- *(x[1]+i)=*(x[2]+i);
- }
- f1=f2;
- f2=f3;
- }
- }
- if(h<0)
- for(i=0;i<n;i++)
- {a[i]=*(x[2]+i);
- b[i]=*(x[0]+i);
- }
- else
- for(i=0;i<n;i++)
- {a[i]=*(x[0]+i);
- b[i]=*(x[2]+i);
- }
- for(i=0;i<3;i++)
- free(x[i]);
- }
复制代码 |