Re: Forgets Variables?
- To: mathgroup at smc.vnet.net
- Subject: [mg97315] Re: Forgets Variables?
- From: Ktota <NuKtoBi at gmail.com>
- Date: Tue, 10 Mar 2009 05:39:05 -0500 (EST)
- References: <200903070738.CAA16926@smc.vnet.net> <gp0830$l48$1@smc.vnet.net>
Ok Raffy, your suggestion helped me a lot at least i could get a step further. I would love to make functions out of some of my procedures, nevertheless i get often "times .. or tag .. is protected" error. Well that shouldn't matter to much as it should work just like this too. I suspect that the problem is that I'm calling my callNormValue out of a sum function ... and callNormValue consists of 2 other Sum functions. Is it possible that the nested Sum functions might cause trouble? there you see how i call callNormValue (with ReleaseHold.. as it otherwise wouldn't work at al, model35S contains a statement describing a mathematical modell) to normalize my model sumfunc = Sum[ ( (model35S /. {t -> tsum5})/(ReleaseHold[ callNormValue /. {lifetime35S -> 15, P -> 0.7}]) - (interpolatedExpData35S[tsum5]) )^2 , {tsum5, 60, 900, 60}]; execute the above statement with: sumfunc /. {P -> 0.7, lifetime35S -> 15} gives me a result... so but to get the thing to work i need to have the values which i set when i call sumfunc therefore: Sumfunc = Sum[ ( (model35S /. {t -> tsum5})/(ReleaseHold[ callNormValue /. {lifetime35S -> lifetime35S, P -> P}]) - (interpolatedExpData35S[tsum5]) )^2 , {tsum5, 60, 900, 60}]; execute the above statement with: sumfunc /. {P -> 0.7, lifetime35S -> 15} but in this case i just get my not evaluated statement back maybe someone has something generally to say about that Ktota On 9 Mrz., 06:02, Ktota <NuKt... at gmail.com> wrote: > 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 Ok, certainly i can rewrite my program... nevert > > > 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?