Opened 6 years ago

Last modified 2 years ago

#21440 new defect

wrong result of integral

Reported by: Daniel Krenn Owned by:
Priority: major Milestone: sage-7.4
Component: symbolics Keywords: wrong result, integration
Cc: Merged in:
Authors: Reviewers:
Report Upstream: Reported upstream. Developers acknowledge bug. Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description

sage: f1 = (2*cos(2*pi*x) - cos(4*pi*x)) / (5 - 4*cos(2*pi*x))
sage: integrate(f1, x, 0, 1)
23/24

but it should be 1/4:

sage: sage: numerical_integral(f1,0,1)
(0.24999999999999997, 4.6160077311221225e-15)

and

sage: e(x)=exp(2*pi*I*x)
sage: f2=real(e(x)/(2-e(-x)))
sage: (f1-f2).simplify_trig()  # f1 equals f2
0
sage: integrate(f2,x,0,1)
1/4

This was reported by Lukas Spiegelhofer on 8/10/2015 16:00:13 via "Sage Notebooks Bugreports".

Attachments (1)

bad_primitives.png (48.0 KB) - added by Frédéric Chapoton 2 years ago.
display of the bad primitives

Download all attachments as: .zip

Change History (8)

comment:1 Changed 6 years ago by Marcelo Forets

Report Upstream: N/AReported upstream. No feedback yet.

comment:2 Changed 6 years ago by Marcelo Forets

Report Upstream: Reported upstream. No feedback yet.Reported upstream. Developers acknowledge bug.

comment:3 Changed 4 years ago by Simon King

Is the following example an instance of the same bug, or a different problem?

sage: (cos(pi*x)*exp(-I*pi*x)).integral(x,-1/2,1/2)  # wrong
1
sage: F = (cos(pi*x)*exp(-I*pi*x)).integral(x); F(x=1/2)-F(x=-1/2)  # correct
1/2

comment:4 Changed 4 years ago by Marcelo Forets

Hmmm they look similar to me, although in your example the primitive computed by Maxima is correct, but for the case of the description also the primitive is wrong:

sage: f1 = (2*cos(2*pi*x) - cos(4*pi*x)) / (5 - 4*cos(2*pi*x))
sage: F1 = f1.integrate(x)
sage: F1(x=1) - F1(x=0)  # yet another result!
5/8
sage: F1_g = f1.integrate(x, algorithm="giac")
sage: F1_g(x=1) - F1_g(x=0)
1/4

comment:5 Changed 4 years ago by Paul Zimmermann

I'm not sure integrate accepts inputs that take non-real values (it should be documented if yes or no):

sage: f(x)=cos(pi*x)*exp(-I*pi*x)
sage: f(1/4)
-1/2*I + 1/2

Note that:

sage: (cos(pi*x)*exp(-I*pi*x)).real().integral(x,-1/2,1/2) 
1/2

comment:6 Changed 2 years ago by Frédéric Chapoton

Well, the primitives given by various algo are all different:

sage: f1 = (2*cos(2*pi*x) - cos(4*pi*x)) / (5 - 4*cos(2*pi*x))                  
sage: i1=f1.integral(x,algorithm='maxima').simplify_trig()                      
sage: i2=f1.integral(x,algorithm='giac').simplify_trig()                        
sage: i3=f1.integral(x,algorithm='fricas').simplify_trig()                      
sage: g1 = f1.simplify_trig()                                                   
sage: j1=g1.integral(x,algorithm='maxima').simplify_trig()                      
sage: j2=g1.integral(x,algorithm='giac').simplify_trig()                        
sage: j3=g1.integral(x,algorithm='fricas').simplify_trig()                      
sage: i1                                                                        
1/48*(30*pi*x + 24*cos(pi*x)*sin(pi*x) + 40*arctan(3*sin(pi*x)/cos(pi*x)) - 24*arctan(sin(pi*x)/cos(pi*x)) - 17*arctan2(2*cos(pi*x)*sin(pi*x), 2*cos(pi*x)^2 - 3/2) + 17*arctan2(2*cos(pi*x)*sin(pi*x), 2*cos(pi*x)^2 - 3))/pi
sage: i2                                                                        
1/8*(2*pi*x + 4*cos(pi*x)*sin(pi*x) + arctan(2*cos(pi*x)*sin(pi*x)/(2*sin(pi*x)^2 + 1)))/pi
sage: i3                                                                        
1/16*(2*pi*x + 8*cos(pi*x)*sin(pi*x) + arctan(1/6*(10*sin(pi*x)^2 - 1)/(cos(pi*x)*sin(pi*x))))/pi
sage: j1                                                                        
1/8*(pi*x + 4*cos(pi*x)*sin(pi*x) + arctan(3*sin(pi*x)/cos(pi*x)))/pi
sage: j2                                                                        
1/8*(2*pi*x + 4*cos(pi*x)*sin(pi*x) + arctan(2*cos(pi*x)*sin(pi*x)/(2*sin(pi*x)^2 + 1)))/pi
sage: j3                                                                        
1/16*(2*pi*x + 8*cos(pi*x)*sin(pi*x) + arctan(1/6*(10*sin(pi*x)^2 - 1)/(cos(pi*x)*sin(pi*x))))/pi
sage: (i1-j1).simplify_trig()                                                   
1/48*(24*pi*x + 34*arctan(3*sin(pi*x)/cos(pi*x)) - 24*arctan(sin(pi*x)/cos(pi*x)) - 17*arctan2(2*cos(pi*x)*sin(pi*x), 2*cos(pi*x)^2 - 3/2) + 17*arctan2(2*cos(pi*x)*sin(pi*x), 2*cos(pi*x)^2 - 3))/pi
sage: (i2-j2).simplify_trig()                                                   
0
sage: (i3-j3).simplify_trig()                                                   
0

and only "giac" returns a continuous primitive ! All the others have a jump at 1/2

Version 1, edited 2 years ago by Frédéric Chapoton (previous) (next) (diff)

Changed 2 years ago by Frédéric Chapoton

Attachment: bad_primitives.png added

display of the bad primitives

comment:7 Changed 2 years ago by Frédéric Chapoton

Here is the picture, with mathematica_free result at the end, also not continuous display of the bad primitives

Note: See TracTickets for help on using tickets.