【Matlab中diag函数的用法】

diag

创建对角矩阵或获取矩阵的对角元素

语法

D = diag(v)

D = diag(v,k)

x = diag(A)

x = diag(A,k)

说明

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) > 2diag 将返回错误。

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值