📄 form1.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 + -