21 template<jit::
float_scalar T,
bool SAFE_MATH=false>
22 class vector_quantity :
public std::enable_shared_from_this<vector_quantity<T, SAFE_MATH>> {
80 return x*
v2->get_x() +
91 std::shared_ptr<vector_quantity<T, SAFE_MATH>>
93 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
y*
v2->get_z() -
z*
v2->get_y(),
94 z*
v2->get_x() -
x*
v2->get_z(),
95 x*
v2->get_y() -
y*
v2->get_x());
112 std::shared_ptr<vector_quantity<T, SAFE_MATH>>
unit() {
113 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
x,
y,
z)/
length();
123 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
x->df(arg),
134 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
x->remove_pseudo(),
141 template<jit::
float_scalar T,
bool SAFE_MATH=false>
155 template<jit::
float_scalar T,
bool SAFE_MATH=false>
159 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x, y, z);
174 template<jit::
float_scalar T, jit::
float_scalar L,
bool SAFE_MATH=false>
178 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
constant<T, SAFE_MATH> (
static_cast<T
> (x)), y, z);
193 template<jit::
float_scalar T, jit::
float_scalar M,
bool SAFE_MATH=false>
197 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x,
constant<T, SAFE_MATH> (
static_cast<T
> (y)), z);
212 template<jit::
float_scalar T, jit::
float_scalar R,
bool SAFE_MATH=false>
216 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x, y,
constant<T, SAFE_MATH> (
static_cast<T
> (z)));
232 template<jit::
float_scalar T, jit::
float_scalar L, jit::
float_scalar M,
bool SAFE_MATH=false>
253 template<jit::
float_scalar T, jit::
float_scalar M, jit::
float_scalar R,
bool SAFE_MATH=false>
274 template<jit::
float_scalar T, jit::
float_scalar L, jit::
float_scalar R,
bool SAFE_MATH=false>
293 template<jit::
float_scalar T,
bool SAFE_MATH=false>
312 template<jit::
float_scalar T,
bool SAFE_MATH=false>
315 return vector(
l->get_x() +
r->get_x(),
316 l->get_y() +
r->get_y(),
317 l->get_z() +
r->get_z());
330 template<jit::
float_scalar T,
bool SAFE_MATH=false>
333 return vector(
l->get_x() -
r->get_x(),
334 l->get_y() -
r->get_y(),
335 l->get_z() -
r->get_z());
348 template<jit::
float_scalar T,
bool SAFE_MATH=false>
366 template<jit::
float_scalar T,
bool SAFE_MATH=false>
383 template<jit::
float_scalar T,
bool SAFE_MATH=false>
384 class matrix_quantity :
public std::enable_shared_from_this<matrix_quantity<T, SAFE_MATH>> {
421 template<jit::
float_scalar T,
bool SAFE_MATH=false>
435 template<jit::
float_scalar T,
bool SAFE_MATH=false>
439 return std::make_shared<matrix_quantity<T, SAFE_MATH>> (r1, r2, r3);
Class to represent matrix quantities.
Definition vector.hpp:384
matrix_quantity(shared_vector< T, SAFE_MATH > r1, shared_vector< T, SAFE_MATH > r2, shared_vector< T, SAFE_MATH > r3)
Construct a new matrix_quantity.
Definition vector.hpp:401
shared_vector< T, SAFE_MATH > r3
Third row of the matrix.
Definition vector.hpp:391
shared_vector< T, SAFE_MATH > r1
First row of the matrix.
Definition vector.hpp:387
shared_vector< T, SAFE_MATH > dot(shared_vector< T, SAFE_MATH > v)
Multiply matrix by vector.
Definition vector.hpp:413
shared_vector< T, SAFE_MATH > r2
Second row of the matrix.
Definition vector.hpp:389
Class to represent vector quantities.
Definition vector.hpp:22
shared_leaf< T, SAFE_MATH > y
Y component of the vector.
Definition vector.hpp:27
shared_leaf< T, SAFE_MATH > get_x() const
Get the x component.
Definition vector.hpp:49
std::shared_ptr< vector_quantity< T, SAFE_MATH > > cross(std::shared_ptr< vector_quantity< T, SAFE_MATH > > v2)
Vector cross product.
Definition vector.hpp:92
shared_leaf< T, SAFE_MATH > get_z() const
Get the z component.
Definition vector.hpp:68
shared_leaf< T, SAFE_MATH > get_y() const
Get the y component.
Definition vector.hpp:59
shared_leaf< T, SAFE_MATH > dot(std::shared_ptr< vector_quantity< T, SAFE_MATH > > v2)
Vector dot product.
Definition vector.hpp:79
shared_leaf< T, SAFE_MATH > length()
Get the length of the vector.
Definition vector.hpp:103
std::shared_ptr< vector_quantity< T, SAFE_MATH > > unit()
Get the unit vector.
Definition vector.hpp:112
std::shared_ptr< vector_quantity< T, SAFE_MATH > > df(shared_leaf< T, SAFE_MATH > arg)
Take a derivative with respect to each component.
Definition vector.hpp:122
std::shared_ptr< vector_quantity< T, SAFE_MATH > > remove_pseudo()
Remove pseudo variables.
Definition vector.hpp:133
shared_leaf< T, SAFE_MATH > z
Z component of the vector.
Definition vector.hpp:29
vector_quantity(shared_leaf< T, SAFE_MATH > x, shared_leaf< T, SAFE_MATH > y, shared_leaf< T, SAFE_MATH > z)
Construct a new vector_quantity.
Definition vector.hpp:39
shared_leaf< T, SAFE_MATH > x
X component of the vector.
Definition vector.hpp:25
Name space for graph nodes.
Definition arithmetic.hpp:13
shared_leaf< T, SAFE_MATH > operator*(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build multiply node from two leaves.
Definition arithmetic.hpp:2666
constexpr shared_leaf< T, SAFE_MATH > zero()
Forward declare for zero.
Definition node.hpp:986
shared_leaf< T, SAFE_MATH > operator/(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build divide node from two leaves.
Definition arithmetic.hpp:3631
std::shared_ptr< vector_quantity< T, SAFE_MATH > > shared_vector
Convenience type for shared vector quantities.
Definition vector.hpp:142
shared_leaf< T, SAFE_MATH > operator+(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build add node from two leaves.
Definition arithmetic.hpp:774
shared_leaf< T, SAFE_MATH > operator-(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build subtract node from two leaves.
Definition arithmetic.hpp:1598
shared_vector< T, SAFE_MATH > vector(shared_leaf< T, SAFE_MATH > x, shared_leaf< T, SAFE_MATH > y, shared_leaf< T, SAFE_MATH > z)
Build a shared vector quantity.
Definition vector.hpp:156
shared_leaf< T, SAFE_MATH > sqrt(shared_leaf< T, SAFE_MATH > x)
Define sqrt convenience function.
Definition math.hpp:279
shared_matrix< T, SAFE_MATH > matrix(shared_vector< T, SAFE_MATH > r1, shared_vector< T, SAFE_MATH > r2, shared_vector< T, SAFE_MATH > r3)
Build a shared vector quantity.
Definition vector.hpp:436
std::shared_ptr< matrix_quantity< T, SAFE_MATH > > shared_matrix
Convenience type for shared vector quantities.
Definition vector.hpp:422
std::shared_ptr< leaf_node< T, SAFE_MATH > > shared_leaf
Convenience type alias for shared leaf nodes.
Definition node.hpp:676
Base nodes of graph computation framework.