实验设计四交通事故分析.docx
《实验设计四交通事故分析.docx》由会员分享,可在线阅读,更多相关《实验设计四交通事故分析.docx(12页珍藏版)》请在冰点文库上搜索。
实验设计四交通事故分析
北京信息科技大学
实验设计报告
课程名称面向对象程序设计实验设计
题目交通事故分析
指导教师李春强
设计起止日期
设计地点
系别信安
专业___信安_______________
学生姓名___王鑫_______________
班级/学号_信安1102_王鑫__2011012245_
成绩___________________
1.课程设计目的:
通过本实验使学生利用面向对象程序设计软件开发方法,即软件开发过程划分为明显的几个阶段:
问题分析和功能定义、对象设计及实现、核心控制设计、编码与测试、进化等实现线性衰减和数值方法分析方面的应用。
2.课程设计内容:
创建与数据最符合的两条直线。
一条直线在到达事故数量顶点时的车辆密度之前一直增加。
另一条直线从该点开始一直降低。
图4-1给出了收集的示例数据(由圆代表)及数据最相符的直线。
编写一个程序,来创建与代表12月份(详细数据请参见3.课程设计要求)交通状况的一组(x,y)数据点最符合的直线。
这些点代表观测数据,x为车辆密度,y为事故数量。
程序共应输出4个值:
直线1的斜率(m1)
直线1的截距(b1)
直线2的斜率(m2)
直线2的截距(b2)
事。
。
。
。
。
。
故。
。
。
。
。
。
。
。
数。
。
。
。
量
车辆密度(每100m的车辆数量)
图4-1事故数量与车辆密度的关系
3.课程设计要求:
(1)问题描述
对于特定长度的高速公路,公路上的车辆密度(每100米车辆的数目)与事故发生的数量有关。
一般认为,事故的数量随某一点的车辆密度的增加而增加。
然而,当车辆密度超过某一特定值时,由于拥挤,车辆平均速度下降,事故的数量也随之下降。
为了预测事故发生频率,并帮助改进高速公路设计,我们希望由观测数据来推导车辆密度及事故数量之间的关系。
(2)解决方案
在此给出最佳直线的斜率及截距的方程。
n=numberofpoints
c=∑i=1nxi
d=∑i=1nyi
e=∑i=1nxi2
f=∑i=1nyixi
注意,c为所有数据点的x坐标值的和,d为所有数据点的y坐标值的和。
变量e为x坐标值的平方和,f为数据点的xy积的和。
最佳直线的斜率(m)和截距(b)为:
m=(nf-cd)/(ne-c2)
b=(de-cf)/(ne-c2)
(3)具体示例
12月份数据如表4-1所示。
利用该数据进行计算。
表4-112月份的数据
数据点
车辆密度(x)
事故数量(y)
0
1.4
3
1
2.0
6
2
2.3
4
3
4.5
7
4
6.2
10
5
6.7
15
6
7.0
11
7
8.5
18
8
9.0
13
9
12.7
17
10
13.1
15
11
17.7
16
12
18.5
11
13
20.3
5
注意,事故数量的最大值为18(在第7个点)。
因此,我们用点0-7来创建第一条直线,用点7-13来创建另一条直线。
对于第一条直线:
c=sumofthexvalue=1.4+2.0+…+7.0+8.5=38.6
d=sumoftheyvalue=3+6+…+11+18=74
为获取e的值,将x值的平方求和:
e=1.42+2.02+…+7.02+8.52=236.08
为了获取f的值,首先求每x,y的积,然后求和:
f=1.4(3)+2.0(6)+…7.0(11)+8.5(18)=449.4
对于第二条直线:
c=8.5+9.0+…+18.5+20.3=99.8
d=18+13+…+11+5
e=8.52+9.02+…+18.52+20.32=1553.78
f=8.5(18)+9.0(13)+…18.5(11)+20.3(5)=1270.6
将这些值带入给出的求m及b的方程:
m1=1.853
b1=0.3087
m2=-0.6403
b2=22.70
这样,最佳直线y=mx+b的方程为:
直线1:
y=1.853x+0.3087从x=1.4到x=8.5
直线2:
y=-0.6403x+22.70从x=8.5到x=20.3
(4)类及对象
程序分析:
首先,在交通事故分析中,分为事故数据(Traffic)的计算类及线形衰减(Linear_regress)类两部分。
其次,类应该由什么组成。
如:
Traffic类由数据点组成。
另外,我们需要事故数量最大值的数组下标及数据点的数量。
函数成员应能通过读输入文件来初始化这些数据、
找出事故数量最大值的数组下标,并且与Linear_regress类交互以获得两条直线。
Linear_regress类需知道它使用的点的数量,它需访问这些被计算的点,它需要通过这些点的线的数据。
所以,其数据成员应为数据点(或数据点数组的起始地址)、数据点的数据及创建的直线的斜率和截距。
在此,Linear_regress类仅需要由数据创建最佳直线,为简单起见,我们仅使用一个函数成员。
注意,这些数据使用了点和直线。
在程序application4.cpp中,我们描述了简单的仅包含数据成员的Point及Line结构。
在这个程序中,我们将其用作类,这意味Point及Line对象可作为Linear_regress及Traffic的数据成员。
第三,这些数据应如何交互?
Linear_regress类包含类型为Line的普通数据成员,及可被Traffic用来执行衰减的成员函数。
Traffic包含Point类型的数组,及指向Linear_regress类对象的指针。
4.实验条件:
(1)主要设备:
586或更高机型,256MB或更高的内存,40G或更大的硬盘。
(2)主要软件:
①操作系统可为Windows9X、WinMe、Win2000或更高版本等;
②开发环境为VC++6.0或者TC++3.0。
(3)参考书目:
①C++课堂教学与编程演练作者:
(美)奥瑞兹(DOrazio,T.B)著,侯普秀译清华大学出版社
②《数据结构及应用算法教程》严蔚敏等编著清华大学出版社2001年2月第1版
5.实验方法与步骤:
#include
#include
#include
#include
usingnamespacestd;
classLinear_regress//计算类
{
public:
Linear_regress()//无参构造
{
c=0;
n=0;
f=0;
d=0;
m1=0;
b1=0;
e=0;
m2=0,b2=0;
}
voidline(doubled1[],doubles1[],intnum,intsum)//计算函数,flag=1表示上升,flag=0表示下降
{
inti;
//上升线段
{
for(i=0;i<=num;i++)
{
c+=d1[i];
d+=s1[i];
e+=d1[i]*d1[i];
f+=d1[i]*s1[i];
}
n=num+1;
m1=(n*f-c*d)/(n*e-c*c);
b1=(d*e-c*f)/(n*e-c*c);
cout<<"上升曲线的斜率:
"<cout<<"上升曲线的截距:
"<}
c=0;
d=0;
e=0;
f=0;
{
for(i=num;i{
c+=d1[i];
d+=s1[i];
e+=d1[i]*d1[i];
f+=d1[i]*s1[i];
}
n=sum-num;
m2=(n*f-c*d)/(n*e-c*c);
b2=(d*e-c*f)/(n*e-c*c);
cout<<"下降曲线的斜率:
"<cout<<"下降曲线的截距:
"<}
cout<<"最佳方程组解是"<printf("y=%.2f+%.2f\n",m1,b1);
printf("y=%.2fx+%.2f\n",m2,b2);
}
private:
intn;
doublec,d,e,f,m1,b1,m2,b2;
};
classtraffic//数据类
{
public:
traffic():
j(0),c(0)//构造
{}
voidread()//读数据函数
{
inti=0;
stringtemp;
doublemax=0;
cout<<"--交通事故分析--"<cin>>temp;
ifstreamf;
f.open("C:
\\wangxin4.txt");
while(!
f.eof())
{
f>>temp;
i++;
}
i=i/3;
n=newint[i];
d=newdouble[i];
s=newdouble[i];
f.close();
f.open("C:
\\wangxin4.txt");
c=i;//c为总数
i=0;
cout<<"数据点"<<"车辆密度"<<"事故数量"<while(!
f.eof())
{
f>>n[i]>>d[i]>>s[i];
if(s[i]>max)//j为最大点的数据点
{
max=s[i];
j=i;
}
cout<i++;
}
cout<<"最高点:
"<}
voidcompute()
{
lin.line(d,s,j,c);
}
private:
int*n;
double*d;
double*s;
intj,c;
Linear_regresslin;//计算类对象计算
};
intmain()
{
inti;
traffictc;
tc.read();
pute();
cin>>i;
return0;
}
6.实验总结:
通过本实验我学会了利用面向对象程序设计软件开发方法,即软件开发过程划分为明显的几个阶段:
问题分析和功能定义、对象设计及实现、核心控制设计、编码与测试、进化等实现线性衰减和数值方法分析方面的应用。
本次课设的结果是:
对于特定长度的高速公路,公路上的车辆密度(每100米车辆的数目)与事故发生的数量有关。
一般认为,事故的数量随某一点的车辆密度的增加而增加。
然而,当车辆密度超过某一特定值时,由于拥挤,车辆平均速度下降,事故的数量也随之下降。
为了预测事故发生频率,并帮助改进高速公路设计,我们希望由观测数据来推导车辆密度及事故数量之间的关系
附录:
存储文件的格式
01.43
12.06
22.34
34.57
46.210
56.715
67.011
78.518
89.013
912.717
1013.115
1117.716
1218.511
1320.35
说明:
1.实验过程由学生记录实验的过程,包括画出流程图、操作过程、遇到哪些问题以及如何解决等;
2.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;
3.源程序(带注释)、代码、具体语句等,若表格空间不足时可作为附录另外附页。
4.程序测试后,将多组测试结果附在程序后;
5.提交报告时请将说明部分去掉。