MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

DSolve, Generalised Functions and Boundary Conditions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg28067] DSolve, Generalised Functions and Boundary Conditions
  • From: Hugh Goyder <goyder at rmcs.cranfield.ac.uk>
  • Date: Fri, 30 Mar 2001 04:12:20 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Dear Mathgroup,

If you have a differential equation that is a more complicated version of

y'[x] == F1 DiracDelta[x-a1] +F2 DiracDelta[x-a2]+F3 DiracDelta'[x-a3] 

(two point sources and a dipole) where a1 < a2 < a3, how do you put in an
(internal) boundary condition?

I would like to put in a boundary condition like y[a2-e] ==0 where e is a
small distance (e (epsilon) is negligible compared to a2-a1 but large
compared to the width of the delta function).

I think there are two strategies.

1. Do not put in a boundary condition and then fix-up the constant provided
by DSolve to give the required solution.

2. Put in a boundary condition such as y[a2-e] ==0 so that you have a good
leaver to quickly give the solution.

Strategy 1 leads to the same problem of identifying the point just before
the Generalised Function and then there is some hard work to solve for the
constant.

Strategy 2 works well if the solution just has step functions and the use
of FunctionExpand with assumptions gives the correct solution in one step.
Thus,


In[16]:=
{sol} =DSolve[{y'[x] ==
        F1 DiracDelta[x-a1]+F2 DiracDelta[x-a2] + F3 DiracDelta[x-a3],
      y[a2-e]\[Equal]0},y[x],x]

Out[16]=
{{y[x]\[Rule]-F1 UnitStep[-a1+a2-e]-F3 UnitStep[a2-a3-e]-F2 UnitStep[-e]+
        F1 UnitStep[-a1+x]+F2 UnitStep[-a2+x]+F3 UnitStep[-a3+x]}}

In[17]:=
FunctionExpand[sol,{a1<a2<a3,e>0}]/.e\[Rule]0

Out[17]=
{y[x]\[Rule]-F1 UnitStep[-a1+a2]+F1 UnitStep[-a1+x]+F2 UnitStep[-a2+x]+
      F3 UnitStep[-a3+x]}

However, if there are delta functions in the solution we are in trouble
because Function Expand does not sort these out. For example

In[25]:=
FunctionExpand[{UnitStep[a1-e -a2],DiracDelta[a1-e-a2]},{a1<a2<a3,e>0}]

Out[25]=
{0,DiracDelta[a1-a2-e]}

Even being more specific does not help 


In[28]:=
FunctionExpand[{UnitStep[a1-e -a2],DiracDelta[a1-e-a2]},{a1<a2<a3,e>0,
    a1-e-a2 \[NotEqual] 0}]

Out[28]=
{0,DiracDelta[a1-a2-e]}

{Correct, Should be zero as argument is clearly not zero}

Is there a way forward in Unprotecting DiracDelta and defining rules it
must obey if it sees the special parameter e? I have tried this but have
not managed to make enough rules so that it will work in general cases.
Furthermore, will the rules I make get exercised with FunctionExpand?


Thanks in advance for any comments for implementing boundary conditions in
these circumstances.



Dr Hugh Goyder
Cranfield University at the Royal Military College of Science
Shrivenham

Fax: ++44 (0) 1793 783192
Tel: ++44 (0) 1793 785122

hugh.goyder at rmcs.cranfield.ac.uk


  • Prev by Date: Re: Unconventional Max[] behavior
  • Next by Date: Re: Saving kernel state ?
  • Previous by thread: Functional Analysis Toolkit
  • Next by thread: norm symbol