各位还是要在理解的基础上再使用啊..
样本输出:
My=72.7
方差=82.5
a=67.4667
b=0.951515
回归方程: Y=67.4667 + 0.951515x
相关系数: cor=0.863825
相关系数大于0.81说明预测结果满足要求。
x=15 时的回归方程: Y=81.7394
1995年人均寿命预测约: 81岁
程序代码:
////////////////////////
// 统计分析与预测程序.函数版
// Nobi 2007-7-1
// 开发环境: Visual C++ 6.0 SP6 + Windows Server 2003 Enterprise Edition
// 免责声明: Nobi不对因完全依赖此程序所造成的考试问题承担任何相关责任.
// 敬请各位理解后再使用
////////////////////////
#include <iostream>
#include <cmath>
using namespace std;
//----------------------
// 样本空间
float xi[]={1,2,3,4,5,6,7,8,9,10};
float yi[]={69,70,72,68,73,71,75,74,78,77};
int n=10; //sample count
//----------------------
// 方差
float variance(float *x, float mx, int n);
//----------------------
// 样本均值
float x_aver(float *x, int n);
float y_aver(float *y, int n);
//----------------------
// 回归系数
float a_reg(float mx, float my, float b);
float b_reg(float *x, float *y, int n, float mx, float my);
//----------------------
// 回归方程
float regression(float a, float b, float x);
//----------------------
// 相关系数
float correlation(float *x, float *y, int n, float mx, float my);
//----------------------
// 主程序
void main(){
float mx=x_aver(xi,n);
float my=y_aver(yi,n);
float b=b_reg(xi,yi,n,mx,my);
float a=a_reg(mx,my,b);
cout<<"Mx="<<mx<<endl;
cout<<"My="<<my<<endl;
cout<<"方差="<<variance(xi,mx,n)<<endl;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"回归方程: Y="<<a<<" + "<<b<<"x"<<endl;
cout<<"相关系数: cor="<<correlation(xi,yi,n,mx,my)<<endl;
cout<<"相关系数大于0.81说明预测结果满足要求。"<<endl;
cout<<"x=15 时的回归方程: Y="<<regression(a,b,15)<<endl;
cout<<"1995年人均寿命预测约: "<<int(regression(a,b,15))<<"岁"<<endl;
}
//----------------------
// 方差
float variance(float *x, float mx, int n){
float sum=0, temp;
for(int i=0;i<n;++i){
temp=x[i]-mx;
temp=temp*temp;
sum+=temp;
}
return sum;
}
//----------------------
// 样本均值
float x_aver(float *x, int n){
float sum=0;
for(int i=0;i<n;++i)
sum+=x[i];
sum/=n;
return sum;
}
float y_aver(float *y, int n){
float sum=0;
for(int i=0;i<n;++i)
sum+=y[i];
sum/=n;
return sum;
}
//----------------------
// 回归系数
float a_reg(float mx, float my, float b){
return my-b*mx;
}
float b_reg(float *x, float *y, int n, float mx, float my){
float sum=0;
for(int i=0;i<n;++i)
sum+=(x[i]-mx)*(y[i]-my);
return sum/variance(x,mx,n);
}
//----------------------
// 回归方程
float regression(float a, float b, float x){
return a+b*x;
}
//----------------------
// 相关系数
float correlation(float *x, float *y, int n, float mx, float my){
//和计算b系数类似
float sum=0;
for(int i=0;i<n;++i)
sum+=(x[i]-mx)*(y[i]-my);
sum/=n;
//计算分母
float x_vari=variance(x,mx,n);
float y_vari=variance(y,my,n);
return sum/(sqrt(x_vari/n)*sqrt(y_vari/n));
}