最小二乘法实验c语言实现,最小二乘法拟合C语言实现

拟合直线

#include

#include

#include

#include

float average(int n,float *x)

{int i; float av; av=0; for(i=0;i

av=av/n; return(av); } //平方和 float spfh(int n,float *x)

{int i; float a; a=0; for(i=0;i

a+=(*(x+i))*(*(x+i)); return(a); } //和平方

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

a+=(*(x+i))*(*(y+i)); return(a); }

//两数先相加,再相乘

float djc(int n,float *x,float *y)

{int i; float a=0,b=0; for(i=0;i

{a=a+*(x+i); b=b+*(y+i); } a=a*b/n; return(a); } //系数a

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

return(a); }

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

printf("请输入y的值,请注意与x的值一一对应");

for(i=0;i

//x[0]=0.1;x[1]=0.3;x[2]=0.4;x[3]=0.55;x[4]=0.7;x[5]=0.8;x[6]=0.95;

//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("x[%d]=%5.4f ",i,*(x+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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值