vb课程设计报告(直线拟合).doc_第1页
vb课程设计报告(直线拟合).doc_第2页
vb课程设计报告(直线拟合).doc_第3页
vb课程设计报告(直线拟合).doc_第4页
vb课程设计报告(直线拟合).doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

直线拟合一、功能本题目重要是用于将实验中得到的具有线性特征的一组数据通过最小二乘法拟合成直线,求出其直线方程和绘制出该直线的图形。二、详细设计本题目的程序设计由三个窗体组成。在Form1中,有1个框架控件、1个标签控件、2个命令按钮和1个由6个单选按钮组成的控件数组。单选按钮控件数组用来选择要输入的数据组数,当选择好后,单击“确定”按钮,就可以进入下一个窗体。单击“取消”按钮则退出程序Form1的代码见附件。在Form2中有2个命令按钮、20个文本框(每10个组成一个控件数组)、12个标签控件和许多直线组成。在文本框中输入实验数据后,点击“确定”按钮,若数据没有全部输入,则出现消息框,提醒没有完全输入。若已经完全输入,则显示Form3,隐藏Form2。与此同时,对实验数据计算,得出拟合直线的截距和斜率,并在Form3的标签控件1中体现;根据所得的斜率和截距得到拟合直线方程,并在Form3的标签2中体现;还可以在Form3中绘出拟合直线和每个实验点(用绿色),根据实验数据调整坐标系统,画出拟合直线。Form2的代码见附件。三、调试一开始,我是在三楼上机,用的是VB6.0,遇到的第一个问题是全局变量的设置问题。我不知道是我一个暑假把学的都忘了,最后终于在课本的帮助下成功做出来了。第二个问题是显示拟合直线。一开始,我在Form3中画了一个图片框,运行时总显示不了直线,后来索性将它删掉,再次运行时终于能出现直线,可是直线的位置与设想相差太大了。连续尝试了1个多星期后,终于明白了,原来我直接利用得到的直线方程的点的坐标在窗体上画直线是不对的,因为我所画的坐标轴的单位长度和窗体的单位长度不相等,之间需要一定的转换。于是再次修改代码,可还是没有出现预想的情况。重新检查后,没有发现程序错误。我又尝试输入一组特殊数据:(1,3)、(2,5)、(3,7)、(4,9)、(5,11),它们的拟合直线应该是Y=2X+1,斜率是2,截距是1,可运行后的结果让我大吃一惊,斜率是-0.2,截距是-0.1。我再次检查了数据计算部分的代码,没有发现错误,请教了好几位同学也没有解决问题,如此又郁闷了一个星期。不知什么时候,心中有种感觉书上有错误。找来大学物理实验课本,果不其然,在第三十七页找到类似的公式,经计算,终于发现课程设计课本上第211页 “令 ”中的“+”号应改为“-”。修改后,在调试过程中再也没出现什么大的问题。四、输入输出数据当选择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.7293X0.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五、课程设计总结经过此次程序设计,使我对许多事情的看法有了改变。记得上学期学VB的时候,感觉VB很简单,老师布置的作业也很快完成,多余的时间就在偷偷玩游戏。刚知道自己要做直线拟合这道题时,翻了一下书,感觉很简单,相比选择难题的同学,我心中不免有些得意,心想:快速做完后,再做一个,说不定能得个优。刚开始事情就有点不顺,但也没什么大问题,一直到写完所有程序,开始运行的时候,才发觉最糟糕的事情出现了运行中没有出现拟合直线,其他的问题都好办,可最终显示不出拟合直线就是失败,眼看着交作业的日子越来越近,心中却一点思绪都没有,而此时我又在金工实习,再加上二级考试的临近,我急得像热锅上的蚂蚁,不知怎么办才好。此时,我才真正体会到编写一个真正有用的程序是多么的困难,那是要花上许多的心血才得来的。事情终于有了转机,在我弃用图片框后终于发现要显示满足要求的直线首先要进行坐标转换,窗体是以缇为单位,而平面直角坐标系以“1”为单位,二者需要转换。明白这一点之后,我终于能在窗体上显示出直线了,然而,并非我所期望的直线。我于是假设直线斜率为2,截距为1,得到一组数据,将它们输入Form2的文本框中,结果发现得到的直线斜率和截距不是2和1,而是0.02和0.01左右小的数字,我晕倒。检查一便代码后发觉与书上提供的公式相吻合,我没有错,可程序的运行结果却如此荒谬,难道注定我此次设计不合格,明年再来一次吗?后来,我终于对书本产生怀疑,正是这一怀疑给一切带来了生机,我找出大学物理实验课本,找到相关内容,终于发现程序设计课本错了,一个减号被打印成加号。找到问题所在后,一切便尽在掌握之中。六、窗体图示七附件Form1:Private Sub Command1_Click() 显示第二个窗体Form1.HideForm2.ShowForm3.Hidezxnh = MsgBox(你必须完全输入所选的项目! & Chr(10) & Chr(13) & _ 否则程序将会出错!, 48, 直线拟合)End SubPrivate Sub Command2_Click() 结束程序EndEnd Sub使第二个窗体的文本框按照第一个窗体给出的数据组数显示Private Sub Option1_Click()Form2.Label6.Enabled = FalseForm2.Label7.Enabled = FalseForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option2_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = FalseForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseForm2.Text1(6).Enabled = TrueForm2.Text1(6).BackColor = &HFFFFFFForm2.Text2(6).Enabled = TrueForm2.Text2(6).BackColor = &HFFFFFFFor n = 7 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option3_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 7 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNext For n = 8 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option4_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 8 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextFor n = 9 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option5_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = TrueForm2.Label10.Enabled = FalseForm2.Text1(10).Enabled = FalseForm2.Text1(10).BackColor = &H8000000FForm2.Text2(10).Enabled = FalseForm2.Text2(10).BackColor = &H8000000FFor n = 6 To 9 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextEnd SubPrivate Sub Option6_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = TrueForm2.Label10.Enabled = TrueFor n = 6 To 10 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextEnd SubForm2:Option Base 1Dim m As IntegerDim X(10) As SingleDim Y(10) As SinglePrivate Sub Command1_Click() 进入第三个绘图窗体Form1.HideForm2.HideForm3.ShowDim A As Single 截距Dim B As Single 斜率Dim c As SingleDim d As SingleDim e As SingleDim f As SingleDim W As SingleDim R As SingleDim T As Single讨论点的个数If Form2.Text1(5).Enabled = True Then m = 5If Form2.Text1(6).Enabled = True Then m = 6If Form2.Text1(7).Enabled = True Then m = 7If Form2.Text1(8).Enabled = True Then m = 8If Form2.Text1(9).Enabled = True Then m = 9If 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 NextEnd IfIf m = 6 Then For n = 1 To 6 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 7 Then For n = 1 To 7 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 8 Then For n = 1 To 8 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 9 Then For n = 1 To 9 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 10 Then For n = 1 To 10 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd 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) + fNextA = (e * c - f * d) / (c * c - m * d) 计算直线的截距B = (c * f - m * e) / (c * c - m * d) 计算直线的斜率打印数据方程的位置Form3.CurrentX = 200Form3.CurrentY = 350Form3.Print 直线斜率(B)= & BForm3.CurrentX = 200Form3.CurrentY = 580Form3.Print 直线截距(A)= & AForm3.CurrentX = 200Form3.CurrentY = 810Form3.Print 直线方程为:; Spc(3); Y= & B & X+ & A在坐标图上打印出点来For n = 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论