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...