Thanks to Tom's Google Summer of Code project, SymPy can indeed solve
this problem. The code is only in the git master, but will be included
in SymPy 0.7.2.

In [3]: dsolve(Derivative(y(x),x) - Heaviside(-5 + x), y(x))
Out[3]:
              ⎧                               │x│
y(x) = C₁ + 5⋅⎪           0               for ─── < 1
              ⎪                                5
              ⎪
              ⎪         x                      │1│
              ⎨         ─ - 1            for 5⋅│─│ < 1
              ⎪         5                      │x│
              ⎪
              ⎪╭─╮0, 2 ⎛2, 1       │ x⎞
              ⎪│╶┐     ⎜           │ ─⎟    otherwise
              ⎩╰─╯2, 2 ⎝      1, 0 │ 5⎠

The G function is a result of the integration algorithm.  If you are
only dealing with real variables, you can easily see from substitution
that it comes out to 0 for x = +/-5.  Unfortunately, we haven't yet
implemented very good simplification of the conditions, so these will
have to be done by hand (or using some other part of Sage).

Regarding initial conditions, they aren't implemented directly in
dsolve() yet, (see
http://code.google.com/p/sympy/issues/detail?id=1621).  They should be
easy to implement, though, now that we can represent derivatives at
points. Feel free to give it a shot :) And anyway, it's not too hard
to do it by hand.

By the way, I applied for membership of the Sage group, but it
probably won't go through as I haven't been accepted yet.  If not, can
someone forward it?

Aaron Meurer

On Mon, Jan 9, 2012 at 11:55 AM, David Joyner <wdjoy...@gmail.com> wrote:
> AFAIK, Sage cannot at this time take the inverse Laplace transform of
> something of the form e^{-5s}/s.
>
> I think Sympy (included with Sage) can
> http://docs.sympy.org/dev/modules/integrals/integrals.html#integral-transforms
> but I don't think it's been integrated together with initial conditions:
>
>>>> y = Function('y')
>>>> dsolve(Derivative(y(x),x) - Heaviside(-5 + x), y(x))
>              /
>             |
> y(x) = C1 +  | Heaviside(x - 5) dx
>             |
>            /
>
> (Cross-posted to sympy's support list.)
>
>
> On Mon, Jan 9, 2012 at 12:39 PM, Renan Birck Pinheiro
> <renan.ee.u...@gmail.com> wrote:
>> Hi,
>>
>> I'm trying to solve a differential equation with unit step, e.g. the
>> equation y'(x) = U(x-5) - where U is the unit step, and the inicial
>> condition y(0) is 0.
>>
>> The result is 0 for 0<x<5 and x-5 for x>5 (it's a simple integral of the
>> unit step function). WolframAlpha gives the correct result [1], however sage
>> fails:
>>
>> sage: x=var('x')
>> sage: y=function('y',x)
>>
>> sage: desolve(diff(y,x) - unit_step(x-5),y,ics=[0,1])
>> ---------------------------------------------------------------------------
>> TypeError                                 Traceback (most recent call last)
>>
>> /home/renan/<ipython console> in <module>()
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/calculus/desolvers.pyc in
>> desolve(de, dvar, ics, ivar, show_method, contrib_ode)
>>     488                 raise NotImplementedError, "Maxima was unable to
>> solve this BVP. Remove the initial condition to get the general
>> solution."
>>     489
>> --> 490     soln=soln.sage()
>>     491     if is_SymbolicEquation(soln) and soln.lhs() == dvar:
>>     492         # Remark: Here we do not check that the right hand side does
>> not depend on dvar.
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/interfaces/interface.pyc in
>> sage(self)
>>     866             Rational Field
>>     867         """
>> --> 868         return self._sage_()
>>     869
>>     870     def __repr__(self):
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/interfaces/maxima_abstract.pyc
>> in _sage_(self)
>>    1222         import sage.calculus.calculus as calculus
>>    1223         return
>> calculus.symbolic_expression_from_maxima_string(self.name(),
>> -> 1224                 maxima=self.parent())
>>    1225
>>    1226     def _symbolic_(self, R):
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/calculus/calculus.pyc in
>> symbolic_expression_from_maxima_string(x, equals_sub, maxima)
>>    1699         return symbolic_expression_from_string(s, syms,
>> accept_sequence=True)
>>    1700     except SyntaxError:
>> -> 1701         raise TypeError, "unable to make sense of Maxima expression
>> '%s' in Sage"%s
>>    1702     finally:
>>    1703         is_simplified = False
>>
>> TypeError: unable to make sense of Maxima expression
>> 'y(x)=-at(integrate(unit_step(x-5),x),[x=0,y(x)=1])+integrate(unit_step(x-5),x)+1'
>> in Sage
>>
>> desolve_laplace is no better:
>>
>> sage: desolve_laplace(diff(y,x) - unit_step(x-5),y,ics=[0,1])
>> ---------------------------------------------------------------------------
>> TypeError                                 Traceback (most recent call last)
>>
>> /home/renan/<ipython console> in <module>()
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/calculus/desolvers.pyc in
>> desolve_laplace(de, dvar, ics, ivar)
>>     657     if str(soln).strip() == 'false':
>>     658         raise NotImplementedError, "Maxima was unable to solve this
>> ODE."
>> --> 659     soln=soln.sage()
>>     660     if ics!=None:
>>     661         d = len(ics)
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/interfaces/interface.pyc in
>> sage(self)
>>     866             Rational Field
>>     867         """
>> --> 868         return self._sage_()
>>     869
>>     870     def __repr__(self):
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/interfaces/maxima_abstract.pyc
>> in _sage_(self)
>>    1222         import sage.calculus.calculus as calculus
>>    1223         return
>> calculus.symbolic_expression_from_maxima_string(self.name(),
>> -> 1224                 maxima=self.parent())
>>    1225
>>    1226     def _symbolic_(self, R):
>>
>> /opt/sage/local/lib/python2.6/site-packages/sage/calculus/calculus.pyc in
>> symbolic_expression_from_maxima_string(x, equals_sub, maxima)
>>    1699         return symbolic_expression_from_string(s, syms,
>> accept_sequence=True)
>>    1700     except SyntaxError:
>> -> 1701         raise TypeError, "unable to make sense of Maxima expression
>> '%s' in Sage"%s
>>    1702     finally:
>>    1703         is_simplified = False
>>
>> TypeError: unable to make sense of Maxima expression
>> 'ilt(e^-(5*?g2652)*(y(0)*?g2652*e^(5*?g2652)+1)/?g2652^2,?g2652,x)' in Sage
>>
>> Any suggestions? I seached but couldn't find an example of ODEs with
>> unit_step being solved in Sage. I'm using Sage 4.7.2.
>>
>> Thanks!
>>
>> [1]
>> http://www.wolframalpha.com/input/?i=y%27%28x%29+%3D+unit+step%28x-5%29%2C+y%280%29+%3D+0
>> --
>> Renan Birck Pinheiro, Grupo de Microeletrônica, Engenharia Elétrica, UFSM -
>> Santa Maria, Brazil
>>
>> http://renanbirck.blogspot.com / skype: renan.ee.ufsm / (55) 91433210
>>
>>
>>
>> --
>> 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
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to sy...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sympy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.
>

-- 
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