Create matrix with double rows of [-1 1]

조회 수: 1 (최근 30일)
Leonard
Leonard 2014년 7월 10일
댓글: Leonard 2014년 7월 11일
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? :)

채택된 답변

Ben11
Ben11 2014년 7월 10일
편집: Ben11 2014년 7월 10일
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
Leonard
Leonard 2014년 7월 10일
okay, thanks. That is really a good solution and quite fast! Thanks a lot again!
Ben11
Ben11 2014년 7월 10일
My pleasure!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Andrei Bobrov
Andrei Bobrov 2014년 7월 10일
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
Leonard
Leonard 2014년 7월 11일
This is really handy, thanks!!

댓글을 달려면 로그인하십시오.


José-Luis
José-Luis 2014년 7월 10일
편집: José-Luis 2014년 7월 10일
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
Ben11
Ben11 2014년 7월 10일
Nicely done @José-Luis!
José-Luis
José-Luis 2014년 7월 10일
Thanks!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by