how to full fill the diagonal of a matrix by a vector

29 views (last 30 days)
hello
how can i full fill a matrix (17*9) by a vector by length 9
for example i have the vector d=[1 2 3 ] and the matrix zeros(5*5) and i want to make the output matrix like this
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1
thanks

Accepted Answer

Adam Danz
Adam Danz on 8 May 2019
This approach uses circshift() to circularly shift the columns of matrix.
m = zeros(5,5);
v = [1,2,3];
% Loop through each column of m
for i = 1:size(m,2)
m(1:length(v),i) = v;
m(:,i) = circshift(m(:,1), i-1);
end
Result:
m =
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1

More Answers (3)

Geoff Hayes
Geoff Hayes on 8 May 2019
Ahmed - try using
a = [1 2 3 0 0]';
A = cell2mat(arrayfun(@(x)circshift(a,x-1),1:length(a), 'UniformOutput', false));
We use arrayfun and circshift to apply an anonymous function that shifts the a down by one element (less one) for each of the five columns in your output matrix. We use cell2mat to conver the cell array output to a matrix.

Jan
Jan on 10 May 2019
Edited: Jan on 10 May 2019
m = zeros(5,5);
v = [1,2,3,4];
n = numel(v);
index = 1:n;
for i = 1:size(m,2)
m(mod(i-1:i+n-2, 5)+1, i) = v;
end

Matt J
Matt J on 10 May 2019
>> full(interpMatrix([1,2,3],1,5,1,'circ'))
ans =
1 0 0 3 2
2 1 0 0 3
3 2 1 0 0
0 3 2 1 0
0 0 3 2 1

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!