Как создать треугольную матрицу на основе вектора в MATLAB?

Скажем, у меня есть такой вектор:

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, но я был обременен этим материалом...)

Ответ 1

hankel(A) вы получите первую матрицу

triu(toeplitz(A)) предоставит вам вторую.

- Loren

Ответ 2

Лучшие решения перечислены 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

Я вспоминаю создание подобранных матриц таким образом, прежде чем я узнал о некоторых встроенных функциях, о которых упоминал Лорен. Это не так просто и чисто, как использование этих, но это сработало. =)

Ответ 3

То, как я это делал, - создать матрицу 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.

Ответ 4

Для создания таких треугольных матриц с таким регулярным рисунком используйте функцию теплица, например

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

для другого случая, используйте rot90(m)