我正在查看 sprs 板条箱并试图弄清楚如何实际使用它。我已经制作了一个稀疏矩阵和一个稀疏向量,现在我需要实际求解该系统。
文档提到您可以通过
sprs-ldl
解决,但是如果您去创建,则没有示例显示如何使用该库。 Ldl 对象的 new
方法不带参数。
有人会认为
ldl_lsolve
是正确的使用方法,除了它消耗 rhs 向量,不返回任何内容,并且似乎假设输入矩阵已经分解为 ldl 形式?
这一切都非常令人困惑。
正确的方法似乎是:
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 解决了这个问题。