我已经编写了这个函数,我正在尝试使用Parallel.For
或其他方式加速它。但是,当我用 a 替换其中一个循环时Parallel.For
,它会给出错误的结果。
Public Function InverseFromUpperTriangular(U As Matrix) As Matrix
Dim n As Integer = U.RowCount
Dim Y As Matrix = MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(n, n)
Dim S As Matrix = MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(n, n)
For j = n - 1 To 0 Step -1
S(j, j) = 1.0 / U(j, j)
For i = j To 0 Step -1
Y(i, j) = (S(i, j) - U.Row(i).SubVector(i, n - i) * Y.Column(j).SubVector(i, n - i)) / U(i, i)
Y(j, i) = Y(i, j)
Next
Next
Return Y
End Function
编辑
这是我的功能Parallel.For
Public Function InverseFromUpperTriangular(U As Matrix) As Matrix
Dim n As Integer = U.RowCount
Dim Y As Matrix = MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(n, n)
Dim S As Matrix = MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(n, n)
Parallel.For(0, n, Sub(ii)
Dim j = n - 1 - ii
S(j, j) = 1.0 / U(j, j)
For i = j To 0 Step -1
Y(i, j) = (S(i, j) - U.Row(i).SubVector(i, n - i) * Y.Column(j).SubVector(i, n - i)) / U(i, i)
Y(j, i) = Y(i, j)
Next
End Sub)
Return Y
End Function