查看: 2416|回复: 7|关注: 0

[已答复] 求助! cellfun 对分块矩阵求逆

[复制链接]

新手

5 麦片

财富积分


050


3

主题

13

帖子

0

最佳答案
发表于 2019-2-26 22:56:28 | 显示全部楼层 |阅读模式
对一个比较大的矩阵A(10000,10000)求逆。
为了避免内存溢出,先用 mat2cell 对A进行分块,每个小块为10*10的矩阵,请问如何对这个分块矩阵进行求逆呢?


不胜感激
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

权威

4388 麦片

财富积分



4

主题

4423

帖子

946

最佳答案
  • 关注者: 214
发表于 2019-2-26 23:24:10 | 显示全部楼层
A=rand(1e4);
tic,B=inv(A);toc
Elapsed time is 16.581825 seconds
一般的分块,并没有什么意义。你还分成这么多块。
你觉得如何求整个矩阵的逆矩阵啊!
分太多的话,很难理解里面的逻辑。看看分为2*2块的公式你就可以感觉一下。
除非特殊的矩阵。
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


3

主题

13

帖子

0

最佳答案
 楼主| 发表于 2019-2-27 10:33:41 | 显示全部楼层
矩阵是分块周期三对角矩阵,直接求逆16s还是太长,所以想尝试一下分块矩阵运算会不会更快一些

分块周期三对角矩阵

分块周期三对角矩阵
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

权威

4388 麦片

财富积分



4

主题

4423

帖子

946

最佳答案
  • 关注者: 214
发表于 2019-2-27 10:45:46 | 显示全部楼层
唯米 发表于 2019-2-27 10:33
矩阵是分块周期三对角矩阵,直接求逆16s还是太长,所以想尝试一下分块矩阵运算会不会更快一些
...

分块对角矩阵的逆等于其各个非零子块分别求逆
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


3

主题

13

帖子

0

最佳答案
 楼主| 发表于 2019-2-27 11:02:08 | 显示全部楼层
maple1314168 发表于 2019-2-27 10:45
分块对角矩阵的逆等于其各个非零子块分别求逆

这个不是对角矩阵,是三对角矩阵,不能简单这么套用吧
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

权威

4388 麦片

财富积分



4

主题

4423

帖子

946

最佳答案
  • 关注者: 214
发表于 2019-2-27 11:13:33 | 显示全部楼层
本帖最后由 maple1314168 于 2019-2-27 15:57 编辑
唯米 发表于 2019-2-27 11:02
这个不是对角矩阵,是三对角矩阵,不能简单这么套用吧

16s,嫌多的话,可以更新电脑。

带状矩阵的话,自己搜索一下。
https://wenku.baidu.com/view/4e4fe308ccbff121dc368310.html
https://wenku.baidu.com/view/4e4fe308ccbff121dc368310.html

或者 试试 稀疏矩阵求逆
5K*5K
A=diag(rand(1,4999)*2,-1)+diag(rand(1,5000)*2)+diag(rand(1,4999)*2,1);
tic,inv(A);toc
Elapsed time is 4.534681 seconds.
B=sparse(A);
tic,inv(B);toc
Elapsed time is 0.579318 seconds.

或者考虑一下,一定要求逆吗?




回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


3

主题

13

帖子

0

最佳答案
 楼主| 发表于 2019-2-27 20:59:27 | 显示全部楼层
maple1314168 发表于 2019-2-27 11:13
16s,嫌多的话,可以更新电脑。

带状矩阵的话,自己搜索一下。

好的,很有启发,谢谢!
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


3

主题

13

帖子

0

最佳答案
 楼主| 发表于 2019-2-27 21:05:13 | 显示全部楼层
唯米 发表于 2019-2-27 20:59
好的,很有启发,谢谢!

您好,再向您请教遇到的一个很奇怪的问题。
两个GPU上的变量,将一个变量赋值给另外一个大的预设变量,却提示内存溢出,您知道这是什么原因么。


Sigma_Retard_lead1=gpuArray.zeros(MaxZs*Nband,MaxZs*Nband,N_Ky,N_energy);
Sigma_Retard_lead1_egy=gpuArray.zeros(MaxZs*Nband,MaxZs*Nband,N_Ky);
1.png
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

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