我想知道在OpenMDAO中是否存在直接计算第n个线性块高斯Seidel迭代的迭代矩阵的方法?
谢谢
如果我对您的理解正确,您是指Gauss Seidel算法的矩阵形式,其中您将Ax = b分成A对角(D),Lower(L)和Upper(U)部分,然后使用这些部分来计算下一个迭代。具体来说,您计算[D-L] ^-1。我相信这就是您所说的“迭代矩阵”(我不熟悉此术语,但是基于algorithm,我很愿意做出有根据的猜测)。
此算法公式对于思考和实现该算法非常有用,但是OpenMDAO采用了不同的方法。 OpenMDAO中实现的LBGS算法被设置为以无矩阵方式工作。这意味着它仅与线性运算符方法solve_linear
和apply_linear
交互,而从不显式地组装A矩阵。因此,没有机会将A拆分为D,L,U。
根据您构建模型的方式,您可能需要或可能根本不存在A矩阵,因为OpenMDAO能够在完全无矩阵的环境中工作。但是,如果组件的[[all使用compute_partials
或linearize
方法提供偏导数,则内存中确实存在A矩阵所需的数据。
极慢
,不建议在常规操作中使用。