Matlab 当a为[3x3xN]时,即不止一个矩阵时,有没有解决系统Ax=B的捷径?

Matlab 当a为[3x3xN]时,即不止一个矩阵时,有没有解决系统Ax=B的捷径?,matlab,Matlab,我想尝试在没有循环的情况下实现它 我有一个,作为[3x3xN]或[3,3,N],对于每个N,它是一个不同的矩阵 B作为[3x1xN]当然 我如何解决它而不做一个循环,每次都做a^-1*B Z = cellfun(@(a,b) a\b, ... %# Solve for each pair num2cell(A,[1 2]), ... %# Make a cell array containing each slice num2cell(B,[1 2

我想尝试在没有循环的情况下实现它

我有一个,作为[3x3xN]或[3,3,N],对于每个N,它是一个不同的矩阵

B作为[3x1xN]当然

我如何解决它而不做一个循环,每次都做a^-1*B

Z = cellfun(@(a,b) a\b, ... %# Solve for each pair
            num2cell(A,[1 2]), ... %# Make a cell array containing each slice
            num2cell(B,[1 2]), ... %# Make a cell array containing each slice
            'UniformOutput',false);
Z = cat(3,Z{:}); %# Merge the results to a 3x1xN array
有关所用功能的更多详细信息,请参阅和文档

让我们将其速度与for循环进行比较:

clc, clear

N = 100000;
D = 10;
A = rand(D,D,N);
B = rand(D,1,N);

tic
Z = cellfun(@(a,b) a\b, ...
            num2cell(A,[1 2]),num2cell(B,[1 2]),'UniformOutput',false);
Z = cat(3,Z{:});
toc

tic
Z2 = zeros(D,1,N);
for i = 1:N
    Z2(:,:,i) = A(:,:,i) \ B(:,:,i);
end
toc

all(isequal(Z,Z2))
我的结果如下:

Elapsed time is 2.130507 seconds.
Elapsed time is 1.306873 seconds.

我尝试了不同的
D
值,得到的比率总是相似的。乔纳斯的赌注是正确的

与其使用
[3x3xN]
[3x1xN]
,为什么不使用
[3x3N]
[3xN]
?如果你在寻找相同的
x
每次迭代,它就会变成一个更大的矩阵,我需要求解N个方程,每个方程都是不同的。每一个都是由Ax=B给出的,在这种情况下,你必须分别求解它们,这意味着你将为每一个方程计算A^-1*B@petrichor在他们的回答中似乎有一种简洁的方法。我打赌循环会快得多。@YNWA:更酷和更可读(=可维护)并不总是同义词!