MathGroup Archive 2008

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

Search the Archive

Re: Defining Functions and Simplifying Solutions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg90530] Re: Defining Functions and Simplifying Solutions
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Sat, 12 Jul 2008 05:30:38 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <g56t8m$3pq$1@smc.vnet.net>

Locus wrote:

> 1. Is there a more handy way to define/use functions as compared to the following way (which works, but is complicated always typing the variable definitions):
> 
> G[\[Alpha]1_Real, \[Alpha]2_Real, e1_Real, 
>   e2_Real] = \[Alpha]1*e1 + \[Alpha]2*e2
> 
> v[G_Real] = a*G[\[Alpha]1, \[Alpha]2, e1, e2] + b

Sorry, but, first I do not understand what you mean, second I strongly 
doubt that the above definitions work the way you expect.

     G[\[Alpha]1_Real, \[Alpha]2_Real, e1_Real,
       e2_Real] = \[Alpha]1*e1 + \[Alpha]2*e2;

     v[G_Real] = a*G[\[Alpha]1, \[Alpha]2, e1, e2] + b;

Having evaluated

     v[3.]

you get

     b + a 3.[\[Alpha]1, \[Alpha]2, e1, e2]

that is v[3.] change the *head* of the function "G" into "3." which 
apparently is not going to lead you anywhere ...


> 2. After several steps, I receive the following solution
> 
> {{a -> (0. (e1 \[Beta]1 + e2 \[Beta]2 \[Lambda]))/(rA \[Tau]^2)}}
> 
> which obviously equals zero. How can I 'force' Mathematica to display only 0 as result and not such a unnessecarily complicated expression? FullSimplify does not work here.

Note that "0." denotes a *machine-size* number, thus the value is zero 
plus or minus some uncertainty on the numerical result. In other words, 
although it might be a true zero, it can also be anything between zero 
and plus or minus the granularity of hardware precision. And this 
without counting any numerical, round-off, underflow, and the likes, errors.

On the other hand, all the others quantities are symbolic and by default 
represent *exact* (i.e. *infinite* precision) values. Mathematica plays 
it safe by not automatically upgrading the precision of "0." from 
very-low to infinite.

Therefore you must tell Mathematica that "0." must be treated as (or is 
really) zero, that is "0" without followed by a dot.

Among many other possibilities, you could try one of the following:

     sol = {{a -> (0. (e1 \[Beta]1 +
           e2 \[Beta]2 \[Lambda]))/(rA \[Tau]^2)}};

     sol // Chop
     sol /. 0. -> 0
     sol // SetPrecision[#, Infinity] &
     sol // Rationalize

     {{a -> 0}}

     {{a -> 0}}

     {{a -> 0}}

     {{a -> 0}}


Also, the following (short) tutorials might be worth reading:

http://reference.wolfram.com/mathematica/tutorial/TheUncertaintiesOfNumericalMathematics.html

http://reference.wolfram.com/mathematica/tutorial/NumericalFunctions.html

http://reference.wolfram.com/mathematica/tutorial/NumericalPrecision.html

http://reference.wolfram.com/mathematica/tutorial/NumbersOverview.html

Regards,
-- Jean-Marc


  • Prev by Date: Re: Writing to an External file, ie .txt
  • Next by Date: RE: Question about diference between Animate and Manipulate
  • Previous by thread: Re: Defining Functions and Simplifying Solutions
  • Next by thread: ListPlot still ignores SetOptions[] command