Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Google deepmind Mujoco Engine Util Blas

From Leeroopedia
Revision as of 12:45, 16 February 2026 by Admin (talk | contribs) (Auto-imported from implementations/Google_deepmind_Mujoco_Engine_Util_Blas.md)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Sources
Domains Physics Simulation, Linear Algebra
Last Updated 2026-02-15 04:00 GMT

Overview

Implements BLAS-like (Basic Linear Algebra Subprograms) utility functions for MuJoCo's physics engine, providing optimized vector and matrix operations on fixed-size and variable-size arrays.

Description

This file provides the core numerical linear algebra routines used throughout MuJoCo, including 3D vector operations (zero, copy, scale, add, subtract, dot product, cross product, normalize), 4D quaternion operations, general n-dimensional vector operations, and dense matrix-vector and matrix-matrix multiplication. The implementation includes optional AVX SIMD optimizations when compiled with platform SIMD support for double-precision floating point. All functions operate on mjtNum arrays, which may be either double or single precision depending on compile-time configuration.

Usage

These functions are invoked extensively throughout the MuJoCo engine wherever vector and matrix arithmetic is required, including kinematics, dynamics, contact resolution, and visualization computations.

Code Reference

Source Location

Key Functions

// 3D vector operations
void mju_zero3(mjtNum res[3]);
int mju_equal3(const mjtNum vec1[3], const mjtNum vec2[3]);
void mju_copy3(mjtNum res[3], const mjtNum vec[3]);
void mju_copy9(mjtNum res[9], const mjtNum mat[9]);
void mju_scl3(mjtNum res[3], const mjtNum vec[3], mjtNum scl);
void mju_add3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3]);
void mju_sub3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3]);
mjtNum mju_normalize3(mjtNum vec[3]);
mjtNum mju_dot3(const mjtNum vec1[3], const mjtNum vec2[3]);

// General vector operations
void mju_zero(mjtNum* res, int n);
void mju_copy(mjtNum* res, const mjtNum* vec, int n);
mjtNum mju_dot(const mjtNum* vec1, const mjtNum* vec2, int n);
mjtNum mju_norm(const mjtNum* res, int n);

// Matrix operations
void mju_mulMatVec(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int nr, int nc);
void mju_mulMatTVec(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int nr, int nc);
void mju_mulMatMat(mjtNum* res, const mjtNum* mat1, const mjtNum* mat2, int r1, int c1, int c2);
void mju_sqrMatTD(mjtNum* res, const mjtNum* mat, const mjtNum* diag, int nr, int nc);

Import

#include "engine/engine_util_blas.h"

I/O Contract

Inputs

Name Type Required Description
vec, vec1, vec2 mjtNum* Yes Input vectors of specified dimension
mat, mat1, mat2 mjtNum* Yes Input matrices stored in row-major order
n, nr, nc int Yes Dimensions of vectors or matrices
scl mjtNum No Scalar multiplier for scaling operations

Outputs

Name Type Description
res mjtNum* Result vector or matrix, written in-place
return value mjtNum Scalar result for dot product, norm, or normalize operations

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment