求解线性系统
许多计算涉及求解线性方程组. 在许多情形下,明确写出各个方程,然后使用 Solve 求解是方便的.
然而对某些情形,用户会偏好把线性方程组化为矩阵方程,然后使用矩阵运算求解. 当方程组是一般规则系统的一部分,且事先不知道包含多少变量时,此方法是很有用的.
注意,如果方程系统是稀疏的,即相应的矩阵
的大多数元素是零,那么最好是把矩阵表示为一个 SparseArray 对象. 就像在 "稀疏数组:线性代数" 中讨论的,能够使用 CoefficientArrays 来把符号方程转化成 SparseArray 对象. 所有这里描述的函数不但对普通的矩阵适用,而且也对 SparseArray 对象适用.
| LinearSolve[m,b] | 给出矩阵方程 |
| NullSpace[m] | 一列线性独立的向量,它们的线性组合包括矩阵方程 |
| MatrixRank[m] | |
| RowReduce[m] | 通过行的线性组合得到的 |
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
| In[4]:= |
| Out[4]= |
| In[5]:= |
| Out[5]= |
| In[6]:= |
| Out[6]= |
如果方阵
的行列式不为零,那么对任意
总能求出矩阵方程
的唯一解. 但当
的行列式为零时,对特定的
可能没有向量
,或者有无穷多个向量
满足
. 这在
中体现的线性方程不是独立的时候会出现.
当
的行列式为零时,总能求出非零向量
满足
. 满足此方程的向量
的集合构成矩阵
的零空间或核. 任何这些向量都能被表示为某组基向量的线性组合,基向量可以使用 NullSpace[m] 来获得.
| In[7]:= |
| Out[7]= |
| In[8]:= |
| Out[8]= |
| In[10]:= |
| Out[10]= |
| In[11]:= |
| Out[11]= |
| In[12]:= |
| Out[12]= |
NullSpace 和 MatrixRank 必须决定矩阵元素的特定组合是否为零. 对于近似数值矩阵,能够用 Tolerance 选项来指定在和零多近时才可以被认为是足够近的. 对于精确的符号矩阵,有时需要指定类似ZeroTest->(FullSimplify[#]==0&) 的事项来强制进行更多的工作做以检验符号表达式是否为零.
| In[13]:= |
| Out[13]= |
| In[14]:= |
| Out[14]= |
| In[15]:= |
| Out[15]= |
LinearSolve 和 NullSpace 的一个重要特点是它们对方阵和长方阵都有效.
当用矩阵方程形式
表示线性方程组时,
的列数就是变量的个数,其行数是方程的个数. 方程有多种情形.
欠定 | 方程的个数少于变量的个数;可能无解,也可能有多解 |
超定 | 方程的个数多于变量的个数;可能有解,也可能无解 |
非奇异 | 独立方程的个数等于变量的个数,行列式不为零;存在唯一解 |
相容 | 至少存在一个解 |
不相容 | 不存在解 |
| In[17]:= |
| Out[17]= |
| In[18]:= |
| Out[18]= |
| In[19]:= |
| Out[19]= |
| In[20]:= |
| Out[20]= |
独立方程的个数是矩阵的秩 MatrixRank[m]. 多余方程的数目是 Length[NullSpace[m]]. 注意,这两个量之和总是等于 m 的列数.
| LinearSolve[m] | 产生一个求解形如 |
产生 LinearSolveFunction 对象.
在某些应用中,会希望多次求解形式为
的方程组,它们具有相同的
,但不同的
. 在 Mathematica 中能这样有效地做,那就是使用 LinearSolve[m] 来产生一个单一的 LinearSolveFunction,它能应用于任意多的向量.
| In[21]:= |
| Out[21]= |
| In[22]:= |
| Out[22]= |
| In[23]:= |
| Out[23]= |
| In[24]:= |
| Out[24]= |
| LeastSquares[m,b] | 给出一个最小二乘问题 |
| In[26]:= |
| Out[26]= |
