⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n次多项式拟合.frm

📁 饮羽公路测设(glcs) 由20多个公路测量、设计、试验和施工组织设计等小软件组成。如《中桩大地坐标》可以计算不等长缓和曲线的中桩和边桩的大地坐标;《缓和曲线反算》可以根据切线长、外距长或缓和曲线长求
💻 FRM
字号:
VERSION 5.00
Object = "{D76D7130-4A96-11D3-BD95-D296DC2DD072}#1.0#0"; "VSFLEX7D.OCX"
Begin VB.Form frmdcnh 
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "n次多项式拟合"
   ClientHeight    =   4020
   ClientLeft      =   45
   ClientTop       =   345
   ClientWidth     =   6210
   Icon            =   "n次多项式拟合.frx":0000
   KeyPreview      =   -1  'True
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   4020
   ScaleWidth      =   6210
   ShowInTaskbar   =   0   'False
   StartUpPosition =   2  '屏幕中心
   Begin VB.Frame Frame2 
      Caption         =   "计算结果"
      Height          =   2895
      Left            =   2640
      TabIndex        =   8
      Top             =   640
      Width           =   3495
      Begin VB.ListBox List1 
         Height          =   2580
         Left            =   120
         TabIndex        =   9
         Top             =   240
         Width           =   3255
      End
   End
   Begin VSFlex7DAOCtl.VSFlexGrid VSFlexGrid1 
      Height          =   3255
      Left            =   0
      TabIndex        =   2
      Top             =   720
      Width           =   2535
      _cx             =   4471
      _cy             =   5741
      _ConvInfo       =   1
      Appearance      =   1
      BorderStyle     =   1
      Enabled         =   -1  'True
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "宋体"
         Size            =   9
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      MousePointer    =   0
      BackColor       =   -2147483643
      ForeColor       =   -2147483640
      BackColorFixed  =   -2147483633
      ForeColorFixed  =   -2147483630
      BackColorSel    =   -2147483635
      ForeColorSel    =   -2147483634
      BackColorBkg    =   14737632
      BackColorAlternate=   -2147483643
      GridColor       =   -2147483633
      GridColorFixed  =   -2147483632
      TreeColor       =   -2147483632
      FloodColor      =   192
      SheetBorder     =   -2147483642
      FocusRect       =   3
      HighLight       =   1
      AllowSelection  =   -1  'True
      AllowBigSelection=   -1  'True
      AllowUserResizing=   3
      SelectionMode   =   0
      GridLines       =   1
      GridLinesFixed  =   2
      GridLineWidth   =   1
      Rows            =   2
      Cols            =   3
      FixedRows       =   1
      FixedCols       =   1
      RowHeightMin    =   0
      RowHeightMax    =   0
      ColWidthMin     =   0
      ColWidthMax     =   0
      ExtendLastCol   =   0   'False
      FormatString    =   ""
      ScrollTrack     =   0   'False
      ScrollBars      =   3
      ScrollTips      =   0   'False
      MergeCells      =   0
      MergeCompare    =   0
      AutoResize      =   -1  'True
      AutoSizeMode    =   0
      AutoSearch      =   0
      AutoSearchDelay =   2
      MultiTotals     =   -1  'True
      SubtotalPosition=   1
      OutlineBar      =   0
      OutlineCol      =   0
      Ellipsis        =   0
      ExplorerBar     =   0
      PicturesOver    =   0   'False
      FillStyle       =   0
      RightToLeft     =   0   'False
      PictureType     =   0
      TabBehavior     =   0
      OwnerDraw       =   0
      Editable        =   2
      ShowComboButton =   -1  'True
      WordWrap        =   0   'False
      TextStyle       =   0
      TextStyleFixed  =   0
      OleDragMode     =   0
      OleDropMode     =   0
      DataMode        =   0
      VirtualData     =   -1  'True
      ComboSearch     =   3
      AutoSizeMouse   =   -1  'True
      FrozenRows      =   0
      FrozenCols      =   0
      AllowUserFreezing=   3
      BackColorFrozen =   0
      ForeColorFrozen =   0
      WallPaperAlignment=   9
   End
   Begin VB.Frame Frame1 
      Caption         =   "原始数据"
      Height          =   615
      Left            =   0
      TabIndex        =   5
      Top             =   0
      Width           =   6135
      Begin VB.TextBox Text2 
         Height          =   270
         Left            =   5040
         TabIndex        =   1
         Text            =   "Text2"
         Top             =   240
         Width           =   975
      End
      Begin VB.TextBox Text1 
         Height          =   270
         Left            =   1440
         TabIndex        =   0
         Text            =   "Text1"
         Top             =   240
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "拟合曲线最高次幂n="
         Height          =   255
         Left            =   3240
         TabIndex        =   7
         Top             =   285
         Width           =   1815
      End
      Begin VB.Label Label1 
         Caption         =   "实验数据数目M="
         Height          =   255
         Left            =   120
         TabIndex        =   6
         Top             =   280
         Width           =   1575
      End
   End
   Begin VB.CommandButton Command2 
      Caption         =   "关闭"
      Height          =   375
      Left            =   5280
      TabIndex        =   4
      Top             =   3600
      Width           =   855
   End
   Begin VB.CommandButton Command1 
      Caption         =   "计算"
      Height          =   375
      Left            =   4200
      TabIndex        =   3
      Top             =   3600
      Width           =   855
   End
End
Attribute VB_Name = "frmdcnh"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim dn, n As Integer
Dim d(), b(), a() As Double


Private Sub Command1_Click()
'计算

    On Error GoTo handlerror
    
    dn = Val(Text1.Text)
    n = Val(Text2.Text)
    
    ReDim d(dn, 1), b(n), a(n + 1, n + 2)
    
    ym = -90000000000#
    yn = 90000000000#
    For i = 1 To VSFlexGrid1.Rows - 1
        d(i, 1) = Val(VSFlexGrid1.TextMatrix(i, 1))
        d(i, 0) = Val(VSFlexGrid1.TextMatrix(i, 2))
        If ym < d(i, 0) Then ym = d(i, 0): xm = d(i, 1)
        If yn > d(i, 0) Then yn = d(i, 0): xn = d(i, 1)
    Next i
    
    Call jisuan
    
    List1.Clear
    
    List1.AddItem "拟合曲线为:" + Str(n - 1) + "次多项式,各项系数为:"
    For i = 1 To n
        b(i - 1) = a(i, n + 1)
        List1.AddItem "A" + Trim$(Str(i - 1)) + "=" + Str(Int(b(i - 1) * 10000 + 0.5) / 10000)
    Next i
    
    dx = d(dn, 1) - d(1, 1)
    dy = ym - yn
    x = d(1, 1)
    y2 = yn
    Do Until x > 1.01 * dx + d(1, 1)
        x1 = x
        y = b(0) + b(1) * x
        For i = 2 To n - 1
            x1 = x1 * x
            y = y + x1 * b(i)
        Next i
        If y2 > y Then y2 = y: xn = x
        If ym < y Then ym = y: xm = x
        x = x + 1.1 * dx / 100
    Loop
    
    List1.AddItem ""
    List1.AddItem "拟合曲线段内Ymax=" + Str(Int(ym * 1000 + 0.5) / 1000)
    List1.AddItem "对应的      Xman=" + Str(Int(xm * 1000 + 0.5) / 1000)
    List1.AddItem "Y的极小值   Ymin=" + Str(Int(y2 * 1000 + 0.5) / 1000)
    List1.AddItem "对应的      Xmin=" + Str(Int(xn * 1000 + 0.5) / 1000)
    
    Exit Sub
handlerror:
    xianshi = MsgBox("请检查输入的数据后再计算。", vbInformation, "问题提示")

End Sub

Private Sub Command2_Click()
'关闭

    On Error GoTo handlerror
    
    If List1.ListCount > 1 And rjsfzc = 88 Then
        frmMain.Text1 = frmMain.Text1 & vbCrLf & ""
        frmMain.Text1 = frmMain.Text1 & vbCrLf & "    《n次多次项拟合计算结果》:"
        
        For i = 0 To List1.ListCount - 1
            frmMain.Text1 = frmMain.Text1 & vbCrLf & "    " + List1.List(i)
        Next i
        frmMain.Text1 = frmMain.Text1 & vbCrLf & "    --------------------------------------"
    End If
    
    Unload Me
    
    Exit Sub
handlerror:
    
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
'Esc键退出,VbEscape可以用27代替
    On Error GoTo handlerror

    If KeyAscii = 27 Then
        Unload Me
    End If
    
    Exit Sub
handlerror:

End Sub

Private Sub Form_Load()
'启动

    Text1.Text = ""
    Text2.Text = ""
    List1.Clear
    
    VSFlexGrid1.TextMatrix(0, 0) = "序号"
    VSFlexGrid1.TextMatrix(0, 1) = "数据Xi"
    VSFlexGrid1.TextMatrix(0, 2) = "数据Yi"
    VSFlexGrid1.ColAlignment(0) = flexAlignCenterCenter
    VSFlexGrid1.ColAlignment(1) = flexAlignCenterCenter
    VSFlexGrid1.ColAlignment(2) = flexAlignCenterCenter
    VSFlexGrid1.ColWidth(0) = 460
    VSFlexGrid1.ColWidth(1) = 870
    VSFlexGrid1.ColWidth(2) = 870

End Sub

Private Sub Text1_Change()
'实验数据数目

    On Error GoTo handlerror

    If Val(Text1.Text) >= 2 Then
        VSFlexGrid1.Rows = Val(Text1.Text) + 1
        For i = 1 To VSFlexGrid1.Rows - 1
            VSFlexGrid1.TextMatrix(i, 0) = i
        Next i
    End If
    
    Exit Sub
handlerror:

End Sub

Public Sub jisuan()
'计算子程序

    n = n + 1
    a(1, 1) = dn
    For j = 2 To n
        a(1, j) = 0
        a(j, n) = 0
        For i = 1 To dn
            a(1, j) = a(1, j) + d(i, 1) ^ (j - 1)
            a(j, n) = a(j, n) + d(i, 1) ^ (n + j - 2)
        Next i
    Next j
    a(1, n + 1) = 0
    For j = 1 To dn
        a(1, n + 1) = a(1, n + 1) + d(j, 0)
    Next j
    For i = 2 To n
        a(i, n + 1) = 0
        For j = 1 To dn
            a(i, n + 1) = a(i, n + 1) + d(j, 0) * d(j, 1) ^ (i - 1)
        Next j
    Next i
    For i = 2 To n
        For j = 1 To i - 1
            a(j + 1, i - j) = a(1, i)
            a(n + 1 - i + j, n - j) = a(n + 1 - i, n)
        Next j
    Next i
    For i = 1 To n
        If i = n Then GoTo 10
        am = Abs(a(i, i))
        im = i
        For j = i + 1 To n
            aa = Abs(a(j, i))
            If am < aa Then am = aa: im = j
        Next j
        If i = im Then GoTo 10
        For j = 1 To n + 1
            aa = a(i, j)
            a(i, j) = a(im, j)
            a(im, j) = aa
        Next j
10:     p = a(i, i)
        For j = i + 1 To n + 1
            a(i, j) = a(i, j) / p
        Next j
        For j = 1 To n
            If a(j, i) = 0 Or j = i Then GoTo 20
            p = a(j, i)
            For k = i + 1 To n + 1
                a(j, k) = a(j, k) - p * a(i, k)
            Next k
20:     Next j
    Next i
      
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -