我想在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);
似乎没有完成矩阵的连接。 我是初学者,所以有严重的麻烦,请帮忙。
答案 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
在您的问题中(以及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