       Re: How to ...?

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

```In a message dated 8/31/02 1:58:36 AM, berlusconi_pagliusi at fis.unical.it
writes:

> 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_] :=

x^2*UnitStep[x]+(x+1-x^2)*UnitStep[x-6];

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] :=

{0,x^2,x+1}[[Position[

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

Needs["Calculus`Integration`"];

(* needed for definition of Boole *)

f7a[x_?NumericQ] := Evaluate[

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

{x^2,x+1}];

Off[Part::pspec];

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][];

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}},

First[#]&][[1,2]];

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

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

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

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

{x+1,x^2,0}[[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}]

True

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

Integrate[f2[x],x]//Simplify

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 ...?