[Date Index]
[Thread Index]
[Author Index]
Re: Piecewise vs. /; ?
*To*: mathgroup at smc.vnet.net
*Subject*: [mg104082] Re: Piecewise vs. /; ?
*From*: Szabolcs HorvÃt <szhorvat at gmail.com>
*Date*: Sun, 18 Oct 2009 05:28:34 -0400 (EDT)
*References*: <hashpc$qu8$1@smc.vnet.net> <hav19a$4gr$1@smc.vnet.net>
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 ucsd.edu>:
> 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 ucsd.edu> 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 alcyone.com && http://www.alcyone.com/max/
>>> > 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 ucsd.edu
> (858)-534-4174
> fax: (858)-534-0173
>
Prev by Date:
**Re: Piecewise vs. /; ?**
Next by Date:
**Re: Piecewise vs. /; ?**
Previous by thread:
**Re: Piecewise vs. /; ?**
Next by thread:
**Re: Piecewise vs. /; ?**
| |