Как я могу создать треугольную матрицу на основе вектора в 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))
принесу тебе второй.
--Лорен
Другие советы
Лучшие решения перечислены Loren . Также можно создать эти матрицы с помощью 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
Я помню, как создавал подобные матрицы, прежде чем узнал о некоторых встроенных функциях, упомянутых Лорен. Это не так просто и чисто, как их использование, но это сработало. =) Р>
Я бы решил создать матрицу 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
вы получали нужный результат. По сути, сначала делайте линейную алгебру на бумаге, а затем попросите Матлаба выполнить вычисления.
Для генерации таких треугольных матриц с таким регулярным шаблоном используйте функцию toeplitz, например.
m=toeplitz([1,0,0,0],[1,2,3,4])
для другого случая используйте rot90 (m)