0

我需要在 Matlab 中制作一个矩阵矩阵,以便以后在求解线性方程组时使用。

我知道一种解决方案是创建一个 mxn 单元格,并用矩阵或向量填充每个单元格,但是您不能使用带有 linsolve() 的单元格,所以这对我没有帮助。

如何在 Matlab 中有一个矩阵矩阵,或者有没有办法在单元数据结构上使用 linsolve?

谢谢!

澄清:

我有一个细胞结构

    A =  [25x25 double]    [25x1 double]    [25x1 double]
         [ 1x25 double]    [          0]    [          0]
         [ 1x25 double]    [          0]    [          0]

和另一个

    b = [          0]
        [25x1 double]
        [          1]

而我想做的linsolve(A, b)。这可能吗?

4

1 回答 1

0

目前尚不清楚您要做什么(这可能是该函数linsolve不接受单元格的原因)。

如果您想求解 和 之间的所有组合,即系统Ab

A{1,1}*x = b{1}   A{1,1}*x = b{2}   A{1,1}*x = b{3}
A{2,1}*x = b{1}   A{2,1}*x = b{2}   A{2,1}*x = b{3}
...               ...               ...
A{1,2}*x = b{1}   A{1,2}*x = b{2}   A{1,2}*x = b{3}
A{2,2}*x = b{1}   A{2,2}*x = b{2}   A{2,2}*x = b{3}
...               ...               ...
A{3,3}*x = b{1}   A{3,3}*x = b{2}   A{3,3}*x = b{3}

那么你可以通过发出来做到这一点

answers = cellfun(@(bb) ...
    cellfun(@(aa) linsolve(aa, bb), A, 'uni',false), ...
    b, 'uni',false)

另一方面,如果您想求解 和 的每一对应行即系统Ab

A{1,1}*x = b{1}   A{2,1}*x = b{2}   A{3,1}*x = b{3}
A{1,2}*x = b{1}   A{2,2}*x = b{2}   A{3,2}*x = b{3}
A{1,3}*x = b{1}   A{2,3}*x = b{2}   A{3,3}*x = b{3}    

你可以通过发行来做到这一点

answers = cell(3,1);
for ii = 1:3
    answers{ii} = ... 
        cellfun(@(aa) linsolve(aa, bb{ii}), A(ii,:), 'uni',false);
end

(如果有人看到如何矢量化最后一个,请告诉我:)

于 2012-08-22T17:51:39.307 回答