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

📄 form1.frm

📁 运筹学中的解线性规划问题的一种方法
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3390
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   4845
   LinkTopic       =   "Form1"
   ScaleHeight     =   3390
   ScaleWidth      =   4845
   StartUpPosition =   3  '窗口缺省
   Begin VB.Frame Frame1 
      Height          =   2415
      Left            =   360
      TabIndex        =   0
      Top             =   240
      Width           =   3975
      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            =   2040
         TabIndex        =   10
         Top             =   1080
         Width           =   1215
      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            =   2880
         TabIndex        =   4
         Text            =   "1"
         Top             =   720
         Width           =   375
      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            =   2040
         TabIndex        =   3
         Text            =   "1"
         Top             =   720
         Width           =   375
      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            =   2040
         TabIndex        =   2
         Top             =   1440
         Width           =   1215
      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            =   2040
         TabIndex        =   1
         Top             =   1800
         Width           =   1215
      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        =   9
         Top             =   1080
         Width           =   1215
      End
      Begin VB.Label Label1 
         Caption         =   "共轭梯度法"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   15
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   375
         Index           =   8
         Left            =   120
         TabIndex        =   8
         Top             =   240
         Width           =   1695
      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        =   7
         Top             =   720
         Width           =   1215
      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        =   6
         Top             =   1440
         Width           =   1215
      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        =   5
         Top             =   1800
         Width           =   1455
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim note As Integer
Private Sub Form_Load()

Dim X_k_0(1 To 2) As Double '迭代点
Dim X_k_1(1 To 2) As Double '迭代点
Dim X_k_2(1 To 2) As Double '迭代点
Dim μ_k(1 To 2) As Double
Dim Ⅴf_X(1 To 2) As Double '定义梯度Ⅴf(X)
Dim g_k_0(1 To 2) As Double '梯度的另一表达形式
Dim g_k_1(1 To 2) As Double '梯度的另一表达形式
Dim s_k_0(1 To 2) As Double '搜索方向
Dim s_k_1(1 To 2) As Double '搜索方向
Dim iterative As Integer '定义迭代次数
Dim X1 '定义自变量
Dim X2 '定义自变量

ε = 0.00001 '迭代精度
note = 1
X_k_0(1) = Text4.Text '初始迭代点
X_k_0(2) = Text5.Text '初始迭代点
X1 = X_k_0(1)
X2 = X_k_0(2)
Ⅴf_X(1) = 2 * X1 - 4 - 2 * X2 '计算梯度
Ⅴf_X(2) = -2 * X1 + 4 * X2 '计算梯度
g_k_0(1) = Ⅴf_X(1)
g_k_0(2) = Ⅴf_X(2)
g_k_1(1) = g_k_0(1)
g_k_1(2) = g_k_0(2)

If (g_k_0(1) * g_k_0(1) + g_k_0(2) * g_k_0(2) < ε) Then
    MsgBox ("迭代完毕!")
Else
    μ_k(1) = 0
    For iterative = 1 To 1000 '开始迭代
        Select Case iterative
            Case 1
            λ = 0.25
            Case 2
            λ = 1
            Case 3
        End Select
    For i = 1 To 2 '计算新的Xk+1
    s_k_1(i) = -g_k_1(i) + μ_k(note) * s_k_0(i)
    s_k_0(i) = s_k_1(i)
    Next i
    For i = 1 To 2 '计算新的Xk+1
        X_k_1(i) = X_k_0(i) + λ * s_k_1(i)
        X_k_0(i) = X_k_1(i)
    Next i
    
    X1 = X_k_1(1)
    X2 = X_k_1(2)
    Ⅴf_X(1) = 2 * X1 - 4 - 2 * X2 '计算梯度
    Ⅴf_X(2) = -2 * X1 + 4 * X2 '计算梯度
    g_k_1(1) = Ⅴf_X(1)
    g_k_1(2) = Ⅴf_X(2)
    If (g_k_1(1) * g_k_1(1) + g_k_1(2) * g_k_1(2) < ε) Then
        f_X = X1 * X1 + 2 * X2 * X2 - 4 * X1 - 2 * X1 * X2 '函数表达式
        f_X_k_1 = f_X '计算Xk对应的函数值
        Text2.Text = X1 & "," & X2 '输出迭代点的值
        Text1.Text = f_X_k_1 '输出迭代点的函数值
        Text3 = iterative '输出迭代次数
        MsgBox ("迭代完毕!")
        Exit For
    Else
        note = note + 1
        μ_k(note) = (g_k_1(1) * g_k_1(1) + g_k_1(2) * g_k_1(2)) / (g_k_0(1) * g_k_0(1) + g_k_0(2) * g_k_0(2))
    End If
Next iterative
End If
End Sub


⌨️ 快捷键说明

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