And I should note that Tom's code can also compute the Laplace
transform if you want to do it that way:

In [13]: var('s')
Out[13]: s

In [14]: inverse_laplace_transform(exp(-5*s)/s, s, t)
Out[14]: Heaviside(t - 5)

Aaron Meurer

On Mon, Jan 9, 2012 at 1:36 PM, Aaron Meurer <asmeu...@gmail.com> wrote:
> 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