Add mju_mulVecMatVec, mutiplies a square matrix M by a vector x on both sides. Returns x^T * M * x.
PiperOrigin-RevId: 474292806 Change-Id: I3432469dbe1f02ccf5a13241c7aa12d824cbe034
This commit is contained in:
committed by
Copybara-Service
parent
ee9eccc992
commit
f4e7fa97af
@@ -1006,6 +1006,12 @@ Euler integrator, semi-implicit in velocity.
|
||||
rank = mujoco.mju_boxQP(res, r, index, h, g, lower, upper)
|
||||
self.assertGreater(rank, -1)
|
||||
|
||||
def test_mju_mul_vec_mat_vec(self):
|
||||
vec1 = np.array([1., 2., 3.])
|
||||
vec2 = np.array([3., 2., 1.])
|
||||
mat = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
|
||||
self.assertEqual(mujoco.mju_mulVecMatVec(vec1, mat, vec2), 204.)
|
||||
|
||||
@parameterized.product(flg_html=(False, True), flg_pad=(False, True))
|
||||
def test_mj_printSchema(self, flg_html, flg_pad): # pylint: disable=invalid-name
|
||||
# Make sure that mj_printSchema doesn't raise an exception
|
||||
|
||||
@@ -784,6 +784,26 @@ PYBIND11_MODULE(_functions, pymodule) {
|
||||
return InterceptMjErrors(::mju_mulMatTVec)(
|
||||
res.data(), mat.data(), vec.data(), mat.rows(), mat.cols());
|
||||
});
|
||||
DEF_WITH_OMITTED_PY_ARGS(traits::mju_mulVecMatVec, "n")(
|
||||
pymodule,
|
||||
[](Eigen::Ref<const EigenVectorX> vec1,
|
||||
Eigen::Ref<const EigenArrayXX> mat,
|
||||
Eigen::Ref<const EigenVectorX> vec2) {
|
||||
if (vec1.size() != vec2.size()) {
|
||||
throw py::type_error(
|
||||
"size of vec1 should equal the size of vec2");
|
||||
}
|
||||
if (vec1.size() != mat.cols()) {
|
||||
throw py::type_error(
|
||||
"size of vectors should equal the number of columns in mat");
|
||||
}
|
||||
if (vec1.size() != mat.rows()) {
|
||||
throw py::type_error(
|
||||
"size of vectors should equal the number of rows in mat");
|
||||
}
|
||||
return InterceptMjErrors(::mju_mulVecMatVec)(
|
||||
vec1.data(), mat.data(), vec2.data(), vec1.size());
|
||||
});
|
||||
DEF_WITH_OMITTED_PY_ARGS(traits::mju_transpose, "nr", "nc")(
|
||||
pymodule,
|
||||
[](Eigen::Ref<EigenArrayXX> res,
|
||||
|
||||
Reference in New Issue
Block a user