你可以在由矩阵和向量组成的单元格上使用linsolve吗?

时间:2012-08-22 16:57:12

标签: matlab matrix cell

我需要在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)。这可能吗?

1 个答案:

答案 0 :(得分: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

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