矩阵内矩阵matlab

时间:2013-11-25 17:22:03

标签: matlab matrix multidimensional-array

我尝试在矩阵中输入矩阵

A=[1 2;2 1];
C=[0 1];

然后使用

在新矩阵中输入矩阵
D =[CA;CA^2;CA^3;........;CA^n]

我尝试使用

n=40;

a(1,1)=1;
a(1,2)=1;
a(2,1)=1;
a(2,2)=1;
C=[0,1];



for k=1:n
   for i=1:2
      for j=1:2
          d(i,j)=c*a(i,j)*^n
      end
   end
end

当n是整数但我不能做

如何解决?

非常感谢你的关注

2 个答案:

答案 0 :(得分:2)

首先,不需要单独声明A的元素。正如您在第一个代码段中显示它一样很好。

所以这个for循环的主要问题(除了它实际上并没有模仿这里显示的过程D =[CA;CA^2;CA^3;........;CA^n])是因为你在n中使用变量d(i,j)=c*a(i,j)*^n实际上,变量k正在被第一个for循环递增。因此,您始终在计算d(i,j)=c*a(i,j)*^40,而应以k的速度使用n

a(i,j)*^k语法也不正确,因为*^不会成倍增加,也不会取幂。因此,MATLAB将返回错误。

此外,您将收到Subscripted assignment dimension mismatch.错误,因为C是1x2矩阵,A(i,j)只是一个元素。

我说它不会模仿进程D =[CA;CA^2;CA^3;........;CA^n]的原因是因为你只对C进行了元素操作,然后将它们放入D中,我相当确定这不是你的运行磨机矩阵乘法 - 即使你要正确地分解它 - 但这是低效的,因为MATLAB会为你做。

clear D
n=10;

A=[1 2;2 1];
C=[0,1];

for k=1:n
    D(k,:) = C*A^k;
end


D =

       2           1
       4           5
      14          13
      40          41
     122         121
     364         365
    1094        1093
    3280        3281
    9842        9841
   29524       29525

答案 1 :(得分:2)

Falimond给出了很好的答案 但是,这里可以节省大量的矩阵乘法:
我们只需要将前一次迭代的结果乘以A k,而不是k为每个A提供D(k,:) = C*A^k = D(k-1,:)*A的力量!{ / p>

n = 10;
A = [1 2;2 1];
C = [0 1];
D = zeros(n, size(C,2) ); % pre-allocate always a good practice
D(1,:) = C*A; % init recursive process
for k=2:n
    D(k,:) = D(k-1,:)*A;
end