VB写的最小二乘法曲线拟合.doc

上传人:scccc 文档编号:12533340 上传时间:2021-12-04 格式:DOC 页数:8 大小:95KB
返回 下载 相关 举报
VB写的最小二乘法曲线拟合.doc_第1页
第1页 / 共8页
VB写的最小二乘法曲线拟合.doc_第2页
第2页 / 共8页
VB写的最小二乘法曲线拟合.doc_第3页
第3页 / 共8页
VB写的最小二乘法曲线拟合.doc_第4页
第4页 / 共8页
VB写的最小二乘法曲线拟合.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《VB写的最小二乘法曲线拟合.doc》由会员分享,可在线阅读,更多相关《VB写的最小二乘法曲线拟合.doc(8页珍藏版)》请在三一文库上搜索。

1、Option ExplicitDim x() As Double, y() As DoubleDim A(20, 20) As Double, M As Double, B() As Double'最多取 20 次的拟合Dim N As Double, I As Double, j As DoubleDim xiaoA() As DoubleDim Xmin As Double, Xmax As DoubleDim Ymin As Double, Ymax As DoubleDim X0pos As Double, Y0pos As DoubleDim xmaxpos As Doubl

2、e, ymaxpos As DoubleDim xstep As Double, ystep As DoubleDim xl As Double, yl As DoubleDim xbc As Double, ybc As DoubleDim bc As DoubleDim Xh As DoublePrivate Sub HuaZuoBiao(x() As Double, y() As Double)ReDim xpos(I) As DoubleReDim ypos(I) As DoubleReDim x(I), y(I)X0pos = Width * 0.25 ' 坐标原点最左点Y0

3、pos = Height * 0.75 ' 坐标原点最低点xmaxpos = Width * 0.85 ' 坐标最右点ymaxpos = Height * 0.15 ' 坐标最高点xstep = (xmaxpos - X0pos) / (Xmax - Xmin) ' 对应 X 轴上单位长度代表的屏幕宽度值ystep = (ymaxpos - Y0pos) / (Ymax - Ymin) ' 对应 Y 轴上单位长度代表的屏幕高度值'在屏幕上画直角坐标系ForeColor = vbBlueLine (Width * 0.1, Y0pos)-(Widt

4、h * 0.9, Y0pos) ' 画 X 坐标轴 ,从左 10% ,到右的 90%处Line (X0pos, Height * 0.1)-(X0pos, Height * 0.9) ' 画 y 坐标轴 ,从上 10% ,到下的 90% 处Font.Size = 20 '指定X轴,Y轴标志的字体大小CurrentX = Width * 0.9CurrentY = Y0pos + 100Print "X" ' 在横线上画 X 轴标志'在横线上画 X 轴箭头标志CurrentX = Width * 0.9CurrentY = Y0posL

5、ine (CurrentX - 200, CurrentY - 50)-(CurrentX, CurrentY)Line (CurrentX, CurrentY)-(CurrentX - 200, CurrentY + 50)CurrentX = X0pos - 500CurrentY = Height * 0.1 Print "y" ' 在纵线上画 Y 轴标志'在纵线上画 Y 轴箭头标志CurrentX = X0posCurrentY = Height * 0.1Line (CurrentX - 50, CurrentY + 200)-(CurrentX,

6、 CurrentY)Line (CurrentX, CurrentY)-(CurrentX + 50, CurrentY + 200)CurrentX = X0pos + 200 ' 此为 Y 轴左边 500 绝对坐标处CurrentY = Y0pos + 400 ' 取当前 Y 轴上的相对坐标值Print "f=f(x)" ' 在 Y 轴左边 500 绝对坐标处对应显示 Y 轴相对坐标刻度值xl = Xmax - Xmin yl = Ymax - YminIf xl < 0.01 Then xbc = 0.001ElseIf xl <=

7、 0.1 Then xbc = 0.01ElseIf xl <= 2 Thenxbc = 0.1ElseIf xl <= 20 Then xbc = 1ElseIf xl <= 120 Then xbc = 10ElseIf xl <= 1000 Then xbc = 100ElseIf xl <= 10000 Then xbc = 1000Elsexbc = 10000End IfIf yl < 0.01 Then ybc = 0.001ElseIf yl <= 0.1 Then ybc = 0.01ElseIf yl <= 2 Then yb

8、c = 0.1ElseIf yl <= 20 Then ybc = 1ElseIf yl <= 120 Thenybc = 10ElseIf yl <= 1000 Thenybc = 100ElseIf yl <= 10000 Then ybc = 1000Elseybc = 10000End IfFor bc = Xmin To Xmax Step xbcIf bc <= Xmax Then x(j) = bc 'X 轴上的相对坐标值xpos(j) = X0pos + (x(j) - Xmin) * xstepLine (xpos(j), Y0pos)-

9、(xpos(j), ymaxpos), vbRed ' 画垂直于 X 轴的刻度线,只画了ElseEnd IfFont.Size = 10 '指定X轴,Y轴坐标刻度值的字体大小CurrentX = xpos(j) - 200 '取当前X轴上的相对坐标值CurrentY = Y0pos + 100 '此为X轴下方100绝对坐标处Print x(j)'在X轴下方100绝对坐标处对应显示 X轴相对坐标刻度值Next bcFor bc = Ymin To Ymax Step ybcIf bc <= Ymax Theny(j) = bc 'X 轴上的相

10、对坐标值ypos(j) = Y0pos + (y(j) - Ymin) * ystepLine (X0pos, ypos(j)-(xmaxpos, ypos(j), vbRed ' 画垂直于 X 轴的刻度线,只画了ElseEnd IfFont.Size = 10 '指定X轴,Y轴坐标刻度值的字体大小CurrentX = X0pos - 500 '取当前 X轴上的相对坐标值100 个绝对尺寸100 个绝对尺寸CurrentY = ypos(j) - 100 '此为X轴下方100绝对坐标处Print y(j)'在X轴下方100绝对坐标处对应显示X轴相对坐标刻

11、度值Next bcEnd SubPrivate Sub ZuoDian(x() As Double, y() As Double)ReDim xpos(I) As DoubleReDim ypos(I) As DoubleFor I = 0 To Nxpos(I) = X0pos + (x(I) - Xmin) * xstepypos(I) = Y0pos + (y(I) - Ymin) * ystepIf y(I) <= Ymax ThenDrawWidth = 4PSet (xpos(I), ypos(I), vbRedElseEnd IfNext IDrawWidth = 1End

12、 SubPrivate Sub HuaQuXian(xiaoA() As Double)ReDim xpos(I) As DoubleReDim ypos(I) As DoubleDim Ysum As Double, Ii As DoubleFor Ii = Xmin To Xmax Step 1 / (Xmax - Xmin)Ysum = 0For j = 1 To MYsum = Ysum + xiaoA(j) * Ii A (j - 1)Next jxpos(I) = X0pos + (Ii - Xmin) * xstepypos(I) = Y0pos + (Ysum - Ymin)

13、* ystep DrawWidth = 2If Ii = Xmin Thenxpos(0) = X0pos + (Ii - Xmin) * xstepypos(0) = Y0pos + (Ysum - Ymin) * ystep PSet (xpos(0), ypos(0)ElseEnd IfIf Ysum <= Ymax ThenDrawWidth = 2Line -(xpos(I), ypos(I), vbBlueElseEnd IfNext IiDrawWidth = 1End SubPrivate Sub JieFangCheng(A() As Double, B() As Do

14、uble, x() As Double) Dim nn As Double nn = UBound(B)Dim TempA As Double, L As Double, K As Double, Kk As DoubleDim Ii As Double, ChuShu As Double, Sum As DoubleFor I = 1 To nnL = 0: Kk = 0For j = I To nnIf A(j, I) = 0 Then L = L + 1Next jFor j = I To nn - LIf A(j, I) = 0 ThenKk = Kk + 1For K = I To

15、nnTempA = A(j, K)A(j, K) = A(nn - Kk + 1, K)A(nn - Kk + 1, K) = TempANext KTempA = B(j): B(j) = B(nn - Kk + 1): B(nn - Kk + 1) = TempA End IfNext jFor Ii = I To nn - L ChuShu = A(Ii, I)For j = I To nnA(Ii, j) = A(Ii, j) / ChuShuNext jB(Ii) = B(Ii) / ChuShuNext IiFor Ii = I + 1 To nn - LFor j = I To

16、nnA(Ii, j) = A(Ii, j) - A(I, j)Next jB(Ii) = B(Ii) - B(I)Next IiNext IFor I = 1 To nnFor j = 1 To I - 1A(I, j) = 0Next jNext I x(nn) = B(nn) / A(nn, nn)For I = nn - 1 To 1 Step -1Sum = 0For j = I + 1 To nnSum = Sum + A(I, j) * x(j)Next jx(I) = (B(I) - Sum) / A(I, I) Next IEnd SubPrivate Sub Command1

17、_Click()ClsXmin = 0 ' InputBox(" 请输入 x 坐标下限值 ", "x 坐标下限值 ", 0) Ymin = 0 'InputBox(" 请输入 y 坐标下限值 ", "y 坐标下限值 ", 0) Xmax = 10 ' InputBox(" 请输入 x 坐标上限值 ", "x 坐标上限值度 ", 10) Ymax = 10 'InputBox(" 请输入 y 坐标上限值 ", "y

18、坐标上限值度 ", 10) N = 20For I = 0 To NReDim Preserve x(I)ReDim Preserve y(I)Next ICall HuaZuoBiao(x, y)End SubPrivate Sub Command2_Click()For I = 0 To Nx(I) = Xmin + I * (Xmax - Xmin) / N 'InputBox(" 请输入 X 坐标测量值 ", "X 坐标值 ", "0") 'y(I) = Sin(x(I) + 5 ' Inpu

19、tBox(" 请输入 Y 坐标测量值 ", "Y 坐标值 ", "0") 'Next ICall ZuoDian(x, y)End SubPrivate Sub Command3_Click()M = 20 'InputBox(" 请输入拟合曲线次数 M", " 拟合曲线 ", 3)Erase B: Erase xiaoA: Erase A ' 必不可少 *ReDim B(M): ReDim xiaoA(1 To M)'形成方程组的各元素A(1, 1) = NFo

20、r I = 1 To NB(1) = B(1) + y(I)Next IFor j = 2 To MFor I = 1 To NA(1, j) = A(1, j) + x(l)八(j - 1)Next INext jFor l = 2 To MFor j = 1 To MFor Xh = 1 To NA(l, j) = A(l, j) + x(Xh)人(I + j - 2)lf j = 1 ThenB(l) = B(l) + x(Xh) A (I - 1) * y(Xh)End lfNext XhNext jNext lCall JieFangCheng(A, B, xiaoA)ForeCol

21、or = vbBlackPSet (0, 0)For I = 1 To M'Print Tab(6); "a" I - 1; Tab(12); "=" xiaoA(I);Next IDim Str As String: Str = "y="For I = 1 To M'写方程If I < M ThenStr = Str & xiaoA(l) & 吩"& I - 1 & "+"ElseStr = Str & xiaoA(I) & 吩&qu

22、ot;& I - 1End IfNext IPrint vbCrLf; " 曲线方程 :" vbCrLf & StrCall HuaQuXian(xiaoA)End SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Form_Load()Width = Screen.Width * 1 ' 取屏幕宽度的一半 'Height = Screen.Height * 0.5 ' 取屏幕高度的一半Height = Screen.Width * 1 ' 取屏幕宽度的一半Left = (Screen.Width - Width) / 2 ' 使窗体居屏幕中心 Top = (Screen.Height - Height) / 2 ' 使窗体居屏幕中心End Sub

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1