Index: tol/bmath/bfunct/fib.cpp
===================================================================
--- tol/bmath/bfunct/fib.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/bmath/bfunct/fib.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -116,6 +116,6 @@
 BDat BFibonacci::Minimum( BRRFunction* function,
 			  BDat& minimumValue,
-			  BDat ini, BDat fin ,
-			  BDat tol)
+			  BDat ini, BDat fin,
+			  BDat tol, int maxEval)
     
 /*! Returns the minimum of fibonacci of function in the
@@ -141,4 +141,5 @@
   Generate(fib, length);
   BInt N = fib.Size()-1;
+  if((maxEval>0)&&(maxEval<N+1)) { N = maxEval-1; }
   incerInf = ini;
   incerSup = fin;
@@ -247,5 +248,5 @@
 			BDat value,
 			BDat ini, BDat fin ,
-			BDat tol)
+			BDat tol, int maxEval)
     
 /*! Returns the minimum of fibonacci of function in the
@@ -274,4 +275,5 @@
   Generate(fib, (fin-ini)/(tol/2));
   BInt n, N = fib.Size()-1;
+  if((maxEval>0)&&(maxEval<N+1)) { N = maxEval-1; }
 //Std(BText("Fibonacci(")+N+")");
   incerInf = ini;
Index: tol/bmath/bfunct/tol_bfibonac.h
===================================================================
--- tol/bmath/bfunct/tol_bfibonac.h	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/bmath/bfunct/tol_bfibonac.h	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -53,10 +53,10 @@
 			BDat& minimumValue,
 			BDat ini, BDat fin,
-			BDat tolerance=1);
+			BDat tolerance=1, int maxEval=-1);
 
 	 static BDat Solve( BRRFunction* funcion,
 		      BDat value,
 		      BDat ini, BDat fin,
-		      BDat tolerance=1);
+		      BDat tolerance=1, int maxEval=-1);
 
 	 static BInt Number(BInt n);
Index: tol/btol/matrix_type/matgra.cpp
===================================================================
--- tol/btol/matrix_type/matgra.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/btol/matrix_type/matgra.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -4635,4 +4635,32 @@
     contens_(i,0)=i+1;
     contens_(i,1)=c(i);
+    contens_(i,2)=sigma;
+  }
+}
+
+//--------------------------------------------------------------------
+DeclareContensClass(BMat, BMatTemporary, BMatMatPartAutoCor);
+DefExtOpr(1, BMatMatPartAutoCor,   "MatPartAutoCor", 2, 2, "Matrix Real",
+  "(Matrix M, Real n)",
+  I2("Returns the sample partial autocorrelations vector of dimension n of a vector.",
+     "Devuelve el vector de autocorrelaciones parciales muestrales de dimension n de "
+     "un vector."),
+    BOperClassify::Statistic_);
+//--------------------------------------------------------------------
+void BMatMatPartAutoCor::CalcContens()
+//--------------------------------------------------------------------
+{
+  const BMat& M = Mat(Arg(1));
+  BInt  order = (BInt)Real(Arg(2));
+  contens_.Alloc(order,3);
+  if(contens_.Rows()!=order) { return; }
+  BDat sigma = 1/Sqrt(M.Data().Size());
+  BArray<BDat> acf(order), pacf;
+  AutoCor(M.Data(), acf, order, 1);
+  PartAutoCor(acf, pacf);
+  for(BInt i=0; i<order; i++)
+  {
+    contens_(i,0)=i+1;
+    contens_(i,1)=acf(i);
     contens_(i,2)=sigma;
   }
Index: tol/btol/polmat_type/polmatgra.cpp
===================================================================
--- tol/btol/polmat_type/polmatgra.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/btol/polmat_type/polmatgra.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -34,4 +34,5 @@
 #include <tol/tol_blanguag.h>
 #include <tol/tol_bar.h>
+#include <tol/tol_barma.h>
 
 
@@ -133,31 +134,33 @@
 }
 
+void Backward(const BPolyn  <BDat>& P,
+       	      const BMatrix <BDat>& X0,
+	            const BMatrix <BDat>& X,
+	                  BMatrix <BDat>& Y);
+	                  
 //--------------------------------------------------------------------
 bool ApplyMatPol(const BPolMat& P, const BMat& X, BMat& Y)
 //--------------------------------------------------------------------
 {
-  int i,j,t,h,r=P.Rows(), c = P.Columns(), T = X.Rows();
+  int i,j,t,r=P.Rows(), c = P.Columns(), T = X.Rows();
   if(X.Columns()!=c) { return(false); }
-  BArray< BArray<BDat> > x(c);
-  for(j=0; j<c; j++)
-  {
-    x(j) = X.SubCol(j).Data();
-  }
   int d = Degree(P);
   int Td = T-d;
-  Y.Alloc(Td,r);
-  Y.SetAllValuesTo(0.0);
-  
+  Y.Alloc(Td,r); 
   for(i=0; i<r; i++)
   {
-    for(j=0; j<c; j++)
-    {
-      BArray<BDat> z;
-      const BArray<BDat>& xj = x(j);      
-      ApplyPolyn(P(i,j),xj,z);
-      for(t=Td-1,h=z.Size()-1; t>=0; t--, h--)
-      {
-        Y(t,i) += z(h);
-      }
+    for(t=0; t<Td; t++)
+    {
+      BDat y = 0;
+      for(j=0; j<c; j++)
+      {
+        for(int h=0; h<P(i,j).Size(); h++)
+        {
+          int k = P(i,j)[h].Degree();
+          BDat g = P(i,j)[h].Coef();
+          y+=X(t+d-k,j)*g;
+        }  
+      }
+      Y(t,i) = y;
     }
   }
Index: tol/btol/real_type/datgrav.cpp
===================================================================
--- tol/btol/real_type/datgrav.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/btol/real_type/datgrav.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -1637,7 +1637,7 @@
 //--------------------------------------------------------------------
   DeclareContensClass(BDat, BDatTemporary, BDatFibonacciSolve);
-  DefExtOpr(1, BDatFibonacciSolve, "FibonacciSolve", 5, 5,
-  "Code Real Real Real Real",
-  "(Code f, Real y, Real min, Real max, Real tolerance)",
+  DefExtOpr(1, BDatFibonacciSolve, "FibonacciSolve", 5, 6,
+  "Code Real Real Real Real Real",
+  "(Code f, Real y, Real a, Real b, Real tolerance [, Real maxEval])",
   I2("Solves the equation f(x) = y using the Fibonacci method between min "
      "and max with the given tolerance.",
@@ -1653,4 +1653,6 @@
   BDat	  max  = Dat (Arg(4));
   BDat	  tol  = Dat (Arg(5));
+  int maxEval = -1;
+  if(Arg(6)) { maxEval = (int)Real(Arg(6)); }
   if(min>max)
   {
@@ -1668,13 +1670,14 @@
   {
     BRRCode f(code);
-    contens_ = BFibonacci::Solve(&f,y,min,max,tol);
-  }
-}
+    contens_ = BFibonacci::Solve(&f,y,min,max,tol,maxEval);
+  }
+}
+
 
 //--------------------------------------------------------------------
   DeclareContensClass(BDat, BDatTemporary, BDatFibonacciMin);
-  DefExtOpr(1, BDatFibonacciMin, "FibonacciMin", 5, 5,
-  "Code Real Real Real Real",
-  "(Code f, Real y, Real a, Real b, Real tolerance)",
+  DefExtOpr(1, BDatFibonacciMin, "FibonacciMin", 5, 6,
+  "Code Real Real Real Real Real",
+  "(Code f, Real y, Real a, Real b, Real tolerance [, Real maxEval])",
   I2("Minimizes the function f(x) between a and b using the Fibonacci method",
      "Minimiza la función f(x) entre a y b por el método de Fibonacci."),
@@ -1688,4 +1691,6 @@
   BDat	  max  = Dat (Arg(4));
   BDat	  tol  = Dat (Arg(5));
+  int maxEval = -1;
+  if(Arg(6)) { maxEval = (int)Real(Arg(6)); }
   if(min>max)
   {
@@ -1703,5 +1708,5 @@
   {
     BRRCode f(code);
-    contens_ = BFibonacci::Minimum(&f,y,min,max,tol);
+    contens_ = BFibonacci::Minimum(&f,y,min,max,tol,maxEval);
   }
 }
Index: tol/init.cpp
===================================================================
--- tol/init.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/init.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -881,5 +881,5 @@
     TrcIGS("Anything");
     InitCommonInstances(GraAnything());
-    TrcIGS("PolMat");
+    TrcIGS("PolMatrix");
     InitCommonInstances(GraPolMat());
     
Index: tol/lang/language.cpp
===================================================================
--- tol/lang/language.cpp	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol/lang/language.cpp	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -175,5 +175,5 @@
   _str_ref_TimeSet = NewStructSymbol("@TimeSet","TimeSet:V");
   _str_ref_Serie = NewStructSymbol("@Serie","Serie:V");
-  _str_ref_PolMat = NewStructSymbol("@PolMat","PolMat:V");
+  _str_ref_PolMat = NewStructSymbol("@PolMatrix","PolMatrix:V");
 }
 
Index: tol_tests/tol/LinearAlgebra/PolMatrix/test_0002/check.tol
===================================================================
--- tol_tests/tol/LinearAlgebra/PolMatrix/test_0002/check.tol	(revision b6035f31b871655e1b343155de6c9b98d5b70b44)
+++ tol_tests/tol/LinearAlgebra/PolMatrix/test_0002/check.tol	(revision e1969fb93af47c5fa0d238f608965d3e9ac9963d)
@@ -3,7 +3,9 @@
 #Require MPM;
 
+Real PutRandomSeed(23453);
+
 Real dim = 2;
 Real deg = 2;
-Real T = 100;
+Real T = 1000;
 
 Matrix x = VariableChange::@StableMatrixPolyn::
@@ -23,7 +25,24 @@
 Real inequality_constraint_ = -Log(StationaryValue(determinant));
 
-Matrix X = Rand(T,dim,-1,1);
+Matrix X0 = Rand(deg,dim,-1,1);
+Matrix X  = Rand(T,  dim,-1,1);
 
-Matrix Y = P:X;
+Matrix Y = P:(X0<<X);
+
+Matrix Y_ = Group("ConcatColumns",For(1, dim, Matrix(Real i)
+{
+  SetSum(For(1, dim, Matrix(Real j)
+  { 
+    DifEq(PHI[i][j]/1,SubCol(X,[[j]]),SubCol(X0,[[j]]))
+  }))
+}));
+
+Matrix Y_t = Group("ConcatColumns",For(1, dim, Matrix(Real i)
+{
+  SetSum(For(1, dim, Matrix(Real j)
+  { 
+    DifEq(PHI[j][i]/1,SubCol(X,[[j]]),SubCol(X0,[[j]]))
+  }))
+}));
 
 
@@ -33,4 +52,5 @@
 Real eigen.module.max = MatMax(eigen.module);
 Real eigen.module.max.inv = 1/eigen.module.max;
+
 
 
