下三角矩阵的正代换。怎么用?

2024-10-01 22:41:57 发布

您现在位置:Python中文网/ 问答频道 /正文

不知道这是不是问对的地方,但这里去了。

有人知道下面的代码是如何求解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

Tags: 方法代码inforlendef地方range
1条回答
网友
1楼 · 发布于 2024-10-01 22:41:57

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

这个过程非常相似,就好像它是上三角形,除了你从顶部开始。

  • 将结果向量的长度列为空,并用零填充。
  • 将列表与第一行相乘,从y的第一个元素中减去结果,然后除以第一项的系数。
  • 用最终结果替换原始空列表中的第一个元素
  • 继续这样做,直到完成为止。

基本上,你所做的是,取点积,用正确的值(你已经找到的值)替换矩阵中的每个非零项,然后把它们加起来。当你从另一端减去,除以第n行第n项的系数,你就是在求解。

(现在输入一个示例实现)。(假设有一个类或函数采用点积,如果没有,实现起来应该不难)。(Python2.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

相关问题 更多 >

    热门问题