反斜杠和三角矩阵

9的观点(30天)
赫韦格
赫韦格 2013年12月13日
评论道: 马特·J 2013年12月20日
我使用一个LU分解矩阵a(广场、稀疏、复杂、对称(非厄米)):
(M1, M2, P, Q, R) = lu (A);
然后我将反斜杠符应用于这些结果矩阵建立舒尔补充:
T = Q * (M2 \ (M1 \ (P * (R \ B))));
如果B是一个矢量,第二行执行足够快。但当B是一个方阵,它在我的例子中,这个操作非常慢,因为Matlab在内部循环通过B的列(这是我的结论后做了一些抽搐/ toc)。第二行代码运行在单个线程使用Matlab 2013 b这个64位使这更慢。
加速这个的好方法是什么?parfor循环在B的列在Matlab对我没用2013 B由于讨论的原因 //www.tianjin-qmedu.com/.au/matlabcentral/answers/59250-error-with-parfor-and-big-matrices (尽管Edric Ellis说它被固定在2013年)。什么我可以试试吗?
谢谢!
2的评论
赫韦格
赫韦格 2013年12月17日
嗨Edric,
下面是这PARFOR失败的代码。一个是一个大型的有限元矩阵,不小于5 mb,因此我不能把它。Csf是右边的大小(Csf, 2) > 2000。
(M1, M2, P, Q, R) = lu (A);
temp = P * (R \ Csf);
temp2 = 0(大小(临时));
matlabpool4
parfor3 = 1:尺寸(temp, 2)
temp2 (: iii) = M2 \ (M1 \ temp (:, iii));
结束
matlabpool关闭
temp = Q1 * temp2;
我可以提供一个dropbox链接矩阵a和Csf如果对你来说是有用的。
赫韦格

登录置评。

接受的答案

马特·J
马特·J 2013年12月17日
编辑:马特·J 2013年12月17日
你的行动看起来相当于
T = \ B
我认为这是最快的。注意,反斜杠已经自己的内部lu分解,但优化多线程。你似乎只是重复分解工作。此外,你变成了一个反斜杠操作分成三个,可能引发内部lu分解的三倍。
8的评论
马特·J
马特·J 2013年12月20日
尽管如此,我还是想学习memmapfile和SPMD是否可以一起工作。
不知道为什么他们不会,但是你可以试一试MATFILE代替MEMMAPFILE。

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!