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

📄 form1.frm

📁 运筹学中的解线性规划问题的一种方法
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3405
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   4620
   LinkTopic       =   "Form1"
   ScaleHeight     =   3405
   ScaleWidth      =   4620
   StartUpPosition =   3  '窗口缺省
   Begin VB.Frame Frame1 
      Height          =   2895
      Left            =   240
      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            =   1680
         TabIndex        =   7
         Top             =   2280
         Width           =   1695
      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            =   2400
         TabIndex        =   6
         Text            =   "1"
         Top             =   840
         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            =   1680
         TabIndex        =   5
         Text            =   "1"
         Top             =   840
         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            =   1680
         TabIndex        =   4
         Top             =   1560
         Width           =   975
      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            =   1680
         TabIndex        =   3
         Top             =   1200
         Width           =   615
      End
      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            =   1680
         TabIndex        =   2
         Top             =   1920
         Width           =   1335
      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           =   1
         Left            =   240
         TabIndex        =   12
         Top             =   1200
         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           =   9
         Left            =   240
         TabIndex        =   11
         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           =   10
         Left            =   240
         TabIndex        =   10
         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           =   11
         Left            =   240
         TabIndex        =   9
         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           =   2
         Left            =   240
         TabIndex        =   8
         Top             =   1560
         Width           =   1455
      End
      Begin VB.Label Label1 
         Caption         =   "Powell迭代法"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   15
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   375
         Index           =   0
         Left            =   240
         TabIndex        =   1
         Top             =   360
         Width           =   2415
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim f_x1_x2 As Double
Private Sub Form_Load()
Dim X_0(1 To 2) As Double '初始迭代点
Dim X_1(1 To 2) As Double '迭代点
Dim X_2(1 To 2) As Double '迭代点
Dim X_ζ(1 To 2) As Double '迭代点
Dim f_0 As Double 'x0点对应得函数值
Dim f_1 As Double 'x1点对应得函数值
Dim f_2 As Double 'x2点对应得函数值
Dim f_ζ As Double '(2*x2-x0)点对应得函数值
Dim S_1(1 To 2) '迭代方向s1
Dim S_2(1 To 2) '迭代方向s2
Dim λ0 As Double '迭代步长
Dim λ1 As Double '迭代步长
Dim λ2 As Double '迭代步长
Dim λζ As Double '迭代步长
Dim ε As Double '迭代精度
Dim δ As Double
Dim i As Integer
ε = 0.000001 '定义迭代精度
X_0(1) = Text4.Text '初始迭代点
X_0(2) = Text5.Text '初始迭代点

S_1(1) = 1 '初始迭代方向
S_1(2) = 0 '初始迭代方向
S_2(1) = 0 '初始迭代方向
S_2(2) = 1 '初始迭代方向

For iterative = 1 To 1000 '开始迭代
    Call f(X_0(1), X_0(2)) '调用函数计算x0点处函数值
        f_0 = f_x1_x2
    Select Case iterative '确定步长
        Case 1
            λ0 = 2
            λ1 = 1 / 2
            λζ = 0.4
        Case 2
            λ0 = 0.2
            λ1 = 0.08
            λζ = 0.25
        Case 3
            λ0 = 0
            λ1 = 0
            λζ = 0
        End Select
    For i = 1 To 2 '确定迭代点x1
        X_1(i) = X_0(i) + λ0 * S_1(i)
    Next i
    Call f(X_1(1), X_1(2)) '调用函数计算x1点处函数值
        f_1 = f_x1_x2
    For i = 1 To 2 '确定迭代点x2
        X_2(i) = X_1(i) + λ1 * S_2(i)
    Next i
    Call f(X_2(1), X_2(2)) '调用函数计算x2点函数值
        f_2 = f_x1_x2
    If ((f_0 - f_1) > (f_1 - f_2)) Then '确定δ值
        δ = f_0 - f_1
    Else
        δ = f_1 - f_2
    End If
    Call f((2 * X_2(1) - X_0(1)), (2 * X_2(2) - X_0(2))) '调用函数计算(2x2-x0)点函数值
        f_ζ = f_x1_x2
    If (((2 * X_2(1) - X_0(1)) - X_0(1)) * ((2 * X_2(1) - X_0(1)) - X_0(1)) + ((2 * X_2(2) - X_0(2)) - X_0(2)) * ((2 * X_2(2) - X_0(2)) - X_0(2)) < ε) Then '判断迭代是否完成
        MsgBox ("迭代完毕!")
        Text1.Text = iterative '输出迭代次数
        Text2.Text = Format(((2 * X_2(1) - X_0(1)) - X_0(1)) * ((2 * X_2(1) - X_0(1)) - X_0(1)) + ((2 * X_2(2) - X_0(2)) - X_0(2)) * ((2 * X_2(2) - X_0(2)) - X_0(2)), "0.00000") '输出迭代精度
        Text3.Text = Format((2 * X_2(1) - X_0(1)), "0.0000") & "," & Format((2 * X_2(2) - X_0(2)), "0.0000")  '输出最优迭代点的值
        Text6.Text = Format(f_ζ, "0.00000") '输出最优迭代点的函数值
        Exit For
    Else
        If ((f_0 - 2 * f_2 + f_ζ) * (f_0 - f_2 - δ) * (f_0 - f_2 - δ) < (1 / 2 * δ * (f_0 - f_ζ) * (f_0 - f_ζ))) Then '判断是否改变迭代方向
            For i = 1 To 2 '改变迭代方向
                S_1(i) = S_2(i)
            Next i
            For i = 1 To 2
                S_2(i) = X_2(i) - X_0(i)
            Next i
            For i = 1 To 2
                X_ζ(i) = X_2(i) + λζ * S_2(i)
            Next i
            Call f(X_ζ(1), X_ζ(2)) '调用函数计算函数值
                f_2 = f_x1_x2
            For i = 1 To 2
                X_0(i) = X_ζ(i)
            Next i
        Else '保持迭代方向不变
        
        End If
    End If
Next iterative
End Sub

Function f(X1, X2) '计算函数值
    f_x1_x2 = X1 * X1 + 2 * X2 * X2 - 2 * X1 * X2 - 4 * X1
End Function



⌨️ 快捷键说明

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