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 ...)

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top