Private Sub Command1_Click()
Dim ls As Single
Dim cs As Single
Dim us As Single
Dim l1 As Single
Dim c1 As Single
Dim u1 As Single
Dim l2 As Single
Dim c2 As Single
Dim u2 As Single
Dim th(1 To 100) As Single
Dim h As Single
Dim lp As Single
Dim t1 As Single
Dim t2 As Single
Dim e As Single
Dim b As Single
Dim u(1 To 100, -10 To 10) As Single
Dim v(1 To 100, -10 To 10) As Single
Dim s As Single
Dim q As Single
Dim s1 As Single
Dim s2 As Single
Dim g As Single
For q = 1 To 100
th(q) = 1 + 0.001 * q
Next
For q = 1 To 100
For s = -10 To 10
b = 0.01 * s
e = 10 ^ (-5)
h = 0.1
ls = (b + 0.5) / th(q)
cs = th(q) * ls - b
us = Log(cs) + Log(1 - ls)
t2 = 0
Do Until t2 > 10
t1 = 0
Do Until t1 > 100
l1 = ls + h
If l1 > 0.99 Then l1 = ls
c1 = th(q) * l1 - b
u1 = Log(c1) + Log(1 - l1)
l2 = ls - h
If l2 < 0.01 Then l2 = ls
c2 = th(q) * l2 - b
If c2 < 0.01 Then l2 = ls
c2 = th(q) * l2 - b
u2 = Log(c2) + Log(1 - l2)
If u1 > us Then ls = l1
If u1 > us Then us = u1
If u2 > us Then ls = l2
If u2 > us Then us = u2
If (lp - ls) ^ 2 < e Then t1 = 1000
lp = ls
t1 = t1 + 1
Loop
h = h / 2
t2 = t2 + 1
Loop
u(q, s) = us
Next
Next
For s = -10 To 10
v(1, s) = u(1, s)
Next
For q = 2 To 100
For s = -10 To 10
vs = -999
For s1 = -10 To 10
s2 = s - s1
g = 0
If s2 > 10 Then g = 1
If s2 > 10 Then s2 = 10
If s2 < -10 Then g = 1
If s2 < -10 Then s2 = -10
v1 = u(q, s1) + v(q - 1, s2)
If g = 1 Then v1 = -999
If v1 > vs Then vs = v1
Next
v(q, s) = vs
Next
Next
For s = -10 To 10
Debug.Print v(100, s)
Next
End Sub
最終更新:2009年08月03日 22:27