避免矩阵求解器中的乘法零

时间:2015-09-22 18:04:17

标签: vba

有没有办法避免将零乘以内部循环的一部分?作为一个可笑的测试,我尝试了一个条件来阻止乘法,如果它遇到零,当然这比较慢,然后只是做乘法。我的偏好是保持LU矩阵完整,而不是重新排列以使零消失(稀疏)。在这种情况下,语言在转换为VB.net之前是VBA。

    For k = 1 To i - 1
        If LU(j, k) <> 0 and LU(k, i) <> 0 Then temp = temp - LU(j, k) * LU(k, i) 
    Next k

感谢。

2 个答案:

答案 0 :(得分:0)

如果要保留矩阵结构,则无法避免乘以零。

此外,VBA不支持稀疏矩阵,因此您必须为稀疏矩阵编写自己的类:我们的想法是,不是存储整个矩阵,而是存储索引/值对。

稀疏矩阵类将包括以下方法:

  • 使用索引/值形式的给定值创建矩阵。
  • 从数组形式的给定值创建稀疏矩阵。
  • 乘以两个稀疏矩阵(包括特殊情况稀疏矩阵乘稀疏向量)

答案 1 :(得分:0)

Macroman,我的意思是如果遇到零加速解决方案,则跳过计算。感谢。

Titus已经为VBA编写了一个完全旋转的LUD求解器,它可以(慢慢地)解决稀疏矩阵。我只是想看看将求解器转换为稀疏技术是否可行。内存不是问题,因此倾向于避免使用索引/值存储技术,所以我只是想看看是否有一种快速方法可以使求解器跳过零来加速它。感谢。