# 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

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

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