经过2天的完善,已经将MathMatrix类封装的比较适合阅读。其中可能还存在着大量的需要优化的地方,不过这些并不重要,即便不进行优化,也是可以正常运行的。
优化意味着能够让程序更快的运行,尤其是:
1、本身就是一个无需分块的矩阵,当前的做法是:依然会进行分块。这样做的好处是令程序的逻辑完全统一,坏处自然就是内存资源的浪费和CPU算力的浪费;
2、对于巨大的矩阵,分块、判断奇异性等都将是耗时的,需要更高级的方法去进行这些操作才好;
还有几个问题:
1、现在矩阵分块之后的子块是否完全正确?
2、奇异性判断里面用到的小数,是否合理?
3、当遇到奇异矩阵之后,会尝试一次“解奇异”,这个操作还没有实现,因而还无法真正完成电路求解计算。
Update 2024.12.23
今天又对 MathMatrixClass 进行了一遍重构,上面提到的若干问题并没有解决。今天重构的目的是:在外部构建出矩阵之后,传递进入 MathMatrixClass 之后,便都是以指针形式存储的,而进入 MathMatrixClass 之后又会被分解成多个小问题,依然是以指针传递。
这样在任何一个小问题内,方程得到解答的时候,只需要小问题内部自己对自身的变量进行更新,外部就可以得到更新了——因为内外用到的是一个相同的内存空间。
对于今天的这个重构,也还留有一些“尾巴”没有完成:
1、对于 递归 调用那里,我还是额外的创建了临时变量,这个地方其实也无需额外创建临时变量。
2、另外就是对于LU求解完成之后的结果写回,现在是在一个方法中;还有一个大问题分解后的小问题调用,也是在一个方法中。这两个地方其实应该写的啰嗦一些,分成两个方法依次调用,才能令程序的可读性更好一些。