在boost中没有文档,但是查看SciPy的lu_factor文档可以看出,返回一个LU分解结果并不罕见.
这就足够了,因为在LU分解的典型方法中,L的对角线仅包含一个,例如,如数学答案中所示.
因此,可以将L和U都放入一个矩阵中,将L放在结果的下半部分,省略对角线(假设只包含1个),并在上部放置U. 例如,对于3x3问题,结果是:
u11 u12 u13
m = l21 u22 u23
l31 l32 u33
Run Code Online (Sandbox Code Playgroud)
这意味着:
1 0 0
L = l21 1 0
l31 l32 1
Run Code Online (Sandbox Code Playgroud)
和
u11 u12 u13
U = 0 u22 u23
0 0 u33
Run Code Online (Sandbox Code Playgroud)
void lu_substitute(const M& m, vector_expression<E>& e)从同一命名空间检查boost的功能似乎证实了这一点.它解决了方程LUx = e,其中L和U分别包含m在两个步骤中.
首先使用下半部分解析Lz = e for z,其中z = Uxm:
inplace_solve(m, e, unit_lower_tag ());
Run Code Online (Sandbox Code Playgroud)
然后,计算z = Ux(e在适当的位置修改),Ux = e可以使用上半部分解决m:
inplace_solve(m, e, upper_tag ());
Run Code Online (Sandbox Code Playgroud)
inplace_solve在文档中提到,它:
求解具有三角形形式的线性方程组,即A是三角形.
所以一切似乎都有意义.
| 归档时间: |
|
| 查看次数: |
1751 次 |
| 最近记录: |