MATLAB에서 벡터를 기반으로 삼각형 매트릭스를 어떻게 만들려면?
-
05-07-2019 - |
문제
이와 같은 벡터가 있다고 가정 해 봅시다.
A = [101:105]
정말 :
[ 101, 102, 103, 104, 105 ]
그리고 매트릭스를 생성하기 위해 벡터/매트릭스 기능 및 연산자 만 사용하고 싶습니다.
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
또는 다음 행렬 :
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
누군가 아이디어가 있습니까?
(나는 Matlab에서 매우 초보자이지만, 나는이 물건을 슬프게했다 ...)
해결책
hankel(A)
첫 번째 매트릭스를 얻을 수 있습니다
triu(toeplitz(A))
두 번째로 얻을 것입니다.
-로든
다른 팁
최상의 솔루션은 다음과 같습니다 로렌. 이 행렬을 사용하여 만들 수도 있습니다 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
Loren이 언급 한 내장 기능에 대해 알게되기 전에 이와 같은 밴드 매트릭스를 만드는 것을 기억합니다. 그것들을 사용하는 것만 큼 단순하고 깨끗하지는 않지만 효과가있었습니다. =))
내가 갈 방법은 매트릭스를 만드는 것입니다 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
그런 다음 행렬을 찾으십시오 B
당신이 곱할 때 A*B
원하는 결과를 얻을 수 있습니다. 기본적으로 먼저 종이에 선형 대수를 수행 한 다음 Matlab이 계산을하도록합니다.
이러한 정기적 인 패턴으로 이러한 삼각형 행렬을 생성하려면 Toeplitz 함수를 사용하십시오.
m=toeplitz([1,0,0,0],[1,2,3,4])
다른 경우에는 사용됩니다 rot90(m)
제휴하지 않습니다 StackOverflow