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

📄 form1.frm

📁 运筹学中的解线性规划问题的一种方法
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3720
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   4320
   LinkTopic       =   "Form1"
   ScaleHeight     =   3720
   ScaleWidth      =   4320
   StartUpPosition =   3  '窗口缺省
   Begin VB.Frame Frame1 
      Height          =   3015
      Left            =   240
      TabIndex        =   0
      Top             =   240
      Width           =   3735
      Begin VB.TextBox Text6 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Left            =   1560
         TabIndex        =   12
         Top             =   1920
         Width           =   1095
      End
      Begin VB.TextBox Text1 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Left            =   1560
         TabIndex        =   6
         Top             =   1200
         Width           =   855
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Left            =   1560
         TabIndex        =   5
         Top             =   1560
         Width           =   975
      End
      Begin VB.TextBox Text4 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Left            =   1560
         TabIndex        =   4
         Text            =   "2"
         Top             =   840
         Width           =   375
      End
      Begin VB.TextBox Text5 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Left            =   2280
         TabIndex        =   3
         Text            =   "2"
         Top             =   840
         Width           =   375
      End
      Begin VB.TextBox Text3 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Left            =   1560
         TabIndex        =   2
         Top             =   2280
         Width           =   1935
      End
      Begin VB.Label Label1 
         Caption         =   "迭代精度"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   12
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   2
         Left            =   120
         TabIndex        =   11
         Top             =   1560
         Width           =   1455
      End
      Begin VB.Label Label1 
         Caption         =   "最优函数值"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   12
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   11
         Left            =   120
         TabIndex        =   10
         Top             =   1920
         Width           =   1455
      End
      Begin VB.Label Label1 
         Caption         =   "最优迭代点"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   12
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   10
         Left            =   120
         TabIndex        =   9
         Top             =   2280
         Width           =   1575
      End
      Begin VB.Label Label1 
         Caption         =   "初始迭代点"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   12
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   9
         Left            =   120
         TabIndex        =   8
         Top             =   840
         Width           =   1455
      End
      Begin VB.Label Label1 
         Caption         =   "迭代次数"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   12
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   0
         Left            =   120
         TabIndex        =   7
         Top             =   1200
         Width           =   1215
      End
      Begin VB.Label Label1 
         Caption         =   "DFP算法"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   15
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   375
         Index           =   1
         Left            =   120
         TabIndex        =   1
         Top             =   240
         Width           =   1215
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Form_Load()
Dim X_k_0(1 To 2) As Double '定义变量Xk
Dim X_k_1(1 To 2) As Double '定义变量Xk+1
Dim Ⅴf_X_k_0(1 To 2) As Double '定义梯度Ⅴf(Xk)
Dim Ⅴf_X_k_1(1 To 2) As Double '定义梯度Ⅴf(Xk+1)
Dim g_k_0(1 To 2) As Double '梯度的另一表达形式
Dim g_k_1(1 To 2) As Double '梯度的另一表达形式
Dim Sk_0(1 To 2) '定义搜索方向
Dim Sk_1(1 To 2) '定义搜索方向
Dim δX_k_0(1 To 2) As Double
Dim δg_k_0(1 To 2) As Double
Dim H_k_0(1 To 2, 1 To 2)
Dim H_k_1(1 To 2, 1 To 2)
Dim iterative As Integer '定义迭代次数
Dim X1 As Double '定义自变量X1
Dim X2 As Double '定义自变量X2
Dim i As Integer '计数变量
Dim ε As Double

ε = 0.00005 '迭代精度
X_k_0(1) = Text4.Text  '初始迭代点
X_k_0(2) = Text5.Text  '初始迭代点
H_k_0(1, 1) = 1
H_k_0(1, 2) = 0
H_k_0(2, 1) = 0
H_k_0(2, 2) = 1
X1 = X_k_0(1)
X2 = X_k_0(2)
Ⅴf_X_k_0(1) = -1 + 2 * X2 + 2 * X1 '计算梯度
Ⅴf_X_k_0(2) = 1 + 2 * X1 + 6 * X2 '计算梯度
g_k_0(1) = Ⅴf_X_k_0(1)
g_k_0(2) = Ⅴf_X_k_0(2)
For i = 1 To 2
    Sk_0(i) = -(H_k_0(i, 1) * g_k_0(1) + H_k_0(i, 2) * g_k_0(2)) '计算迭代方向
Next i

If (g_k_0(1) * g_k_0(1) + g_k_0(2) * g_k_0(2) < ε) Then
    MsgBox ("迭代完毕!")
Else
    For iterative = 1 To 1000 '开始迭代
        Select Case iterative '确定λ的值
            Case 1
                λ = 0.5958
                X_k_1(1) = X_k_0(1) + λ * Sk_0(1)
                X_k_1(2) = X_k_0(2) + λ * Sk_0(2)
                X1 = X_k_1(1)
                X2 = X_k_1(2)
                Ⅴf_X_k_1(1) = -1 + 2 * X2 + 2 * X1 '梯度表达式
                Ⅴf_X_k_1(2) = 1 + 2 * X1 + 6 * X2 '梯度表达式
                g_k_1(1) = Ⅴf_X_k_1(1)
                g_k_1(2) = Ⅴf_X_k_1(2)
            Case 2
                λ = 1
                δX_k_0(1) = X_k_1(1) - X_k_0(1)
                δX_k_0(2) = X_k_1(2) - X_k_0(2)
                δg_k_0(1) = g_k_1(1) - g_k_0(1)
                δg_k_0(2) = g_k_1(2) - g_k_0(2)
                H_k_1(1, 1) = H_k_0(1, 1) + δX_k_0(1) * δX_k_0(1) / (δX_k_0(1) * δg_k_0(1) + δX_k_0(2) * δg_k_0(2)) - δg_k_0(1) * δg_k_0(1) / (δg_k_0(1) * δg_k_0(1) + δg_k_0(2) * δg_k_0(2))
                H_k_1(1, 2) = H_k_0(1, 2) + δX_k_0(1) * δX_k_0(2) / (δX_k_0(1) * δg_k_0(1) + δX_k_0(2) * δg_k_0(2)) - δg_k_0(1) * δg_k_0(2) / (δg_k_0(1) * δg_k_0(1) + δg_k_0(2) * δg_k_0(2))
                H_k_1(2, 1) = H_k_0(2, 1) + δX_k_0(2) * δX_k_0(1) / (δX_k_0(1) * δg_k_0(1) + δX_k_0(2) * δg_k_0(2)) - δg_k_0(2) * δg_k_0(1) / (δg_k_0(1) * δg_k_0(1) + δg_k_0(2) * δg_k_0(2))
                H_k_1(2, 2) = H_k_0(2, 2) + δX_k_0(2) * δX_k_0(2) / (δX_k_0(1) * δg_k_0(1) + δX_k_0(2) * δg_k_0(2)) - δg_k_0(2) * δg_k_0(2) / (δg_k_0(1) * δg_k_0(1) + δg_k_0(2) * δg_k_0(2))
                For i = 1 To 2 '计算迭代方向
                    Sk_1(i) = -(H_k_1(i, 1) * g_k_1(1) + H_k_1(i, 2) * g_k_1(2))
                Next i
                X_k_1(1) = X_k_1(1) + λ * Sk_1(1) '计算新的迭代点
                X_k_1(2) = X_k_1(2) + λ * Sk_1(2)
                X1 = X_k_1(1)
                X2 = X_k_1(2)
                Ⅴf_X_k_1(1) = -1 + 2 * X2 + 2 * X1 '梯度表达式
                Ⅴf_X_k_1(2) = 1 + 2 * X1 + 6 * X2 '梯度表达式
                g_k_1(1) = Ⅴf_X_k_1(1)
                g_k_1(2) = Ⅴf_X_k_1(2)
                Case 3
          
            End Select
        If (g_k_1(1) * g_k_1(1) + g_k_1(2) * g_k_1(2) < ε) Then '判断是否达到迭代精度
            f_X = -X1 + X2 + 2 * X1 * X2 + X1 * X1 + 3 * X2 * X2 '函数表达式
            f_X_k_1 = f_X '计算Xk对应的函数值
            MsgBox ("迭代完毕!")
            Text1.Text = iterative '输出迭代次数
            Text2.Text = Format(g_k_1(1) * g_k_1(1) + g_k_1(2) * g_k_1(2), "0.00000") '输出迭代精度
            Text3.Text = Format(X1, "0.0000") & "," & Format(X2, "0.0000") '输出最优迭代点的值
            Text6.Text = Format(f_X_k_1, "0.00000") '输出最优迭代点的函数值
            Exit For
        Else
        End If
    Next iterative
End If
End Sub

⌨️ 快捷键说明

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