Como posso criar uma matriz triangular com base em um vetor, em MATLAB?
-
05-07-2019 - |
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 ...)
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)