¿Cómo puedo crear una matriz triangular basada en un vector, en MATLAB?
-
05-07-2019 - |
Pregunta
Digamos que tengo un vector como este:
A = [101:105]
Que es realmente:
[ 101, 102, 103, 104, 105 ]
Y me gustaría usar solo funciones y operadores de vector / matriz para producir la matriz:
101 102 103 104 105
102 103 104 105 0
103 104 105 0 0
104 105 0 0 0
105 0 0 0 0
o la siguiente matriz:
101 102 103 104 105
0 101 102 103 104
0 0 101 102 103
0 0 0 101 102
0 0 0 0 101
¿Alguna idea a alguien?
(Soy un principiante en MATLAB, pero he tenido que cargar con esto ...)
Solución
hankel (A)
obtendrá la primera matriz
triu (toeplitz (A))
obtendrá el segundo.
--Loren
Otros consejos
Las mejores soluciones están listadas por Loren . También es posible crear estas matrices utilizando SPDIAGS :
vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5)); % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5))); % The first matrix
Recuerdo haber creado matrices con bandas como esta antes de descubrir algunas de las funciones incorporadas que Loren mencionó. No es tan simple y limpio como usarlos, pero funcionó. =)
La forma en que lo haría es crear una matriz A
:
101 102 103 104 105 101 102 103 104 105 101 102 103 104 105 101 102 103 104 105 101 102 103 104 105
Y luego encuentre una matriz B
de modo que cuando multiplique A * B
obtendrá el resultado que desea. Básicamente, primero haz el álgebra lineal en papel y luego haz que Matlab haga el cálculo.
Para generar tales matrices triangulares con un patrón tan regular, use la función toeplitz, por ejemplo
m=toeplitz([1,0,0,0],[1,2,3,4])
para el otro caso, use rot90(m)