2013-11-25 75 views
1

我尝试输入矩阵在矩阵矩阵内部基质MATLAB

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是整数,但我不能做

如何解决它?

非常感谢你的关注

+0

“但我做不到”是_没问题。 –

+1

@ Okuma.Scott也许这个问题是不适当的,但是对于需要解决的MATLAB语法基础知识存在一些明显的误解。 – Falimond

+1

@Falimond对不起,我想我会变得厌倦。好的答案顺便说一句。 –

回答

2

首先,有没有需要声明的单独的元素。正如你在你的第一个代码片段中展示的那样很好。

所以用这个的主要问题进行循环(除了一个事实,即它实际上并没有模仿这里显示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]是因为你只对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 
2

大答案由Falimond
然而,矩阵乘法的显著数量可以保存在这里:
而不是采取Ak功率为每个k,我们只需要通过A前一次迭代的结果乘以:D(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