首页 > 精品范文库 > 6号文库
数据分析实验报告册(最终五篇)
编辑:心上人间 识别码:15-918032 6号文库 发布时间: 2024-02-20 17:18:37 来源:网络

第一篇:数据分析实验报告册

《数据分析》

实验报告册

15-20 16 学年

目录

实验一 网上书店的数据库创建及其查询

实验 1-1 “响当当”网上书店的数据库创建

实验1-2 “响当当”网上书店库存、图书和会员信息查询

实验1-3 “响当当”网上书店会员分布和图书销售查询

实验二 企业销售数据的分类汇总分析

实验2-1 Northwind公司客户特征分析

实验2-2 “北风”贸易公司销售业绩观测板

实验三 餐饮公司经营数据时间序列预测

实验3-1 “美食佳”公司半成品年销售量预测

实验3-2 “美食佳”公司月管理费预测

实验3-3 “美食佳”华东分公司销售额趋势预测

实验3-4 “美食佳”公司会员卡发行量趋势预测

实验3-5 “美食佳”火锅连锁店原料年度采购成本预测

实验四 住房建筑许可证数量的回归分析

实验4-1 “家家有房”公司建筑许可证一元线性回归分析

实验4-2 “家家有房”公司建筑许可证一元非线性回归分析

实验4-3 “家家有房”公司建筑许可证多元线性回归分析

实验4-4 “家家有房”公司建筑许可证多元非线性回归分析

实验五 手机用户消费习惯聚类分析

实验六 新产品价格敏感度测试模型分析

实验一 网上书店的数据库创建及其查询

实验 1-1 “响当当”网上书店的数据库创建

实验类型:验证性

实验学时:2 实验目的:

• 理解数据库的概念;

• 理解关系(二维表)的概念以及关系数据库中数据的组织方式; • 了解数据库创建方法。

实验步骤:

这个实验我们没有直接做,只是了解了一下数据库的概念。

实验1-2 “响当当”网上书店库存、图书和会员信息查询

实验目的

• 理解odbc的概念;

• 掌握利用microsoft query进行数据查询的方法。

实验步骤:

1..建立odbc数据源:启动microsoft office query应用程序,在microsoft office query应用程序窗口中,执行“文件/新建”命令,出现 “选择数据源”对话框,单击“确定”按钮,出现“创建新数据源”对话框,按照要求做相应的操作。

选择数据源对话框

创建新数据源窗口

做图上所示的选择

odbc microsoft access安装对话框

选择数据库对话框

选择数据源对话框

2.查询设计1—低库存量图书信息查询:选择“bookstore”数据源,点击“确定”,进入“添加表”窗口,添加书表后,在“查询设计”窗口的“表”窗格中,分别双击“书”表中需要查询的“书名”、“isbn”、“库存量”等字段,执行“视图/条件”命令,在“条件”窗格的“条件字段”行的 实验小结:

因为我们没有尝试建立数据库,直接开始数据查询,所以实验时遇到了很多问题。比如我们在选择数据源时就遇到了麻烦,弄了半天才开始查询设计,而且不是很熟练,一直做了四五个查询设计才慢慢熟练起来。

实验思考:

1、在数据查询过程中,如果所选的某个表与其他表之间没有联系的话,会 产生什么问题?

答:所选的查询数据将会全部显示在查询窗口,与其它表的数据没有直接联系。这样就不能表现出表与表数据之间的关联性,数据也就失去赋予的意义。

2、若“响当当个”网上书店的某个会员了解自己最近2年的图书订购情况,请为他设计一个查询。

答:分别添加“书”、“会员”、“订单明细”和“订单”表,双击“书”表的“书名”、“会员”表的“姓名”和“订单明细”表的“订购数量”以及“订单”表的“订购日期”字段,在向查询条件窗口中输入某一会员姓名以及相应的订购日期.实验1-3 “响当当”网上书店会员分布和图书销售查询

实验目的

•掌握复杂的数据查询方法:多表查询、计算字段和汇总查询

实验步骤: 1.查询设计1—会员分布信息查询:添加“会员”表到查询设计窗口,在“查询设计”窗口的“表”窗格中,双击“会员”表的“城市”和“会员号”字段。然后双击“会员号”字段的列标,在“编辑列”对话框中输入列标“会员人数”,并选择汇总方式:“计数”,单击“确定”按钮后即可看到查询结果,其中显示了各城市的会员人数,再设置相应的条件,进行相应的查询。

选择汇总方式

查询结果

2.查询设计2—图书总订购量和总销售金额查询:添加“订单”、“订单明细”和“书”表。在“查询设计”窗口的“表”窗格中,双击“订单”表的“订购日期”、“订单明细”表的“订购数量”字段。另外还要构造一个计算字段“销售金额”,方法是直接在某空白列的列标中输入公式;在上面的字段中,“订购数量”和“销售金额”是汇总字段,分类字段是“订购年份”,双击“订购日期”列的列标,在编辑列对话框的字段项中输入公式“year(订购日期)”,在其中的列标项中输入“订购年份”然后分别双击“订购数量”和“订购数量*单价”字段的列标,在编辑列对话框的列标项中分别输入“总订购数量”和“总销售金额”字样,并在总计项中选择“求和”。

在“条件”窗格的“条件字段”行的

5.查询设计5—被订购图书的作者和出版社信息查询:添加“会员”、“订单”、“订单明细”、“书”、“作者”和“出版社”表。在表之间建立合适的联系。在“查询设计”窗口的“表”窗格中,双击“书”表的“书名”、“作者”表的“姓名”和“出版社”表的“出版社名称”字段。在条件窗格中添加关于订购日期和会员姓名的条件。可以查看到结果为会员“刘丹”在202_年共订购了7本图书。

实验小结:

实验1-3的实验比较难,但是经过前面的练习还是比之前快一点,不过还是遇到一些困难,比如查看到结果为会员“刘丹”在202_年共订购了几本书的查询设计就在输入指令时卡住了,经过几个同学讨论还是做出来了。一直到晚上天黑了才把一共十个实验做完。

实验思考:

1、在进行汇总查询的过程中,如果被选择的字段除了分类字段以外还包含了其他字段。

查询结果是否正确?为什么?请举例说明。

答:不正确,如果被选择的字段除了分类字段以外还包含了其他字段,那么query将把多余的字段自动作为分类字段。

2、“响当当”网上书店的管理人员想了解最近2年中那位作者的书是最畅销,请你设计一个查询找到相关作者。

答:查询近两年的总订购量。

实验二 企业销售数据的分类汇总分析

实验2-1 North wind公司客户特征分析

实验类型:验证性

实验学时:2 实验目的:

• 理解数据分类汇总在企业中的作用与意义; • 掌握数据透视表工具的基本分类汇总功能;

• 掌握建立分类汇总数据排行榜、生成时间序列、绘制praetor曲线图、计算各地区客户分布、统计各地区客户的平均销售额和大宗销售时间序列的方法和步骤。

实验步骤:

一、汇总客户销售额排行榜 为了汇总客户销售额的排行榜,首先要获得客户每笔销售的销售额、所购买产品的类别以及销售发生的时间,然后再利用数据透视表工具将销售额按照客户名称、产品类别和销售时间加以汇总。

步骤1:获取各客户每笔销售的销售额、销售产品的类别和时间。

在一张空白的工作表中,选择菜单“数据”→“数据透视表和数据透视图” →“外部数据源”,单击“获取数据按钮”,随后启动了Microsoft Query,选择所建立的连接到Northwind.mdb数据库的ODBC数据源——“NW”,并选择“确定”,选择“客户”表中的的“公司名称”、“订单”表中的“订购日期”、以及“类别”表中“类别名称”,随后Query弹出窗口“„查询向导‟无法继续,因为该表格无法链接到您的查询中。您必须在Microsoft Query 中的表格之间拖动字段,人工链接。”这是因为类别表无法同订单表建立联系。单击“确定”。

要查询销售额,需要在Query中首先增加“订单明细”表,利用其中的“单价”、“数量”与“折扣”字段中的数据,才能计算销售额。在数据窗格中,在一个空白字段的名称处输入公式:“订单明细.单价*数量*(1-折扣)”。键入回车后就可以计算出销售额。见图2-7。

随后,将“产品”表也添加到查询中,虽然查询结果中并不包括任何“产品”表中的字段,但是该表的能够建立“类别”表与“订单明细”表之间的联系(“订单明细”表指明所订购产品的ID,“产品”表指明该产品属于哪一个类别)。此时,查询中的表都建立了正确的联系,并在查询结果中包括了汇总所需要的数据。如图2-7。

图2-7 查询各客户每笔销售的销售额、销售产品的类别和时间

将计算销售额的字段的列标命名为“销售额”。选择Query菜单中的“文件”→“将数据返回Microsoft Office Excel”,此时Query已经关闭,我们的操作对象回到了Excel,单击“下一步”,指定位置在“现有工作表”,单元格A3,单击完成。

步骤2:汇总客户销售额排行榜,并排序。

此时,在工作表的区域A1:G16的位置,出现了数据透视表的框架,数据透视表的浮动工具栏和数据透视表的字段列表。

为了能对销售的时间——“订购日期”进行组合以获得各年的销售额,首先将“订购日期”拖至行域,将“销售额”拖至数据域,“类别名称”拖至列域,得到如图2-8所示的数据透视表。

图2-8 按订购日期与类别汇总销售额

为了能将销售额按照年度汇总,将光标停留在“订购日期”下方的任何单元格,右击鼠标,选择“组合及显示明细数据”→“组合”,选择组合的步长为年。

然后将单元格A4当中的字段名称“订购日期”改为“订购年”,将它推至页域,将字段列表中的“公司名称”拖到行域,让透视表按照列总计,从大到小排列,就得到了如图2-9所示的数据透视表。它能够反映了三年或者各年度,各个客户的销售额的大小,以及排列名词的先后,还能够观察到各客户订购的产品类别和该类别的销售额。

图2-9 按照订购年、客户公司名称、类别名称汇总的销售额排行榜

二、汇总前三大客户各月销售额,并绘制图形

在前一部分实验的基础上,选择前三个最重要的客户,进一步观察购买情况,他们购买情况的变化将对公司整体销售业绩产生很大影响。所以,将前三大客户的销售数据加以展开,按月显示其销售的变化。

步骤1:将实验要求1所汇总的数据透视表复制到新的工作表。步骤2:利用数据透视表,汇总前三大客户的销售额时间序列。

按照实验要求1汇总的数据透视表,反映出“高上补习班、正人资源、大钰贸易”是公司的前三大客户。点开“公司名称”字段,选中这三个公司名称,并拖到列域。

将列域的字段“类别名称”拖出数据透视表。将页域的字段“订购年”旋转到行域,将其重新组合。选择组合的步长为“月”和“年”,把字段名称修改为“订购年”与“订购月”。光标停留在数据表中任何单元格,右击鼠标,选择“表格选项”,将“对于空数据项显示”设置为“0”,即当该单元格汇总出的数据值为空时,在数据透视表中将其显示为0。此时得到的前三大客户销售额时间序列见图2-10。

图2-10 Northwind公司前三大客户销售额时间序列

步骤3:绘制前三大客户销售额时间序列图。

光标停留在数据透视表中,选择菜单“插入”→“图表”,在当前工作簿自动插入一张图表。选择菜单“图表”→“位置”,将该图表调整到与数据透视表位于同一张工作表。选择菜单“图表”→“图表类型”,选择“折线图”→“数据点折线图”。随后,再对该图的大小、外观以及数据系列的格式加以调整,就能得到Northwind公司前三大客户销售额时间序列图,如图2-1所示。

三、绘制按照客户汇总的客户数与销售额帕累托曲线

步骤1:查询“订购日期”、客户的“公司名称”与“销售额”等数据。

在Excel的空白工作表中,选择菜单“数据”→“数据透视表与数据透视图” →“外部数据源”→“获取数据”,利用Microsoft Query,从“订单”表、“订单明细”表与“客户”表中查询 “订购日期”、客户的“公司名称”与“销售额”(销售额=订单明细.单价*数量*(1-折扣))等字段,将所查询数据返回Excel。

步骤2:利用查询的数据,制作数据透视表。

从数据透视表的字段列表中,选择“订购日期”,拖至行域,将“销售额”拖至数据域。将“订购日期”字段按年组合,然后拖至页域,将“公司名称”拖至行域,按照销售额从大到小的顺序排列,得到按照年度和客户公司名称汇总的数据透视表,如图2-11。

图2-11 Northwind公司按照年度汇总的各客户销售额

步骤3:利用数据透视表的数据,计算客户数累计百分比与客户销售额累计百分比,绘制帕累托曲线。

在区域D4:G4依次输入说明文字,“公司名称”、“ 客户百分比”、“ 客户数累计百分比 ”、“销售额累积百分比”。按照图2-12输入公式,得到如图2-13所示的汇总数据。

图2-12 Northwind公司按照年度汇总客户数累计百分比和销售额累计百分比公式

图2-13 Northwind公司按照年度汇总客户数累计百分比和销售额累计百分比

区域F5:F93汇总累计的客户数,即到该客户为止,已有客户数占到总客户数的百分比。区域G5:G93汇总了到该客户为止,已有客户实现的销售额占总销售额的百分比。

选中区域F4:G93的数据,绘制无数据点散点图,得到如图2-14所示图形。

图2-14 客户数与销售额的帕累托初步曲线

步骤4:在曲线上添加代表20%客户数的垂直参考线。在I5:I7单元格输入“20%”,在J5与J7单元格输入“0”和“120%”,在J6单元格输入公式:“=INDEX(G5:G93,MATCH(I5,F5:F93,1),1)”,即从客户数累计百分比中,查找到20%的客户数在

图2-15 Northwind公司客户数与销售额帕累托曲线垂直参考线数据

最后公司客户销售额与客户数parato曲线呈现如图所示:

图2-2 公司客户销售额与客户数parato曲线

四、绘制按照订单汇总的销售额与销售次数帕累托曲线 步骤1:查询“订购日期”、“订单ID”与“销售额”等数据。

在Excel的空白工作表中,选择菜单“数据”→“数据透视表与数据透视图” →“外部数据源”→“获取数据”,利用Microsoft Query,从“订单”表和“订单明细”表中查询 “订购日期”、“订单ID”与“销售额”(销售额=订单明细.单价*数量*(1-折扣))等字段,将查询数据返回Excel。

步骤2:利用查询的数据,制作数据透视表。

从数据透视表的字段列表中,选择“订购日期”,拖至行域,将“销售额”拖至数据域。将“订购日期”字段按年组合,拖至页域,将“订单ID”拖至行域,按照销售额从大到小的顺序排列,得到按照年度和订单ID汇总的数据透视表,如图2-16。

图2-16 Northwind公司按照年度汇总各订单销售额

步骤3:利用数据透视表的数据,计算客户数累计百分比与销售额累计百分比,绘制帕累托曲线。

在区域D4:G4依次输入说明文字,“销售次数百分比”、“ 销售次数累计百分比”、“ 销售额累计百分比 ”。按照图2-17输入公式,得到如图2-18所示的汇总数据。

图2-17 Northwind公司按照年度汇总客户数累计百分比和销售额累计百分比公式

图2-18 Northwind公司按照年度汇总客户数累计百分比和销售额累计百分比

区域E5:E834计算单次销售占总销售次数(即订单数)的百分比,区域F5:F834汇总累计销售次数占总销售次数的百分比,即到该订单为止,已有订单数占到总订单数的百分比。区域G5:G834汇总到该订单为止,已有订单实现的销售额占总销售额的百分比。

选中区域F4:G834的数据,绘制无数据点散点图,得到如图2-19图形。

图2-19 销售次数与销售额的帕累托初步曲线

步骤4:在曲线上添加代表20%客户数的垂直参考线。

在I5:I7单元格输入“20%”,在J5与J7单元格输入“0”和“120%”,在J6单元格输入公式:“=INDEX(G5:G834,MATCH(I5,F5:F G834,1),1)”,即从销售次数累计百分比中,查找20%的销售次数在

图2-3 norwthwind公司销售次数与销售额parato曲线

五、汇总各地区客户分布

步骤1:查询“公司名称”与“地区”字段等数据。

将Excel一张空白工作表命名为“5.各地区客户分布”。选择菜单“数据”→“数据透视表与数据透视图” →“外部数据源”→“获取数据”,利用Microsoft Query,从“客户”表中查询 “公司名称”与“地区”字段,然后将所查询的数据返回Excel。

步骤2:利用查询的数据,制作数据透视表。

从数据透视表的字段列表中,选择“地区”,拖至行域,选择“公司名称”,拖至数据域,得到按照地区汇总的客户数的数据透视表,如图2-20。

图2-20 按照地区汇总客户数的数据透视表

步骤3:利用数据透视表的数据,制作数据透视图。光标停留在数据透视表中,选择菜单“插入”→“图表”,在新建工作表中建立数据透视图,改变该图表位置,将其调整到“5.各地区客户分布”工作表中,得到了如图2-4所示的图形。

图2-4 公司各地区客户的分布

六、绘制各地区平均销售额及销售额占总销售额百分比 步骤1:查询“地区”与“销售额”等数据。

在Excel的空白工作表中,选择菜单“数据”→“数据透视表与数据透视图” →“外部数据源”→“获取数据”,利用Microsoft Query,选择数据源,从“客户”、和“订单明细”表中,查询客户的“地区”与“销售额”(销售额=订单明细.单价*数量*(1-折扣))等字段,将查询数据返回Excel。查询时应包括“订单”表,该表能建立 “客户”表和“订单明细”表之间的联系。

步骤2:利用查询的数据,制作数据透视表。

从数据透视表的字段列表中,选择“地区”,拖至行域,将“销售额”拖至数据域,得到按照地区汇总的销售额的数据透视表,如图2-21。

图2-21 Northwind公司按照地区汇总的销售额

步骤3:利用数据透视表的数据,计算各地区平均销售额与销售额占总销售额的百分比。在区域D4:G4依次输入说明文字:“地区”、“ 客户数 ”、“平均销售额”与“ 销售额占总额百分比”。按照图2-22输入公式,得到如图2-23所示的汇总数据。

图2-22 Northwind公司按照地区汇总平均销售额、销售额占总销售额百分比公式

图2-23 Northwind公司按照地区汇总平均销售额、销售额占总销售额百分比

区域E5:E10存放各地区的客户数,区域F5:F10计算各地区平均销售额,区域G5:G10计算各地区销售额占总销售额的百分比。利用区域D5:D10与区域F5:G10中的数据,绘制柱型图。由于一个数据系列是平均销售额,一个数据系列是百分比,两个系列数值相差悬殊,所以在图2-24中,只能观察到一个数据系列的柱型,另一个系列的柱型贴近“0”,无法观察到。选中代表百分比的系列(选中平均销售额的系列,移动上下箭头,直到选中代表百分比的系列),选择菜单“格式”→“数据系列格式” →“坐标轴”→“次坐标轴”,将代表百分比的系列对应到次坐标轴。

图2-24 Northwind公司按照地区汇总平均销售额、销售额占总销售额百分比图

观察该图形,可以发现 “华东”与“西南”地区,客户的平均销售额比其他地区高,说明这两个地区大客户的销售情况比较好。华北地区虽然销售额占总销售额的百分比最高,是Northwind公司最重要的市场,但该地区大客户的销售情况并不理想,平均销售额并不高。今后该地区应更注重改善大客户销售情况。

七、绘制大宗销售的销售额时间序列。

步骤1:查询“公司名称 ”、“订单ID”、“ 订购日期”与“ 销售额”等数据。

将Excel的空白工作表命名为“7.大宗销售数据”,选择菜单“数据”→“获取外部数据” →“外部数据源”→“获取数据”,利用Microsoft Query,从“客户”表、“订单”表和“订单明细”表中,查询“公司名称 ”、“订单ID”、“ 订购日期”与“ 销售额”(销售额=订单明细.单价*数量*(1-折扣))等字段,将查询数据返回Excel,存放在区域A1:D831。

步骤2:挑选出销售额超过202_元的订单。

在区域F1:F2,按照图2-25,输入筛选的条件。利用Excel高级筛选功能,挑选出满足条件的记录,存放在区域H1:K186中。

图2-25 Northwind公司202_元以上销售额的订单的销售情况

步骤3:利用挑选出的订单,制作数据透视表。利用区域H1:K186中的数据,制作数据透视表。从数据透视表的字段列表中,选择“订购日期”,拖至行域,将“销售额”拖至数据域,将“订购日期”字段按年组合,然后拖至页域,将“公司名称”拖至页域,规定行域字段必须“显示空数据项”,得到如图2-26所示的数据透视表。

图2-26 Northwind公司大宗销售的时间序列数据透视表

步骤4:绘制大宗销售的时间序列图形。

为了让图形能够正确反映销售情况,去掉没有发生销售的时间点,如96年1月到96年6月,我们在数据透视表外面,另准备作图数据。按照图2-27,在区域E12:E33输入从96年7月到98年4月的时间(98年5月数据不完整,故不包括在时间序列内),在单元格F12输入公式:“=C12”,并复制到区域F13:F33。

图2-27 Northwind公司大宗销售的时间序列作图数据

利用区域E11:F33中的数据,制作折线图,将图表X轴的类型改为分类轴。“公司名称”选择“全部”,在图形上尝试添加恰当的趋势线,显示趋势线的方程与R2,并前推两个周期,得到的时间序列图形如图2-28。从该图形上,可以大致了解大宗销售的变化趋势,对未来的情况做初步估计。

图2-28 Northwind公司大宗销售的时间序列图

实验小结:

数据透视表分类汇总的两种方法:

1、先将数据导入Excel成为数据清单,利用数据透视表汇总对数据清单进行汇总

2、利用数据透视表直接从数据库中查询、并汇总数据。数据透视表功能,使用最方便,可以把汇总表“旋转”,从不同的“角度”查看数据,还可以筛选数据、合并数据、展开详细数据、或者选择部分数据加以查看。

实验思考:

1、你还能从哪些方面对客户的销售数据进行分析,帮助该公司促进销售或者为客户提供更好的服务?

答:使用Northwind公司的销售数据,生成净销售额时间序列,创建可以调节的产品列表框,并绘制特定产品销售金额时间序列的图形。观测每种产品在不同年份不同月份的销售情况,对下阶段的销售做出预测。

2、帕累托曲线可以帮助分析投入与产出之间的关系,它还能帮助该公司进哪些方面的分析?

答:①带来80%利润的20%的顾客在哪里,并且留住他们。②销售量达80%的20%产品是哪些,找出来好好包装开发。③销售量达80%的20%城市在哪里,并且维护好。

实验三 餐饮公司经营数据时间序列预测

实验3-1 “美食佳”公司半成品年销售量预测

实验类型:验证性

实验学时:2 实验目的: • 理解数平滑预测法的概念;

• 掌握在excel中建立指数平滑预测模型的方法; • 掌握寻找最优平滑常数的各种方法。

实验步骤:

一、运用“数据分析”工具进行指数平滑预测 步骤1:确定时间序列的类型。

如图3-1所示在单元格a1:b21中布置好公司从1987-202_年的销售量数据。然后,绘制公司从1987年至202_年共20年的销售量折线图,结果如图3-2所示,既没有趋势成分也没有季节成分,呈现出的是围绕一个水平上下波动的时间序列,说明适合用指数平滑法或移动平均法进行预测。本实验的数据是年度数据,建议采用指数平滑预测法。

图3-1 公司从1987-202_年的销售量数据

图3-2 公司从1987-202_年的销售量折线图

步骤2:利用“数据分析”工具中的指数平滑功能进行预测。

在“工具”菜单中选择“加载宏”,在随后弹出的“加载宏”对话框中选择“分析工具库”,然后单击“确定”按钮,将会在“工具”菜单下出现“数据分析”选项。在“工具”菜单中选择“数据分析”,在出现的“数据分析”对话框中选择“指数平滑”,出现如图3-3所示的对话框。

图3-3 指数平滑分析的参数设置

在“指数平滑”对话框中,在“输入区域”输入“b2:b21”单元格,“阻尼系数”输入“0.75”(注:阻尼系数=1-平滑常数),在“输出区域”输入“c2”单元格,单击“确定”按钮,将会看到如图3-4中单元格c2:c21的输出结果。

将单元格c21往下复制,便得到202_年的指数平滑预测值7.96。

图3-4 指数平滑预测结果

二、运用指数平滑公式进行预测 步骤1:利用公式

计算指数平滑预测值。

如图3-5,在单元格f1中输入平滑常数0.25,在单元格c2中输入公式:“=b2”,作为

三、寻找最优的平滑常数 步骤1:计算均方误差。

如图3-5在单元格f2中输入公式:“=average((b2:b21-c2:c21)^2)”,作为数组运算,需要同时按Ctrl+Shift+Enter三个键作为输入结束,计算均方误差MSE。步骤2:利用模拟运算表及查找引用函数功能,寻找最优平滑常数。

如图3-7在单元格e7:e24中给出不同的平滑常数(大于0小于1),在单元格f6中输入公式:“=f2”,选定单元格e6:f24,在“数据”菜单中选择“模拟运算表”,在弹出的对话框中做如图3-8所示的参数设置,利用一维模拟运算表功能计算不同平滑常数下的mse值,见图3-7结果。

图3-7 模拟运算表辅助查找最优平滑常数

图3-8 模拟运算表对话框参数设置

在单元格f4中输入公式:“=index(e7:e24,match(min(f7:f24),f7:f24,0))”,找到最优平滑常数为0.35。然后,根据最优平滑常数0.35(将此值代入单元格f1中),202_年的预测值为7.94。

步骤3:利用规划求解功能,寻找最优平滑常数。规划求解工具是一个从函数值所要达到的目标出发,反过来确定为达到这个目标,各自变量应取什么值的工具。

在“工具”菜单中选择“规划求解”,在弹出的对话框中做如图3-9所示的参数设置,然后单击“求解”按钮,得到如图3-10所示的规划求解结果,其中可变单元格f2中显示最优平滑常数为0.37。根据最优平滑常数0.37,202_年的预测值为7.93。

图3-9 规划求解参数设置

图3-10 规划求解的结果

以上两种方法所寻找到的平滑常数都是基于实际销售量与预测销售量的均方误差极小,从理论上证明了所获得的平滑常数是最优的。

实验思考:

1.为什么用模拟运算表加查找引用函数功能,得到的最优平滑常数(0.35),与用规划求解功能得到的结果(0.37)不一样?

答:用模拟运算表加查找引用函数功能得到的最优平滑常数(0.35)是根据设定的间隔求解,结果不是很准确。而规划求解功能得到的结果(0.37)是精确结果。

2.可否调整模拟运算表的输入数据间隔,再试一试,结果会如何?

答:在实验3-1中,调整模拟运算表的输入数据间隔,其结果不变。因为模拟运算表只是将数据代入变量中来求得对应的值,所得到的值与数据的间隔无关。

实验3-2 “美食佳”公司月管理费预测

实验目的:

• 理解移动平均预测法的概念;

• 掌握在excel中建立移动平均模型的方法; • 掌握寻找最优移动平均跨度的各种方法。

实验步骤:

一、运用“数据分析”工具进行移动平均预测 步骤1:确定时间序列的类型。

如图3-11所示在单元格a1:c19中布置好公司从202_年1月至202_年6月的数据。

绘制公司从202_年1月至202_年6月共18个月的管理费用折线图,结果如图3-12所示,既没有趋势成分也没有季节成分,呈现出的是围绕一个水平上下波动的时间序列,说明适合用指数平滑法或移动平均法进行预测。本实验的数据是月度数据,建议采用移动平均预测法。

图3-11 公司从202_年1月至202_年6月的管理费数据

图3-12 公司从202_年1月至202_年6月的管理费用折线图

步骤2:利用“数据分析”工具的移动平均功能进行预测。在“工具”菜单中选择“数据分析”,在出现的“数据分析”对话框中选择“移动平均”,出现如图3-13所示的对话框。

在“移动平均”对话框中,在“输入区域”输入“c2:c19”单元格,“间隔”输入“3”(注:移动平均跨度为3),在“输出区域”输入“d3”单元格,单击“确定”按钮,将会看到如图3-14中单元格d5:d20的输出结果。

如单元格d20所示,202_年7月公司管理费用的移动平均预测值为20.3万元。

图3-13 移动平均对话框参数设置

图3-14 移动平均预测结果

二、运用移动平均公式进行预测

步骤1:利用average()函数计算移动平均预测值。

如图3-15,在单元格g1中输入移动平均跨度3,在单元格d5中输入移动平均模型预测公式:“=average(c2:c4)”。

将单元格d5往下复制,便得到202_年7月的移动平均预测值20.3。

图3-15平均值函数的计算结果

步骤2:绘制移动平均预测图。

利用单元格c2:d20中的数据绘制如图3-16所示的公司18个月的管理费用及移动平均预测图。

图3-16 公司18个月的管理费用及移动平均预测图

通过以上实验能够检验,运用“数据分析”工具和移动平均公式进行移动平均预测的预测结果是一致的。“美食佳”公司202_年7月的管理费移动平均预测值为20.3,此预测结果是基于移动平均跨度为3个月所获得的。对没有先期经验的人来说,怎样选择移动平均跨度呢?又怎么判断所选的移动平均跨度是最优的呢?下面的实验步骤将指导我们掌握寻找最优移动平均跨度的不同方法。

三、寻找最优的移动平均跨度 步骤1:计算均方误差。

此处用到两个函数:sumxmy2()函数和count()函数。sumxmy2()函数的功能是返回两数组中对应数值之差的平方和,它需要两个参数,一个参数是 图3-18结果。

图3-18模拟运算表辅助查找最优移动平均跨度

图3-19 模拟运算表参数设置

在单元格g4中输入公式:“=index(f7:f15,match(min(g7:g15),g7:g15,0))”,找到最优移动平均跨度为5。根据最优移动平均跨度5(将此值代入单元格g1中),202_年7月的预测值为20.2。

实验思考

1.可否利用规划求解功能,寻找最优的移动平均跨度?

答:在实验3-2中,无法利用规划求解功能寻找最优的移动平均刻度。因为求MSE所用的公式为“=SUMXMY2(C2:C19,D2:D19)/COUNT(D2:D19)”与移动平均刻度值所在的G1单元格无直接联系。

2.excel提供的移动平均趋势线功能也可进行移动平均预测,但趋势线方法与本实验所介绍的方法有何不同?

答:Excel提供的移动平均趋势线方法与本实验所介绍的方法与本实验所介绍方法的区别在于趋势线的作用是对已知的一堆数据作回归分析,以找到一个可以直接计算的方程式并对其他任意未经测量的数值进行计算。趋势线方法考虑了大量可能的结果。

实验3-3 “美食佳”华东分公司销售额趋势预测 实验类型:验证性

实验学时:2 实验目的:

• 理解趋势预测法的概念;

• 掌握在excel中建立线性趋势预测模型的方法; • 掌握寻找线性趋势模型参数的各种方法; • 掌握线性趋势值预测的不同方法。

实验步骤:

步骤1:确定时间序列的类型。

如图3-20所示在单元格a1:c12中布置好华东分公司从1996年至202_年的销售额数据。绘制华东分公司从1996年至202_年共11年的销售额折线图,结果如图3-21所示,具有较明显的线性趋势成分,呈上升趋势,说明适合用线性趋势法进行预测。

图3-20 华东分公司从1996年至202_年的销售额数据

图3-21 华东分公司从1996年至202_年的销售额折线图

步骤2:添加线性趋势线。

如图3-22所示,在图中选中数据系列,右键菜单中选择“添加趋势线”,出现“添加趋势线”对话框。

如图3-23所示,在“添加趋势线”对话框的“类型”中选择“线性”。

如图3-24所示,在“添加趋势线”对话框的“选项”中选择“显示公式”和“显示r平方值”,得到如图3-25的结果。

图3-22 选用添加趋势线功能

图3-23 添加趋势线对话框

图3-24 添加趋势线的选项对话框

图3-25 华东分公司销售额与和线性趋势线

步骤3:用趋势线前推法大致预测线性趋势值。

选定线性趋势线,右键菜单中选择“趋势线格式”,出现如图3-26的“趋势线格式”对话框。

如图3-26所示,在“趋势线格式”对话框中选定“选项”,将趋势预测前推1周期,得到如图3-27所示的大致预测结果。

由图3-27中的趋势线可见,公司202_年的销售额预测值约为1000万元。

图3-26 趋势预测前推1周期设置

图3-27 趋势预测前推1周期的大致预测结果

步骤4:用方程或函数准确预测线性趋势值。

根据得到的线性趋势方程公式y=11.473x+861.98,如图3-28所示,在单元格c13中输入公式:“=11.473*a13+861.98”,即将x=12(202_年为

图3-29 带预测点的销售额线性趋势预测图

实验思考

1.本实验的几张图中,x轴是“分类”还是“自动”? 答:本实验(实验3-3)中,X轴是自动。

2.预测点数据如果作为新数据系列添加到图形中,结果与图3-29有何不同?

答:实验3-3中,预测点数据如果作为新数据系列添加到图形中,结果与图3-29相比,预测部分的值将是一条直线。

3.为什么预测值一定在趋势线的延伸线上?

答:预测值一定在趋势线上的原因是预测值是依据趋势线作出来的。4.若要预测公司202_年的全国销售额,可以怎么做?若要预测公司202_年、202_年、甚至更远年份的销售额,会有什么问题?

答:若要预测202_年的全国销售额,可依据202_年的预测值来作。但若要预测更远年份的销售额,则不能以之为基础由趋势线函数进行预测,因为彼时销售额呈线性增长,与客观事实不符。

5.除了本实验中介绍的添加趋势线方法可以找到线性趋势预测模型的参数外,还可以用哪些方法找到线性趋势预测模型y=a+bx中的参数 a和b。

答:还可用回归方法找到Y=a+bX中参数a,b的值。

实验3-4 “美食佳”公司会员卡发行量趋势预测

实验类型:验证性

实验学时:2 实验目的:

• 理解非线性趋势预测法的概念;

• 掌握在excel中建立非线性趋势预测模型的方法; • 掌握非线性趋势值预测的方法。

预测公司202_年7月会员卡的发行量。

实验步骤:

步骤1:确定时间序列的类型。

如图3-30所示在单元格a1:c15中布置好公司从202_年5月至202_年6月的会员卡发行数据。

绘制公司从202_年5月至202_年6月共14个月的会员卡发行量的折线图,结果如图3-31所示,具有较明显的非线性趋势成分,说明适合用非线性趋势法进行预测。从曲线的形状看,它先上升较快后上升较慢,符合对数曲线的特征,因此我们可以选用对数趋势模型进行预测。

图3-30 202_年5月至202_年6月会员卡发行量数据

图3-31 202_年5月至202_年6月会员卡发行量的折线图

步骤2:添加非线性趋势线。

如图3-32所示,在图中选中数据系列,右键菜单中选择“添加趋势线”,出现“添加趋势线”对话框。

如图3-33所示,在“添加趋势线”对话框的“类型”中选择“对数”。

如图3-34所示,在“添加趋势线”对话框的“选项”中选中“显示公式”和“显示r平方值”,得到如图3-35的结果。

图3-32 选择添加趋势线功能

图3-33 添加趋势线对话框

图3-34 添加趋势线选项对话框

图3-35 202_年5月至202_年6月会员卡发行量和对数趋势线

步骤3:趋势线前推法大致预测非线性趋势值。

选定对数趋势线,右键菜单中选择“趋势线格式”,出现如图3-36的“趋势线格式”对话框。

如图3-36所示,在“趋势线格式”对话框中选定“选项”,将趋势预测前推1周期,得到如图3-37所示的大致预测结果。

由图3-37中的趋势线可见,公司202_年7月的会员卡发行量预测值约为25万张。

图3-36 趋势预测前推1周期设置

图3-37 趋势预测前推1周期的大致预测结果

步骤4:用方程或函数准确预测非线性趋势值。根据得到的方程公式y=7.7785ln(x)+3.7651,如图3-38所示,在单元格c16中输入公式:“=7.7785*ln(a16)+3.7651”,即将x=15(202_年7月为 规划求解法找到对数趋势预测模型y=a+bln(x)中的参数a和b?

答:还可用回归方法找到Y=a+bX中参数a,b的值。

实验3-5 “美食佳”火锅连锁店原料年度采购成本预测 实验目的:

• 理解季节指数的概念; • 掌握季节指数预测方法。

实验步骤:

步骤1:确定时间序列的类型。

如图3-40所示在单元格a1:c17中布置好公司从202_年

图3-42 4年同期的原材料采购成本折线图

步骤2:计算季节指数。

一年有4个季度,所以以4为移动平均跨度,计算移动平均数,其结果应该对应放在每4个季度的中间位置。但当移动平均跨度为4时,没有中间季度位置可放,因此只能放在

图3-44 中心化后的原材料采购成本移动平均数

平均季节指数应等于1,因此4个季度的季节指数总和必须等于4。如果不满足这一点,则应对季节指数进行调整。方法是用每一个季节指数除以未调整的季节指数之

和再乘以季度指数总和4。如图3-43中单元格i6所示,未调整前的季节指数之和为3.9852,所以需要调整。在单元格j2中输入公式:“=i2/$i$6*4”,往下复制到j3:j5,得到调整后的季节指数。

步骤3: 消除季节影响。

如图3-45所示,将调整后的季节指数复制到E列,分别对应202_-202_年的4个季度。

图3-45 消除季节影响后的原材料采购成本

在单元格F2中输入公式:“=D2/E2”,将公式复制到单元格F3:F17中,得到消除季节影响后的结果。

利用单元格F2:F17中的数据绘制公司从202_年 图3-46 消除季节影响后的原材料采购成本及趋势线

步骤4:计算预测值。

如图3-47中G列所示,利用FORECAST()函数计算线性趋势预测值。

图3-47 趋势预测值和季节预测值的计算

在单元格H2中输入公式:“=G2*E2”,将公式复制到单元格H3:H21中,即在线性趋势预测值的基础上乘以调整后的季节指数得到最终的季节预测值。公司202_年1至4季度的采购成本预测值分别为73.0、20.9、13.8、154.9。

根据D列的原始采购成本数据和H列的季度预测值数据,作折线图,结果如图3-48所示。

图3-48 202_-202_年原材料采购成本及202_年4个季度的原材料采购成本预测值

实验思考

1.图3-47中的“序号”一列有什么用?

答:图3-47中“序号”一列的作用是为趋势线公式的获得提供依据(作为自变量X)。2.计算趋势预测值时,若不用forcast()函数,还可以有什么方法?请至少用两种方法试试看。

答:计算趋势预测值还可用移动平均预测法、指数平滑预测法、一元线性回归分析模型等。

3.季节指数模型是否只能用于季节数据的预测?若是年度、月度、甚至周数据,可以用季节指数模型吗?

答:季节指数模型不是只能用于季节数据的预测,年度、月度、周数据等在某些情况下均能用季节指数模型。

实验总结: 此次实验中学习了指数平滑预测法、移动平均预测法、趋势预测法、非线性趋势预测法、季节指数的概念,计算趋势预测值还可用移动平均预测法、指数平滑预测法、一元线性回归分析模型等。实验不难,关键要会分析和辨别使用何种分析方法。

实验四 住房建筑许可证数量的回归分析

实验4-1 “家家有房”公司建筑许可证一元线性回归分析

实验目的

• 理解一元线性回归分析的概念;

• 针对不同的问题,能够建立适当的一元线性回归模型; • 掌握内建函数slope()、intercept()与linest()的用法;

• 掌握用规划求解法、添加线性趋势线法、回归分析报告法确定线性回归方程的系数; • 给定自变量的情况下,根据线性回归模型预测因变量的值。

实验步骤:

步骤1:确定因变量与自变量并输入观测值。

根据实验要求,我们确定因变量为建筑许可证的颁发数量,自变量为人口密度,并将数据合理的布置在excel工作表的单元格a1:b19中,以备建模使用。

步骤2:绘制因变量与自变量关系散点图。

利用工作表的数据,以每平方公里的人口密度为x值,建筑许可证的颁发数量为y值,绘制xy散点图,如图4-1所示。从这个散点图可以看出每平方公里的人口密度与建筑许可证的颁发数量之间存在着大体上的线性依赖关系。

图4-1建筑许可证的颁发数量与每平方公里的人口密度散点图

步骤3:求出回归系数a、b的取值,计算判定系数R2,并进行预测。

excel提供了几种不同的工具,包括规划求解工具,intercept()、slope()与linest()等内建函数,在散点图中添加趋势线和趋势线方程以及生成回归分析报告等方法来确定回归系数a和b。我们这里介绍利用规划求解的方法来求解回归系数。

步骤4:假定回归系数的值,建立线性回归模型。

假定回归系数的值为a=1,b=1并将之放在单元格f2:f3中。用回归直线方程y=a+bx以及每平方公里的人口密度来计算建筑许可证的颁发数量预测值,放在单元格c2中,即在单元c2中输入公式“=$f$2+$f$3*a2”,并将此公式复制到c3:c19中,得到建筑许可证的颁发

数量预测值。在单元格f5中计算建筑许可证的颁发数量观测值与预测值的均方误差mse,即在单元格f5中输入公式“{=average((c2:c19-b2:b19)^2)}”(注:其中的花括号不是直接输入,是将所有内容输入完后按住ctrl+shift键后再按回车键生成的)。如图4-2所示:

图4-2 回归参数求解前的模型

步骤5:启动规划求解工具,确定模型最优参数。

在如图4-3的“规划求解参数”对话框中将目标单元格设为$f$5,使其等于最小值,将可变单元格设为$f$2:$f$3,无须设置任何约束条件即可直接求解,保存规划求解结果。注意规划求解受到迭代次数和精度的限制,本例需启用8次规划求解工具进行重复运算才能得到满意的精度,即

图4-4 回归参数求解后的模型

根据上述回归方程,如果任意给定人口密度(7000),即可预测出建筑许可证的颁发数量(14655.287),如图4-5所示。

实验思考

1.除了用规划求解的方法外,还可以哪些其它方法求出建筑许可证数量与每平方里人口密度之间关系的回归方程y=a+bx的系数,请用其它方法求得系数,并检验与实验4-1所获得的系数是否一致。

答:除用规划求解额方法外,还可以利用添加趋势线的方法获得回归方程Y=a+bX的系数。用规划求解方法获得的回归方程Y=a+bX的系数中a的值为-23900.10788,b的值为5.500026742;而用添加趋势线的方法获得的a的值为-23901,,b的值为5.5001,在误差允许的范围内,可认为他们的系数一致。

2.如果每平方公里的人口密度与建筑许可证数量之间是非线性关系,该如何选择非线性模型,并针对任意给定每平方公里的人口密度,预测建筑许可证的颁发数量。

答:若每平方公里的人口密度与建筑许可证数量之间是非线性关系,可利用添加趋势线的方法来进行检验,找出每一种可能的非线性模型的均方误差MSE,选择其中最小的一项作为最佳的非线性模型。然后根据非线性模型的公式,带入相应参数后即可预测建筑许可证的颁发数量。

3.根据拟合优度,进一步分析是否有其他非线性回归模型,更适合人口密度与建筑许可证数量的相关关系。

答:根据拟合优度对其他非线性回归模型进行分析,暂未找到更适合人口密度与建筑许可证数量的相关关系。

实验4-2 “家家有房”公司建筑许可证一元非线性回归分析

实验目的

• 理解一元非线性回归分析的概念;

• 针对不同的问题,能够建立适当的一元非线性回归模型;

• 掌握用规划求解法、添加非线性趋势线法、变换法确定非线性回归方程的系数; • 在给定自变量的情况下,根据非线性回归模型预测因变量的值。

实验步骤:

步骤1:确定因变量与自变量。

根据实验要求,我们确定因变量为建筑许可证的颁发数量,自变量为自由房屋的均值。并将数据合理的布置在excel工作表的单元格a1:b19中,以备建模使用。

步骤2:选择合适的回归方程。

利用步骤1中准备的数据画出散点图,如图4-5所示,通过散点图选择合适的拟合函数,建立含未知参数的方程。

图4-5 建筑许可证的颁发数量与自由房屋的均值散点图

仔细观察散点图,发现建筑许可证的颁发数量随着自由房屋的均值增大而增大,且随着自由房屋均值的增加建筑许可证的颁发数量增加的速度而放缓,这是对数曲线的特征,因此可以采用对数函数来进行拟合。即将建筑许可证的颁发数量(y)与自由房屋的均值(x)之间的关系表述为:

y= a + blnx 其中的参数a与b的值待定。

步骤3:假定回归系数的值,建立非线性回归模型。

假定回归系数的值为a=1,b=1并将之放在单元格f2:f3中。用回归对数方程y=a+blnx以及自由房屋均值来计算建筑许可证的颁发数量预测值,放在单元格c2中,即在单元c2中输入公式“=$f$2+$f$3*ln(a2)”,并将此公式复制到c3:c19中,得到建筑许可证的颁发数量预测值。在单元格f5中计算建筑许可证的颁发数量观测值与预测值的均方误差mse,即在单元格f5中输入公式“{=average((c2:c19-b2:b19)^2)}”(用ctrl+shift+enter组合键添加花括号)。如图4-6所示:

图4-6 回归参数求解前的模型 步骤4:确定参数a与b的值。

对于本例的问题,我们采用规划求解的方法来确定参数a与b的值,利用规划求解工具计算出使mse极小的参数a与b,规划求解对话框的设置如图4-7所示。

图4-7 规划求解对话框

然后点击“求解”按钮,可得如图4-8所示的结果。

图4-8 规划求解后的模型结果

步骤5:添加趋势线,显示R2值。

在图4-7的散点图中通过添加对数趋势线,并在添加趋势线对话框中的“选项”中选择“显示R2”与“显示公式”,如图4-9所示。我们发现R2达到0.9441,表明选择对数回归模型预测是可行的。同时我们也检验了趋势线方法与规划求解法所得到的回归方程系数是一样的。

图4-9 添加了对数趋势线

步骤6:进行预测。

根据对数回归方程,如果任意给定 自由房屋的均值,即可预测出建筑许可证的颁发数量。将x=300,预测出颁发的建筑许可证数量为-78874.08+16877.319*ln(300)=17390.4708,如图 4-8所示。

实验思考:

1、请将此问题转换为线性回归模型,求解模型的参数和R2值,并与规划求解法的结果进行比较。

答:若将此模型转换为线性回归模型,得到的模型为y=16877.34701Ln(X)-

79003.9859, MSE=2023817.464,与原模型中y=16878Ln(X)-78877,R²=0.9441,MSE=2006982.816相比,基本无差别。

实验4-3 “家家有房”公司建筑许可证多元线性回归分析 实验目的

• 理解多元线性回归分析的概念;

• 针对不同的问题,能够建立适当的多元线性回归模型; • 掌握运用向前增选法确定回归自变量;

• 在给定自变量的情况下,根据多元线性回归模型预测因变量的值。

实验步骤:

步骤1:输入原始数据。

首先分析案例中的自变量和因变量,并将数据合理的布置在excel工作表的a1:d19中,如图4-10所示,以备建模使用。

根据实验要求,我们确定因变量为建筑许可证的颁发数量(y),自变量为每平方公里的人口密度(x1)、自由房屋的均值(x2)与平均家庭收入(x3),假设多元线性模型为:y=a+b1*x1+b2*x2+b3*x3。

图4-10 人口密度、自由房屋均值、平均家庭收入与建筑许可证数量数据 步骤2:分别绘制三个候选自变量与因变量之间的关系图。

图4-11 建筑许可证数量与每平方公里人口密度的散点图

这个问题涉及到三个候选自变量,每平方公里的人口密度(x1)、自由房屋的均值(x2)与平均家庭收入(x3)。首先分别对每个候选自变量绘制与因变量建筑许可证的颁发数量关系的散点图,见图4-11—图4-13。

图4-12 建筑许可证数量与自由房屋的均值的散点图

图4-13建筑许可证数量与平均家庭收入的散点图

步骤3:针对每一个候选变量生成回归分析报告。

分别对这三个候选变量做回归分析报告,根据值,找出最优的变量。这里我们采用向前增选法,先给出建筑许可证的颁发数量与三个候选变量之间的回归分析报告,分别见图4-14和4-16。

图4-14 许可证数量与人口密度的回归分析报告

图4-15 许可证数量与自由房屋均值的回归分析报告

图4-16 许可证数量与平均家庭收入的回归分析报告

图4-17 建筑许可证数量与人口密度及平均家庭收入的回归分析报告

图4-18 建筑许可证数量与自由房屋均值及平均家庭收入回归分析报告

实验思考

1.在用回归分析报告求解参数时,自变量与因变量之间应该满足什么关系? 答:在用回归分析报告求解参数时,自变量与因变量之间应满足一个或多个自变量值对应一个应变量。

2.为什么实验结果只选用两元线性回归模型而不用三元线性回归模型进行建筑许可证数量的预测?

答:实验结果只选用两元线性回归模型二不用三元线性回归模型既高兴建筑许可证数量预测的原因是三元回归分析报告中自有房屋的均值X2的调整后的R²的值并未超过一元回归分析报告中对自有房屋的均值X2的调整后的R²的值,说明自有房屋的均值X2与建筑许可证数量的线性相关性不强,若它参与回归预测,将会影响预测结果。

3.在用多元线性回归时,如何确定候选变量,确定的依据是什么?

答:用多元线性回归时,可依据对某一自变量在组合前得到的调整后的R²的值与组合后得到的调整后的R²的值之间的大大小进行候选变量的确定。若组合后得到的调整后的R²的值超过组合前得到的调整后的R²的值,则确定其为候选变量

4.从实验4-2我们了解自有房屋的均值(x2)与建筑许可证数量是对数相关,如果我们用回归方程y=a+b1*x1+b2*lnx2+b3*x3来进行预测是否更精确?那么我们又怎样确定此方程的各项系数呢?

答:若用回归方程Y=a+b1*X1+b2*lnX2+b3*X3来进行预测,结果不一定会更精确。因为Y是受3个自变量的共同影响。可用多元非线性回归确定次方程的各项系数,因为线性回归是特殊的非线性回归。

实验4-4 “家家有房”公司建筑许可证多元非线性回归分析

实验目的

• 理解多元非线性回归分析的概念;

• 针对不同的问题,能够建立适当的多元非线性回归模型;

• 掌握用规划求解法、变换技术加回归分析报告法确定多元非线性回归方程的系数; • 在给定自变量的情况下,根据多元非线性回归模型预测因变量的值。

实验步骤:

步骤1:确定因变量与自变量。

根据实验要求,我们确定因变量为建筑许可证的颁发数量(y),因变量为平均家庭收入(x1)与人均交纳税收(x2),并将数据合理的布置在excel工作表中。

步骤2:确定模型并对模型初始化。

因为是非线性模型,而且是多元的,所以我们这里假设模型为y=a+b1*x1^2+b2*x2^2。在单元格h2:h4中分别放入参数a,b1,b2初值1,并在单元格d2中输入公式“=$h$2+ $h$3 *a2^2+$h$4*b2^2”,并将其复制到公式d3:d19中,在单元格h5中输入公式“=sumxmy2(d2:d19,c2:c19)/count(d2:d19)”。

步骤3:启用规划求解工具。

在“工具”菜单中选择“规划求解”,打开“规划求解”对话框,并在该对话框中做如

图4-19中设置,然后点击“求解”按钮,并将结果保存在图4-20中。

图4-19规划求解参数的设置

图4-20 规划求解后的模型结果

步骤4:根据获得的参数进行预测。

利用规划求解的结果,将参数a,b1,b2的值及平均家庭收入为80千元,人均交纳的税收为7千元代入模型y=a+b1*x1^2+b2*x2^2,可得建筑许可证的颁发数量预测值为11464.4。

步骤5:将非线性模型与线性模型结果比较。

将模型假设为线性模型y=a+b1*x1+b2*x2,并将参数放置在单元格h8:h11中,重复步骤2与步骤3,可以看到在线性模型求得的mse为1500179.183,比在非线性模型下求得的mse的值1158258.3大,因此在该实验中,用二元非线性模型要比用线性模型求解的结果要好些。

实验思考

1.如果要用回归分析报告求解多元非线性模型的参数,首先要做的工作是什么?怎么做?

答:若要用回归分析报告求解多元非线性模型的参数,首先要做的是确定因变量与自变量。并将数据合理地布置在Excel表中。

2.现王经理经过深入调查研究发现:建筑许可证的颁发数量既与每平方公里的人口密度有着密切的关系,也与自由房屋的均值有着密切的关系,此外还与平均家庭收入、人口增长百分比、失业率、人均交纳的税收等有着相关关系,并给出相关数据如表4-5,根据表4-5中所给的数据,想想用什么方法能够较快的找出合适的自变量建立多元回归分析模型,并以此预测建筑许可证的颁发数量。

答:可分别求出每一因素调整前的R²的值与调整后的R²作比较,再确定其是否影响显著,以此进行选择细分。

实验总结:

本次实验主要目的是理解数平滑预测法、移动平均预测法、趋势预测法、非线性趋势预测法、季节指数的概念;掌握在excel中建立指数平滑预测模型、移动平均模型、线性趋势预测模型、非线性趋势预测模型、季节指数预测的方法,掌握寻找最优平滑常数、最优移动平均跨度、线性趋势模型参数、线性趋势值预测的各种方法。

实验五 手机用户消费习惯聚类分析

实验目的

• 理解聚类分析的概念; • 理解聚类分析的原理;

• 掌握在SPSS中进行聚类分析的方法。

实验步骤: 为研究移动用户的手机消费习惯,现收集了反映移动用户手机使用情况的数据,该数据中包含7个变量:客户编号(Customer_ID)、工作日上班时期电话时长(Peak_mins)、工作日下班时期电话时长(OffPeak_mins)、周末电话时长(Weekend_mins)、国际电话时长(International_mins)、总通话时长(Total_mins)和平均每次通话时长(average_mins)。请用SPSS软件按除客户编号外的6个变量维度对移动用户进行细分。部分数据如图所示。

移动电话用户手机使用情况部分数据

本次实验采用迭代聚类方法进行数据分析。

1.数据的初步分析

选择菜单 打开SPSS文件 telco.sav→分析(Analyze)→描述统计(Descriptive Statistics)→描述(Descriptives…)选入变量 将除“Customer_ID”外的其余6个变量选入变量框(Variables)中

设置选项 打开Options按钮,勾选均值(Mean)、标准差(Std.deviation)、最小值(Minimum)、最大值(Maximum)四项

结果输出见下图。

上图显示6个变量数值差异较大,其中均值最大值为1064.3,最小值为4.1267,标准差的取值也从最小的3.804变化到最大的560.801。这种差异会影响聚类分析的结果。而要消除这种影响,需在聚类前对数据进行标准化处理。

2.标准化处理

在上一步弹出的“Descriptive”对话框中选择“Save standardized values as variables”,即将标准化值另存为变量,输出如下图。

标准化的目的是消除量纲和变异的影响。消除量纲影响,要扣减平均值;消除变异影响,要除以标准差。因此标准化数据等于某变量的观察值减去该变量的平均数,然后除以该变量的标准差。标准化后各变量的平均数为0,标准差为1,消除了量纲和变异的影响。如ID为K1000050的用户工作日上班时间通话时长(Peak_mins)标准化后的值,Peak_mins标准化=(观察值-均值)/标准差=(40.61-708.347)/515.258=-1.296。

3.聚类分析

选择菜单 打开SPSS文件 telco.sav→分析(Analyze)→分类(Classify)→K均值聚类(K-Means Cluster…)选择变量 选入上图中红框内的6个标准化数据变量

设置选项 主窗口设置选项如下图中的

第二篇:实验报告册封皮

小果园小学三年级实验报告册

(202_—202_学年第二学期)

202_年2月

小果园小学四年级实验报告册

(202_—202_学年第二学期)

202_年2月

小果园小学五年级实验报告册

(202_—202_学年第二学期)

202_年2月

小果园小学六年级实验报告册

(202_—202_学年第二学期)

202_年2月

第三篇:科学实验报告册

实验名称:蜡烛的变化

实验材料:蜡烛、火柴、干玻璃片、试管夹 实验步骤:

1、检验试验用品是否齐全。

2、点燃蜡烛,观察现象。

3、试管夹夹住干玻璃片,放在火焰上方,观察现象。

4、整理器材。

实验现象:蜡烛开始燃烧,火焰下方蜡烛由固态变成液态,玻璃片上变黑。实验结论:蜡烛燃烧,一是形态发生了变化,二是生成新的物质——烟。

实验名称:探究水泥的变化

实验材料:火柴、杯子、盘子、酒精灯、玻璃棒、石棉网、水泥、铁架台、坩埚 实验步骤:

1、检查实验用品是否齐全。

2、将水泥倒入盘中,往盘中的水泥加水,观察水泥变化。

3、将水泥块放入坩埚。

4、点燃酒精灯,给水泥块加热,观察现象。

5、整理器材。

实验现象:

1、往盘中的水泥加水,过了一会,水泥凝固了。

2、点燃酒精灯,给水泥块加热,水泥块没有变化。实验结论:水泥不能恢复原状。

实验名称:食盐的变化

实验材料:火柴、杯子、盘子、酒精灯、玻璃棒、石棉网、食盐、铁架台、坩埚 实验步骤:

1、检验试验用品是否齐全。

2、向杯中倒入水,把食盐放入水中。

3、用玻璃棒搅拌,观察想象。

4、把食盐水放入坩埚,放在铁架台上。

5、点燃酒精灯,给食盐水加热,观察现象。

6、整理器材。

实验现象:把食盐放在水中,用玻璃棒搅拌,食盐在水中溶解了,看不到了。

点燃酒精灯,给食盐水进行加热,坩埚上可以清晰地看到已经析出的食盐颗粒。实验结论:通过给食盐水加热的方法可以使溶解的食盐恢复原状。

实验名称:铁生锈的条件

(一)实验材料:铁钉、砂纸、玻璃棒、碱、盐、油、醋 实验步骤:

1、检验试验用品是否齐全。

2、用砂纸打磨铁钉,去掉其表面覆盖物。

3、把铁钉放在瓶子里,放在一个地方,并编好号:

1、空气,2、装满水,3、半

瓶水,4、盐水,5、碱溶液、醋溶液......同时放入相同铁钉,相同时间后观察铁钉生锈情况。

4、整理器材

实验现象:水中,轻微生锈;一半水,一半空气,严重生锈;空气中,轻微生锈;

醋、碱、盐、水中,严重生锈;

油中无锈。

实验结论:铁在空气和水同时存在、有酸、碱、盐的情况下容易生锈。

实验名称:铁生锈的条件

(二)实验材料:三枚相同的铁钉、三个相同的试管、三个试管塞、干燥剂一小袋、水适量。实验步骤:

1、检验实验用品是否齐全。

2、把三枚铁钉分别放入三个试管中。

3、一个试管放少量水,浸没铁钉的一部分;另一个试管放满水,将铁钉完全浸没;一个试管放干燥剂。

4、最后分别用试管塞把三个试管塞紧。

5、整理器材。实验现象:放置几天后取出三枚铁钉观察,发现第一个试管中的铁钉在紧密接触水面的地方有铁锈,而其他两个铁钉无铁锈。

实验结论:潮湿的空气是铁生锈的重要条件。

实验名称:牛奶的变化

实验材料:烧杯、玻璃棒、醋、啤酒、食盐、柠檬汁、牛奶 实验步骤:

1、检验试验用品是否齐全。

2、将醋加入装有四分之一牛奶的烧杯中,搅拌,观察现象。

3、将啤酒加入装有四分之一牛奶的烧杯中,搅拌,观察现象。

4、将食盐加入装有四分之一牛奶的烧杯中,搅拌,观察现象。

5、将柠檬汁加入装有四分之一牛奶的烧杯中,搅拌,观察现象。

6、整理器材。

实验现象:牛奶中放醋,牛奶中出现混合物凝结现象。

牛奶中放入啤酒,牛奶变成絮状。

牛奶中加入食盐,牛奶没有变化。

牛奶中加入柠檬汁,牛奶中有沉淀生成。实验结论:现象同结论。

实验名称:测量速度 实验材料:米尺、秒表

实验步骤:

1、检查实验用品是否齐全。

2、用正常的步伐走5米、10米,测出你用了多长时间。

3、用正常的步伐走5秒、10秒,量出你走的路程。

4、比正常步伐走得慢一点,测出走5米、10米用的时间和走5秒、10秒的路程。

5、比正常步伐走得快一点,测出走5米、10米用的时间和走5秒、10秒的路程。

6、整理器材。

实验现象:用的时间长,路程长;时间短,路程就短。

实验结论:相同时间比较运动的距离,跑的距离远,说明运动的速度快,反之则运动的速度

慢;相同距离比较所用的时间,用的时间越少,说明速度越快,反之则运动的速度慢。

实验名称:惯性试验

实验材料:鱼缸一个、鸡蛋一个、光滑的薄木板一个、小锤一个 实验步骤:

1、检查实验用品是否齐全。

2、把鱼缸装入二分之一的水,盖上薄木板,然后把鸡蛋放在木板上面。

3、用小锤沿水平方向迅速敲击木板、看鸡蛋如何运动。

4、整理器材。实验现象:鸡蛋会掉入水中。

实验结论:鸡蛋没有随木板一起运动,而是保持了它原有的运动趋势,木板抽掉后,只好掉进鱼缸内,说明鸡蛋具有惯性。

实验名称:昼夜交替的模拟实验 实验材料:地球仪、手电筒、大头针 实验步骤:

1、检查实验用品是否齐全。

2、用手电筒的光代表太阳光把地球仪照亮。观察地球仪上是否分成了明暗两部分,思考哪边是白天,哪边是黑夜。

3、自西向东转动地球仪,观察是否出现昼夜交替现象,分别在什么位置是早上、正午和傍晚。

4、整理器材。

实验现象:

1、地球仪上分成了明暗两部分,向着“太阳”的那面是白天,背着“太阳”的那面是黑夜。

2、地球自西向东转动,同一个地方出现了昼夜交替现象。当这个地方转到刚被光照射到是早晨,正对“太阳”时是正午,转到刚被光照不到时是傍晚。

实验结论:地球是个球体,太阳只能照亮地球的一半,向着太阳的那面是白天,背着太阳的那面是黑夜。地球不停的自转,昼夜现象就会交替出现。

实验名称:四季更替的模拟实验 实验材料:地球仪、手电筒

实验步骤:

1、检查实验用品是否齐全。

2、在桌子上画一个圆,把地球仪放在画好的轨道上运动。

3、手电筒在中间始终照着地球仪。

4、地球仪在转动过程中倾斜角度要保持一致。

5、观察与思考:仔细观察,“太阳”的光芒分别直射在什么地方?这与四季的形成又有什么关系呢?

6、整理器材。

实验现象:地球仪上的南北半球接受手电光的照射程度不断变化。

实验结论:地球在绕太阳公转的过程中,地轴总是倾斜的,并且倾斜的方向保持不变。由于地轴的倾斜,当地球处在公转轨道不同位置时,南北半球接受太阳光的照射程度也不断的变化,从而形成了寒来暑往的四季。

实验名称:月相变化模拟实验 实验材料:电灯、皮球

实验步骤:

1、检查实验用品是否齐全。

2、在教室里准备一盏瓦数大的电灯,用这盏灯当作太阳,学生自己当作地球,用皮球当作月球。

3、把“月球”举在空中,使“阳光”照到“月球”上,观察此时“月球”的明亮部分是什么形状。

4、然后使“月球”围绕“地球”公转一周,观察“月球”的明亮部分有什么变化。

5、整理器材。

实验现象:当“月球”亮面转到背着“地球”的方向时,“月球”几乎全是黑的;当“月球”亮面转到向着“地球”的方向时,“月球”几乎全是光明的;当“月球”亮面由向着“地球”到背着“地球”时,“月球”的明亮部分逐渐减少。

实验结论:月球是一个不发光、不透明的球体,我们看到的月光是它反射太阳的光。月相实际上就是人们从地球上看到的月球被太阳照亮的部分。由于观察的角度不同,所以看到的月相亮面大小、方向也就不同。

实验名称:日食和月食的形成模拟实验 实验材料:电灯、圆形小镜子

实验步骤:

1、检查实验用品是否齐全。

2、在与你的眼睛同样高的墙壁上悬挂一盏电灯,用它当作太阳。手持一面圆形的小镜子当作月亮,与你电灯的视线大体相平。

3、面对电灯,闭上一只眼睛,调整“月亮”与眼睛的距离,使“月亮”能完全遮住“太阳”。这时就发生了日食。

4、保持原有姿势,沿逆时针方向原地转动,当你的头部(相当于地球)遮住射向“月亮”的光辉时,便发生了“月食”。

5、再重复几次实验,观察“日食”和“月食”时哪边先亏。

6、整理器材。实验现象:“日食”时总是太阳的西边先亏。“月食”时总是月亮的东边先亏。

实验结论:月球围绕地球转,地球围绕太阳转,当月球转到地球和太阳中间,三个天体大致呈一条直线的时候,月球的影子就会投在地球上,处在月影里的人由于被月球挡住了视线,就看不见太阳或只能看见一部分太阳,这就是日食。

实验名称:蚯蚓对干湿环境的反应

实验材料:蚯蚓5条、长方形纸盒、黑湿布、透明的塑料薄膜 实验步骤:

1、检查实验用品是否齐全。

2、找一个长方形纸盒把里面涂黑,把盒底挖掉一半,贴一块透明的塑料薄膜。

3、在桌上铺一块黑湿布,在布上放上5条蚯蚓,用盒罩住,使蚯蚓正好在盒内的明暗交界处,观察蚯蚓往哪爬,比较亮处和暗处蚯蚓的数量。

4、用一个长方形纸盒,在纸盒垫上塑料薄膜,在盒左边放干土,在盒右边放湿土,干土与湿土间隔一段距离。

5、在盒中间没有土的地方,放5条蚯蚓,观察蚯蚓往哪爬,比较干土与湿土中蚯蚓的数量。

6、整理器材。

实验现象:

1、蚯蚓都爬到阴暗处。

2、蚯蚓都爬到湿土里。

实验结论:蚯蚓适宜生活在阴暗潮湿的环境中。

实验名称:植物的向光性实验

实验材料:植物幼苗(玉米、小麦等)、火柴杆、小花盆(或培养皿)、泥土、不透光的纸盒、台灯、剪刀

实验步骤:

1、检查实验用品是否齐全。

2、用剪刀在不透光的纸盒一侧挖一个直径为1cm的孔,待模拟单侧光照射时使用。

3、将几株长势相同但其尚未出胚芽鞘的小麦幼苗依次排开,分别栽种在两个花盆中,幼苗的旁边插一根火柴杆,作为对比的参照物。

4、将制好的遮光罩扣住花盆(一组用不透光的纸盒,另一组用一侧带小孔的纸盒),白天将装置置于阳光充足的地方,夜间以台灯代替光源,并使光从小孔中透入纸盒。

5、每天打开纸盒,观察幼苗的生长情况,记录下高度、倾斜角度及当日的温度、天气等情况。

6、整理器材。

实验现象:幼苗朝纸盒开孔的方向生长,也就是向着光源的方向生长。实验结论:植物的生长具有向光性。实验名称:馒头发霉的对比试验 实验器材:四片馒头片、塑料袋、放大镜、滴管、镊子 实验步骤:

1、检验实验用品是否齐全。

2、选四片馒头,分别贴上号码。

3、在1、3号上滴水,将2、4号烤干。

4、将4片馒头分别装入袋中。

5、将1、2号放在窗台上,3、4号放在冰箱里。

6、几天后,观察4片馒头,看看发生了什么变化,并记录下来。

7、整理器材。

实验现象:1号馒头发霉最早,发霉面积最大。

2号、3号馒头发霉时间和面积居中。

4号馒头发霉时间晚,发霉面积小。实验结论:馒头在温暖、潮湿的情况下容易发霉。

第四篇:JAVA实验报告册

《面向对象程序设计》

实验报告与习题册

202_ / 202_ 学年 第1学期

系 别 计算机科学与技术系 专 业 班 级 姓 名

计算机软件 软件一班 罗晓薇

朱强 指导教师 目 录

实验一 开发环境的搭建及使用

一 实验目的与要求

1、进行java开发环境的配置;

2、熟悉eclipse集成开发环境;

3、编写简单的java application 和 java applet程序,并在eclipse中编辑、编译并运行这两种程序。

二 实验内容

1、安装jdk并配置环境变量,在下面写出如何判断环境变量是否配置成功;安装eclipse集成开发环境。

答:安装过程 双击jdk图标,点击新窗口中的“接受”按钮,选择安装位置再点击“下一步”,最后“完成”。

设置环境变量并测试 右击“我的电脑”,选择“属性”项,在新窗口选择“高级”选项,再选择“环境变量”选项,在“系统变量”栏选择“path”栏,双击此栏,在编辑系统变量窗口中修改“变量值”,输入“c:javajdk1.6.0_18bin;”,再新建环境变量“classpath”在变量值中输入“.;c:javajdk1.6.0_18bin”。点击“开始”中的“运行”,输入命令“cmd”,输入“java

”回车,如果出现了代码,就说明已经设置好环境变量了。

2、使用eclipse编写java application其功能是显示字符串“hello world!”,请将源代码和运行结果截图写在下面的空白处。答:源代码 public class helloworld { /** * @param args*/ public static void main(string[] args){ // todo auto-generated method stub system.out.println(hello world!);} } 运行结果

三 实验内容中遇到的问题、解决方法和体会。

答:问题 在安装java软件包时设置环境变量时,对path变量的变量值不知道用什么,还有新建classpath变量时也不知道怎么设置变量值; 在检测环境变量是否设置好时,也不知道怎么检测。

解决办法 查书本上的安装步骤,和询问同学,开始也不知道怎么检测环境变量已经设好了,后来看同学演示并解释了一下,知道软件已经安装成功,可以直接使用了。

体会 安装java软件并投入使用时,需要设置环境变量,而这些环境变量可以使我们的一些功能得以实现和利用;

在不知道怎么安装和使用一个新的软件时,可以查询书籍,也可以询问同学。

实验二 java程序设计基本语法

一 实验目的与要求

1、java常见数据类型、运算符和各种控制结构的简单应用;

2、理解递归原理;

3、实现数组的简单应用。

二 实验内容

1、编程输出0~100间所有能被3或5整除的数,每行输出不多于5个数。答: public class testcontinue { public static void main(string[] args){ int n=0;int i=0;for(n=0;n<=100;n++){ if(n % 3!=0 && n % 5!=0)//不能被3或5整除,结束本次循环 continue;i++;system.out.print(n+);if(i % 5==0){ //每五个数一行system.out.println();} } } } 运行结果

2、编写功能要求:按照考试成绩的等级输出百分制分数段,a等为85分以上,b等为70~84分,c等为60~69分,d等为 60分以下。成绩的等级由键盘输入。

运行结果

3、运用java二维数组打印“魔方阵”。所谓魔方阵是指这样的矩阵,它的每一行、每一列和对角线之和均相等,要求打印1~25之间由自然数构成的魔方阵。

答:

public class magics { public static void main(string[] args){ int i=0;int j=0;int m=0;int n=5;j=(n+1)/2-1;int[][]a=new int[n][n];a[i][j]=++m;while(m1){ } if(i<0)} for(i=0;i(n-1))a[i][j]=++m;i=i+2;j=j-1;运行结果

三 实验内容中遇到的问题、解决方法和体会。

实验二 方法与递归

一 实验目的与要求

1、理解递归原理;

2、掌握递归方法的设计与调用。

二 实验内容

1、输入两个整数m和n,求其最大公约数和最小公倍数。public static void main(string[] args){ int m,n,r,gcd,lcm=0;m = integer.parseint(args[0]);//把字符串转换整型

n = integer.parseint(args[1]);lcm = m*n;while((r=m%n)!=0){ m=n;n=r;} gcd=n;lcm=lcm/gcd;system.out.println(最大公约数:+gcd);//打印出最大公倍数system.out.println(最小公倍数:+lcm);//打印出最小公倍数 } } 运行结果

输入6,21

2、设计一个递归程序,计算n!。

答:public class factorial { } static int f(int n){ return n==0?1:n*f(n-1);} public static void main(string[] args){ system.out.println(10!是:+f(10));} 运行结果

三 实验内容中遇到的问题、解决方法和体会。

问题 进行实验内容1时,编写代码处没有显示错误,运行程序时出现了下面的情况。

体会 后来听老师讲到包时,才知道java.lang是一个包,想到可能是我用到的方法在包中,但没有引入它。

实验三 面向对象程序设计

一 实验目的与要求

1、编写java应用程序,完成类、对象的创建及使用;完成成员方法和构造方法的创建及使用。

2、掌握权限访问控制符public和private的用法;实现类的继承;实现变量的隐藏和方法的重写;实现成员方法和构造方法的重载;掌握多态的意义,学会多态在程序设计中的应用。

3、编写java应用程序,完成接口的实现;体会抽象类和接口的区别;体会接口的继承原理;将接口和类分别定义在不同的包中,掌握包的使用。

二 实验内容

1、定义一个学生类,为其添加成员变量为学号、年龄、姓名、班级和学校,其中学号为最终变量,学校为类变量;为其添加构造方法以完成对学生对象的初始化;为其添加成员方法getinfo(),作用是获取学生的所有信息;在main中创建一个学生对象,并验证学生类中所有方法。

class student { public final int id;public int age;public string name;public string remove;public static string school;student(){ id=0;age=20;name=小明;remove=一班;school=师范;} public string getinfo(){ return id=:+id+n+age=:+age+n+name=:+name+n+remove=:+remove+n+school=:+school;} public static void setschool(string school){ } public static void main(string[] args){ student student=new student();student.school = school;system.out.println(student.getinfo());} }

2、在第一题的基础上,添加三个成员方法以用来改变年龄、姓名、班级的值;添加五个成员方法以用来分别获取学号、年龄、姓名、班级和学校的值;在main中创建一个学生对象,并验证这些方法。class student { public final int id;public int age;public string name;public string remove;public static string school;student(){} id=0;age=20;name=小明;remove=一班;school=师范;public int getage(){ } public void setage(int age){ } public string getname(){ } public void setname(string name){ } public string getremove(){ } public string setremove(string remove){ return this.remove = remove;} public int getid(){ } public static string getschool(){ } public string getinfo(){ return return school;return id;return remove;this.name = name;return name;this.age = age;return age;id=:+id+n+age=:+age+n+name=:+name+n+remove=:+remove+n+school=:+school;} } public static void main(string[] args){ student student=new student();system.out.println(student.getinfo());}

3、修改学生类中成员的访问权限,体会public和private两种访问权限的用法。

答: 类中成员的访问权限:继承有关 public 此成员都可公开调用

private 只有本类实例成员方法才可调用

如果子类继承了父类,而基类中成员变量或成员方法有private的,子类就不能访问那个成员。

4、定义一个people类,它包含属性有姓名name和性别sex,为people类派生出一个子类employee类,为其增加两个属性年龄age和工资等级grade,工资等级分a、b、c三个等级,在子类中增加用于打印出员工的姓名、性别、年龄和工资等级的方法print,编写一个应用程序,测试定义的类。class people { public string name;public string sex;} enum grade{a,b,c;} class employee extends people{ public int age;public string grade;this.name=name;employee(string name,string sex,int age,string grade){ } } this.sex=sex;this.age=age;this.grade=grade;void print(){ system.out.println(输出职工信息:);system.out.println(姓名:+name);system.out.println(性别:+sex);

system.out.println(年龄:+age);system.out.println(工资等级:+grade);} public class test{ }

public static void main(string[] args){ } employee employee=new employee(mary,f,19,a);employee.print();

5、定义一个people类,它包含属性有姓名name和性别sex和年龄age,一个构造方法,用来初始化这三个属性;定义一个people类的子类student,添加一个属性学号number,添加两个构造方法,一个有参构造方法,一个无参构造方法,他们都要调用父类的构造方法或本类的构造方法来完成对象的初始化,添加两个成员方法,一个是选课choose(),用来输出“我没有选课”,另一个是选课choose(string),用来选择由参数指定的课程。class people{ public string name;public string sex;public int age;people(){} people(string name,string sex,int age){ this.name = name;this.sex = sex;this.age = age;} } class student extends people{ public int id;student(){ super();} public student(int id,string name,string sex,int age){ super(name,sex,age);this.id = id;} void choosing(){ system.out.println(我没有选课);} void choosing(string n){ system.out.println(我选的课程是:+n);} public string getinfo(){ return 学号:+id+n+姓名:+name+n+性别:+sex+n+年龄:+age;} } public class choose { public static void main(string[] args){ student student = new student(123456,rose,f,18);system.out.println(student.getinfo());student.choosing();student.choosing(java);} }

6、创建一个接口shape,其中有抽象方法area,类circle、rectangle实现area方法计算其面积并返回,又有star类实现shape的area方法,其返回值是0,star类另有一返回值boolean型的方法isstar;在main方法中创建一个数组,根据随机数向其中加入shape的不同子类对象,然后将数组元素依次取出,判断其是否为star类,如是返回其个数,否则返回其面积。

interface shape { double area();} class circle implements shape { private double radius;public circle(double radius){ this.radius = radius;} public double area(){ return 3.14*radius*radius;} } class rectangle implements shape { private double wide;private double length;rectangle(double length,double wide){ this.length = length;this.wide = wide;} public double area(){ return wide*length;} } class star implements shape { public double area(){ return 0.0;} public static boolean isstar(shape s){ return(s instanceof star)? true: false;} } public class test { public static void main(string[] args){ circle c = new circle(3);rectangle r = new rectangle(3,6);star star = new star();shape[] array = new shape[]{c,r,star,star,star,c };

for(int i=0,j=1;i

三 实验内容中遇到的问题、解决方法和体会。

遇到的问题:在实验中,在类中设置构造方法时遇到了问题和困难,不知道怎样设置参数,还有创建接口时对它的继承不是很了解,用类来实现抽象方法也不是很熟练。

解决办法:参考书上创建类和接口的例子进行操作,问同学和老师,查询书本。

体会:要创建好一个类,不仅要熟悉创建类的方法,对接口、静态方法、抽象方法的运用更要熟练才行。在创建一个对象时,要对需要调用的方法中的参数、类型都要有一个了解,不然创建的对象就会不伦不类了。实验四 输入和输出流

一 实验目的与要求

1、掌握java常用i/o输入流和输出流;

2、掌握各种类型数据写入文件或读出文件的操作。

二 实验内容

1、编程利用文件流和缓冲流把一个文本文件中的内容复制到另外一个文件中。

运行结果

2、定义一个类,把这个类所生成的若干对象写入到文件中,然后从文件

中读出对象,测试读出对象的正确性。

运行结果

三 实验内容中遇到的问题、解决方法和体会。

实验五 gui图形界面设计

一 实验目的与要求

1、掌握awt与swing的区别与联系;掌握swing常用图像组件的使用;掌握主要的布局管理器的使用方法;

2、了解事件处理机制;掌握swing常用图像组件的使用;掌握固定菜单和弹出式菜单的创建和使用;

二 实验内容

1、设计并实现一个类似于windows操作系统附件中自带的计算器的一款简单的计算器,要求界面美观,设计合理;带有常用的菜单并实现其功能;能完成加、减、乘、除等简单的计算,在下面写出其核心代码。

实验时间:实验地点: 实验学时:

运行结果

三 实验内容中遇到的问题、解决方法和体会。

习题一

1.java源文件中最多只能有一个 类,其他类的个数不限。2.java应用程序的执行入口是 方法。

3.在jdk环境下,用什么命令编译java程序?用什么命令执行java程序?

习题二

1.数组对象中的哪个成员变量可以测得数组中的元素个数?

2.如果定义“int[] b=new b[10];”,b数组中的个元素值是多少? 3.同一个数组中可否存放不同类型的数据?

习题三

1.简述this引用的作用。

2.类的成员初始化的顺序如何?

3.什么是接口?什么是抽象类?二者有何区别? 4.简述java运行多态时的含义。5.简述java继承的主要内容。

习题四

1.什么是异常?java中的异常对象分为哪两类? 2.简述try-catch-finally语句的执行过程 3.throws子句与throw语句的区别和联系。

习题五

1.字符输出流类都是 抽象类的子类。2.对java对象读、写的过程被称为。

3.什么是流?什么是输入/输出流?什么是字节流和字符流,它们对应的基础

抽象类分别是什么?

第五篇:数据结构实验报告册

实验一 线性表的操作

实验类型:验证性 实验要求:必修 实验学时: 2学时

一、实验目的:

参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。

二、实验要求:

1、掌握线性表顺序表类和链表类的特点。掌握线性表的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1.设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:建立一个线性表,首先依次输人数据元素1,2,3,…,10,然后删除数据元素6,最后依次显示当前线性表中的数据元素。要求采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过10个。

第一题源代码: #include using namespace std;template

//定义模板类SeqList class SeqList { private: int length,x,j,data[10];public: public: SeqList()

//无参构造函数

{

length=0;

}

SeqList(T a[ ], int n)

//有参构造函数

{

for(int i=0;i

data[i]=a[i];

length=n;} ~SeqList()

//析构函数为空

{

}

int Length()

//求线性表的长度

{

return length;}

T Get(int i)

//按位查找,取线性表的第i个元素

{ } int Locate(T x)

//按值查找,求线性表中值为x的元素序号

{ } void Insert(int i, T x)

//在线性表中第i个位置插入值为x的元素

{ } T Delete(int i)

{

if(length==0)

throw“下溢”;

if(i<1||i>length)

throw“位置异常”;

x=data[i-1];

for(j=i;j

data[j-1]=data[j];

length--;

return x;} void PrintList()

{

for(int i=0;i

cout<

”;

cout<

void main(){ int n=10,a[10]={1,2,3,4,5,6,7,8,9,10};SeqList theseqlist(a,n);cout<<“删除前元素: ”;for(int i=0;i

cout<

//删除线性表的第i个元素

//注意此处j已经是元素所在的数组下标 //遍历线性表,按序号依次输出各元素

-------------------------2.设计一个带头结点的单链表类,要求:

(1)带头结点单链表类的成员函数包括取数据元素个数、插入元素、删除所有值为k的元素、取数据元素。

(2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。第二题源代码: #include using namespace std;template

struct Node { T data;Node *next;};/*****************************/ template class LinkList { private:

Node *first;

//单链表头指针

int length;public:

LinkList()

{

first=new Node;

first->next=NULL;

}

LinkList(T a[],int n)

//建立n个节点的指针

{

Node *s;

first=new Node;

first->next=NULL;

//初始化一个空链表

for(int i=0;i

{

s=new Node;

s->data=a[i];

s->next=first->next;

first->next=s;

}

length=n;

}

~LinkList()

{

Node *p=first;

while(p)

{

Node *q;

q=p;

p=p->next;

delete q;

}

}

int Length();

//求单链表长度

T Get(int i);

//取单链表第i个节点元素值

int Locate(T x);

//求单链表值为x的元素序号

void Insert(int i,T x);//在单链表中第i个位置插入元素值x的节点

T Delete(int i);

//在单链表中删除第i个节点

void PrintList();

// 遍历单链表,按序号依次输出个元素 };/********************************/ template int LinkList::Length(){ return length;} /******************************/ template T LinkList::Get(int i){ int j;Node *p;p=first->next;j=1;while(p&& j

p=p->next;

j++;} if(!p)

throw “位置”;else

return p->data;} /***********************************/ template int LinkList::Locate(T x){ Node *p;p=first;for(int i=0;i

p=p->next;

if(p->data==x)

return i+1;} } /***********************************/ template void LinkList::Insert(int i,T x){ Node *p;int j;p=first;j=0;while(p&&j

p=p->next;

j++;} if(!p)

throw“位置”;else {

Node *s;

s=new Node;

s->data=x;

s->next=p->next;

p->next=s;} length++;} /**************************************/ template T LinkList::Delete(int i){ Node *p;int j;p=first;j=0;while(p&&j

p=p->next;

j++;} if(!p||!p->next)

throw“位置”;else {

Node *q;

q=new Node;

int x;

q=p->next;

x=q->data;

p->next=q->next;

delete q;

length--;

return x;}

} /*******************************************/ template void LinkList::PrintList()

// 遍历单链表,按序号依次输出个元素 { Node *p;p=first;for(int i=0;i

p=p->next;

cout<<“第”<<(i+1)<<“个元素为:”<<(p->data)<

int r[ ]={10,9,8,7,6,5,4,3,2,1};

LinkList a(r , 10);

cout<<“原表为:”<

a.PrintList();

cout<

a.Insert(1,-2);

//执行插入操作;

a.Insert(2,-1);

a.Insert(3,0);

cout<<“执行插入后输出为:”<

a.PrintList();

cout<

a.Delete(1);

a.Delete(1);

a.Delete(1);

cout<<“执行删除后输出为:”<

a.PrintList();

cout<

cout<<“按位查找元素:”<

cout<<“第 5 个元素为: ”;

cout<

//查找链表中第 5 个元素

cout<

心得体会:

实验二 栈、队列、串的操作

实验类型:验证性 实验要求:必修 实验学时: 2学时

一、实验目的:

参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。

二、实验要求:

1、掌握栈、队列、串的特点。掌握特殊线性表的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1.堆栈类测试和应用问题。要求:

设计一个主函数实现对顺序堆栈类和链式堆栈类代码进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈堆栈中的数据元素并在屏幕上显示。第一题源代码: #include using namespace std;/********************************************************/ const int StackSize=10;template class SeqStack { private:

T data[StackSize];

int top;public:

SeqStack()

{

top=-1;

}

~SeqStack()

{

}

void push(T x);

T pop();

T GetTop()

{

if(top!=-1)

return data[top];

}

bool Empty()

{

top=-1?(return 1):(return 0);

} };

template void SeqStack::push(T x){ if(top==StackSize-1)

throw “上溢”;top++;data[top]=x;} template T SeqStack::pop(){ T x;if(top==-1)

throw “下溢”;x=data[top--];return x;}

/****************************************************/ template struct Node { T data;Node *next;};

template class LinkStack { private: Node *top;public: LinkStack(){

top=NULL;} ~LinkStack(){

while(top)

{

Node *p;

p=top->next;

delete top;

top=p;

}

} void push(T x);T pop();T gettop(){

if(top!=NULL)

return top->data;} bool Empty(){

top==NULL?return 1:return 0;} };

template void LinkStack::push(T x){ Node *s;s=new Node;

//没有申请空间时 会出现错误!

s->data=x;s->next=top;top=s;} template T LinkStack::pop(){ T x;Node *p;if(top==NULL)

throw “下溢”;x=top->data;p=top;top=top->next;delete p;return x;}

/******************************************************/ void main(){ SeqStack aa;LinkStack bb;

for(int i=1;i<=5;i++)

aa.push(i);

cout<<“顺序栈出栈:”;for(i=0;i<5;i++){

int k=0;

k=aa.pop();

cout<

”;}

cout<

for(i=1;i<=5;i++)

bb.push(i);

cout<<“链式栈出栈:”;for(i=1;i<=5;i++){

int j=0;

j=bb.pop();

cout<

”;} cout<

2.队列类测试和应用问题。要求:

设计一个主函数对循环队列类和链式队列类代码进行测试.测试方法为:依次把 1,2,3,4,5入队,然后出队中的数据元素并在屏幕上显示。

第二题源代码: #include #include using namespace std;

const int QueueSize=100;

/**************************************/ template class CirQueue { public: T data[QueueSize];

int front, rear;

CirQueue(){

front=rear=0;}

~ CirQueue(){

}

void EnQueue(T x)

{

if((rear+1)% QueueSize ==front)

throw “上溢”;

rear=(rear+1)% QueueSize;

data[rear]=x;

} T GetQueue()

{

if(rear==front)throw “下溢”;

int i=(front+1)% QueueSize;

return data[i];} T DeQueue(){

if(rear==front)

throw “下溢”;

front=(front+1)% QueueSize;

return data[front];

} };/*********************************************/ template struct Node { T data;Node *next;};

/*********************************************/ template class LinkQueue { private: Node *front,*rear;

//队头队尾指针 public: LinkQueue();

~LinkQueue(){ } void EnQueue(T x);

//将x入队

T DeQueue();

//将队头元素出队

T GetQueue()

{

if(front!=rear)

return front->next->data;

//取对头元素

} bool Empty()

//判断链队列是否为空

{

front==rear?return 1:return 0;} };/***************************************/ template LinkQueue::LinkQueue(){ Node *s;s=new Node;s->next=NULL;

//创建头结点s front=rear=s;} /***************************************/ template void LinkQueue::EnQueue(T x){ Node *s;s=new Node;s->data=x;s->next=NULL;rear->next=s;rear=s;} /***************************************/ template T LinkQueue::DeQueue(){ Node *p;T x;if(rear==front)

throw“下溢”;p=front->next;x=p->data;front->next=p->next;if(p->next==NULL)

rear=front;delete p;return x;} /***********************************************/ void main(){ CirQueue a;LinkQueue b;for(int i = 1;i <= 5;i++){

a.EnQueue(i);

b.EnQueue(i);} for(i = 1;i <= 5;i++){

int k,j(0);

k = a.DeQueue();

j=b.DeQueue();

cout<<“循环队列输出:”<< k<<“

”<<“链队列输出:”<

心得体会:

实验三 多维数组和广义表的操作

实验类型:验证性 实验要求:必修 实验学时: 2学时

一、实验目的:参照给定的多维数组类和广义表类的程序样例,验证给出的多维数组和广义表的常见算法,并实现有关的操作。

二、实验要求:

1、掌握多维数组和广义表的特点。掌握它们的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1.设计函数建立一个n*n阶的对称矩阵。要求:

(1)实现将对称矩阵用一维数组存储输出。(2)实现矩阵转置算法。(3)实现魔方阵算法。

(4)设计一个测试例子,并编写主程序进行测试。

第一题源代码: 1.1 #include using namespace std;int a[10][10];int save[100];int main(){ int n,i,j;puts(“输入矩阵的维数 N”);cin >> n;for(i = 0;i < n;i++)

for(j =0;j < n;j++){

a[i][j] = rand()% 10 + 1;

a[j][i] = a[i][j];

}

for(i = 0;i < n;i++){

for(j = 0;j < n;j++)

cout<

cout<

}

puts(“转化后: ”);

int k = 0;

for(i = 0;i < n;i++)

for(j = 0;j <= i;j++)

{

k = i *(i + 1)/ 2 + j;

save[k] = a[i][j];k++;}

for(i = 0;i < n *(n + 1)/ 2;i++)cout<

cout<

运行结果:

1.2 #include using namespace std;const int MaxTerm=100;

template

struct element { int row, col;T item;};

struct SparseMatrix { element data[MaxTerm];int mu, nu, tu;};

void Trans1(SparseMatrix A, SparseMatrix &B){ B.mu=A.nu;B.nu=A.mu;B.tu=A.tu;if(B.tu>0)

{

int pb = 0;

for(int col = 0;col

for(int pa = 0;pa < A.tu;pa++)

if(A.data[pa].col==col)

{

B.data[pb].row= A.data[pa].col;

B.data[pb].col= A.data[pa].row;

B.data[pb].item= A.data[pa].item;

pb++;

} } } int main(){ int i;SparseMatrix AA,BB;puts(“输入行数 列数 非零元素个数”);cin >> AA.mu >> AA.nu >> AA.tu;puts(“输入三元表:”);

//puts()与 cout 一样

for(i = 0;i < 7;i++){

cin >> AA.data[i].row;

cin >> AA.data[i].col;

cin >> AA.data[i].item;} Trans1(AA,BB);puts(“输出三元表í:”);for(i = 0;i < 7;i++){

cout<

cout<

cout<

return 0;} 运行结果:

心得体会:

实验四 树和二叉树

实验类型:验证性 实验要求:必修 实验学时: 2学时

一、实验目的:

参照给定的二叉树类的程序样例,验证给出的有关二叉树的常见算法,并实现有关的操作。

二、实验要求:

1、掌握二叉树、哈夫曼树和树的特点。掌握它们的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:

1.设计实现二叉树类,要求:

(1)编写一个程序,首先建立不带头结点的二叉链式存储结构的二叉树,然后分别输出按照前序遍历二叉树、中序遍历二叉树和后序遍历二叉树访问各结点的序列信息,最后再测试查找函数和撤销函数的正确性。

(2)实现二叉树层次遍历的非递归算法。

(3)假设二叉树采用链式存储结构进行存储,编写一个算法,输出一个二叉树的所有叶子结点,并统计叶子结点个数。(4)编写求二叉树高度的函数(5)编写一主函数来验证算法实现 第一题源代码:

#include using namespace std;template

struct BiNode { T data;BiNode *lchild,*rchild;};

template class BiTree { private:

static int i;

BiNode * root;

void Creat(BiNode *&root)

{

char ch;

cin>>ch;

if(ch=='#')root=NULL;

else

{

root=new BiNode;

root->data=ch;

Creat(root->lchild);

Creat(root->rchild);

}

}

void Release(BiNode *root)

{

if(root!=NULL)

{

Release(root->lchild);

Release(root->rchild);

delete root;

}

}

//前序建立扩展二叉树 //建立一棵空树

//生成一个结点 //递归建立左子树 //递归建立右子树

void PreOrder(BiNode * root)

//前序遍历 { if(root==NULL)

return;else {

cout<data;

PreOrder(root->lchild);

PreOrder(root->rchild);}

} void InOrder(BiNode *root)

{ if(root==NULL)

return;else {

InOrder(root->lchild);

cout<<(root->data);

InOrder(root->rchild);} } void PostOrder(BiNode * root)

{ if(root==NULL)

return;else {

InOrder(root->lchild);

InOrder(root->rchild);

cout<<(root->data);} } void LevelOrder(BiNode* root){

BiNode * Q[100];

int front = 0, rear = 0;

//中序遍历二叉树

//后序遍历二叉树

//采用顺序队列,并假定不会发生上溢

if(root==NULL)

return;

Q[++rear]=root;

while(front!=rear)

{

BiNode * q=Q[++front];

cout<data;

if(q->lchild!=NULL)

Q[++rear]=q->lchild;

if(q->rchild!=NULL)

Q[++rear]=q->rchild;

}

}

void showleaf(BiNode *root)

//显示叶子节点,并统计个数

{

if(root==NULL)

{

return;

}

else

{

if((root->lchild==NULL)&&(root->rchild==NULL))

{

cout<data;

i++;

}

else

{

showleaf(root->lchild);

showleaf(root->rchild);

}

}

}

int Depth(BiNode *root)

//算法求二叉树的深度

{

if(root==NULL)

return 0;

else

{

int hl= Depth(root->lchild);

int hr= Depth(root->rchild);

if(hl>hr)

return hl+1;

else

return hr+1;

}

} public: BiTree(){

Creat(root);

}

BiTree(BiNode *root){ } ~BiTree(){

Release(root);}

void display(){

cout<<“前序遍历二叉树:

PreOrder(root);

cout<

cout<<”中序遍历二叉树:

InOrder(root);

cout<

cout<<“后序遍历二叉树:

PostOrder(root);

cout<

cout<<”层序遍历二叉树:

LevelOrder(root);

cout<

cout<<“输出叶子节点:

showleaf(root);

”;“;”;“;”;

cout<

cout<<“叶子节点数为:”<

cout<<“树的深度为:

”<

} };template int BiTree::i=0;

void main(){ cout<<“前序建立扩展二叉树:”< AA;AA.display();}

运行结果:

数据分析实验报告册(最终五篇)
TOP