generic binomial/trinomial tree
- To: mathgroup at smc.vnet.net
- Subject: [mg116808] generic binomial/trinomial tree
- From: DC <b.gatessucks at gmail.com>
- Date: Tue, 1 Mar 2011 05:21:03 -0500 (EST)
Hi, I'm playing around trying to build a generic tree :
TreeStep[slice_, parameters_] := Map[(# parameters) &, slice, {-1}]
TreeBuilder[s0_, parameters_, nSteps_]:=NestList[TreeStep[#,parameters]
&, s0, nSteps]
In[29]:= TreeBuilder[{50.}, {1.05, 1./1.05}, 2]
Out[29]= {{50.}, {{52.5, 47.619}}, {{{55.125, 50.}, {50., 45.3515}}}}
If now I specialize to recombining trees :
RecombiningTreeStep[slice_, parameters_] :=
Reverse[Union[Flatten[Map[# parameters &, slice, {-1}]]]]
TreeBuilder[s0_, parameters_, nSteps_] :=
NestList[RecombiningTreeStep[#, parameters] &, s0, nSteps]
In[40]:= TreeBuilder[{50.}, {1.05, 1./1.05}, 2]
Out[40]= {{50.}, {52.5, 47.619}, {55.125, 50., 50., 45.3515}}
I have the problem that Union does not distinguish between the two 50.s
in the last slice.
1. Any suggestions ?
2. I can use
Union[Flatten[Map[# parameters &, slice,
{-1}]],SameTest->(Abs[#1-#2]<0.001 &)]
This solves the problem but then I cannot compile the function (very
slow as it is) :
cRecombiningTreeStep =
Compile[{{slice, _Real, 1}, {parameters, _Real, 1}, {eps, _Real}},
Reverse[Union[Flatten[Map[# parameters &, slice, {-1}]]],
SameTest -> (Abs[#1 - #2] < eps &)]]
Any suggestions ?
Thanks.
-Francesco