如何在matlab中编写这个矩阵,

时间:2015-05-12 09:42:59

标签: matlab matrix

我想在matlab中编写这个矩阵,

s=[0  .....        0
   B    0   ....   0
   AB    B   ....  0
   .  .   .
   .     .    .
   .        .    . 0                  ....
   A^(n-1)*B ... AB    B ]

我在下面的代码中尝试了这个但是给出了错误,

N = 50;
A=[2 3;4 1];
B=[3 ;2];
[nx,ny] = size(A);

s(nx,ny,N) = 0;
for n=1:1:N
    s(:,:,n)=A.^n;
end
s_x=cat(3, eye(size(A)) ,s);

for ii=1:1:N-1
    su(:,:,ii)=(A.^ii).*B ;
end

z= zeros(1,60,1);
su1 = [z;su] ;
s_u=repmat(su1,N);

似乎没有完成矩阵的连接。 我是初学者,所以有严重的麻烦,请帮忙。

2 个答案:

答案 0 :(得分:1)

使用单元格数组和answer to your previous question

A = [2 3; 4 1];
B = [3 ;2 ];
N = 60;
[cs{1:(N+1),1:N}] = deal( zeros(size(B)) ); %// allocate space, setting top triangle to zero
%// work on diagonals
x = B;
for ii=2:(N+1)
    [cs{ii:(N+2):((N+1)*(N+2-ii))}] = deal(x); %//deal to diagonal
    x = A*x;
end 
s = cell2mat(cs); %// convert cells to a single matrix    

有关详细信息,请参阅dealcell2mat

关于矩阵运算和逐元运算之间差异的重要说明

在您的问题中(以及previous one中),您在矩阵幂:A^2和逐元素操作A.^2之间混淆:

  • 矩阵幂A^2 = [16 9;12 13]A*A
  • 的矩阵乘积
  • 以元素为单位的力量A.^2将每个元素分开并计算其正方形:A.^2 = [4 9; 16 1]

您是否询问矩阵产品A*b,但您编写的代码是A.*b,这是一个逐元素的产品。这会给您一个错误,因为A的大小与b的大小不同。

答案 1 :(得分:0)

我经常发现Matlab采用了“编写方程中所说的内容”的编码方法。这也导致代码易于阅读......

A = [2 3; 4 1];
B = [3; 2];
Q = 4;

%// don't need to...
s = [];

%// ...but better to pre-allocate s for performance
s = zeros((Q+1)*2, Q);

X = B;
for m = 2:Q+1
    for n = m:Q+1
        s(n*2+(-1:0), n-m+1) = X;
    end
    X = A * X;
end