1

不确定这是否是正确的地方,但这里是。

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

1 回答 1

5

我假设您将矩阵表示为行列表(它们是列表) - 如果不是,只需在矩阵上使用 zip 函数,并将 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
于 2013-04-22T21:54:30.177 回答