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