Parallelisierung der numerischen Integration in Mathematica

  • Ich habe eine hässliche, sechsdimensionale Funktion, die ich numerisch integrieren muss. Es funktioniert, aber es dauert momentan zwölf Stunden, um die Berechnung abzuschließen. Gibt es eine gute Möglichkeit, die Berechnung für mehrere Kerne zu parallelisieren?

    Das Beste, was mir gelungen ist, ist:

     Sum[
        ParallelTable[
            NIntegrate[calc[a,b,c,d,e,f],
                       {a,-1,1},
                       {b,-1,1},
                       {c,-1,1},
                       {d,-1,1},
                       {e,-1,1},
                       {f,-1+i/4,-1+(i+1)/4}],
        {i,0,7}]]
     

    BEARBEITEN: Der Wert für calc ist unten angegeben:

     [pre> calc[a,b,c,d,e,f] = (1.97531*10^15 (3. Q Cos[(3 Q)/20000] - 
         20000. Sin[(3 Q)/20000])^2)/(1.58025*10^24 + 6.32099*10^16 Q^2 + 
       Q^6 + (-1.58025*10^24 + 7.90123*10^15 Q^2 - 3.55556*10^8 Q^4) Cos[(
         3 Q)/10000] + (-4.74074*10^20 Q - 2.96296*10^12 Q^3) Sin[(3 Q)/
         10000])*
        UnitStep[5/2 - a]^2 UnitStep[5/2 + a]^2 UnitStep[5 - b]^2 UnitStep[
          5 + b]^2 UnitStep[5 - a - 1944 c] UnitStep[5 + a + 1944 c] UnitStep[
          5 - b - 1944 d] UnitStep[5 + b + 1944 d] UnitStep[
          40 + a - 1600 e] UnitStep[40 - a + 1600 e] UnitStep[
          45/2 + b - 1600 f] UnitStep[45/2 - b + 1600 f] /. Q-> (8000000 \[Pi] Sin[
              1/2 ArcCos[
                1/2 Sqrt[Cos[2 c] + Cos[2 d]] Sqrt[Cos[2 e] + Cos[2 f]] + 
                 Sin[c] Sin[e] + Sin[d] Sin[f]]])
     

    Es gibt zwei unmittelbare Dinge zu beachten. Erstens gibt es eine entfernbare Singularität bei (c == e & amp; & amp; d == f). Ich habe auch versucht, diese Diskontinuität mit einer stückweisen Funktion zu stopfen, aber es scheint keinen signifikanten Einfluss auf die Geschwindigkeit zu haben.

    Ein anderer Gedanke, der mir in den Sinn gekommen ist verwendet die UnitSteps, um den Integrationsbereich direkt zu finden. Ich hatte das vorher nicht getan, meistens aus Faulheit und dem Verständnis, dass Mathematica automatisch stückweise Funktionen zur Integration aufbricht.

    13 February 2012
    Michal SznajderChris Meek
0 answers