'********************************************************************************* '**************************Cholesky factorization********************************* '********************************************************************************* Function Cholesky(Mat As Range) Dim A, L() As Double, s As Double A = Mat n = Mat.Rows.Count M = Mat.Columns.Count If n <> M Then Cholesky = "?" Exit Function End If ReDim L(1 To n, 1 To n) For j = 1 To n s = 0 For k = 1 To j - 1 s = s + L(j, k) ^ 2 Next k L(j, j) = A(j, j) - s If L(j, j) <= 0 Then Exit For L(j, j) = Sqr(L(j, j)) For i = j + 1 To n s = 0 For k = 1 To j - 1 s = s + L(i, k) * L(j, k) Next k L(i, j) = (A(i, j) - s) / L(j, j) Next i Next j Cholesky = L End Function