我在Matlab中有一个2x1
向量,称为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
的{{1}}报告,针对(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
保持有效。