Ticket #12123 (new defect)
Bug in convolution
| Reported by: | kcrisman | Owned by: | burcin |
|---|---|---|---|
| Priority: | major | Milestone: | sage-5.10 |
| Component: | calculus | Keywords: | |
| Cc: | wdj | Work issues: | |
| Report Upstream: | N/A | Reviewers: | |
| Authors: | Merged in: | ||
| Dependencies: | Stopgaps: |
Description
sage: x = PolynomialRing(QQ,'x').gen() sage: f = Piecewise([[(-2, 2), 2 * x^0]]) sage: g = Piecewise([[(0, 2), 3/4 * x^0]]) sage: n = f.convolution(g) sage: n Piecewise defined function with 3 parts, [[(-2, 0), 3/2*x + 3], [(0, 2), 6], [(2, 4), -3/2*x + 6]]
But the middle piece should be 3, not 6, apparently.
See the original report at this ask.sagemath.org question.
Note: See
TracTickets for help on using
tickets.

The fix is to fix the following
cmd1 = "integrate((%s)*(%s),%s,%s,%s)"%(i1,i2, uu, a1, tt-b1) ## if a1+b1 < tt < a2+b1 cmd2 = "integrate((%s)*(%s),%s,%s,%s)"%(i1,i2, uu, tt-b2, tt-b1) ## if a1+b2 < tt < a2+b1 cmd3 = "integrate((%s)*(%s),%s,%s,%s)"%(i1,i2, uu, tt-b2, a2) ## if a1+b2 < tt < a2+b2 cmd4 = "integrate((%s)*(%s),%s,%s,%s)"%(i1,i2, uu, a1, a2) ## if a2+b1 < tt < a1+b2 <snip> if a1-b1<a2-b2: if a2+b1!=a1+b2: h = Piecewise([[(a1+b1,a1+b2),fg1],[(a1+b2,a2+b1),fg4],[(a2+b1,a2+b2),fg3]])to have f2 instead of f4. There is a parallel part as well in the other branch of the if, where fg2 should be fg4, it appears.
This should be fixed quickly, but should also be checked to make sure it really does do the right thing! The code is not really commented enough to show what is going on with all these different mini-convolutions, one has to really think about it.