MathGroup Archive 2002

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

Search the Archive

Re: How to ...?

  • To: mathgroup at
  • Subject: [mg36334] Re: [mg36309] How to ...?
  • From: BobHanlon at
  • Date: Mon, 2 Sep 2002 04:08:42 -0400 (EDT)
  • Sender: owner-wri-mathgroup at

In a message dated 8/31/02 1:58:36 AM, berlusconi_pagliusi at

> I'd like to use Mathematica 4.0 to write a function having different
> expressions in different domain's intervals.
> Let's say:
> F[x_]=  x^2 if 0<x<6
>        x+1 if x>=6
> I know It's a stupid syntax problem, but I really do not know how/where to
> search the solution on the Mathematica Book

Just for grins here are several methods:

f1[x_/;x<=0] := 0 ;

f1[x_/;0<x<6] := x^2 ;

f1[x_/;x>=6] := x+1;

f2[x_] :=


f3[x_] := Which[

       x<=0, 0,

       0<x<6, x^2,

       x>=6, x+1];

f4[x_] := If[0<x<6,x^2,

       If[x>=6, x+1,0]];

f5[x_] := Switch[x,

     _?(#<=0&), 0,

     _?(0<#<6&), x^2,

     _?(#>=6&), x+1 ]

f6[x_?NumericQ] :=


             {x<=0,0<x<6,x>=6}, True][[1,1]]]];


(* needed for definition of Boole *)

f7a[x_?NumericQ] := Evaluate[

       (Boole /@ {0<x<6,x>=6}).



f7b[x_?NumericQ] := Evaluate[

       {0,x^2,x+1}[[1+Tr[Boole /@ {x>0, x>=6}]]]];

f8[x_?NumericQ] := Cases[

         {{x<=0, 0}, {0<x<6, x^2}, {x>=6, x+1}},

         {True, z_} :>z][[1]];

f9[x_?NumericQ] := DeleteCases[

         {{x<=0, 0}, {0<x<6, x^2}, {x>=6, x+1}},

         {False, z_}][[1,2]];

f10[x_?NumericQ] := Select[

         {{x<=0, 0}, {0<x<6, x^2}, {x>=6, x+1}},


f11[x_?NumericQ] := Last[Sort[

           {{x<=0, 0}, {0<x<6, x^2}, {x>=6, x+1}}]][[2]];

f12[x_?NumericQ] := Module[{n=1},

       While[{x<6,x<0, False}[[n]], n++];


Generating some test points:

ts = {Random[Real,{-5,0}],0, Random[Real,{0,6}],6,Random[Real,{6,15}]};

Checking the different representations

Equal[(# /@ pts)& /@ {f1,f2,f3,f4,f5,f6,f7a,f7b,f8,f9,f10,f11,f12}]


To pick a favorite, look at how the different definitions behave.

Of the definitions that evaluate with symbolic input, only f2 and f4
simplify with assumptions
.   For example,

FullSimplify[#[x]& /@ {f2,f4}, 1<x<3]

f2 through f5 respond immediately to differentiation

#'[x]& /@ {f2,f3,f4,f5} // Simplify //ColumnForm

Only f2 responds immediately to integration


Consequently, f2 (UnitStep) appears to be the most versatile.

Bob Hanlon
Chantilly, VA   USA

  • Prev by Date: Re: Mathematica 4.2: Problem with online help.
  • Next by Date: Re: L2 inner product. Integrate and Conjugate?
  • Previous by thread: Re: How to ...?
  • Next by thread: Re: Re: How to ...?