首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab/ Scilab/ R:在Scilab中创建块三对角矩阵

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

Stack Overflow用户
提问于 2014-12-17 20:23:11
回答 1查看 1.4K关注 0票数 0

我需要在Scilab中创建一个块三对角矩阵。更明确地说,我想设置一个M^2 X M^2矩阵,格式如下:

代码语言:javascript
运行
复制
  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×M矩阵。

我知道如何在"sysdiag“函数的帮助下创建块对角矩阵,但我还没有找到任何参考资料来轻松创建块三对角矩阵。

顺便说一下,给定矩阵B,C和D,我知道如何创建上面的矩阵。

代码语言:javascript
运行
复制
 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中完成,有人能帮我吗?

我们非常感谢您的建议。

非常感谢

EN

Stack Overflow用户

发布于 2015-01-09 09:44:13

在Scilab中实现为.*.Kronecker product可以提供帮助。给定你的帖子中的M,B,C,D,使用单位矩阵的Kronecker产品创建块对角矩阵,就像你使用sysdiag得到的那样:

代码语言:javascript
运行
复制
eye(M,M).*.B

但是,Kronecker乘积也可以与其他矩阵一起使用。将1放在主对角线上,并将Kronecker乘积与C相乘,以获得所需位置的C块:

代码语言:javascript
运行
复制
diag(ones(M-1,1),1).*.C

D也是如此:

代码语言:javascript
运行
复制
diag(ones(M-1,1),-1).*.D

在一行代码中,

代码语言:javascript
运行
复制
A = eye(M,M).*.B + diag(ones(M-1,1),1).*.C + diag(ones(M-1,1),-1).*.D

就能完成这项工作。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27525563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档