Python 3.x 如何计算第n次NLBGS迭代的迭代矩阵

Python 3.x 如何计算第n次NLBGS迭代的迭代矩阵,python-3.x,openmdao,Python 3.x,Openmdao,我想知道在OpenMDAO中是否有一种直接计算第n个线性块Gauss-Seidel迭代的迭代矩阵的方法 谢谢如果我理解正确,您指的是高斯-赛德尔算法的矩阵形式,其中取Ax=b,将A分解为对角线(D)、下(L)和上(U)部分,然后使用这些部分计算下一次迭代。 具体来说,您计算[D-L]^-1。我相信这就是你们所说的“迭代矩阵”(我不熟悉这个术语,但基于这个假设,我很乐意做出一个有根据的猜测) 该算法的这种形式值得思考,也是实现它的一种简单方法,但OpenMDAO采用了不同的方法。在OpenMDAO

我想知道在OpenMDAO中是否有一种直接计算第n个线性块Gauss-Seidel迭代的迭代矩阵的方法


谢谢

如果我理解正确,您指的是高斯-赛德尔算法的矩阵形式,其中取Ax=b,将A分解为对角线(D)、下(L)和上(U)部分,然后使用这些部分计算下一次迭代。 具体来说,您计算[D-L]^-1。我相信这就是你们所说的“迭代矩阵”(我不熟悉这个术语,但基于这个假设,我很乐意做出一个有根据的猜测)

该算法的这种形式值得思考,也是实现它的一种简单方法,但OpenMDAO采用了不同的方法。在OpenMDAO中实现的LBGS算法设置为以无矩阵方式工作。这意味着它只与线性算子方法
solve\u linear
apply\u linear
交互,而从不显式地组合矩阵。因此,没有机会将A拆分为D、L、U

根据您构建模型的方式,您需要的矩阵可能在那里,也可能根本不在那里,因为OpenMDAO能够在完全没有矩阵的上下文中工作。但是,如果所有组件都使用
计算部分
线性化
方法来提供偏导数,则A矩阵所需的数据确实存在于内存中

你必须仔细研究一下,具有讽刺意味的是,最好的方法是在中,它实际上需要形成矩阵来计算因式分解


此外,在代码中,您将看到可以迭代调用线性运算符来构造密集矩阵,即使底层组件不直接提供其部分。请注意,这种组装矩阵的方法非常慢,不建议用于正常操作

如果我理解正确,您指的是高斯-赛德尔算法的矩阵形式,其中取Ax=b,将A分解为对角线(D)、下(L)和上(U)部分,然后使用这些部分计算下一次迭代。 具体来说,您计算[D-L]^-1。我相信这就是你们所说的“迭代矩阵”(我不熟悉这个术语,但基于这个假设,我很乐意做出一个有根据的猜测)

该算法的这种形式值得思考,也是实现它的一种简单方法,但OpenMDAO采用了不同的方法。在OpenMDAO中实现的LBGS算法设置为以无矩阵方式工作。这意味着它只与线性算子方法
solve\u linear
apply\u linear
交互,而从不显式地组合矩阵。因此,没有机会将A拆分为D、L、U

根据您构建模型的方式,您需要的矩阵可能在那里,也可能根本不在那里,因为OpenMDAO能够在完全没有矩阵的上下文中工作。但是,如果所有组件都使用
计算部分
线性化
方法来提供偏导数,则A矩阵所需的数据确实存在于内存中

你必须仔细研究一下,具有讽刺意味的是,最好的方法是在中,它实际上需要形成矩阵来计算因式分解


此外,在代码中,您将看到可以迭代调用线性运算符来构造密集矩阵,即使底层组件不直接提供其部分。请注意,这种组装矩阵的方法非常慢,不建议用于正常操作

你的意思是想问一下LinearBlockGausseidel方法吗?该算法的非线性版本没有迭代矩阵。是的,我指的是线性方法。你的意思是问线性块高斯半方法吗?算法的非线性版本没有迭代矩阵。是的,我指的是线性方法