⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newmat1.cpp

📁 国外一个大牛人写的MEAN-SHIFT目标跟踪算法
💻 CPP
字号:
//$$ newmat1.cpp   Matrix type functions// Copyright (C) 1991,2,3,4: R B Davies#include "newmat.h"#ifdef use_namespacenamespace NEWMAT {#endif/************************* MatrixType functions *****************************/// all operations to return MatrixTypes which correspond to valid types// of matrices.// Eg: if it has the Diagonal attribute, then it must also have// Upper, Lower, Band and Symmetric.MatrixType MatrixType::operator*(const MatrixType& mt) const{   int a = attribute & mt.attribute & ~Symmetric;   a |= (a & Diagonal) * 31;                   // recognise diagonal   return MatrixType(a);}MatrixType MatrixType::SP(const MatrixType& mt) const// elementwise product// Lower, Upper, Diag, Band if only one is// Symmetric, Valid (and Real) if both are// Need to include Lower & Upper => Diagonal// Will need to include both Skew => Symmetric{   int a = ((attribute | mt.attribute) & ~(Symmetric + Valid))      | (attribute & mt.attribute);   if ((a & Lower) != 0  &&  (a & Upper) != 0) a |= Diagonal;   a |= (a & Diagonal) * 31;                   // recognise diagonal   return MatrixType(a);}MatrixType MatrixType::i() const               // type of inverse{   int a = attribute & ~(Band+LUDeco);   a |= (a & Diagonal) * 31;                   // recognise diagonal   return MatrixType(a);}MatrixType MatrixType::t() const// swap lower and upper attributes// assume Upper is in bit above Lower{   int a = attribute;   a ^= (((a >> 1) ^ a) & Lower) * 3;   return MatrixType(a);}MatrixType MatrixType::MultRHS() const{// reomve symmetric attribute unless diagonal   return (attribute == Dg) ? Dg : (attribute & ~Symmetric);}bool Rectangular(MatrixType a, MatrixType b, MatrixType c){   return      ((a.attribute | b.attribute | c.attribute) & ~MatrixType::Valid) == 0;}const char* MatrixType::Value() const{// make a string with the name of matrix with the given attributes   switch (attribute)   {   case Valid:                              return "Rect ";   case Valid+Symmetric:                    return "Sym  ";   case Valid+Band:                         return "Band ";   case Valid+Symmetric+Band:               return "SmBnd";   case Valid+Upper:                        return "UT   ";   case Valid+Diagonal+Symmetric+Band+Upper+Lower:                                            return "Diag ";   case Valid+Band+Upper:                   return "UpBnd";   case Valid+Lower:                        return "LT   ";   case Valid+Band+Lower:                   return "LwBnd";   default:      if (!(attribute & Valid))             return "UnSp ";      if (attribute & LUDeco)         return (attribute & Band) ?     "BndLU" : "Crout";                                            return "?????";   }}GeneralMatrix* MatrixType::New(int nr, int nc, BaseMatrix* bm) const{// make a new matrix with the given attributes   Tracer tr("New"); GeneralMatrix* gm=0;   // initialised to keep gnu happy    switch (attribute)   {   case Valid:      if (nc==1) { gm = new ColumnVector(nr); break; }      if (nr==1) { gm = new RowVector(nc); break; }      gm = new Matrix(nr, nc); break;   case Valid+Symmetric:      gm = new SymmetricMatrix(nr); break;   case Valid+Band:      {         MatrixBandWidth bw = bm->BandWidth();         gm = new BandMatrix(nr,bw.lower,bw.upper); break;      }   case Valid+Symmetric+Band:      gm = new SymmetricBandMatrix(nr,bm->BandWidth().lower); break;   case Valid+Upper:      gm = new UpperTriangularMatrix(nr); break;   case Valid+Diagonal+Symmetric+Band+Upper+Lower:      gm = new DiagonalMatrix(nr); break;   case Valid+Band+Upper:      gm = new UpperBandMatrix(nr,bm->BandWidth().upper); break;   case Valid+Lower:      gm = new LowerTriangularMatrix(nr); break;   case Valid+Band+Lower:      gm = new LowerBandMatrix(nr,bm->BandWidth().lower); break;   default:      Throw(ProgramException("Invalid matrix type"));   }      MatrixErrorNoSpace(gm); gm->Protect(); return gm;}#ifdef use_namespace}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -