MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: An Argument Problem

Mr Ajit Sen wrote:
> Dear Mathgroup,
> I am trying to numerically integrate a function of several variables w.r.t.  its last variable.  As NIntegrate won't work, I decided to use Simpson's 1/3 rule.  Below is my attempt for a function of 2 variables (using Mathematica 6.0):
> Simpson[F_, a_, b_, n_?EvenQ] := Module[{h, evens, odds},
>     h = (b - a)/n;
>     evens = Table[a + i h, {i, 2, n - 2, 2}];
>     odds = Table[a + i h, {i, 1, n - 1, 2}];
>     h/3 {F[x, a], F[x, b], 4 F[x, #] & /@ odds,
>         2 F[x, #] & /@ evens} // Flatten // Total] // Simplify // N
> This works OK & returns a function of x.  My query is how to make Simpson give a function of whatever the fist argument of F is. Thus, if  F= F[r,t]=
> ,
> Simpson would integrate w.r.t. t & give a function of r (without my having to change the x's into r's). Basically, I can't suss out how to pass the first argument of F inside the module.
> Thanks for any help.
> Regards.
> Ajit      

As written, your code accepts a function (probably typically a pure 
function) as its first argument. I think it would be easier to re-code 
Simpson to accept an expression as its first argument, and supply an 
extra argument to specify the integration variable. (Note that this 
variable should not have a value!)

evens=Table[a+i h,{i,2,n-2,2}];
odds=Table[a+i h,{i,1,n-1,2}];
h/3 {F/.x->a,(F/.x->b),4 (F/.x->#)&/@odds,2 

In[4]:= Simpson[Sin[u]Cos[t],0,2,2,t]
Out[4]= 0.915021 Sin[u]

Note that the above code could be simplified considerably, but I have 
made minimal changes to your function.

David Bailey

  • Prev by Date: Re: phase-space versus controlling parameter surface
  • Next by Date: Re: Mapping A Condition Across Two Different Lists
  • Previous by thread: An Argument Problem
  • Next by thread: Re: An Argument Problem