Matlab / Scilab / R:在Scilab中创建一个块三对角矩阵

时间:2014-12-17 12:23:11

标签: r matlab matrix scilab

我需要在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中执行,我仍然想知道。 有人可以帮帮我吗?

所有建议都表示赞赏。

非常感谢

1 个答案:

答案 0 :(得分:0)

在Scilab中以.*.实现的Kronecker product可以提供帮助。鉴于您的帖子中的M,B,C,D,具有单位矩阵的Kronecker积创建了块对角矩阵,就像您使用sysdiag得到的那样:

eye(M,M).*.B

但Kronecker产品也可以与其他矩阵一起使用。将1s放在主对角线上方,并将Kronecker产品与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

完成这项工作。