Re: Replacements and NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg118628] Re: Replacements and NIntegrate
- From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
- Date: Wed, 4 May 2011 19:48:41 -0400 (EDT)
On Wed, 4 May 2011, Giacomo wrote: > Wonderful! > > Simple idea but... I didn't have it! My bad... > > Actually, I was also trying to crate a table with the NIntegrate > function called with different value of the parameters, and run into the > same problem (Mathematica trying to evaluate the function before the > values of the parameters are assigned). This solution makes everything > much easier! > > Thanks! > > Giacomo > > On 03-May-11 17:15, DrMajorBob wrote: >> Here it is in TWO replacements: >> >> dummy[h[z] z/Sqrt[L^2 + z^2], {z, -L, L}] /. vals /. >> dummy -> NIntegrate >> How about this: NIntegrate @@ ({h[z] z/Sqrt[L^2 + z^2], {z, -L, L}} /. vals) Oliver >> 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 >>>>> >>>> >>>> >>> >> >> > > >