Re: Confusing results with N[expr]?
- To: mathgroup at smc.vnet.net
- Subject: [mg62328] Re: [mg62318] Confusing results with N[expr]?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sun, 20 Nov 2005 04:50:32 -0500 (EST)
- References: <200511200419.XAA28539@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 20 Nov 2005, at 13:19, Thomas Bohl wrote:
> I have the impression that since some time (since Vers. 5.0?) N
> [expr] does
> not give anymore the results I expect.
>
> The following code should illustrate this:
>
> N[a] = 2.;
>
> k = z*(a*Pi);
> N[k]
>> 6.28319 z (* "a" and "Pi" are replaced by their numerical
>> value as
>> expected *)
>
> k = z^(a*Pi)
> N[k]
>> z^(3.14159 a) (* "Pi" is replaced by its numerical value but
>> not "a",
>> why not? *)
>
>
> There are more examples of this behaviour: If the expression is Log
> [z*a*Pi],
> the numerical values of "a" and "Pi" are evaluated, if the
> expression is
> Exp[z*a*Pi] the numerical value of "a" is not evaluated. Why not?
>
> The motivation behind my question is that I was used to write
> expressions
> symbolically and assign numerical values with N[expr] = num. value.
> This way
> you could keep those expressions symbolically and just apply //N
> when you
> needed numerical values. Now it seems that I have lost this
> possibility.
>
> Could you please comment my observation and maybe suggest a way out?
>
> Thank you very much for any idea.
>
> Kind regards,
> Thomas.
>
>
I don't remember if it used to be different before version 5, but it
looks to me like a bug that affects the second argument in Power. For
a general function f everything works as expected. First, let's
define an NValue for the symbol a, just as you have been doing:
N[a] = 2.;
Now, let's assign to a general function f the attribute NumericFunction:
In[2]:=
SetAttributes[f, NumericFunction]
In[3]:=
N[f[a, b]]
Out[3]=
f[2., b]
In[4]:=
N[f[b, a]]
Out[4]=
f[b, 2.]
So we see no problem. However, although Power does have the
attribute NumericFunction:
In[5]:=
Attributes[Power]
Out[5]=
{Listable,NumericFunction,OneIdentity,Protected,ReadProtected}
if we set f above to Power things will no longer work properly with
the second argument of Power:
In[6]:=
f = Power;
In[7]:=
N[f[a, b]]
Out[7]=
2.^b
but
In[8]:=
N[f[b, a]]
Out[8]=
b^a
So it looks like a bug to me. Curiously, if you set
NumericQ[a] = True;
you own example will now work as expected:
N[z^(a*Pi)]
z^6.283185307179586
but if you omit Pi it again does not work:
N[z^a]
z^a
There is a very simple workaround for the problem; instead of just
using N use MapAll[N, ]:
MapAll[N,z^a]
z^2.
If your expressions are very complicated there may be a noticeable
loss of performance, but in simple cases like the above everything is
instantaneous.
Andrzej Kozlowski
- Follow-Ups:
- Re: Re: Confusing results with N[expr]?
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Re: Confusing results with N[expr]?
- References:
- Confusing results with N[expr]?
- From: "Thomas Bohl" <Thomas.Bohl@cern.ch>
- Confusing results with N[expr]?