gpt4 book ai didi

c++ - lu_factorize 返回什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:51 30 4
gpt4 key购买 nike

boost::number::ublas 包含 M::size_type lu_factorize(M& m) 函数。它的名字表明它执行 LU decomposition给定矩阵 m 的,即应该产生两个 m = L*U 的矩阵。似乎没有为此功能提供文档。

很容易推导出它返回0表示分解成功,当矩阵为奇异时返回非零值。但是,完全不清楚结果在哪里。通过引用矩阵表明它可以就地工作,但是它应该产生两个矩阵(LU)而不是一个 。那么它有什么作用呢?

最佳答案

boost里面没有文档,但是看SciPy's lu_factor 的文档可以看出,LU 分解返回一个结果的情况并不少见。

这就足够了,因为在LU 分解 的典型方法中,L 的对角线仅由 1 组成,如 this answer from Mathematics 中所示。 ,例如。

因此,可以将 LU 都放入一个矩阵中,将 L 放在结果的下半部分,省略对角线 (假设只包含一个),上部是 U。例如,对于 3x3 问题,结果是:

    u11 u12 u13
m = l21 u22 u23
l31 l32 u33

这意味着:

     1    0   0
L = l21 1 0
l31 l32 1

    u11 u12 u13
U = 0 u22 u23
0 0 u33

检查 boost 的 void lu_substitute(const M& m, vector_expression<E>& e)来自同一命名空间的函数似乎证实了这一点。它求解方程 LUx = e,其中 LU 都包含在其 m 中分两步论证。

首先使用 m 的下半部分求解 Lz = e z,其中 z = Ux :

inplace_solve(m, e, unit_lower_tag ());

然后,计算出 z = Ux(原地修改了 e),可以使用 m 的上半部分求解 Ux = e :

inplace_solve(m, e, upper_tag ());

inplace_solvethe documentation 中提到,它:

Solves a system of linear equations with triangular form, i.e. A is triangular.

所以一切似乎都有道理。

关于c++ - lu_factorize 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26404106/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com