我需要在Scilab中创建一个块三对角矩阵。更明确地说,我想设置一个格式的 M^2 X M^2 矩阵:
B C 0 ... 0 0
D B C 0 ... 0
0 D B C ... 0
0 ... ... ... ...
0 0 ... D B C
0 0 0 ... D B
其中 B、C 和 D 是 M X M 矩阵。
我知道如何在"sysdiag"函数的帮助下创建块对角矩阵,但我还没有找到任何轻松创建块三对角矩阵的参考。
顺便说一下,给定矩阵 B、C 和 D,我知道如何创建上面的矩阵。
auxA = sysdiag(B,B);
auxC = C;
auxD = D;
for i=1:2*M-1
auxA = sysdiag(auxA,B);
auxC = sysdiag(auxC,C);
auxD = sysdiag(auxD,D);
end
A = auxA + [zeros((2*M+1)^2 -(2*M+1),2*M+1) auxC ;zeros(2*M+1,2*M+1) zeros(2*M+1,(2*M+1)^2 -(2*M+1)) ] + [zeros(2*M+1,(2*M+1)^2 -(2*M+1)) zeros(2*M+1,2*M+1); auxD zeros((2*M+1)^2 -(2*M+1),2*M+1)];
我仍然想知道是否有一个函数可以直接在Scilab,Matlab或R中执行此操作。有人可以帮我吗?
所有的建议都值得赞赏。
非常感谢
Kronecker产品,在Scilab中实现.*.
,可以提供帮助。给定 M、B、C、D 如您的帖子中所示,带有单位矩阵的克罗内克乘积创建了块对角矩阵,就像您在sysdiag
中得到的那样:
eye(M,M).*.B
但克罗内克乘积也可以与其他矩阵一起使用。将 1s 放在主对角线上方,取克罗内克乘积与 C 以获得所需位置的 C 块:
diag(ones(M-1,1),1).*.C
同样,对于 D:
diag(ones(M-1,1),-1).*.D
在一行中,
A = eye(M,M).*.B + diag(ones(M-1,1),1).*.C + diag(ones(M-1,1),-1).*.D
做这项工作。