MathGroup Archive 2009

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

Search the Archive

How to "vectorize" code

  • To: mathgroup at smc.vnet.net
  • Subject: [mg97066] How to "vectorize" code
  • From: Aaron Fude <aaronfude at gmail.com>
  • Date: Wed, 4 Mar 2009 07:13:25 -0500 (EST)

Hi,

The code below computes Christoffel symbols for 2D coordinate systems.
I know there are packages that do that, but that's not what I am
after. Computing Christoffels is just a model problem for me. The
actual class of problems that I am after is much different and
wouldn't be in any package, but will have some of the same elements.

I know that the attached code as atrocious and I am looking for hints
on how to "vectorize" it so, for example, in can work in any
dimension, with no loops, etc. So this is really an open ended
question: please help me fix everything that's silly. Many thanks in
advance,

Aaron

Clear["Global`*"];
Christoffel2D[mapping_] := (
  e1 = Derivative[1, 0][mapping];
  e2 = Derivative[0, 1][mapping];
  gij = ({{ e1[##].e1[##], e1[##].e2[##]}, {e2[##].e1[##],
        e2[##].e2[##]}} // FullSimplify) &;
  gIJ = Inverse[gij[##]] &;
  E1 = gIJ[##][[1, 1]]*e1[##] + gIJ[##][[1, 2]]*e2[##] &;
  E2 = gIJ[##][[2, 1]]*e1[##] + gIJ[##][[2, 2]]*e2[##] &;
  e11 = Derivative[1, 0][e1];
  e12 = Derivative[0, 1][e1];
  e21 = Derivative[1, 0][e2];
  e22 = Derivative[0, 1][e2];
  For [i = 1, i <= 2, i = i + 1,
   For [j = 1, j <= 2, j = j + 1,
    For [k = 1, k <= 2, k = k + 1,
     ToExpression[
       "G" <> ToString[i] <> ToString[j] <> ToString[k] <> "=Dot[e" <>
         ToString[i] <> ToString[j] <> "[##],E" <> ToString[k] <>
        "[##]]&;"];
     ]]];
  ({
      {{G111[##], G112[##]}, {G121[##], G122[##]}},
      {{G211[##], G212[##]}, {G221[##], G222[##]}}
      } // FullSimplify) &
  )
polar[r_, theta_] := {r Sin[theta], -r Cos[theta]}
Christoffel2D[polar][r, theta] // MatrixForm


  • Prev by Date: Re: Looking to time how long a command takes in mathematica 6 tia
  • Next by Date: Re: Conjecture: 2n+1= 2^i+p ; 6k-2 or 6k+2 = 3^i+p
  • Previous by thread: Speed differences between Union, Tally and DeleteDuplicates
  • Next by thread: Epilog doesn't work with loglinearplot