📄 线性回归.c
字号:
#include <stdio.h>
#include<math.h>
main()
{ float x[100],y[100],x1,y1,Lxx,Lxy,Lyy,U,Qe,Y0,F,h,C0,C1,r,o,t,v,s;
float b[100],d[100],e[100],sum,sun,V;
int i,n;
printf("输入测量数据的个数:");scanf("%d",&n);
printf("输入样本x的数据:\n");
sum=0;
for(i=0;i<n;i++)
{
scanf("%f",&x[i]);
sum=sum+x[i];
}
printf("输入样本y的数据:\n");
sun=0;
for(i=0;i<n;i++)
{
scanf("%f",&y[i]);
sun=sun+y[i];
}
x1=sum/n;
y1=sun/n;
Lxx=0;
for(i=0;i<n;i++)
{
b[i]=(x[i]-x1)*(x[i]-x1);
Lxx=Lxx+b[i];
}
Lyy=0;
for(i=0;i<n;i++)
{
d[i]=(y[i]-y1)*(y[i]-y1);;
Lyy=Lyy+d[i];
}
Lxy=0;
for(i=0;i<n;i++)
{
e[i]=(x[i]-x1)*(y[i]-y1);
Lxy=Lxy+e[i];
}
U=Lxy*Lxy/Lxx;
Qe=Lyy-U;
F=U*(n-2)/Qe;
h=Qe/(n-2);
C1=Lxy/Lxx;
C0=y1-C1*x1;
printf("方差来源 平方和 自由度 均方 F\n");
printf("回 归 %10.3f 1 %10.3f %10.3f\n",U,U,F);
printf("剩 余 %10.3f %d %10.3f\n",Qe,n-2,h);
printf("总 和 %10.3f %d\n",Lyy,n-1);
printf("\n");
printf("回归方程为:\n");
printf("Y=%.3f+%.3fx\n",C0,C1);
printf("请输入要预测Y0时的x值:\n");
scanf("%f",&r);
Y0=C0+C1*r;
printf("预测值Y0=%.3f\n",Y0);
s=sqrt(Qe/(n-2));
printf("请输入显著水平a:\n");
scanf("%f",&o);
printf("请输入在显著水平%.3f下的t[%d]:\n",1-o/2,n-2);
scanf("%f",&t);
V=1+1/n+(r-x1)*(r-x1)/Lxx;
v=s*t*sqrt(V);
printf("y在x=%f下,预测区间为[%.3f,%.3f]!",r,Y0-v,Y0+v);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -