马尔可夫链求转移矩阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Option Explicit
Sub getMatrix(rng As Range)
Dim a(), d(), f(), g(), m(), k(), arr(1 To 3)
Dim b As Integer, c As Integer, i As Integer, j As Integer
Dim h
b = rng.Count
a = rng
ReDim Preserve a(1 To b, 1 To 2)
For i = 1 To UBound(a, 1)
a(i, 2) = standard(a(i, 1))
Next
d = Application.Index(a, , 2)
Dim e(1 To 3, 1 To 3)
For i = 1 To 3
For j = 1 To 3
e(i, j) = getStatusCount(d, i, j)
Next
Next
f = Application.WorksheetFunction.Transpose(e)
For i = 1 To 3
g = Application.Index(f, i)
arr(i) = Application.Sum(g)
Next
For j = 1 To 3
For i = 1 To 3
f(i, j) = f(i, j) / arr(j)
Next
Next
m = Application.WorksheetFunction.Transpose(f)
k = mmultn(m, 3)
Range("c1").Resize(3, 3) = k
End Sub
Function getStatusCount(ByRef m, ByVal x As Integer, ByVal y As Integer)
Dim i As Integer
getStatusCount = 0
For i = 1 To UBound(m) - 1
If m(i, 1) = x And m(i + 1, 1) = y Then getStatusCount = getStatusCount + 1
Next
End Function
Function standard(ByVal i As Integer) As Integer
Select Case i
Case Is < 100
standard = 1
Case Is > 150
standard = 3
Case Else
standard = 2
End Select
End Function
Function mmultn(a As Variant, n As Integer) As Variant
Dim temp As Variant
Dim i As Integer
temp = a
For i = 1 To n - 1
a = Application.WorksheetFunction.MMult(a, temp)
Next i
mmultn = a
End Function