VB计算程序课程设计报告.docx
- 文档编号:1607656
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:16
- 大小:184.62KB
VB计算程序课程设计报告.docx
《VB计算程序课程设计报告.docx》由会员分享,可在线阅读,更多相关《VB计算程序课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
VB计算程序课程设计报告
测试与光电工程学院
课程设计任务书
测控技术与仪器系100813班学号10081329姓名吴辉
课程名称:
用最小二乘法求拟合曲线
课题要求:
利用VB语言编程实现对给定离散点的拟合(不小于10个)的拟合
用最小二乘法求数据的拟合曲线。
要求有良好的输入、输出界面,输出应包含直线方程并图形显示拟合效果。
完成软件的整体设计。
课题进程:
1)熟悉VB编程语言、最小二乘法算法分析3天
2)编写程序实现以上功能3天
3)软件调试、测试2天
4)撰写课程设计报告2天
指导老师:
杨琳瑜
3)非线性拟合分析5
摘要
最小二乘法最早是由高斯提出的,这是数据处理的一种很有效的统计方法。
高斯用这种方法解决了天文学方面的问题,特别是确定了某些行星和彗星的天体轨迹。
这类天体的椭圆轨迹由5个参数确定,原则上,只要对它的位置做5次测量就足以确定它的整个轨迹。
但由于存在测量误差,由5次测量所确定的运行轨迹极不可靠,相反,要进行多次测量,用最小二乘法消除测量误差,得到有关轨迹参数的更精确的值。
最小二乘法近似将几十次甚至上百次的观察所产生的高维空间问题降到了椭圆轨迹模型的五维参数空间。
最小二乘法普遍适用于各个科学领域,它在解决实际问题中发挥了重要的作用。
它在生产实践、科学实验及经济活动中均有广泛应用。
比如说,我们引入等效时间的概念,根据Arrhenius函数和指数函数研究水化热化学反应速率随温度的变化,最后采用最小二乘法回归分析试验数据,确定绝热温升和等效时间的关系式。
第1章最小二乘法
1)理论依据
最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小.这里的“二乘”指的是用平方来度量观测点与估计点的远近(在古汉语中“平方”称为“二乘”),“最小”指的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小.
对于回归模型y=S(x),若()(i=1,2,3···m)为收集到的观测数据,则应该用来估计,这里是()(i=1,2,3···m)的估计值。
它们之间距离的平方和就是。
进而最小二乘估计量就是使
===
(1)
达到最小值的参数。
2)线性拟合分析
给定一组测量数据{(),i=0,1,2,…,m},基于最小二乘原理,求得变量x和y之间的函数关系f(x,A),使它最佳地逼近已知数据。
其中A=()是一些待定参数。
通常把最小二乘法中的都考虑为加权平方和,即
=
其中,是[a,b]上的权函数,它表示反应数据()在实验中所占数据的比重。
选择参数A使得加权平方和最小,即求满足
(2)
的f*(x)。
要使
(2)最小,它转换为求多元函数
的极小点问题。
由求多远函数极值的必要条件,有
若记,
则
可改写为
(3)
此方程成为法方程。
它也可以写成矩阵形式
由于,线性无关,故,方程组(3)存在唯一解
(i=1,2,3···n),
从而得到函数f(x)的最小二乘法解为
可以证明,这样得到的对于任何多项式形式的,都有
故确实所求最小二乘解。
摘自《数值分析》
3)非线性拟合分析
我们可通过变数变换将其化为线性模型。
利用最小二乘线性拟合确定其系数,再利用逆变换给出原问题的曲线拟合函数。
第2章系统设计
1)采用的软件及开发平台
MicrosoftVisualBasic6.0
2)项目的总体方案
3)项目的详细设计
command1(生成点坐标):
点击后按要求输入坐标点,在text1中输出
command2(生成坐标系,绘点):
将输入的点在picture1中绘制出坐标轴以及点
command3(生成线性方程):
计算输入坐标点的线性回归方程,在picture1中绘制线性方程,在picture2中输出线性方程
command4(清除):
将text1,picture1,picture2中的内容清除
command5(结束):
结束程序
对象
属性名
属性值
Form1
Caption
最小二乘法
Text1
Text
MultiLine
True
Alignment
2
Locked
True
Command1
Caption
生成坐标点
Command2
Caption
生成坐标系,绘点
Command3
Caption
生成线性方程
Command4
Caption
清除
Command5
Caption
退出
Picture1
Picture2
Font
四号
Label1
Caption
线性方程为:
调试运行截图:
第3章设计实现
1)主要功能模块的具体实现
这个VB程序设计的主要功能模块在于怎样在图片框中画出线性图,然而,我们在这一模块采用了分步考虑,首先考虑的是:
假如使用者只输入一个点,那么在图片框中无法生成线性图,顾我们把它设成“单点无法拟合,请重新输入”(当然是先求出对于输入点的线性方程中的a值、b值);其次就是分别在X轴,Y轴上的X值、Y值相等的情况,这样我们就认定为一条垂直于X轴或Y轴的直线,则在系统所确定的区域内画出线性图;最后就剩下没有共同点的额点了,对于这我们直接以图片框的边界作为X轴和Y轴(认为这样方便画图),然后根据算出的a值、b值和系统求出的线性方程,自动生成图像。
2)主要技术问题或难题的解决方法
在这个程序设计的过程中,我们遇到了不少的问题,最主要的问题就在怎样画图,因为之前我们还没遇到过这样的问题,鉴于这个问题,我们尽量勤快点地去问问讲师的意见,并且不乏地去图书馆去借阅相关我们课题的书籍,而且我们还有自己的VB书(主要是line语句),根据这几个方式,我们基本上解决了我们面对的问题。
3)亮点或创新点的实现
本次所做的编程中,我们充分运用了所学的知识,比如“If语句”、“For语句”、“MsgBox语句”和某些控件的有效性属性。
这些都是通过反复运行测试做出的结果,因为在这其中我们的不足之处还是有很多很多的,例如:
在还没输入要画线的点之前,就可以画线了,那么在那些控件之间就产生了矛盾(没点就能画出线性图?
),所以我们使用了控件的有效性这一属性等等。
第4章结束语
最小二乘法是指使因变量估计值与实测值间的相对误差平方和为最小。
在研究两个变量之间的关系时,我们可以用回归分析的方法进行分析。
当确定了描述两个变量之间的回归模型后,就可以使用最小二乘法估计模型中的参数,进而建立数学模型,然后通过MATLAB求解模型。
通过本文实例模型(非多项式形式)的求解,我们学会了怎样从给定的二维数据出发,寻找一个简单合理的函数来拟合给定的一组看上去杂乱无章的数据。
如何巧妙地运用最小二乘法解决数据拟合问题,这不仅对我们在今后的学习有一定的帮助,而且在生产实践、科学实验中也起到了一定的作用。
。
课题设计时VB代码编写复杂、冗长,稍一不慎就会出错,我们调试了好多次,失败了好多次,而自己仔细想想,归根究底还是在于自己心太浮躁,没有耐心。
VB的编程是一项不易的工作,没有一颗平静的心是完成不了的。
我想,将来做许多事,也需要保持这么一种平和的心态,它是一种个人综合素质,是我们制胜的关键。
在课题设计的过程中,VB代码的编写——即设计的主过程无疑是一个难点,这部分内容虽然难,但在我们能力范围之内。
而最大的难点在于,项目设计中需要根据用户提供的坐标点来生成一次模拟曲线,刚遇到这个问题时,根本无法下手,最后还是到图书馆、网上查阅了相关资料才解决了这一难题。
从中我领悟到,亲自行动才是解决问题最好的方法,实践就是一切。
不管困难有多大,没有切实的行动时不行的。
而这前提必然是自己要有解决问题的决心与坚忍不拔的毅力。
此次项目对我来说是困难的,但无论怎样,我还是完成了,这说明一点,其实没有克服不了的困难。
无论身处于怎样的境地,我们都要勇于面对,并想办法解决,因为自己根本无法逃避。
参考文献
参考内容为:
①《VisualBasic程序设计教程》第十章中10.1图形操作
②《Visualbasic6》学习指南张志军著第二章2.3创建用户界面
③《数值分析》科学出版社
附录
程序代码如下:
Dimx()AsSingle,y()AsSingle,iAsInteger,nAsInteger,mAsInteger
DimsumxAsDouble,sumyAsDouble,xaverAsDouble,yaverAsDouble
DimxyAsDouble,x2AsDouble
DimaAsDouble,bAsDouble
DimxmaxAsDouble,xminAsDouble
DimymaxAsDouble,yminAsDouble
PrivateSubCommand1_Click()
Randomize
n=InputBox("请输入坐标点个数:
")
Ifn=0Then
MsgBox"请输入坐标点个数"
Command1.Enabled=True
ElseIfn=1Then
MsgBox"单点无法拟合,请重新输入"
ExitSub
Command1.Enabled=False
Command2.Enabled=False
Command3.Enabled=False
Command4.Enabled=True
Else
Command1.Enabled=False
Command2.Enabled=True
Command4.Enabled=True
EndIf
ReDimx(n)
ReDimy(n)
Fori=1Ton
x(i)=InputBox("请输入第"&i&"个点的横坐标")
sumx=sumx+x(i)
Text1=Text1&"第"&i&"个点:
("&x(i)
y(i)=InputBox("请输入第"&i&"个点的纵坐标")
sumy=sumy+y(i)
Text1=Text1&","&y(i)&")"&vbCrLf
Nexti
EndSub
PrivateSubCommand2_Click()
Picture1.Cls
Picture1.DrawWidth=1
Command2.Enabled=False
Command3.Enabled=True
Command4.Enabled=True
xmax=x
(1):
xmin=x
(1)
ymax=y
(1):
ymin=y
(1)
Fori=2Ton
Ifxmax xmax=x(i) EndIf Ifxmin>x(i)Then xmin=x(i) EndIf Nexti Fori=2Ton Ifymax ymax=y(i) EndIf Ifymin>y(i)Then ymin=y(i) EndIf Nexti Ifxmax=xminThen Picture1.Scale(xmin*0.5,ymax+0.2*(ymax-ymin))-(xmin*1.5,ymin-0.2*(ymax-ymin)) zb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 计算 程序 课程设计 报告