VB计算程序课程设计报告_第1页
VB计算程序课程设计报告_第2页
VB计算程序课程设计报告_第3页
VB计算程序课程设计报告_第4页
VB计算程序课程设计报告_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

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

文档简介

1、精品测试与光电工程学院课程设计任务书测控技术与仪器系100813班 学号10081329 姓名吴辉课程名称:用最小二乘法求拟合曲线课题要求:利用VB语言编程实现对给定离散点的拟合(不小于 10个)的拟合用最小二乘法求数据的拟合曲线。要求有良好的输入、输出界面,输出应包含直线方程并 图形显示拟合效果。完成软件的整体设计。课题进程:1)熟悉VB编程语言、最小二乘法算法分析3天2)编写程序实现以上功能3天3)软件调试、测试2天4)撰写课程设计报告2天指导老师:杨琳瑜目 录摘要2第一章最小二乘法21)理论依据 错误!未定义书2)线性拟合分析 错误!未定义书3) 非线性拟合分析5第二章 系统设计51)

2、采用的软件及开发平台52) 项目的总体方案53) 项目的详细设计6第三章设计实现 101) 主要功能模块的具体实现 102) 主要技术问题或难题的解决方法 103) 亮点或创新点的实现 11第四章结束语 11参考文献12 13摘要最小二乘法最早是由高斯提出的,这是数据处理的一种很有效的统计方法。高斯用这种方法解决了天文学方面的问题,特别是确定了某些行星和彗星的天体轨迹。这类天体的椭圆轨迹由5 个参数确定,原则上, 只要对它的位置做5 次测量就足以确定它的整个轨迹。但由于存在测量误差,由5 次测量所确定的运行轨迹极不可靠,相反,要进行多次测量,用最小二乘法消除测量误差,得到有关轨迹参数的更精确的

3、值。最小二乘法近似将几十次甚至上百次的观察所产生的高维空间问题降到了椭圆轨迹模型的五维参数空间。最小二乘法普遍适用于各个科学领域,它在解决实际问题中发挥了重要的作用。它在生产实践、科学实验及经济活动中均有广泛应用。比如说,我们引入等效时间的概念,根据Arrhenius函数和指数函数研究水化热化学反应速率随温度的变化,最后采用最小二乘法 回归分析试验数据,确定绝热温升和等效时间的关系式。第一章最小二乘法1)理论依据最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小.这里的乘”指的是用平方来度量观测点与估计点的远近(在古汉语中“平方”称为“二乘”),“最小”指的是参数的估计值要保证各个观

4、测点与估计点的距离的平方和达到最小对于回归模型y=S(x),若(Xi*) (i=1,2,3 m )为收集到的观测数据,则应该用来估m计,这里是(Xi,S(xJ) (i=1,2,3 m )的估计值。它们之间距离的平方和就是S(xJ y/2。1进而最小二乘估计量就是使m=S*(Xi)i 0myi2=sm?)in1 1 S(Xi) yi2达到最小值的参数。2)线性拟合分析给定一组测量数据 ( Xi, yi), i=0,1,2,m,基于最小二乘原理,求得变量x和y之间的函数关系f(x,A),使它最佳地逼近已知数据。其中A= (a°,a1,.,an)是一些待定参数。通常把最小二乘法中的| |

5、2都考虑为加权平方和,即2 mr22=(Xi)( f (Xi)yi)i 0welcome其中,(Xi)0是a,b上的权函数,它表示反应数据(Xi,yJ在实验中所占数据的比重 选择参数A使得加权平方和最小,即求满足mm一2一2(Xi)(f*(Xi) yi) min (Xi)(f(xJ yj , (xj01 0i 0的 f*(x)。要使(2)最小,它转换为求多元函数 mn2I(a0,ai, ,an) (Xi) aj j(x。 f(Xi)i 0j 0*的极小点(a。,aian ) I可题。由求多远函数极值的必要条件,有mn 2(Xi)aj j(Xi) f(Xi) k(Xi) 0 (k 0,1, ,n

6、).ak i 0j 0m若记(j, k)(Xi) j(Xi) k(Xi),i 0则m (f, k)(Xi)f(Xi) k(Xi) dk (k 0,1, ,n),i 0可改写为n (j, k)aj dk (k 0,1,n).(3)j 0此方程成为法方程。它也可以写成矩阵形式Ga d,其中a (a0,ai, ,an)T, d (d0,di, ,dn)T ,(0,0)(0,i)(0, n)(i,0)(i, i)(1, n)(n, 0) ( n, i)(n, n)由于0, in线性无关,故G 0,方程组(3)存在唯一解*ak ak(i=1,2,3 n)从而得到函数f(x) 的最小二乘法解为*an n

7、(x)m(xi)S*(xi)i02 f (xi )2(xi )*S(xi ) i02 f(xi)2*S* (x) a0 0 (x) a1 1(x)可以证明,这样得到的对于任何多项式形式的S(x) ,都有故S* (x)确实所求最小二乘解摘自数值分析3) 非线性拟合分析我们可通过变数变换将其化为线性模型。利用最小二乘线性拟合确定其系数,再利用逆变换给出原问题的曲线拟合函数。第二章系统设计1) 采用的软件及开发平台Microsoft Visual Basic 6.02)项目的总体方案开始73)项目的详细设计command1(生成点坐标):点击后按要求输入坐标点,在textl中输出command2(生

8、成坐标系,绘点):将输入的点在picturel中绘制出坐标轴以及点command3(生成线性方程):计算输入坐标点的线性回归方程,在 picturel中绘制线性方程,在picture2中输出线性方程command4 (消除):将 textl , picturel , picture2 中的内容清除command5(结束):结束程序对象属性名属性值FormlCaption最小一乘法TextlTextMultiLineTrueAlignment2LockedTrueCommandlCaption生成坐标点Command2Caption生成坐标系,绘点Command3Caption生成线性方程Com

9、mand4Caption清除Command5Caption退出PicturelPicture2Font四号LabellCaption线性方程为:调试运行截图:第三章设计实现1)主要功能模块的具体实现这个VB程序设计的主要功能模块在于怎样在图片框中画出线性图,然而,我们在这 一模块采用了分步考虑,首先考虑的是:假如使用者只输入一个点,那么在图片框中无法生成线性图,顾我们把它设成“单点无法拟合,请重新输入”(当然是先求出对于输入点的线性方程中的a值、b值);其次就是分别在X轴,Y轴上的X值、Y值相等的情况,这 样我们就认定为一条垂直于X轴或Y轴的直线,则在系统所确定的区域内画出线性图; 最 后就剩

10、下没有共同点的额点了,对于这我们直接以图片框的边界作为 X轴和Y轴(认为这 样方便画图),然后根据算出的a 值、 b 值和系统求出的线性方程,自动生成图像。2) 主要技术问题或难题的解决方法在这个程序设计的过程中,我们遇到了不少的问题,最主要的问题就在怎样画图,因为之前我们还没遇到过这样的问题,鉴于这个问题,我们尽量勤快点地去问问讲师的意见,并且不乏地去图书馆去借阅相关我们课题的书籍,而且我们还有自己的VB 书 (主要是line语句),根据这几个方式,我们基本上解决了我们面对的问题。3) 亮点或创新点的实现本次所做的编程中,我们充分运用了所学的知识,比如“If语句”、“For语句”、“MsgB

11、ox语句”和某些控件的有效性属性。这些都是通过反复运行测试做出的结果,因为在这其中我们的不足之处还是有很多很多的,例如:在还没输入要画线的点之前,就可以画线了,那么在那些控件之间就产生了矛盾(没点就能画出线性图?),所以我们使用了控件的有效性这一属性等等。第四章结束语最小二乘法是指使因变量估计值与实测值间的相对误差平方和为最小。在研究两个变量之间的关系时,我们可以用回归分析的方法进行分析。当确定了描述两个变量之间的回归模型后,就可以使用最小二乘法估计模型中的参数,进而建立数学模型,然后通过MATLAB 求解模型。通过本文实例模型(非多项式形式y aebx )的求解,我们学会了怎样从给定的二维数

12、据出发,寻找一个简单合理的函数来拟合给定的一组看上去杂乱无章的数据。如何巧妙地运用最小二乘法解决数据拟合问题,这不仅对我们在今后的学习有一定的帮助,而且在生产实践、科学实验中也起到了一定的作用。课题设计时VB 代码编写复杂、冗长,稍一不慎就会出错,我们调试了好多次,失败了好多次,而自己仔细想想,归根究底还是在于自己心太浮躁,没有耐心。VB 的编程是一项不易的工作,没有一颗平静的心是完成不了的。我想,将来做许多事,也需要保持这么一种平和的心态,它是一种个人综合素质,是我们制胜的关键。在课题设计的过程中,VB 代码的编写即设计的主过程无疑是一个难点,这部分内容虽然难,但在我们能力范围之内。而最大的

13、难点在于,项目设计中需要根据用户提供的坐标点来生成一次模拟曲线,刚遇到这个问题时,根本无法下手,最后还是到图书馆、网上查阅了相关资料才解决了这一难题。从中我领悟到,亲自行动才是解决问题最好的方法,实践就是一切。不管困难有多大,没有切实的行动时不行的。而这前提必然是自己要有解决问题的决心与坚忍不拔的毅力。此次项目对我来说是困难的,但无论怎样,我还是完成了,这说明一点,其实没有克服不了的困难。无论身处于怎样的境地,我们都要勇于面对,并想办法解决,因为自己根本无法逃避。参考文献参考内容为:Visual Basic程序设计教程第十章中10.1图形操作Visual basic 6学习指南 张志军著 第二

14、章2.3创建用户界面数值分析科学出版社附录程序代码如下:Dim x() As Single, y() As Single, i As Integer, n As Integer, m As IntegerDim sumx As Double, sumy As Double, xaver As Double, yaver As DoubleDim xy As Double, x2 As DoubleDim a As Double, b As DoubleDim xmax As Double, xmin As DoubleDim ymax As Double, ymin As DoublePriv

15、ate Sub Command1_Click()Randomizen = InputBox(" 请输入坐标点个数:")If n = 0 ThenMsgBox " 请输入坐标点个数"Command1.Enabled = TrueElseIf n = 1 ThenMsgBox " 单点无法拟合,请重新输入Exit SubCommand1.Enabled = FalseCommand2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = TrueElseCommand1.Enabled

16、= FalseCommand2.Enabled = TrueCommand4.Enabled = TrueEnd IfReDim x(n)ReDim y(n)For i = 1 To nx(i) = InputBox("请输入第" & i&"个点的横坐标")sumx = sumx + x(i)Text1 = Text1 & "第"& i & " 个点:(" & x(i)y(i) = InputBox("请输入第" & i&"

17、;个点的纵坐标")sumy = sumy + y(i)Text1 = Text1 & ", " & y(i) & ") " & vbCrLfNext iEnd SubPrivate Sub Command2_Click()Picture1.ClsPicture1.DrawWidth = 1Command2.Enabled = FalseCommand3.Enabled = TrueCommand4.Enabled = Truexmax = x(1): xmin = x(1)ymax = y(1): ymin =

18、y(1)For i = 2 To nIf xmax < x(i) Thenxmax = x(i)End IfIf xmin > x(i) Thenxmin = x(i)精品End IfNext iFor i = 2 To nIf ymax < y(i) Thenymax = y(i)End IfIf ymin > y(i) Thenymin = y(i)End IfNext iIf xmax = xmin ThenPicture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin)-(xmin * 1.5, ymin - 0.2

19、* (ymax- ymin)zbz xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)ElseIf ymax = ymin ThenPicture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin),ymin * 0.5)zbz xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5Else

20、Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin)-(xmax + 0.2 *(xmax - xmin), ymin - 0.2 * (ymax - ymin)zbz xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin),ymin - 0.2 * (ymax - ymin)Picture1.DrawWidth = 5For i = 1 To nPicture1.PSet (x(i), y(i),

21、 vbRedNext iEnd SubPrivate Sub Command3_Click()Command3.Enabled = FalseCommand4.Enabled = TruePicture2.Clsxaver = sumx / nyaver = sumy / nFor i = 1 To nxy = xy + x(i) * y(i)x2 = x2 + x(i) * x(i)Next ib = (xy - n * xaver * yaver) / (x2 - n * xaver * xaver)a = yaver - b * xavera = Left(a, 6)b = Left(b

22、, 6)Picture2.Print "y=" & b & "x+" & aIf xmax = xmin ThenPicture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin)-(xmin * 1.5, ymin - 0.2 * (ymax- ymin)zbz xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)Picture1.Line (xmax, ymax + 0.2 * (y

23、max - ymin)-(xmax, ymin - 0.2 * (ymax - ymin),vbBlueElseIf ymax = ymin ThenPicture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin),ymin * 0.5)zbz xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5Picture1.Line (xmin - 0.2 * (xmax - xmin), ymax)

24、-(xmax + 0.2 * (xmax - xmin), ymin),vbBlueElsePicture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin)-(xmax + 0.2 *(xmax - xmin), ymin - 0.2 * (ymax - ymin)zbz xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin),ymin - 0.2 * (ymax - ymin)Picture1.Line (x

25、min - 0.2 * (xmax - xmin), b * (xmin - 0.2 * (xmax - xmin) + a)-(xmax +0.2 * (xmax - xmin), b * (xmax + 0.2 * (xmax - xmin) + a), vbBlueEnd IfEnd SubPrivate Sub Command4_Click()Text1.Text = ""Picture1.ClsPicture2.ClsCommand1.Enabled = Truewelcome精品Command2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = FalseEnd SubPrivate Sub Command5_Click()EndEnd SubPrivate Sub Form_Activate()Dim s As Integer, l As SingleDim p1 As Single, p2 As Singlep1 =

温馨提示

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

评论

0/150

提交评论