Filter löschen
Filter löschen

Skew symmetric matrix generation

73 Ansichten (letzte 30 Tage)
Mohammed Kagalwala
Mohammed Kagalwala am 23 Nov. 2019
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 Kommentare
David Hill
David Hill am 23 Nov. 2019
an example would be helpful
Mohammed Kagalwala
Mohammed Kagalwala am 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]))

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Mohammed Kagalwala
Mohammed Kagalwala am 23 Nov. 2019
Bearbeitet: Mohammed Kagalwala am 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));

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by