1 #ifndef __JMATH__JMATRIXND__ 
    2 #define __JMATH__JMATRIXND__ 
   22 namespace JPP { 
using namespace JMATH; }
 
  108       if (size != this->
__n) {
 
  110         if (size > this->
__m) {
 
  120             THROW(
JNewException, 
"JMatrixND::resize(" << size << 
"): Memory allocation failure.");
 
  166       for (
size_t row = 0; row != this->
size(); ++row) {
 
  167         for (
size_t col = 0; col != row; ++col) {
 
  168           swap((*
this)(row,col), (*
this)(col,row));
 
  264       return *(
__p + row*
__n + col);
 
  277       return *(
__p + row*
__n + col);
 
  288     double at(
size_t row, 
size_t col)
 const 
  290       if (row >= this->
size() ||
 
  291           col >= this->
size()) {
 
  295       return (*
this)(row, col);
 
  306     double& 
at(
size_t row, 
size_t col)
 
  308       if (row >= this->
size() ||
 
  309           col >= this->
size()) {
 
  313       return (*
this)(row, col);
 
  329     public JMath  <JMatrixND>,
 
  427       double* p = A.
data();
 
  429       for (
size_t i = this->
size(); i != 0; --i, ++p) {
 
  435       for (
size_t i = this->
size(); i != 0; --i, p += this->
size()) {
 
  436         memcpy(p, A.
data(), this->
size() * 
sizeof(double));
 
  452       for (
size_t i = 0; i != this->
size(); ++i) {
 
  467       double* p = this->
data();
 
  469       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  487         double*       p = this->
data();
 
  488         const double* q = A.
data();
 
  490         for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p, ++q) {
 
  510         double*       p = this->
data();
 
  511         const double* q = A.
data();
 
  513         for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p, ++q) {
 
  533       double* p = this->
data();
 
  535       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  551       double* p = this->
data();
 
  553       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  575         if (!this->
empty()) {
 
  584           for (row = 0; row + 4 <= this->
size(); row += 4) {              
 
  586             double* p0 = (*this)[row + 0];
 
  587             double* 
p1 = (*this)[row + 1];
 
  588             double* 
p2 = (*this)[row + 2];
 
  589             double* 
p3 = (*this)[row + 3];
 
  591             for (
size_t col = 0; col != this->
size(); ++col, ++p0, ++
p1, ++
p2, ++
p3) {
 
  598               const double* a0 =  A[row + 0];
 
  599               const double* a1 =  A[row + 1];
 
  600               const double* a2 =  A[row + 2];
 
  601               const double* a3 =  A[row + 3];
 
  603               const double* c0 =  C[col];
 
  605               for (i = 0; i + 4 <= this->
size(); i += 4, a0 += 4, a1 += 4, a2 += 4, a3 += 4, c0 += 4) {
 
  606                 w0  +=  a0[0] * c0[0]  +  a0[1] * c0[1]  +  a0[2] * c0[2]  +  a0[3] * c0[3];
 
  607                 w1  +=  a1[0] * c0[0]  +  a1[1] * c0[1]  +  a1[2] * c0[2]  +  a1[3] * c0[3];
 
  608                 w2  +=  a2[0] * c0[0]  +  a2[1] * c0[1]  +  a2[2] * c0[2]  +  a2[3] * c0[3];
 
  609                 w3  +=  a3[0] * c0[0]  +  a3[1] * c0[1]  +  a3[2] * c0[2]  +  a3[3] * c0[3];
 
  612               for ( ; i != this->
size(); ++i, ++a0, ++a1, ++a2, ++a3, ++c0) {
 
  626           for ( ; row != this->
size(); ++row) {                  
 
  628             double* p0 = (*this)[row + 0];
 
  630             for (
size_t col = 0; col != this->
size(); ++col, ++p0) {
 
  634               const double* a0 =  A[row + 0];
 
  635               const double* c0 =  C[col];
 
  637               for (i = 0; i + 4 <= this->
size(); i += 4, a0 += 4, c0 += 4) {
 
  638                 w0  +=  a0[0] * c0[0]  +  a0[1] * c0[1]  +  a0[2] * c0[2]  +  a0[3] * c0[3];
 
  641               for ( ; i != this->
size(); ++i, ++a0, ++c0) {
 
  666                 const double     eps = std::numeric_limits<double>::min())
 const 
  670         for (
size_t row = 0; row != this->
size(); ++row) {
 
  672           const double* p = (*this)[row];
 
  673           const double* q = A      [row];
 
  675           for (
size_t i = this->
size(); i != 0; --i, ++p, ++q) {
 
  676             if (fabs(*p - *q) > eps) {
 
  696     bool isIdentity(
const double eps = std::numeric_limits<double>::min())
 const 
  698       for (
size_t i = 0; i != this->
size(); ++i) {
 
  700         if (fabs(1.0 - (*
this)(i,i)) > eps) {
 
  704         for (
size_t j = 0; 
j != i; ++
j) {
 
  705           if (fabs((*
this)(i,
j)) > eps || fabs((*
this)(
j,i)) > eps) {
 
  721     bool isSymmetric(
const double eps = std::numeric_limits<double>::min())
 const 
  723       for (
size_t i = 0; i != this->
size(); ++i) {
 
  724         for (
size_t j = 0; 
j != i; ++
j) {
 
  725           if (fabs((*
this)(i,
j) - (*
this)(
j,i)) > eps) {
 
  747       for (
size_t i = 0; i != v.size(); ++i) {
 
  749         const double* p = (*this)[i];
 
  753         for (JVectorND::const_iterator y = v.begin(); y != v.end(); ++y, ++p) {
 
  781       for (
double* p = A.
data(); n != 0; --
n, ++p) {
 
  802       for (
const double* p = A.
data(); n != 0; --
n, ++p) {
 
  821       const JFormat format(out, getFormat<JMatrixND>(
JFormat_t(10, 3, std::ios::fixed | std::ios::showpos)));
 
  823       for (
size_t row = 0; row != A.
size(); ++row) {
 
  825         for (
size_t col = 0; col != A.
size(); ++col) {
 
  826           out << format << 
A(row,col) << 
' ';
 
  847       memcpy(A.
data(),    (*this)[r1], this->
size() * 
sizeof(double));
 
  848       memcpy((*
this)[r1], (*
this)[r2], this->
size() * 
sizeof(
double));
 
  849       memcpy((*
this)[r2], A.
data(),    this->
size() * 
sizeof(double));
 
  864       double* 
p2 = this->
data() + c2;
 
  866       for (
size_t i = this->
size(); i != 0; --i, p1 += this->
size(), p2 += this->
size()) {
 
JMatrixND(const JMatrixND &A)
Copy constructor. 
 
Exception for failure of memory allocation. 
 
Interface for binary output. 
 
Auxiliary base class for aritmetic operations of derived class types. 
 
JMatrixND_t(const JMatrixND_t &A)
Copy constructor. 
 
JMatrixND & sub(const JMatrixND &A)
Matrix subtraction. 
 
double at(size_t row, size_t col) const 
Get matrix element. 
 
void clear()
Clear memory. 
 
JMatrixND & mul(const double factor)
Scale matrix. 
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message. 
 
JMatrixND & reset()
Set matrix to the null matrix. 
 
void resize(const size_t size)
Resize matrix. 
 
const double * operator[](size_t row) const 
Get row data. 
 
JMatrixND & operator=(const JMatrixND &A)
Assignment operator. 
 
~JMatrixND_t()
Destructor. 
 
double operator()(const size_t row, const size_t col) const 
Get matrix element. 
 
JMatrixND(const size_t size)
Constructor. 
 
friend JWriter & operator<<(JWriter &out, const JMatrixND &A)
Write matrix to output. 
 
static const double C
Physics constants. 
 
void set(const JMatrixND_t &A)
Set matrix. 
 
JMatrixND_t()
Default constructor. 
 
bool isIdentity(const double eps=std::numeric_limits< double >::min()) const 
Test identity. 
 
Template definition of auxiliary base class for comparison of data structures. 
 
double * data()
Get pointer to data. 
 
JMatrixND & add(const JMatrixND &A)
Matrix addition. 
 
Interface for binary input. 
 
bool equals(const JMatrixND &A, const double eps=std::numeric_limits< double >::min()) const 
Equality. 
 
void rswap(size_t r1, size_t r2)
 
friend JReader & operator>>(JReader &in, JMatrixND &A)
Read matrix from input. 
 
size_t size() const 
Get dimension of matrix. 
 
TCanvas * c1
Global variables to handle mouse events. 
 
JMatrixND & negate()
Negate matrix. 
 
double & at(size_t row, size_t col)
Get matrix element. 
 
size_t __n
dimension of matrix 
 
JMatrixND & operator=(JMatrixND &&A)
Move assignment operator. 
 
static data_type & getInstance()
Get unique instance of template class. 
 
JMatrixND_t(JMatrixND_t &&A)
Move constructor. 
 
double * __p
pointer to data 
 
bool isSymmetric(const double eps=std::numeric_limits< double >::min()) const 
Test symmetry. 
 
void resize(const size_t size)
Resize matrix. 
 
JMatrixND_t & transpose()
Transpose. 
 
Base class for data structures with artithmetic capabilities. 
 
void cswap(size_t c1, size_t c2)
Swap columns. 
 
size_t capacity() const 
Get capacity of dimension. 
 
JMatrixND()
Default constructor. 
 
void swap(JMatrixND_t &A)
Swap matrices. 
 
JMatrixND(JMatrixND &&A)
Move constructor. 
 
Exception for accessing an index in a collection that is outside of its range. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
 
double getDot(const JVectorND &v) const 
Get dot product. 
 
const double * data() const 
Get pointer to data. 
 
bool empty() const 
Check emptyness. 
 
double & operator()(const size_t row, const size_t col)
Get matrix element. 
 
size_t __m
capacity of matrix 
 
JMatrixND & setIdentity()
Set to identity matrix. 
 
double * operator[](size_t row)
Get row data. 
 
JMatrixND & div(const double factor)
Scale matrix. 
 
friend std::ostream & operator<<(std::ostream &out, const JMatrixND &A)
Print ASCII formatted output. 
 
JMatrixND & mul(const JMatrixND &A, const JMatrixND &B)
Matrix multiplication.