找回密码
 注册
Simdroid-非首页
查看: 122|回复: 6

怎样构造稀疏矩阵

[复制链接]
发表于 2011-4-5 22:57:16 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
要再次麻烦各位大侠了,呵呵
最新用matlab编有限元,遇到如附件中的稀疏矩阵,其中A,B为3*3的方阵,上标T表示转置,想构造具有M个对角分块矩阵A的稀疏阵,该怎么构造?
如:A=
7.96E+1300
09.62E+110
002.65E+13


B=
-4E+130-2E+13
04.0E+110
1.99E+1306.63E+12


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-4-5 23:12:47 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
这个需要自己写几行程序的吧。貌似没有相关函数。
回复 不支持

使用道具 举报

发表于 2011-4-6 05:47:42 | 显示全部楼层 来自 英国
这个问题不复杂,解决方法也不止一种。。用blkdiag()的话挺容易的。

方法之一是先构造一个m个A+1个A/2的对角线矩阵,再构造一个m个矩阵B组成的对角线矩阵并补0保证大小一样。然后矩阵1+矩阵2+矩阵2的转置就行了。

  1. %定义
  2. m=4;
  3. Adiag=[2 4 6];     %A的对角线元素
  4. B=[1,0,3;0,5,0;7,0,9];


  5. %M1是由m个 A 和一个 A/2组成的稀疏矩阵
  6. M1=diag([repmat(Adiag,1,m),Adiag/2]);

  7. %M2由矩阵B组成
  8. BB=cell(1,m);       %共计m个B矩阵
  9. [BB{:}]=deal(B);
  10. M2_0=blkdiag(BB{:});
  11. M2=[zeros(3*m,3),M2_0;zeros(3,3*m+3)];   %补0

  12. %M1,M2和M2的转置矩阵相加即可
  13. M=M1+M2+M2'
复制代码


M =

     2     0     0     1     0     3     0     0     0     0     0     0     0     0     0
     0     4     0     0     5     0     0     0     0     0     0     0     0     0     0
     0     0     6     7     0     9     0     0     0     0     0     0     0     0     0
     1     0     7     2     0     0     1     0     3     0     0     0     0     0     0
     0     5     0     0     4     0     0     5     0     0     0     0     0     0     0
     3     0     9     0     0     6     7     0     9     0     0     0     0     0     0
     0     0     0     1     0     7     2     0     0     1     0     3     0     0     0
     0     0     0     0     5     0     0     4     0     0     5     0     0     0     0
     0     0     0     3     0     9     0     0     6     7     0     9     0     0     0
     0     0     0     0     0     0     1     0     7     2     0     0     1     0     3
     0     0     0     0     0     0     0     5     0     0     4     0     0     5     0
     0     0     0     0     0     0     3     0     9     0     0     6     7     0     9
     0     0     0     0     0     0     0     0     0     1     0     7     1     0     0
     0     0     0     0     0     0     0     0     0     0     5     0     0     2     0
     0     0     0     0     0     0     0     0     0     3     0     9     0     0     3

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-6 08:28:42 | 显示全部楼层 来自 黑龙江哈尔滨
3# nwcwww
nwcwww 起的真早,我才刚刚看到,不过程序挺好的,我得看看cell的用法了,消化一下deal和bikdiag,呵呵
回复 不支持

使用道具 举报

发表于 2011-4-6 09:52:48 | 显示全部楼层 来自 河北廊坊
本帖最后由 qibbxxt 于 2011-4-6 10:00 编辑

3# nwcwww
不错,用稀疏矩阵的办法也能实现

  1. m=4;
  2. Adiag=[2 4 6];     %A的对角线元素
  3. B=[1,0,3;0,5,0;7,0,9];
  4. md = sparse(1:m+1,1:m+1,[ones(1,m),1/2],m+1,m+1);
  5. M = kron(md,spdiags(Adiag',0,length(Adiag),length(Adiag)))+...
  6.     kron(spdiags(ones(m+1,2),1,m+1,m+1),B)+...
  7.     kron(spdiags(ones(m+1,2),-1,m+1,m+1),B');
复制代码

  1. >> full(M)
复制代码
ans =
     2     0     0     1     0     3     0     0     0     0     0     0     0     0     0
     0     4     0     0     5     0     0     0     0     0     0     0     0     0     0
     0     0     6     7     0     9     0     0     0     0     0     0     0     0     0
     1     0     7     2     0     0     1     0     3     0     0     0     0     0     0
     0     5     0     0     4     0     0     5     0     0     0     0     0     0     0
     3     0     9     0     0     6     7     0     9     0     0     0     0     0     0
     0     0     0     1     0     7     2     0     0     1     0     3     0     0     0
     0     0     0     0     5     0     0     4     0     0     5     0     0     0     0
     0     0     0     3     0     9     0     0     6     7     0     9     0     0     0
     0     0     0     0     0     0     1     0     7     2     0     0     1     0     3
     0     0     0     0     0     0     0     5     0     0     4     0     0     5     0
     0     0     0     0     0     0     3     0     9     0     0     6     7     0     9
     0     0     0     0     0     0     0     0     0     1     0     7     1     0     0
     0     0     0     0     0     0     0     0     0     0     5     0     0     2     0
     0     0     0     0     0     0     0     0     0     3     0     9     0     0     3

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-6 10:54:09 | 显示全部楼层 来自 黑龙江哈尔滨
5# qibbxxt
版主太强大了,以前用软件计算时,总有一个Sparse组装,版主竟然也用上了,呵呵长了见识:lol
回复 不支持

使用道具 举报

发表于 2011-4-6 17:32:23 | 显示全部楼层 来自 陕西西安
5# qibbxxt
长见识了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-4 23:31 , Processed in 0.050550 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表