On Mon, Feb 21, 2011 at 6:26 PM, Ronald L. Rivest <rivest....@gmail.com> wrote: > I am trying to define piecewise linear functions, and then integrate them. > But I get an error > AttributeError: 'sage.rings.integer.Integer' object has no attribute > 'function' > when one of the pieces is a constant function. Strangely, the same code
The constant 0 is the only one I have problem with: sage: f1(x) = 1 sage: f = Piecewise([[(0,1),f1]]) sage: f.integral(x,0,1) 1 Now, replace 1 by 0 and you get an error: sage: f1(x) = 0 sage: f = Piecewise([[(0,1),f1]]) sage: f.integral(x,0,1) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <snip> I didn't find a work-around and don't understand the reason for this weird bug. > works when > the function is non-constant. > Here is a printout of a session exhibiting both the error (for a constant > piece), and correct > behavior (for a non-constant piece). > ---------------------------------------------------------------------------------------------------------------------------------- > 06:11:51 notes $ /Applications/sage/sage > Detected SAGE64 flag > Building Sage on OS X in 64-bit mode > ---------------------------------------------------------------------- > | Sage Version 4.6.1, Release Date: 2011-01-11 | > | Type notebook() for the GUI, and license() for information. | > ---------------------------------------------------------------------- > sage: f0(x) = 0 > sage: type(f0) > <type 'sage.symbolic.expression.Expression'> > sage: f = Piecewise([[(0,1),f0]]) > sage: f > Piecewise defined function with 1 parts, [[(0, 1), x |--> 0]] > sage: f.integral(x,0,1) > --------------------------------------------------------------------------- > AttributeError Traceback (most recent call last) > /Users/rivest/notes/<ipython console> in <module>() > /Applications/sage/local/lib/python2.6/site-packages/sage/functions/piecewise.pyc > in integral(self, x, a, b, definite) > 789 """ > 790 if a != None and b != None: > --> 791 F = self.integral(x) > 792 return F(b) - F(a) > 793 > /Applications/sage/local/lib/python2.6/site-packages/sage/functions/piecewise.pyc > in integral(self, x, a, b, definite) > 831 if definite or end != infinity: > 832 area += fun.integral(x, start, end) > --> 833 new_pieces.append([(start, end), > fun_integrated.function(x)]) > 834 > 835 if definite: > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/element.so > in sage.structure.element.Element.__getattr__ > (sage/structure/element.c:2666)() > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/parent.so > in sage.structure.parent.getattr_from_other_class > (sage/structure/parent.c:2840)() > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/parent.so > in sage.structure.parent.raise_attribute_error > (sage/structure/parent.c:2611)() > AttributeError: 'sage.rings.integer.Integer' object has no attribute > 'function' > sage: f.integral() > --------------------------------------------------------------------------- > AttributeError Traceback (most recent call last) > /Users/rivest/notes/<ipython console> in <module>() > /Applications/sage/local/lib/python2.6/site-packages/sage/functions/piecewise.pyc > in integral(self, x, a, b, definite) > 831 if definite or end != infinity: > 832 area += fun.integral(x, start, end) > --> 833 new_pieces.append([(start, end), > fun_integrated.function(x)]) > 834 > 835 if definite: > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/element.so > in sage.structure.element.Element.__getattr__ > (sage/structure/element.c:2666)() > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/parent.so > in sage.structure.parent.getattr_from_other_class > (sage/structure/parent.c:2840)() > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/parent.so > in sage.structure.parent.raise_attribute_error > (sage/structure/parent.c:2611)() > AttributeError: 'sage.rings.integer.Integer' object has no attribute > 'function' > Sage: fx(x) = x > sage: type(fx) > <type 'sage.symbolic.expression.Expression'> > sage: g = Piecewise([[(0,1),fx]]) > sage: g > Piecewise defined function with 1 parts, [[(0, 1), x |--> x]] > sage: g.integral() > Piecewise defined function with 1 parts, [[(0, 1), x |--> 1/2*x^2]] > sage: > This looks like a bug. > Is there a work-around?? > Cheers, > Ron Rivest > > -- > To post to this group, send email to sage-support@googlegroups.com > To unsubscribe from this group, send email to > sage-support+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/sage-support > URL: http://www.sagemath.org > -- To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URL: http://www.sagemath.org