MathGroup Archive 2006

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

Search the Archive

Re: DiscreteDelta and RSolve Bug?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg68071] Re: [mg67981] DiscreteDelta and RSolve Bug?
  • From: Devendra Kapadia <dkapadia at wolfram.com>
  • Date: Fri, 21 Jul 2006 17:36:13 -0400 (EDT)
  • References: <200607201004.GAA09700@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Thu, 20 Jul 2006, Mariusz Jankowski wrote:

> Hello, I recently came across the following situation while solving a
> difference equation, specifically the unit impulse response of a simple
> system. For this example I have reduced the system to a first-order as it
> illustrates the main problem.
>
> The following evaluation seems to hang
>
> RSolve[{y[n] - 1/2 y[n - 1] == DiscreteDelta[n], y[-1] == 0}, y[n], n]
>
>
>
> Is there an explanation? Note that the following alternatives work as
> expected:
>
> RSolve[{y[n] - 1/2 y[n - 1] == 0, y[0] == 1}, y[n], n]
>
> RSolve[{y[n] - 1/2 y[n - 1] == KroneckerDelta[n], y[-1] == 0}, y[n], n]
>
>
>
>
>
> Thanks, Mariusz

Hello Mariusz,

Thank you for reporting this problem with RSolve and DiscreteDelta.

Since the difference equation considered by you is inhomogeneous, we
perform a symbolic summation to find the general solution. The lower
limit of this symbolic sum needs to be chosen carefully in order to
avoid a trivial solution. RSolve hangs while trying to find this lower 
limit when the right hand side has DiscreteDelta in it.

As noted by you, the equivalent formulation with KroneckerDelta works 
fine, so this provides a partial workaround for the problem:

=======================

In[1]:= $Version

Out[1]= 5.2 for Linux (June 27, 2005)

In[2]:= InputForm[Timing[RSolve[{y[n] - 1/2 y[n - 1] == KroneckerDelta[n],
            y[-1] == 0}, y[n], n]]]

Out[2]//InputForm= {0.18*Second, {{y[n] -> UnitStep[n]/2^n}}}

In[3]:= InputForm[Table[y[n]/.%[[2,1]], {n, -1, 6}]]

Out[3]//InputForm= {0, 1, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64}

In[4]:= y1[-1] = 0;

In[5]:= y1[n_] := 1/2 y1[n - 1] + DiscreteDelta[n]

In[6]:= InputForm[Table[y1[n], {n, -1, 6}]]

Out[6]//InputForm= {0, 1, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64}

====================================

I apologize for the inconvenience caused by this problem.

Sincerely,

Devendra Kapadia.
Wolfram Research, Inc.


  • Prev by Date: Re: Discrete Event handling in Mathematica
  • Next by Date: Re: Applying a list of 2D paramters to a mathematica function
  • Previous by thread: DiscreteDelta and RSolve Bug?
  • Next by thread: Reasonable integration speed? (24 hrs and counting)