Create matrix with double rows of [-1 1]

1 visualización (últimos 30 días)
Leonard
Leonard el 10 de Jul. de 2014
Comentada: Leonard el 11 de Jul. de 2014
Hey guys, I want to create a matrix which looks the following:
-1 0 0 0
1 0 0 0
0 -1 0 0
0 1 0 0
0 0 -1 0
0 0 1 0
0 0 0 -1
0 0 0 1
and so on. Does anyone know a good way to do that? Maybe there is a helpful command for that :)
Thanks a lot :)
Oh, sorry, an edit:
I would also have an even more complex matrix, which would look the following...
0 0 0 0
-1 0 0 0
0 1 0 0
0 -2 0 0
0 0 2 0
0 0 -3 0
0 0 0 3
0 0 0 -4
Any suggestions? :)

Respuesta aceptada

Ben11
Ben11 el 10 de Jul. de 2014
Editada: Ben11 el 10 de Jul. de 2014
Simple answer:
clear all
clc
A = zeros(8,4)
for i =2:2:size(A,1)
A(i-1,i/2) = (i/2)-1;
A(i,i/2) = -i/2;
end
A
A =
0 0 0 0
-1 0 0 0
0 1 0 0
0 -2 0 0
0 0 2 0
0 0 -3 0
0 0 0 3
0 0 0 -4
There is probably a more compact way to do it though :)
  2 comentarios
Leonard
Leonard el 10 de Jul. de 2014
okay, thanks. That is really a good solution and quite fast! Thanks a lot again!
Ben11
Ben11 el 10 de Jul. de 2014
My pleasure!

Iniciar sesión para comentar.

Más respuestas (2)

Andrei Bobrov
Andrei Bobrov el 10 de Jul. de 2014
1.
out1 = kron(eye(4),[-1;1]);
2.
out2 = kron(eye(4),[1;1]);
out2(out2>0) = bsxfun(@plus,[1;-1]*(1:4),[-1;0]);

José-Luis
José-Luis el 10 de Jul. de 2014
Editada: José-Luis el 10 de Jul. de 2014
numDiag = 4;
numVal = 2;
val1 = eye(numDiag);
val2 = val1;
val1(val1==1) = 0:3;
val2(val2 == 1) = -1:-1:-4;
your_mat = cat(3,val1,val2);
reshape(shiftdim(your_mat,2),[numDiag*numVal, numDiag])
  2 comentarios
Ben11
Ben11 el 10 de Jul. de 2014
Nicely done @José-Luis!
José-Luis
José-Luis el 10 de Jul. de 2014
Thanks!

Iniciar sesión para comentar.

Categorías

Más información sobre Logical 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