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

📄 d9r1.frm

📁 矩阵特征值的求解过程之一
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   6615
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   5415
   LinkTopic       =   "Form1"
   ScaleHeight     =   6615
   ScaleWidth      =   5415
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   375
      Left            =   3960
      TabIndex        =   0
      Top             =   5880
      Width           =   1215
   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 D9R1
    'Driver for routine MNBRAK
    For I = 1 To 10
        AX = I * 0.5
        BX = (I + 1#) * 0.5
        Call MNBRAK(AX, BX, CX, FA, FB, FC)
        Print Tab(5); "              A             B             C"
        Print Tab(5); "X";
        Print Tab(15); Format$(AX, "0.####00");
        Print Tab(29); Format$(BX, "0.####00");
        Print Tab(43); Format$(CX, "0.####00")
        Print Tab(5); "F";
        Print Tab(15); Format$(FA, "0.####00");
        Print Tab(29); Format$(FB, "0.####00");
        Print Tab(43); Format$(FC, "0.####00")
    Next I
End Sub
Function FUNC(X)
    FUNC = BESSJ0(X)
End Function
Sub MNBRAK(AX, BX, CX, FA, FB, FC)
    GOLD = 1.618034
    GLIMIT = 100#
    TINY = 1E-20
    FA = FUNC(AX)
    FB = FUNC(BX)
    If FB > FA Then
        DUM = AX
        AX = BX
        BX = DUM
        DUM = FB
        FB = FA
        FA = DUM
    End If
    CX = BX + GOLD * (BX - AX)
    FC = FUNC(CX)
    Do
        If FB < FC Then Exit Do
        DONE% = -1
        R = (BX - AX) * (FB - FC)
        Q = (BX - CX) * (FB - FA)
        DUM = Q - R
        If Abs(DUM) < TINY Then DUM = TINY
        U = BX - ((BX - CX) * Q - (BX - AX) * R) / (2 * DUM)
        ULIM = BX + GLIMIT * (CX - BX)
        If (BX - U) * (U - CX) > 0# Then
            FU = FUNC(U)
            If FU < FC Then
                AX = BX
                FA = FB
                BX = U
                FB = FU
                Exit Sub
            ElseIf FU > FB Then
                CX = U
                FC = FU
                Exit Sub
            End If
            U = CX + GOLD * (CX - BX)
            FU = FUNC(U)
        ElseIf (CX - U) * (U - ULIM) > 0# Then
            FU = FUNC(U)
            If FU < FC Then
                BX = CX
                CX = U
                U = CX + GOLD * (CX - BX)
                FB = FC
                FC = FU
                FU = FUNC(U)
            End If
        ElseIf (U - ULIM) * (ULIM - CX) >= 0# Then
            U = ULIM
            FU = FUNC(U)
        Else
            U = CX + GOLD * (CX - BX)
            FU = FUNC(U)
        End If
        If DONE% Then
            AX = BX
            BX = CX
            CX = U
            FA = FB
            FB = FC
            FC = FU
        Else
            DONE% = 0
        End If
    Loop While Not DONE%
End Sub
Function BESSJ0(X)
    P1# = 1#
    P2# = -0.001098628627
    P3# = 0.00002734510407
    P4# = -0.000002073370639
    P5# = 2.093887211E-07
    Q1# = -0.01562499995
    Q2# = 0.0001430488765
    Q3# = -0.000006911147651
    Q4# = 7.621095161E-07
    Q5# = -9.34945152E-08
    R1# = 57568490574#
    R2# = -13362590354#
    R3# = 651619640.7
    R4# = -11214424.18
    R5# = 77392.33017
    R6# = -184.9052456
    S1# = 57568490411#
    S2# = 1029532985#
    S3# = 9494680.718
    S4# = 59272.64853
    S5# = 267.8532712
    S6# = 1#
    If Abs(X) < 8# Then
       y# = X * X
       BBB# = y# * (R4# + y# * (R5# + y# * R6#))
       AAA# = R1# + y# * (R2# + y# * (R3# + BBB#))
       CCC# = y# * (S3# + y# * (S4# + y# * (S5# + y# * S6#)))
       BESSJ0 = AAA / (S1# + y# * (S2# + CCC#))
    Else
       AX# = Abs(X)
       Z# = 8# / AX#
       y# = Z# * Z#
       XX = AX# - 0.785398164
       CCC# = y# * (P3# + y# * (P4# + y# * P5#))
       AAA# = P1# + y# * (P2# + CCC#)
       DDD# = y# * (Q3# + y# * (Q4# + y# * Q5#))
       EEE# = Z# * Sin(XX) * (Q1# + y# * (Q2# + DDD#))
       BESSJ0 = Sqr(0.636619772 / AX#) * (Cos(XX) * AAA# - EEE#)
    End If
End Function


⌨️ 快捷键说明

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