下三角矩阵的正向替换。怎么样?

时间:2013-04-22 21:32:15

标签: python math matrix linear-algebra

不确定这是否是正确的地方,但现在就去了。

有谁知道以下代码如何能够解决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

1 个答案:

答案 0 :(得分:4)

我假设您将矩阵表示为行列表(列表) - 如果不是,只需使用矩阵上的zip函数,y作为元组。我也假设矩阵是方形的,因为具有另一种形式的三角形矩阵并不真正有意义。

除了从顶部开始之外,该过程非常类似于上三角形。

  • 制作一个空列表,其中包含所得矢量的长度,并用零填充。
  • 使用第一行对列表进行点积,从y的第一个元素中减去结果,然后除以第一项的系数。
  • 将原始空列表中的第一个元素替换为最终结果
  • 继续这样做,直到完成为止。

基本上你通过采用点积来做的是用正确的值(你已经找到)替换矩阵中的每个非零项,然后将它们全部加起来。当你从另一端减去并除以第n行第n项的系数时,你只是求解。

(现在输入一个示例实现)。 (假设你有一个带有点积的类或函数,如果不这样做就不难实现)。 (python 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