求解线性系统

许多计算涉及求解线性方程组. 在许多情形下,明确写出各个方程,然后使用 Solve 求解是方便的.

然而对某些情形,用户会偏好把线性方程组化为矩阵方程,然后使用矩阵运算求解. 当方程组是一般规则系统的一部分,且事先不知道包含多少变量时,此方法是很有用的.

线性方程组可以表示为矩阵形式 ,其中 是由变量组成的向量.

注意,如果方程系统是稀疏的,即相应的矩阵 的大多数元素是零,那么最好是把矩阵表示为一个 SparseArray 对象. 就像在 "稀疏数组:线性代数" 中讨论的,能够使用 CoefficientArrays 来把符号方程转化成 SparseArray 对象. 所有这里描述的函数不但对普通的矩阵适用,而且也对 SparseArray 对象适用.

LinearSolve[m,b]给出矩阵方程 的解的向量
NullSpace[m]一列线性独立的向量,它们的线性组合包括矩阵方程 的所有解
MatrixRank[m] 的线性独立的行数或列数
RowReduce[m]通过行的线性组合得到的 的简化形式

线性方程组的求解和分析.

这是一个 2x2 矩阵.
In[1]:=
Click for copyable input
Out[1]=
这里给出两个线性方程.
In[2]:=
Click for copyable input
Out[2]=
可以直接用 Solve 解此方程组.
In[3]:=
Click for copyable input
Out[3]=
也可以使用 LinearSolve 得到解向量. 这与 Solve 得到的解是等价的.
In[4]:=
Click for copyable input
Out[4]=
另一方法是求出 的逆,然后与 相乘得到解. 这不如用 LinearSolve 有效.
In[5]:=
Click for copyable input
Out[5]=
RowReduce 进行一种形式的高斯消元,也可以用来解方程组.
In[6]:=
Click for copyable input
Out[6]=

如果方阵 的行列式不为零,那么对任意 总能求出矩阵方程 的唯一解. 但当 的行列式为零时,对特定的 可能没有向量 ,或者有无穷多个向量 满足 . 这在 中体现的线性方程不是独立的时候会出现.

的行列式为零时,总能求出非零向量 满足 . 满足此方程的向量 的集合构成矩阵 的零空间或核. 任何这些向量都能被表示为某组基向量的线性组合,基向量可以使用 NullSpace[m] 来获得.

这是一个简单矩阵,相应于两个相同的线性方程.
In[7]:=
Click for copyable input
Out[7]=
该矩阵的行列式为零.
In[8]:=
Click for copyable input
Out[8]=
此时,LinearSolve 不能求解方程 .
In[9]:=
Click for copyable input
Out[9]=
的零空间具有单一基向量.
In[10]:=
Click for copyable input
Out[10]=
乘零空间的基向量得零向量.
In[11]:=
Click for copyable input
Out[11]=
中只有 个线性独立的行.
In[12]:=
Click for copyable input
Out[12]=

NullSpaceMatrixRank 必须决定矩阵元素的特定组合是否为零. 对于近似数值矩阵,能够用 Tolerance 选项来指定在和零多近时才可以被认为是足够近的. 对于精确的符号矩阵,有时需要指定类似ZeroTest->(FullSimplify[#]==0&) 的事项来强制进行更多的工作做以检验符号表达式是否为零.

这是一个其行列式为零的简单符号矩阵.
In[13]:=
Click for copyable input
Out[13]=
的零空间的基包含两个向量.
In[14]:=
Click for copyable input
Out[14]=
乘基向量的线性组合得零.
In[15]:=
Click for copyable input
Out[15]=

LinearSolveNullSpace 的一个重要特点是它们对方阵和长方阵都有效.

当用矩阵方程形式 表示线性方程组时, 的列数就是变量的个数,其行数是方程的个数. 方程有多种情形.

欠定
方程的个数少于变量的个数;可能无解,也可能有多解
超定
方程的个数多于变量的个数;可能有解,也可能无解
非奇异
独立方程的个数等于变量的个数,行列式不为零;存在唯一解
相容
至少存在一个解
不相容
不存在解

由长方阵表示的线性系统的分类.

这里求不相容方程组 的解.
In[16]:=
Click for copyable input
Out[16]=
这个矩阵代表三个变量的两个方程.
In[17]:=
Click for copyable input
Out[17]=
LinearSolve 给出欠定方程组的一个解.
In[18]:=
Click for copyable input
Out[18]=
当矩阵代表欠定方程系统时,矩阵有一个非平凡的零空间. 此时,零空间由单个向量张成.
In[19]:=
Click for copyable input
Out[19]=
LinearSolve 给出的解,加上零空间的基向量的线性组合,仍然是解.
In[20]:=
Click for copyable input
Out[20]=

独立方程的个数是矩阵的秩 MatrixRank[m]. 多余方程的数目是 Length[NullSpace[m]]. 注意,这两个量之和总是等于 m 的列数.

LinearSolve[m]产生一个求解形如 的方程的函数

产生 LinearSolveFunction 对象.

在某些应用中,会希望多次求解形式为 的方程组,它们具有相同的 ,但不同的 . 在 Mathematica 中能这样有效地做,那就是使用 LinearSolve[m] 来产生一个单一的 LinearSolveFunction,它能应用于任意多的向量.

这产生一个 LinearSolveFunction.
In[21]:=
Click for copyable input
Out[21]=
能把它应用于一个向量.
In[22]:=
Click for copyable input
Out[22]=
将这个向量作为一个明确的第二自变量给予 LinearSolve,能得到相同的结果.
In[23]:=
Click for copyable input
Out[23]=
但是能将 应用于任何的向量.
In[24]:=
Click for copyable input
Out[24]=
LeastSquares[m,b]给出一个最小二乘问题 的解的向量 .

求解最小二乘问题.

这个线性系统是不相容的.
In[25]:=
Click for copyable input
Out[25]=
LeastSquares 求解一个向量 使得 在最小二乘的意义上最小化.
In[26]:=
Click for copyable input
Out[26]=
New to Mathematica? Find your learning path »
Have a question? Ask support »