MathGroup Archive 2003

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

Search the Archive

Re: pitfall in analytic function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg41471] Re: pitfall in analytic function
  • From: "Dr. Wolfgang Hintze" <weh at snafu.de>
  • Date: Wed, 21 May 2003 08:03:01 -0400 (EDT)
  • References: <ba7ic1$5r8$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Narasimham,

I have tried to give a satisfactory solution to your questions in the 
notebook attached to this message. Below you find a text copy of it. You 
can copy the In[] statements into a fresh notebook and study the effect. 
Notice that I have used no comment marks in the text below.

Hope this helps.

Regards,
Wolfgang

-------------------- start of notebook test --------------------

Overview: The whole play consists of five acts (actions, ideas), a 
prologue and an epilogue.

Prologue

In[59]:=
ClearAll["General`*"]

Act 1
First it is important to clearly define the functions in question. Let's 
start with this one:

In[60]:=
f[x_, p_] := (2^x - x^2)/(x - p)

Act 2
Here I have introduced a parameter p which is equal to 2 in Narasimham's 
function. But because of the possible singularity it is better to leave 
the value of p open in the definition of f[].

How does f look like?

In[61]:=
Clear[x, p];
f[x, p]

Out[62]=
\!\(\(2\^x - x\^2\)\/\(\(-p\) + x\)\)

Now we plot it, setting p=2:

In[63]:=
p = 2;
Plot[f[x, p], {x, 0, 6}];

Next step: define the integral

In[65]:=
y1[x_, p_] := Integrate[f[t, p], {t, 0, x}]

Act 3
Notice that (in contrast to Narasimham's expression) I have 
distinguished clearly between the variable of integration (t) and the 
upper limit of integration (x).

How does it look like?

In[66]:=
Clear[x, p];
y1[x, p]

Out[67]=
\!\(1\/2\ \((\(-2\)\ p\ x - x\^2 + 2\^\(1 + p\)\ Gamma[0, p\ Log[2]] -
         2\^\(1 + p\)\ Gamma[0, \((p - x)\)\ Log[2]] +
         2\^p\ Log[\(-\(1\/p\)\)] - 2\^p\ Log[\(-p\)] + 2\ p\^2\ 
Log[\(-p\)] +
         2\^\(1 + p\)\ Log[p] - 2\^\(1 + p\)\ Log[p - x] -
         2\^p\ Log[1\/\(\(-p\) + x\)] + 2\^p\ Log[\(-p\) + x] -
         2\ p\^2\ Log[\(-p\) + x])\)\)

Setting p=2 in this expression leads to error messages:
To see this delete the comment marks in the next cell and run it. You 
probably need to abort the calculation with Strg+.

In[68]:=
(*
   p = 2;
   y1[t, p]
   *)

Act 4
To avoid that we set p equal to 2. (i.e. we use the "real 2" or 
"numerical 2" rather than the "integer 2"). This is numerically 
completely equivalent but it helps Mathematica a lot. Here we go:

In[69]:=
Clear[x]; p = 2.;
y1[x, p]

Out[70]=
\!\(\((\(\(3.2472369480282737`\)\(\[InvisibleSpace]\)\) +
         0.`\ \[ImaginaryI])\) - 2.`\ x - 0.5`\ x\^2 -
     4.`\ Gamma[
         0, \(\(1.3862943611198906`\)\(\[InvisibleSpace]\)\) - x\ Log[2]] -
     4.`\ Log[\(\(2.`\)\(\[InvisibleSpace]\)\) - 1.`\ x] -
     4.`\ Log[\(\(1.3862943611198906`\)\(\[InvisibleSpace]\)\) - x\ 
Log[2]] -
     2.`\ Log[1\/\(\(-1.3862943611198906`\) + x\ Log[2]\)] +
     2.`\ Log[\(-1.3862943611198906`\) + x\ Log[2]]\)

Now there are no errors.
There is still a little cloud in the sky: a neglibigle imaginary part of 
the form 0.\[ImaginaryI]. We can either use Chop or ignore it. We do the 
latter.

Now we can plot y1:

In[71]:=
p = 2.;
Plot[y1[x, p], {x, 0, 10}];

Resulting in a smooth plot; no problems at all at t=2!

Now similarly for the function y2:

In[73]:=
y2[x_, p_] := -2 x - x^2/2 + 4 ExpIntegralEi[-p Log[2] + x Log[2]] -
     4 (ExpIntegralEi[-2 Log[2]] - Log[2]) - 4 Log[p - x]

In[74]:=
Clear[x];
p = 2.;
y2[x, p]

Out[76]=
\!\(\(-2\)\ x - x\^2\/2 +
     4\ ExpIntegralEi[\(-1.3862943611198906`\) + x\ Log[2]] -
     4\ \((ExpIntegralEi[\(-2\)\ Log[2]] - Log[2])\) -
     4\ Log[\(\(2.`\)\(\[InvisibleSpace]\)\) - x]\)

We now get definitely imaginary parts because of the branch cuts of Log 
and ExpIntegralEi for x>2. For example:

In[77]:=
x = 3.; p = 2.;
y2[x, p]

Out[78]=
-3.07211 - 12.5664 \[ImaginaryI]

Act 5
Hence let's take the real part and call it y2realPart (unfortunately, 
taking the real part of an expression in Mathematica is not possible by 
just writing Re[expr], but the following procedure must executed)

In[79]:=
y2realPart[x_, p_] := ComplexExpand[Re[y2[x, p]], TargetFunctions -> 
{Re, Im}]

In[80]:=
Clear[x, p];
y2realPart[x, p]

Out[81]=
\!\(\(-2\)\ x - x\^2\/2 + 4\ Log[2] - 2\ Log[\((p - x)\)\^2] -
     4\ Re[ExpIntegralEi[\(-2\)\ Log[2]]] +
     4\ Re[ExpIntegralEi[\(-p\)\ Log[2] + x\ Log[2]]]\)

In[82]:=
Plot[y2realPart[x, 2], {x, 0, 10}];


Epilogue
The plots of the functions y1 and y2realPart look equal. That they are 
can be verified by printing some values of the difference.

In[83]:=
p = 2.;
For[x = 0, x <= 5, Print["x = ", x, " ->  ", y2realPart[x, p] - y1[x, p]];
     x = x + 0.5];


Or, using Chop to get rid of the spurious imaginary parts:

In[85]:=
p = 2.;
For[x = 0, x <= 5,
     Print["x = ", x, " ->  ", Chop[y2realPart[x, p] - y1[x, p]]];
     x = x + 0.5];


Narasimham G.L. wrote:

> I tried to integrate a transcendental function having factor (x-2),
> analytic on the whole line, even at x=2, but unable to get through with
> the smooth function at x=2.The following Mathematica prgram was run, and
> although at x=2 it is a smooth plot ( minimum value is around -1.204 at
> x=2.1), it proves to be a stumbling block in performing integration. 
> 
> Plot [ (2^x-x^2)/(x-2), { x,0,4 }]
> y1=Integrate [(2^x-x^2)/(x-2),{x,0,x}]  
> Plot[y1 ,{x,0, 4} ];
> y2= -2 x - x^2/2 + 4 ExpIntegralEi[-2 Log[2] + x Log[2]] -      
>  4 (ExpIntegralEi[-2 Log[2]] - Log[2]) - 4 Log[2 - x];
> Plot[y2 ,{x,2.1, 4} ];
> Plot[y2 ,{x,0, 4} ];
> All integrates terminate at x=2. I like to treat a smooth analytic
> continuous function in the normal way. Failure to do so negates
> smoothness, continuity and analyticity, it would appear. How to
> circumvent this problem?
> 
> Thanks for suggestions to overcome this problem.
> 



  • Prev by Date: Re: equiprobable intervals with triangular pdf
  • Next by Date: RE: Magic number 23
  • Previous by thread: Re: pitfall in analytic function
  • Next by thread: SelectedNotebook[ ] under Mac OSX gives wrong answer