如何在matlab中得到增量功率矩阵

如何在matlab中得到增量功率矩阵,matlab,matrix,Matlab,Matrix,我想在Matlab中计算以下矩阵: g=[I A . . . A^N] A=[2 3;4 1]; s=A; for n=1:1:50 s(n)=A.^n; end g=[eye(1,1),s]; 我在Matlab中使用了以下程序: g=[I A . . . A^N] A=[2 3;4 1]; s=A; fo

我想在Matlab中计算以下矩阵:

    g=[I
       A 
       .
       .
       .
      A^N]      
A=[2 3;4 1];
s=A;
for n=1:1:50
   s(n)=A.^n;
end
g=[eye(1,1),s];
我在Matlab中使用了以下程序:

    g=[I
       A 
       .
       .
       .
      A^N]      
A=[2 3;4 1];
s=A;
for n=1:1:50
   s(n)=A.^n;
end
g=[eye(1,1),s];
我得到以下错误:

在赋值
A(I)=B
中,
B
I
中的元素数必须相同。
su x\u calcu\u v1中的错误(第5行)
s(n)=A.^n


您的
s
数组是一个2乘2的数组,您无法对其进行索引以存储循环每一步的计算结果

为此,最简单的方法可能是将
s
定义为单元格:

% --- Definitions
A = [2 3;4 1];
N = 50;

% --- Preparation
s = cell(N,1);

% --- Computation
for n=1:N
    s{n} = A.^n;
end

最好的方法是,

您的
s
数组是一个2乘2的数组,您无法对其进行索引以存储循环每一步的计算结果

为此,最简单的方法可能是将
s
定义为单元格:

% --- Definitions
A = [2 3;4 1];
N = 50;

% --- Preparation
s = cell(N,1);

% --- Computation
for n=1:N
    s{n} = A.^n;
end

最好的办法是,问题是您试图将矩阵分配给单个元素。在matlab中,调用
s(n)
意味着您得到
s
的第n个元素,而不考虑s的尺寸。可以使用三维矩阵

N = 50;
A=[2 3;4 1];

[nx,ny] = size(A);
s(nx,ny,N) = 0; %makes s a nx x ny x N matrix
for n=1:1:N
    s(:,:,n)=A.^n; %Colon to select all elements of that dimension
end
g=cat(3, eye(size(A)) ,s); %Add the I matrix of same size as A
还是矢量化版本

s = bsxfun(@power, A(:), 1:N);
s = reshape(s,2,2,N);
g = cat(3, eye(size(A)) ,s);
第三种解决方案使用
cumprod

s = repmat(A(:), [1 N]);
s = cumprod(s,2);
s = reshape(s,2,2,N);
g = cat(3, eye(size(A)) ,s);

问题是您试图将矩阵分配给单个元素。在matlab中,调用
s(n)
意味着您得到
s
的第n个元素,而不考虑s的尺寸。可以使用三维矩阵

N = 50;
A=[2 3;4 1];

[nx,ny] = size(A);
s(nx,ny,N) = 0; %makes s a nx x ny x N matrix
for n=1:1:N
    s(:,:,n)=A.^n; %Colon to select all elements of that dimension
end
g=cat(3, eye(size(A)) ,s); %Add the I matrix of same size as A
还是矢量化版本

s = bsxfun(@power, A(:), 1:N);
s = reshape(s,2,2,N);
g = cat(3, eye(size(A)) ,s);
第三种解决方案使用
cumprod

s = repmat(A(:), [1 N]);
s = cumprod(s,2);
s = reshape(s,2,2,N);
g = cat(3, eye(size(A)) ,s);

当您每次从
1
循环到
N
计算
A.^N
时,您正在进行大量的冗余计算!注意

A.^n = (A.^(n-1)).*A; %//element-wise power
A^n = (A^n) * A; %// matrix power
所以,

A = [2 3;4 1];
N = 50;
s = cell(N+1,1);
s{1} = eye(size(A,1));
for ii=1:N
    s{ii+1} = s{ii}.*A; %// no powers, just product!
end
g = vertcat( s{:} );

顺便说一句,如果你想计算矩阵幂(而不是元素幂),你所需要的就是改变为
s{ii+1}=s{ii}*A

当您每次从
1
循环到
N
计算
A.^N
时,您正在进行大量的冗余计算!注意

A.^n = (A.^(n-1)).*A; %//element-wise power
A^n = (A^n) * A; %// matrix power
所以,

A = [2 3;4 1];
N = 50;
s = cell(N+1,1);
s{1} = eye(size(A,1));
for ii=1:N
    s{ii+1} = s{ii}.*A; %// no powers, just product!
end
g = vertcat( s{:} );

顺便说一句,如果你想计算矩阵幂(而不是元素幂),你所需要的就是改变为
s{ii+1}=s{ii}*A

你的问题中混合了两种运算:
A^N
不是
A.^N
-你想计算矩阵积还是元素积?我想计算A到N的幂,其中N从1到50,每次递增1。那么你想要矩阵幂而不是元素幂?你在问题中混合了两个运算:
A^N
不是
A.^N
-你想要计算矩阵积还是元素积?我想在这里计算A到N的幂,其中N从1到50开始,每次递增1次。所以您想要矩阵幂而不是元素幂?
cumprod
节省计算
cumprod
保存计算!我想在这里做A到N的幂,其中N从1到50,每次递增1。我想在这里做A到N的幂,其中N从1到50,每次递增1。