MathGroup Archive 2009

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

Search the Archive

Re: Piecewise vs. /; ?

  • To: mathgroup at
  • Subject: [mg104082] Re: Piecewise vs. /; ?
  • From: Szabolcs HorvÃt <szhorvat at>
  • Date: Sun, 18 Oct 2009 05:24:18 -0400 (EDT)
  • References: <hashpc$qu8$> <hav19a$4gr$>

I think I messed up the text of my previous message, so it might be a
bit difficult to follow.
But this got over-explained anyway.

In short, theoretically Integrate[] could be made to work with your
first two f[x] examples.  However, the properties of the Mathematica
language are such that it would be very difficult and impractical to
write an Integrate[] that could do this.  Why is this?  Imagine that
we are preparing to write a program that does *symbolic* integration.
You have to choose in what format to provide the input to the program.
 The two choices are: the input will be a Fortran subroutine that can
compute the value of the integrand.  Or the input will be specified in
a declarative language designed specifically to represent integrands
(and nothing else).  Which one would you choose?

2009/10/17 Dan Dubin <ddubin at>:
> Hi -- I want to thank everyone for their thoughtful replies. Even after
> using Mathematica for many years I still have to ask really stupid questions
> sometimes, and I appreciate your patience.
>         I appreciate that the use of a conditional statement might be more
> elegant in a given context than the application of a piecewise function. One
> remaining issue for me is that I don't understand the difference between
> "pure mathematics" and what you refer to as "programming constructs". I see
> any program as a function that takes one set of (binary) numbers and
> transforms it into another set.  I think of programming control statements
> such as which, if, etc, or pattern matching functions, as piecewise
> functions of their arguments.  Am I wrong in thinking this way?
>  So, for example, when someone writes
> f[x_] := 1 /; x >= 0
> f[x_] := 0 /; x < 0
> or
> f[x_] := Which[x>=1,1,True,0]
> or
> f[x_] :=
>  Piecewise[{{1, x >= 0}, {0,
>    True}}]
> or  simply
> f[x_] = UnitStep[x]
> I don't understand why Integrate[f[x],{x,-1,1}] should not yield the same
> result in each case.  This is an example of what I was trying to get at in
> my previous message . Each function provides exactly the same result for
> given real inputs. The integrand in Integrate need only be evaluated for
> real inputs (although what Integrate actually does is unknown to me).
> Therefore, I would think it would be beneficial if Mathematica would yield
> the same results in this case.
>                     -- Dan
>> Hi Dan,
>> The way I understand the difference between /; and Piecewise is the
>> following (I am in the camp of David and Szabolcs):  Condition is a
>> programming construct, not necessarily used only in a mathematical
>> setting.
>> For internals of Mathematica (such as pattern-matcher and evaluator),
>> Condition is more fundamental - if you wish, it is a component of the
>> pattern-matcher. It is a part of the programming language, which can be
>> used
>> for lots of other purposes outside its applications to pure mathematical
>> problems.
>> Pattern-matching is very powerful, but in its pure form completely
>> syntax-based.
>> Condition (along with PatternTest) allows pattern-matcher to call
>> evaluator
>> on parts of the expression where the fact of the match can not be
>> determined
>> by pure syntax (head, structure checks), and this greatly expands the
>> class
>> of useful patterns that can be constructed. I think that anyone interested
>> in software development aspects of Mathematica programming language (for
>> example, to exploit new/interesting programming techniques) will probably
>> be
>> hard pressed to see how many of the things possible due to existence of
>> Condition would find simple substitutes should you remove it from the
>> language. This is amplified by the fact that a lot of existing Mathematica
>> functionality has been  developed in Mathematica language itself.
>> It seems to me that Piecewise was introduced for exactly the purpose of
>> better integration of piecewise functions with the other mathematical
>> functionality. Since it is less general than Condition (in the above
>> sense),
>> and furthermore completely separated from the evaluation process
>> (pattern-matching), it must be easier to formulate rules or identities
>> involving Piecewise and be sure that they will always hold in (and only
>> in)
>> situations when they should (this is my guess).
>> As far as Mathematica novices are concerned, I think that a clean
>> separation
>> of
>> programming and mathematical layers  of Mathematica language is one of the
>> most inportant things to be achieved by an introductory presentation of
>> Mathematica, to save them (novices) from the confusion you mentioned. This
>> is only my opinion anyway.
>> Regards,
>> Leonid
>> On Thu, Oct 15, 2009 at 3:19 PM, Dan Dubin <ddubin at> wrote:
>>>  Folks --
>>>  I would respectfully disagree with the idea that /; is more general
>>>  than Piecewise. The example given, a function that returns a
>>>  different value in the morning than the evening, is simply a
>>  > time-dependent function that could be constructed using Piecewise, as
>>>  in
>>>  f[x_,h_] =  Piecewise[{{x, h < 12}, {-x, h >= 12}}];
>>>  and called via
>>>  f[x,DateList[[4]]]
>>>  In fact, it seems to me that any difference in the way that
>>>  Mathematica interprets Piecewise and conditionals should be removed
>>>  from later editions of Mathematica, since as far as I can see the
>>>  difference between them is merely a Mathematica-specific  matter of
>>>  the mechanics of how the expressions are evaluated with little (or
>>>  no?) utility, that causes considerable confusion among new users.  I
>>>  don't see any benefit in this distinction, but feel free to convince
>>>  me otherwise!
>>>  >Szabolcs Horv=E1t wrote:
>>>  >>  In short, /; is a programming construct that affects evaluation.
>>>  >>  Piecewise[] is used to represent a mathematical concept: piecewise
>>>  >>  functions.
>>>  >>
>>>  >>  If you want to do mathematical operations like integration, then use
>>>  >>  Piecewise[].  Condition[] (/;) is a lot more general than
>>> Piecewise[],
>>>  >>  for example one could write a "function" that returns a different
>>> value
>>>  >>  in the evening than in the morning, which is obviously not a
>>> function
>>>  in
>>>  >>  the mathematical sense, and thus can't be integrated.
>>>  >
>>>  >Got it!  Thanks to you and David for responding.
>>>  >
>>>  >--
>>>  >Erik Max Francis && max at &&
>>>  >   San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype
>>> erikmaxfrancis
>>>  >    God is love, but get it in writing.
>>>  >     -- Gypsy Rose Lee
>>>  --
> --
> Professor Dan Dubin
> Dept. of Physics, UCSD
> La Jolla CA
> 92093-0319
> ddubin at
> (858)-534-4174
> fax: (858)-534-0173

  • Prev by Date: Re: Piecewise vs. /; ?
  • Next by Date: Re: GraphicsGrid crashes front end?
  • Previous by thread: Re: Piecewise vs. /; ?
  • Next by thread: Why init.m is not being loaded from Autload folder? [Mathematica 7]