MathGroup Archive 1999

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

Search the Archive

Re: Help needed

  • To: mathgroup at
  • Subject: [mg18856] Re: [mg18801] Help needed
  • From: "Tomas Garza" <tgarza at>
  • Date: Thu, 22 Jul 1999 22:57:51 -0400
  • Sender: owner-wri-mathgroup at

Bin Liu [binliu at] wrote:

> I'm a new Mathematica (3.0) user.  The program is listed below.  The
> problem is that 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]]}]".
> Thanks.
> Bin
> 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]]}]]


Your procedure is OK, except that you have not instructed it what to do with
the results of the calculation. Simply wrap Print around [Apply...] and
you'll get your results nicely printed. Furthermore, you needn't use Apply
in this case. You can instead write mag[Watoms[[i]],Gatoms[[i]]]. But I
think you are not taking full advantage of the power of Mathematica. You are
using procedural programming, instead of functional programming, which I
strongly recommend you to learn. You could then solve your problem in an
elegant, Mathematica-like way as follows:

mgg[a_List, b_List] := Sqrt[Plus @@ (#^2 & /@ (a - b))]
MapThread[mgg, {Watoms, Gatoms}]
{0, 0.633065, 0.633065, 0.731}

Tomas Garza
Mexico City

  • Prev by Date: Use MapThread not a For loop
  • Next by Date: Numeric Cache Clear
  • Previous by thread: Help needed
  • Next by thread: Re: Help needed