# Two ways of integrating x↦xⁿsin(x) give contradictory results. Bug?

Anonymous

First way:

var('x,n')
integral(x^n*sin(x),x)


gives just

integrate(x^n*sin(x), x)


not very informative, let us try to add an assumption to get nicer results.

Second way:

assume(n,'integer')
integral(x^n*sin(x),x)


gives

1/4*(((-1)^n - 1)*gamma(n + 1, I*x) - ((-1)^n - 1)*gamma(n + 1, -I*x))*(-1)^(-1/2*n)


Uhm, looks better, but... wait, isn't (-1)^n-1 equal to 0 for even values of n ? That would make the whole thing equal to 0 for even n.

I = integral(x^n*sin(x),x)
for k in range(10):
print I.subs(n==2*k)


prints only 0s. Weird, non-zero functions should not have zero integrals.

Third way :

Let us try to do the integration with particular values of n.

for n in range(5):
print integral(x^n*sin(x),x)


prints

-cos(x)
-x*cos(x) + sin(x)
-(x^2 - 2)*cos(x) + 2*x*sin(x)
-(x^3 - 6*x)*cos(x) + 3*(x^2 - 2)*sin(x)


Looks better, but is clearly different from the previous answer.

Question:

I am working on the cloud, with SageMath 7.4 kernel. Is this a bug or did I misunderstood the meaning of the 'integer'assumption ?

If this is a bug, how should I report it, is posting this question here enough ?

P.S. I did read the wiki page about reporting bugs, but, gosh, is it really necessary to have a google account in order to report a bug ? Both sage-devel and sage-support are on Google Groups.

edit retag close merge delete

Sort by » oldest newest most voted

You can get an expression for the indefinite integral in terms of hypergeometric functions with the additional argument algorithm='sympy'. It seems to me, as you point out, that algorithm='maxima' (default, I guess) gives a wrong answer for even $n$.

more

The default algorithm for integration is Maxima, and it is known to have issues with the branches of exponential integrals: here's one Trac ticket with a related integration error. I've opened a new ticket for this error.

As pointed out by @mforets, you can use Sympy to get an answer valid for any n without the assumption:

var('n')
integral(x^n*sin(x),x,algorithm='sympy').full_simplify()


Here's a live example of the resulting hypergeometric function.

And in answer to your final question, reporting the bug here is sufficient. Thanks!

more