马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
总共包含三个文件:
mjtf.c
jtf.c
funct.c
本程序打包下载见本贴2楼
mjtf.c如下:
- #include "jtf.c"
- main()
- {double x0[]={0};
- double s[]={1};
- double a[1],b[1];
- jtf(x0,0.1,s,1,a,b);
- printf("a[]=%f,b[]=%f\n",a[0],b[0]);
- getch();
- }
复制代码
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]);
- }
复制代码 |