• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2024-02-12
  • 语言: 其他
  • 标签: C  科学计算  

资源简介

使用最小二乘法拟合y=ae^(bx)型曲线,包括了求对数后拟合和直接拟合两种方法,后者的拟合精确度最高,并给出了均方误差和最大偏差点。

资源截图

代码片段和文件信息

#include
#include
#define N 19
double way_of_line(double *adouble *bdouble *pAdouble *pB);
double way_of_two(double *adouble *bdouble *pAdouble *pB);
double f(double *adouble *bdouble x);
double D(double *adouble *bdouble Adouble B);
double Dmax(double *adouble *bdouble Adouble Bint *p);
//double way_of_newton(double *adouble *bdouble *pxdouble *py);
 
int main(void)
{
int i;
int max1=0max2=0max3=0;
double x[N]y[N];
double ab;
double A_lineB_lineA_twoB_twoA_dieB_die;
double *pA_line*pB_line*pA_two*pB_two*pA_die*pB_die;
double Dmax1Dmax2Dmax3;
FILE *fp;
if((fp=fopen(“Points.txt““r“))==NULL){
printf(“File open error!“);
return 0;
}

//读取点的坐标数据 
for(i=0;i fscanf(fp“%lf%lf“&x[i]&y[i]);
}
if(fclose(fp)){
printf(“Can not close the Points!“);
return 0;
}

pA_line=&A_line;
pB_line=&B_line;
way_of_line(xypA_linepB_line);
pA_two=&A_two;
pB_two=&B_two;
way_of_two(xypA_twopB_two);
/*pA_die=&A_die;
pB_die=&B_die;
way_of_newton(xypA_diepB_die);*/

//输出结果
if((fp=fopen(“result.txt““w“))==NULL){
printf(“File open error!“);
return 0;
}
fprintf(fp“方法一(取对数)   :a=%-12.6f  b=%.6f\n“exp(A_line)B_line);
fprintf(fp“均方误差           :sqrt(D)=%f\n“D(xyA_lineB_line));
Dmax1=Dmax(xyA_lineB_line&max1);
fprintf(fp“最大偏差(绝对值) :△(max)=%f  (x=%d)\n\n“Dmax1max1);
fprintf(fp“方法二(二分法)   :a=%-12.6f  b=%.6f\n“A_twoB_two);
fprintf(fp“均方误差           :sqrt(D)=%f\n“D(xyA_twoB_two));
Dmax2=Dmax(xyA_twoB_two&max2);
fprintf(fp“最大偏差(绝对值) :△(max)=%f  (x=%d)\n\n“Dmax2max2);
/*fprintf(fp“方法三(迭代法)   :a=%-12.6f  b=%.6f\n“A_dieB_die);
fprintf(fp“均方误差           :sqrt(D)=%f\n“D(xyA_dieB_die));
Dmax2=Dmax(xyA_twoB_two&max3);
fprintf(fp“最大偏差(绝对值) :△(max)=%f  (x=%d)\n\n“Dmax3max3);*/
//fprintf(fp“均方误差           :sqrt(D)=%f\n“D(xy0.2411870.308055));
//fprintf(fp“均方误差           :sqrt(D)=%f\n“D(xy0.236580.30905));
if(fclose(fp)){
printf(“Can not close the result!“);
return 0;
}

评论

共有 条评论