非线性最小二乘法数据拟合(3).frm
来自「运用最小二乘法的数值拟合」· FRM 代码 · 共 76 行
FRM
76 行
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3090
ClientLeft = 60
ClientTop = 450
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3090
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 495
Left = 4200
TabIndex = 0
Top = 7320
Width = 1455
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()
'PROGRAM D9R9
'Driver for roution FGAUSS
NPT = 3
NLIN = 2
NA = 3 * NLIN
Dim A(6), DYDA(6), DF(6)
A(1) = 3#: A(2) = 0.2: A(3) = 0.5: A(4) = 1#: A(5) = 0.7: A(6) = 0.3
Print Tab(6); "X Y DATA1 DATA2 DATA3 DATA4 DATA5 DATA6"
For I = 1 To NPT
X = 0.3 * I
Call FGAUSS(X, A(), Y, DYDA(), NA)
E1 = Exp(-((X - A(2)) / A(3)) ^ 2)
E2 = Exp(-((X - A(5)) / A(6)) ^ 2)
F = A(1) * E1 + A(4) * E2
DF(1) = E1
DF(4) = E2
DF(2) = A(1) * E1 * 2# * (X - A(2)) / (A(3) ^ 2)
DF(5) = A(4) * E2 * 2# * (X - A(5)) / (A(6) ^ 2)
DF(3) = A(1) * E1 * 2# * ((X - A(2)) ^ 2) / (A(3) ^ 3)
DF(6) = A(4) * E2 * 2# * ((X - A(5)) ^ 2) / (A(6) ^ 3)
Print Tab(5)
Print Tab(5); "from FGAUSS"
Print Tab(5)
Print Tab(3); Format(X, "##.##00"); Tab(13); Format$(Y, "##.##00");
For J = 1 To 6
Print Tab(21 + (J - 1) * 9); Format$(DYDA(J), "##.####");
Next J
Print Tab(5)
Print Tab(5); "independent calc."
Print Tab(5)
Print Tab(3); Format(X, "##.##00"); Tab(13); Format$(F, "##.##00");
For J = 1 To 6
Print Tab(21 + (J - 1) * 9); Format$(DF(J), "##.####");
Next J
Print
Next I
End Sub
Sub FGAUSS(X, A(), Y, DYDA(), NA)
Y = 0#
For I = 1 To NA - 1 Step 3
ARG = (X - A(I + 1)) / A(I + 2)
EX = Exp(-ARG ^ 2)
FAC = A(I) * EX * 2# * ARG
Y = Y + A(I) * EX
DYDA(I) = EX
DYDA(I + 1) = FAC / A(I + 2)
DYDA(I + 2) = FAC * ARG / A(I + 2)
Next I
End Sub
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?