VB课程设计报告.docx

上传人:b****5 文档编号:7881760 上传时间:2023-01-26 格式:DOCX 页数:25 大小:115.63KB
下载 相关 举报
VB课程设计报告.docx_第1页
第1页 / 共25页
VB课程设计报告.docx_第2页
第2页 / 共25页
VB课程设计报告.docx_第3页
第3页 / 共25页
VB课程设计报告.docx_第4页
第4页 / 共25页
VB课程设计报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

VB课程设计报告.docx

《VB课程设计报告.docx》由会员分享,可在线阅读,更多相关《VB课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。

VB课程设计报告.docx

VB课程设计报告

VB课程设计报告

VisualBasic程序设计

课程设计报告

设计题目直线拟合

题目难度四星级

姓名蒋龙鑫

学号*******F0309

指导教师申屠德忠

提交日期4月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

PrivateSubCommand1_Click()'显示第二个窗体

Form1.Hide

Form2.Show

Form3.Hide

zxnh=MsgBox("你必须完全输入所选的项目!

"&Chr(10)&Chr(13)&_

"否则程序将会出错!

",48,"直线拟合")

EndSub

PrivateSubCommand2_Click()'结束程序

End

EndSub

'使第二个窗体的文本框按照第一个窗体给出的数据组数显示

PrivateSubOption1_Click()

Form2.Label6.Enabled=False

Form2.Label7.Enabled=False

Form2.Label8.Enabled=False

Form2.Label9.Enabled=False

Form2.Label10.Enabled=False

Forn=6To10

Form2.Text1(n).Enabled=False

Form2.Text1(n).BackColor=&H8000000F

Form2.Text2(n).Enabled=False

Form2.Text2(n).BackColor=&H8000000F

Next

EndSub

PrivateSubOption2_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

Forn=7To10

Form2.Text1(n).Enabled=False

Form2.Text1(n).BackColor=&H8000000F

Form2.Text2(n).Enabled=False

Form2.Text2(n).BackColor=&H8000000F

Next

EndSub

PrivateSubOption3_Click()

Form2.Label6.Enabled=True

Form2.Label7.Enabled=True

Form2.Label8.Enabled=False

Form2.Label9.Enabled=False

Form2.Label10.Enabled=False

Forn=6To7

Form2.Text1(n).Enabled=True

Form2.Text1(n).BackColor=&HFFFFFF

Form2.Text2(n).Enabled=True

Form2.Text2(n).BackColor=&HFFFFFF

Next

Forn=8To10

Form2.Text1(n).Enabled=False·

Form2.Text1(n).BackColor=&H8000000F

Form2.Text2(n).Enabled=False

Form2.Text2(n).BackColor=&H8000000F

Next

EndSub

PrivateSubOption4_Click()

Form2.Label6.Enabled=True

Form2.Label7.Enabled=True

Form2.Label8.Enabled=True

Form2.Label9.Enabled=False

Form2.Label10.Enabled=False

Forn=6To8

Form2.Text1(n).Enabled=True

Form2.Text1(n).BackColor=&HFFFFFF

Form2.Text2(n).Enabled=True

Form2.Text2(n).BackColor=&HFFFFFF

Next

Forn=9To10

Form2.Text1(n).Enabled=False

Form2.Text1(n).BackColor=&H8000000F

Form2.Text2(n).Enabled=False

Form2.Text2(n).BackColor=&H8000000F

Next

EndSub

PrivateSubOption5_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

Forn=6To9

Form2.Text1(n).Enabled=True

Form2.Text1(n).BackColor=&HFFFFFF

Form2.Text2(n).Enabled=True

Form2.Text2(n).BackColor=&HFFFFFF

Next

EndSub

PrivateSubOption6_Click()

Form2.Label6.Enabled=True

Form2.Label7.Enabled=True

Form2.Label8.Enabled=True

Form2.Label9.Enabled=True

Form2.Label10.Enabled=True

Forn=6To10

Form2.Text1(n).Enabled=True

Form2.Text1(n).BackColor=&HFFFFFF

Form2.Text2(n).Enabled=True

Form2.Text2(n).BackColor=&HFFFFFF

Next

EndSub

窗体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:

OptionBase1

DimmAsInteger

DimX(10)AsSingle

DimY(10)AsSingle

PrivateSubCommand1_Click()'进入第三个绘图窗体

Form1.Hide

Form2.Hide

Form3.Show

DimAAsSingle'截距

DimBAsSingle'斜率

DimcAsSingle

DimdAsSingle

DimeAsSingle

DimfAsSingle

DimWAsSingle

DimRAsSingle

DimTAsSingle

'讨论点的个数

IfForm2.Text1(5).Enabled=TrueThenm=5

IfForm2.Text1(6).Enabled=TrueThenm=6

IfForm2.Text1(7).Enabled=TrueThenm=7

IfForm2.Text1(8).Enabled=TrueThenm=8

IfForm2.Text1(9).Enabled=TrueThenm=9

IfForm2.Text1(10).Enabled=TrueThenm=10

'对点的x.y坐标进行赋值

Ifm=5Then

Forn=1To5

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Ifm=6Then

Forn=1To6

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Ifm=7Then

Forn=1To7

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Ifm=8Then

Forn=1To8

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Ifm=9Then

Forn=1To9

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Ifm=10Then

Forn=1To10

X(n)=Text1(n).Text

Y(n)=Text2(n).Text

Next

EndIf

Forn=1Tom

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

'在坐标图上打印出点来

Forn=1Tom

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

'将超出坐标轴的线去掉

IfA>=0Then

Form3.Line(360,5400-37*A)-(4060,W)

IfW<1700ThenForm3.Line(R,1700)-(4060,W),&H8000000F

IfW>5400AndB<0ThenForm3.Line(T,5400)-(40

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1