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

📄 form1.frm

📁 计算方法的VB程序
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "三次样条"
   ClientHeight    =   3150
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   7710
   LinkTopic       =   "Form1"
   ScaleHeight     =   3150
   ScaleWidth      =   7710
   StartUpPosition =   3  '窗口缺省
   Begin VB.TextBox Text5 
      Height          =   495
      Left            =   1440
      TabIndex        =   16
      Text            =   "2.5"
      Top             =   2640
      Width           =   735
   End
   Begin VB.TextBox Text4 
      Height          =   1095
      Left            =   0
      TabIndex        =   13
      Text            =   "1,2,3,4,5;"
      Top             =   0
      Width           =   2775
   End
   Begin VB.CommandButton Command3 
      Caption         =   "About"
      Height          =   615
      Left            =   3720
      TabIndex        =   10
      Top             =   2520
      Width           =   615
   End
   Begin VB.CommandButton Command2 
      Caption         =   "End"
      Height          =   615
      Left            =   3120
      TabIndex        =   9
      Top             =   2520
      Width           =   615
   End
   Begin VB.CommandButton Command1 
      Caption         =   "Ok"
      Height          =   615
      Left            =   2520
      TabIndex        =   8
      Top             =   2520
      Width           =   615
   End
   Begin VB.TextBox Text3 
      Height          =   495
      Left            =   720
      TabIndex        =   7
      Top             =   2640
      Width           =   735
   End
   Begin VB.TextBox Text2 
      Height          =   495
      Left            =   0
      TabIndex        =   6
      Top             =   2640
      Width           =   735
   End
   Begin VB.OptionButton Option5 
      Caption         =   "曲率修正样条(首尾二阶导给定)"
      Height          =   615
      Left            =   4560
      TabIndex        =   5
      Top             =   2400
      Width           =   3135
   End
   Begin VB.OptionButton Option4 
      Caption         =   "抛物样条"
      Height          =   615
      Left            =   4560
      TabIndex        =   4
      Top             =   1800
      Width           =   3135
   End
   Begin VB.OptionButton Option3 
      Caption         =   "外差分样条"
      Height          =   615
      Left            =   4560
      TabIndex        =   3
      Top             =   1200
      Width           =   3135
   End
   Begin VB.OptionButton Option2 
      Caption         =   "自然样条(首尾节点值为0)"
      Height          =   615
      Left            =   4560
      TabIndex        =   2
      Top             =   600
      Width           =   3135
   End
   Begin VB.OptionButton Option1 
      Caption         =   "约束样条(首尾节点一阶导给定)"
      Height          =   615
      Left            =   4560
      TabIndex        =   1
      Top             =   0
      Width           =   3135
   End
   Begin VB.TextBox Text1 
      Height          =   975
      Left            =   1920
      TabIndex        =   0
      Text            =   "1,4,9,16,25;"
      Top             =   1080
      Width           =   2535
   End
   Begin VB.Label Label5 
      Caption         =   "   x0"
      Height          =   495
      Left            =   1440
      TabIndex        =   17
      Top             =   2280
      Width           =   735
   End
   Begin VB.Label Label4 
      Caption         =   "   请将节点的y坐标输入到右方的输入框内"
      BeginProperty Font 
         Name            =   "楷体_GB2312"
         Size            =   12
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   855
      Left            =   0
      TabIndex        =   15
      Top             =   1200
      Width           =   1815
   End
   Begin VB.Label Label3 
      Caption         =   "   请将节点的x坐标输入到左方的输入框内"
      BeginProperty Font 
         Name            =   "楷体_GB2312"
         Size            =   12
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   1095
      Left            =   2880
      TabIndex        =   14
      Top             =   120
      Width           =   1575
   End
   Begin VB.Label Label2 
      Caption         =   "末节点一阶导数值"
      Height          =   495
      Left            =   720
      TabIndex        =   12
      Top             =   2160
      Width           =   735
   End
   Begin VB.Label Label1 
      Caption         =   "首节点一阶导数值"
      Height          =   495
      Left            =   0
      TabIndex        =   11
      Top             =   2160
      Width           =   735
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub Command1_Click()
Dim t1, t2 As Date
If Judge = 0 Then temp = MsgBox("请选择三次样条的种类!!", 48, "提示")
If Judge <> 0 Then
t1 = Time
w = 0
forward = 0
backward = 0
With Text4
l = Len(.Text)
For i = 1 To l
If Mid(.Text, i, 1) = "," Or Mid(.Text, i, 1) = ";" Then
forward = i
x0 = CDbl(Text5.Text)
x(w) = CInt(Mid(.Text, backward + 1, forward - backward - 1))
w = w + 1
backward = forward
End If
Next
End With
For i = 0 To w
Debug.Print x(i)
Next
w = 0
forward = 0
backward = 0
With Text1
l = Len(.Text)
For i = 1 To l
If Mid(.Text, i, 1) = "," Or Mid(.Text, i, 1) = ";" Then
forward = i
y(w) = CInt(Mid(.Text, backward + 1, forward - backward - 1))
w = w + 1
backward = forward
End If
Next
End With
w = w - 1
Call Cu_spine
For j = 1 To w
      If x(j - 1) <= x0 And x(j) >= x0 Then
          k = j - 1
          Exit For
      End If
Next
ans = x0 - x(k)
Debug.Print ans
t = S(k, 3) * ans + S(k, 2)
z = (t * ans + S(k, 1)) * ans + S(k, 0)
t2 = Time
Tm = CDbl(t2 - t1) * 24 * 3600
Form1.Hide
Form2.Show
End If
End Sub

Private Sub Form_Load()
Judge = 0
End Sub

Private Sub Option1_Click()
Label1.Caption = "首节点一阶导数值"
Label2.Caption = "末节点一阶导数值"
Text3.Enabled = True
Text2.Enabled = True
Text2.BackColor = &H80000005
Text3.BackColor = &H80000005
Judge = 1
End Sub

Private Sub Option2_Click()
Label1.Caption = "未使用"
Label2.Caption = "未使用"
Text3.Enabled = False
Text2.Enabled = False
Text2.BackColor = &H80000011
Text3.BackColor = &H80000011
Judge = 2
End Sub

Private Sub Option3_Click()
Label1.Caption = "未使用"
Label2.Caption = "未使用"
Text3.Enabled = False
Text2.Enabled = False
Text2.BackColor = &H80000011
Text3.BackColor = &H80000011
Judge = 3
End Sub

Private Sub Option4_Click()
Label1.Caption = "未使用"
Label2.Caption = "未使用"
Text3.Enabled = False
Text2.Enabled = False
Text2.BackColor = &H80000011
Text3.BackColor = &H80000011
Judge = 4
End Sub

Private Sub Option5_Click()
Label1.Caption = "首节点二阶导数值"
Label2.Caption = "末节点二阶导数值"
Text3.Enabled = True
Text2.Enabled = True
Text2.BackColor = &H80000005
Text3.BackColor = &H80000005
Judge = 5
End Sub
Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
temp = MsgBox("理学院一队:王元", 64, "关于:作者")
End Sub

Private Sub Cu_spine()
Dim H(Max), m(Max), d(Max), V(Max), a(Max), b(Max), c(Max), t, ss As Double
Dim z1, z2 As Double
  H(0) = x(1) - x(0)
  d(0) = (y(1) - y(0)) / H(0)
  For k = 1 To w - 1
      H(k) = x(k + 1) - x(k)
      d(k) = (y(k + 1) - y(k)) / H(k)
      a(k) = H(k)
      b(k) = 2 * (H(k - 1) + H(k))
      c(k) = H(k)
      V(k) = 6 * (d(k) - d(k - 1))
  Next k
  Select Case Judge
  
      Case 1:
          
           z1 = CDbl(Text2.Text)
           z2 = CDbl(Text3.Text)
           b(1) = b(1) - H(0) / 2
           t = d(0) - z1
           V(1) = V(1) - 3 * t
           b(w - 1) = b(w - 1) - H(w - 1) / 2
           t = z2 - d(w - 1)
           V(w - 1) = V(w - 1) - 3 * t
          
          
      Case 2:
           m(0) = 0
           m(w) = 0
          
      Case 3:
           b(1) = b(1) + H(0) * H(0) / H(1)
           c(1) = c(1) - H(0) * H(0) / H(1)
           t = H(w - 1) * H(w - 1) / H(w - 2)
           b(w - 1) = b(w - 1) + H(w - 1) + t
           a(w - 2) = a(w - 2) + t
          
      Case 4:
           b(1) = b(1) + H(0)
           b(w - 1) = b(w - 1) + H(w - 1)
           
           
      Case 5:
           z1 = CDbl(Text2.Text)
           z2 = CDbl(Text3.Text)
           V(1) = V(1) - H(0) * z1
           V(w - 1) = V(w - 1) - H(w - 1) * z2
           
  End Select
  For k = 2 To w - 1
      t = a(k - 1) / b(k - 1)
      b(k) = b(k) - t * c(k - 1)
      V(k) = V(k) - t * V(k - 1)
  Next k
  m(w - 1) = V(w - 1) / b(w - 1)
  For k = w - 2 To 1 Step -1
      m(k) = (V(k) - c(k) * m(k + 1)) / b(k)
  Next k
  Select Case Judge
  
      Case 1:
           t = (d(0) - z1) / H(0)
           m(0) = 3 * t - m(1) / 2
           t = (z2 - d(w - 1)) / H(w - 1)
           m(w) = 3 * t - m(w - 2) / 2
          
      Case 2:
          m(0) = 0
          m(w) = 0
      Case 3:
           t = (m(2) - m(1)) / H(1)
           m(0) = m(1) - H(0) * t
           ss = (m(w - 1) - m(w - 2)) / H(w - 2)
           m(w) = m(w - 1) + H(w - 1) * ss
           
          
      Case 4:
           m(0) = m(1)
           m(w) = m(w - 1)
          
          
      Case 5:
           m(0) = z1
           m(w) = z2
           
          
  End Select
  For k = 0 To w - 1
      S(k, 0) = y(k)
      t = (2 * m(k) + m(k + 1)) / 6
      S(k, 1) = d(k) - H(k) * t
      S(k, 2) = m(k) / 2
      S(k, 3) = (m(k + 1) - m(k)) / (6 * H(k))
  Next k
  
  
 
End Sub

⌨️ 快捷键说明

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