close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Last modified 13 years ago

#1284 accepted defect

Error en la función SetSer

Reported by: Humberto Carralero Owned by: Jorge
Priority: high Milestone: Mantainance
Component: Kernel Version: head
Severity: major Keywords:
Cc: cperez@…

Description

El problema se produjo al tratar de crear una serie a patir de dos conjuntos que tienen igual cantidad de elementos (12 para el caso tratado), el primero contenía los datos y el segundo las fechas.
La función SetSer debía crear una serie de 12 elementos, pero la serir que crea es de sólo dos elementos correspondientes a las dos últimas fechas. El error se puede reproducir con el siguiente fragmento de código:

Set datos= 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12?;
Set fechas= y2010m01d01, y2010m04d01, y2010m07d01, y2010m10d01, y2011m01d01, y2011m04d01, y2011m07d01, y2011m10d01, y2012m01d01, y2012m04d01, y2012m07d01, y2012m10d01?;
TimeSet fechado= DatesOfSet(fechas);
Serie ser= SetSer(datos, fechas[1], fechado);

Aunque en este caso las fechas corresponden con un fechado trimestral, podríamos tener el caso en que las fechas no se ajusten a un fechado básico.
Si se usa un fechado básico como el Trimestral, entonces funciona correctamente; por ejemplo, el código siguiente produce la serie correcta:
Serie ser1= SetSer(datos, fechas[1], Trimestral);

Change History (3)

comment:1 Changed 13 years ago by Víctor de Buen Remiro

Perdón por el retraso en la respuesta, pero por algún motivo de mala conexión o algo así no salió la que envié en su día y ahora al repasar me he dado cuenta.

Resulta que esa función no es mía y no tengo la menor idea de lo que hace. Debe de ser de las que se heredaron de SADD y no sé muy bien a quién habría que consultar al respecto. Creo que a César o a Fredi pero no lo sé muy bien.

comment:2 Changed 13 years ago by Víctor de Buen Remiro

Owner: changed from Víctor de Buen Remiro to Jorge
Status: newassigned

Jorge, te la paso a tí a ver si te enteras de quién es esta función.

comment:3 Changed 13 years ago by Jorge

Cc: cperez@… added
Status: assignedaccepted

Me he metido en el cuerpo de la función

  Serie SetSer (Set datos, Date ini, TimeSet fechado)
//
// PURPOSE : Dado un conjunto de reales <datos> y un <fechado> devuelve la 
//           serie resultado de esos reales en ese fechado, a partir del día 
//           de inicio <ini>.
//
//////////////////////////////////////////////////////////////////////////////
{
//Text WriteLn("Tiempo 3 "+Time); 
  Matrix coef  = GetNumeric(datos);
//Text WriteLn("Tiempo 4. GetNumeric SetSer "+Time); 
  Polyn pol    = MatPol(coef);
//Text WriteLn("Tiempo 5. MatPol SetSer "+Time); 
  Serie result = pol:Pulse(ini,fechado);
//Text WriteLn("Tiempo 6. pol: "+Time); 
  Date LastDay = Succ(ini,fechado,Card(datos)-1);
//Text WriteLn("Tiempo 7 "+Time); 
  SubSer(result,ini,LastDay)
//  Set s = MatSerSet(coef,fechado,ini);
//  s[1]
}; 

el prpoblema aparece al aplicar el polinomio pol a una serie acotada pierde datos.

Mirando en el código veo que se ha comentado una implementación basada en MatSerSet que funciona, ¿por qué no se usa MatSetSet?

Serie SetSer (Set datos, Date ini, TimeSet fechado)
{
   Matrix coef  = GetNumeric(datos);
   Serie MatSerSet(coef,fechado,ini)[1]
}
Note: See TracTickets for help on using tickets.