[Date Index]
[Thread Index]
[Author Index]
Re: Re: Re: Language vs. Library
*To*: mathgroup at smc.vnet.net
*Subject*: [mg61282] Re: [mg61236] Re: Re: Language vs. Library
*From*: Igor Antonio <igora at wolf-ram.com>
*Date*: Fri, 14 Oct 2005 05:55:02 -0400 (EDT)
*Organization*: Wolfram Research, Inc.
*References*: <dii8o0$9cc$1@smc.vnet.net> <200510130539.BAA04590@smc.vnet.net>
*Reply-to*: igora at wolf-ram.com
*Sender*: owner-wri-mathgroup at wolfram.com
Steven, I haven't been following this thread very closely. Are these rhetorical
questions to try to prove a point or are you actually wanting an answer to those
questions? I'm assuming the latter, ignore my email if that's not the case. :-)
Steven T. Hatton wrote:
> Try this:
>
> A = Array[a (10#1 + #2) &, {3, 3}]
> v = {x, y, z}
> A.v // MatrixForm
> Clear[A,v];
> A = Array[a (10#1 + #2) &, {3, 3}] // MatrixForm
> v = {x, y, z} // MatrixForm
> A.v
>
> Why are the results different?
You should analyze the InputForm of the commands you are using. It may help
understand what's going on. The Equal function has very low precedence, so the
commands you give in postfix notation are being stored as part of the variable
definitions.
Compare In[63] with In[69]:
---------------------------------
In[59]:= A=Array[a (10#1+#2)&,{3,3}];
In[60]:= v={x,y,z};
In[61]:= InputForm[A]
Out[61]//InputForm=
{{11*a, 12*a, 13*a}, {21*a, 22*a, 23*a}, {31*a, 32*a, 33*a}}
In[62]:= InputForm[v]
Out[62]//InputForm=
{x, y, z}
In[63]:= InputForm[A.v]
Out[63]//InputForm=
{11*a*x + 12*a*y + 13*a*z, 21*a*x + 22*a*y + 23*a*z, 31*a*x + 32*a*y + 33*a*z}
-------------------
In[65]:=
A=Array[a (10#1+#2)&,{3,3}]//MatrixForm;
In[66]:=
v={x,y,z}//MatrixForm
In[67]:= InputForm[A]
Out[67]//InputForm=
MatrixForm[{{11*a, 12*a, 13*a}, {21*a, 22*a, 23*a}, {31*a, 32*a, 33*a}}]
In[68]:= InputForm[v]
Out[68]//InputForm=
MatrixForm[{x, y, z}]
In[69]:= InputForm[A.v]
Out[69]//InputForm=
MatrixForm[{{11*a, 12*a, 13*a}, {21*a, 22*a, 23*a}, {31*a, 32*a, 33*a}}] .
MatrixForm[{x, y, z}]
------------------
The Dot function can't handle an expression whose head is MatrixForm and, thus,
returns unevaluated. To use MatrixForm so that it doesn't affect the definition
of A and v, but so that it still allows you to view the typeset expression, you
should do:
MatrixForm[A = ...]
MatrixForm[i = ...]
>
> Explain this:
>
> Clear[a, i]
> a[i] = eye;
> i = 3;
> a[3] = three;
> Print["a[i]=", a[i]]
> Clear[i];
> Print["a[i]=", a[i]]
>
Allow me to rearrange the code a bit for explaining:
First, define your function a, which only returns a result when its argument is
either i or 3:
In[1]:= a[i] = eye
Out[1]= eye
In[2]:= a[3] = three
Out[2]= three
Let's check what the definitions of a are:
In[3]:= ?? a
Global`a
a[3] = three
a[i] = eye
Now, define your i variable:
In[4]:= i = 3;
Also, allow me to change your Print statement so it's not misleading:
In[10]:= Print[a[i]];
three
In In[10], Mathematica first evaluates the value of i, followed by
a[<value_of_i>], that is, a[3]. According to the definitions of the function a
(In[3]), a[3] is equal to the string "three".
Now...
In[11]:= Clear[i];
In[12]:= Print[a[i]]
eye
The symbol i does not have a value, so nothing is done other than to look up
a[i] in the list of definitions of function a. I'm confused, what were you
expecting as the output of Print[a[i]] after you cleared the value of i?
--
Igor C. Antonio
Wolfram Research, Inc.
http://www.wolfram.com
To email me personally, remove the dash.
Prev by Date:
**Re: challenge problem**
Next by Date:
**Re: Solving Diophantine Equations**
Previous by thread:
**Re: Re: Re: Language vs. Library**
Next by thread:
**Re: Language vs. Library**
| |