Matlab如何创建阶数较高的分块对角矩阵

Matlab内置函数blkdiag,但需要把对角线的每个块都手动写在函数里,比如
 

a=ones(1,5);

b=blkdiag(a,a,a);

得到b为

1    1    1    1    1    0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    1    1    1    1    1    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0    1    1    1    1    1

但是,当需要的块非常多时,比如对角线一共要有1000个块,就没办法手动一个一个输入在括号里了。网上没找到办法,自己尝试用cell写了一个,实测成功。核心思想就是cell对角线放a,非对角线放0向量,最后cell2mat转化为矩阵。

以对角线3个为例(1000个只需将n=3改为n=1000即可),代码如下

n=3;%对角线有几个块
m=5;%每个分块有几个1
c=cell(n,n);

 for i=1:n
     for j=1:n
         if i==j
             c(i,j)={ones(1,m)};
         else
             c(i,j)={zeros(1,m)};
         end
     end
 end
 
 c=cell2mat(c);

计算结果

1	1	1	1	1	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	1	1	1	1	1	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	1	1	1	1	1

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值