Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: Integrate

  • To: mathgroup at smc.vnet.net
  • Subject: [mg74228] Re: Integrate
  • From: "dimitris" <dimmechan at yahoo.com>
  • Date: Thu, 15 Mar 2007 04:55:50 -0500 (EST)
  • References: <esls78$q0v$1@smc.vnet.net><et5o76$jor$1@smc.vnet.net>

>   Dimitris, this is a marvelous solution to my problem. I really apprecia=
te
> your help. I will now see if I can solve all my other (similar) integrals=
 using the same trick.

It gives me great pleasure that you found so helpful my response.

> Timing is not really the big issue if I get results in a reasonable amoun=
t of time.

Note that you must clarify to your mind what is actually a "reasonable
amount of time".
For example on my machine I do believe that the almost 17 seconds for
evaluating the
integral with my trick is more than just reasonable time.

Note e.g. a very interesting example

Integrate[BesselJ[0, x]/Sqrt[1 + x^2], {x, 0, Infinity}]//Timing
N@%[[2]]
NIntegrate[BesselJ[0, x]/Sqrt[1 + x^2], {x, 0, Infinity}, Method -> \
Oscillatory]

{4.186999999999999*Second, BesselI[0, 1/2]*BesselK[0, 1/2]}
0=2E9831043098467616
0=2E9831043098470272

Quit

Integrate[BesselJ[0, x]/Sqrt[1 + x^2], {x, 0, Infinity},
GenerateConditions -> False]//Timing
{0.31299999999999994*Second, BesselI[0, 1/2]*BesselK[0, 1/2]}

If you know indepently that the integral converges why leave
Mathematica to do the "dirty job"
causing waste of your invaluable time?

> Also the references you cited are quite interesting, because they give so=
me insight
> what might go on inside Mathematica concerning integration.

Here is a more complete list.
Note that following the moderator's advice I will avoid the use of
link references.

"Indefinite and Definite Integration" by Kelly Roach (1992)
"The evaluation of Bessel functions via G-function identities" by
Victor Adamchik (1995)
"Definite Integration in Mathematica 3.0" by the same author
"Symbolic Definite Integration" by Daniel Lichtblau

Check also

Manuel Bronstein's Symbolic Integration 1 and some references therein.

> I also agree with you that it is my task as a programmer to "help" Mathem=
atica
> and guide it into the direction I want it to go. Sometimes this is an "ar=
t"...

It is an a combination of art, experience, reading, thinking (and
guessing sometimes!).

Let look an integral appeared in an old post Peter Pein.

$Version
5=2E2 for Microsoft Windows (June 20, 2005)

Integrate[Log[Sin[x]^2]*Tan[x], {x, 0, Pi}]
Integrate::idiv: Integral of Log[Sin[x]^2]*Tan[x] does not converge on
\
{x,0,Pi}.
Integrate[Log[Sin[x]^2]*Tan[x], {x, 0, Pi}]

Of course the integral is zero as you can figure out from the plot of
the integrand
in integration range or noticing that f[x]+f[Pi-x]=0 where

f[x_] := Log[Sin[x]^2]*Tan[x]

Also a direct numerical integration verify our statement.

Tr@(NIntegrate[Log[Sin[x]^2]*Tan[x],
{x,#[[1]],#[[2]]},WorkingPrecision->
          50,PrecisionGoal->40] &/@Partition[Range[0,Pi,Pi/2],2,1])
0``39.9568146932663

It is interesting to see what I got from another CAS (due to the
policy
of the forum I can't mention its name).

int(log(sin(x)^2)*tan(x),x=0..Pi);
undefined

int(log(sin(x)^2)*tan(x),x=0..Pi/2);
-Infinity

int(log(sin(x)^2)*tan(x),x=Pi/2..Pi);
Infinity

On the contrary Mathematica may give a wrong value for the
definite integral in the whole range (0,Pi) but

Integrate[Log[Sin[x]^2]*Tan[x], {x, 0, Pi/2}]
-(Pi^2/12)

Integrate[Log[Sin[x]^2]*Tan[x], {x, Pi/2, Pi}]
Pi^2/12

Their sum give zero as it should be!

What is happening here? I will try to figure out (I am not quite sure
and as you may notice
I have a recent post mentioning this integral).

Note first that Mathematica evaluates correctly an indefinite integral
of Log[Sin[x]^2]*Tan[x]

F[x_] = Integrate[f[x], x]
Log[Sec[x/2]^2]^2 + 2*Log[Sec[x/2]^2]*Log[(1/2)*Cos[x]*Sec[x/2]^2] +
Log[Sec[x/2]^2]*Log[Sin[x]^2] -
  2*Log[Sec[x/2]^2]*Log[-1 + Tan[x/2]^2] - Log[Sin[x]^2]*Log[-1 +
Tan[x/2]^2] + Log[Tan[x/2]^2]*Log[-1 + Tan[x/2]^2] + 2*PolyLog[2,
(1/2)*Sec[x/2]^2] + PolyLog[2, Cos[x]*Sec[x/2]^2] + PolyLog[2, -Tan[x/
2]^2]

Simplify[D[F[x], x] == f[x]]
True

The obtained antiderivative has real and imaginary part

Plot[Re@F[x], {x, 0, Pi}]
Plot[Im@F[x], {x, 0, Pi}]

Helping now Mathematica we can take the correct answer

FullSimplify[(Limit[F[x], x -> Pi, Direction -> 1] - Limit[F[x], x ->
Pi/2, Direction -> -1]) +
   (Limit[F[x], x -> Pi/2, Direction -> 1] - Limit[F[x], x -> 0,
Direction -> -1])]
0

The problem is the vanishing of the integrand at Pi/2.

Indeed using the following undocumentated setting of Integrate (which
is well documentated for NIntegrate) Mathematica gives again the
correct
answer with less effort

Integrate[Log[Sin[x]^2]*Tan[x], {x, 0, Pi/2, Pi}]
0

Note that if we didn't take notice of Pi/2 and applied blindly the
fundamental
theorem of calculus we would get incorrectly

FullSimplify[Limit[F[x], x -> Pi, Direction -> 1] - Limit[F[x], x ->
0, Direction -> -1]]
4*I*Pi*Log[2]

That is a complex value for an integral whose integrand is real in the
integration range.
If Mathematica would simply return this complex value, I would say
that it failed
to detect the discontinuity of the antiderivative at Pi/2. But it
returns a warning
message for divergence, so...I GIVE UP!

Note also that Integrate has been already from version 3.0 very
powerful.
But since version 5.0 symbolic integration has become one of the most
important advantages of Mathematica over other CAS.

But as Daniel Lichtblau pointed out in his article: The powerfulness
has the price
of slower speed (usually) and some level of platform dependent
behavior (less usually)
than in the past.

Indeed in the original thread regarding this integral there was the
following response
from Bob Hanlon:

>>Works in my version:

>>$Version
>>5.2 for Mac OS X (June 20, 2005)

>>f[x_]:=Log[Sin[x]^2]Tan[x];

>>Integrate[f[x],{x,0,Pi}]
>>0

Anyway other possible ways of working under Mathematica 5.2 for
Windows include

Tr @( Integrate[f[x], {x, #1[[1]], #1[[2]]}] &  /@
Partition[Range[0, Pi, Pi/2], 2, 1] )
0

Integrate[f[x], {x, 0, z}, Assumptions -> Inequality[Pi/2, Less, z,
LessEqual, Pi]]
Limit[%, z -> Pi, Direction -> 1]
-(Pi^2/3) - 2*I*Pi*Log[2] + Log[2]^2 + 4*I*Pi*Log[Sec[z/2]] + 4*Log[-
(Cos[z]/(1 + Cos[z]))]*Log[Sec[z/2]] + 4*Log[Sec[z/2]]^2 -
  4*Log[Sec[z/2]]*Log[(-Cos[z])*Sec[z/2]^2] + 4*Log[Sec[z/
2]]*Log[Sin[z]] - 2*Log[(-Cos[z])*Sec[z/2]^2]*Log[Sin[z]] +
  2*Log[(-Cos[z])*Sec[z/2]^2]*Log[Tan[z/2]] + 2*PolyLog[2, 1/(1 +
Cos[z])] + PolyLog[2, Cos[z]*Sec[z/2]^2] +
  PolyLog[2, -Tan[z/2]^2]
0

Assuming[a >= 1, Integrate[f[a*x], {x, 0, Pi}]]
Limit[%, a -> 1]

(1/(3*a))*(-Pi^2 - 6*I*Pi*Log[2] + 3*Log[2]^2 + 6*Log[Cos[a*Pi]/(1 +
Cos[a*Pi])]*Log[Sec[(a*Pi)/2]^2] +
   3*Log[Sec[(a*Pi)/2]^2]^2 + 3*Log[Sec[(a*Pi)/2]^2]*Log[Sin[a*Pi]^2]
- 6*Log[Sec[(a*Pi)/2]^2]*Log[-1 + Tan[(a*Pi)/2]^2] -
   3*Log[Sin[a*Pi]^2]*Log[-1 + Tan[(a*Pi)/2]^2] + 3*Log[Tan[(a*Pi)/
2]^2]*Log[-1 + Tan[(a*Pi)/2]^2] +
   6*PolyLog[2, 1/(1 + Cos[a*Pi])] + 3*PolyLog[2, Cos[a*Pi]*Sec[(a*Pi)/
2]^2] + 3*PolyLog[2, -Tan[(a*Pi)/2]^2])
0

Integrate[f[x], {x, 0, Pi}, GenerateConditions -> False]
0

You think and act properly. That is the correct attitude!

> Nevertheless, in the present situation I do not really understand why Mat=
hematica wants
> me to do that rather trivial variable transformation, which is at the hea=
rt of your solution.
> The integrand is still a rather complicated rational function of the same=
 order. The form
> of the integrand did not really change
> substantially as it is the case with some other ingenious substitutions o=
ne uses in order to
> do some complicated looking integrals "by hand".

I agree with you. But I can't provide you more insight than I did
provide you in my original post.
I think helping in this way Mathematica makes the application of
partial fraction decomposition
which is the heart of Risch Algorithm more easily for Integrate. If we
could understand all of
Mathematica's Integrate implementation algorithm we will probably work
at WRI!

I agree also that the the variable transformation is rather trivial.
But who tells we must not think
simple things first in order to assist CASs?

Of course we can think and less trivial valiable transformations!
For example in above mentioned integral:

integrand = f[x]*dx /. x -> ArcSin[Sqrt[u]] /. dx ->
D[ArcSin[Sqrt[u]], u]
Integrate[integrand, {u, 0, Sin[Pi]^2}]

Log[u]/(2*(1 - u))
0

And what is more important as Peter Pein show in his original post in
this way
we can get a more simplified indefinite integral than Mathematica and
is real in the
whole integration range.

inintegrand = f[x]*dx /. x -> -ArcSin[Sqrt[u]] /. dx -> D[-
ArcSin[Sqrt[u]], u]
Integrate[integrand, {u, 0, Sin[z]^2}, Assumptions -> 0 < z < Pi]
Plot[%, {z, 0, Pi}]
(%% /. z -> Pi) - (%% /. z -> 0)
(D[%%%, z] // Simplify) /. z -> x

Log[u]/(2*(1 - u))
(1/12)*(-Pi^2 + 6*PolyLog[2, Cos[z]^2])
(*plot to be displayed*)
0
Log[Sin[x]^2]*Tan[x]


> I think the fact that we are forced to such tricks shows that the Mathema=
tica integrator
> is still a bit "immature" in special cases, as also the very interesting =
article by D. Lichtblau,
> which you cite, seems to indicate. So all this is probably perfectly know=
n to the
> Mathematica devellopers. And I hope the next Mathematica version has all =
this "ironed out"??

Reading again the article.
Bear in your mind that the subject of the symbolic (indefinite and
definite) integration
is perhaps the most serious challenge for all CASs and of course
Mathematica.
You can't accuse Mathematica of immaturity even in special cases. If
you think
that your integral is a trivial one for a CAS (you don't certainly
want to see what output I
got for another CAS!) note Mathematica almost fifteen (yes only 15!)
ago prior to the quite
revolutionary version 3.0 it will return -3/2 for the following
integral

Integrate[1/x^2, {x, -1, 2}]

that is, it would have failed to detect at first stage the
nonintegarble singularity at x=0 and
would have returned at second stage a negative value for a possitive
integrand in the integration
range.

A lot of evolution has taken place. Don't you agree?


Kind Regards
Dimitris



=CF/=C7 Michael Weyrauch =DD=E3=F1=E1=F8=E5:
> Hello,
>
>   Dimitris, this is a marvelous solution to my problem. I really apprecia=
te
> your help. I will now see if I can solve all my other (similar) integrals=
 using the same trick.
> Timing is not really the big issue if I get results in a reasonable amoun=
t of time.
>
> Also the references you cited are quite interesting, because they give so=
me insight
> what might go on inside Mathematica concerning integration.
>
> I also agree with you that it is my task as a programmer to "help" Mathem=
atica
> and guide it into the direction I want it to go. Sometimes this is an "ar=
t"...
>
> Nevertheless, in the present situation I do not really understand why Mat=
hematica wants
> me to do that rather trivial variable transformation, which is at the hea=
rt of your solution.
> The integrand is still a rather complicated rational function of the same=
 order. The form
> of the integrand did not really change
> substantially as it is the case with some other ingenious substitutions o=
ne uses in order to
> do some complicated looking integrals "by hand".
>
> I think the fact that we are forced to such tricks shows that the Mathema=
tica integrator
> is still a bit "immature" in special cases, as also the very interesting =
article by D. Lichtblau,
> which you cite, seems to indicate. So all this is probably perfectly know=
n to the
> Mathematica devellopers. And I hope the next Mathematica version has all =
this "ironed out"??
>
> Many thanks again,  Michael



  • Prev by Date: Re: Re: Multi-core Support in Mathematica 5.2
  • Next by Date: Re: fill circle while using circle command
  • Previous by thread: Re: Integrate
  • Next by thread: Integrate