最小二乘法拟合C语言实现
#include
#include
#include
#include
float average(int n,float *x)
{int i; float av; av=0; for(i=0;i
{int i; float a; a=0; for(i=0;i
float shpf(int n,float *x) {int i; float a,b;
a=0; for(i=0;i
float dcj(int n,float *x,float *y)
{int i; float a; a=0; for(i=0;i
//两数先相加,再相乘
float djc(int n,float *x,float *y)
{int i; float a=0,b=0; for(i=0;i
float xsa(int n,float *x,float *y)
{float a,b,c,d,e; a=spfh(n,x); b=shpf(n,x);
c=dcj(n,x,y); d=djc(n,x,y); e=(c-d)/(a-b);
//printf("%f %f %f %f",a,b,c,d);
return(e); } float he(int n,float *y)
{int i; float a;
a=0; for(i=0;i
float xsb(int n,float *x,float *y,float a)
{ float b,c,d;
b=he(n,y); c=he(n,x); d=(b-a*c)/n; return(d);
} void main()
{ int n,i; float *x,*y,a,b;
printf("请输入将要输入的有效数值组数n的值");
scanf("%d",&n);
printf("n=%d\n",n);
x=(float*)calloc(n,sizeof(float));
if(x==NULL) {printf("内存分配失败"); exit(1); }
y=(float*)calloc(n,sizeof(float));
if(y==NULL) {printf("内存分配失败"); exit(1);
} printf("请输入x的值");
for(i=0;i
for(i=0;i
//y[0]=15;y[1]=18;y[2]=19;y[3]=21;y[4]=22.6;y[5]=23.8;y[6]=26; for(i=0;i
printf("y[%d]=%5.4f\n",i,*(y+i));
} a=xsa(n,x,y); b=xsb(n,x,y,a);
printf("经最小二乘法拟合得到的一元线性方程为:\n");
printf("f(x)=%5.4fx+%5.4f\n",a,b);
}