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

11 visualizaciones (últimos 30 días)
Kamel
Kamel el 8 de Mayo de 2019
Respondida: Matt J el 10 de Mayo de 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

Respuesta aceptada

Adam Danz
Adam Danz el 8 de Mayo de 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

Más respuestas (3)

Geoff Hayes
Geoff Hayes el 8 de Mayo de 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.
  2 comentarios
Adam Danz
Adam Danz el 8 de Mayo de 2019
Nice! Simultaneous solutions with the same approach!
Kamel
Kamel el 8 de Mayo de 2019
Editada: Kamel el 8 de Mayo de 2019
ok, thank you

Iniciar sesión para comentar.


Jan
Jan el 10 de Mayo de 2019
Editada: Jan el 10 de Mayo de 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 el 10 de Mayo de 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

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by