MathGroup Archive 2008

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

Search the Archive

functions: compiled vs. uncompiled version

  • To: mathgroup at smc.vnet.net
  • Subject: [mg94089] functions: compiled vs. uncompiled version
  • From: Diego Guadagnoli <diego.guadagnoli at ph.tum.de>
  • Date: Thu, 4 Dec 2008 07:17:34 -0500 (EST)
  • Organization: Technische Universitaet Muenchen

Hi All,

I am performing mathematica calculations involving
many nested sums of the kind
FUN = Sum[term[i,j,k], {i,6},{j,6},{k,2} ] or similar,
where term[__] returns a complex number.

Since I have many those sums, Timing is really long.
Therefore I thought to implement both term[__] and FUN
as compiled functions. I noticed however than in both 
cases Timing is not improved, actually it is worse in the 
compiled version.

An example of the code is reported below as plain text.
There are a "Needed input" and a "Functions" part. In "Functions", 
an example of term[__] is provided by the VUUS function, which is 
implemented in uncompiled (VUUS[i_, j_, k_]) and compiled form (VUUSc).
This function is then called in the repeated sum "fun" (uncompiled) or 
respectively "func" (compiled).

As you can see, the Timing in func is actually worse than in fun.

Any suggestion for improving my code without translating it in FORTRAN 
would be very appreciated.

Cheers,
D


%%%%%Please copy the content below to a mathematica notebook

(*NEEDED INPUT*)

BR[i_] := v[1] ZR[[1, i]] - v[2] ZR[[2, i]];

{g1, sW, v[1], v[2], yuRos[1], yuRos[2], yuRos[3]} = 
  Table[Random[], {i, 7}];

AuRos = Table[RandomComplex[], {i, 3}, {j, 3}];

ZR = Table[Random[], {i, 2}, {j, 2}];

ZU = Table[RandomComplex[], {i, 6}, {j, 6}];

\[Mu]Ros = 300;



(*FUNCTIONS*)

VUUS[i_, j_, 
   k_] := -(g1^2/3)*BR[k] (KroneckerDelta[i, j] + (3 - 8 sW^2)/(4 sW^2) 
       Sum[Conjugate[ZU[[I, i]]] ZU[[I, j]], {I, 1, 3}]) - 
   Sum[v[2] (yuRos[I])^2 
     ZR[[2, k]] (Conjugate[ZU[[I, i]]] ZU[[I, j]] + 
       Conjugate[ZU[[I + 3, i]]] ZU[[I + 3, j]]), {I, 1, 3}] + 
   Sum[1/Sqrt[2] 
     ZR[[2, k]] (Conjugate[AuRos[[I, J]]] Conjugate[ZU[[I, i]]] 
        ZU[[J + 3, j]] + 
       AuRos[[I, J]] ZU[[I, j]] Conjugate[ZU[[J + 3, i]]]), {I, 1, 
     3}, {J, 1, 3}] + 
   Sum[1/Sqrt[2] yuRos[I] 
     ZR[[1, k]] (Conjugate[\[Mu]Ros] ZU[[I, j]] 
        Conjugate[ZU[[I + 3, i]]] + \[Mu]Ros Conjugate[ZU[[I, i]]] 
        ZU[[I + 3, j]]), {I, 1, 3}];

VUUSc = Compile[{{i, _Integer}, {j, _Integer}, {k, _Integer}},
   sum1 = 0. + 0. I; 
   Do[sum1 = sum1 + Conjugate[ZU[[ii, i]]] ZU[[ii, j]], {ii, 1, 3}];
   sum2 = 0. + 0. I; 
   Do[sum2 = 
     sum2 + v[2] (yuRos[ii])^2 
       ZR[[2, k]] (Conjugate[ZU[[ii, i]]] ZU[[ii, j]] + 
         Conjugate[ZU[[ii + 3, i]]] ZU[[ii + 3, j]]), {ii, 1, 3}];
   sum3 = 0. + 0. I; 
   Do[sum3 = 
     sum3 + 1/Sqrt[2] 
       ZR[[2, k]] (Conjugate[AuRos[[ii, J]]] Conjugate[ZU[[ii, i]]] 
          ZU[[J + 3, j]] + 
         AuRos[[ii, J]] ZU[[ii, j]] Conjugate[ZU[[J + 3, i]]]), {ii, 
     1, 3}, {J, 1, 3}];
   sum4 = 0. + 0. I; 
   Do[sum4 = 
     sum4 + 1/Sqrt[2] yuRos[ii] 
       ZR[[1, k]] (Conjugate[\[Mu]Ros] ZU[[ii, j]] 
          Conjugate[ZU[[ii + 3, i]]] + \[Mu]Ros Conjugate[
           ZU[[ii, i]]] ZU[[ii + 3, j]]), {ii, 1, 3}];
   -(g1^2/3) 
     BR[k] (KroneckerDelta[i, j] + (3 - 8 sW^2)/(4 sW^2) sum1) - 
    sum2 + sum3 + sum4,
   {{BR[_], _Real}, {ZU, _Complex, 
     6}, {v[_], _Real}, {yuRos[_], _Real}, {ZR, _Real, 
     2}, {AuRos, _Complex, 3}, {\[Mu]Ros, _Complex}}];

fun = Compile[{{k, _Integer}},
   sum1 = 0. + 0. I; 
   Do[sum1 = sum1 + VUUS[l, m, k], {l, 1, 6}, {m, 1, 6}];
   -sum1, {{VUUS[__], _Complex}}
   ];

func = Compile[{{k, _Integer}},
   sum1 = 0. + 0. I; 
   Do[sum1 = sum1 + VUUSc[l, m, k], {l, 1, 6}, {m, 1, 6}];
   -sum1, {{VUUS[__], _Complex}}
   ];

VUUS[1, 1, 1] // Timing

VUUSc[1, 1, 1] // Timing

fun[1] // Timing

func[1] // Timing


  • Prev by Date: RE: Re: easier method for Flatten[Position[list2,x_x...??
  • Next by Date: Re: Calculating with Units
  • Previous by thread: Re: Mathematica 7 is now available
  • Next by thread: Re: functions: compiled vs. uncompiled version