收藏 分销(赏)

VB专业课程设计方案报告.docx

上传人:精**** 文档编号:2727195 上传时间:2024-06-05 格式:DOCX 页数:30 大小:121.37KB 下载积分:12 金币
下载 相关 举报
VB专业课程设计方案报告.docx_第1页
第1页 / 共30页
VB专业课程设计方案报告.docx_第2页
第2页 / 共30页


点击查看更多>>
资源描述
Visual Basic程序设计 课程设计汇报 设计题目 直线拟合 题目难度 四星级 姓 名 蒋龙鑫 学 号 9141010F0309 指导老师 申 屠 德 忠 提交日期 4月15号 目 录 一、题目描述和功效要求 1 二、程序设计 1 (一)计算模型或算法实施 1 (二)模块设计(窗体界面和代码) 2 窗体1设计…………………………………………………………………………….3 窗体2设计 7 窗体3设计 12 三、算例演示 14 四、参考文件 15 五、课程设计总结 15 一、题目描述和功效要求 1题目描述 本题目关键是用于将试验中得到含有线性特征一组数据经过最小二乘法拟合成直线,求出其直线方程和绘制出该直线图形。也就是寻求一条直线使这些离散点尽可能平均在该直线两边,它对于寻求数据规律有很大帮助,是一个比较实用程序。 2功效要求: (1)运行程序中,首先显示以下图窗体1“直线拟合”窗口,从中选择要拟合数据组数。单击“确定”按钮进入“数据输入”窗口。 (2)“数据输入”窗口中有10对文本框,用于输入最多10组试验数据。依据在“直线拟合”窗口选择不一样,这10对文本框只有指定数目标文本框可用。输入指定数据,然后单击“确定”按钮。假如数据未完全输入,则显示错误提醒消息框。 (3)假如数据输入正确,在“数据输入”窗口中单击“确定”按钮以后,程序进入“直线参数和图形”窗口,在此窗口中,程序依据输入数据自动计算拟合直线方程参数,并将系数和方程显示在窗口顶部。在窗口绘图区绘制直线图形。 二、程序设计 (一)计算模型或算法实施 假设试验中得到n个点,P1(X1,Y1),P2(X2,Y2),…,Pn(Xn,Yn),用i表示第i个点.因为多种误差存在,这些数据点不可能完全在一条直线上。假如我们能找到一条直线,使这n个点到该直线距离之平方和最小,则该直线就是用最小二乘法拟合出来直线。设拟合直线方程为F(X)=Y=bX+a,因为拟合出来直线斜率是固定,我们能够用每一个数据点和直线在Y方向上“残差”来定义,即残差ΔYi=F(Xi)-Yi,可得: Σ(ΔYi)^2=Σ(F(Xi)-Yi)^2=Σ(bXi+a-Yi)^2 依据最小二乘法原理,Σ(bXi+a-Yi)^2取极小值时,即为残差最小,这时确定直线即为拟合直线。上式是一个二元函数求极值问题,可分别对自变量a和b求偏导数,可易得: na+bΣXi =ΣYi aΣXi+bΣ(Xi)^2=Σ(XiYi) 从而得到公式: 由上公式可知,我们可用n个点坐标确定直线方程系数a和b,得到方程并将方程拟合出来. 本题目标程序设计由三个窗体组成。 在Form1中,有1个框架控件、1个标签控件、2个命令按钮和1个由6个单选按钮组成控件数组。单选按钮控件数组用来选择要输入数据组数,当选择好后,单击“确定”按钮,就能够进入下一个窗体。单击“取消”按钮则退出程序 Form1代码见附件。 在Form2中有2个命令按钮、20个文本框(每10个组成一个控件数组)、12个标签控件和很多直线组成。在文本框中输入试验数据后,点击“确定”按钮,若数据没有全部输入,则出现消息框,提醒没有完全输入。若已经完全输入,则显示Form3,隐藏Form2。和此同时,对试验数据计算,得出拟合直线截距和斜率,并在Form3标签控件1中表现;依据所得斜率和截距得到拟合直线方程,并在Form3标签2中表现;还能够在Form3中绘出拟合直线和每个试验点(用绿色),依据试验数据调整坐标系统,画出拟合直线。 Form2代码见附件。 (二)模块设计(窗体界面和代码) 本题目标程序设计由3个模块组成,其中窗体模块3个。 序号 模块名称 模块类型 模块功效 1 Form1 窗体模块 选择要输入数据组数,当选择好后,单击“确定”按钮,就能够进入下一个窗体;单击“取消”按钮则退出程序 2 Form2 窗体模块 输入试验数据后,对试验数据计算,得出拟合直线截距和斜率,依据所得斜率和截距得到拟合直线方程。 3 Form3 窗体模块 依据试验数据调整坐标系统,画出拟合直线。 窗体1设计 表1 窗体1中控件列表 序号 控件名称 控件类型 Left Top Width Height Caption 1 Label1 标签控件 1440 120 2055 375 直线拟合程序 2 Frame1 框架控件 480 600 3855 1455 请选择数据组数 3 Option1 单选框控件 360 360 975 255 5组 4 Option2 单选框控件 360 720 975 255 6组 5 Option3 单选框控件 360 1080 975 255 7组 6 Option4 单选框控件 2520 360 975 255 8组 7 Option5 单选框控件 2520 720 975 255 9组 8 Option6 单选框控件 2520 1080 975 255 10组 9 Command1 命令按钮控件 720 2280 1575 495 确定 10 Command2 命令按钮控件 2520 2280 1575 495 退出 表2 窗体1中事件过程列表 序号 事件过程 功效 1 Option1-click() 选择数据组数为5组 2 Option2-click() 选择数据组数为6组 3 Option3-click() 选择数据组数为7组 4 Option4-click() 选择数据组数为8组 5 Option5-click() 选择数据组数为9组 6 Option6-click() 选择数据组数为10组 7 Command1-click() 进入第二个窗体坐标轴输入 8 Command2-click() 退出拟合值线数据输入 表3 窗体1中通用过程和函数列表 序号 过程和函数 输入参数 输出参数 功效 1 MsgBox() 以文本向用户显示运行过程中信息,让用户单击按钮作选择 2 Chr() 10 换行符 使消息内容在中间某处换行 3 Chr() 13 回车符 窗体1代码 Form1 Private Sub Command1_Click() '显示第二个窗体 Form1.Hide Form2.Show Form3.Hide zxnh = MsgBox("你必需完全输入所选项目!" & Chr(10) & Chr(13) & _ "不然程序将会犯错!", 48, "直线拟合") End Sub Private Sub Command2_Click() '结束程序 End End Sub '使第二个窗体文本框根据第一个窗体给出数据组数显示 Private Sub Option1_Click() Form2.Label6.Enabled = False Form2.Label7.Enabled = False Form2.Label8.Enabled = False Form2.Label9.Enabled = False Form2.Label10.Enabled = False For n = 6 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option2_Click() Form2.Label6.Enabled = True Form2.Label7.Enabled = False Form2.Label8.Enabled = False Form2.Label9.Enabled = False Form2.Label10.Enabled = False Form2.Text1(6).Enabled = True Form2.Text1(6).BackColor = &HFFFFFF Form2.Text2(6).Enabled = True Form2.Text2(6).BackColor = &HFFFFFF For n = 7 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option3_Click() Form2.Label6.Enabled = True Form2.Label7.Enabled = True Form2.Label8.Enabled = False Form2.Label9.Enabled = False Form2.Label10.Enabled = False For n = 6 To 7 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next For n = 8 To 10 Form2.Text1(n).Enabled = False· Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option4_Click() Form2.Label6.Enabled = True Form2.Label7.Enabled = True Form2.Label8.Enabled = True Form2.Label9.Enabled = False Form2.Label10.Enabled = False For n = 6 To 8 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next For n = 9 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000F Next End Sub Private Sub Option5_Click() Form2.Label6.Enabled = True Form2.Label7.Enabled = True Form2.Label8.Enabled = True Form2.Label9.Enabled = True Form2.Label10.Enabled = False Form2.Text1(10).Enabled = False Form2.Text1(10).BackColor = &H8000000F Form2.Text2(10).Enabled = False Form2.Text2(10).BackColor = &H8000000F For n = 6 To 9 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next End Sub Private Sub Option6_Click() Form2.Label6.Enabled = True Form2.Label7.Enabled = True Form2.Label8.Enabled = True Form2.Label9.Enabled = True Form2.Label10.Enabled = True For n = 6 To 10 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFF Next End Sub 窗体2设计 表4 窗体2中控件列标 序号 控件名称 控件类型 Left Top Width Height Caption 1 Label1 标签控件 480 880 495 255 第1点 2 Label2 标签控件 480 1240 495 255 第2点 3 Label3 标签控件 480 1600 495 255 第3点 4 Label4 标签控件 480 1960 495 255 第4点 5 Label5 标签控件 480 2320 495 255 第5点 6 Label6 标签控件 480 2680 495 255 第6点 7 Label7 标签控件 480 3040 495 255 第7点 8 Label8 标签控件 480 3400 495 255 第8点 9 Label9 标签控件 480 3760 495 255 第9点 10 Label10 标签控件 480 4120 575 255 第10点 11 Label11 标签控件 1320 360 975 255 X坐标值: 12 Label12 标签控件 2520 360 975 255 Y坐标值: 13 Text1(1) 文本框控件 1440 840 735 270 14 Text1(2) 文本框控件 1440 1200 735 270 15 Text1(3) 文本框控件 1440 1560 735 270 16 Text1(4) 文本框控件 1440 1920 735 270 17 Text1(5) 文本框控件 1440 2280 735 270 18 Text1(6) 文本框控件 1440 2640 735 270 19 Text1(7) 文本框控件 1440 3000 735 270 20 Text1(8) 文本框控件 1440 3360 735 270 21 Text1(9) 文本框控件 1440 3720 735 270 22 Text1(10) 文本框控件 1440 4080 735 270 23 Text2(1) 文本框控件 2640 840 735 270 24 Text2(2) 文本框控件 2640 1200 735 270 25 Text2(3) 文本框控件 2640 1560 735 270 26 Text2(4) 文本框控件 2640 1920 735 270 27 Text2(5) 文本框控件 2640 2280 735 270 28 Text2(6) 文本框控件 2640 2640 735 270 29 Text2(7) 文本框控件 2640 3000 735 270 30 Text2(8) 文本框控件 2640 3360 735 270 31 Text2(9) 文本框控件 2640 3720 735 270 32 Text2(10) 文本框控件 2640 4080 735 270 33 Command1 命令按钮控件 480 4680 1335 495 确定 34 Command2 命令按钮控件 2040 4680 1335 495 返回 X1 Y1 X2 Y2 BorderStyle BorderWidth 35 Line1 直线控件 240 240 3600 240 1-solid 1 36 Line2 直线控件 240 240 240 4440 1-solid 1 37 Line3 直线控件 3600 240 3600 4440 1-solid 1 38 Line4 直线控件 1200 240 1200 4440 1-solid 1 39 Line5 直线控件 2400 240 2400 4440 1-solid 1 40 Line6 直线控件 240 720 3600 720 1-solid 1 41 Line7 直线控件 240 4440 3600 4440 1-solid 1 42 Line8 直线控件 240 240 1200 720 1-solid 1 表5 窗体2中事件过程列表 序号 事件过程 功效 1 Command1-click() 进入绘图窗体,拟合成直线 2 Command2-click() 退出拟合直线数据输入 表6 窗体2中通用过程和函数列表 序号 过程和函数 输入参数 输出参数 功效 1 Spc() 3 3个空格组成字符串 返回number个空格组成字符串 窗体模块代码2 Form2: Option Base 1 Dim m As Integer Dim X(10) As Single Dim Y(10) As Single Private Sub Command1_Click() '进入第三个绘图窗体 Form1.Hide Form2.Hide Form3.Show Dim A As Single '截距 Dim B As Single '斜率 Dim c As Single Dim d As Single Dim e As Single Dim f As Single Dim W As Single Dim R As Single Dim T As Single '讨论点个数 If Form2.Text1(5).Enabled = True Then m = 5 If Form2.Text1(6).Enabled = True Then m = 6 If Form2.Text1(7).Enabled = True Then m = 7 If Form2.Text1(8).Enabled = True Then m = 8 If Form2.Text1(9).Enabled = True Then m = 9 If Form2.Text1(10).Enabled = True Then m = 10 '对点x.y坐标进行赋值 If m = 5 Then For n = 1 To 5 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 6 Then For n = 1 To 6 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 7 Then For n = 1 To 7 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 8 Then For n = 1 To 8 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 9 Then For n = 1 To 9 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If If m = 10 Then For n = 1 To 10 X(n) = Text1(n).Text Y(n) = Text2(n).Text Next End If For n = 1 To m c = X(n) + c d = X(n) * X(n) + d e = X(n) * Y(n) + e f = Y(n) + f Next A = f/m-(m*e-c*f)*c/m/(m*d-c*c) '计算直线截距 B = (c * f - m * e) / (c * c - m * d) '计算直线斜率 '打印数据方程位置 Form3.CurrentX = 200 Form3.CurrentY = 350 Form3.Print "直线斜率(B)=" & B Form3.CurrentX = 200 Form3.CurrentY = 580 Form3.Print "直线截距(A)=" & A Form3.CurrentX = 200 Form3.CurrentY = 810 Form3.Print "直线方程为:"; Spc(3); "Y=" & B & "X+" & A '在坐标图上打印出点来 For n = 1 To m Form3.PSet (360 + 37 * X(n), 5400 - 37 * Y(n)), RGB(0, 0, 0) Next W = 5400 - 3700 * B - 37 * A R = 360 + (3700 - 37 * A) / B T = 360 - 37 * A / B '将超出坐标轴线去掉 If A >= 0 Then Form3.Line (360, 5400 - 37 * A)-(4060, W) If W < 1700 Then Form3.Line (R, 1700)-(4060, W), &H8000000F If W > 5400 And B < 0 Then Form3.Line (T, 5400)-(4060, W), &H8000000F Else Form3.Line (360 + (5400 - 37 * A) / B, 5400)-(4060, W) If W < 1700 Then Form3.Line (R, 1700)-(4060, W), &H8000000F If W > 5400 And B < 0 Then Form3.Line (T, 5400)-(4060, W), &H8000000F End If End Sub '返回第一个窗体 Private Sub Command2_Click() Form1.Show Form2.Hide Form3.Hide For n = 1 To m Text1(n).Text = "" Text2(n).Text = "" Next End Sub 窗体3设计 表7 窗体3中控件列表 序号 控件名称 控件类型 Left Top Width Height Caption 1 Label1 标签控件 480 120 1455 255 直线参数(Y=BX+A 2 Label2 标签控件 1680 1320 1095 255 直线(Y-X)图 3 Label3 标签控件 3360 5160 975 135 坐标百分比:10:1 4 Label4 标签控件 170 1920 180 135 100 5 Label5 标签控件 220 3480 135 135 50 6 Label6 标签控件 240 5400 135 135 0 7 Label7 标签控件 2160 5445 135 135 50 8 Label8 标签控件 3960 5445 180 135 100 9 Command1 命令按钮控件 600 5760 1455 495 关闭 10 Command2 命令按钮控件 2400 5760 1455 495 返回 X1 Y1 X2 Y2 BorderWidth BorderStyle 11 Line1 直线控件 480 195 120 195 1 1 - Solid 12 Line2 直线控件 1920 195 4560 195 1 1 - Solid 13 Line3 直线控件 120 195 120 1080 1 1 - Solid 14 Line4 直线控件 4560 195 4560 1080 1 1 - Solid 15 Line5 直线控件 120 1080 4560 1080 1 1 - Solid 16 Line6 直线控件 120 1200 4560 1200 1 1 - Solid 17 Line7 直线控件 120 1200 120 5640 1 1 - Solid 18 Line8 直线控件 360 1320 360 5400 1 1 - Solid 19 Line9 直线控件 360 1320 240 1560 1 1 - Solid 20 Line10 直线控件 360 1320 480 1560 1 1 - Solid 21 Line11 直线控件 360 5400 4440 5400 1 1 - Solid 22 Line12 直线控件 4560 1200 4560 5640 1 1 - Solid 23 Line13 直线控件 1200 5640 4560 5640 1 1 - Solid 24 Line14 直线控件 4440 5400 4200 5280 1 1 - Solid 25 Line15 直线控件 4440 5400 4200 5520 1 1 - Solid 226 Line16 直线控件 360 1700 420 1700 1 1 - Solid 27 Line17 直线控件 360 2070 420 2070 1 1 - Solid 28 Line18 直线控件 360 2440 420 2440 1 1 - Solid 29 Line19 直线控件 360 2810 420 2810 1 1 - Solid 30 Line20 直线控件 360 3180 420 3180 1 1 - Solid 31 Line21 直线控件 360 3550 420 3550 1 1 - Solid 32 Line22 直线控件 360 3920 420 3920 1 1 - Solid 33 Line23 直线控件 360 4290 420 4290 1 1 - Solid 34 Line24 直线控件 360 4660 420 4660 1 1 - Solid 35 Line25 直线控件 360 5030 420 5030 1 1 - Solid 36 Line26 直线控件 730 5340 730 5400 1 1 - Solid 37 Line27 直线控件 1100 5340 1100 5400 1 1 - Solid 38 Line28 直线控件 1470 5340 1470 5400 1 1 - Solid 39 Line29 直线控件 1840 5340 1840 5400 1 1 - Solid 40 Line30 直线控件 2210 5340 2210 5400 1 1 - Solid 41 Line31 直线控件 2580 5340 2580 5400 1 1 - Solid 42 Line32 直线控件 2950 5340 2950 5400 1 1 - Solid 43 Line33 直线控件 3320 5340 3320 5400 1 1 - Solid 44 Line34 直线控件 3690 5340 3690 5400 1 1 - Solid 45 Line35 直线控件 4060 5340 4060 5400 1 1 - Solid 表8 窗体3中事件过程列表 序号 事件过程 功效 1 Command1-click() 关闭程序,退出拟合直线 2 Command2-click() 退出拟合直线绘制过程,重新输入数据 窗体模块代码3 Form3: Private Sub Command1_Click() '结束程序 End End Sub Private Sub Command2_Click() '重新开始且将FORM2数据清空 Form1.Show Form2.Hide Form3.Hide For n = 1 To 10 Form2.Text1(n).Text = "" Form2.Text2(n).Text = "" Next End Sub 三、算例演示 输入输出数据 当选择5组数据时, Ⅰ:(54,76)、(65,83)、(87,89)、(82,61)、(34,22); Ⅱ:(34,56)、(24,89)、(29,59)、(78,61)、(94,57); Ⅲ:(58,26)、(44,77)、(55,89)、(67,65)、(76,98)。 运行结果: Ⅰ:截距A=7.9171725,斜率B=0.9041657,直线方程为Y=0.9041657X+7.9171725,坐标百分比:×1 Ⅱ:截距A=74.72493,斜率B=-0.199323,直线方程为Y=74.7293X-0.199323,坐标百分比:×1 Ⅲ:截距A=41.1017,斜率B=-0.4983051,直线方程为Y=41.1017X+0.4983051,坐标百分比:×1 当选择6组数据时, Ⅰ:(54,76)、(65,83)、(87,89)、(82,61)、(34,22)、(44,88); Ⅱ:(34,56)、(24,89)、(29,59)、(78,61)、(94,57)、(44,88); Ⅲ:(58,26)、(44,77)、(55,89)、(67,65)、(76,98)、(44,88)。 运行结果: Ⅰ:截距A=33.64924,斜率B=0.5931818,直线方程为Y=0.5931818X+33.64924,坐标百分比:×1 Ⅱ:截距A=80.64387,斜率B=-0.2735675,直线方程为Y=-0.2735675X8+0.64387,坐标百分比:×1 Ⅲ:截距A=69.0728,斜率B=8.381743E-02,直线方程为Y=8.381743E-02X+69.0728,坐标百分比:×1 四、参考文件 1.王栋.Visual Basic程序设计实用教程(第2版).北京:清华大学出版社,1月 2.王栋.Visual Basic程序设计实用教程(第4版).北京:清华大学出版社,12月 五、课程设计总结 以前总认为编个程序其实应该蛮简单,可是,到了真正自己动手时候才发觉有多困难,才认为自己掌握是多么少。上个学期学很多东西全部不太记得了,只有重新端起书本,重新寻求遗忘知识点,从头开始。 三个窗体模块,显得有点复杂,首次看到时,长长代码,真有吓到我,不过,认真琢磨后才发觉,大部分全部是反复代码,只是有部分地方比较难懂。关键是最终面要经过最小二乘法算出拟合直线斜率和截距,最终表现在坐标轴上。刚开始看源代码时候,没有弄懂那个式子含义,高中也有学过最小二乘法,不过仿佛求斜率和截距方法不一样,然后在室友一起推敲和翻阅资料后,还是决定改掉代码,用高中学过知识重新做了一遍,经过几次验证尝试,最终确定了最终代码是正确。 还有一点漏洞,不一样点拟合出来直线斜率和截距不一样,有比较大,有比较小,理想中坐标轴是能够控制大小,改变坐标轴上单位
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服