我需要在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)
。这可能吗?
答案 0 :(得分:0)
目前尚不清楚你想做什么(这可能是函数linsolve
不接受单元格的原因)。
如果您要解决A
和b
之间的所有组合,即系统
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)
另一方面,如果您要解决A
和b
的每个对应行,即系统
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
(如果有人看到如何对最后一个进行矢量化,请告诉我:)