null
矩阵的零空间
说明
示例
矩阵的零空间
使用 null
函数计算矩阵的零空间的标准正交基和有理基向量。矩阵的零空间包含满足 的向量 。
创建一个由 1 组成的 3×3 矩阵。此矩阵秩亏,其中两个奇异值等于零。
A = ones(3)
A = 3×3
1 1 1
1 1 1
1 1 1
计算 A
的零空间的标准正交基。确认 (在舍入误差内)。
x1 = null(A)
x1 = 3×2
-0.5774 -0.5774
-0.2113 0.7887
0.7887 -0.2113
norm(A*x1)
ans = 9.6148e-17
现在计算零空间的有理基。确认 。
x2 = null(A,"rational")
x2 = 3×2
-1 -1
1 0
0 1
norm(A*x2)
ans = 0
x1
和 x2
相似,但归一化不同。尽管 x1'*x1
是单位矩阵,但 x2'*x2
不是。
x1'*x1
ans = 2×2
1.0000 -0.0000
-0.0000 1.0000
x2'*x2
ans = 2×2
2 1
1 2
正交性通常对数值计算的准确度至关重要。因此,"rational"
选项应仅用于处理全部由整数组成的小型矩阵,此时适合使输出更易于阅读。
指定零空间的容差
当矩阵具有较小的奇异值时,通过指定容差可更改将哪些奇异值视为零。
创建一个 7×7 希尔伯特矩阵。此矩阵为满秩矩阵,但有一些小的奇异值。
H = hilb(7)
H = 7×7
1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429
0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250
0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111
0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000
0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909
0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833
0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769
s = svd(H)
s = 7×1
1.6609
0.2719
0.0213
0.0010
0.0000
0.0000
0.0000
计算 H
的零空间。由于 H
为满秩矩阵,Z
为空。
Z = null(H)
Z = 7x0 empty double matrix
现在,再次计算零空间,但指定容差为 1e-4
。此容差使 null
将三个奇异值视为零,因此零空间不再为空。
Ztol = null(H,1e-4)
Ztol = 7×3
0.0160 -0.0025 0.0002
-0.2279 0.0618 -0.0098
0.6288 -0.3487 0.0952
-0.2004 0.6447 -0.3713
-0.4970 -0.1744 0.6825
-0.1849 -0.5436 -0.5910
0.4808 0.3647 0.1944
验证 H*Ztol
与指定的容差相比具有可忽略元素。
norm(H*Ztol)
ans = 2.9386e-05
欠定方程组的通解
求某欠定方程组的一个特定解,然后获得所有解的通用形式。
欠定线性方程组 包含的未知数比方程多。欠定方程组可以有无限多个解或没有解。当方程组有无限多个解时,它们都位于一条直线上。该线上的各点均通过零空间向量的线性组合获得。
创建一个 2×4 系数矩阵并使用反斜杠求解方程 ,其中 是由 1 组成的向量。用反斜杠计算问题的最小二乘解。
A = [1 8 15 67; 7 14 16 3]
A = 2×4
1 8 15 67
7 14 16 3
b = ones(2,1); x0 = A\b
x0 = 4×1
0
0
0.0623
0.0010
欠定方程组的完全通解具有 形式,其中:
是 的零空间。
是合适长度的任何向量。
是用反斜杠计算的解。
计算 A
的零空间,然后使用结果来构造方程组的另一个解。检查新解是否在舍入误差内满足 。
N = null(A)
N = 4×2
-0.2977 -0.8970
-0.6397 0.4397
0.7044 0.0157
-0.0769 -0.0426
x = x0 + N*[1; -2]
x = 4×1
1.4963
-1.5192
0.7354
0.0093
norm(A*x-b)
ans = 1.8291e-14
输入参数
A
— 输入矩阵
矩阵
输入矩阵。
数据类型: single
| double
复数支持: 是
tol
— 奇异值容差
标量
奇异值容差,指定为实数标量。小于容差的 A
的奇异值被视为零,这会影响 null
返回的零空间向量的数目。默认容差是 max(size(A)) * eps(norm(A))
。
输出参数
Z
— 零空间基向量
矩阵
零空间基向量,以矩阵的列形式返回。Z
满足属性:
A*Z
含有可忽略元素。size(Z,2)
是A
的空值的估计值。
如果 rank(A)
(或 rank(A,tol)
)等于 size(A,2)
,则 Z
为空。
算法
null(A)
计算矩阵 A
的奇异值分解,使得 A = U*S*V'
。V
中对应于在容差范围内为零的奇异值的列构成零空间的一组标准正交基向量。
零空间 null(A,"rational")
的有理基是从通过 rref
计算得到的 A
的简化行阶梯形矩阵形式获得的。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
生成的代码可能返回与 MATLAB® 不同的基值。
代码生成不支持有理基选项(第二个输入)。
代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持语法
Z = null(A,"rational")
。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
不支持语法
Z = null(A,"rational")
。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2022a: 指定容差
使用 tol
参数指定用于构成零空间的奇异值的容差阈值。小于容差的输入矩阵的奇异值被视为零。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)