diag
Crear una matriz diagonal u obtener elementos diagonales de una matriz
Descripción
D = diag(
devuelve una matriz diagonal cuadrada con los elementos del vector v
)v
en la diagonal principal.
Ejemplos
Crear matrices diagonales
Cree un vector de 1 por 5.
v = [2 1 -1 -2 -5];
Utilice diag
para crear una matriz con los elementos de v
en la diagonal principal.
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
Cree una matriz con los elementos de v
en la primera superdiagonal (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
El resultado es una matriz de 6 por 6. Al especificar un vector de longitud n
como entrada, diag
devuelve una matriz cuadrada del tamaño n+abs(k)
.
Obtener elementos de diagonal
Obtenga los elementos de la diagonal principal de una matriz de 6 por 6 aleatoria.
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
Obtenga los elementos de la primera subdiagonal (k=-1
) de A
. El resultado tiene un elemento menos que la diagonal principal.
x1 = diag(A,-1)
x1 = 5×1
10
10
2
9
2
Llamar a diag
dos veces devuelve una matriz diagonal compuesta por los elementos de diagonal de la matriz original.
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
Argumentos de entrada
v
— Elementos de diagonal
vector
Elementos de diagonal, especificados como vector. Si v
es un vector con N
elementos, diag(v,k)
es una matriz cuadrada de orden N+abs(k)
.
diag([])
devuelve una matriz vacía, []
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
Soporte de números complejos: Sí
A
— Matriz de entrada
matriz
Matriz de entrada. diag
devuelve un error si ndims(A) > 2
.
diag([])
devuelve una matriz vacía, []
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
Soporte de números complejos: Sí
k
— Número de diagonal
valor entero
Número de diagonal, especificado como entero. k=0
representa la diagonal principal, k>0
está encima de la diagonal principal y k<0
está debajo de la diagonal principal.
En una matriz de m por n, k
está en el rango . Por ejemplo, en matrices con n mayor que m, la diagonal principal k=0
consta de los elementos con índices (1,1)
, (2,2)
, ..., (m,m)
. k=1
sobre la diagonal principal consta de los elementos con índices (1,2)
, (2,3)
, ..., (m,m+1)
. k=-1
debajo de la diagonal principal consta de los elementos con índices (2,1)
, (3,2)
, ..., (m,m-1)
.
Sugerencias
trace
de una matriz es igual asum(diag(A))
.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Si proporciona
k
, debe ser un valor entero real y escalar.En las entradas de tamaño variable que son vectores de longitud variable (1 por : o : por 1),
diag
:Trata la entrada como un vector.
Devuelve una matriz con el vector de entrada en la diagonal especificada.
En las entradas de tamaño variable que no son vectores de longitud variable,
diag
:Trata la entrada como una matriz.
No admite entradas que son vectores en tiempo de ejecución.
Devuelve un vector de longitud variable.
Si la entrada es de tamaño variable (:m por :n) y tiene una forma de 0 por 0 en tiempo de ejecución, la salida es 0 por 1, no 0 por 0. Sin embargo, si la entrada es de un tamaño constante de 0 por 0, la salida es
[]
.En las entradas de tamaño variable que no son vectores de longitud variable (1 por : o : por 1),
diag
trata la entrada como una matriz de la que extraer un vector diagonal. Este comportamiento tiene lugar incluso si el arreglo de entrada es un vector en tiempo de ejecución. Para forzardiag
a crear una matriz a partir de entradas de tamaño variable que no son de 1 por : o de : por 1, utilice:diag(x(:))
en lugar dediag(x)
diag(x(:),k)
en lugar dediag(x,k)
Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
Si proporciona
k
, debe ser un valor entero real y escalar.En las entradas de tamaño variable que son vectores de longitud variable (1 por : o : por 1),
diag
:Trata la entrada como un vector.
Devuelve una matriz con el vector de entrada en la diagonal especificada.
En las entradas de tamaño variable que no son vectores de longitud variable,
diag
:Trata la entrada como una matriz.
No admite entradas que son vectores en tiempo de ejecución.
Devuelve un vector de longitud variable.
Si la entrada es de tamaño variable (:m por :n) y tiene una forma de 0 por 0 en tiempo de ejecución, la salida es 0 por 1, no 0 por 0. Sin embargo, si la entrada es de un tamaño constante de 0 por 0, la salida es
[]
.En las entradas de tamaño variable que no son vectores de longitud variable (1 por : o : por 1),
diag
trata la entrada como una matriz de la que extraer un vector diagonal. Este comportamiento tiene lugar incluso si el arreglo de entrada es un vector en tiempo de ejecución. Para forzardiag
a crear una matriz a partir de entradas de tamaño variable que no son de 1 por : o de : por 1, utilice:diag(x(:))
en lugar dediag(x)
diag(x(:),k)
en lugar dediag(x,k)
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Esta función es totalmente compatible con los arreglos de GPU. Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Arreglos distribuidos
Realice particiones de arreglos grandes por toda la memoria combinada de su cluster mediante Parallel Computing Toolbox™.
Esta función es totalmente compatible con los arreglos distribuidos. Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de 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)