MathGroup Archive 2005

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

Search the Archive

Re: Problems with easy simplifications

  • To: mathgroup at smc.vnet.net
  • Subject: [mg54162] Re: [mg54143] Problems with easy simplifications
  • From: "David Park" <djmp at earthlink.net>
  • Date: Sat, 12 Feb 2005 01:57:14 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Antonio,

Check the Attributes of the If statement.

Attributes[If]
{HoldRest, Protected}

The second and third arguments are not evaluated. Why is this? Because
sometimes the not choosen branch might be an invalid expression that would
lead to an error message. Only the choosen branch is evaluated. In your
example Mathematica can't determine if x < a so it chooses none of the
branches and none of them are evaluated.

You could overcome this by changing your definition.

H[x_, a_, b_] := If[x < a, Evaluate[ a + b], Evaluate[a - b]]

H[x, 0, 0]
If[x < 0, 0, 0]

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/



From: Antonio González [mailto:gonferh2o at esi.us.es]
To: mathgroup at smc.vnet.net

I have found some weird behaviors of Mathematica (5.0) related to the
simplifications of easy expressions.

Take, for instance the function

   H[x_, a_, b_] = If[x < a, a + b, a - b]

If I try now to evaluate

   H[x,0,0]

the result

  If[x < 0, 0 + 0, 0 - 0]

(the values of a and b are irrelevat, a similar result is obtained, for
instance, with a=1, b= 2, or any integer, real or complex values). I
cannot force (at least in a simple way) Mathematica to make the addition
or the substraction. The action of Simplify or FullSimplify leaves the
expression unchanged while a Map of Simplify

   MapAll[Simplify, H[x, 0, 0]]

produces

   If[x < 0,
     Simplify[Simplify[0] + Simplify[0]], Simplify[Simplify[
       0] + Simplify[Simplify[-1] Simplify[0]]]]

Something even worse happens if a use values already defined. For instance

   c = 0; d = 0; H[x_] = If[x < c, c + d, c - d]

produces

  If[x < 0, c + d, c - d]

In this case, the addition is not necessary.

   c = 0; d = 0; H[x_] = If[x < c, c, d]

leads to

  If[x < 0, c, d]

Similar problems arise using the function Which.

Any explanation or help with this malfunction would be welcome.

--

   Antonio

(Eliminar el agua para responder por e-mail - Remove water to reply by
e-mail)




  • Prev by Date: Re: Problems with easy simplifications
  • Next by Date: Re: Problems with easy simplifications
  • Previous by thread: Re: Problems with easy simplifications
  • Next by thread: Re: Inverse error function for arguments close to 1