Create matrix with double rows of [-1 1]

1 vue (au cours des 30 derniers jours)
Leonard
Leonard le 10 Juil 2014
Commenté : Leonard le 11 Juil 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? :)

Réponse acceptée

Ben11
Ben11 le 10 Juil 2014
Modifié(e) : Ben11 le 10 Juil 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 commentaires
Leonard
Leonard le 10 Juil 2014
okay, thanks. That is really a good solution and quite fast! Thanks a lot again!
Ben11
Ben11 le 10 Juil 2014
My pleasure!

Connectez-vous pour commenter.

Plus de réponses (2)

Andrei Bobrov
Andrei Bobrov le 10 Juil 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]);
  1 commentaire
Leonard
Leonard le 11 Juil 2014
This is really handy, thanks!!

Connectez-vous pour commenter.


José-Luis
José-Luis le 10 Juil 2014
Modifié(e) : José-Luis le 10 Juil 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 commentaires
Ben11
Ben11 le 10 Juil 2014
Nicely done @José-Luis!
José-Luis
José-Luis le 10 Juil 2014
Thanks!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by