在 R 语言中查找矩阵的零空间
Jesse John
2023年1月30日
矩阵 A 的零空间包含所有向量 x
,满足方程 Ax = 0
。本文演示了如何在 R 中找到矩阵的零空间。
在 R 中使用 pracma
包的 nullspace()
查找矩阵的零空间
实用数值数学函数包 pracma
提供 nullspace()
函数来查找矩阵的零空间。我们需要安装这个包(一次性任务),加载它,然后使用 nullspace()
函数。
该函数返回另一个矩阵。此结果的列是线性独立的,并且跨越矩阵的零空间。
换句话说,它们构成了原始矩阵的零空间的基础。如果零空间仅包含零向量,则函数返回 NULL
。
在示例代码中,我们将创建一个 2 行 5 列的矩阵。nullspace()
函数返回的矩阵的行数与矩阵中的列数一样多。
对于我们的示例矩阵,它将有 5 行。
示例代码:
# Install the pracma package. (One-time task.)
install.packages(pracma)
# Load the pracma package.
library(pracma)
# Create a sample matrix, A.
A = matrix(c(11:20), nrow = 2, byrow = TRUE)
A
# Find the nullspace of the matrix A.
# Here, we save the nullspace as N to check the result.
N = nullspace(A)
N
输出:
> # Create a sample matrix, A.
> A = matrix(c(11:20), nrow = 2, byrow = TRUE)
> A
[,1] [,2] [,3] [,4] [,5]
[1,] 11 12 13 14 15
[2,] 16 17 18 19 20
> # Find the nullspace of the matrix A.
> # Here, we save the nullspace as N to check the result.
> N = nullspace(A)
> N
[,1] [,2] [,3]
[1,] -0.40544227 -0.3635422 -0.3216421
[2,] 0.04947538 0.3931700 0.7368647
[3,] 0.84401032 -0.1910660 -0.2261424
[4,] -0.21467770 0.6567907 -0.4717409
[5,] -0.27336573 -0.4953525 0.2826606
检查 R 中 nullspace()
函数的结果
零空间基的每个列向量必须满足方程 Ax = 0
。这些向量的每个线性组合也必须满足这个方程。
但是,我们必须记住,会出现舍入误差。1e-10
阶的元素几乎等于 0。
示例代码:
# Multiply A with a column of N.
A %*% N[,1]
# Multiply A with a linear combination of all columns of N.
A %*% (5*N[,1]+2*N[,2]+3*N[,3])
输出:
> # Multiply A with a column of N.
> A %*% N[,1]
[,1]
[1,] 5.329071e-15
[2,] 1.776357e-15
>
> # Multiply A with a linear combination of all columns of N.
> A %*% (5*N[,1]+2*N[,2]+3*N[,3])
[,1]
[1,] 1.776357e-14
[2,] -3.197442e-14
R 中零空间基中的小数元素
当我们在具有整数元素的小矩阵上手动计算零空间时,我们通常会得到具有有理数元素的零空间基。
但是,R 返回的矩阵由十进制数组成。
尽管不在 R 上,但 MathWorks 零空间函数的帮助页面 区分了零空间的正交基和有理基。该描述暗示两者是等价的。
这也意味着从算法的角度来看,返回标准正交基在数值上更准确。
作者: Jesse John