统计分析与预测程序1
河北工业大学计算机软件技术基础(VC)课程设计报告
一、题目:
统计分析与预测程序(14)
二、设计思路
1、总体设计
1)分析程序的功能
对实际生活中测量的数据,利用一元一次回归分析进行统计预测,在统计学上预找出一条直线能反映数据的趋势,从而可以进行规划与预测。
2)系统总体结构:
该程序分为:输入输出函数、数据初步分析(Xi样本和Yi样本求平均值m_x、m_y)、求直线系数和相关系数等四个模块
①;输入输出函数:数据的输入输出函数,对原始数据进行输入,并对计算好的方程和相关系数进行输出。
②;数据初步分析(Xi样本和Yi样本求平均值m_x、m_y):对原始数据整理得出其样本的平均值,为下一步求取一元一次方程的系数做好准备。
③;求直线系数和相关系数:利用数据初步分析模块计算出的样本平均值利用给出的数学方程进行分析和计算。
④;主函数:主函数作为中央模块调用其他的函数,使各个模块统筹工作实现程序的功能。
2、各功能模块的设计:说明各功能模块的实现方法。
①;输入输出函数:数据的输入利用循环的方式输入,在确定起始年份后设计两种方式(输入结束年份和时间跨度)求取结束年份(利用一般“起始年份一般要比时间跨度在数据上大”的大多数情况利用分支结构赋值)。另外设计整齐的输入界面和输入提示是输入更加合理。
②;数据初步分析(Xi样本和Yi样本求平均值):利用循环求取所给数据的和并以此求的样本的平均值
③;求直线系数和相关系数:利用公式a = My-bMx;;
利用循环的方式以此求得要素的值。对于相关系数同样采用以上方法并利用公式;求的。
④;主函数:在主函数中采用函数调用的方式调用各个函数,以实现程序的功能。
3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。
1)程序需要大量的数据输入,所以如何处理和存放这些数据就是该程序的一个难题,
2)程序设计要求采用多个cpp文件的方式,需要独立自主的学习,也是设计中的一个难题
4、你所设计的程序最终完成的功能
1)输入数据统计的起始年份和截至年份(或时间跨度),并按程序给出的格式输入原始数据,便可以输出预测的一元一次方程,并可以预测以后(1995年)的测量数据。并从数学基础理论上对所给数据所求方程进行可行性分析。
2)准备的测试数据及运行结果:
--------------------统计分析与预测程序------------------------------
起始的年分为 :1970
终止年份或者总的年份(总的年份小于出事年份):10
------------------请按以下格式输入原始统计数据--------------------------
序号 年份 平均寿命
NUM 1 1970 69
NUM 2 1971 70
NUM 3 1972 72
NUM 4 1973 68
NUM 5 1974 73
NUM 6 1975 71
NUM 7 1976 75
NUM 8 1977 74
NUM 9 1978 78
NUM 10 1979 77
--------------------------整理分析数据---------------------------------
对以上数据进行分析得 :
& 人均寿命平均值为 :72.7
& 其均方差为 :3.16386
& 理论预测方程式为 : Y=67.1765+0.964706x
& 并以此预测1995年的人均寿命为 :92.2588
---通过计算相关系数cor得出 :cor=0.86798 该方程能够反映实际------
Press any key to continue
三、程序清单
本程序包含main.cpp、input.cpp、output.cpp、abxy.cpp和shengming.h五个文件
1、main.cpp文件清单
#include
#include
#include"shengming.h"
double cor1(int [],double ,double ,int); //求相关系数的函数的原型声明 void main()
{
int t[100],n=0,q=0; //t[]存放数据,n表示长度,q为起始年份
double a,b,m_x,m_y; //a和b为方程系数, m_x为Xi的平均值 m_y为Yi放入平均值 input(t,n,q); //调用输入函数
m_x=m_x_(n); //给m_x赋值 以下同理
m_y=m_y_(t,n);
b=b_t(t,n,m_x,m_y);
a=a_t(m_x,m_y,b);
output(t,n,a,b,q); //调用输出函数
cout
double cor=cor1(t,m_y,m_x,n);
cout
switch(int(cor*100))//根据系数分析数据的可用性 转换cor为int型 为了分析方便乘以100
{
case 100: cout
break;
case 0: cout
break;
default : //对于在0和100之间的只进行分析 if(int(cor*100)>81)
cout
else cout
}
}
double cor1(int t[],double m_y,double m_x,int n) //求相关系数
{
double a1=0,b1=0,c1=0;
for(int i=1;i
{
a1+=(i-m_x)*(t[i-1]-m_y);
b1+=(i-m_x)*(i-m_x);
c1+=(t[i-1]-m_y)*(t[i-1]-m_y);
}
a1=a1/n;
b1=sqrt(b1/n);
c1=sqrt(c1/n);
double cor=a1/(b1*c1);
return cor; //返回double型的cor值
}
2、input.cpp文件清单
#include
void input(int t[],int &n,int &q)
{
int a,b,c,d,i; //a和q为起始年份 c为终止年份 d为年份长度 i为循环变量
cout
cout
cin>>a;
q=a;
cout
cin>>b;
if(b
{ c=b;
d=c-a+1;
}
n=d;
cout
cout
cout
for(i=0;i
{
cout
cin>>t[i];
cout
}
}
3、output.cpp文件清单
#include
#include
void output(int t[],int n,double a,double b,int q)
{
double sum1=0,sum2=0,d,e;
for(int i=0;i
sum1+=t[i];
d=sum1/n;
for(i=0;i
sum2+=(t[i]-d)*(t[i]-d);
e=sqrt(sum2/n); //输出数据
cout
cout
cout
cout
4、abxy.cpp文件清单 注:该个文件清单包括5个子函数
#include
double m_x_(int n) //求Xi的平均值 // 1 {
int i,sum=0;
for(i=1;i
sum+=i; //sum为Xi项的和
return sum/n; //返回平均值
}
double m_y_(int t[],int n) //求Yi的平均值 // 2
{
int i,sum=0;
for(i=0;i
sum+=t[i]; //sum为Yi项的和
return sum/n; //返回平均值
}
double a_t(double m_x,double m_y,double b)//求方程的系数a // 3 { 据
return m_y-b*m_x; //返回系数a
}
double b_t(int t[],int n,double m_x,double m_y) // 4 {
double c=0,d=0;
for(int i=1;i
{ c+=(i-m_x)*(t[i-1]-m_y);
d+=(i-m_x)*(i-m_x); // X样本方差公式
}
return c/d; //返回b值
}
double fun(double a,double b,int x,int q) //求解方程 // 5
{
return a+b*(x-q+1); //方程为 Y=a+bx
}
5、shengming.h文件清单
void input(int t[],int &n,int &q); //对所有的函数进行头文件声明
void output(int t[],int n,double a,double b,int q);
double m_x_(int n);
double m_y_(int t[],int n);
double a_t(double m_x,double m_y,double b);
double b_t(int t[],int n,double m_x,double m_y);
double fun(double a,double b,int x,int q);
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
本程序能够完成基本要求和创新要求,运行正常。
2、对课题提出更完善的方案
改程序应该能够对多个年份进行分析和预测,并对数据的准确性进行估计评价,并立足于数据和预测值联系实际指出实际意义。
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
通过本次课程设计,锻炼了自己对c++更深一步的了解。对编程有了更加明白和清楚的理解。经过这一次的初步具备了使用开发应用程序和解决实际问题的能力。
2、 收获和心得体会。
通过这次的课程设计明白了编程是一种严谨的工作,锻炼了自己的思维能力,并将有意识的培
养自己的思维向着严谨的方向发展。
日期: 2009年 6 月 21 日