使用矢量化解决多个线性系统

Aab*_*baz 6 matlab linear-algebra

对不起,如果这是显而易见的,但我搜索了一段时间,没有找到任何东西(或错过了).

我试图解决Ax = B形式的线性系统,其中A为4x4矩阵,B为4x1向量.

我知道对于单个系统我可以mldivide用来获取x : x=A\B.

但是我试图解决大量系统(可能> 10000)并且我不愿意使用for循环因为我被告知它在许多MATLAB问题中比矩阵公式慢得多.

那么我的问题是:有没有办法用A 4x4x NB a 4x N矩阵求解Ax = B

PS:我不知道它是否重要,但B矢量对于所有系统都是相同的.

Tom*_*Tom 5

你应该使用for循环.如果A保持相同并且B发生变化,预计算分解并重新使用它可能会有好处.但对于那些A变化并B保持不变的问题,除了解决N个线性系统之外别无选择.

你不应该过多担心循环的性能成本:MATLAB JIT编译器意味着循环在最近的MATLAB版本上通常可以同样快.


Amr*_*mro 5

我认为你不能进一步优化这一点.正如@Tom所解释的那样,由于这A是一个变化,A事先考虑各种事件是没有好处的......

除了你提到的尺寸外,循环解决方案非常快:

A = rand(4,4,10000);
B = rand(4,1);          %# same for all linear systems

tic
X = zeros(4,size(A,3));
for i=1:size(A,3)
    X(:,i) = A(:,:,i)\B;
end
toc
Run Code Online (Sandbox Code Playgroud)

经过时间为0.168101秒.