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 16 years ago

Last modified 16 years ago

#707 closed defect

InterpolaL (StdLib) works wrong for a Series with negative changes only — at Version 1

Reported by: Alfredo Torre Owned by: Víctor de Buen Remiro
Priority: highest Milestone:
Component: Various Version: 1.1.7
Severity: blocker Keywords: InterpolaL, negative changes
Cc:

Description (last modified by Víctor de Buen Remiro)

InterpolaL (from StdLib) works wrong when the original Series only has negative changes and, at least, one no change. Please, see the next example:

Serie Ser.Qua = SubSer(
100*Pulse(y2009m01d01, Quarterly) +
 90*Pulse(y2009m04d01, Quarterly) +
 90*Pulse(y2009m07d01, Quarterly) +
 80*Pulse(y2009m10d01, Quarterly),
y2009m01d01, y2010m01d01);
Serie Ser.Mon = InterpolaL(Ser.Qua, Monthly);


The problem is in InvChEx function. I suggest this new code for InterpolaL:

Serie InterpolaL(Serie ser, TimeSet dtn)
{
  Serie dser   = ((F-1):ser)>>CalInd(W,Dating(ser));
  Serie iper   = SubSer(CalVar(dtn,Dating(ser)),First(ser),Last(ser));
  Serie inc    = dser/iper;
  Serie dNser1 = InvCh(inc, Log(CalInd(W, dtn2)));
  Serie dNser2 = ExpandOmit(dNser1);
  Serie dNser  = (B):dNser2;
  Date  ini    = Succ(First(dNser),dtn,-1);
  Serie sIniP  = FirstS(ser)*CalInd(C,dtn);
  Serie sIni   = SubSer(sIniP,ini,ini);
  SubSer(DifEq(1/(1-B),dNser,sIni),ini,Last(ser))
};

Change History (2)

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

Description: modified (diff)

Changed 16 years ago by Víctor de Buen Remiro

Attachment: interpolate.tol added

Interpolation functions

Note: See TracTickets for help on using tickets.