📄 单因素方差分析.cpp
字号:
#include<stdio.h>
#include<math.h>
main()
{
int n[100],r,i,j;
float x[100][100],y[100],sum,sun,Y,w,W,k,st,s1,s2,F,f,a;
int m=0;
printf("请输入水平数r:\n");/*输入样品水平数*/
scanf("%d",&r);
//printf("样品水平数r=%d\n",r);
for(i=0;i<r;i++)/*输入每个总体的容量*/
{printf("请输入从总体x[%d]中抽取的样本容量n[%d]:\n",i+1,i+1);
scanf("%d",&n[i]);
m=m+n[i];
}
//printf("样品水平数m=%d\n",m);/*输出样品总容量*/
//for(i=0;i<r;i++)/*输出每个样本容量*/
// printf("n[%d]=%d\n",i+1,n[i]);
for(i=0;i<r;i++)/*输入样本数据*/
{ printf("请输入总体x[%d]的样品:\n",i+1);
for(j=0;j<n[i];j++)
scanf("%f",&x[i][j]);
}
/*printf("数据表如下:\n");
for(i=0;i<r;i++)
{ printf("\n");
for(j=0;j<n[i];j++)
printf(" %f",x[i][j]);
}
printf("\n");*/
for(i=0;i<r;i++)/*求第i个总体的样本均值*/
{
sum=0;
for(j=0;j<n[i];j++)
sum=sum+x[i][j];
y[i]=sum/n[i];
}
/*for(i=0;i<r;i++)
{
printf("\n");
printf("总体x[%d]的样本均值为%f",i+1,y[i]);
}
printf("\n");*/
sum=0;
for(i=0;i<r;i++)
{
for(j=0;j<n[i];j++)
sum=sum+x[i][j];
}
Y=sum/m;
//printf("样本总均值为:%f",Y);
//printf("\n");
sum=0;/*组内平方和SA*/
for(i=0;i<r;i++)
{
w=y[i]-Y;
W=w*w;
k=W*n[i];
sum=sum+k;
}
//printf("SA=%f\n",sum);
s1=sum/(r-1);
w=W=k=sun=0;/*误差平方和Se*/
for(i=0;i<r;i++)
{
for(j=0;j<n[i];j++)
{
w=x[i][j]-y[i];
W=w*w;
sun=sun+W;
}
}
//printf("Se=%f\n",sun);
s2=sun/(m-r);
w=W=k=st=0;
for(i=0;i<r;i++)
{
for(j=0;j<n[i];j++)
{
w=x[i][j]-Y;
W=w*w;
st=W+st;
}
}
//printf("St=%f\n",st);
F=s1/s2;
printf("方差来源 平方和 自由度 均方 F 值\n");
printf("因 素 A %10.3f %d %10.3f %10.3f\n",sum,r-1,s1,F);
printf("误 差 %10.3f %d %10.3f\n",sun,m-r,s2);
printf("总 和 %10.3f %d\n",st,m-1);
printf("\n");
printf("请输入显著水平a=");
scanf("%f",&a);
printf("请输入在显著水平a=%f下F[%d,%d]:",1-a,r-1,m-r);
scanf("%f",&f);
if(F>f)
printf("拒绝H0!");
else
printf("接受H0!");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -