2013-04-22 85 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