Ticket #6479: trac_6479_marik.patch

File trac_6479_marik.patch, 2.5 KB (added by robert.marik, 12 years ago)
  • sage/calculus/desolvers.py

    # HG changeset patch
    # User Robert Marik <marik@mendelu.cz>
    # Date 1254847077 -7200
    # Node ID d932f19a662c01d78d51ab308eeef89368600fac
    # Parent  4b6ae67a0a0060ea0ece83505413803a260f7857
    Fixes trac #6479, desolve_laplace is kept intact
    
    diff -r 4b6ae67a0a00 -r d932f19a662c sage/calculus/desolvers.py
    a b  
    7373        sage: desolve(de, y)
    7474        k1*e^x + k2*e^(-x) - x
    7575        sage: f = desolve(de, y, [10,2,1]); f
    76         1/2*(y(10) + 12)*e^(x - 10) + 1/2*(e^10*y(10) + 8*e^10)*e^(-x) - x
     76        -x + 5*e^(-x + 10) + 7*e^(x - 10)
    7777        sage: f(x=10).expand().simplify()
    78         y(10)
     78        2
    7979        sage: diff(f,x)(x=10).expand().simplify()
    8080        1
    8181
     82        sage: de = diff(y,x,2) + y == 0
     83        sage: desolve(de, y)
     84        k1*sin(x) + k2*cos(x)
     85        sage: desolve(de, y, [0,1,pi/2,4])
     86        4*sin(x) + cos(x)
     87
     88
    8289    AUTHOR: David Joyner (1-2006)
    8390            Robert Bradshaw (10-2008)
    8491    """
     
    113120            ics = to_eqns([ivar, dvar], ics)
    114121            soln = soln.ic1(ics[0], ics[1])
    115122        if len(ics) == 3:
    116             ics = to_eqns([ivar, dvar, dvar.derivative(ivar)], ics)
    117             soln = soln.ic2(*ics)
     123            if soln.lhs() != dvar:
     124                raise NotImplementedError, "Sage is unable to use initial conditions for this equation."
     125            dvar_str=dvar.operator()._maxima_().str()
     126            ivar_str=ivar._maxima_().str()
     127            tempic=(ivar==ics[0])._maxima_().str()
     128            tempic=tempic+","+(dvar==ics[1])._maxima_().str()
     129            tempic=tempic+",diff("+dvar_str+","+ivar_str+")="+(ics[2])._maxima_().str()
     130            cmd="ic2(ode2("+de0._maxima_().str()+","+dvar_str+","+ivar_str+"),"+tempic+")"
     131            cmd=cmd.replace("'"+dvar_str+"("+ivar_str+")",dvar_str)
     132            soln=maxima(cmd).rhs()
    118133        if len(ics) == 4:
    119             ics = to_eqns([ivar, dvar, ivar, dvar], ics)
    120             soln = soln.bc(*ics)
     134            dvar_str=dvar.operator()._maxima_().str()
     135            ivar_str=ivar._maxima_().str()
     136            cmd="bc2(ode2("+de0._maxima_().str()+","+dvar_str+","+ivar_str+"),"+(ivar==ics[0])._maxima_().str()+","+dvar_str+"="+(ics[1])._maxima_().str()+","+(ivar==ics[2])._maxima_().str()+","+dvar_str+"="+(ics[3])._maxima_().str()+")"
     137            cmd=cmd.replace("'"+dvar_str+"("+ivar_str+")",dvar_str)
     138            soln=maxima(cmd).rhs()
    121139    if soln.lhs() == dvar:
    122140        soln = soln.rhs()
    123141    return soln.sage()