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
— 对角线元素
向量
对角线元素,指定为向量。如果 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
处于范围 内。例如,对于 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))
。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
如果提供
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)
请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
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)
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
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)