Re: Replacements and NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg118602] Re: Replacements and NIntegrate
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Wed, 4 May 2011 06:33:40 -0400 (EDT)
Here it is in TWO replacements: dummy[h[z] z/Sqrt[L^2 + z^2], {z, -L, L}] /. vals /. dummy -> NIntegrate Bobby On Tue, 03 May 2011 15:36:34 -0500, Giacomo <jackspam79 at gmail.com> wrote: > On 03-May-11 13:41, DrMajorBob wrote: >> You answered your own question, since >> >> NIntegrate[ h[z] z / Sqrt[L^2 + z^2] /.vals, {z, -L /.vals, L/.vals}] >> >> does the replacements before trying to integrate. >> > > I know, but having to specify three time the same replacement rule in > the same expression doesn't look very elegant. :-) > >> Or, you could properly define h[z_,a_,b_....] as a function of its >> arguments and parameters and L[a_,b_, ...] as a function of ITS >> arguments, rather than leaving most of them out. > > Well, L is just a parameter by itself, whose numerical value is > specified in the set of replacement rules "vals" defined at the very > beginning of the notebook. h is indeed a function, but depends on may > "parameters" that are not really "variables". I don't see it practical > (nor clear from a logical point of view) to specify them as variables... > > Thanks anyway! > > Giacomo > >> >> >> It's generally a good idea to define functions with ALL their >> dependencies obvious in the definition. It leads to less confusion. >> >> Bobby >> >> On Tue, 03 May 2011 04:44:43 -0500, Giacomo Ciani >> <jackspam79 at gmail.com> wrote: >> >>> Hi all, >>> >>> I've been reading quite a bit in the Mathematica docs and in this >>> newsgroup, but didn't find (or didn't recognize...) an answer to my >>> problem. >>> >>> I want to evaluate the following expression: >>> >>> NIntegrate[h[z] z/Sqrt[L^2 + z^2], {z, -L, L}] >>> >>> where h[z] has a delayed value set previously in the notebook. Also, I >>> have previously defined a set of replacement rules in the form: >>> >>> vals = {a->1, b->2, ec....} >>> >>> to be used to specify the numerical values of the various parameters >>> (including those present in the delayed value of h[z]). >>> >>> As for now, the only (brute force) way I found to have my expression >>> correctly evaluated is to apply replacement rules separately to each >>> argument of NIntegrate (including integration limits): >>> >>> NIntegrate[ h[z] z / Sqrt[L^2 + z^2] /.vals, {z, -L /.vals, L/.vals}] >>> >>> I think you agree with me that this does not look very elegant. >>> Instead, I would like to be able to write something like this: >>> >>> NIntegrate[h[z] z/Sqrt[L^2 + z^2], {z, -L, L}]/.vals >>> >>> I know this can't work, as Mathematica tries to evaluate NIntegrate >>> and then apply the replacement rules... but how can I ask Mathematica >>> to apply all the replacement rules and delayed values to an expression >>> without (or before) actually trying to evaluate it? >>> >>> I found a lot of commands to hold the function from evaluating the >>> arguments, while I need pretty much the opposite... >>> >>> Maybe there is something very simple I am overlooking... >>> >>> Thanks >>> >>> Giacomo >>> >> >> > -- DrMajorBob at yahoo.com