2014-09-24 2 views
0

У меня есть строка и столбец в MATLAB:MATLAB: как создать матрицу сдвига вектором

а = [1 0 3 ... a_k]; - ряд 1xk

b = [1; 0; 3; ... b_k]; - колонка KX1

Я хочу создать новую матрицу (A и B) MXN, что можно заполнить путем сдвига строки и столбца:

A = [1 0 3 0 0 0 0 ... 0; 
    0 1 0 3 0 0 0 ... 0; 
    0 0 1 0 3 0 0 ... 0; 
    ... 
    0 0 0 0 0 0 ... 1 0 3 ] 

B= [1 0 0 0 0 0 0 ... 0; 
    0 1 0 0 0 0 0 ... 0; 
    3 0 1 0 0 0 0 ... 0; 
    0 3 0 1 0 0 0 ... 0; 
    0 0 3 0 1 0 0 ... 0; 
    ... 
    0 0 0 0 0 0 0 ... 3] 

Как я могу это сделать?

ответ

1

Это то, что вы хотите?

>> a = [1 0 3]; 
>> m = 5; %// number of rows 
>> A = convmtx(a,m) 
A = 
    1  0  3  0  0  0  0 
    0  1  0  3  0  0  0 
    0  0  1  0  3  0  0 
    0  0  0  1  0  3  0 
    0  0  0  0  1  0  3 

>> b = [1;0;3]; 
>> m = 4; %// number of columns 
>> B = convmtx(b,m) 
B = 
    1  0  0  0 
    0  1  0  0 
    3  0  1  0 
    0  3  0  1 
    0  0  3  0 
    0  0  0  3 
+0

Nifty. Я не знал о функции 'convmtx'. – MrAzzaman

+0

@MrAzzaman Спасибо! На самом деле я вспомнил об этой функции от Q & A здесь на днях :-) –

+0

да, это так, спасибо! – bdhvevhvonof

1

Вы можете сделать это несколько сложным способом, используя комбинацию индексирования и bsxfun. Сначала мы хотим создать индексную матрицу, которая представляет собой сдвиг, который мы пытаемся сделать. Он должен выглядеть следующим образом (по крайней мере, для A):

1 2 3 4 ... k 
k 1 2 3 ... k-1 
etc 

Для создания этого, мы можем использовать bsxfun следующим образом:

index = mod(bsxfun(@plus,1:k,-(1:(k-2))'),k)+1; 

Затем мы можем создать матрицу A, используя это в качестве индекса матрица для a:

A = a(index); 

матрица B это то же самое, просто транспонировать:

B = b(index)'; 
+0

У меня есть пользовательский ряд/столбец. Не инкрементный. – bdhvevhvonof

+0

Что это значит? Вы попробовали код, чтобы узнать, работает ли он? – MrAzzaman

+0

'a = [1 0 3]; k = 10; index = mod (bsxfun (@ plus, 1: k, - (1: k) '), k) +1; A = a (индекс); ' ??? Индекс превышает размерность матрицы. – bdhvevhvonof

Смежные вопросы