Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Well... Let's do it symbolically :

sage: ((1-x)^(-2/3)).integrate(x)
-3*(-x + 1)^(1/3)

This is indeed a correct primitive :

sage: ((1-x)^(-2/3)).integrate(x).diff(x)
(-x + 1)^(-2/3)

Therefore, on might compute :

sage: ((1-x)^(-2/3)).integrate(x).limit(x=0)
-3
sage: ((1-x)^(-2/3)).integrate(x).limit(x=1)
0

And, by the way :

sage: ((1-x)^(-2/3)).integrate(x,0,1)
3

But, indeed :

sage: numerical_integral((1-x)^(-2/3),0,1)
(inf, nan)

I can but conclude that this is a bug of numerical_integral...

Note that, misery loving company, Sage is not alone in having problems with this integration :

sage: maxima.quad_qagp((1-x)^(-2/3),x,0,1,[1])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-51-039b3b49b5dd> in <module>()
----> 1 maxima.quad_qagp((Integer(1)-x)**(-Integer(2)/Integer(3)),x,Integer(0),Integer(1),[Integer(1)])

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in __call__(self, *args, **kwds)
    627 
    628     def __call__(self, *args, **kwds):
--> 629         return self._parent.function_call(self._name, list(args), kwds)
    630 
    631     def _instancedoc_(self):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in function_call(self, function, args, kwds)
    574                                        [s.name() for s in args],
    575                                        ['%s=%s'%(key,value.name()) for key, value in kwds.items()])
--> 576         return self.new(s)
    577 
    578     def _function_call_string(self, function, args, kwds):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in new(self, code)
    343 
    344     def new(self, code):
--> 345         return self(code)
    346 
    347     ###################################################################

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in __call__(self, x, name)
    278 
    279         if isinstance(x, string_types):
--> 280             return cls(self, x, name=name)
    281         try:
    282             return self._coerce_from_special_method(x)

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/maxima.pyc in __init__(self, parent, value, is_name, name)
   1159             True
   1160         """
-> 1161         ExpectElement.__init__(self, parent, value, is_name=False, name=None)
   1162 
   1163     def display2d(self, onscreen=True):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc in __init__(self, parent, value, is_name, name)
   1375         else:
   1376             try:
-> 1377                 self._name = parent._create(value, name=name)
   1378             # Convert ValueError and RuntimeError to TypeError for
   1379             # coercion to work properly.

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in _create(self, value, name)
    474     def _create(self, value, name=None):
    475         name = self._next_var_name() if name is None else name
--> 476         self.set(name, value)
    477         return name
    478 

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/maxima.pyc in set(self, var, value)
   1004             self._batch(cmd, batchload=True)
   1005         else:
-> 1006             self._eval_line(cmd)
   1007             #self._sendline(cmd)
   1008             #self._expect_expr()

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/maxima.pyc in _eval_line(self, line, allow_use_file, wait_for_prompt, reformat, error_check, restart_if_needed)
    796         out = self._before()        # input echo + output prompt + output
    797         if error_check:
--> 798             self._error_check(line, out)
    799         if not reformat:
    800             return out

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/maxima.pyc in _error_check(self, cmd, out)
    936         m = r.search(out)
    937         if not m is None:
--> 938             self._error_msg(cmd, out)
    939 
    940     def _error_msg(self, cmd, out):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/maxima.pyc in _error_msg(self, cmd, out)
    953                 Principal Value
    954         """
--> 955         raise TypeError("Error executing code in Maxima\nCODE:\n\t%s\nMaxima ERROR:\n\t%s"%(cmd, out.replace('-- an error.  To debug this try debugmode(true);','')))
    956 
    957     ###########################################

TypeError: Error executing code in Maxima
CODE:
    sage40 : quad_qagp(sage34,sage35,sage36,sage37,sage39)$
Maxima ERROR:

quad_qagp: Cannot numerically evaluate 1/(1-_SAGE_VAR_x)^(2/3) at 1.0
 -- an error. To debug this try: debugmode(true);

sage: mathematica.NIntegrate((1-x)^(-2/2),[x,0,1])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-52-af13341319ac> in <module>()
----> 1 mathematica.NIntegrate((Integer(1)-x)**(-Integer(2)/Integer(2)),[x,Integer(0),Integer(1)])

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in __call__(self, *args, **kwds)
    627 
    628     def __call__(self, *args, **kwds):
--> 629         return self._parent.function_call(self._name, list(args), kwds)
    630 
    631     def _instancedoc_(self):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in function_call(self, function, args, kwds)
    574                                        [s.name() for s in args],
    575                                        ['%s=%s'%(key,value.name()) for key, value in kwds.items()])
--> 576         return self.new(s)
    577 
    578     def _function_call_string(self, function, args, kwds):

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in new(self, code)
    343 
    344     def new(self, code):
--> 345         return self(code)
    346 
    347     ###################################################################

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in __call__(self, x, name)
    278 
    279         if isinstance(x, string_types):
--> 280             return cls(self, x, name=name)
    281         try:
    282             return self._coerce_from_special_method(x)

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc in __init__(self, parent, value, is_name, name)
   1375         else:
   1376             try:
-> 1377                 self._name = parent._create(value, name=name)
   1378             # Convert ValueError and RuntimeError to TypeError for
   1379             # coercion to work properly.

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/interface.pyc in _create(self, value, name)
    474     def _create(self, value, name=None):
    475         name = self._next_var_name() if name is None else name
--> 476         self.set(name, value)
    477         return name
    478 

/usr/local/sage-8/local/lib/python2.7/site-packages/sage/interfaces/mathematica.pyc in set(self, var, value)
    533         out = self._eval_line(cmd, allow_use_file=True)
    534         if len(out) > 8:
--> 535             raise TypeError("Error executing code in Mathematica\nCODE:\n\t%s\nMathematica ERROR:\n\t%s"%(cmd, out))
    536 
    537     def get(self, var, ascii_art=False):

TypeError: Error executing code in Mathematica
CODE:
    sage11=NIntegrate[sage7,sage1];
Mathematica ERROR:
    NIntegrate::slwcon: 
   Numerical integration converging too slowly; suspect one of the following:
    singularity, value of the integration is 0, highly oscillatory integrand,
    or WorkingPrecision too small.

NIntegrate::ncvb: 
   NIntegrate failed to converge to prescribed accuracy after 9
     recursive bisections in x near {x} = 
    {0.99999999999999999999999999998369273566250875422125492455831169218}
    . NIntegrate obtained 149.573 and 23.2473
     for the integral and error estimates.

But :

sage: import mpmath
sage: mpmath.quad(lambda x:(1-x)^(-2/3),[0,1])
mpf('2.9999987601927596')

It would be interesting to test other numerical integratin libraries available in Sage (and, more generally, Python...). And to report this bug...