Pergunta

Digamos que eu tenho um vetor como esta:

A = [101:105]

O que é realmente:

[ 101, 102, 103, 104, 105 ]

E eu gostaria de usar único vetor / matriz de funções e operadores para produzir a 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

ou a matriz seguinte:

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

Qualquer idéias alguém?

(eu sou muito mais um novato no MATLAB, mas eu fui selado essas coisas ...)

Foi útil?

Solução

hankel(A) você vai ter a primeira matriz

triu(toeplitz(A)) você irá obter o segundo.

- Loren

Outras dicas

As melhores soluções são listados por Loren . Também é possível criar essas matrizes usando 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

Lembro-me de criação de matrizes em faixas como este antes que eu descobri sobre algumas das funções embutidas Loren mencionado. Não é tão simples e limpo como usar aqueles, mas funcionou. =)

A forma como eu iria sobre isso é criar um A matriz:

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

E, em seguida, encontrar um B matriz de tal forma que quando você multiplicar A*B você poderá obter o resultado desejado. Basicamente fazer o álgebra linear no papel primeiro e depois ter Matlab fazer o cálculo.

Para gerar tais matrizes triangulares com um padrão tão regular, usar a função toeplitz, por exemplo.

m=toeplitz([1,0,0,0],[1,2,3,4])

para o outro caso, o uso rot90(m)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top