Re: Piecewise functions definition and usage

*To*: mathgroup at smc.vnet.net*Subject*: [mg24116] Re: [mg24098] Piecewise functions definition and usage*From*: Andrzej Kozlowski <andrzej at tuins.ac.jp>*Date*: Wed, 28 Jun 2000 02:11:39 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

You can't expect Mathematica to work if you feed it a command which vilates the rules of the Mathematica language (your second example). What you wrote is not a Mathematica program. The correct form is: f[x_] := If[Abs[x - 3] < 10, Sqrt[1 - ( (x - 3)/10)^2] , 0] However, I do not understand why you claim that Mathematica "goes nuts" in the first case, which is more or less correct. (Actually a bit weird: why do you use contradictory conditions over an overlaping range of x? Presumably you meant the first to be Abs[x-3]<10 and the second Abs[x-3]>=10. In any case, it does not metter for your second condition is ignored where it contradicts the first, e.g. when x=7.) What I get, even with your original code, is this: In[56]:= Clear[f] In[57]:= f[x_] := Sqrt[ 1 - ( (x - 3)/10)^2 ] /; Abs[x - 3] < 10 In[58]:= f[x_] := 0 /; Abs[x - 3] > 3 ; In[59]:= NIntegrate[f[x], {x, -1, 17}] NIntegrate::"ncvb": "NIntegrate failed to converge to prescribed accuracy after 7 recursive bisections in x near x = 12.9921875`." Out[59]= 11.7447 All this says is that Mathematica had trouble near the singularity. The answer it gets is correct up to the first three digits after the decimal point, as you can see from: In[60]:= NIntegrate[f[x], {x, -1, 13, 17}] Out[60]= 11.7446 This latter form of NIntegrate tells Mathematica about the singularity at 13 and avoids the trouble. In any case it is not at all surprising that a computer program finds it difficult to cope with singularites, so do people. If you call this "going nuts" I wonder what your notion of sanity is :). -- Andrzej Kozlowski Toyama International University, JAPAN For Mathematica related links and resources try: <http://www.sstreams.com/Mathematica/> on 6/27/00 1:51 PM, Viorel Ontalus at vio2 at mail.lehigh.edu wrote: > It seems I got into an area where Mathematica has some problems, and I > hope somebody can give me a hint on how to go around these problems. > > 1. I am trying to define a piecewise function and do some computations > with it. When I integrate mathematica does not behave. Here is an simple > example you can run and see what I am talking about > > Clear[f,x} > f[x_] := Sqrt[ 1- ( (x-3)/10)^2 ] /; > Abs[x-3]<10 > f[x_] := 0 /; > Abs[x-3]>3 ; (*this is a very simple piecewise function but one > must be sure the Sqrt is from a positive # ) > > NIntegrate[f[x],{x,-1,17}] (* Here Mathematica goes nuts !!!*) > > Of course it gives an answer but if your program is more complex, then > you never get an answer !! > ( I tried to make the upper limit a variable etc !!) > Does anybody know how to avoid the error , or non convergence messages I > get !! > > > > 2. For fun I tried the only reference from the book on piecewise > functions: > If[Abs[x-3]<10, f[x_]:=Sqrt[1- ( (x-3)/10)^2 ] , f[x_]:=0 ] > > This definition does not work !! > > > > > > > > >