如何重新排序矩阵的行和列乘以由(i,j)索引的向量

时间:2018-02-16 00:52:44

标签: matlab math linear-algebra

我正在尝试构建一个特定的矩阵A,它将列向量v= [p_0,0; p_0,1; ... p_0,N; p_1,0; ...; p_N,N]相乘。

我知道所需的矩阵(B说)如果向量v按照第一个之前的第二个索引排序所给出的顺序重新排列(即如果v[p_0,0; p_1,0; ... p_N,0; p_0,1; ...; p_N,N]) ,但是想重新排列此矩阵的行和列以获得A,以便它将正确排序的v相乘。

示例:

B = 
   -2.6667    1.0000         0         0         0         0         0         0         0
   -0.5000         0    0.5000         0         0         0         0         0         0
         0   -1.0000   -0.4706         0         0         0         0         0         0
         0         0         0   -2.6667    1.0000         0         0         0         0
         0         0         0   -0.5000         0    0.5000         0         0         0
         0         0         0         0   -1.0000   -0.4706         0         0         0
         0         0         0         0         0         0   -2.6667    1.0000         0
         0         0         0         0         0         0   -0.5000         0    0.5000
         0         0         0         0         0         0         0   -1.0000   -0.4706

以错误的顺序乘以v

p_0,0
p_1,0 
p_2,0
p_0,1
p_1,1
p_2,1
p_0,2
p_1,2
p_2,2

1 个答案:

答案 0 :(得分:0)

只要我理解,您希望按以下顺序将矩阵B转换为矩阵A

v1= [p_0,0; p_0,1; ... p_0,N; p_1,0; ...; p_N,N]

v2=[p_0,0; p_1,0; ... p_N,0; p_0,1; ...; p_N,N]

其中A*v1等于B*v2

为此,您需要交换矩阵的每一行。

试试这段代码:

m=length(B);   % m is equal to NxN
N=sqrt(m);
A=zeros(m,m);
for i=0:N-1
    for j=0:N-1
        A(j+i*N+1,:)=B(i+N*j+1,:);
    end
end