Re: Replacements and NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg118601] Re: Replacements and NIntegrate
- From: Giacomo <jackspam79 at gmail.com>
- Date: Wed, 4 May 2011 06:33:29 -0400 (EDT)
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
>>
>
>