2011-03-30 222 views
2

我正在嘗試創建一個可創建適當大小的矩陣的循環。我需要矩陣由指定數量的元素構成,這些元素從另一個矩陣中拉出並加在一起。循環創建矩陣

下面是一些僞代碼:

' 

     n=10 
     for x=1:1:n 

      Kglobal=zeros(nxn) 


     Kglobal(1,1)=1 
     Kglobal(x+1,x+1)=Klocalx(2,1) 
     Kglobal(x+1,x+2)=Klocalx(2,2)+Klocalx+1(1,1)' 
if Kglobal(x+1,x+2)=(n+1,n) 
    Kglobal(n,n)=Klocaln(2,2) 
    end 
end 

當像成品導致:

' 
Kglobal=[ 1 0 0 0 0 0 0 0 0 0 0; 
     Klocal1(2,1) Klocal1(2,2)+Klocal2(1,1) 0 0 0 0 0 0 0 0 0; 
     0 Klocal2(2,1) Klocal2(2,2)+Klocal3(1,1) 0 0 0 0 0 0 0 0; 
     0 0 Klocal3(2,1) Klocal3(2,2)+Klocal4(1,1) 0 0 0 0 0 0 0; 
     0 0 0 Klocal4(2,1) Klocal4(2,2)+Klocal5(1,1) 0 0 0 0 0 0; 
     0 0 0 0 Klocal5(2,1) Klocal5(2,2)+Klocal6(1,1) 0 0 0 0 0; 
     0 0 0 0 0 Klocal6(2,1) Klocal6(2,2)+Klocal7(1,1) 0 0 0 0; 
     0 0 0 0 0 0 Klocal7(2,1) Klocal7(2,2)+Klocal8(1,1) 0 0 0; 
     0 0 0 0 0 0 0 Klocal8(2,1) Klocal8(2,2)+Klocal9(1,1) 0 0; 
     0 0 0 0 0 0 0 0 Klocal9(2,1) Klocal9(2,2)+Klocal10(1,1) 0; 
     0 0 0 0 0 0 0 0 0 Klocal10(2,1) Klocal10(2,2)]; 
' 

謝謝!我感謝任何幫助,並會經常檢查,如果有什麼我可以嘗試解釋更好,請讓我知道!

+0

Klocal將是一個2x2矩陣,並且這些值基於我爲矩陣中的每個點執行的計算。我可以提供,但例如(2,1)只是一個像Klocal(2,1)= - 110這樣的值。 – user618204 2011-03-30 02:55:57

+0

所以Klocal看起來像[100,-110; -110,1200] – user618204 2011-03-30 02:56:35

+0

如果它幫助矩陣的值是單獨計算的......那麼也許我可以使它們成爲x的函數?目前它被設置爲K11 = eqn K12 = eqn K21 = eqn K22 = eqn所以也許有辦法讓這些函數成爲計數器的函數,所以我可以調用正確的方程嗎? – user618204 2011-03-30 03:02:51

回答

1

使用spdiags函數創建這樣的矩陣非常簡單。例如,

a=1:5; 
b=6:10; 
c=spdiags([a',b'],[-1,0],5,5); 

創建一個稀疏矩陣,看起來像這樣

6  0  0  0  0 
1  7  0  0  0 
0  2  8  0  0 
0  0  3  9  0 
0  0  0  4 10 

除了存儲器只對非零元素分配。這應該回答你如何創建這樣一個矩陣的問題。

然而,問題是,你如何獲得a的和b的,而你的情況是Klocal矩陣的一羣。關於你在代碼中做什麼並不是很清楚。我猜測他們可以做一些緊湊的矩陣/單元操作,但不能進一步評論。

無論如何,假設你已經有了Klocal矩陣,這應該足以讓你開始。

+0

非常感謝。你是正確的,它可以使用單元格完成。亞歷克斯解釋了這將如何工作。我對Matlab編程相當陌生。我更多地用它來計算和simulink。 – user618204 2011-03-30 04:37:06