Opened 8 years ago

Closed 8 years ago

Last modified 2 years ago

#9835 closed defect (fixed)

Make desolve more informative when solving BVP

Reported by: robert.marik Owned by: mhampton
Priority: minor Milestone: sage-4.6
Component: calculus Keywords:
Cc: mhampton Merged in: sage-4.6.alpha2
Authors: Robert Mařík Reviewers: Karl-Dieter Crisman, Burcin Erocal, Marshall Hampton
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by robert.marik)

From Sage Bugreports : confusing error message

Traceback (click to the left of this block for traceback)
...
UnboundLocalError: local variable 'maxima_method' referenced before
assignment

when trying

epsilon = 1e-2; vars = var('x'); y = function('y',x);
de = epsilon*diff(y,x,2)+y*(1-y^2)==0;
soln = desolve(de,y,[0,-1,1,1]);

Explanation: Currently Sage allows to use BVP only if the result is symbolic expression. In this case the result is list of two expresions and Sage fails, as mentioned very briefly in documentation of desolve. However, we could try to improve desolve or make the error message more informative.

Attachments (2)

trac_9835.patch (12.8 KB) - added by robert.marik 8 years ago.
rebased for Sage 4.5.3., fixed typo, replaces previous patch with the same name
trac_9835.take2.patch (12.8 KB) - added by burcin 8 years ago.
minor change - apply only this patch

Download all attachments as: .zip

Change History (17)

comment:1 Changed 8 years ago by robert.marik

  • Status changed from new to needs_review

The patch

  • solves the problem
  • fixes documentation
  • decreases number of spawned Maxima sessions into one session

comment:2 Changed 8 years ago by kcrisman

  • Milestone set to sage-4.6.1

One very minor comment - no time to review now:

. Remove the initial contition t

at the very end of the patch should be "condition".

Do you think it would be worth adding another doctest to show that the sage-support request is fixed as well:

var('t alpha beta n') 
x=function('x',t) 
eq=diff(x,t)^2==alpha-beta abs(x)^n 
assume(n,'integer') 
desolve(eq,x,ivar=t,contrib_ode=True) 

Thanks for finding and fixing this!

comment:3 Changed 8 years ago by mhampton

  • Cc mhampton added

comment:4 Changed 8 years ago by robert.marik

Thanks, I will update the patch as time permits.

The equation from sage-support still fails, since Maxima fails to solve it. Anyway. Sage and Maxima now know that n is integer.

marik@um-bc107:/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux$ ./sage --maxima
;;; Loading #P"/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux/local/lib/ecl/defsys tem.fas"
;;; Loading #P"/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux/local/lib/ecl/cmp.fa s"
;;; Loading #P"/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux/local/lib/ecl/sysfun .lsp"
Maxima 5.20.1 http://maxima.sourceforge.net
using Lisp ECL 10.2.1
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) declare(n,integer);
(%o1)                                done
(%i2) eq: 'diff(x,t)^2=alpha-beta*abs(x)^n;
                          dx 2                      n
(%o2)                    (--)  = alpha - beta abs(x)
                          dt
(%i3) load('contrib_ode)$

(%i4) contrib_ode(eq,x,t);
                          dx 2                      n
(%t4)                    (--)  = alpha - beta abs(x)
                          dt

                     first order equation not linear in y'

Improper argument to ratcoeff:
0
#0: linear2(expr=x,x=0)(ode2.mac line 75)
#1: ode1_a(phi=-sqrt(alpha-beta*abs(x)^n),y=x,x=t)(ode1_lie.mac line 176)
#2: ode1_lie(phi=-sqrt(alpha-beta*abs(x)^n),y=x,x=t)(ode1_lie.mac line 54)
 -- an error. To debug this try: debugmode(true);

comment:5 Changed 8 years ago by mhampton

This doesn't seem fixed to me:

sage: epsilon = 1e-2; vars = var('x'); y = function('y',x);
sage: de = epsilon*diff(y,x,2)+y*(1-y^2)==0;
sage: soln = desolve(de,y[0,-1,1,1])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

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

TypeError: 'sage.symbolic.expression.Expression' object is unsubscriptable

comment:6 Changed 8 years ago by mhampton

  • Owner changed from burcin to mhampton

Even after fixing the sytax I still get an error:

sage: vars = var('x'); y = function('y',x);
sage: soln = desolve(diff(y,x,2) + 100*y*(1-y^2),dvar=y,ivar=x,ics=[0,-1,1,1])
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

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

/Users/mh/sagestuff/sage-4-x/local/lib/python2.6/site-packages/sage/calculus/desolvers.pyc in desolve(de, dvar, ics, ivar, show_method, contrib_ode)
    436             maxima_method=P("method")
    437         if not is_SymbolicEquation(soln.sage()):
--> 438              raise NotImplementedError, "Unable to use initial condition for this equation (%s)."%(str(maxima_method).strip())   
    439         if len(ics) == 2:
    440             tempic=(ivar==ics[0])._maxima_().str()

NotImplementedError: Unable to use initial condition for this equation (freeofx).

comment:7 Changed 8 years ago by robert.marik

Thanks for menitioning this.

Wihtout this patch we get

----------------------------------------------------------------------
| Sage Version 4.5.3, Release Date: 2010-09-04                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
The Sage install tree may have moved.
Regenerating Python.pyo and .pyc files that hardcode the install PATH
(please wait at most a few minutes)...
Do not interrupt this.
sage: vars = var('x'); y = function('y',x);
sage: soln = desolve(diff(y,x,2) + 100*y*(1-y^2),dvar=y,ivar=x,ics=[0,-1,1,1])
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)

/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux/<ipython console> in <module>()

/opt/sage-4.5.3-Debian_Lenny_64-x86_64-Linux/local/lib/python2.6/site-packages/sage/calculus/desolvers.py in desolve(de, dvar, ics, ivar, show_method, contrib_ode)
    358     if (ics is not None):
    359         if not is_SymbolicEquation(soln.sage()):
--> 360              raise NotImplementedError, "Maxima was unable to use initial condition for this equation (%s)"%(maxima_method.str())
    361         if len(ics) == 2:
    362             tempic=(ivar==ics[0])._maxima_().str()

UnboundLocalError: local variable 'maxima_method' referenced before assignment

and the user does not know, what went wrong. With this patch the user knows, that it Sage is not capable to use initial conditions for this ODE.

comment:8 Changed 8 years ago by robert.marik

  • Description modified (diff)

Changed 8 years ago by robert.marik

rebased for Sage 4.5.3., fixed typo, replaces previous patch with the same name

comment:9 Changed 8 years ago by robert.marik

solves also #9710 and #8931

Changed 8 years ago by burcin

minor change - apply only this patch

comment:10 Changed 8 years ago by burcin

  • Authors set to Robert Marik
  • Reviewers set to Karl-Dieter Crisman, Burcin Erocal, Marshall Hampton

Patch looks good and it solves a whole bunch of problems, so I'd like to give this a positive review.

I have one minor suggestion. The if clause on line 435-436 only serves the purpose of assigning a value to maxima_method to show in the error message. attachment:trac_9835.take2.patch moves these lines right before we raise the error, so that they are not executed unnecessarily.

I give a positive review to Robert's changes. Please switch this to a positive review if you agree with mine.

comment:11 Changed 8 years ago by robert.marik

  • Status changed from needs_review to positive_review

Positive review to Burcin's change. Thank you.

Release manager: apply only attachment:trac_9835.take2.patch

comment:12 Changed 8 years ago by mpatel

  • Merged in set to sage-4.6.alpha2
  • Resolution set to fixed
  • Status changed from positive_review to closed

comment:13 Changed 8 years ago by davidloeffler

  • Milestone changed from sage-4.6.1 to sage-4.6

comment:14 Changed 8 years ago by mpatel

Thanks, David!

comment:15 Changed 2 years ago by chapoton

  • Authors changed from Robert Marik to Robert Mařík
Note: See TracTickets for help on using tickets.