MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: TimeValue around NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127754] Re: TimeValue around NDSolve
  • From: Bob Hanlon <hanlonr357 at gmail.com>
  • Date: Sat, 18 Aug 2012 20:36:33 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net
  • References: <20120818074423.BC2F66845@smc.vnet.net>

age = 65;

eqn1 = y'[t] == 47/1000*y[t] - 5300;

sol1 = y[t] /. NDSolve[{eqn1, y[age] == 100000}, y[t], {t, age, 110}][[1]];

data = Table[{t, sol1}, {t, age, 85}];

Plot[sol1, {t, age, 85},
 Epilog -> {Red, AbsolutePointSize[3], Point[data]}]

However, this can be soved exactly using DSolve.

sol2[t_] = Simplify[y[t] /. DSolve[{eqn1, y[age] == 100000}, y[t], t][[1]]]

100000/47 (53 - 6 E^((47 (-65 + t))/1000))

Plot[sol2[t], {t, age, 85},
 Epilog -> {Red, AbsolutePointSize[3], Point[data]}]

In TimeValue you have fixed the time value at zero. Note that for
TimeValue[s, i, 0] this is independent of the intest rate and as you
observed there is no change.

TimeValue[s, i, t]

(1 + i)^t s

TimeValue[s, i, 0]

s

Presumably you want a time slider in addition to the interest rate slider.

Manipulate[sol3[t_] := TimeValue[sol2[t], discountRate/100, t2];
 Column[{
   Grid[
    Partition[
     Partition[
        Table[{t, NumberForm[sol3[t] // N, {8, 2}]},
         {t, age, 85}],
        7] // Transpose // Flatten,
     6],
    Frame -> All],
   Plot[sol3[t], {t, age, 85},
    PlotRange -> {75000, 200000},
    ImageSize -> 288]
   }],
 {t2, 0, 20, 1,
  Appearance -> {"Labeled"}},
 {{discountRate, 1.6, "Discount Rate"}, .8, 3, .1, Appearance -> {"Labeled"}}]


Bob Hanlon


On Sat, Aug 18, 2012 at 3:44 AM, Joe <design at rcn.com> wrote:
> (*  #1  This expression works.   I am trying to get the Present Value using a variable discountRate for each value in this table. *)
> age = 65;
> eqn1 = y'[t] == 4.7/100 *y[t] - 5300;
> sol1 = y[t] /. NDSolve[{eqn1, y[age] == 100000}, y[t], {t, age, 110}];
> Table[sol1, {t, age, 85}]
>
> (*  #2  This attempt fails  *)
> Manipulate[
>  age = 65;
>  eqn1 = y'[t] == 4.7/100 *y[t] - 5300;
>  sol2 = TimeValue[y[t] /. { NDSolve[{eqn1, y[age] == 100000}, y[t], {t, age, 110}]}, discountRate/100, 0];
>  Table[sol2, {t, age, 85}],
>   {{discountRate, 1.6, "Discount Rate"}, .8, 3, .1,Appearance -> {"Labeled", Tiny}}
> ]
>
> (*  #3  In the complete applet, this method calculates the PV correctly on opening but does not respond to the discountRate slider and eventually causes an error *)
> Manipulate[
>  age = 65;
>  eqn1 = y'[t] == 4.7/100 *y[t] - 5300;
>  sol2 = y[t] /. NDSolve[{eqn1, y[age] == 100000}, y[t], {t, age, 110}];
>  Table[TimeValue[sol2, discountRate/100, 0], {t, age, 85}],
>    {{discountRate, 1.6, "Discount Rate"}, .8, 3, .1, Appearance -> {"Labeled", Tiny}}
> ]
>
> I hope this is a better description of the problem than I provided several days ago.
>
> Joe Rimback
> design at rcn.com
> Gaithersburg, MD
>



  • Prev by Date: Re: NIntegrate and replacements
  • Next by Date: Re: Using a huge list of random numbers from random.org
  • Previous by thread: TimeValue around NDSolve
  • Next by thread: TemplateBox (was: compact notation for NonCommutativeMultiply that