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

StackOverflow https://stackoverflow.com/questions/1000535

  •  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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top