Function ddalpha(n As Single, b1 As Single, alpha) As Single
Dim d1 As Single
d1 = 2 * alpha(n, 3)
For number = 4 To 10
d1 = d1 + (number - 1) * (number - 2) * alpha(n, number) * b1 ^ (number - 3)
Next
ddalpha = d1
End Function
Function dalpha(n As Single, b1 As Single, alpha) As Single
Dim d1 As Single
d1 = alpha(n, 2)
For number = 3 To 10
d1 = d1 + (number - 1) * alpha(n, number) * b1 ^ (number - 2)
Next
dalpha = d1
End Function
Function seekalpha(number As Single, a, b) As Single
Dim x(1 To 10, 1 To 10) As Single
Dim y(1 To 10) As Single
Dim alpha(1 To 10) As Single
Dim x1 As Single
Dim m1 As Single
Dim m2 As Single
Dim t As Single
Dim z As Single
For m1 = 1 To 10
For m2 = 1 To 10
x1 = 0
For s = 1 To 100
x1 = x1 + a(m1, s) * a(m2, s)
Next
x(m1, m2) = x1
Next
Next
For m = 1 To 10
x1 = 0
For s = 1 To 100
x1 = x1 + a(m, s) * b(s)
Next
y(m) = x1
Next
For t = 1 To 10
For m = 1 To 10
z = x(m, t) / x(t, t)
If m = t Then z = 0
For n = 1 To 10
x(m, n) = x(m, n) - z * x(t, n)
Next
y(m) = y(m) - z * y(t)
Next
Next
seekalpha = y(number) / x(number, number)
End Function
Function seeku(th As Single, b1 As Single) As Single
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 h As Single
Dim lp As Single
Dim t1 As Single
Dim t2 As Single
Dim e As Single
Dim s As Single
e = 10 ^ (-5)
h = 0.1
ls = (b1 + 0.5) / th
cs = th * ls - b1
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 * l1 - b1
u1 = Log(c1) + Log(1 - l1)
l2 = ls - h
If l2 < 0.01 Then l2 = ls
c2 = th * l2 - b1
If c2 < 0.01 Then l2 = ls
c2 = th * l2 - b1
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
seeku = us
End Function
Private Sub Command1_Click()
Dim u(1 To 100) As Single
Dim a(1 To 10, 1 To 100) As Single
Dim b(1 To 100) As Single
Dim number As Single
Dim alpha(1 To 2, 1 To 10) As Single
Dim th As Single
Dim x1 As Single
th = 1
For s = 1 To 100
u(s) = seeku(th, 0.001 * s)
Next
For s = 1 To 100
b(s) = u(s)
a(1, s) = 1
For m = 2 To 10
a(m, s) = (0.001 * s) ^ (m - 1)
Next
Next
For number = 1 To 10
alpha(1, number) = seekalpha(number, a, b)
Next
th = 1.05
For s = 1 To 100
u(s) = seeku(th, 0.001 * s)
Next
For s = 1 To 100
b(s) = u(s)
a(1, s) = 1
For m = 2 To 10
a(m, s) = (0.001 * s) ^ (m - 1)
Next
Next
For number = 1 To 10
alpha(2, number) = seekalpha(number, a, b)
Next
x1 = 0.1
For t = 1 To 50
x1 = x1 - (dalpha(1, x1, alpha) - dalpha(2, 0.1 - x1, alpha)) / (ddalpha(1, x1, alpha) - ddalpha(2, 0.1 - x1, alpha))
Debug.Print x1
Next
End Sub
最終更新:2009年08月05日 12:31