1 #ifndef SimTK_SIMMATRIX_VECTORBASE_H_ 2 #define SimTK_SIMMATRIX_VECTORBASE_H_ 42 template <
class ELT>
class VectorBase :
public MatrixBase<ELT> {
43 typedef MatrixBase<ELT> Base;
49 typedef VectorBase<ELT> T;
50 typedef VectorBase<typename CNT<ELT>::TAbs> TAbs;
51 typedef VectorBase<typename CNT<ELT>::TNeg> TNeg;
52 typedef RowVectorView_<typename CNT<ELT>::THerm> THerm;
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;
190 ScalarNormSq sumsq = 0;
193 ScalarNormSq maxsq = 0;
194 for (
int i=0; i<
n; ++i) {
195 const ScalarNormSq v2 =
square((*
this)[i]);
196 if (v2 > maxsq) maxsq=v2, *worstOne=i;
200 for (
int i=0; i<
n; ++i) {
201 const ScalarNormSq v2 =
square((*
this)[i]);
219 "Vector::weightedNormRMS() only defined for scalar elements" 221 const int n =
nrow();
224 if (worstOne) *worstOne = -1;
228 ScalarNormSq sumsq = 0;
231 ScalarNormSq maxsq = 0;
232 for (
int i=0; i<
n; ++i) {
233 const ScalarNormSq wv2 =
square(w[i]*(*
this)[i]);
234 if (wv2 > maxsq) maxsq=wv2, *worstOne=i;
238 for (
int i=0; i<
n; ++i) {
239 const ScalarNormSq wv2 =
square(w[i]*(*
this)[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) {
265 const EAbs a =
std::abs((*
this)[i]);
266 if (a > maxabs) maxabs=a, *worstOne=i;
269 for (
int i=0; i<
n; ++i) {
270 const EAbs a =
std::abs((*
this)[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) {
300 const EAbs wv =
std::abs(w[i]*(*
this)[i]);
301 if (wv > maxabs) maxabs=wv, *worstOne=i;
304 for (
int i=0; i<
n; ++i) {
305 const EAbs wv =
std::abs(w[i]*(*
this)[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);
445 const TNeg&
negate()
const {
return *
reinterpret_cast<const TNeg*
>(
this); }
446 TNeg&
updNegate() {
return *
reinterpret_cast<TNeg*
>(
this); }
475 #endif // SimTK_SIMMATRIX_VECTORBASE_H_
VectorView_< ELT > operator()(int j) const
Definition: MatrixBase.h:595
void elementwiseDivide(const VectorBase< EE > &v, typename EltResult< EE >::Dvd &out) const
Definition: VectorBase.h:360
VectorBase & operator-=(const VectorBase &r)
Definition: VectorBase.h:148
VectorIterator< ELT, VectorBase< ELT > > begin()
Definition: VectorBase.h:458
VectorBase & operator/=(const StdNumber &t)
Definition: VectorBase.h:146
EScalarNormSq ScalarNormSq
Definition: MatrixBase.h:101
THerm updTranspose()
Definition: VectorBase.h:436
Definition: MatrixHelper.h:48
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation source
Definition: LICENSE.txt:26
const MatrixCommitment & getCharacterCommitment() const
Definition: MatrixBase.h:119
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< EE > &b)
Definition: VectorBase.h:151
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
K::TSqrt TSqrt
Definition: CompositeNumericalTypes.h:154
MatrixHelper< Scalar > & updHelper()
Definition: MatrixBase.h:866
static TSqrt sqrt(const K &t)
Definition: CompositeNumericalTypes.h:239
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
MatrixBase< typename CNT< E >::TInvert > elementwiseInvert() const
Definition: MatrixBase.h:453
K::Scalar Scalar
Definition: CompositeNumericalTypes.h:160
A MatrixCharacter is a set containing a value for each of the matrix characteristics except element t...
Definition: MatrixCharacteristics.h:597
EAbs weightedNormInf(const VectorBase< EE > &w, int *worstOne=0) const
Return the weighted infinity norm (max absolute value) WInf of a Vector of scalars, with optional return of the index of the weighted element of largest absolute value.
Definition: VectorBase.h:284
const TNeg & operator-() const
Definition: VectorBase.h:448
int size() const
Definition: VectorBase.h:396
MatrixBase & operator/=(const StdNumber &t)
Definition: MatrixBase.h:291
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:780
VectorView_< ELT > operator()(int i, int m) const
Definition: VectorBase.h:415
VectorBase< typename CNT< ELT >::template Result< P >::Add > Add
Definition: VectorBase.h:132
EltResult< EE >::Mul elementwiseMultiply(const VectorBase< EE > &v) const
Definition: VectorBase.h:336
Definition: Exception.h:297
int ncol() const
Definition: VectorBase.h:402
VectorBase< typename CNT< ELT >::template Result< P >::Mul > Mul
Definition: VectorBase.h:130
void elementwiseMultiply(const VectorBase< EE > &v, typename EltResult< EE >::Mul &out) const
Definition: VectorBase.h:334
VectorBase< EE >::template EltResult< ELT >::Mul elementwiseMultiplyFromLeft(const VectorBase< EE > &v) const
Definition: VectorBase.h:350
void elementwiseMultiplyFromLeft(const VectorBase< EE > &v, typename VectorBase< EE >::template EltResult< ELT >::Mul &out) const
Definition: VectorBase.h:343
MatrixBase & operator-=(const MatrixBase &r)
Definition: MatrixBase.h:293
MatrixBase & operator*=(const StdNumber &t)
Definition: MatrixBase.h:290
TNeg & operator-()
Definition: VectorBase.h:449
VectorBase & operator-=(const VectorBase< EE > &b)
Definition: VectorBase.h:155
VectorBase & operator+=(const VectorBase &r)
Definition: VectorBase.h:147
unsigned char square(unsigned char u)
Definition: Scalar.h:351
VectorView_< ELT > updIndex(const Array_< int > &indices)
Definition: VectorBase.h:425
void elementwiseDivideFromLeft(const VectorBase< EE > &v, typename VectorBase< EE >::template EltResult< ELT >::Dvd &out) const
Definition: VectorBase.h:369
m
Definition: CMakeCache.txt:469
VectorBase & operator+=(const VectorBase< EE > &b)
Definition: VectorBase.h:153
VectorBase(const VectorBase &source)
Copy constructor is a deep copy (not appropriate for views!).
Definition: VectorBase.h:72
VectorBase & elementwiseDivideFromLeftInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:366
VectorBase< typename CNT< ELT >::template Result< P >::Dvd > Dvd
Definition: VectorBase.h:131
VectorBase(const MatrixHelper< Scalar > &h, const typename MatrixHelper< Scalar >::ShallowCopy &s)
Construct a read-only view of the source data.
Definition: VectorBase.h:120
VectorBase(const TNeg &source)
Implicit conversion from compatible vector with negated elements.
Definition: VectorBase.h:75
MatrixView_< EHerm > transpose() const
Definition: BigMatrix.h:222
VectorBase & rowScaleInPlace(const VectorBase< EE > &v)
There's only one column here so it's a bit weird to use rowScale rather than elementwiseMultiply, but there's nothing really wrong with it.
Definition: VectorBase.h:168
This is an iterator for iterating over the elements of a Vector_ or Vec object.
Definition: BigMatrix.h:176
THerm operator~()
Definition: VectorBase.h:439
VectorView_< ELT > operator()(const Array_< int > &indices)
Definition: VectorBase.h:432
int nrow() const
Return the number of rows m in the logical shape of this matrix.
Definition: MatrixBase.h:137
ELT sum() const
Definition: VectorBase.h:457
VectorView_< ELT > operator()(const Array_< int > &indices) const
Definition: VectorBase.h:431
VectorBase & elementwiseMultiplyFromLeftInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:340
(Advanced) This class is identical to Matrix_ except that it has shallow (reference) copy and assignm...
Definition: BigMatrix.h:167
K::TInvert TInvert
Definition: CompositeNumericalTypes.h:157
MatrixView_< EHerm > updTranspose()
Definition: BigMatrix.h:230
EltResult< EE >::Mul rowScale(const VectorBase< EE > &v) const
Definition: VectorBase.h:172
VectorBase(MatrixHelper< Scalar > &h, const typename MatrixHelper< Scalar >::ShallowCopy &s)
Construct a writable view into the source data.
Definition: VectorBase.h:117
аЯ рЁБ с ўџ З Й ўџџџ Г Д Е Ж џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџьЅС ј П ч bjbjcTcT кй Г У Л t џџ џџ џџ З С K K K D џџџџ 2 ZЦ j J a n u a r A b s t r a c t W e d e s c r i b e t h e g o a l s a n d d e s i g n d e c i s i o n b e h i n d S i m m a t r i t h e S i m T K m a t r i x a n d l i n e a r a l g e b r a l i b r a r a n d p r o v i d e r e f e r e n c e i n f o r m a t i o n f o r u s i n g i t T h e i d e a i s t o p r o v i d e t h e p o w e r
Definition: Simmatrix.doc:7
VectorBase & resizeKeep(int m)
Definition: VectorBase.h:452
ELEM max(const VectorBase< ELEM > &v)
Definition: VectorMath.h:251
TNeg & updNegate()
Definition: VectorBase.h:446
VectorBase & elementwiseDivideInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:358
#define SimTK_THROW1(exc, a1)
Definition: Exception.h:311
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...
аЯ рЁБ с ўџ З Й ўџџџ Г Д Е Ж џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџьЅС ј П ч bjbjcTcT кй Г У Л t џџ џџ џџ З С K K K D џџџџ 2 ZЦ j J a n u a r A b s t r a c t W e d e s c r i b e t h e g o a l s a n d d e s i g n d e c i s i o n b e h i n d S i m m a t r i t h e S i m T K m a t r i x a n d l i n e a r a l g e b r a l i b r a r a n d p r o v i d e r e f e r e n c e i n f o r m a t i o n f o r u s i n g i t T h e i d e a i s t o p r o v i d e t h e p o w e n a t u r a l n e s s
Definition: Simmatrix.doc:7
VectorView_< ELT > index(const Array_< int > &indices) const
Definition: VectorBase.h:420
VectorBase(int m, int stride, Scalar *s)
Construct a writable view into existing data.
Definition: VectorBase.h:104
int nrow() const
Definition: VectorBase.h:401
MatrixBase & elementwiseInvertInPlace()
Set M(i,j) = M(i,j)^-1.
Definition: BigMatrix.h:361
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
This is the matrix class intended to appear in user code for large, variable size matrices...
Definition: BigMatrix.h:168
ELT & operator()(int i)
Definition: VectorBase.h:412
MatrixBase & operator+=(const MatrixBase &r)
Definition: MatrixBase.h:292
K::StdNumber StdNumber
Definition: CompositeNumericalTypes.h:163
const S * getElt(int i, int j) const
RowVectorBase< typename CNT< ELEM >::TAbs > abs(const RowVectorBase< ELEM > &v)
Definition: VectorMath.h:120
gјiЌтkDdёMV wfлaIJуtюц ЩAАйЉtџ1Л JљcA nrш S qо isІ3 уЏ ЇжЇ Ы ТгVфЦKф C д9Z У ЉD Ўq FxnЙцТ n єT ЉY Н< щ['ЖjdЛ< K JvTMЯH"ЋяОsђЫw>}љіo_Йљ
ЗoЖЃ?Ї zџШЎ'z:mЄІуЧV$ќКРyЁnаgЭџiлИJ{и хЩїTaК*АдdКВE|lєzbXс@!^РклѕгOЌoi_г=ўінOП}&кХВQUV
ЅWTshЃ!ГљPЌ_ЊЕС7ЅDRAVъfЎвЪПЈЛЅbOждЙЩЋtЎ0оY!О|л'ђЉx'ўУГ§нЅК:/ўќПќ V[ц,тЇо}-Bж§Ъ/ПјиџіЌм;у:х;яОй;IюЫПЇой[nK4Ћ#ІЁ-Б='ЈGf\lЙчѕb41лЉ> ѓйOчsчЂ7x f p§ъZzB рI рЮ gЊБЁ Њ n
Definition: SimmathUserGuide.doc:2262
Specialized information about Composite Numerical Types which allows us to define appropriate templat...
Definition: CompositeNumericalTypes.h:136
TAbs abs() const
Definition: VectorBase.h:406
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
VectorBase(MatrixHelperRep< Scalar > *hrep)
Definition: VectorBase.h:467
VectorView_< ELT > operator()(int i, int m)
Definition: VectorBase.h:416
MatrixBase & operator=(const MatrixBase &b)
Definition: MatrixBase.h:201
const MatrixHelper< Scalar > & getHelper() const
Definition: MatrixBase.h:865
void rowScale(const VectorBase< EE > &v, typename EltResult< EE >::Mul &out) const
Definition: VectorBase.h:170
VectorBase & operator=(const ELT &t)
Fill current allocation with copies of element.
Definition: VectorBase.h:162
void clear()
Definition: VectorBase.h:455
CNT< E >::TAbs EAbs
Definition: MatrixBase.h:84
This is a dataless rehash of the MatrixBase class to specialize it for Vectors.
Definition: BigMatrix.h:164
VectorBase(int m, int stride, const Scalar *s)
Construct a read-only view of existing data.
Definition: VectorBase.h:101
VectorIterator< ELT, VectorBase< ELT > > end()
Definition: VectorBase.h:461
VectorBase< EE >::template EltResult< ELT >::Dvd elementwiseDivideFromLeft(const VectorBase< EE > &v) const
Definition: VectorBase.h:376
const ELT & operator[](int i) const
Definition: VectorBase.h:409
A MatrixCommitment provides a set of acceptable matrix characteristics.
Definition: MatrixCharacteristics.h:832
const ELT & operator()(int i) const
Definition: VectorBase.h:411
THerm operator~() const
Definition: VectorBase.h:438
const VectorBase & operator+() const
Definition: VectorBase.h:441
ptrdiff_t nelt() const
Return the number of elements in the logical shape of this matrix.
Definition: MatrixBase.h:148
TAbs abs() const
abs() with the result as a function return.
Definition: MatrixBase.h:699
VectorBase & resize(int m)
Definition: VectorBase.h:451
K::Number Number
Definition: CompositeNumericalTypes.h:162
THerm transpose() const
Definition: VectorBase.h:435
EltResult< EE >::Dvd elementwiseDivide(const VectorBase< EE > &v) const
Definition: VectorBase.h:362
VectorBase & elementwiseInvertInPlace()
Set this[i] = this[i]^-1.
Definition: VectorBase.h:314
void clear()
This restores the MatrixBase to the state it would be in had it been constructed specifying only its ...
Definition: MatrixBase.h:288
VectorBase< typename CNT< ELT >::TInvert > elementwiseInvert() const
Return out[i]=this[i]^-1 as function return.
Definition: VectorBase.h:325
VectorBase< typename CNT< ELT >::template Result< P >::Sub > Sub
Definition: VectorBase.h:133
int ncol() const
Return the number of columns n in the logical shape of this matrix.
Definition: MatrixBase.h:139
MatrixBase & setTo(const ELT &t)
Fill every element in current allocation with given element (or NaN or 0).
Definition: MatrixBase.h:583
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
MatrixBase & resize(int m, int n)
Change the size of this matrix.
Definition: MatrixBase.h:774
VectorBase & elementwiseMultiplyInPlace(const VectorBase< EE > &r)
Definition: VectorBase.h:332
ELT & operator[](int i)
Definition: VectorBase.h:410
(Advanced) This class is identical to Vector_ except that it has shallow (reference) copy and assignm...
Definition: BigMatrix.h:170
VectorBase & operator*=(const StdNumber &t)
Definition: VectorBase.h:145
Definition: VectorBase.h:129
void elementwiseInvert(VectorBase< typename CNT< ELT >::TInvert > &out) const
Set supplied out[i] = this[i]^-1.
Definition: VectorBase.h:320
ptrdiff_t nelt() const
Definition: VectorBase.h:403
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
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
const TNeg & negate() const
Definition: VectorBase.h:445
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