2012-02-12 2 views
3

Моя проблема заключается в следующем: У меня есть вектор какСоздать нижнюю треугольную матрицу из данного вектора

[3,4,5,6,7]

Я хочу создать матрица как

3 0 0 0 0 
3 4 0 0 0 
3 4 5 0 0 
3 4 5 6 0 
3 4 5 6 7 

Однако, я не хочу использовать для циклов из-за проблемы размера, которую я в конечном итоге получаю. Я думал об использовании flipud, fliprl, hankel и toeplitz функций, но не может найти решение.

ответ

6

Попробуйте это:

x = [3,4,5,6,7] 
tril(ones(length(x),1)*x) 

ans = 

3  0  0  0  0 
3  4  0  0  0 
3  4  5  0  0 
3  4  5  6  0 
3  4  5  6  7 
+0

Ну, я узнал другой способ, основанный на ответе Диего: tril (repmat (A, lengt h (A), 1)), но ваш тоже правильный! благодаря – emper

1

Если А ваш вектор, вы можете сделать

M = repmat (A, длина (A), 1). * ТРИЛ (из них (длина (A), длина (A)), 0)

+1

Это почти идеально работает за исключением того, что нам нужно изменить -1 до 0. Я имею в виду рабочая версия:. repmat (A, длина (A), 1) * триллиону (единицы (длина (A), длина (A)), 0) many thanksssss – emper