计算科学与工程 学习笔记 Au=b

这里是MIT 18.085 computational science and engineering的学习笔记

LEC 3 介绍了解方程 $\mathbf{A } \cdot \vec{u} = \vec{b}$中的unknowns $\vec{u}$的三种方法:

  1. Matlab中的backlash

  2. 针对sparse matrix, reorder rows, and do elimination. 变成对角阵或者三角阵之后,就变得简单了。

  3. 针对大规模的对称矩阵,使用conjugate gradient方法,也称作multigrid(多重网格),incomplete LU。 不了解

下面重点讲Matlab中的backlash算力: 实际问题中,经常会遇到需要解 $\mathbf{A } \cdot \vec{u} = \vec{b}$ $\mathbf{A } \cdot \vec{u} = \vec{c}$,甚至更多的情况,例如设计问题中,尝试给不同的设计参数后的系统响应如何?

  • 如果使用消元法,意味着每一个方程都需要做一遍消元,效率太低了

  • 如果使用 $\vec{u}=\mathbf{A ^{-1} }\cdot \vec{b}$的方法,会有以下问题

    1. $\mathbf{A ^{-1} }$不容易获得,例如当A的size是矩形的时候

    2. 可能A本身是稀疏矩阵或者对角阵,A的逆矩阵却是dense

    3. A的逆矩阵是dense的时候, $\mathbf{A ^{-1} }\cdot \vec{b}$的乘法操作takes long

  • Matlab的实现方式是: 将 $\mathbf{A } \cdot \vec{u} = \vec{b}$右侧的 $\vec{b}$看作是系统的输入/激励,未知量 $\vec{u}$看作是系统的响应。由于A矩阵是constant,意味着系统是线性时不变的。假设我们可以获得每个独立impulse输入对应的响应,当输入是多个impulse的线性组合,那么 $\vec{u}$也是每个独立impulse产生的响应的线性组合。 假设 $\mathbf{A }$是一个3x3矩阵,对应有3个独立的impulses,分别是 $\vec{b_1} = [1 , 0, 0]^T$ $\vec{b_2} = [0 , 1, 0]^T$ $\vec{b_3} = [0, 0, 1]^T$,它们对应的系统响应为 $\vec{u_1}$ $\vec{u_2}$ $\vec{u_3}$. 由于 $\vec{b_1}$ $\vec{b_2}$ $\vec{b_3}$组成的block matrix 是单位矩阵,那么 $\vec{u_1}$ $\vec{u_2}$ $\vec{u_3}$组成的block matrix 应当是 $\mathbf{A ^{-1}}$. 如何获得 $\mathbf{A ^{-1}}$?对block matrix [A, I]做消元,当A矩阵消元变成I的时候,对应地,右侧由I变成 $\mathbf{A ^{-1}}$

No comment found.

Add a comment

You must login to add a comment.

Site Maintenance

Our platform is currently undergoing maintenance. We apologize for any inconvenience. Please check back later.