匿名用户
1级
2011-03-24 回答
Private n As Integer
'(程序头部)
Private X0() As Double
Private S() As Double
Private A As Double, B As Double
Dim kf As Integer
Public Sub JinTui(X0() As Double, S() As Double, n As Integer, T0 As Double, A As Double, B As Double)
'(进退法子程序)
Dim A1 As Double, A2 As Double, T As Double
Dim f1 As Double, f2 As Double
Dim i As Integer
Dim X() As Double
Dim bestf As Double
ReDim X(n)
T = T0
A1 = 0
A2 = T
f1 = F(X0())
For i = 1 To n
X(i) = X0(i) + A2 * S(i)
Next i
f2 = F(X())
If f2 < f1 Then
Do
T = 2 * T
A2 = A2 + T
f1 = f2
For i = 1 To n
X(i) = X0(i) + A2 * S(i)
Next i
f2 = F(X())
If f2 < f1 Then
A1 = A2 - T
End If
Loop Until f2 > f1
Else
'(学生自编程序段)
T = -T
Do
A1 = A1 + T
f2 = f1
For i = 1 To n
X(i) = X0(i) + A1 * S(i)
Next i
f1 = F(X())
If f2 > f1 Then
A2 = A1 - T
T = 2 * T
End If
Loop Until f2 < f1
End If
A = A1
B = A2
End Sub
Private Sub command1_Click() '主程序
Dim T0 As Double
Dim X0(1) As Double
Dim S(1) As Double
X0(1) = 0
'若X0(1) = 1.8 ?
S(1) = 1
T0 = 0.1
n = 1
Call JinTui(X0(), S(), n, T0, A, B)
MsgBox "A=" & A & " , B=" & B & " , 进退法"
End Sub
Public Function F(X() As Double)
'(目标函数子程序)
F = 3 * X(1) ^ 3 - 8 * X(1) + 9
End Function