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

📄 d10r8.frm

📁 VB常用数值算法集 内含有解线性代数方程组
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   5505
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   5505
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   375
      Left            =   3000
      TabIndex        =   0
      Top             =   4680
      Width           =   1335
   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 D10R8
    'Driver for routine RTNEWT
    N = 100
    NBMAX = 20
    X1 = 1#
    X2 = 50#
    Dim XB1(20), XB2(20)
    NB = NBMAX
    Call ZBRAK(X1, X2, N, XB1(), XB2(), NB)
    Print
    Print Tab(5); "Roots of BESSJ0:"
    Print
    Print "                  x             F(x)"
    Print
    For I = 1 To NB
        XACC = (0.000001) * (XB1(I) + XB2(I)) / 2#
        ROOT = RTNEWT(XB1(I), XB2(I), XACC)
        Print Tab(5); "Root"; Format$(I, "##");
        Print Tab(15); Format$(ROOT, "##.####00");
        Print Tab(29); Format$(BESSJ0(ROOT), ".###0E+00")
    Next I
End Sub
Function FUNC(X)
    FUNC = BESSJ0(X)
End Function
Sub FUNCD(X, FN, DF)
    FN = BESSJ0(X)
    DF = -BESSJ1(X)
End Sub
Function RTNEWT(X1, X2, XACC)
    JMAX = 20
    RTNEWT = 0.5 * (X1 + X2)
    For J = 1 To JMAX
        Call FUNCD(RTNEWT, F, DF)
        DX = F / DF
        RTNEWT = RTNEWT - DX
        If (X1 - RTNEWT) * (RTNEWT - X2) < 0 Then
            Print "jumped out of brackets"
            Exit Function
        End If
        If Abs(DX) < XACC Then Exit Function
    Next J
    Print "RTNEWT exceeding maximum iterations."
End Function
Sub ZBRAK(X1, X2, N, XB1(), XB2(), NB)
      NBB = NB
      NB = 0
      X = X1
      DX = (X2 - X1) / N
      FP = FUNC(X)
      For I = 1 To N
          X = X + DX
          FC = FUNC(X)
          If FC * FP < 0# Then
              NB = NB + 1
              XB1(NB) = X - DX
              XB2(NB) = X
          End If
          FP = FC
          If NBB = NB Then Exit Sub
      Next I
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
   Function BESSJ1(X)
      R1 = 72362614232#
      R2 = -7895059235#
      R3 = 242396853.1
      R4 = -2972611.439
      R5 = 15704.4826
      R6 = -30.16036606
      S1 = 144725228442#
      S2 = 2300535178#
      S3 = 18583304.74
      S4 = 99447.43394
      S5 = 376.9991397
      S6 = 1#
      P1 = 1#
      P2 = 0.00183105
      P3 = -0.00003516396496
      P4 = 0.000002457520174
      P5 = -0.000000240337019
      Q1 = 0.04687499995
      Q2 = -0.0002002690873
      Q3 = 0.000008449199096
      Q4 = -0.00000088228987
      Q5 = 0.000000105787412
      If Abs(X) < 8# Then
          Y# = X ^ 2
          AAA# = R1 + Y * (R2 + Y * (R3 + Y * (R4 + Y * (R5 + Y * R6))))
          BBB# = S1 + Y * (S2 + Y * (S3 + Y * (S4 + Y * (S5 + Y * S6))))
          BESSJ1 = X * AAA# / BBB#
      Else
          AX = Abs(X)
          Z = 8# / AX
          Y# = Z ^ 2
          XX = AX - 2.356194491
          AAA# = P1 + Y * (P2 + Y * (P3 + Y * (P4 + Y * P5)))
          BBB# = Q1 + Y * (Q2 + Y * (Q3 + Y * (Q4 + Y * Q5)))
          CCC# = Sqr(0.636619772 / AX)
          BESSJ1 = CCC# * (Cos(XX) * AAA# - Z * Sin(XX) * BBB# * Sgn(X))
      End If
   End Function



⌨️ 快捷键说明

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