アットウィキロゴ

VB DSGE REN PRO

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