【问题标题】:Matrix inner matrix matlab矩阵内矩阵matlab
【发布时间】:2013-11-25 17:22:02
【问题描述】:

我尝试在矩阵中输入矩阵

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 是整数但我做不到时

如何解决?

非常感谢您的关注

【问题讨论】:

  • “但我做不到”是不是一个问题。
  • @Okuma.Scott 也许这个问题是不恰当的,但是对于 MATLAB 语法的基础知识有一些明显的误解需要解决。
  • @Falimond 抱歉,我想我已经厌倦了。顺便说一句,答案很好。
  • @Shai 感谢您的建议。我过去就意识到了这一点,但很少处理复杂的数量,所以这已经成为一个坏习惯。

标签: matlab matrix multidimensional-array


【解决方案1】:

Falimond 的回答很好。
但是,可以在此处保存大量矩阵乘法:
无需将每个kA 乘以k 的幂,我们只需将上一次迭代的结果乘以AD(k,:) = C*A^k = D(k-1,:)*A

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 

【讨论】:

    【解决方案2】:

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

    所以这个for循环的主要问题(除了它实际上并没有模仿这里显示的过程D =[CA;CA^2;CA^3;........;CA^n])是你在d(i,j)=c*a(i,j)*^n中使用变量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] 过程的原因是因为你只是用 A 对 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
    

    【讨论】: