1 #ifndef __JMATH__JMATRIXND__ 
    2 #define __JMATH__JMATRIXND__ 
   21 namespace JPP { 
using namespace JMATH; }
 
  104       if (size != this->
__n) {
 
  106         if (size > this->
__m) {
 
  116             THROW(
JNewException, 
"JMatrixND::resize(" << size << 
"): Memory allocation failure.");
 
  162       for (
size_t row = 0; row != this->
size(); ++row) {
 
  163         for (
size_t col = 0; col != row; ++col) {
 
  164           swap((*
this)(row,col), (*
this)(col,row));
 
  260       return *(
__p + row*
__n + col);
 
  273       return *(
__p + row*
__n + col);
 
  284     double at(
size_t row, 
size_t col)
 const 
  286       if (row >= this->
size() ||
 
  287           col >= this->
size()) {
 
  291       return (*
this)(row, col);
 
  302     double& 
at(
size_t row, 
size_t col)
 
  304       if (row >= this->
size() ||
 
  305           col >= this->
size()) {
 
  309       return (*
this)(row, col);
 
  325     public JMath  <JMatrixND>,
 
  440       double* p = A.
data();
 
  442       for (
size_t i = this->
size(); i != 0; --i, ++p) {
 
  448       for (
size_t i = this->
size(); i != 0; --i, p += this->
size()) {
 
  449         memcpy(p, A.
data(), this->
size() * 
sizeof(double));
 
  465       for (
size_t i = 0; i != this->
size(); ++i) {
 
  480       double* p = this->
data();
 
  482       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  500         double*       p = this->
data();
 
  501         const double* q = A.
data();
 
  503         for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p, ++q) {
 
  523         double*       p = this->
data();
 
  524         const double* q = A.
data();
 
  526         for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p, ++q) {
 
  546       double* p = this->
data();
 
  548       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  564       double* p = this->
data();
 
  566       for (
size_t i = this->
size()*this->
size(); i != 0; --i, ++p) {
 
  588         if (!this->
empty()) {
 
  597           for (row = 0; row + 4 <= this->
size(); row += 4) {              
 
  599             double* p0 = (*this)[row + 0];
 
  600             double* 
p1 = (*this)[row + 1];
 
  601             double* 
p2 = (*this)[row + 2];
 
  602             double* 
p3 = (*this)[row + 3];
 
  604             for (
size_t col = 0; col != this->
size(); ++col, ++p0, ++
p1, ++
p2, ++
p3) {
 
  611               const double* a0 =  A[row + 0];
 
  612               const double* a1 =  A[row + 1];
 
  613               const double* a2 =  A[row + 2];
 
  614               const double* a3 =  A[row + 3];
 
  616               const double* c0 =  C[col];
 
  618               for (i = 0; i + 4 <= this->
size(); i += 4, a0 += 4, a1 += 4, a2 += 4, a3 += 4, c0 += 4) {
 
  619                 w0  +=  a0[0] * c0[0]  +  a0[1] * c0[1]  +  a0[2] * c0[2]  +  a0[3] * c0[3];
 
  620                 w1  +=  a1[0] * c0[0]  +  a1[1] * c0[1]  +  a1[2] * c0[2]  +  a1[3] * c0[3];
 
  621                 w2  +=  a2[0] * c0[0]  +  a2[1] * c0[1]  +  a2[2] * c0[2]  +  a2[3] * c0[3];
 
  622                 w3  +=  a3[0] * c0[0]  +  a3[1] * c0[1]  +  a3[2] * c0[2]  +  a3[3] * c0[3];
 
  625               for ( ; i != this->
size(); ++i, ++a0, ++a1, ++a2, ++a3, ++c0) {
 
  639           for ( ; row != this->
size(); ++row) {                  
 
  641             double* p0 = (*this)[row + 0];
 
  643             for (
size_t col = 0; col != this->
size(); ++col, ++p0) {
 
  647               const double* a0 =  A[row + 0];
 
  648               const double* c0 =  C[col];
 
  650               for (i = 0; i + 4 <= this->
size(); i += 4, a0 += 4, c0 += 4) {
 
  651                 w0  +=  a0[0] * c0[0]  +  a0[1] * c0[1]  +  a0[2] * c0[2]  +  a0[3] * c0[3];
 
  654               for ( ; i != this->
size(); ++i, ++a0, ++c0) {
 
  679                 const double     eps = std::numeric_limits<double>::min())
 const 
  683         for (
size_t row = 0; row != this->
size(); ++row) {
 
  685           const double* p = (*this)[row];
 
  686           const double* q = A      [row];
 
  688           for (
size_t i = this->
size(); i != 0; --i, ++p, ++q) {
 
  689             if (fabs(*p - *q) > eps) {
 
  709     bool isIdentity(
const double eps = std::numeric_limits<double>::min())
 const 
  711       for (
size_t i = 0; i != this->
size(); ++i) {
 
  713         if (fabs(1.0 - (*
this)(i,i)) > eps) {
 
  717         for (
size_t j = 0; 
j != i; ++
j) {
 
  718           if (fabs((*
this)(i,
j)) > eps || fabs((*
this)(
j,i)) > eps) {
 
  734     bool isSymmetric(
const double eps = std::numeric_limits<double>::min())
 const 
  736       for (
size_t i = 0; i != this->
size(); ++i) {
 
  737         for (
size_t j = 0; 
j != i; ++
j) {
 
  738           if (fabs((*
this)(i,
j) - (*
this)(
j,i)) > eps) {
 
  760       for (
size_t i = 0; i != v.size(); ++i) {
 
  762         const double* p = (*this)[i];
 
  766         for (JVectorND::const_iterator y = v.begin(); y != v.end(); ++y, ++p) {
 
  794       for (
double* p = A.
data(); n != 0; --
n, ++p) {
 
  815       for (
const double* p = A.
data(); n != 0; --
n, ++p) {
 
  834       const JFormat format(out, getFormat<JMatrixND>(
JFormat_t(10, 3, std::ios::fixed | std::ios::showpos)));
 
  836       for (
size_t row = 0; row != A.
size(); ++row) {
 
  838         for (
size_t col = 0; col != A.
size(); ++col) {
 
  839           out << format << 
A(row,col) << 
' ';
 
  862       memcpy(A.
data(),    (*this)[r1], this->
size() * 
sizeof(double));
 
  863       memcpy((*
this)[r1], (*
this)[r2], this->
size() * 
sizeof(
double));
 
  864       memcpy((*
this)[r2], A.
data(),    this->
size() * 
sizeof(double));
 
  879       double* 
p2 = this->
data() + c2;
 
  881       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_t & getInstance()
Get work space. 
 
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. 
 
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.