求解R中任意m*n矩阵A的齐次系统Ax=0(查找A的零空间基)

求解R中任意m*n矩阵A的齐次系统Ax=0(查找A的零空间基),r,matrix,linear-algebra,equations,linear-equation,R,Matrix,Linear Algebra,Equations,Linear Equation,当a是R中的任意m*n矩阵(不一定是平方矩阵)时,如何求解均质系统Ax=0 #A=[-0.10.1]=1x2矩阵;x=2x1,待查找;0:1x1零矩阵 Rm(无法执行上标;抱歉)线性变换 无论如何,上述特定矩阵A的解决方案对我来说就足够了 我们可以看到它,x=(a,a),其中a是一个任意值 经典/教科书解决方案 下面的函数NullSpace使用上述理论查找A的零空间。在情况1中,零空间为零;而在情况2到4中,返回一个矩阵,其列跨越空空间 NullSpace <- function (

a
是R中的任意
m*n
矩阵(不一定是平方矩阵)时,如何求解均质系统
Ax=0

#A=[-0.10.1]=1x2矩阵;x=2x1,待查找;0:1x1零矩阵
Rm
(无法执行上标;抱歉)线性变换

无论如何,上述特定矩阵
A
的解决方案对我来说就足够了

我们可以看到它,
x=(a,a)
,其中
a
是一个任意值


经典/教科书解决方案

下面的函数
NullSpace
使用上述理论查找
A
的零空间。在情况1中,零空间为零;而在情况2到4中,返回一个矩阵,其列跨越空空间

NullSpace <- function (A) {
  m <- dim(A)[1]; n <- dim(A)[2]
  ## QR factorization and rank detection
  QR <- base::qr.default(A)
  r <- QR$rank
  ## cases 2 to 4
  if ((r < min(m, n)) || (m < n)) {
    R <- QR$qr[1:r, , drop = FALSE]
    P <- QR$pivot
    F <- R[, (r + 1):n, drop = FALSE]
    I <- base::diag(1, n - r)
    B <- -1.0 * base::backsolve(R, F, r)
    Y <- base::rbind(B, I)
    X <- Y[base::order(P), , drop = FALSE]
    return(X)
    }
  ## case 1
  return(base::matrix(0, n, 1))
  }
A1 <- matrix(c(-0.1, 0.1), 1, 2)
NullSpace(A1)
#     [,1]
#[1,]    1
#[2,]    1

附录:图片降价(需要MathJax支持)
设$A$为$m\times n$,则其空空间为$\{x:Ax=0\}$。为了找到$Ax=0$的解,传统的方法是高斯消去法,将$a$减少为一行梯队形式。然而,让我们考虑QR分解(用列旋转)的方法,其中一个HouthHoor变换的序列被应用到$ax=0 $的两边,将等式降低到$rp'x=0 $,其中$p$是$n倍n列置换矩阵。$R$的外观取决于$m$和$n$的关系,以及$A$的等级,由$R$表示。
1.如果$m\ge n=r$,$r$是一个$n\times n$满秩上三角矩阵,它看起来像$$\begin{pmatrix}\times&\times&\times\\&\times&\times\&\times\&\times\&&\times\&&&\times\end{pmatrix}$$
2.如果$m\ge n>r$,$r$是一个$n\times n$秩亏上三角矩阵,它看起来像$$\begin{pmatrix}\times&\times&\times\\&\times&\times\&\times&\times\&&&0\end{pmatrix}$$
3.如果$r=m
m和n是任意的。对他们没有限制。无论如何,上述特定矩阵A的解对我来说就足够了。列旋转的QR分解优于行旋转的高斯消去法或行旋转的LU分解。以中的示例矩阵
A1
为例,LU分解(
matrix::LU
)失败,因为第二个枢轴将为0。高斯消去法(
pracma::rref
)可以继续将矩阵减少为减少的行梯队形式,但轴心列不是前两列,而是第一列和第三列。QR方法中的列枢轴确保枢轴列位于前2列。
A1 <- matrix(c(-0.1, 0.1), 1, 2)
NullSpace(A1)
#     [,1]
#[1,]    1
#[2,]    1
set.seed(0)
A2 <- matrix(runif(10), 2, 5)
#          [,1]      [,2]      [,3]      [,4]      [,5]
#[1,] 0.8966972 0.3721239 0.9082078 0.8983897 0.6607978
#[2,] 0.2655087 0.5728534 0.2016819 0.9446753 0.6291140

X <- NullSpace(A2)
#           [,1]      [,2]       [,3]
#[1,] -1.0731435 -0.393154 -0.3481344
#[2,]  0.1453199 -1.466849 -0.9368564
#[3,]  1.0000000  0.000000  0.0000000
#[4,]  0.0000000  1.000000  0.0000000
#[5,]  0.0000000  0.000000  1.0000000

## X indeed solves A2 %*% X = 0
A2 %*% X
#             [,1]          [,2]          [,3]
#[1,] 2.220446e-16 -1.110223e-16 -2.220446e-16
#[2,] 5.551115e-17 -1.110223e-16 -1.110223e-16
library(pracma)
X2 <- nullspace(A2)
#            [,1]        [,2]       [,3]
#[1,] -0.67453687 -0.24622524 -0.2182437
#[2,]  0.27206765 -0.69479881 -0.4260258
#[3,]  0.67857488  0.07429112  0.0200459
#[4,] -0.07098962  0.62990141 -0.2457700
#[5,] -0.07399872 -0.23309397  0.8426547

## it indeed solves A2 %*% X = 0
A2 %*% X2
#             [,1]          [,2]          [,3]
#[1,] 2.567391e-16  1.942890e-16  0.000000e+00
#[2,] 6.938894e-17 -5.551115e-17 -1.110223e-16

## it has orthonormal columns
round(crossprod(X2), 15)
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1
Let $A$ be $m \times n$, then its null space is $\{x: Ax = 0\}$. To find a solution of $Ax = 0$, the conventional method is Gaussian elimination that reduces $A$ into a row echelon form. However, let's consider the QR factorization (with column pivoting) approach, where a sequence of Householder transforms are applied to both sides of $Ax = 0$, reducing the equation to $RP'x = 0$, where $P$ is an $n \times n$ column permutation matrix. What $R$ looks like depends on the relationship of $m$ and $n$, as well as the rank of $A$, denoted by $r$.

 1. If $m \ge n = r$, $R$ is an $n \times n$ full-rank upper triangular matrix, which looks like $$\begin{pmatrix} \times & \times & \times & \times \\ & \times & \times & \times \\ & & \times & \times \\ & & & \times\end{pmatrix}$$
 2. If $m \ge n > r$, $R$ is an $n \times n$ rank-deficient upper triangular matrix, which looks like $$\begin{pmatrix} \times & \times & \times & \times \\ & \times & \times & \times \\ & & \times & \times \\ & & & 0\end{pmatrix}$$
 3. If $r = m < n$, $R$ is an $m \times n$ full-rank matrix which looks like $$\begin{pmatrix} \times & \times & \times & \times & \times & \times & \times \\ & \times & \times & \times & \times & \times & \times\\ & & \times & \times & \times & \times & \times\\ & & & \times & \times & \times & \times\end{pmatrix}$$
 4. If $r < m < n$, $R$ is an $m \times n$ rank-deficient matrix which looks like $$\begin{pmatrix} \times & \times & \times & \times & \times & \times & \times \\ & \times & \times & \times & \times & \times & \times\\ & & \times & \times & \times & \times & \times\\ & & & 0 & 0 & 0 & 0\end{pmatrix}$$.

In all cases, the first $r$ non-zero rows of $R$ can be partiontioned into $\begin{pmatrix} U & F\end{pmatrix}$, where $U$ is an $r \times r$ full-rank upper triangular matrix and $F$ is an $r \times (n - r)$ rectangular matrix. The null space of $A$ has dimension $(n - r)$ and can be characterized by an $ n \times (n - r)$ matrix $X$, such that $RP'X = 0$. In practice, $X$ is obtained in two steps.

 1. Let $Y$ be an $ n \times (n - r)$ matrix and solve $RY = 0$. Clearly $Y$ can not be uniquely determined as the linear system has $(n - r)$ free parameters. A common solution is to find $Y = \left(\begin{smallmatrix} B \\ I \end{smallmatrix}\right)$, where $I$ is an $(n - r) \times (n - r)$ identity matrix. Then $B$ can be uniquely solved from $UB = -F$ using back substitution.
 2. Solve $P'X = Y$ for $X = PY$, which is simply a row permutation of $Y$.