在 R 語言中查詢矩陣的零空間

Jesse John 2023年1月30日
  1. 在 R 中使用 pracma 包的 nullspace() 查詢矩陣的零空間
  2. 檢查 R 中 nullspace() 函式的結果
  3. R 中零空間基中的小數元素
在 R 語言中查詢矩陣的零空間

矩陣 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
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相關文章 - R Matrix