求解左乘和右乘的线性系统中的向量

计算科学 线性代数 线性求解器 线性系统
2021-12-06 08:55:26

我有一个线性系统,我有 2 个矩阵,AB, 和 2 个向量,vc,我需要求解向量x.An×n,Bn×n×n, 和向量v,c, 和x, 都是n×1. 我需要解决x,这很复杂,您将在下面通过正确的乘法看到。实际系统是:

Ax+Bxv=c

目前,我不知道如何进行,因为矩阵的维度不同。我很难获得矩阵B很容易,并且更容易和更便宜地计算矩阵向量积,如Bc, 为求解过程。

编辑:在我说之前A曾是n×n×nB曾是n×n,我把它换了。

3个回答

你的第二个任期是线性的x, 所以可以改写为Cx在哪里C是一个合适的n×n矩阵。你只需要弄清楚它的条目Cij是:为此,您需要一些索引操作,但这应该是线性代数中的一个简单练习。

或者,您可以使用(更好的)符号B(xv)第二个任期(或B(vx),取决于您的“产品”是如何定义的),并使用 Kronecker 产品属性进行操作(xv)=(Iv)(x1)=(Iv)x.

根据 Federico 的回答,我想你可以很容易地弄清楚什么是Cij通过显式编写第二项(Bxv) 作为:

(Bx)ij=α=1nBijαxα

(Bxv)i=β=1n(Bx)iβvβ

(Bxv)i=β=1nα=1nBiβαxαvβ=α=1nβ=1nBiβαvβxα

但:

(Cx)i=α=1nCiαxα

所以:

Ciα=β=1nBiβαvβ

所以最后主方程写成:

Ax+Cx=c

或者:

(A+C)x=c

现在可以通过使用直接或迭代方法轻松求解上述线性方程。

所以我从 Federico Poloni 和 Alone Programmer 那里得到了两个很好的答案,但有一个问题是他们的所有解决方案都需要访问完整的 B 矩阵。因为在我的例子中,B 矩阵是增强的 hessian 矩阵,或者是 BDF1-PTC 非线性求解器中使用的增强 Jacobian 矩阵的导数,所以这不是一个简单的矩阵,我尝试使用 frechet 导数来获得增强的 Hessian 乘积比增广粗麻布本身。因此,我试图找到一种使用嵌套线性求解的方法,这样我就不必计算完整的 Hessian 矩阵,而是依赖我代码中现有的求解器技术。

解决这个问题的一种方法是使用像 GS 或 Jacobi 这样的平滑器并求解系统:

Dx=cBxvAx
其中 D 仅是 A 矩阵的对角线。我选择不采用这种方法,因为 GS 没有很好的求解特性。相反,我选择将我的 FGMRES 与 GS 预处理一起使用,如下所示:

  1. x0=0
  2. 定义r=cBxivAxi
  3. 调用FMGRES解决Axi+1=r
  4. 定义r2=cBxi+1vAxi+1
  5. 如果r2<ϵ停止,否则 i++ 并转到 2

此迭代大约需要 3 次 GMRES 求解才能完全收敛问题ϵ=1e5和 6 为ϵ=1e15. 需要注意的一件事是,早期的猜测不需要太多的精确度。因此,一个理想的实现将在早期使用非常低的收敛 GMRES 调用(或者可能最初只使用一些平滑步骤),然后最终使用更强大的 FGMRES 重新启动和最终迭代的许多向量。