?? form1.frm
字號(hào):
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form Form1
Caption = "曲線擬合"
ClientHeight = 9330
ClientLeft = 60
ClientTop = 345
ClientWidth = 10590
Icon = "Form1.frx":0000
LinkTopic = "Form1"
ScaleHeight = 9330
ScaleWidth = 10590
StartUpPosition = 2 '屏幕中心
Begin VB.CommandButton Command2
Caption = "曲線擬合"
Height = 615
Left = 720
TabIndex = 12
Top = 8280
Width = 2175
End
Begin VB.TextBox Text1
Height = 975
Left = 4200
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 11
Top = 8160
Width = 6015
End
Begin VB.CommandButton Command1
Caption = "打開點(diǎn)文件"
Height = 495
Left = 1080
TabIndex = 9
Top = 840
Width = 1695
End
Begin VB.PictureBox Picture1
AutoRedraw = -1 'True
Height = 6000
Left = 4200
ScaleHeight = 5940
ScaleWidth = 5940
TabIndex = 7
Top = 360
Width = 6000
End
Begin VB.ComboBox Combo1
Height = 300
ItemData = "Form1.frx":030A
Left = 2040
List = "Form1.frx":032F
TabIndex = 6
Text = "6"
Top = 7320
Width = 615
End
Begin VB.Frame Frame1
Caption = "插值計(jì)算"
Height = 1215
Left = 5040
TabIndex = 0
Top = 6600
Width = 4335
Begin VB.TextBox Text2
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 720
TabIndex = 3
Top = 480
Width = 735
End
Begin VB.CommandButton Command3
Height = 345
Left = 1920
MaskColor = &H00FFFFFF&
Picture = "Form1.frx":0356
Style = 1 'Graphical
TabIndex = 2
Top = 480
UseMaskColor = -1 'True
Width = 340
End
Begin VB.TextBox Text3
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3120
TabIndex = 1
Top = 480
Width = 735
End
Begin VB.Label Label2
Caption = "X="
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 360
TabIndex = 5
Top = 550
Width = 1215
End
Begin VB.Label Label3
Caption = "Y="
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2760
TabIndex = 4
Top = 550
Width = 255
End
End
Begin MSComDlg.CommonDialog CommonDialog1
Left = 3120
Top = 1080
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 4695
Left = 480
TabIndex = 8
Top = 1680
Width = 2775
_ExtentX = 4895
_ExtentY = 8281
_Version = 393216
Rows = 21
Cols = 3
FormatString = "^記錄數(shù)|^ X|^ Y"
End
Begin VB.Label Label1
Caption = "擬合次數(shù)"
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 840
TabIndex = 10
Top = 7320
Width = 1215
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim X() As Single, Y() As Single
Dim A(20, 20) As Single, M As Integer, B() As Single '最多取20次的擬合
Dim N As Integer, I As Integer, J As Integer
Dim xiaoA() As Single
Dim Xmin As Single, Xmax As Single
Dim Ymin As Single, Ymax As Single
Dim Xo As Single, Yo As Single
Private Sub ZuoDian(X() As Single, Y() As Single)
Dim XL As Single
Dim YL As Single
N = UBound(X): Picture1.Cls
Xmin = X(1): Xmax = X(1): Xo = X(1): Yo = Y(1)
Ymin = Y(1): Ymax = Y(1)
For I = 1 To N
If Xmin > X(I) Then
Xmin = X(I)
Xo = Xmin: Yo = Y(I) '后面畫曲線時(shí)用到。
End If
If Xmax < X(I) Then Xmax = X(I)
If Ymin > Y(I) Then Ymin = Y(I)
If Ymax < Y(I) Then Ymax = Y(I)
Next I
XL = Xmax - Xmin: YL = Ymax - Ymin
Picture1.Scale (Xmin - XL / 10, Ymax + YL / 10)-(Xmax + XL / 10, Ymin - YL / 10)
Picture1.DrawWidth = 5
For I = 1 To N
Picture1.PSet (X(I), Y(I)), vbRed
Next I
Picture1.DrawWidth = 1
Picture1.Line (Xmin, Ymin)-(Xmax, Ymax), vbBlue, B
Picture1.Refresh
End Sub
Private Sub HuaQuXian(xiaoA() As Single)
Call ZuoDian(X, Y)
Dim Ysum As Single, Ii As Single
For Ii = Xmin To Xmax Step (Xmax - Xmin) / 100
Ysum = 0
For J = 1 To M
Ysum = Ysum + xiaoA(J) * Ii ^ (J - 1)
Next J
Picture1.Line (Xo, Yo)-(Ii, Ysum)
Xo = Ii: Yo = Ysum
Next Ii
End Sub
Private Sub Command1_Click()
Dim FileName As String
Dim Xstr As String, Ystr As String
On Error GoTo errhandle
CommonDialog1.InitDir = App.Path '設(shè)置初始路徑 數(shù)據(jù)導(dǎo)入
CommonDialog1.FileName = "" '清除文件名
CommonDialog1.ShowOpen '顯示“打開”對(duì)話框
FileName = CommonDialog1.FileName '保存文件名
If Len(CommonDialog1.FileName) > 0 Then
'File = FreeFile() '獲得可用文件號(hào)
Open FileName For Input As #1 '打開文件
End If
I = 0
MousePointer = 11
Do While EOF(1) = False
I = I + 1
ReDim Preserve X(I)
ReDim Preserve Y(I)
MSFlexGrid1.Rows = I + 1
Input #1, Xstr, Ystr ' 分別輸入各數(shù)據(jù)
MSFlexGrid1.TextMatrix(I, 1) = Xstr
X(I) = Val(Xstr)
MSFlexGrid1.TextMatrix(I, 2) = Ystr
Y(I) = Val(Ystr)
MSFlexGrid1.TextMatrix(I, 0) = I
Loop
Close #1: N = I '檢驗(yàn)一下N是否對(duì)???
Call ZuoDian(X, Y)
errhandle:
MousePointer = 0
Exit Sub
MousePointer = 0
End Sub
Private Sub Command2_Click()
Dim Xh As Integer
M = Val(Combo1.Text) + 1
Erase B: Erase xiaoA: Erase A '必不可少***********
ReDim B(M): ReDim xiaoA(1 To M)
'形成方程組的各元素
A(1, 1) = N
For I = 1 To N
B(1) = B(1) + Y(I)
Next I
For J = 2 To M
For I = 1 To N
A(1, J) = A(1, J) + X(I) ^ (J - 1)
Next I
Next J
For I = 2 To M
For J = 1 To M
For Xh = 1 To N
A(I, J) = A(I, J) + X(Xh) ^ (I + J - 2)
If J = 1 Then
B(I) = B(I) + X(Xh) ^ (I - 1) * Y(Xh)
End If
Next Xh
Next J
Next I
Call JieFangCheng(A, B, xiaoA)
For I = 1 To M
Text1.Text = Text1.Text & "a" & I - 1 & "=" & xiaoA(I) & ";"
Next I
Dim Str As String: Str = "y="
For I = 1 To M '寫方程
If I < M Then
Str = Str & xiaoA(I) & "x^" & I - 1 & "+"
Else
Str = Str & xiaoA(I) & "x^" & I - 1
End If
Next I
Text1.Text = Text1.Text & vbCrLf & "曲線方程:" & vbCrLf & Str
Call HuaQuXian(xiaoA)
End Sub
Private Sub Command3_Click()
Dim Xzhi As Single, Yzhi As Single
Xzhi = Val(Text2.Text)
Yzhi = 0
For J = 1 To M
Yzhi = Yzhi + xiaoA(J) * Xzhi ^ (J - 1)
Next J
Text3.Text = Yzhi
End Sub
Private Sub Form_Load()
For I = 0 To 2
MSFlexGrid1.ColAlignment(I) = 4
Next I
For I = 1 To 20
MSFlexGrid1.TextMatrix(I, 0) = I
Next I
End Sub
Private Sub JieFangCheng(A() As Single, B() As Single, X() As Single)
N = UBound(B)
Dim TempA As Single, L As Integer, K As Integer, Kk As Integer
Dim Ii As Integer, ChuShu As Single, Sum As Single
For I = 1 To N
L = 0: Kk = 0
For J = I To N
If A(J, I) = 0 Then L = L + 1
Next J
For J = I To N - L
If A(J, I) = 0 Then
Kk = Kk + 1
For K = I To N
TempA = A(J, K)
A(J, K) = A(N - Kk + 1, K)
A(N - Kk + 1, K) = TempA
Next K
TempA = B(J): B(J) = B(N - Kk + 1): B(N - Kk + 1) = TempA
End If
Next J
For Ii = I To N - L
ChuShu = A(Ii, I)
For J = I To N
A(Ii, J) = A(Ii, J) / ChuShu
Next J
B(Ii) = B(Ii) / ChuShu
Next Ii
For Ii = I + 1 To N - L
For J = I To N
A(Ii, J) = A(Ii, J) - A(I, J)
Next J
B(Ii) = B(Ii) - B(I)
Next Ii
Next I
For I = 1 To N
For J = 1 To I - 1
A(I, J) = 0
Next J
Next I
X(N) = B(N) / A(N, N)
For I = N - 1 To 1 Step -1
Sum = 0
For J = I + 1 To N
Sum = Sum + A(I, J) * X(J)
Next J
X(I) = (B(I) - Sum) / A(I, I)
Next I
End Sub
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -