Skew symmetric matrix generation

87 views (last 30 days)
Hi,
I'm currently stuck on converting a 3*N x 1, where N is an integer value, vector into chunks of skew symmetric matrices. For example, consider the following vector A = [a;b], where both a and b are 3x1 vectors (here N = 2). I wish to convert this to the following, A_skew = diag(skew(a),skew(b)), a 6x6 matrix. I have a skew_vec() function written that takes a single 3x1 vector as an input and outputs a 3x3 skew-symmetric vector. I know I can use a for loop to solve my problem, however I'm hoping someone else has a better solution (possibly through some smart logical indexing or @(x) ?)
Thank you for the help !
  2 Comments
Mohammed Kagalwala
Mohammed Kagalwala on 23 Nov 2019
Sure so let's say we have A = [1 0 0 2 0 0], I wish to create the following matrix
A_skew = [0 0 0 0 0 0
0 0 -1 0 0 0
0 1 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 -2
0 0 0 0 2 0]
which is simply diag(skew([1 0 0]), skew([2 0 0]))

Sign in to comment.

Accepted Answer

Mohammed Kagalwala
Mohammed Kagalwala on 23 Nov 2019
Edited: Mohammed Kagalwala on 23 Nov 2019
s = [1 0 0 2 0 0 3 1 2]';
% find size and logical index
N = size(s,1);
tf1 = mod(0:N-1, 3) == 0;
tf2 = mod(0:N-1, 3) == 1;
tf3 = mod(0:N-1, 3) == 2;
ansref = zeros(N,N); % initalize answer
%perform assignment
ansref(tf2,tf3) = diag(-s(tf1));
ansref(tf3,tf2) = diag(s(tf1));
ansref(tf1,tf3) = diag(s(tf2));
ansref(tf3,tf1) = diag(-s(tf2));
ansref(tf1,tf2) = diag(-s(tf3));
ansref(tf2,tf1) = diag(s(tf3));

More Answers (0)

Community Treasure Hunt

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

Start Hunting!