how to span a 3*1 vector into a 3*3 skew symmetric matrix ?

조회 수: 437 (최근 30일)
Stanley Cheng
Stanley Cheng 2014년 6월 18일
편집: Thanacha Choopojcharoen 2023년 10월 12일
Hi everyone, as the title,
x=[a b c]' is a 3*1 vector, and its 3*3 skew symmetric matrix is
X=[0 -c b ;
c 0 -a ;
-b a 0 ];
what command is all right to make it in Matlab ?
THX very much!
Cheers
  댓글 수: 2
Sachin Goyal
Sachin Goyal 2023년 2월 16일
X = cross([x x x],eye(3))
Thanacha Choopojcharoen
Thanacha Choopojcharoen 2023년 10월 12일
편집: Thanacha Choopojcharoen 2023년 10월 12일
I wrote a vectorized version of skew where v can be 3xn or nx3. This will return 3x3xn. Technically, this can be defined as a one-line anonymous function as well.
function S = skew(v)
a = size(v,1)==3;
n = size(v,round(1+a));
V = permute(v,[round(2-a),3,round(1+a)]);
I = repmat(eye(3),[1,1,n]);
S = cross(repmat(V,[1,3]),I);
end

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

채택된 답변

Sean de Wolski
Sean de Wolski 2014년 6월 18일
X=[0 -x(3) x(2) ; x(3) 0 -x(1) ; -x(2) x(1) 0 ];
  댓글 수: 3
James Tursa
James Tursa 2014년 6월 18일
Take Sean's code and make a function out of it.
John D'Errico
John D'Errico 2014년 6월 19일
A great virtue of MATLAB (ok, almost any programming language) is the ability to write functions that do what you want. Making a skew-symmetric matrix from a vector is not something most people will ever need to do, so it is unlikely you would find a simple command to do it. However, since you can write functions that do anything you want, anything that you will do often, then do so. Personalize your version of MATLAB to include such tools that do what you have a need for.
In this case, a simple m-file would suffice. Or write a function handle if this is not something you will have a need for beyond today.
Finally, the code that Sean gives is easily vectorized to create a 3-d array, where each plane would be one such matrix.

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

추가 답변 (3개)

Sergei Sergienko
Sergei Sergienko 2020년 6월 5일
편집: Sergei Sergienko 2020년 6월 5일
There is special function for this in Matlab called skew
v = [1 2 3]';
skew(v)
ans =
0 -3 2
3 0 -1
-2 1 0
  댓글 수: 2
Mitsu
Mitsu 2020년 12월 3일
This function is not included, as of MATLAB 2019b; unless it is part of a specific additional toolbox.
Elyar Zavvari
Elyar Zavvari 2021년 8월 12일
You will find this function in matlab robotics toolbox by Kevin Lynch.

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


Raul Cajias
Raul Cajias 2016년 4월 20일
I think what you're looking for is the skewdec skewed function. However it's only available with the 'Robust Control Toolbox'.

Wit
Wit 2019년 9월 15일
편집: Wit 2019년 9월 15일
I think there is a "cross2Matrix" function:
x = [1; 2; 3];
cross2Matrix(x)
ans =
0 -3 2
3 0 -1
-2 1 0

카테고리

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

제품

Community Treasure Hunt

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

Start Hunting!

Translated by