0
$\begingroup$

Consider the following function:

func[E1_, E3_] = (-1.1368683772161603`*^-12 E1^18 + (7174.078039258278` E3 - 
        17331.93462997387`) E1^17 + (114785.2486281331` E3^2 - 
        143466.97484071294` E3 - 
        379996.06262208335`) E1^16 + (860889.3647109987` E3^3 - 
        90954.51670915695` E3^2 - 1.6574839081741216`*^7 E3 + 
        2.5780645189308308`*^7) E1^15 + (4.0174837019846607`*^6 E3^4 \
+ 4.0660036818660023`*^6 E3^3 - 1.9250802955878392`*^8 E3^2 + 
        4.317103651967404`*^8 E3 - 
        7.304503524283548`*^7) E1^14 + (1.305682203145016`*^7 E3^5 + 
        2.7382774309123755`*^7 E3^4 - 1.1675521053085191`*^9 E3^3 + 
        3.294749725611349`*^9 E3^2 + 3.947160144593673`*^9 E3 - 
        1.3221870579338486`*^10) E1^13 + (3.1336372875480384`*^7 E3^6 \
+ 9.844530858595735`*^7 E3^5 - 4.509905627381439`*^9 E3^4 + 
        1.5276296761179438`*^10 E3^3 + 5.2897365519168304`*^10 E3^2 - 
        3.0791476254351105`*^11 E3 + 
        3.249583764325282`*^11) E1^12 + (5.745001693838075`*^7 E3^7 + 
        2.3750183930337504`*^8 E3^6 - 1.2157893528866741`*^10 E3^5 + 
        4.8277074784675514`*^10 E3^4 + 3.0030150212332`*^11 E3^3 - 
        2.527729344460618`*^12 E3^2 + 5.819830152441772`*^12 E3 - 
        3.836568306179832`*^12) E1^11 + (8.207145276911533`*^7 E3^8 + 
        4.1520928868857986`*^8 E3^7 - 2.4033655233243958`*^10 E3^6 + 
        1.1038785985999144`*^11 E3^5 + 1.01409628072329`*^12 E3^4 - 
        1.1264103446885885`*^13 E3^3 + 4.0712228384361414`*^13 E3^2 - 
        6.0532833493518695`*^13 E3 + 
        2.5154696504297156`*^13) E1^10 + (9.233038436525467`*^7 E3^9 \
+ 5.44219848989263`*^8 E3^8 - 3.5823051502061676`*^10 E3^7 + 
        1.8893074104149817`*^11 E3^6 + 2.2933449407266475`*^12 E3^5 - 
        3.1903530818870188`*^13 E3^4 + 1.585224682744743`*^14 E3^3 - 
        3.7764569550632006`*^14 E3^2 + 3.835710339672749`*^14 E3 - 
        6.525838632693223`*^13) E1^9 + (8.207145276911527`*^7 E3^10 + 
        5.421461844458133`*^8 E3^9 - 4.08486116638713`*^10 E3^8 + 
        2.4668854033073495`*^11 E3^7 + 3.6706730992777095`*^12 E3^6 - 
        6.192120407253986`*^13 E3^5 + 3.9406951599278994`*^14 E3^4 - 
        1.3078675228682025`*^15 E3^3 + 2.212692673812425`*^15 E3^2 - 
        1.3527601261123302`*^15 E3 - 
        3.9054858663201425`*^14) E1^8 + (5.74500169383807`*^7 E3^11 + 
        4.1023249378430146`*^8 E3^10 - 3.5794269787820366`*^10 E3^9 + 
        2.4787817667497595`*^11 E3^8 + 4.2677210362663765`*^12 E3^7 - 
        8.556401507560966`*^13 E3^6 + 6.68037760013406`*^14 E3^5 - 
        2.865567622901038`*^15 E3^4 + 6.911547748193111`*^15 E3^3 - 
        7.948558819767396`*^15 E3^2 + 5.594184156067427`*^14 E3 + 
        5.129140032873777`*^15) E1^7 + (3.13363728754804`*^7 E3^12 + 
        2.32223420465504`*^8 E3^11 - 2.399336083330612`*^10 E3^10 + 
        1.917065591780638`*^11 E3^9 + 3.630765833456078`*^12 E3^8 - 
        8.557570290195761`*^13 E3^7 + 7.971372372400926`*^14 E3^6 - 
        4.221520666344516`*^15 E3^5 + 1.3362919957952832`*^16 E3^4 - 
        2.324433265868824`*^16 E3^3 + 1.2849441358712044`*^16 E3^2 + 
        2.1258424013638016`*^16 E3 - 
        2.8600979604102692`*^16) E1^6 + (1.3056822031450156`*^7 E3^13 \
+ 9.475041539944749`*^7 E3^12 - 1.212492538346302`*^10 E3^11 + 
        1.131636779965567`*^11 E3^10 + 2.240135252964473`*^12 E3^9 - 
        6.1947501681822484`*^13 E3^8 + 6.761794127370519`*^14 E3^7 - 
        4.2912070468801645`*^15 E3^6 + 1.6954840008363012`*^16 E3^5 - 
        4.007827112211339`*^16 E3^4 + 4.347814057313237`*^16 E3^3 + 
        2.5942217783638108`*^16 E3^2 - 1.2500326220310042`*^17 E3 + 
        1.0116209980033758`*^17) E1^5 + (4.0174837019846654`*^6 E3^14 \
+ 2.5555629326783583`*^7 E3^13 - 4.491589991046033`*^9 E3^12 + 
        5.0043504507944405`*^10 E3^11 + 
        9.741890149016553`*^11 E3^10 - 3.1927880457094777`*^13 E3^9 + 
        4.042465818973474`*^14 E3^8 - 3.0148955811917115`*^15 E3^7 + 
        1.4393548706386918`*^16 E3^6 - 4.345527227142956`*^16 E3^5 + 
        7.15671280954729`*^16 E3^4 - 9.645370135809808`*^15 E3^3 - 
        2.1080887610397536`*^17 E3^2 + 3.922868280745537`*^17 E3 - 
        2.436630098839182`*^17) E1^4 + (860889.3647109987` E3^15 + 
        3.4279530531122806`*^6 E3^14 - 1.1605076297949018`*^9 E3^13 + 
        1.6033338071151747`*^10 E3^12 + 
        2.809525247552554`*^11 E3^11 - 
        1.1277739244291615`*^13 E3^10 + 
        1.6530717887751203`*^14 E3^9 - 1.43230748811043`*^15 E3^8 + 
        8.089409174975055`*^15 E3^7 - 2.999833495731904`*^16 E3^6 + 
        6.7025568427158856`*^16 E3^5 - 5.235507925741091`*^16 E3^4 - 
        1.6522247446690714`*^17 E3^3 + 5.851116337118412`*^17 E3^2 - 
        7.737954884554534`*^17 E3 + 
        4.002784088304009`*^17) E1^3 + (114785.24862813312` E3^16 - 
        241766.48350548893` E3^15 - 1.9069659299813995`*^8 E3^14 + 
        3.5082741976548233`*^9 E3^13 + 
        4.6850810091647995`*^10 E3^12 - 
        2.5325107279665264`*^12 E3^11 + 
        4.342611262557675`*^13 E3^10 - 4.35717679286026`*^14 E3^9 + 
        2.8752397263772715`*^15 E3^8 - 1.2772846175931842`*^16 E3^7 + 
        3.639686921273674`*^16 E3^6 - 5.0935258635251256`*^16 E3^5 - 
        5.183209474641414`*^16 E3^4 + 4.1323493069161165`*^17 E3^3 - 
        8.960650028951197`*^17 E3^2 + 9.601954688593996`*^17 E3 - 
        4.302210028701822`*^17) E1^2 + (7174.078039258275` E3^17 - 
        165218.70082095283` E3^16 - 1.6293060061196603`*^7 E3^15 + 
        4.677599513859009`*^8 E3^14 + 2.8308729887437234`*^9 E3^13 - 
        3.0888874807249023`*^11 E3^12 + 
        6.436622025445189`*^12 E3^11 - 7.546562932258544`*^13 E3^10 + 
        5.798812717642688`*^14 E3^9 - 3.0412607007699355`*^15 E3^8 + 
        1.0651173210189514`*^16 E3^7 - 2.1451285107965136`*^16 E3^6 + 
        2.1781628829528528`*^15 E3^5 + 1.3447177354418486`*^17 E3^4 - 
        4.45395579959527`*^17 E3^3 + 7.500148995635727`*^17 E3^2 - 
        6.871024599752161`*^17 E3 + 2.7271449138321658`*^17) E1 + 
     9.094947017729282`*^-13 E3^18 - 18782.04969532324` E3^17 - 
     359868.98972604144` E3^16 + 2.8553690280782312`*^7 E3^15 - 
     1.6606896489700085`*^8 E3^14 - 1.3310414718336586`*^10 E3^13 + 
     3.866375637328708`*^11 E3^12 - 5.495767842742795`*^12 E3^11 + 
     4.969347622892131`*^13 E3^10 - 3.064727541351616`*^14 E3^9 + 
     1.2914105457984342`*^15 E3^8 - 3.412801791446944`*^15 E3^7 + 
     3.194376667411135`*^15 E3^6 + 1.5223748290219742`*^16 E3^5 - 
     7.946305563596515`*^16 E3^4 + 1.9009783953454752`*^17 E3^3 - 
     2.6861820072158685`*^17 E3^2 + 2.1633878305057894`*^17 E3 - 
     7.71444304468068`*^16)/((-1.` E1 - 1.` E3 + 
       2.5826118583064974`)^2 (-1.` E1 - 1.` E3 + 
       5.222111858306498`)^2 (-1.` E1 - 1.` E3 + 
       5.268312275052094`)^2 (-1.` E1 - 1.` E3 + 
       5.651983763158607`)^2 (-1.` E1 - 1.` E3 + 
       7.556131148576119`)^2 (-1.` E1^2 - 2.` E3 E1 - 
       33.70418595119599` E1 - 1.` E3^2 - 33.70418595119599` E3 + 
       224.8599275683817`)^2 (1.` E1^2 + 2.` E3 E1 - 
       22.302550185370606` E1 + 1.` E3^2 - 22.302550185370606` E3 + 
       85.27650241858413`)^2);

I would like to compute a table of values of this function at points E1E3rand:

BlockRandomEnergies = 
  Compile[{m, m1, m2, m3}, 
   Module[{E1 = 0., E2v = 0., E3 = 0.}, 
    While[E1 = RandomReal[{m1, (m^2 + m1^2 - (m3 + m2)^2)/(2*m)}];
     E3 = RandomReal[{m3, (m^2 + m3^2 - (m1 + m2)^2)/(2*m)}];
     E2v = m - E1 - E3;
     E2v <= m2 || (E2v^2 - m2^2 - (E1^2 - m1^2) - (E3^2 - m3^2))^2 >= 
       4*(E1^2 - m1^2)*(E3^2 - m3^2)];
    {E1, E3}], CompilationTarget -> "C", RuntimeOptions -> "Speed"];
E1E3rand = Table[BlockRandomEnergies[5.279, 0.1, 1.87, 0.104], 10^6];

This is what I do:

weights1 = 
  Hold@Compile[{{tab1, _Real, 2}}, 
      Table[func[tab1[[i]][[1]], tab1[[i]][[2]]], {i, 1, 10^6, 1}], 
      CompilationTarget -> "C", RuntimeOptions -> "Speed"] /. 
    DownValues@func // ReleaseHold;
weights = weights1[E1E3rand] /. _?Negative -> 0; // AbsoluteTiming

{5.01345,Null}

Could you please tell me how to speedup the computation further?

$\endgroup$
2
  • $\begingroup$ On a 6th gen i5 with Mathematica 13 it runs in 0.624554 s. $\endgroup$
    – flinty
    Dec 20 '21 at 10:13
  • $\begingroup$ @flinty Hm, I need to find out why sometimes it runs ~10 times slower. $\endgroup$ Dec 20 '21 at 13:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.