Asked by Kamel
on 8 May 2019

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

Answer by Adam Danz
on 8 May 2019

Accepted Answer

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

Answer by 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));

Answer by Matt J
on 10 May 2019

You can use interpMatrix from the File Exchange

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

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.