【问题标题】:Rust nalgebra inverse matrixRust 代数逆矩阵
【发布时间】:2022-01-18 03:42:43
【问题描述】:

没有人没有一种简单的方法来使用 Rust nalgebra::Matrix 获得矩阵的逆吗? 我正在尝试以与 C++ Eigen 库相同的方式执行此操作,但显然无法正常工作。

#cargo.toml

[dependencies]
nalgebra = "0.30"

#main.rs

let mut m = Matrix3::new(11, 12, 13,
                    21, 22, 23,
                    31, 32, 33);    

println!("{}", m);
println!("{}", m.transpose());
println!("{}", m.inverse()); // This blows up  

【问题讨论】:

    标签: matrix rust nalgebra


    【解决方案1】:

    Nalgebra 的 Matrix 没有直接求逆的方法,主要是因为矩阵求逆是一种容易出错的操作。事实上,示例矩阵甚至没有逆矩阵。但是,您可以使用try_inverse 方法:

    let inverse = m.try_inverse().unwrap();
    

    如果您的用例更好,您也可以使用 pseudo_inverse 方法:

    let pseudo_inverse = m.pseudo_inverse().unwrap();
    

    请注意,伪逆不太可能失败,如果您想对过程进行更细粒度的控制,请参阅nalgebra::linalg::SVD。

    另一个注意事项是你有一个整数矩阵,你需要一个浮点矩阵,虽然这很容易解决——只需添加一些小数点:

    let m = Matrix3::new(11.0, 12.0, 13.0, 21.0, 22.0, 23.0, 31.0, 32.0, 33.0);
    

    Playground

    【讨论】:

    • 感谢您的回复。我看到了 try_inverse() 但这似乎在你的操场上也不起作用? ^^^^^^^^^^^ 方法无法在 Matrix<{integer}, ... 上调用,因为 trait bounds 不满足
    • @sbeskur 你不能反转整数矩阵,你需要使用浮点矩阵。请参阅我的答案底部的注释。
    • 完全错过了。谢谢大佬。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多