2013-11-25 74 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