C# 磨削次数的优化
长话短说,我必须在迭代过程中求解20..200个块三对角线性系统。系统的大小为50..100块,每个块为50..100 x 50..100。我将在这里写下我对此事的看法,我请你们分享你们对我想法的看法,因为我可能在某一方面错了 为了解这些方程,我使用了Thomas算法的矩阵版本。它完全像标量1,除了方程中的标量系数之外,我有矩阵(也就是说,代替“a_i x_{i-1}+b_i x_i+c_i x_{i+1}=f_i”,其中a_i,b_i,c_i-矩阵;f_i和x_i是向量 该算法的渐近复杂度为O(N*M^3),其中N是以块为单位的整体矩阵的大小,M是每个块的大小 现在我的瓶颈是反演运算。在嵌套循环的深处,我必须计算很多类似于“(c_i-a_i*alpha_i)^-1”的反演,其中alpha_i是一个稠密的MxM矩阵。我使用Gauss-Jordan算法,使用额外的内存(我以后在程序中必须使用)和O(M^3)运算 为了找到关于如何优化反演操作的信息,我只找到了关于“规范地”求解AX=B系统的线程,即X=A^-1B,并建议使用LU分解来代替它。遗憾的是,由于我的反演是Thomas算法的一部分,如果我诉诸LU分解,我将不得不对M*NxM*N矩阵进行求解,这将提高效率求解线性系统的复杂度增加了N^2到O(N^3*M^3)。这会降低2500..10000倍,这是非常糟糕的 近似或迭代反演也不在范围之内,因为精确反演的最微小残余将快速累积,并导致全局迭代过程爆发 我用parallel.For()并行计算,分别求解20..200个系统 目前,要解决20个N、M=50的此类系统,平均需要872ms(i7-3630QM,2.4Ghz,4个核心(8个具有超线程) 最后,问题来了C# 磨削次数的优化,c#,math,optimization,micro-optimization,C#,Math,Optimization,Micro Optimization,长话短说,我必须在迭代过程中求解20..200个块三对角线性系统。系统的大小为50..100块,每个块为50..100 x 50..100。我将在这里写下我对此事的看法,我请你们分享你们对我想法的看法,因为我可能在某一方面错了 为了解这些方程,我使用了Thomas算法的矩阵版本。它完全像标量1,除了方程中的标量系数之外,我有矩阵(也就是说,代替“a_i x_{i-1}+b_i x_i+c_i x_{i+1}=f_i”,其中a_i,b_i,c_i-矩阵;f_i和x_i是向量 该算法的渐近复杂度为O
我已将标签从标题中删除。您可以阅读标题中不需要标签的原因。