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
comment:2 Changed 13 years ago by
Owner: | changed from Víctor de Buen Remiro to Jorge |
---|---|
Status: | new → assigned |
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
Cc: | cperez@… added |
---|---|
Status: | assigned → accepted |
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] }
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.