公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

+1 投票
3.9k 浏览

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

 

分类:方程 | 用户: 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

 

用户: 野鹤 (4.9k 分)
采纳于 用户: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.1k 分)
这个方法是很有新意。很巧妙。
+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.1k 分)
...