块对角矩阵
想请教个问题。块对角矩阵的形成,可以用blkdiag,这个函数生成的块对角矩阵是没有重叠的,现在我要生成一个有重叠的块对角矩阵。做个举例以说明问题。A为30×30的矩阵,现在要生成50×50的矩阵B,B为带状矩阵,B(1:20,1:20)=A(1:20,1:20),B(31:50,31:50)=A(31:50,31:50),而B(21:30,21:30)=2×A(21:30,21:30); 即B(21:30,21:30)为重叠的部分。
这样表述问题应该说清楚问题了吧,当然,我遇到的不是仅仅两个A形成,比如任意个A(30×30),重叠部分是10×10,由n个A形成的矩阵就是(2×n+1)×10了。
请高手帮忙解答下。谢谢 楼主的意思是这样吗?
A为30×30的矩阵,现在要生成50×50的矩阵B
B(1:20,1:20)=A(1:20,1:20)
B(31:50,31:50)=A(21:30,21:30)
B(21:30,21:30)=A(21:30,21:30)+A(1:10,1:10)
回复 楼主 skyismine 的帖子
找了下! 好像没现成的函数!?我想使用loop应该就可以了
回复 板凳 ChaChing 的帖子
仔细想了一下,楼主的意思和公式表达是不符的。如果使用A(1:20,1:20)和A(21:30,21:30)赋值的话,A(21:30,1:20)和A(1:20,21:30)就被忽略掉了。在没找到合适的函数的情况下,我想下面的循环应该是可用的。clear;clc
m=30;
mm=10;
n=8;
A=randn(m);
B=zeros((m-mm)*(n-1)+m);
B(1:m,1:m)=A;
for i=1:n-1
B(i*(m-mm)+1:i*(m-mm)+30,i*(m-mm)+1:i*(m-mm)+30)=A+B(i*(m-mm)+1:i*(m-mm)+30,i*(m-mm)+1:i*(m-mm)+30);
end
spy(B)
[ 本帖最后由 sogooda 于 2008-12-18 22:48 编辑 ]
回复 地板 sogooda 的帖子
我的意思同你! 我想楼主可能不小心表达错了! 本来亦想帮忙写, 但有点懒得programing! 没动力?你起头, 我稍修改下, 我比较习惯喜欢这个样, 参考下!
使用ones好检查程序有无错, 重覆的使用变数容易看, 我想你亦应该如此, 可能太赶忽略!
m=30; mm=10; n=8;
A=ones(m); B=zeros((m-mm)*(n-1)+m); B(1:m,1:m)=A;
for i=1:n-1
pp=i*(m-mm)+1:i*(m-mm)+30; B(pp,pp)=A+B(pp,pp);
end
spy(B)
[ 本帖最后由 ChaChing 于 2008-12-19 01:12 编辑 ]
回复 楼主 skyismine 的帖子
为何有此需求? 方便分享? 感谢各位的热情解答,我后来也编出来了,我的初衷是想避开循环,通过矩阵的移动等操作实现,因为循环会影响速度。还是要感谢各位。:@)回复 7楼 skyismine 的帖子
方法可否分享一下?
页:
[1]