MathGroup Archive 2005

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

Search the Archive

Re: global assumptions?? How far can I go?

Here are a few more observations related to using assumptions. Some older  
functions like Sum and Product don't generate conditional output, except  
in some rare cases:

Assuming[a >= 0, Product[k^a, {k, Infinity}]]

If[Re[a] >= 0, Infinity, 0]

Since Sum and Product cannot really use assumptions, Assuming has no  
effect in this example. Besides, the result is incorrect for a == 0.

Limit currently seems to be at an intermediate stage -- it has the option  
Assumptions but it cannot generate conditional output, which means that  
unless 'useful' assumptions are supplied to Limit it will simply return  

Limit[x^a, x -> 0]
Assuming[a > 0, Limit[x^a, x -> 0]]

Limit[x^a, x -> 0]


Series takes the option Assumptions as well, which can be useful in  
conjunction with the new capability of Series to generate a kind of  
generalized expansion for points on branch cuts:

(*restart the kernel*)
Assuming[Arg[(2 + x)*I - 2*I] == Pi/2,
   Series[ArcTan[(2 + x)*I], {x, 0, 1}]]
Series[ArcTan[(2 + x)*I], {x, 0, 1}]
Series[ArcTan[(2 + x)*I], {x, 0, 1}, Assumptions -> True]

SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

Pi*(Floor[(Pi - 2*Arg[-2*I + I*(2 + x)])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I  
+ I*(2 + x)])/(4*Pi)]) + SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

We can see that Out[3] contains SeriesData plus extra terms used to  
determine the position of the point with respect to the branch cut. There  
is a glitch in Series though: the first call to Series resets the value of  
the option Assumptions of Series, so In[2] still uses the assumptions from  
In[1]. If we evaluate In[2] after restarting the kernel, we get a result  
identical to Out[3].

However, adding extra terms or factors depending on Arg[x] still fails for  
nested discontinuous functions:

Series[ArcTan[2*I*ArcTan[x]/ArcTan[2*I]], {x, 2*I, 0}]

Pi*(Floor[(Pi - 2*Arg[-2*I + (2*(Pi*(Floor[(Pi - 2*Arg[-2*I + x])/(4*Pi)]  
+ Floor[(Pi + 2*Arg[-2*I + x])/(4*Pi)]) + SeriesData[x, 2*I,  
{I*ArcTanh[2]}, 0, 1, 1]))/ArcTanh[2]])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I  
+ (2*(Pi*(Floor[(Pi - 2*Arg[-2*I + x])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I  
+ x])/(4*Pi)]) + SeriesData[x, 2*I, {I*ArcTanh[2]}, 0, 1,  
1]))/ArcTanh[2]])/(4*Pi)]) + SeriesData[x, 2*I, {I*ArcTanh[2]}, 0, 1, 1]

For x close to 2*I, the result is indeterminate if Re[x] >= 0 and doesn't  
agree with ArcTan[2*I*ArcTan[x]/ArcTan[2*I]] if Re[x] < 0. If we increase  
the order of the expansion, the result will be correct for some (not all)  
values of x such that Re[x] >= 0 and still wrong for Re[x] < 0. I don't  
think that this is a bug, more likely it just shows that this method of  
using Arg[x] in the series expansion still has limitations.

It is possible to pass conditions that contain patterns to Refine;  
however, an assumption such as _ > 0 is contradictory -- it implies that x  
> 0 and -x > 0 at the same time, and if we try to make the pattern more  
specific, then Refine[t > 0, _Symbol > 0] just crashes the Mathematica  
kernel. More importantly,

Integrate[1/x^2, {x, 1, t}] // Refine[#, t < 0]&

makes Mathematica 5.1 go into infinite loop: the computation takes several  
minutes after which Mathematica generates $IterationLimit::aitlim warning  
and returns the If expression unevaluated.

Maxim Rytin
m.r at

  • Prev by Date: Re: [Newbie] Ohm, Ampere, Volt units
  • Next by Date: Re: Re:Re: FullSimplify with Assumptions
  • Previous by thread: Re: global assumptions?? How far can I go?
  • Next by thread: FullSimplify with Assumptions