公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
9.0k 浏览

有什么可以快速生成下面矩阵的办法吗,就是想通过输入分块矩阵合成一个大的矩阵。

 

分类:方程 | 用户: WMN7 (606 分)

4 个回答

+3 投票
 
已采纳

主要使用 ArrayFlatten,配合使用 DiagonalMatrix,可以简化点儿。

m1 = {{1, 2}, {3, 4}};
m2 = {{1, 2, 3}, {4, 5, 6}};
m3 = {{1, 2}, {3, 4}, {5, 6}};
m4 = {{1}};
mm = Hold /@ {m1, m2, m3, m4};(*Hold函数,让DiagonalMatrix把mm当成一维列表*)

m = ArrayFlatten[ReleaseHold[DiagonalMatrix[mm]]];(*拼接分块矩阵*)

m // MatrixForm

 

用户: 野鹤 (5.1k 分)
采纳于 用户:WMN7
直接ArrayFlatten就好了...
当有很多个分块矩阵时,DiagonalMatrix可以简化输入。
比如,输入5阶对角矩阵时,两个的差异就能看出来了:
ArrayFlatten[DiagonalMatrix[{m1, m2, m3, m4, m5}]]
ArrayFlatten[{{m1, 0, 0, 0, 0}, {0, m2, 0, 0, 0}, {0, 0, m3, 0, 0}, {0, 0, 0, m4, 0}, {0, 0, 0, 0, m5}}]
+4 投票

这种情况其实更适合用SparseArray:

mat = SparseArray[Band[{1, 1}] -> {m1, m2, m3, m4}];

 

用户: xzczd (2.2k 分)
这个方法是很有新意。很巧妙。
+2 投票
直接ArrayFlatten就好啦~
m1={{1,2},{3,4}};
m2={{1,2,3},{4,5,6},{7,8,9}};
m3={{1}};
m4={{1,2,3},{4,5,6}};
m5={{1,2},{3,4},{5,6}};
ArrayFlatten[{{m1,0,0},{0,m2,0},{0,0,m3}}]//MatrixForm
ArrayFlatten[{{m1,0,0},{0,m4,0},{0,0,m5}}]//MatrixForm

 

用户: jiaoeyushushu (161 分)
+2 投票
m1 = {{1, 2}, {3, 4}};
m2 = {{1, 2, 3}, {4, 5, 6}};
m3 = {{1, 2}, {3, 4}, {5, 6}};
m4 = {{1}};

DiagonalMatrix[Unevaluated@{m1, m2, m3, m4}] //ArrayFlatten // MatrixForm

https://mathematica.stackexchange.com/a/19779/21532

用户: Lozmlve*永 (1.2k 分)
...