在matlab中存储矩阵的多个幂

时间:2015-03-17 13:30:36

标签: arrays matlab matrix

我有1000个矩阵,尺寸为2x2。 我现在需要做的是获得这些矩阵的30个连续幂(A ^ 2,A ^ 3 ...... A ^ 30)并将它们全部存储起来。

我找到了一个建议使用bsxfun的主题: Vectorizing the creation of a matrix of successive powers 但是,bsxfun不适用于单元格数组("使用bsxfun时出错) 操作数必须是数字数组")。

我该怎么办? PS。第二个问题:一旦我拥有它们,我想绘制4个图形(每个图形对应于2x2矩阵的1个元素),其中30个位置(x轴)将显示置信带(第16和第84百分位数)。

编辑:有人链接到与我链接的问题类似的问题。根据我的理解,问题是关于一个向量,而不是矩阵数组。

2 个答案:

答案 0 :(得分:0)

您需要使用cellfun将矩阵复制30次才能执行此操作。例如,

a = repmat(A{1},1,30);% Select one of your A matrices
b = num2cell(1:30);
x = cellfun(@(a,b) a^b,a,b,'UniformOutput',false)

由于你需要为A的每个元素运行cellfun,另一种方法是使用arrayfun,如下所示。

a = A{1};
b = 1:30;
x = arrayfun(@(b) a^b,b,'UniformOutput',false)

答案 1 :(得分:0)

假设你的数组A2-by-2-by-1000,这里有两个循环让事情有效:

A = rand(2,2,1000);
K = 30;
%%
N = size(A,3);
APower = zeros(2,2,N,K);
APower(:,:,:,1) = A;
for i = 1:N
    for k = 2:K
        APower(:,:,i,k) = A(:,:,i)*APower(:,:,i,k-1);
        %// Alternatively you could use: 
        %APower(:,:,i,k) = A(:,:,i)^k;
    end
end