如何计算第n个NLBGS迭代的迭代矩阵

问题描述 投票:1回答:1

我想知道在OpenMDAO中是否存在直接计算第n个线性块高斯Seidel迭代的迭代矩阵的方法?

谢谢

python-3.x openmdao
1个回答
0
投票

如果我对您的理解正确,您是指Gauss Seidel算法的矩阵形式,其中您将Ax = b分成A对角(D),Lower(L)和Upper(U)部分,然后使用这些部分来计算下一个迭代。具体来说,您计算[D-L] ^-1。我相信这就是您所说的“迭代矩阵”(我不熟悉此术语,但是基于algorithm,我很愿意做出有根据的猜测)。

此算法公式对于思考和实现该算法非常有用,但是OpenMDAO采用了不同的方法。 OpenMDAO中实现的LBGS算法被设置为以无矩阵方式工作。这意味着它仅与线性运算符方法solve_linearapply_linear交互,而从不显式地组装A矩阵。因此,没有机会将A拆分为D,L,U。

根据您构建模型的方式,您可能需要或可能根本不存在A矩阵,因为OpenMDAO能够在完全无矩阵的环境中工作。但是,如果组件的[[all使用compute_partialslinearize方法提供偏导数,则内存中确实存在A矩阵所需的数据。

您将需要对其进行挖掘,并且具有讽刺意味的是,查看如何执行此操作的最佳位置是

direct solver

,它实际上需要形成矩阵以计算因式分解。 [此外,在该代码中,您会看到a function可以迭代调用线性运算符以构造一个密集矩阵,即使基础组件不直接提供其部分。请注意,这种组装矩阵的方法

极慢

,不建议在常规操作中使用。
© www.soinside.com 2019 - 2024. All rights reserved.