Re: Integrate query
- To: mathgroup at smc.vnet.net
- Subject: [mg23382] Re: [mg23361] Integrate query
- From: Daniel Lichtblau <danl at dragonfly.wolfram.com>
- Date: Fri, 5 May 2000 02:07:15 -0400 (EDT)
- References: <200005040659.CAA17509@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"A. E. Siegman" wrote:
>
> I have a non-negative analytic function f[x] whose area (integral of
> f[x] from 0 to Infinity) is unity.
>
> I want to find the upper limit such that the integral up to that limit
> will contain a fixed fraction of the total area, i.e. find a such that
>
> Integrate[f[x], {x,0,a}] == f (f<=1)
>
> The question is, what's the most efficient way to program this, if I
> want to find a with fair accuracy, and with a variety of different
> functions f[x]?
>
> Thanks . . .
Not sure this is most efficient, but I'd use a root-finder on an
NIntegrate expression. Here is an example.
In[1]:= f[x_] := 2/Pi * 1/(1+x^2)
In[2]:= Integrate[f[x], {x,0,Infinity}]
Out[2]= 1
In[3]:= cdf[a_] /; 0<=a<1 := FindRoot[NIntegrate[f[x], {x,0,k}]==a,
{k,1,2}]
In[4]:= cdf[.4]
Out[4]= {k -> 0.726543}
I gave FindRoot two points so it would use a secant method, so it would
not issue error messages trying to get a gradient (which I believe
happens because NIntegrate cannot deal with a symbolic upper bound).
Daniel Lichtblau
Wolfram Research
- References:
- Integrate query
- From: "A. E. Siegman" <siegman@stanford.edu>
- Integrate query