//利用最小二乘法进行线形拟合#include"stdio.h"#include"math.h"#define max_size 100void main(){ float data[max_size][2]; //用data数组来存放x,y的值. float x_sum=0,y_sum=0; float x_avg,y_avg; float x,y; float Lxy=0,Lxx=0,Lyy=0; float r; float a,b; int i; int count=0;next: printf("输入至少2组x,y的值,输入格式为 x,y"); printf("输入 -999,-999 表示输入结束!\n"); while(1) {scanf("%f,%f",&x,&y);//实数最好不直接用"=="或"!="比较大小。if(fabs(x+999)==0&&fabs(y+999)==0) break;data[count][0]=x;data[count][1]=y;count++; }
for(i=0;i0.5){
printf("数据的线形关系较好。\n"); a=Lxy/Lxx; b=y_avg-a*x_avg; } else {printf("数据的线形关系不好!请重新输入数据!\n");goto next; } printf("线形拟合的结果为:\n"); if(fabs(b)==0)printf("y=%3.1fx\n",a); else if(b>0)
printf("y=%3.1fx+%3.2f\n",a,b); else if(b<0)printf("y=%3.1fx%3.2f\n",a,b); printf("相关系数为:%3.1f\n",r);} |