intutils.h
#if (!defined(__intutils_h))
#include "capd/capdlib.h"
#include "capd/mpcapdlib.h"
#include "gmp.h"
#include <gmpxx.h>
using namespace std;
using namespace capd;
// for backward compatibility with BIAS/Profil
//inline double Mid(const Interval & x){ return 0.5*(x.rightBound()+x.leftBound());}
inline double Mid(const Interval & x){ return x.mid().leftBound();}
inline double Inf(const Interval & x){ return x.leftBound();}
inline double Sup(const Interval & x){ return x.rightBound();}
inline MpFloat Mid(const MpInterval & x){ return x.mid().leftBound();}
inline MpFloat Inf(const MpInterval & x){ return x.leftBound();}
inline MpFloat Sup(const MpInterval & x){ return x.rightBound();}
DVector Mid(const IVector & x);
DVector Inf(const IVector & x);
DVector Sup(const IVector & x);
MpVector Mid(const MpIVector & x);
MpVector Inf(const MpIVector & x);
MpVector Sup(const MpIVector & x);
DMatrix Mid(const IMatrix & x);
MpMatrix Mid(const MpIMatrix & x);
IMatrix Convert(const DMatrix & x);
MpIMatrix Convert(const MpMatrix & x);
IVector Hull(const IVector & x, const IVector & y);
MpInterval mHull(MpFloat & x);
template <class TVector, class TScalar>
void VectorSetValue(TVector & x, TScalar val){ for (int i=0;i<x.dimension();++i) x[i]=val;}
template <class TMatrix, class TScalar>
void MatrixSetValue(TMatrix & x, TScalar val){
for (int i=1;i<=x.numberOfRows();++i){
for (int j=1;j<=x.numberOfColumns();++j) x(i,j)=val;
}
}
template <class TVector>
typename TVector::ScalarType EuclNorm(const TVector & x){
typename TVector::ScalarType res=0.0;
for (int i=0;i<x.dimension();++i) res+=sqr(x[i]);
return sqrt(res);
}
template <class TVector>
typename TVector::ScalarType EuclDist(const TVector & x, const TVector & y){
if (x.dimension()!=y.dimension()) return typename TVector::ScalarType(1e100);
return EuclNorm(x-y);
}
template <class TVector>
typename TVector::ScalarType MaxAbsValue(const TVector & v){
typename TVector::ScalarType res=0.0;
for (int d=0;d<v.dimension();++d){
if (abs(v[d])>res) res=abs(v[d]);
}
return res;
}
template <class TVector>
typename TVector::ScalarType VectorAbsMax(const TVector & v){
typename TVector::ScalarType res=0.0;
for (int d=0;d<v.dimension();++d){
if (abs(v[d])>res) res=abs(v[d]);
}
return res;
}
template <class TVector>
typename TVector::ScalarType MaxDist(const TVector & x, const TVector & y){
if (x.dimension()!=y.dimension()) return typename TVector::ScalarType(1e100);
return MaxAbsValue(x-y);
}
template <class TMatrix>
typename TMatrix::ScalarType MaxAbsValueMatrix(const TMatrix & x){
typename TMatrix::ScalarType res=0.0;
for (int i=1;i<=x.numberOfRows();++i){
for (int j=1;j<=x.numberOfColumns();++j){
if (abs(x(i,j))>res) res=abs(x(i,j));
}
}
return res;
}
template <class TMatrix>
typename TMatrix::ScalarType Trace(const TMatrix & x){
typename TMatrix::ScalarType res(0.0);
for (int i=1;i<=x.numberOfRows();++i) res+=x(i,i);
return res;
}
template <class TVector>
TVector VectorPart(const TVector & x, int dim, int pos){
TVector res(dim);
for (int i=0;i<dim;++i) res[i]=x[pos+i];
return res;
}
template <class TVector>
TVector VectorRemovePos(const TVector & x, int pos){ // remove selected element from x, returns a vector with the dimension reduced by 1
int dim=x.dimension();
TVector res(dim-1,0.0);
for (int i=0,ip=0;i<dim;++i){
if (i!=pos) res[ip++]=x[i];
}
return res;
}
template <class TVector, class TScalar>
TVector VectorAddPos(const TVector & x, int pos, const TScalar & val){ // adds elemet to x at position pos
int dim=x.dimension();
TVector res(dim+1);
if (pos>=dim){ cerr << "VectorAddPos ERROR: " << endl; return x;}
for (int i=0, ip=0;i<dim+1;++i){
if (i==pos) continue;
res[i]=x[ip];
ip++;
}
res[pos]=val;
return res;
}
template <class TMatrix>
TMatrix MatrixRemoveRowCol(const TMatrix & M, int r, int c){
// remove the row r and column c from the matrix M, indexes start with 0
int rownum=M.numberOfRows();
int colnum=M.numberOfColumns();
if (r>=rownum || c>=colnum){ cerr << "MatrixRemoveRowCol ERROR: " << endl; return M;}
TMatrix Res((rownum-1),(colnum-1),0.0);
for (int i=0, posi=0;i<rownum;++i){
if (i==r) continue;
for (int j=0,posj=0;j<colnum;++j){
if (j!=c) Res[posi][posj++]=M[i][j];
}
posi++;
}
return Res;
}
template <class TMatrix>
TMatrix MatrixPart(TMatrix & M, int position){
int dim=M.numberOfRows();
if (dim!=M.numberOfColumns()){
cerr << "MatrixPart: " << "wrong dimensions." << endl;
return M;
}
TMatrix MPart((dim-1),(dim-1),0.0);
int posi=0;
for (int i=0;i<dim;++i){
if (i==position) continue;
int posj=0;
for (int j=0;j<dim;++j){
if (j==position) continue;
MPart[posi][posj]=M[i][j];
posj++;
}
posi++;
}
return MPart;
}
double DiamInterval(Interval & x);
MpFloat DiamInterval(MpInterval & x);
double MaxDiamVector(const IVector & x);
MpFloat MaxDiamVector(const MpIVector & x);
double MaxDiamMatrix(const IMatrix & x);
MpFloat MaxDiamMatrix(const MpIMatrix & x);
#define __intutils_h __intutils_h
#endif