Use MapThread not a For loop

• To: mathgroup at smc.vnet.net
• Subject: [mg18851] Use MapThread not a For loop
• From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
• Date: Thu, 22 Jul 1999 22:57:48 -0400
• Sender: owner-wri-mathgroup at wolfram.com

```Bin Liu wrote:
------------------

..... the last command (For loop) gives me no output.  But it
works if I input a specific number, 1 to 4, to substitute i in
"Apply[mag,{Watoms[[i]],Gatoms[[i]]}]".

watoms= Table[{{0,0,0},{0.5,-0.5,0.5},{0.5,0.5,0.5},{0,0,1}}]
Bao = 2.8665;
Watoms =watoms*Bao;

gatoms=Table[ {{0,0,0},{0.5,-0.5,0.5},{0.5,0.5,0.5},{0,0,1}}]
Fao = 3.5975
Gatoms =gatoms*Fao

mag[{a1_,a2_,a3_},{b1_,b2_,b3_}]:=Sqrt[(a1-b1)^2+(a2-b2)^2+(a3-b3)^2]

For[i=1,i<5,i++,Apply[mag,{Watoms[[i]],Gatoms[[i]]}]]

--------------------------

In Mathematica For[...] doesn't return anything (unless it evaluates
Return[expr] inside the loop).  For[...] only performs the calculation.
Also your use of Apply[mag, ...] computes each mag, but doesn't change
Watoms or Gatoms!

One could get your For loop to do what you want, but with Mathematica it's

In[1]:=
Wat={{a1,b1},{a2,b2},{a3,b3}};
Gat={{x1,y1},{x2,y2},{x3,y3}};

In[3]:=

Out[3]=
{ff[{a1,b1},{x1,y1}],ff[{a2,b2},{x2,y2}],ff[{a3,b3},{x3,y3}]}

----------------------
MapThread is made for the sort of thing you want to do!  What you should do
is use the line below.

In[4]:=

Out[4]=
{0,0.633065,0.633065,0.731}

-------------
Here are some other important features you should learn about:
Map
Apply
Pattern matching (very powerful)
Listable (this attribute is your friend)
Select
Cases
Rule (as in -- expr/.lhs->rhs)
RuleDelayed  (as in -- expr/.lhs:>rhs)

-------------
Here is a tip none of the books will tell you.
You can get the wrong answer if you use a pattern on the left side of Rule.

expr/.x_->x^2    (* Might give the wrong answer! *)

expr/.x_:>x^2    (* Use this instead. *)

----------------
Regards,
Ted Ersek
ersektr at navair.navy.mil

```

• Prev by Date: Re: implcit plot with undefined expression
• Next by Date: Re: Help needed
• Previous by thread: Slow Mathematica front end
• Next by thread: Numeric Cache Clear