2013-04-22 88 views
0

不知道這是否是正確的地方要問,但在這裏。下三角矩陣的正向替換。怎麼樣?

有誰知道下面的代碼是如何能夠分別解決了X Lx=y其中L和y是給定矩陣和矢量,?

如果你知道,你能不能打破它,比較每一步,你將如何使用筆和紙解決呢?

def forward(L, y): 
    x = [] 
    for i in range(len(y)): 
     x.append(y[i]) 
     for j in range(i): 
      x[i]=x[i]-(L[i, j]*x[j]) 
     x[i] = x[i]/L[i, i] 
    return x 

回答

3

我假設您所代表的矩陣行(這是列表)的列表 - 如果不是,只是使用的矩陣的拉鍊功能,和Y的元組。我還假設矩陣是正方形的,因爲具有另一種形式的三角形矩陣並不合理。

這個過程就好像它是上三角非常相似,除了你從頂部開始。

  • 將生成一個空列表,其長度爲結果向量的長度,並用零填充。
  • 點產品列表與第一行中,由第一項的係數從y中的第一個元素,併除以減去的結果。
  • 將最初的空列表中的第一個元素替換爲最終結果
  • 繼續這樣做直到完成。

基本上你通過採用點積來做的是用正確的值(你已經找到)替換矩陣中的每個非零項,然後把它們全部加起來。當你從另一端減去,除以第n行第n項的係數時,你只是在求解。

(現在打字了一個示例實現)。 (假設你有一個類的產品或功能,如果你不這樣做,應該不難實現)。 (蟒蛇2.7)

def solve(m, y): 
    v = [0 for i in xrange(len(m))] 
    for i in xrange(len(m)): 
     v[i] = (y[i] - v.dotProduct(m[i]))/float(m[i][i]) 

    return v 
+0

雖然我的方法奏效,但我不知道如何,你的解決方案證明是更簡單和容易理解。謝謝! – user2298619 2013-04-22 22:16:28

+0

+1 - 尼斯和Pythonic。 – duffymo 2013-04-23 11:45:55