Re: Forgets Variables?
- To: mathgroup at smc.vnet.net
- Subject: [mg97237] Re: Forgets Variables?
- From: Ktota <NuKtoBi at gmail.com>
- Date: Mon, 9 Mar 2009 01:02:58 -0500 (EST)
- References: <200903070738.CAA16926@smc.vnet.net> <gp0830$l48$1@smc.vnet.net>
Thank you for your help Raffy and Bob, i'll try your suggestions and
report here again. This model evolved over time.. i think i will have
also to spend to optimize it as Bob suggests.. his suggestions are
very nice... i'm busy learning Mathematica it seems to be a very
helpfull tool ;).
Kind Regards,
Ktota
On 8 Mrz., 10:53, DrMajorBob <btre... at austin.rr.com> wrote:
> I can't get the first statement to execute (in the time I'm willing to =
> wait). If you gave us the values of maxX, eqTime, v, lifetime27SA, et
> cetera, we'd waste a lot less time guessing what your problem might be.
>
> If you want help, ALWAYS start us off where you are. Don't make us
> flounder around where you've already been. Because, of course, why should=
> we?
>
> That said, I'd start by simplifying until the code is understandable, at =
> which point the error will reveal itself. For instance, this:
>
> If[v*(tsum - lifetime35S - eqTime) < 4000,
> v*(tsum - lifetime35S - eqTime), 4000]
>
> is equivalent to the simpler (and faster)
>
> Min[v*(tsum - lifetime35S - eqTime), 4000]
>
> Similarly, this expression:
>
> If[v*(tsum - eqTime) < 4000, Max[v*(tsum - eqTime), 0], 4000]
>
> is equivalent to
>
> Max[0, Min[v*(tsum - eqTime), 4000]]
>
> Next, it's easy to see that
>
> If[v*(tsum2 - eqTime) < 4000,
> Sum[Max[v*(tsum - eqTime), 0], {tsum, tsum2 - lifetime27SANTC + 1,
> tsum2}],
> Sum[Max[0, Min[v*(tsum - eqTime), 4000]], {tsum,
> tsum2 - lifetime27SANTC + 1, tsum2}]]
>
> is equivalent to
>
> Clear[q]
> q[ts_] := v*(ts - eqTime);
> If[q@tsum2 < 4000,
> Sum[Max[q@tsum, 0], {tsum, tsum2 - lifetime27SANTC + 1, tsum2}],
> Sum[Max[0, Min[q@tsum, 4000]], {tsum, tsum2 - lifetime27SANTC + 1,
> tsum2}]]
>
> and that's equivalent to (since the Sums have the same limits):
>
> Clear[q]
> q[ts_] := v*(ts - eqTime);
> Sum[If[q@tsum2 < 4000, Max[q@tsum, 0],
> Max[0, Min[q@tsum, 4000]]], {tsum, tsum2 - lifetime27SANTC + 1,
> tsum2}]
>
> Similarly, the first If statement:
>
> If[v*(tsum2 - lifetime35S - eqTime) < 4000,
> Sum[Max[v*(tsum - lifetime35S - eqTime), 0], {tsum,
> tsum2 - lifetime27SA + 1, tsum2}],
> Sum[Min[v*(tsum - lifetime35S - eqTime), 4000], {tsum,
> tsum2 - lifetime27SA + 1, tsum2}]]
>
> is equivalent to
>
> Clear[q]
> q[ts_] := v*(ts - lifetime35S - eqTime);
> Sum[If[q@tsum2 < 4000, Max[q@tsum, 0], Min[q@tsum, 4000]], {tsum,
> tsum2 - lifetime27SA + 1, tsum2}]
>
> Combining both tricks into one reduces the original expression to:
>
> Clear[q]
> q[life_][ts_] := v (ts - life - eqTime)
> callNormValue =
> 60/maxX Sum[
> Sum[If[q[lifetime35S]@tsum2 < 4000, Max[q[lifetime35S]@tsum, 0=
],
> Min[q[lifetime35S]@tsum, 4000]], {tsum,
> tsum2 - lifetime27SA + 1, tsum2}]*(1 - P) +
> Sum[If[q[0]@tsum2 < 4000, Max[q[0]@tsum, 0],
> Max[0, Min[q[0]@tsum, 4000]]], {tsum,
> tsum2 - lifetime27SANTC + 1, tsum2}]*P, {tsum2, 60, t2=
, 60}];
>
> That still won't evaluate without values for all the parameters, but
> you're the only one that knows those, or even knows what ranges they migh=
t
> lie in.
>
> One trick you MIGHT pull, however, is this:
>
> Clear[q]
> q[life_][ts_] := v (ts - life - eqTime)
> callNormValue =
> 60/maxX sum[
> sum[If[q[lifetime35S]@tsum2 < 4000, Max[q[lifetime35S]@tsum, 0=
],
> Min[q[lifetime35S]@tsum, 4000]], {tsum,
> tsum2 - lifetime27SA + 1, tsum2}]*(1 - P) +
> sum[If[q[0]@tsum2 < 4000, Max[q[0]@tsum, 0],
> Max[0, Min[q[0]@tsum, 4000]]], {tsum,
> tsum2 - lifetime27SANTC + 1, tsum2}]*P, {tsum2, 60, t2=
, 60}];
>
> (Now the statement executes.)
>
> callNormValue /. {lifetime35S -> 17, P -> 0.7, t2 -> maxX, sum -> Sum}
>
> (The other parameters still need values, but those could be added to the =
> rule list.)
>
> Bobby
>
>
>
>
>
> On Sat, 07 Mar 2009 01:38:46 -0600, Ktota <NuKt... at gmail.com> wrote:
> > Hi there,
>
> > i have the following procedure:
>
> > callNormValue = (Sum[
> > If[v*(tsum2 - lifetime35S - eqTime) < 4000,
> > Sum[Max[v*(tsum - lifetime35S - eqTime), 0], {tsum,
> > tsum2 - lifetime27SA + 1, tsum2, 1}],
> > Sum[If[v*(tsum - lifetime35S - eqTime) < 4000,
> > v*(tsum - lifetime35S - eqTime), 4000], {tsum,
> > tsum2 - lifetime27SA + 1, tsum2, 1}]]*(1 - P) +
> > If[v*(tsum2 - eqTime) < 4000,
> > Sum[Max[v*(tsum - eqTime), 0], {tsum,
> > tsum2 - lifetime27SANTC + 1, tsum2, 1}],
> > Sum[If[v*(tsum - eqTime) < 4000, Max[v*(tsum - eqTime),=
0],
> > 4000], {tsum, tsum2 - lifetime27SANTC + 1, tsum2, 1=
}]]*
> > P, {tsum2, 60, t2, 60}])/(maxX/60);
>
> > i call it with:
> > callNormValue /. {lifetime35S -> 17, P -> 0.7, t2 -> maxX}
>
> > it gives me a proper result, but as soon i change t2 to maxX in the
> > first expression (where i do the sums) it doesn't evaluate the the
> > procedure anymore (maxX has a global value already set). I have
> > actually quite a lot of trouble to hand over values to this
> > procedure.. and i have no idea why it doesn't work.
>
> > (for except lifetime35S,P and t2 all the variables have a set value)
>
> > thank you,
>
> > Ktota
>
> --
> DrMajor... at bigfoot.com
- References:
- Forgets Variables?
- From: Ktota <NuKtoBi@gmail.com>
- Forgets Variables?