Public Class Form1
Function f(ByVal k1 As Single, ByVal l1 As Single) As Single
Dim a As Single
a = 0.33
f = k1 ^ a * l1 ^ (1 - a)
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim beta As Single
Dim ks As Single
Dim a As Single
Dim h As Single
Dim k(0 To 100) As Single
Dim cx(0 To 10, 0 To 100) As Single
Dim lx(0 To 10, 0 To 100) As Single
Dim lp(0 To 10, 0 To 100) As Single
Dim kp(0 To 10, 0 To 100) As Single
Dim cp(0 To 10, 0 To 100) As Single
Dim n1 As Single
Dim n2 As Single
Dim n3 As Single
Dim s As Single
Dim ls As Single
Dim p As Single
Dim th(0 To 10) As Single
Dim px(0 To 10, 0 To 10, 0 To 100) As Single
Dim ps(0 To 10, 0 To 10, 0 To 100) As Single
Dim barm(0 To 10) As Single
Dim e2 As Single
Dim m As Single
Dim n As Single
Dim s1 As Single
Dim t As Single
Dim e1 As Single
Dim w1 As Single
Dim s2 As Single
Dim s3 As Single
Dim p3 As Single
Dim k1 As Single
Dim c1 As Single
Dim l1 As Single
Dim r1 As Single
Dim uc As Single
Dim pp As Single
Dim i1 As Single
e2 = 10 ^ (-5)
For m = 1 To 10
th(m) = 0.95 + 0.01 * m
Next
beta = 0.95
a = 0.33
ls = (1 - a) / ((1 - a) + 1)
ks = ((1 / beta - 1) / a) ^ (1 / (a - 1))
ks = ks * ls
h = 2 * ks / 100
For n = 1 To 100
k(n) = n * h
For m = 1 To 10
kp(m, n) = k(n)
cx(m, n) = th(m) * f(k(n), ls)
lx(m, n) = ls
Next
Next
p = 0
s1 = 0
Do Until s1 > 100
For n = 10 To 90
For m = 1 To 10
k1 = k(n) + th(m) * f(k(n), lx(m, n)) - cx(m, n)
n1 = k1 / h
n2 = Int(n1)
n3 = n2 + 1
uc = 0
For t = 1 To 10
c1 = cx(t, n2) + (n1 - n2) * (cx(t, n3) - cx(t, n2))
l1 = lx(t, n2) + (n1 - n2) * (lx(t, n3) - lx(t, n2))
r1 = th(t) * a * k1 ^ (a - 1) * l1 ^ (1 - a)
uc = uc + (beta * (1 + r1)) / c1
Next
cp(m, n) = 1 / (0.1 * uc)
w1 = th(m) * (1 - a) * k(n) ^ a * lx(m, n) ^ (-a)
lp(m, n) = 1 - cx(m, n) / w1
Next
Next
e1 = 0
For n = 10 To 90
For m = 1 To 10
e1 = e1 + (cx(m, n) - cp(m, n)) ^ 2 + (lx(m, n) - lp(m, n)) ^ 2
Next
Next
If e1 < e2 Then s1 = 1000
For n = 10 To 90
For m = 1 To 10
cx(m, n) = cp(m, n)
lx(m, n) = lp(m, n)
Next
Next
s1 = s1 + 1
Loop
Dim kt(0 To 100) As Single
Dim ct(0 To 100) As Single
Dim lt(0 To 100) As Single
Dim pt(0 To 100) As Single
Dim m1 As Single
Dim m2 As Single
Dim m3 As Single
Dim c2 As Single
Dim c3 As Single
Dim l2 As Single
Dim l3 As Single
Dim t1 As Single
kt(0) = k(50)
For t = 0 To 99
Randomize()
m1 = 10 * Rnd()
m2 = Int(m1)
If m2 < 1 Then m2 = 1
m3 = m2 + 1
n1 = kt(t) / h
n2 = Int(n1)
n3 = n2 + 1
c2 = cx(m2, n2) + (n1 - n2) * (cx(m2, n3) - cx(m2, n2))
c3 = cx(m3, n2) + (n1 - n2) * (cx(m3, n3) - cx(m3, n2))
ct(t) = c2 + (m1 - m2) * (c3 - c2)
l2 = lx(m2, n2) + (n1 - n2) * (lx(m2, n3) - lx(m2, n2))
l3 = lx(m3, n2) + (n1 - n2) * (lx(m3, n3) - lx(m3, n2))
lt(t) = l2 + (m1 - m2) * (l3 - l2)
t1 = th(m2) + (m1 - m2) * (th(m3) - th(m2))
kt(t + 1) = kt(t) + t1 * f(kt(t), lt(t)) - ct(t)
Next
Dim minc As Single
Dim maxc As Single
minc = ct(0)
maxc = ct(0)
For t = 1 To 99
If ct(t) < minc Then minc = ct(t)
If ct(t) > maxc Then maxc = ct(t)
Next
Dim g As Graphics = PictureBox1.CreateGraphics()
Dim x1 As Single
Dim x2 As Single
Dim y1 As Single
Dim y2 As Single
For t = 0 To 98
x1 = 3 * t
x2 = 3 * (t + 1)
y1 = 100 - 100 * (ct(t) - minc) / (maxc - minc)
y2 = 100 - 100 * (ct(t + 1) - minc) / (maxc - minc)
g.DrawLine(Pens.Red, x1, y1, x2, y2)
Next
g.DrawLine(Pens.Black, 0, 100, 300, 100)
g.DrawLine(Pens.Black, 0, 0, 0, 200)
End Sub
End Class
最終更新:2009年12月05日 04:27