I need to get the inverse of a matrix but I don’t know the dimensions of it at compile time. The only thing I do know is that it will be a square matrix and will have a non-zero determinate.
The functions try_inverse
and inverse
work on stack allocated matrices like Matrix4
, but they don’t seem to be implemented for dynamically allocated types like MatrixVec
. Is there something I’m missing? Like a trait I need to import or maybe I’m using the wrong type? Any help would be greatly appreciated.
Using the matrix.try_inverse()
method instead of the function at the crate root should work. There are several functions at the crate root that I will deprecate sinte they work only on statically-sized matrices.
@sebcrozet I did do matrix.try_inverse()
, sorry I should have specified. Here’s the code:
use nalgebra::MatrixVec;
let elements = vec![...]; // has n x n elements
let mat = MatrixVec::new(Dynamic::new(n), Dynamic::new(n), elements);
if let Some(inv) = mat.try_inverse() {
// use inv
}
I get the error:
error[E0599]: no method named `try_inverse` found for type `nalgebra::MatrixVec<f64, nalgebra::Dynamic, nalgebra::Dynamic>` in the current scope
I originally assumed I just needed to import some trait, but after looking through the documentation I couldn’t find anything. If it helps I’m using version 0.15.3 which I believe is the latest.
I didn’t realize you were using MatrixVec
. This is a type of a matrix data storage, i.e., one of the possible types for the S
type parameter of the abstract Matrix
type (see this). For a dynamically-sized matrix, you should use the DMatrix
type alias instead.
2 Likes