diag
创建对角矩阵或获取矩阵的对角元素
说明
示例
创建一个 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 是包含 N 个元素的向量,则 diag(v,k) 是 N+abs(k) 阶的方阵。
diag([]) 返回空矩阵 []。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
复数支持: 是
输入矩阵。如果 ndims(A) > 2,diag 将返回错误。
diag([]) 返回空矩阵 []。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
复数支持: 是
对角线编号,指定为一个整数。k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。
对于 m×n 矩阵,k 处于范围 内。例如,对于 n 大于 m 的矩阵,k=0 主对角线由索引为 (1,1)、(2,2)、...、(m,m) 的元素组成。主对角线上方的 k=1 由索引为 (1,2)、(2,3)、...、(m,m+1) 的元素组成。主对角线下方的 k=-1 由索引为 (2,1)、(3,2)、...、(m,m-1) 的元素组成。

提示
矩阵的
trace等于sum(diag(A))。
扩展功能
用法说明和限制:
如果提供
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)
用法说明和限制:
如果提供
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)
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
diag 函数完全支持 GPU 数组。要在 GPU 上运行该函数,请将输入数据指定为 gpuArray (Parallel Computing Toolbox)。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)