gpt4 book ai didi

matlab - mldivide 与 (LU & linsolve)

转载 作者:太空宇宙 更新时间:2023-11-03 19:58:34 25 4
gpt4 key购买 nike

这个问题可能过于宽泛,无法在此处发布,但我会尽量具体。如果您仍然认为它过于宽泛,我会删除它。

  • 查看底部的 EDIT,了解我对这个主题的最终想法。
  • 如果您可以访问并行计算工具箱并拥有 NVIDIA GPU,还可以查看 Ander Biguri 的回答。

我的问题:

我正在使用 Newmark 方案(二阶隐式)求解动态方程,这涉及求解大量 A*x=b 形式的线性系统对于 x .

我已经优化了所有不涉及求解线性系统的代码。目前,线性系统的求解占用了整个过程中高达 70% 的计算时间。

虽然我使用了 MATLAB 的 linsolve ,但我的矩阵 A没有任何可用作 opts 的属性输入 linsolve .

想法:

linsolve 的文档中所示:

If A has the properties in opts, linsolve is faster than mldivide, because linsolve does not perform any tests to verify that A has the specified properties

据我所知,通过使用 mldivide ,MATLAB 将使用 LU 分解作为我的矩阵 A除了方形之外没有任何特定属性。

我的问题:

所以我想知道先分解 A 是否可以节省一些时间使用 MATLAB 的 lu , 然后将这些提供给 linsolve 以解决 x = U\(L\b)opts分别为上三角和下三角。这样我就可以防止 MATLAB 在 mldivide 期间进行所有属性检查。过程。

注意:我绝对不希望获得大量时间。但在长达一周的计算中,即使是 2% 也很重要..

您可能会问,为什么我不自己试试呢?好吧,我的计算大约要运行到星期二,我想问问是否有人已经尝试过这个并获得了时间,消除了由于 mldivide 检查矩阵属性而导致的开销。

玩具示例:

A=randn(2500);
% Getting A to be non singular
A=A.'*A;
x_=randn(2500,1);
b=A*x_;
clear x_

% Case 1 : mldivide
tic
for ii=1:100

x=A\b;

end
out=toc;
disp(['Case 1 time per iteration :' num2str((out)/100)]);

% Case 2 : LU+linsolve

opts1.LT=true;
opts2.UT=true;

tic;
for ii=1:100

[L,U]=lu(A);

% It seems that these could be directly replaced by U\(L\b) as mldivide check for triangularity first
Tmp=linsolve(L,b,opts1);
x=linsolve(U,Tmp,opts2);

end
out2=toc;

disp(['Case 2 time per iteration :' num2str((out2)/100)]);

编辑

所以我有机会尝试一些事情。

我之前错过了 linsolve 的文档如果你不指定任何 opts输入它将默认使用 LU解算器,这就是我想要的。用它做一些时间测试(并考虑到@rayryeng 对“timeit 那个坏男孩”的评论),与 mldivide 相比,它节省了大约 2~3% 的处理时间。 , 如下所示。就时间增益而言,这不是什么大问题,但对于长达一周的计算来说,这是不可忽视的事情。

timeit 1626*1626 上的结果线性系统:

mldivide :

 t1 =

0.102149773097083

linsolve :

t2 =

0.099272037768204

亲戚: 0.028171725121151

最佳答案

我知道您没有 NVIDIA GPU 和并行计算工具箱,但如果有,这会起作用:

如果您将代码中的第二个测试替换为:

tic;

for ii=1:10
A2=gpuArray(A); % so we account for memory management
b2=gpuArray(b);
x=A2\b2;
end
out2=toc;

我的电脑说(CPU 与 GPU)

Case 1 time per iteration :0.011881
Case 2 time per iteration :0.0052003

关于matlab - mldivide 与 (LU & linsolve),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40928442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com