0

有没有人没有一种简单的方法来使用 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  
4

1 回答 1

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);

操场

于 2022-01-18T05:05:42.973 回答