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

上传人:b****2 文档编号:2469031 上传时间:2022-10-29 格式:DOCX 页数:12 大小:85.92KB
下载 相关 举报
实验设计四交通事故分析.docx_第1页
第1页 / 共12页
实验设计四交通事故分析.docx_第2页
第2页 / 共12页
实验设计四交通事故分析.docx_第3页
第3页 / 共12页
实验设计四交通事故分析.docx_第4页
第4页 / 共12页
实验设计四交通事故分析.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

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

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

实验设计四交通事故分析

北京信息科技大学

实验设计报告

 

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

题目交通事故分析

指导教师李春强

设计起止日期

设计地点

 

系别信息管理学院

专业___信息安全_______________

学生姓名____李继文______________

班级/学号信安1002/2010012713

成绩___________________

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.实验方法与步骤:

实验界面:

(1)使用内置的数据:

课设中提供的数据

显示如上图;

(2)使用手动输入:

结果为:

6.实验总结:

通过这次课设的实验,学会了cout中的精度的控制,并且对于c++stl中的vector容器的概念有了一定的了解,并且对于面向对象的操作有了很深的领悟!

 

附录:

代码如下:

#include

#include

#include

#include

#include

#include

usingnamespacestd;

structpoint//点的结构体

{

floatx;

inty;

};

boolcmp(pointa,pointb)//判断函数

{

returna.x

}

boolcmp1(pointa,pointb)//判断函数

{

returna.y

}

structlr//直线的结构体

{

floatm,b;

};

classtraf//具体的分析类

{

private:

vectorpp;

intn,d;

floatc,e,f;

vectorlinder;

public:

traf(vectorp)

{

pp=p;

}

voiddeal()

{

d=0;

c=0;

e=0;

f=0;

n=0;

sort(pp.begin(),pp.end(),cmp);//排序函数

vector:

:

iteratorir=max_element(pp.begin(),pp.end(),cmp1);//找出最大值的点

cout<<"最大点:

"<<(*ir).x<<""<<(*ir).y<

cout<<"----------------------------------------"<

for(vector:

:

iteratorip=pp.begin();ip!

=ir+1;ip++)

{

n++;

c+=(*ip).x;

d+=(*ip).y;

e+=pow((*ip).x,2);

f+=((*ip).x*(*ip).y);

}

lrlr1;

lr1.m=(n*f-c*d)/(n*e-c*c);

lr1.b=(d*e-c*f)/(n*e-c*c);

linder.push_back(lr1);

d=0;

c=0;

e=0;

f=0;

n=0;

for(vector:

:

iteratorip=ir;ip!

=pp.end();ip++)

{

n++;

c+=(*ip).x;

d+=(*ip).y;

e+=pow((*ip).x,2);

f+=((*ip).x*(*ip).y);

}

lr1.m=(n*f-c*d)/(n*e-c*c);

lr1.b=(d*e-c*f)/(n*e-c*c);

linder.push_back(lr1);

}

voiddisplay()

{

for(vector:

:

iteratorio=linder.begin();io!

=linder.end();io++)

{

cout<<"斜率:

"<

cout<<"截距:

"<

cout<<"直线方程为:

y="<

cout<<"------------------------------"<

}

}

};

classoperate

{

private:

vectorpt;

public:

operate(vectorxx)

{

pt=xx;

}

voidprint()

{

inty,k,i,o;

floatx;

pointpn;

/*vectorpt;*/

boolmybool=true;

pointpi[14]={1.4,3,2.0,6,2.3,4,4.5,7,6.2,10,6.7,15,7.0,11,8.5,18,9.0,13,12.7,17,13.1,15,17.7,16,18.5,11,20.3,5};

do

{

pt.clear();

co

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1