Ответ 1
hankel(A)
вы получите первую матрицу
triu(toeplitz(A))
предоставит вам вторую.
- Loren
Скажем, у меня есть такой вектор:
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
Лучшие решения перечислены 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
вы получите нужный результат. В основном, сначала выполняем линейную алгебру на бумаге, а затем вычисляем Matlab.
Для создания таких треугольных матриц с таким регулярным рисунком используйте функцию теплица, например
m=toeplitz([1,0,0,0],[1,2,3,4])
для другого случая, используйте rot90(m)