我正在尝试构建一个特定的矩阵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
答案 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