Линейные комбинации всех возможных пар строк матрицы в Matlab - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть вектор 2x1 в Matlab, который называется x.

clear
rng default
x=[5;6]; %[x1;x2]

Я применяю два линейных преобразования к x и получаю 6x1 векторы A1 и A2.

Линейное преобразование 1

B1=10^6* [1 1;
          0 0;
          0 0;
          0 0;
          0 0;
          0 0] - 10^6 * [0 0;
                         1 1;
                         0 0;
                         0 0;
                         0 0;
                         0 0] + [0  0;
                                 0  0;
                                -1  0;
                                 0 -1;
                                -1  1;
                                 0  0];
A1=B1*x; 
%A1=[10^6*(x1+x2); -10^6(x1+x2); -x1; -x2; x2-x1; 0]

Линейное преобразование 2

B2=10^6* [1 1;
          0 0;
          0 0;
          0 0;
          0 0;
          0 0] - 10^6 * [0 0;
                         1 1;
                         0 0;
                         0 0;
                         0 0;
                         0 0] + [0  0;
                                 0  0;
                                -1  1;
                                 0 -1;
                                -1  0;
                                 0  0];
A2=B2*x; 
%A2=[10^6*(x1+x2); -10^6(x1+x2); x2-x1; -x1; -x2; 0]

Пусть y будет вектором 1x2 с первым элементом y1, выбранным из A1, и вторым элементом y2, выбранным из A2. Поскольку A1 и A2 имеют элементы 6, y может принимать значения 36. Пусть Y будет матричным списком 36x2 в каждой строке возможного значения y.

Следовательно,

%Y=[10^6*(x1+x2)  10^6*(x1+x2);
%  10^6*(x1+x2)  -10^6*(x1+x2);
%  10^6*(x1+x2)   x2-x1;
%  10^6*(x1+x2)  -x2;
%  10^6*(x1+x2)  -x1;
%  10^6*(x1+x2)  -0;
% -10^6*(x1+x2)   10^6*(x1+x2);
%  ...]

Я бы хотел, чтобы вы помогли записать код, строящий матрицу C размера (2K)x2, такую, что

  • K=nchoosek(36,2), т.е. K=36!/(2*34!)=630

  • C*x=D, где D размера 2Kx1 сообщает, для каждой возможной пары (i,j) строк из Y,

[-Y(i,1)+Y(j,1); -Y(i,2)+Y(j,2)]

Следовательно,

%D=[-10^6*(x1+x2)+10^6*(x1+x2); %rows 1,2 (first coordinate)
%   -10^6*(x1+x2)-10^6*(x1+x2); %rows 1,2 (second coordinate)
%   -10^6*(x1+x2)+10^6*(x1+x2); %rows 1,3 (first coordinate)
%   -10^6*(x1+x2)+x2-x1;        %rows 1,3 (second coordinate)
%   ...]

Комментарии: позвольте мне уточнить, что я знаю, какие элементы должны быть внутри C, чтобы получить желаемый D, но я бы хотел не вставлять их "вручную". Должен быть какой-то «шаблон», позволяющий быстро собрать C.

Также, в идеале, я бы хотел, чтобы код не полагался на конкретное содержимое B1 и B2, то есть: предположим, что я заменяю B1 и B2 на другие матрицы, производящие различные линейные преобразования x; Я хотел бы, чтобы код для получения C оставался действительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...