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