Processing math: 100%

36 votos

Convertir vector en matriz diagonal

Dado un vector [x1,x2,x3,,xn]T, ¿es posible obtener una matriz diagonal,

[x10000x20000x30000xn]

usando operaciones de matriz (como multiplicación y/o adición con matriz de identidad, etc.)? Esto parece trivial, ¡pero no puedo resolverlo!

Necesito hacer esto para la automatización del proceso en Maxima, para que no tenga que escribir manualmente los elementos en diagonal. Gracias.

25voto

Nigel Overmars Puntos 1376

diag(x)=ni=1eixeiei

Donde ei es el i-ésimo vector de base de Rn y denota la transposición.

12voto

Ronen Puntos 61

Pensé en esto, y lo mejor que se me ocurre es lo siguiente. Es casi tan rápido como la función estándar matlab diag() en matrices pequeñas, pero no era particularmente riguroso. De todos modos:

v=viRnD=diag(v)=DiiRn×nD=In(1Tnv)

En Matlab, esto se puede escribir de la siguiente manera:

>> v = sym('v',[5 1])
D = eye(length(v)) .* kron( ones(length(v),1)',v )
v =
 v1
 v2
 v3
 v4
 v5
D =
[ v1,  0,  0,  0,  0]
[  0, v2,  0,  0,  0]
[  0,  0, v3,  0,  0]
[  0,  0,  0, v4,  0]
[  0,  0,  0,  0, v5]

3voto

xaviersjs Puntos 23

No puedo replicar el código de @Ronen en Python. En cambio, solo uso el producto externo:

import numpy as np

np.identity(len(x)) * np.outer(np.ones(len(x)), x)

donde * es la multiplicación elemento por elemento

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X