Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

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

Search the Archive

Re: An Argument Problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg91770] Re: An Argument Problem
  • From: Peter Breitfeld <phbrf at t-online.de>
  • Date: Sun, 7 Sep 2008 05:39:32 -0400 (EDT)
  • Organization: SFZ Bad Saulgau
  • References: <g9t6pp$jbm$1@smc.vnet.net>

Mr Ajit Sen schrieb:
> 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      
>

Maybe you could write:

Simpson[F_, p_List, a_, b_, n_?EvenQ] :=
Module[{h, evens, odds, f},
    f = F[Sequence @@ Most[p], #] &;
    h = (b - a)/n;
    evens = a + h Range[2, n - 2, 2];
    odds = a + h Range[1, n - 1, 2];
    h/3 {f[a], f[b],
        4 (f[#] & /@ odds),
        2 (f[#] & /@ evens)} // Flatten // Total
    ] // Simplify // N

F should be given as a named or pure function, p is the List of
parameters f expects
	
Example:

f[a_, b_, x_] := a (x - 5)^2 + 3 b x^3
Simpson[f, {a, b, x}, -2, 3, 6]

Out=111.667 a + 48.75 b

This should be exact, beeing a cubic:

In[292]:= Integrate[f[a, b, x], {x, -2, 3.}]

Out[292]= 111.667 a + 48.75 b

Gruss Peter
-- 
==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
Peter Breitfeld, Bad Saulgau, Germany -- http://www.pBreitfeld.de


  • Prev by Date: Re: Mapping A Condition Across Two Different Lists
  • Next by Date: Re: Thinking Mathematica: Any suggestions?
  • Previous by thread: Re: An Argument Problem
  • Next by thread: Trying to speed up a function