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

436 visualizaciones (últimos 30 días)
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 comentarios
Sachin Goyal
Sachin Goyal el 16 de Feb. de 2023
X = cross([x x x],eye(3))
Thanacha Choopojcharoen
Thanacha Choopojcharoen el 12 de Oct. de 2023
Editada: Thanacha Choopojcharoen el 12 de Oct. de 2023
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

Iniciar sesión para comentar.

Respuesta aceptada

Sean de Wolski
Sean de Wolski el 18 de Jun. de 2014
X=[0 -x(3) x(2) ; x(3) 0 -x(1) ; -x(2) x(1) 0 ];
  3 comentarios
James Tursa
James Tursa el 18 de Jun. de 2014
Take Sean's code and make a function out of it.
John D'Errico
John D'Errico el 19 de Jun. de 2014
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.

Iniciar sesión para comentar.

Más respuestas (3)

Sergei Sergienko
Sergei Sergienko el 5 de Jun. de 2020
Editada: Sergei Sergienko el 5 de Jun. de 2020
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 comentarios
Mitsu
Mitsu el 3 de Dic. de 2020
This function is not included, as of MATLAB 2019b; unless it is part of a specific additional toolbox.
Elyar Zavvari
Elyar Zavvari el 12 de Ag. de 2021
You will find this function in matlab robotics toolbox by Kevin Lynch.

Iniciar sesión para comentar.


Raul Cajias
Raul Cajias el 20 de Abr. de 2016
I think what you're looking for is the skewdec skewed function. However it's only available with the 'Robust Control Toolbox'.

Wit
Wit el 15 de Sept. de 2019
Editada: Wit el 15 de Sept. de 2019
I think there is a "cross2Matrix" function:
x = [1; 2; 3];
cross2Matrix(x)
ans =
0 -3 2
3 0 -1
-2 1 0

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by