1 #ifndef SimTK_SIMMATRIX_VECTORBASE_H_
2 #define SimTK_SIMMATRIX_VECTORBASE_H_
169 { Base::template rowScaleInPlace<EE>(v);
return *
this; }
183 "Vector::normRMS() only defined for scalar elements.");
184 const int n =
nrow();
186 if (worstOne) *worstOne = -1;
194 for (
int i=0; i<n; ++i) {
196 if (v2 > maxsq) maxsq=v2, *worstOne=i;
200 for (
int i=0; i<n; ++i) {
219 "Vector::weightedNormRMS() only defined for scalar elements"
221 const int n =
nrow();
224 if (worstOne) *worstOne = -1;
232 for (
int i=0; i<n; ++i) {
234 if (wv2 > maxsq) maxsq=wv2, *worstOne=i;
238 for (
int i=0; i<n; ++i) {
254 "Vector::normInf() only defined for scalar elements.");
255 const int n =
nrow();
257 if (worstOne) *worstOne = -1;
264 for (
int i=0; i<n; ++i) {
266 if (a > maxabs) maxabs=a, *worstOne=i;
269 for (
int i=0; i<n; ++i) {
271 if (a > maxabs) maxabs=a;
287 "Vector::weightedNormInf() only defined for scalar elements"
289 const int n =
nrow();
292 if (worstOne) *worstOne = -1;
299 for (
int i=0; i<n; ++i) {
301 if (wv > maxabs) maxabs=wv, *worstOne=i;
304 for (
int i=0; i<n; ++i) {
306 if (wv > maxabs) maxabs=wv;
333 { Base::template elementwiseMultiplyInPlace<EE>(r);
return *
this; }
335 { Base::template elementwiseMultiply<EE>(v,out); }
341 { Base::template elementwiseMultiplyFromLeftInPlace<EE>(r);
return *
this; }
342 template <
class EE>
inline void
347 Base::template elementwiseMultiplyFromLeft<EE>(v,out);
353 Base::template elementwiseMultiplyFromLeft<EE>(v,out);
359 { Base::template elementwiseDivideInPlace<EE>(r);
return *
this; }
361 { Base::template elementwiseDivide<EE>(v,out); }
367 { Base::template elementwiseDivideFromLeftInPlace<EE>(r);
return *
this; }
368 template <
class EE>
inline void
373 Base::template elementwiseDivideFromLeft<EE>(v,out);
379 Base::template elementwiseDivideFromLeft<EE>(v,out);
#define SimTK_THROW1(exc, a1)
Definition: Exception.h:325
Specialized information about Composite Numerical Types which allows us to define appropriate templat...
Definition: CompositeNumericalTypes.h:136
K::StdNumber StdNumber
Definition: CompositeNumericalTypes.h:163
static TSqrt sqrt(const K &t)
Definition: CompositeNumericalTypes.h:239
K::TSqrt TSqrt
Definition: CompositeNumericalTypes.h:154
K::TInvert TInvert
Definition: CompositeNumericalTypes.h:157
K::Scalar Scalar
Definition: CompositeNumericalTypes.h:160
K::Number Number
Definition: CompositeNumericalTypes.h:162
Definition: Exception.h:307
This is the common base class for Simbody's Vector_ and Matrix_ classes for handling large,...
Definition: MatrixBase.h:68
const MatrixCommitment & getCharacterCommitment() const
Definition: MatrixBase.h:118
MatrixBase & elementwiseInvertInPlace()
Set M(i,j) = M(i,j)^-1.
Definition: BigMatrix.h:361
MatrixBase & resizeKeep(int m, int n)
Change the size of this matrix, retaining as much of the old data as will fit.
Definition: MatrixBase.h:779
MatrixBase & resize(int m, int n)
Change the size of this matrix.
Definition: MatrixBase.h:773
MatrixView_< EHerm > updTranspose()
Definition: BigMatrix.h:230
int nrow() const
Return the number of rows m in the logical shape of this matrix.
Definition: MatrixBase.h:136
ENumber Number
Definition: MatrixBase.h:98
int ncol() const
Return the number of columns n in the logical shape of this matrix.
Definition: MatrixBase.h:138
MatrixBase & operator=(const MatrixBase &b)
Definition: MatrixBase.h:200
MatrixBase & operator*=(const StdNumber &t)
Definition: MatrixBase.h:289
void rowScale(const VectorBase< EE > &r, typename EltResult< EE >::Mul &out) const
Return type is a new matrix which will have the same dimensions as 'this' but will have element types...
void clear()
This restores the MatrixBase to the state it would be in had it been constructed specifying only its ...
Definition: MatrixBase.h:287
MatrixHelper< Scalar > & updHelper()
Definition: MatrixBase.h:865
MatrixBase & operator+=(const MatrixBase &r)
Definition: MatrixBase.h:291
VectorView_< ELT > operator()(int j) const
Definition: MatrixBase.h:594
EScalarNormSq ScalarNormSq
Definition: MatrixBase.h:101
ptrdiff_t nelt() const
Return the number of elements in the logical shape of this matrix.
Definition: MatrixBase.h:147
MatrixBase & operator-=(const MatrixBase &r)
Definition: MatrixBase.h:292
MatrixBase< typename CNT< E >::TInvert > elementwiseInvert() const
Definition: MatrixBase.h:452
TAbs abs() const
abs() with the result as a function return.
Definition: MatrixBase.h:698
MatrixBase & setTo(const ELT &t)
Fill every element in current allocation with given element (or NaN or 0).
Definition: MatrixBase.h:582
EScalar Scalar
Definition: MatrixBase.h:97
MatrixBase & operator/=(const StdNumber &t)
Definition: MatrixBase.h:290
EStdNumber StdNumber
Definition: MatrixBase.h:99
const MatrixHelper< Scalar > & getHelper() const
Definition: MatrixBase.h:864
MatrixView_< EHerm > transpose() const
Definition: BigMatrix.h:222
CNT< E >::TAbs EAbs
Definition: MatrixBase.h:84
A MatrixCharacter is a set containing a value for each of the matrix characteristics except element t...
Definition: MatrixCharacteristics.h:597
A MatrixCommitment provides a set of acceptable matrix characteristics.
Definition: MatrixCharacteristics.h:832
const S * getElt(int i, int j) const
(Advanced) This class is identical to Matrix_ except that it has shallow (reference) copy and assignm...
Definition: MatrixView_.h:43
This is the matrix class intended to appear in user code for large, variable size matrices.
Definition: Matrix_.h:51
(Advanced) This class is identical to RowVector_ except that it has shallow (reference) copy and assi...
Definition: RowVectorView_.h:42
This is a dataless rehash of the MatrixBase class to specialize it for Vectors.
Definition: VectorBase.h:42
const VectorBase & operator+() const
Definition: VectorBase.h:441
EltResult< EE >::Mul elementwiseMultiply(const VectorBase< EE > &v) const
Definition: VectorBase.h:336
void elementwiseDivide(const VectorBase< EE > &v, typename EltResult< EE >::Dvd &out) const
Definition: VectorBase.h:360
CNT< ScalarNormSq >::TSqrt weightedNormRMS(const VectorBase< EE > &w, int *worstOne=0) const
Return the weighted root-mean-square (WRMS) norm of a Vector of scalars, with optional return of the ...
Definition: VectorBase.h:216
int size() const
Definition: VectorBase.h:396
void clear()
Definition: VectorBase.h:455
VectorView_< ELT > updIndex(const Array_< int > &indices)
Definition: VectorBase.h:425
ELT sum() const
Definition: VectorBase.h:457
const ELT & operator()(int i) const
Definition: VectorBase.h:411
TNeg & operator-()
Definition: VectorBase.h:449
void elementwiseMultiplyFromLeft(const VectorBase< EE > &v, typename VectorBase< EE >::template EltResult< ELT >::Mul &out) const
Definition: VectorBase.h:343
VectorBase & elementwiseMultiplyFromLeftInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:340
VectorBase & elementwiseDivideInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:358
EltResult< EE >::Mul rowScale(const VectorBase< EE > &v) const
Definition: VectorBase.h:172
VectorView_< ELT > index(const Array_< int > &indices) const
Definition: VectorBase.h:420
void elementwiseMultiply(const VectorBase< EE > &v, typename EltResult< EE >::Mul &out) const
Definition: VectorBase.h:334
THerm operator~() const
Definition: VectorBase.h:438
TNeg & updNegate()
Definition: VectorBase.h:446
VectorIterator< ELT, VectorBase< ELT > > end()
Definition: VectorBase.h:461
void elementwiseDivideFromLeft(const VectorBase< EE > &v, typename VectorBase< EE >::template EltResult< ELT >::Dvd &out) const
Definition: VectorBase.h:369
VectorBase(const MatrixHelper< Scalar > &h, const typename MatrixHelper< Scalar >::DeepCopy &d)
Construct a new owner vector initialized with the data from the source.
Definition: VectorBase.h:123
VectorBase & operator+=(const VectorBase &r)
Definition: VectorBase.h:147
CNT< ScalarNormSq >::TSqrt normRMS(int *worstOne=0) const
Return the root-mean-square (RMS) norm of a Vector of scalars, with optional return of the index of t...
Definition: VectorBase.h:180
VectorBase< typename CNT< ELT >::TInvert > elementwiseInvert() const
Return out[i]=this[i]^-1 as function return.
Definition: VectorBase.h:325
VectorBase & operator-=(const VectorBase< EE > &b)
Definition: VectorBase.h:155
TAbs abs() const
Definition: VectorBase.h:406
THerm updTranspose()
Definition: VectorBase.h:436
void rowScale(const VectorBase< EE > &v, typename EltResult< EE >::Mul &out) const
Definition: VectorBase.h:170
void elementwiseInvert(VectorBase< typename CNT< ELT >::TInvert > &out) const
Set supplied out[i] = this[i]^-1.
Definition: VectorBase.h:320
VectorBase & operator/=(const StdNumber &t)
Definition: VectorBase.h:146
VectorBase(MatrixHelperRep< Scalar > *hrep)
Definition: VectorBase.h:467
const TNeg & operator-() const
Definition: VectorBase.h:448
VectorBase & rowScaleInPlace(const VectorBase< EE > &v)
There's only one column here so it's a bit weird to use rowScale rather than elementwiseMultiply,...
Definition: VectorBase.h:168
EAbs normInf(int *worstOne=0) const
Return the infinity norm (max absolute value) of a Vector of scalars, with optional return of the ind...
Definition: VectorBase.h:251
ptrdiff_t nelt() const
Definition: VectorBase.h:403
VectorBase & elementwiseDivideFromLeftInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:366
VectorView_< ELT > operator()(int i, int m) const
Definition: VectorBase.h:415
VectorBase(int m, const ELT *cppInitialValues)
Construct an owner vector of length m, with the elements initialized sequentially from a C++ array of...
Definition: VectorBase.h:86
VectorBase< EE >::template EltResult< ELT >::Dvd elementwiseDivideFromLeft(const VectorBase< EE > &v) const
Definition: VectorBase.h:376
int ncol() const
Definition: VectorBase.h:402
VectorBase(const VectorBase &source)
Copy constructor is a deep copy (not appropriate for views!).
Definition: VectorBase.h:72
THerm operator~()
Definition: VectorBase.h:439
EltResult< EE >::Dvd elementwiseDivide(const VectorBase< EE > &v) const
Definition: VectorBase.h:362
VectorBase & operator*=(const StdNumber &t)
Definition: VectorBase.h:145
VectorBase & elementwiseMultiplyInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:332
VectorBase(int m=0)
Default constructor makes a 0x1 matrix locked at 1 column; you can provide an initial allocation if y...
Definition: VectorBase.h:67
THerm transpose() const
Definition: VectorBase.h:435
VectorBase & resize(int m)
Definition: VectorBase.h:451
VectorBase & operator=(const VectorBase &b)
Copy assignment is deep copy but behavior depends on type of lhs: if view, rhs must match.
Definition: VectorBase.h:138
EAbs weightedNormInf(const VectorBase< EE > &w, int *worstOne=0) const
Return the weighted infinity norm (max absolute value) WInf of a Vector of scalars,...
Definition: VectorBase.h:284
VectorBase(int m, const ELT &initialValue)
Construct an owner vector of length m, with each element initialized to the given value.
Definition: VectorBase.h:79
VectorBase(const MatrixHelper< Scalar > &h, const typename MatrixHelper< Scalar >::ShallowCopy &s)
Construct a read-only view of the source data.
Definition: VectorBase.h:120
ELT & operator[](int i)
Definition: VectorBase.h:410
VectorBase & operator+=(const VectorBase< EE > &b)
Definition: VectorBase.h:153
const TNeg & negate() const
Definition: VectorBase.h:445
VectorBase(int m, int stride, const Scalar *s)
Construct a read-only view of existing data.
Definition: VectorBase.h:101
VectorView_< ELT > operator()(const Array_< int > &indices)
Definition: VectorBase.h:432
VectorBase(int m, int stride, Scalar *s)
Construct a writable view into existing data.
Definition: VectorBase.h:104
ELT & operator()(int i)
Definition: VectorBase.h:412
VectorBase & operator=(const ELT &t)
Fill current allocation with copies of element.
Definition: VectorBase.h:162
int nrow() const
Definition: VectorBase.h:401
VectorBase(MatrixHelper< Scalar > &h, const typename MatrixHelper< Scalar >::ShallowCopy &s)
Construct a writable view into the source data.
Definition: VectorBase.h:117
VectorBase(const TNeg &source)
Implicit conversion from compatible vector with negated elements.
Definition: VectorBase.h:75
VectorBase & resizeKeep(int m)
Definition: VectorBase.h:452
const ELT & operator[](int i) const
Definition: VectorBase.h:409
VectorBase & operator=(const VectorBase< EE > &b)
Definition: VectorBase.h:151
VectorBase & operator-=(const VectorBase &r)
Definition: VectorBase.h:148
VectorView_< ELT > operator()(int i, int m)
Definition: VectorBase.h:416
VectorBase< EE >::template EltResult< ELT >::Mul elementwiseMultiplyFromLeft(const VectorBase< EE > &v) const
Definition: VectorBase.h:350
VectorBase & elementwiseInvertInPlace()
Set this[i] = this[i]^-1.
Definition: VectorBase.h:314
VectorView_< ELT > operator()(const Array_< int > &indices) const
Definition: VectorBase.h:431
VectorIterator< ELT, VectorBase< ELT > > begin()
Definition: VectorBase.h:458
This is an iterator for iterating over the elements of a Vector_ or Vec object.
Definition: VectorIterator.h:52
(Advanced) This class is identical to Vector_ except that it has shallow (reference) copy and assignm...
Definition: VectorView_.h:42
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
ELEM max(const VectorBase< ELEM > &v)
Definition: VectorMath.h:251
RowVectorBase< typename CNT< ELEM >::TAbs > abs(const RowVectorBase< ELEM > &v)
Definition: VectorMath.h:120
unsigned char square(unsigned char u)
Definition: Scalar.h:349
Definition: VectorBase.h:129
VectorBase< typename CNT< ELT >::template Result< P >::Mul > Mul
Definition: VectorBase.h:130
VectorBase< typename CNT< ELT >::template Result< P >::Add > Add
Definition: VectorBase.h:132
VectorBase< typename CNT< ELT >::template Result< P >::Dvd > Dvd
Definition: VectorBase.h:131
VectorBase< typename CNT< ELT >::template Result< P >::Sub > Sub
Definition: VectorBase.h:133