I reckon this is a bug in solve.  Even after i substitute a variable
for the derivative of h, Sage can't solve the equation (below).

Alex

----------------------------------------------------------------------
| Sage Version 4.1.2, Release Date: 2009-10-13                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage: var('x,y,t')
(x, y, t)
sage: H= function('H',x,y)
sage: h= function('h',x)
sage: e= diff(H.subs({y:h}),x); e
D[0](h)(x)*D[1](H)(x, h(x)) + D[0](H)(x, h(x))
sage: ee= e.subs({diff(h,x):t}); ee
t*D[1](H)(x, h(x)) + D[0](H)(x, h(x))
sage: solve(ee==0,t)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call
last)

/Users/arai021/<ipython console> in <module>()

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
relation.pyc in solve(f, *args, **kwds)
    489     """
    490     try:
--> 491         return f.solve(*args,**kwds)
    492     except AttributeError:
    493         from sage.symbolic.ring import is_SymbolicVariable

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression.so in sage.symbolic.expression.Expression.solve (sage/
symbolic/expression.cpp:22187)()

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression.so in sage.symbolic.expression.Expression._maxima_ (sage/
symbolic/expression.cpp:3480)()

/Applications/sage/local/lib/python2.6/site-packages/sage/structure/
sage_object.so in sage.structure.sage_object.SageObject._interface_
(sage/structure/sage_object.c:3409)()

/Applications/sage/local/lib/python2.6/site-packages/sage/structure/
sage_object.so in sage.structure.sage_object.SageObject._maxima_init_
(sage/structure/sage_object.c:5090)()

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression.so in sage.symbolic.expression.Expression._interface_init_
(sage/symbolic/expression.cpp:3609)()

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in __call__(self, ex)
    214             return self.arithmetic(ex, operator)
    215         elif operator in relation_operators:
--> 216             return self.relation(ex, operator)
    217         elif isinstance(operator, FDerivativeOperator):
    218             return self.derivative(ex, operator)

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in relation(self, ex, operator)
    449             'x < 3'
    450         """
--> 451         return "%s %s %s"%(self(ex.lhs()),
self.relation_symbols[operator],
    452                            self(ex.rhs()))
    453

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in __call__(self, ex)
    212                 div = self.get_fake_div(ex)
    213                 return self.arithmetic(div, div.operator())
--> 214             return self.arithmetic(ex, operator)
    215         elif operator in relation_operators:
    216             return self.relation(ex, operator)

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in arithmetic(self, ex, operator)
    495             '(x)+(2)'
    496         """
--> 497         args = ["(%s)"%self(op) for op in ex.operands()]
    498         return arithmetic_operators[operator].join(args)
    499

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in __call__(self, ex)
    212                 div = self.get_fake_div(ex)
    213                 return self.arithmetic(div, div.operator())
--> 214             return self.arithmetic(ex, operator)
    215         elif operator in relation_operators:
    216             return self.relation(ex, operator)

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in arithmetic(self, ex, operator)
    495             '(x)+(2)'
    496         """
--> 497         args = ["(%s)"%self(op) for op in ex.operands()]
    498         return arithmetic_operators[operator].join(args)
    499

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in __call__(self, ex)
    216             return self.relation(ex, operator)
    217         elif isinstance(operator, FDerivativeOperator):
--> 218             return self.derivative(ex, operator)
    219         else:
    220             return self.composition(ex, operator)

/Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
expression_conversions.pyc in derivative(self, ex, operator)
    479         f = operator.function()
    480         params = operator.parameter_set()
--> 481         params = ["%s, %s"%(args[i], params.count(i)) for i in
set(params)]
    482
    483         return "diff('%s(%s), %s)"%(f.name(),

IndexError: tuple index out of range




On Oct 21, 12:37 am, David Joyner <wdjoy...@gmail.com> wrote:
> You might want to search the sage devel archives for an email from John Perry
> called "implicit_diff".
>
> On Mon, Oct 19, 2009 at 10:35 PM, Alex Raichev <tortoise.s...@gmail.com> 
> wrote:
>
> > Hi all:
>
> > I'm trying to differentiate implicitly and solve for the derivative
> > but get an error.  Does anyone know what's wrong?
>
> > Alex
>
> > ----------------------------------------------------------------------
> > | Sage Version 4.1.2, Release Date: 2009-10-13                       |
> > | Type notebook() for the GUI, and license() for information.        |
> > ----------------------------------------------------------------------
>
> > sage: var('x,y')
> > (x, y)
> > sage: H= function('H',x,y)
> > sage: h= function('h',x)
> > sage: e= diff(H.subs(y=h),x); e
> > D[0](h)(x)*D[1](H)(x, h(x)) + D[0](H)(x, h(x))
> > sage: solve(e==0,diff(h,x))
> > ---------------------------------------------------------------------------
> > IndexError                                Traceback (most recent call
> > last)
>
> > /Users/arai021/<ipython console> in <module>()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > relation.pyc in solve(f, *args, **kwds)
> >    489     """
> >    490     try:
> > --> 491         return f.solve(*args,**kwds)
> >    492     except AttributeError:
> >    493         from sage.symbolic.ring import is_SymbolicVariable
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression.so in sage.symbolic.expression.Expression.solve (sage/
> > symbolic/expression.cpp:22187)()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression.so in sage.symbolic.expression.Expression._maxima_ (sage/
> > symbolic/expression.cpp:3480)()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/
> > sage_object.so in sage.structure.sage_object.SageObject._interface_
> > (sage/structure/sage_object.c:3409)()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/structure/
> > sage_object.so in sage.structure.sage_object.SageObject._maxima_init_
> > (sage/structure/sage_object.c:5090)()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression.so in sage.symbolic.expression.Expression._interface_init_
> > (sage/symbolic/expression.cpp:3609)()
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in __call__(self, ex)
> >    214             return self.arithmetic(ex, operator)
> >    215         elif operator in relation_operators:
> > --> 216             return self.relation(ex, operator)
> >    217         elif isinstance(operator, FDerivativeOperator):
> >    218             return self.derivative(ex, operator)
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in relation(self, ex, operator)
> >    449             'x < 3'
> >    450         """
> > --> 451         return "%s %s %s"%(self(ex.lhs()),
> > self.relation_symbols[operator],
> >    452                            self(ex.rhs()))
> >    453
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in __call__(self, ex)
> >    212                 div = self.get_fake_div(ex)
> >    213                 return self.arithmetic(div, div.operator())
> > --> 214             return self.arithmetic(ex, operator)
> >    215         elif operator in relation_operators:
> >    216             return self.relation(ex, operator)
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in arithmetic(self, ex, operator)
> >    495             '(x)+(2)'
> >    496         """
> > --> 497         args = ["(%s)"%self(op) for op in ex.operands()]
> >    498         return arithmetic_operators[operator].join(args)
> >    499
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in __call__(self, ex)
> >    212                 div = self.get_fake_div(ex)
> >    213                 return self.arithmetic(div, div.operator())
> > --> 214             return self.arithmetic(ex, operator)
> >    215         elif operator in relation_operators:
> >    216             return self.relation(ex, operator)
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in arithmetic(self, ex, operator)
> >    495             '(x)+(2)'
> >    496         """
> > --> 497         args = ["(%s)"%self(op) for op in ex.operands()]
> >    498         return arithmetic_operators[operator].join(args)
> >    499
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in __call__(self, ex)
> >    216             return self.relation(ex, operator)
> >    217         elif isinstance(operator, FDerivativeOperator):
> > --> 218             return self.derivative(ex, operator)
> >    219         else:
> >    220             return self.composition(ex, operator)
>
> > /Applications/sage/local/lib/python2.6/site-packages/sage/symbolic/
> > expression_conversions.pyc in derivative(self, ex, operator)
> >    479         f = operator.function()
> >    480         params = operator.parameter_set()
> > --> 481         params = ["%s, %s"%(args[i], params.count(i)) for i in
> > set(params)]
> >    482
> >    483         return "diff('%s(%s), %s)"%(f.name(),
>
> > IndexError: tuple index out of range
>
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to