MathGroup Archive 2003

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

Search the Archive

RE: Solutions for functions containing jump discontinuities

  • To: mathgroup at smc.vnet.net
  • Subject: [mg38972] RE: [mg38960] Solutions for functions containing jump discontinuities
  • From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
  • Date: Thu, 23 Jan 2003 08:03:57 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

>-----Original Message-----
>From: newspostings at burkert.de [mailto:newspostings at burkert.de]
To: mathgroup at smc.vnet.net
>Sent: Wednesday, January 22, 2003 12:14 PM
>To: mathgroup at smc.vnet.net
>Subject: [mg38972] [mg38960] Solutions for functions containing jump
>discontinuities
>
>
>Hi folks,
>
>we are searching all solutions where the function f results null. 
>
>f[x_] := -7500 * Ceiling[(0.5 * x) / 880] + (5 * x)
>Solve[{f[x] == 0}, x]
>
>As f contains jump discontinuities, we recieved the following error:
>
>InverseFunction::"ifun": "Inverse functions are being used. 
>Values may be \
>lost for multivalued inverses."
>
>Solve::"tdep": "The equations appear to involve the variables 
>to be solved \
>for in an essentially non-algebraic way."
>
>We would be pleased if anybody could help us.
>
>Regards,
>Philipp Burkert
>Carsten Siegmund
>

Philipp, Carsten,

there seems to be no method to solve problems of this kind in general. But I
can tackle your case: Instead of looking at the zeros for your rising
sawtooth, we solve for a corresponding family of functions, and the sort out
those solutions which are not on any tooth.

We replace the Ceiling part of the definition by constants:
As Ceiling[(0.5*x)/880] are Integers we define

  xx = Range[-10, 20] * 880 / 0.5

for a certain range and make f depended on a second parameter:

  f[x_, xx_] := -7500*(0.5*xx)/880 + (5*x)


We now solve f[x, xx] for every xx, but keep only those solutions which
qualify.

  res = With[{x0 = First[x /. Solve[f[x, #] == 0, x]]}, 
        If[f[x0] == 0, {x -> x0}, Unevaluated[Sequence[]]]] & /@ xx

In[33]:= xxres = x /. res
Out[33]= {0, 1500., 3000., 4500., 6000., 7500., 9000.}

We check:

  Plot[f[x], {x, -2000, 12000}, PlotPoints -> 500, 
    Epilog -> {PointSize[0.01], Hue[0], Point[{#, f[#]}] & /@ xxres}]

Perhaps you can adapt the method to your real Problem.

--
Hartmut Wolf



  • Prev by Date: Re: Re: Integrating Abs[Sin[]^2]
  • Next by Date: Re: Zero over zero, how many numbers?
  • Previous by thread: Re: Re: Solutions for functions containing jump discontinuities
  • Next by thread: Marsaglia RNG in Mathematica