实验设计四交通事故分析.docx

上传人:b****1 文档编号:2094595 上传时间:2023-05-02 格式:DOCX 页数:12 大小:25.59KB
下载 相关 举报
实验设计四交通事故分析.docx_第1页
第1页 / 共12页
实验设计四交通事故分析.docx_第2页
第2页 / 共12页
实验设计四交通事故分析.docx_第3页
第3页 / 共12页
实验设计四交通事故分析.docx_第4页
第4页 / 共12页
实验设计四交通事故分析.docx_第5页
第5页 / 共12页
实验设计四交通事故分析.docx_第6页
第6页 / 共12页
实验设计四交通事故分析.docx_第7页
第7页 / 共12页
实验设计四交通事故分析.docx_第8页
第8页 / 共12页
实验设计四交通事故分析.docx_第9页
第9页 / 共12页
实验设计四交通事故分析.docx_第10页
第10页 / 共12页
实验设计四交通事故分析.docx_第11页
第11页 / 共12页
实验设计四交通事故分析.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验设计四交通事故分析.docx

《实验设计四交通事故分析.docx》由会员分享,可在线阅读,更多相关《实验设计四交通事故分析.docx(12页珍藏版)》请在冰点文库上搜索。

实验设计四交通事故分析.docx

实验设计四交通事故分析

北京信息科技大学

实验设计报告

 

课程名称面向对象程序设计实验设计

题目交通事故分析

指导教师李春强

设计起止日期

设计地点

 

系别信安

专业___信安_______________

学生姓名___王鑫_______________

班级/学号_信安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.提交报告时请将说明部分去掉。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2