📄 form1.frm
字号:
Height = 270
Index = 1
Left = 4080
TabIndex = 22
Top = 720
Width = 1815
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
Index = 0
Left = 2040
TabIndex = 21
Top = 720
Width = 1815
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 = 270
Index = 8
Left = 6120
TabIndex = 20
Top = 3240
Width = 495
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 = 270
Index = 7
Left = 4080
TabIndex = 19
Top = 3240
Width = 495
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 = 270
Index = 6
Left = 2040
TabIndex = 18
Top = 3240
Width = 495
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 = 270
Index = 5
Left = 6120
TabIndex = 17
Top = 1680
Width = 495
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 = 270
Index = 4
Left = 4080
TabIndex = 16
Top = 1680
Width = 495
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 = 270
Index = 3
Left = 2040
TabIndex = 15
Top = 1680
Width = 495
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 = 270
Index = 2
Left = 6120
TabIndex = 14
Top = 240
Width = 495
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 = 270
Index = 1
Left = 4080
TabIndex = 13
Top = 240
Width = 495
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 = 270
Index = 0
Left = 2040
TabIndex = 12
Top = 240
Width = 495
End
Begin VB.Label Label2
Caption = "迭代次数"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 8
Left = 240
TabIndex = 44
Top = 3240
Width = 975
End
Begin VB.Label Label2
Caption = "迭代点Xk"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 7
Left = 240
TabIndex = 43
Top = 3720
Width = 975
End
Begin VB.Label Label2
Caption = "迭代点处函数值"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 6
Left = 240
TabIndex = 42
Top = 4200
Width = 1575
End
Begin VB.Label Label2
Caption = "迭代次数"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 5
Left = 240
TabIndex = 41
Top = 1680
Width = 975
End
Begin VB.Label Label2
Caption = "迭代点Xk"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 4
Left = 240
TabIndex = 40
Top = 2160
Width = 975
End
Begin VB.Label Label2
Caption = "迭代点处函数值"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 3
Left = 240
TabIndex = 39
Top = 2640
Width = 1575
End
Begin VB.Label Label2
Caption = "迭代点处函数值"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 2
Left = 240
TabIndex = 11
Top = 1200
Width = 1575
End
Begin VB.Label Label2
Caption = "迭代点Xk"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 1
Left = 240
TabIndex = 10
Top = 720
Width = 975
End
Begin VB.Label Label2
Caption = "迭代次数"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Index = 0
Left = 240
TabIndex = 9
Top = 240
Width = 975
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 '定义变量Xk
Dim X_k_1(1 To 2) As Double '定义变量Xk+1
Dim S_k(1 To 2) As Double '定义搜索方向Sk
Dim Ⅴf_X(1 To 2) As Double '定义梯度Ⅴf(X)
Dim g_X_k_0(1 To 2) As Double '梯度Ⅴf(X)的另一表示方法
Dim g_X_k_1(1 To 2) As Double '梯度Ⅴf(X)的另一表示方法
Dim f_X As Double '定义函数值f(X)
Dim f_X_k_0 As Double '定义函数值f(Xk)
Dim f_X_k_1 As Double '定义函数值f(Xk+1)
Dim g_kTS_k_0 As Double
Dim g_kTS_k_1 As Double
Dim iterative As Integer '定义迭代次数
Dim X1 As Double '定义自变量X1
Dim X2 As Double '定义自变量X2
Dim i As Integer '计数变量
Dim j As Integer '计数变量
Dim C1 As Double '经验常数
Dim C2 As Double '经验常数
Dim b As Double '交换变量
Dim λ As Double '定义步长
note = 0
X_k_0(1) = Text1(4).Text
X_k_0(2) = Text1(5).Text
S_k(1) = Text1(6).Text
S_k(2) = Text1(7).Text
X1 = X_k_0(1)
X2 = X_k_0(2)
f_X = 100 * (X2 - X1 * X1) * (X2 - X1 * X1) + (1 - X1) * (1 - X1) '函数表达式
Ⅴf_X(1) = 200 * (X2 - X1 * X1) * (-2 * X1) - 2 * (1 - X1) '梯度表达式
Ⅴf_X(2) = 200 * (X2 - X1 * X1) '梯度表达式
g_X_k_0(1) = Ⅴf_X(1)
g_X_k_0(2) = Ⅴf_X(2)
f_X_k_0 = f_X '计算Xk对应的函数值
g_kTS_k_0 = g_X_k_0(1) * S_k(1) + g_X_k_0(2) * S_k(2)
C1 = 0.1 '经验常数
C2 = 0.5 '经验常数
a = 0
b = 100000000
λ = 1 '初始步长
For iterative = 1 To 1000 '开始迭代
Text2(note).Text = Format(iterative, "#") '输出迭代次数
For i = 1 To 2 '计算新的Xk+1
X_k_1(i) = X_k_0(i) + λ * S_k(i)
Next i
Text3(note).Text = Format(X_k_1(1), "#.####") & " " & Format(X_k_1(2), "#.####") '输出迭代点
X1 = X_k_1(1)
X2 = X_k_1(2)
f_X = 100 * (X2 - X1 * X1) * (X2 - X1 * X1) + (1 - X1) * (1 - X1) '函数表达式
f_X_k_1 = f_X '计算Xk+1对应的函数值
Text4(note).Text = Format(f_X_k_1, "###.###") '输出迭代点处的函数值
If ((f_X_k_0 - f_X_k_1) < C1 * λ * g_kTS_k_0) Then
b = λ
λ = (λ + a) / 2
Else '满足条件1
Ⅴf_X(1) = 200 * (X2 - X1 * X1) * (-2 * X1) - 2 * (1 - X1) '梯度表达式
Ⅴf_X(2) = 200 * (X2 - X1 * X1) '梯度表达式
g_X_k_1(1) = Ⅴf_X(1)
g_X_k_1(2) = Ⅴf_X(2)
g_kTS_k_1 = g_X_k_1(1) * S_k(1) + g_X_k_1(2) * S_k(2)
If (g_kTS_k_1 > C2 * g_kTS_k_0) Then '满足条件1和2
MsgBox ("优化完毕!")
Exit For
Else '不满足条件2
a = λ
If (2 * λ < (λ + b) / 2) Then
λ = 2 * λ
Else
λ = (λ + b) / 2
End If
End If
End If
note = note + 1
Next iterative
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -