Changelog History
Page 1

v0.23.1
๐ In this release we improved the documentation of the matrix and vector types by:
 Grouping
impl
bocks logically, adding a title comment to these impl blocks.  ๐ Reference these impl blocks docs at the top of the documentation page for
Matrix
.  โฌ๏ธ Reduce the depth of type aliasing. Now all vector and matrix types are aliases of
Matrix
directly (instead of being aliases for other aliases).
 Grouping

v0.23.0
โ Added
 The
.inverse_transform_unit_vector(v)
was added toRotation2/3
,Isometry2/3
,UnitQuaternion
, andUnitComplex
. It applies the corresponding rotation to a unit vectorUnit<Vector2/3>
.  The
Point.map(f)
andPoint.apply(f)
to apply a function to each component of the point, similarly toVector.map(f)
andVector.apply(f)
.  The
Quaternion::from([N; 4])
conversion to build a quaternion from an array of four elements.  The
Isometry::from(Translation)
conversion to build an isometry from a translation.  The
Vector::ith_axis(i)
which build a unit vector, e.g.,Unit<Vector3<f32>>
with its ith component set to 1.0 and the others set to zero.  The
Isometry.lerp_slerp
andIsometry.try_lerp_slerp
methods to interpolate between two isometries using linear interpolation for the translational part, and spherical interpolation for the rotational part.  The
Rotation2.slerp
,Rotation3.slerp
, andUnitQuaternion.slerp
method for spherical interpolation.
 The

v0.22.0
๐ In this release, we are using the new version 0.2 of simba. One major change of that version is that the ๐ use of
libm
is now optin when building targettingnostd
environment. If you are using floatingpoint operations with nalgebra in anostd
environment, you will need to enable the newlibm
feature of nalgebra for your code to compile again.โ Added
 The
libm
feature that enableslibm
when building fornostd
environment.  The
libmforce
feature that enableslibm
even when building for a notnostd
environment. Cholesky::new_unchecked
which build a Cholesky decomposition without checking that its input is positivedefinite. It can be use with SIMD types. The
Default
trait is now implemented for matrices, and quaternions. They are all filled with zeros, except forUnitQuaternion
which is initialized with the identity.  Matrix exponential
matrix.exp()
.  The
Vector::ith(i, x)
that builds a vector filled with zeros except for thei
th component set tox
.
 The

v0.21.1
June 07, 2020 
v0.21.0
April 05, 2020In this release, we are no longer relying on traits from the alga crate for our generic code. Instead, we use traits from the new simba crate which are both simpler, and allow for significant optimizations like AoSoA SIMD.
Refer to the monthly Rustsim blogpost for details about this switch and its benefits.
โ Added
 It is now possible to use SIMD types like
simba::f32x4
as scalar types for nalgebra's matrices and geometric types. ### Modified  Use of traits like
alga::general::{RealField, ComplexField}
have now been replaced bysimba::scalar::{RealField, ComplexField}
.  The implementation of traits from the alga crate (and well as the dependency to alga_) are now
omitted unless the
alga
cargo feature is activated. ### โ Removed  The
Neg
unary operator is no longer implemented forUnitComplex
andUnitQuaternion
. This caused hardtotrack errors when we mistakenly write, e.g.,q * v
instead of(q * v)
.  The
na::convert_unchecked
is no longer marked as unsafe.
 It is now possible to use SIMD types like

v0.20.0
โ Added
cholesky.rank_one_update(...)
which performs a rankone update on the cholesky decomposition of a matrix.From<&Matrix>
is now implemented for matrix slices..try_set_magnitude(...)
which sets the magnitude of a vector, while keeping its direction. Implementations of
From
andInto
for the conversion between matrix slices and standard (&[N]
&mut [N]
) slices.
Modified
 We started some major changes in order to allow nonCopy types to be used as scalar types inside of matrices/vectors.

v0.19.0
October 28, 2019โ Added
.remove_rows_at
andremove_columns_at
which removes a set of rows or columns (specified by indices) from a matrix. Several formatting traits have been implemented for all matrices/vectors:
LowerExp
,UpperExp
,Octal
,LowerHex
,UpperHex
,Binary
,Pointer
. UnitQuaternion::quaternions_mean(...)
which computes the mean rotation of a set of unit quaternions. This implements the algorithm from _Oshman, Yaakov, and Avishy Carmi, "Attitude estimation from vector observations using a geneticalgorithmembedded quaternion particle filter."
Modified
 It is now possible to get the
min/max
element of unsigned integer matrices.
โ Added to nalgebraglm
 Some infinite and reversed perspectives:
::infinite_perspective_rh_no
,::infinite_perspective_rh_zo
,::reversed_perspective_rh_zo
, and::reversed_infinite_perspective_rh_zo
.

v0.18.2
September 01, 2019 
v0.18.1
August 27, 2019 
v0.18.0
March 31, 2019๐ This release adds full complex number support to nalgebra. This includes all common vector/matrix operations as well ๐ as matrix decomposition. This excludes geometric type (like
Isometry
,Rotation
,Translation
, etc.) from thegeometry
module.โ Added
Quaternion and geometric operations
 Add trigonometric functions for quaternions:
.cos, .sin, .tan, .acos, .asin, .atan, .cosh, .sinh, .tanh, .acosh, .asinh, .atanh
.  Add geometric algebra operations for quaternions:
.inner, .outer, .project, .rejection
 Add
.left_div, .right_div
for quaternions.  Add
.renormalize
toUnit<...>
andRotation3
to correct potential drift due to repeated operations. Those drifts could cause them not to be pure rotations anymore.
Convolution
.convolve_full(kernel)
returns the convolution ofself
bykernel
..convolve_valid(kernel)
returns the convolution ofself
bykernel
after removal of all the elements relying on zeropadding..convolve_same(kernel)
returns the convolution ofself
bykernel
with a result of the same size asself
.
๐ Complex number support
 Add the
::from_matrix
constructor too all rotation types to extract a rotation from a raw matrix.  Add the
::from_matrix_eps
constructor too all rotation types to extract a rotation from a raw matrix. This takes more argument than::from_matrix
to control the convergence of the underlying optimization algorithm.  Add
.camax()
which returns the matrix component with the greatest L1norm.  Add
.camin()
which returns the matrix component with the smallest L1norm.  Add
.ad_mul(b)
for matrixmultiplication ofself.adjoint() * b
.  Add
.ad_mul_to(b)
which is the same as.ad_mul
but with a provided matrix to be filled with the result of the multiplication.  Add BLAS operations involving complex conjugation (following similar names as the original BLAS spec):
.dotc(rhs)
equal toself.adjoint() * rhs
..gerc(alpha, x, y, beta)
equivalent toself = alpha * x * y.adjoint() + beta * self
.hegerc
which is likegerc
but for Hermitian matrices..syger
which is the new name of.ger_symm
which is equivalent toself = alpha * x * y.transpose() + beta * self
..sygemv
which is the new name of.gemv_symm
which is equivalent toself = alpha * a * x + beta * self
witha
symmetric..hegemv(alpha, a, x, beta)
which is like.sygemv
but witha
Hermitian..gemv_ad(alpha, a, x, beta)
which is equivalent toself = alpha * a.adjoint() * x + beta * self
..gemm_ad(alpha, a, b, beta)
which is equivalent toself = alpha * a.adjoint() * b + beta * self
..icamax()
which returns the index of the complex vector component with the greatest L1norm.
Note that all the other BLAS operation will continue to work for all fields, including floats and complex numbers.
๐ Renamed
RealSchur
has been renamedSchur
because it can now work with complex matrices.
 Add trigonometric functions for quaternions: