Re: Cross results?
- To: mathgroup at smc.vnet.net
- Subject: [mg63221] Re: Cross results?
- From: "Jean-Marc Gulliet" <jeanmarc.gulliet at gmail.com>
- Date: Mon, 19 Dec 2005 07:01:27 -0500 (EST)
- Organization: The Open University, Milton Keynes, U.K.
- References: <do3l7r$o0b$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"Virgil Stokes" <virgil.stokes at it.uu.se> a écrit dans le message de news: do3l7r$o0b$1 at smc.vnet.net... |I have the following | | x=. | Cross[{10 Sin[x],-10 Cos[x],2.5},{0.12 Sin[x],-0.12 Cos[x], 0.0}] | | which gives, | | {0.3 Cos[x], 0.3 Sin[x], 0.Cos[x]Sin[x]} | | why does it not set the last term to 0.0? | Hi Virgil, First, note that the observed result is neither specific to the function *Cross* nor to the use of trigonometric functions, but on the way Mathematica handle the inexact (machine precision) value 0.0 mixed with symbolic expressions as you can see in the following examples: In[1]:= 0.0 Cos[x] Sin[x] Out[1]= 0. Cos[x] Sin[x] In[2]:= 0.0 a b Out[2]= 0. a b One explanation that comes to mind is since a machine precision number is inexact by nature (o is the exact value zero whereas 0.0 is zero within the limit of *$MachinePrecision*) and the symbolic expression Cos[x]*Sin[x] can return exact or inexact values depending of its parameter x (Pi/4 vs. 0.7854 for example) Mathematica is being conservative in terms of arithmetic precision and decides not to simplify the overall expression in absence of more information about the precision of the value return by Cos[x]Sin[x]. Same thing with In[2] where Mathematica has no idea about what could be possibly returned by the sub-expression ab. On a similar line of thoughts, we can test this explanation with the machine precision number 1.0 and check that no simplification occurs: In[3]:= 1.0 Cos[x] Sin[x] Out[3]= 1. Cos[x] Sin[x] The above explanation is consistent with the seemingly puzzling examples [4] and [5], where simplification of 0.0 * expr to 0 apparently occurs: In[4]:= 0.0 a b + 1.0 a b Out[4]= 1. a b In[5]:= 0.0 Cos[x] Sin[x] + 1.0 Cos[x] Sin[x] Out[5]= 1. Cos[x] Sin[x] However, we can see that if the sub-expressions are different then no simplification to 0 occurs: In[6]:= 0.0 a b + 1.0 Out[6]= 1. + 0. a b In[7]:= 0.0 a b + 1.0 c d Out[7]= 0. a b + 1. c d In[8]:= 0.0 Cos[x] Sin[x] + 1.0 Cos[x] Tan[x] Out[8]= 1. Sin[x] + 0. Cos[x] Sin[x] We may conclude that in the case of [4] and [5] that Mathematica first factorize the expressions to a form {0.0 + 1.0) * expr, then, since it knows how to simplify (0.0 + 1.0) to 1.0, it return 1.0 * expr. I hope that I have been sufficiently clear in writing these late (local time) explanations! Best regards, /J.M.