32 MATR prod_vectorial(
const MATR &v1,
const MATR &v2);
    36 template <
class numero>
    43     typedef typename vectorZ_numero::reference reference;
    44     typedef typename vectorZ_numero::const_reference const_reference;
    45     typedef typename vectorZ_numero::value_type value_type;    
    46     typedef typename vectorZ_numero::size_type size_type;
    47     typedef typename mT_numero::lst_T lst_numero;
    51     numero DMGT(
const numero &eps) 
const;
    54     numero row_sum(size_type i) 
const;
    55     numero column_sum(size_type j) 
const;
    57     ZMatrix(
void) : mT_numero(1,1) {}
    58     ZMatrix(size_type n_rows,size_type n_columns) : mT_numero(n_rows,n_columns) {}
    59     ZMatrix(size_type n_rows,size_type n_columns,numero val) : mT_numero(n_rows,n_columns,val) {}
    60     ZMatrix(size_type n_rows,size_type n_columns,
const lst_numero &ln) : mT_numero(n_rows,n_columns)
    61       { vectorZ_numero::operator=(vectorZ_numero(ln)); }
    63     template <
class InputIterator>
    64     ZMatrix(
const size_t &n_rows,
const size_t &n_columns,InputIterator b,InputIterator e);
    77         this->check_sto_sum(m);
    83         this->check_sto_dif(m);
    97     numero row_maximum(size_type i) 
const;
    98     numero column_maximum(size_type j) 
const;
    99     void PutSuma(size_type i,size_type j,
const numero &n)
   101       { vectorZ_numero::PutSuma(Indice(i,j),n); }
   102     void PutResta(size_type i,size_type j,
const numero &n)
   104       { vectorZ_numero::PutResta(Indice(i,j),n); }    
   105     void PutProd(size_type i,size_type j,
const numero &n)
   107       { vectorZ_numero::PutProd(Indice(i,j),n); }
   108     void swap(size_type f1,size_type c1,size_type f2, size_type c2)
   109       { vectorZ_numero::swap(Indice(f1,c1),Indice(f2,c2)); }    
   123       { 
return getBox(iRow,1,iRow,this->n_columns); }
   125       { 
return getBox(1,col,this->n_rows,col); }
   130     numero 
GetDet(
const numero &eps= 1e-10) 
const;
   131     numero 
Traza(
void) 
const;
   132     inline bool Nulo(
const numero &tol= numero())
 const   133       { 
return (this->
Abs2()<(tol*tol)); }
   136     inline void Neg(
void)
   139     virtual void Input(std::istream &);
   140     virtual void Input(
const std::string &);
   143       { 
return ((
const mT_numero &) m1 == (
const mT_numero &) m2); }
   162     numero 
Abs2(
void) 
const;
   163     numero 
Abs(
void) 
const;
   169       { 
return v1.dot(v2); }
   195       { 
return prod_vectorial(v1,v2); }
   199 template <
class numero> 
template<
class InputIterator>
   203 template <
class numero>
   211 template <
class numero>
   213   { return ::GetMenor(*
this,f,c); }
   215 template <
class numero>  
   219     for(i=1;i<=box.n_rows;i++)
   220       for(j=1;j<=box.n_columns;j++)
   221         PutSuma(i+f-1,j+c-1,box(i,j));
   224 template <
class numero>
   230     vectorZ_numero::Con(numero());
   231     for(i= 1;i<=this->n_rows;i++) (*
this)(i,i)= neutro_producto(numero()); 
   237 template <
class MATR>
   238 MATR prod_vectorial(
const MATR &v1,
const MATR &v2)
   240     MATR v(v1.getNumberOfRows(),v1.getNumberOfColumns());
   241     MATR m(v1.getNumberOfRows(),3);
   245     menor= GetMenor(m,1,1);
   246     v(1,1)= menor.GetDet();
   247     menor= GetMenor(m,2,1);
   248     v(2,1)= -menor.GetDet();
   249     menor= GetMenor(m,3,1);
   250     v(3,1)= menor.GetDet();
   258 template <
class numero>
   262     numero p= neutro_suma(numero());
   263     const numero cero= neutro_suma(p);
   264     size_type n= this->getNumberOfRows();
   273           p= (*this)(1,1)*(*
this)(2,2)-(*
this)(1,2)*(*
this)(2,1);
   276           p= (*this)(1,1)*(*
this)(2,2)*(*
this)(3,3);
   277           p+= (*this)(1,2)*(*
this)(2,3)*(*
this)(3,1);
   278           p+= (*this)(1,3)*(*
this)(2,1)*(*
this)(3,2);
   279           p-= (*this)(1,3)*(*
this)(2,2)*(*
this)(3,1);
   280           p-= (*this)(1,2)*(*
this)(2,1)*(*
this)(3,3);
   281           p-= (*this)(1,1)*(*
this)(2,3)*(*
this)(3,2);
   285             for(size_type i= 1;i<= n;i++)
   302 template <
class numero>
   304   { 
return DMGT(eps); }
   306 template <
class numero>
   307 std::ostream &operator<<(std::ostream &os,const ZMatrix<numero> &m)
   310     typename ZMatrix<numero>::size_type i,j;
   311     typename ZMatrix<numero>::size_type n_rows= m.getNumberOfRows(),n_columns= m.getNumberOfColumns();
   312     for(i= 1;i<=n_rows;i++)
   315         if(n_columns > 0) os << m(i,1);
   316     for(j= 2;j<=n_columns;j++)
   324 template <
class numero>
   331 template<
class numero>
   340 template<
class numero>
   344     ZMatrix<numero> producto(m1.getNumberOfRows(),m2.getNumberOfColumns());
   345     size_t n_rows= m1.getNumberOfRows();
   346     size_t ncols_m1= m1.getNumberOfColumns();
   347     size_t ncols= m2.getNumberOfColumns();
   348     typedef typename ZMatrix<numero>::size_type sz_type;
   349     for(sz_type i=1;i<=n_rows;i++)
   350       for(sz_type j=1;j<=ncols;j++)
   352           numero t= m1(i,1) * m2(1,j); 
   353           for(sz_type k=2;k<= ncols_m1;k++)
   354             t+= m1(i,k) * m2(k,j);
   360 template<
class numero>
   387     const size_t n= this->n_rows;
   389     size_t ko,lo; numero po,t0;
   393     while (*it==1 && k<n)
   395         po=C(k,k); lo=k; ko=k;
   398             if(fabs(C(i,j))>fabs(po))
   399               { po=C(i,j); lo=i; ko=j; }
   404         std::cerr << std::endl
   405               << 
"Error: pivot too small!" << std::endl;
   411                 { t0=C(k,j); C(k,j)=C(lo,j); C(lo,j)=t0; }
   414                 { t0=C(i,k); C(i,k)=C(i,ko); C(i,ko)=t0; }
   415         for(i=k+1; i<=n; i++)
   418                 for(j=k+1; j<=n; j++)
   419                   C(i,j)-= C(i,k)*C(k,j);
   424     if(*it==1 && fabs(C(n,n))<eps) *it=0;
   427 template <
class numero>
   452     const size_t n= this->n_rows;
   456     const numero cero= neutro_suma(d0);
   457     const numero uno= neutro_producto(d0);
   461     TSRGT(eps,&it,C,Kp,Lp);  
   468         for(k=1; k<=n; k++)  d0 *= C(k,k);
   475         if ((l%2)!=0)  d0=-d0;
   481 template <
class numero>
   484     this->check_get_box(f1,c1,f2,c2);
   486     for(size_type i=1;i<=box.n_rows;i++)
   487       for(size_type j=1;j<=box.n_columns;j++)
   493 template <
class numero>
   498     for(size_type i= 1;i<=this->n_rows;i++) n+= (*
this)(i,i);
   501 template <
class numero>
   504     numero sumaf= (*this)(i,1);
   505     for(
size_t j=2;j<=this->n_columns;j++)
   506       sumaf+= (*
this)(i,j);
   509 template <
class numero>
   512     numero sumac= (*this)(1,j);
   513     for(
size_t i=2;i<=this->n_columns;i++)
   514       sumac+= (*
this)(i,j);
   517 template <
class numero>
   520     numero maxf= (*this)(i,1);
   521     for(
size_t j=2;j<=this->n_columns;j++)
   522       maxf= std::max(maxf,(*
this)(i,j));
   525 template <
class numero>
   528     numero maxc= (*this)(1,j);
   529     for(
size_t i=2;i<=this->n_columns;i++)
   530       maxc+= std::max(maxc,(*
this)(i,j));
   535 template <
class numero>
   538     numero maximo= row_sum(1);
   539     for(
size_t i=2;i<=this->n_rows;i++) maximo= max(maximo,row_sum(i));
   544 template <
class numero>
   547     numero maximo= column_sum(1);
   548     for(
size_t j=2;j<=this->n_columns;j++) maximo= max(maximo,column_sum(j));
   551 template <
class numero>
   557     numero retval((*
this)(1,1)*v2(1,1));
   558     typename ZMatrix<numero>::size_type i;
   559     for(i=2;i<=this->n_columns;i++)
   560       { retval+= (*this)(1,i) * v2(i,1); }
   565 template <
class numero>
   584 template <
class numero>
   586   { 
return sqrt(
Abs2()); }
   589 template <
class numero>
   593     typename ZMatrix<numero>::lst_numero ln;
   594     size_t n_rows=0,n_columns=1;
   598     if(c != 
'[') is.putback(c);
   599     std::istream::sentry ipfx(is);
   623             if(sigue) n_columns++;
   636 template <
class numero>
   639     std::istringstream iss(str);
   644 template <
class treal>  
 ZMatrix< numero > getBox(size_t f1, size_t c1, size_t f2, size_t c2) const
Return the box between the indices being passed as parameter. 
Definition: ZMatrix.h:482
numero getColumnNorm(void) const
Return the maximum value of the components of the vector obtained by adding the components of the col...
Definition: ZMatrix.h:545
Matrix which element type has estructura de anillo respecto a las operaciones + y *...
Definition: ZMatrix.h:37
TMatrix< numero, vectorZ< numero > > & operator=(const TMatrix< numero, vectorZ< numero > > &m)
Assignment operator. 
Definition: TMatrix.h:192
numero Abs(void) const
Return the norm (euclidean norm) of the matrix. 
Definition: ZMatrix.h:585
numero getRowNorm(void) const
Return el valor máximo de los elementos del vector que resulta de sumar los rows elements. 
Definition: ZMatrix.h:536
virtual void Input(std::istream &)
Lectura desde istream. 
Definition: ZMatrix.h:590
numero GetDetLento(void) const
Return el determinante. 
Definition: ZMatrix.h:259
numero Traza(void) const
Return the trace of the matrix. 
Definition: ZMatrix.h:494
numero GetDet(const numero &eps=1e-10) const
Return el determinante. 
Definition: ZMatrix.h:303
numero Abs2(void) const
Return the squared norm (euclidean norm) of the matrix. 
Definition: ZMatrix.h:566