diag
创建对角矩阵或获取矩阵的对角元素
语法
说明
D = diag(v)
返回包含主对角线上向量 v
的元素的对角矩阵。
D = diag(v,k)
将向量 v
的元素放置在第 k
条对角线上。k=0
表示主对角线,k>0
位于主对角线上方,k<0
位于主对角线下方。
x = diag(A)
返回 A
的主对角线元素的列向量。
x = diag(A,k)
返回 A
的第 k
条对角线上元素的列向量。
示例
创建诊断矩阵
创建一个 1×5 的向量。
v = [2 1 -1 -2 -5];
使用 diag
创建一个包含 v
在主对角线上的元素的矩阵。
D = diag(v)
D = 5×5 2 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -2 0 0 0 0 0 -5
创建一个包含 v
在第一个上对角线 (k=1
) 上的元素的矩阵。
D1 = diag(v,1)
D1 = 6×6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -2 0 0 0 0 0 0 -5 0 0 0 0 0 0
结果为一个 6×6 矩阵。将一个长度为 n
的向量指定为输入时,diag
返回一个大小为 n+abs(k)
的方阵。
获取对角线元素
获取一个随机 6×6 矩阵的主对角线上的元素。
A = randi(10,6)
A = 6×6 9 3 10 8 7 8 10 6 5 10 8 1 2 10 9 7 8 3 10 10 2 1 4 1 7 2 5 9 7 1 1 10 10 10 2 9
x = diag(A)
x = 6×1 9 6 9 1 7 9
获取 A
的第一个下对角线 (k=-1
) 上的元素。结果比主对角线少一个元素。
x1 = diag(A,-1)
x1 = 5×1 10 10 2 9 2
调用 diag
两次将返回一个包含原始矩阵的对角线上元素的对角矩阵。
A1 = diag(diag(A))
A1 = 6×6 9 0 0 0 0 0 0 6 0 0 0 0 0 0 9 0 0 0 0 0 0 1 0 0 0 0 0 0 7 0 0 0 0 0 0 9
输入参数
v
- 对角线元素
向量
对角线元素,指定为向量。如果 v
是包含 N
个元素的向量,则 diag(v,k)
是 N+abs(k)
阶的方阵。
diag([])
返回空矩阵 []
。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
复数支持: 是
A
- 输入矩阵
矩阵
输入矩阵。如果 ndims(A) > 2
,diag
将返回错误。
diag([])
返回空矩阵 []
。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
复数支持: 是
k
- 对角线编号
整数
对角线编号,指定为一个整数。k=0
表示主对角线,k>0
位于主对角线上方,k<0
位于主对角线下方。
对于 m×n 矩阵,k
处于范围 (−m+1)≤k≤(n−1) . 内
提示
-
矩阵的 trace 等于
sum(diag(A))
。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
-
如果提供
k
,则它必须为实数整数标量值。 -
如果可变大小输入是可变长度向量(1×: 或 :×1),则
diag
:-
将输入视为向量
-
返回由沿指定对角线的输入向量组成的矩阵
-
-
如果可变大小输入不是可变长度向量,则
diag
:-
将输入视为矩阵
-
不支持在运行时为向量的输入
-
返回可变长度向量
如果输入为可变大小 (:m×:n) 并且运行时的形状为 0×0,则输出为 0×1,而不是 0×0。但是,如果输入为常量大小 0×0,则输出为
[]
。 -
-
如果可变大小输入不是可变长度向量(1×: 或 :×1),则
diag
将输入视为从中提取对角线向量的矩阵。即使输入数组在运行时为向量,也会发生这种行为。要强制diag
从不是 1×: 或 :×1 的可变大小输入生成矩阵,请使用:-
diag(x(:))
,而不使用diag(x)
-
diag(x(:),k)
,而不使用diag(x,k)
-