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

📄 brent.txt

📁 用VB实现的函数的极致和最优化 包括黄金分割搜索法、不用导数的布伦特法 用导数的布伦特法、多元函数的山单纯形法、多元函数的变尺度法等
💻 TXT
字号:
Function BRENT(AX, BX, CX, TOL, XMIN)
    ITMAX = 100
    CGOLD = 0.381966
    ZEPS = 0.0000000001
    A = AX
    If CX < AX Then A = CX
    B = AX
    If CX > AX Then B = CX
    V = BX
    W = V
    X = V
    E = 0#
    FX = FUNC(X)
    FV1 = FX
    FW = FX
    For ITER = 1 To ITMAX
        XM = 0.5 * (A + B)
        TOL1 = TOL * Abs(X) + ZEPS
        TOL2 = 2# * TOL1
        If Abs(X - XM) <= TOL2 - 0.5 * (B - A) Then Exit For
        DONE% = -1
        If Abs(E) > TOL1 Then
            R = (X - W) * (FX - FV1)
            Q = (X - V) * (FX - FW)
            P = (X - V) * Q - (X - W) * R
            Q = 2# * (Q - R)
            If Q > 0# Then P = -P
            Q = Abs(Q)
            ETEMP = E
            E = D
            DUM = Abs(0.5 * Q * ETEMP)
            If Abs(P) < DUM And P > Q * (A - X) And P < Q * (B - X) Then
                D = P / Q
                U = X + D
                If U - A < TOL2 Or B - U < TOL2 Then
                    D = Abs(TOL1) * Sgn(XM - X)
                End If
                DONE% = 0
            End If
        End If
        If DONE% Then
            If X >= XM Then
                E = A - X
            Else
                E = B - X
            End If
            D = CGOLD * E
        End If
        If Abs(D) >= TOL1 Then
            U = X + D
        Else
            U = X + Abs(TOL1) * Sgn(D)
        End If
        FU = FUNC(U)
        If FU <= FX Then
            If U >= X Then
                A = X
            Else
                B = X
            End If
            V = W
            FV1 = FW
            W = X
            FW = FX
            X = U
            FX = FU
        Else
            If U < X Then
                A = U
            Else
                B = U
            End If
            If FU <= FW Or W = X Then
                V = W
                FV1 = FW
                W = U
                FW = FU
            ElseIf FU <= FV1 Or V = X Or V = W Then
                V = U
                FV1 = FU
            End If
        End If
    Next ITER
    If ITER > ITMAX Then Print " Brent exceed maximum iterations."
    XMIN = X
    BRENT = FX
End Function

⌨️ 快捷键说明

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