非线性最小二乘法数据拟合(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 + -
显示快捷键?