如何使用 sprs_ldl 箱来求解线性系统?

问题描述 投票:0回答:1

我正在查看 sprs 板条箱并试图弄清楚如何实际使用它。我已经制作了一个稀疏矩阵和一个稀疏向量,现在我需要实际求解该系统。

文档提到您可以通过

sprs-ldl
解决,但是如果您去创建,则没有示例显示如何使用该库。 Ldl 对象的
new
方法不带参数。

有人会认为

ldl_lsolve
是正确的使用方法,除了它消耗 rhs 向量,不返回任何内容,并且似乎假设输入矩阵已经分解为 ldl 形式?

这一切都非常令人困惑。

math rust linear-algebra sparse-matrix rust-crates
1个回答
0
投票

正确的方法似乎是:


    use sprs::{CsMat, CsVec, TriMat};
    use sprs_ldl::*;
    
    let mut expandend_matrix = TriMat::<f32>::new((3, 3));
    for i in 0..3
    {
        expandend_matrix.add_triplet(i, i, 2.0);
    }

    let rhs = CsVec::new(3, vec![0, 1, 2], vec![1.0, 1.0, 1.0]);

    let l: CsMat<_> = expandend_matrix.to_csr();

    let ldl = Ldl::default();

    let system = ldl.numeric(l.view()).unwrap();
    let sol = system.solve(rhs.to_dense());

    println!("{}", sol);

在我的例子中打印:

[0.5, 0.5, 0.5]

正如所料。

感谢 cafce25 解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.