how decrease computation time?
- To: mathgroup at smc.vnet.net
- Subject: [mg18487] how decrease computation time?
- From: "Arnold.Blaisonneau" <Arnold.Blaisonneau at ensg.u-nancy.fr>
- Date: Wed, 7 Jul 1999 23:08:45 -0400
- Organization: LAEGO
- References: <37610ED6.C47372B7@diamant.ensg.u-nancy.fr>
- Sender: owner-wri-mathgroup at wolfram.com
> Hi, I' m a new user of Mathematica and I try to translate C program in > Mathematica language; > When I do a calculation with Mathematica it takes too many time > compared with C program (6.4 second versus 0.1second); > Please excuse me for the lentgh of my message but I really don't know > what to do for increase the speed; > (Note that separately each function doesn't take many) > If any one could help me.... > Thanks > \!\(\(BessIn[z1_, z2_, n_] := > Module[{i}, > i = n; \n\t\tz2[0] = > Re[BesselI[i, z1[0]\ Exp[I\ z1[1]]]]; \n\t\tz2[1] = > Im[BesselI[i, z1[0]\ Exp[I\ z1[1]]]];];\)\n\t\t\n > \(BessKn[z1_, z2_, n_] := > Module[{i}, > i = n; \n\t\tz2[0] = > Re[BesselK[i, z1[0]\ Exp[I\ z1[1]]]]; \n\t\tz2[1] = > Im[BesselK[i, z1[0]\ Exp[I\ z1[1]]]];];\)\[IndentingNewLine] > > \(calculcoef[aa_, bb_] := \n\t > Module[{z1, z2, spol}, \n\t\tspol = aa + I\ bb; \n\t\tz1[0] = > Abs[spol]; z1[1] = Arg[spol]; \n\t\txx0 = \ at \(z1[0]/DT\); > yy0 = z1[1]/2; \n\t\tz1[0] = xx0*ri; > z1[1] = yy0; \n\t\tBessKn[z1, z2, 0]; xx1 = z2[0]; > yy1 = z2[1]; \n\t\tBessIn[z1, z2, 0]; xx2 = z2[0]; > yy2 = z2[1]; \n\t\tz1[0] = xx0*re; > z1[1] = yy0; \n\t\tBessKn[z1, z2, 0]; xx3 = z2[0]; > yy3 = z2[1]; \n\t\tBessIn[z1, z2, 0]; xx4 = z2[0]; > yy4 = z2[ > 1]; \n\t\tRA = \((aa\ \((Te\ xx2\^2\ xx3 - Te\ xx1\ xx2\ > xx4 - > Ti\ xx2\ xx3\ xx4 + Ti\ xx1\ xx4\^2 - > Te\ xx4\ yy1\ yy2 + Te\ xx3\ yy2\^2 + > Ti\ xx4\ yy2\ yy3 + \((Te\ xx2\ yy1 - Te\ xx1\ > yy2 - > Ti\ xx3\ yy2 - Ti\ xx2\ yy3)\)\ yy4 + > Ti\ xx1\ yy4\^2 + > T0\ \((\(-xx2\^2\)\ xx3 + xx1\ xx2\ xx4 + > xx2\ xx3\ xx4 - xx1\ xx4\^2 + xx4\ yy1\ > yy2 - > xx3\ yy2\^2 - xx4\ yy2\ yy3 - xx2\ yy1\ > yy4 + > xx1\ yy2\ yy4 + xx3\ yy2\ yy4 + xx2\ yy3\ > yy4 - > xx1\ yy4\^2)\))\) + > bb\ \((Te\ xx2\ xx4\ yy1 - Ti\ xx4\^2\ yy1 - > Te\ xx1\ xx4\ yy2 + Ti\ xx3\ xx4\ yy2 - > Te\ xx2\^2\ yy3 + Ti\ xx2\ xx4\ yy3 - > Te\ yy2\^2\ yy3 + \((Te\ xx1\ xx2 - Ti\ xx2\ xx3 > + > Te\ yy1\ yy2 + Ti\ yy2\ yy3)\)\ yy4 - > Ti\ yy1\ yy4\^2 + > T0\ \((\(-xx2\)\ xx4\ yy1 + xx4\^2\ yy1 + > xx1\ xx4\ yy2 - xx3\ xx4\ yy2 + xx2\^2\ > yy3 - > xx2\ xx4\ yy3 + > yy2\^2\ yy3 - \((xx2\ \((xx1 - xx3)\) + > yy2\ \((yy1 + yy3)\))\)\ yy4 + > yy1\ yy4\^2)\))\))\)/\((\((aa\^2 + > bb\^2)\)\ \((xx1\^2\ xx4\^2 + xx4\^2\ yy1\^2 - > 2\ xx3\ xx4\ yy1\ yy2 + xx3\^2\ yy2\^2 + > 2\ xx1\ xx4\ yy2\ yy3 + yy2\^2\ yy3\^2 + > xx2\^2\ \((xx3\^2 + yy3\^2)\) - > 2\ yy2\ \((xx1\ xx3 + yy1\ yy3)\)\ yy4 + \((xx1\^2 > + > yy1\^2)\)\ yy4\^2 - > 2\ xx2\ \((xx1\ xx3\ xx4 + xx4\ yy1\ yy3 - > xx3\ yy1\ yy4 + > xx1\ yy3\ yy4)\))\))\); \n\t\tIA = \((bb\ \ > \((\(-Te\)\ xx2\^2\ xx3 + Te\ xx1\ xx2\ xx4 + Ti\ xx2\ xx3\ xx4 - > Ti\ xx1\ xx4\^2 + Te\ xx4\ yy1\ yy2 - Te\ xx3\ > yy2\^2 - > Ti\ xx4\ yy2\ yy3 - Te\ xx2\ yy1\ yy4 + > Te\ xx1\ yy2\ yy4 + Ti\ xx3\ yy2\ yy4 + > Ti\ xx2\ yy3\ yy4 - Ti\ xx1\ yy4\^2 + > T0\ \((xx2\^2\ xx3 - xx1\ xx2\ xx4 - xx2\ xx3\ > xx4 + > xx1\ xx4\^2 - xx4\ yy1\ yy2 + xx3\ yy2\^2 > + > xx4\ yy2\ yy3 + \((\(-\((xx1 + xx3)\)\)\ > yy2 + > xx2\ \((yy1 - yy3)\))\)\ yy4 + > xx1\ yy4\^2)\))\) + > aa\ \((Te\ xx2\ xx4\ yy1 - Ti\ xx4\^2\ yy1 - > Te\ xx1\ xx4\ yy2 + Ti\ xx3\ xx4\ yy2 - > Te\ xx2\^2\ yy3 + Ti\ xx2\ xx4\ yy3 - > Te\ yy2\^2\ yy3 + \((Te\ xx1\ xx2 - Ti\ xx2\ xx3 > + > Te\ yy1\ yy2 + Ti\ yy2\ yy3)\)\ yy4 - > Ti\ yy1\ yy4\^2 + > T0\ \((\(-xx2\)\ xx4\ yy1 + xx4\^2\ yy1 + > xx1\ xx4\ yy2 - xx3\ xx4\ yy2 + xx2\^2\ > yy3 - > xx2\ xx4\ yy3 + > yy2\^2\ yy3 - \((xx2\ \((xx1 - xx3)\) + > yy2\ \((yy1 + yy3)\))\)\ yy4 + > yy1\ yy4\^2)\))\))\)/\((\((aa\^2 + > bb\^2)\)\ \((xx1\^2\ xx4\^2 + xx4\^2\ yy1\^2 - > 2\ xx3\ xx4\ yy1\ yy2 + xx3\^2\ yy2\^2 + > 2\ xx1\ xx4\ yy2\ yy3 + yy2\^2\ yy3\^2 + > xx2\^2\ \((xx3\^2 + yy3\^2)\) - > 2\ yy2\ \((xx1\ xx3 + yy1\ yy3)\)\ yy4 + \((xx1\^2 > + > yy1\^2)\)\ yy4\^2 - > 2\ xx2\ \((xx1\ xx3\ xx4 + xx4\ yy1\ yy3 - > xx3\ yy1\ yy4 + > xx1\ yy3\ yy4)\))\))\); \n\t\tRB = \((aa\ \ > \((\(-Te\)\ xx1\ xx2\ xx3 + Ti\ xx2\ xx3\^2 + Te\ xx1\^2\ xx4 - > Ti\ xx1\ xx3\ xx4 + Te\ xx4\ yy1\^2 - > Te\ xx3\ yy1\ yy2 - Te\ xx2\ yy1\ yy3 - > Ti\ xx4\ yy1\ yy3 + Te\ xx1\ yy2\ yy3 + > Ti\ xx2\ yy3\^2 + Ti\ xx3\ yy1\ yy4 - > Ti\ xx1\ yy3\ yy4 + > T0\ \((xx1\ xx2\ xx3 - xx2\ xx3\^2 - xx1\^2\ xx4 > + > xx1\ xx3\ xx4 - xx4\ yy1\^2 + xx3\ yy1\ > yy2 + > xx2\ yy1\ yy3 + xx4\ yy1\ yy3 - xx1\ yy2\ > yy3 - > xx2\ yy3\^2 - xx3\ yy1\ yy4 + > xx1\ yy3\ yy4)\))\) + > bb\ \((\(-Te\)\ xx2\ xx3\ yy1 + Ti\ xx3\ xx4\ yy1 + > Te\ xx1\ xx3\ yy2 - Ti\ xx3\^2\ yy2 + > Te\ xx1\ xx2\ yy3 - Ti\ xx1\ xx4\ yy3 + > Te\ yy1\ yy2\ yy3 - Ti\ yy2\ yy3\^2 - Te\ > xx1\^2\ yy4 + > Ti\ xx1\ xx3\ yy4 - Te\ yy1\^2\ yy4 + > Ti\ yy1\ yy3\ yy4 + > T0\ \((xx2\ xx3\ yy1 - xx3\ xx4\ yy1 - xx1\ xx3\ > yy2 + > xx3\^2\ yy2 - xx1\ xx2\ yy3 + xx1\ xx4\ > yy3 - > yy1\ yy2\ yy3 + > yy2\ yy3\^2 + \((xx1\^2 - xx1\ xx3 + > yy1\^2 - > yy1\ yy3)\)\ > yy4)\))\))\)/\((\((aa\^2 + > bb\^2)\)\ \((xx1\^2\ xx4\^2 + xx4\^2\ yy1\^2 - > 2\ xx3\ xx4\ yy1\ yy2 + xx3\^2\ yy2\^2 + > 2\ xx1\ xx4\ yy2\ yy3 + yy2\^2\ yy3\^2 + > xx2\^2\ \((xx3\^2 + yy3\^2)\) - > 2\ yy2\ \((xx1\ xx3 + yy1\ yy3)\)\ yy4 + \((xx1\^2 > + > yy1\^2)\)\ yy4\^2 - > 2\ xx2\ \((xx1\ xx3\ xx4 + xx4\ yy1\ yy3 - > xx3\ yy1\ yy4 + > xx1\ yy3\ yy4)\))\))\); \n\t\tIB = \((bb\ > \((Te\ \ > xx1\ xx2\ xx3 - Ti\ xx2\ xx3\^2 - Te\ xx1\^2\ xx4 + Ti\ xx1\ xx3\ xx4 > - > Te\ xx4\ yy1\^2 + Te\ xx3\ yy1\ yy2 + > Te\ xx2\ yy1\ yy3 + Ti\ xx4\ yy1\ yy3 - > Te\ xx1\ yy2\ yy3 - Ti\ xx2\ yy3\^2 - > Ti\ xx3\ yy1\ yy4 + Ti\ xx1\ yy3\ yy4 + > T0\ \((\(-xx1\)\ xx2\ xx3 + xx2\ xx3\^2 + > xx1\^2\ xx4 - > xx1\ xx3\ xx4 + xx4\ yy1\^2 - xx3\ yy1\ > yy2 - > xx2\ yy1\ yy3 - xx4\ yy1\ yy3 + xx1\ yy2\ > yy3 + > xx2\ yy3\^2 + xx3\ yy1\ yy4 - > xx1\ yy3\ yy4)\))\) + > aa\ \((\(-Te\)\ xx2\ xx3\ yy1 + Ti\ xx3\ xx4\ yy1 + > Te\ xx1\ xx3\ yy2 - Ti\ xx3\^2\ yy2 + > Te\ xx1\ xx2\ yy3 - Ti\ xx1\ xx4\ yy3 + > Te\ yy1\ yy2\ yy3 - Ti\ yy2\ yy3\^2 - Te\ > xx1\^2\ yy4 + > Ti\ xx1\ xx3\ yy4 - Te\ yy1\^2\ yy4 + > Ti\ yy1\ yy3\ yy4 + > T0\ \((xx2\ xx3\ yy1 - xx3\ xx4\ yy1 - xx1\ xx3\ > yy2 + > xx3\^2\ yy2 - xx1\ xx2\ yy3 + xx1\ xx4\ > yy3 - > yy1\ yy2\ yy3 + > yy2\ yy3\^2 + \((xx1\^2 - xx1\ xx3 + > yy1\^2 - > yy1\ yy3)\)\ > yy4)\))\))\)/\((\((aa\^2 + > bb\^2)\)\ \((xx1\^2\ xx4\^2 + xx4\^2\ yy1\^2 - > 2\ xx3\ xx4\ yy1\ yy2 + xx3\^2\ yy2\^2 + > 2\ xx1\ xx4\ yy2\ yy3 + yy2\^2\ yy3\^2 + > xx2\^2\ \((xx3\^2 + yy3\^2)\) - > 2\ yy2\ \((xx1\ xx3 + yy1\ yy3)\)\ yy4 + \((xx1\^2 > + > yy1\^2)\)\ yy4\^2 - > 2\ xx2\ \((xx1\ xx3\ xx4 + xx4\ yy1\ yy3 - > xx3\ yy1\ yy4 + > xx1\ yy3\ > yy4)\))\))\);];\)\[IndentingNewLine] > \(RefT[aa_, bb_] := > Module[{z1, z2}, \n\t\tcalculcoef[aa, bb]; \n\t\tz1[0] = xx0*r; > z1[1] = yy0; \n\t\tBessKn[z1, z2, 0]; xx5 = z2[0]; > yy5 = z2[1]; \n\t\tBessIn[z1, z2, 0]; xx6 = z2[0]; > yy6 = z2[1]; \n\t\t\(aa\ T0\)\/\(aa\^2 + bb\^2\) + RA\ xx5 + > RB\ xx6 - IA\ yy5 - IB\ yy6];\)\[IndentingNewLine] > \(ImfT[aa_, bb_] := > Module[{z1, z2}, \n\t\tcalculcoef[aa, bb]; \n\t\tz1[0] = xx0*r; > z1[1] = yy0; \n\t\tBessKn[z1, z2, 0]; xx5 = z2[0]; > yy5 = z2[1]; \n\t\tBessIn[z1, z2, 0]; xx6 = z2[0]; > yy6 = z2[1]; \n\t\(-\(\(bb\ T0\)\/\(aa\^2 + bb\^2\)\)\) + IA\ > xx5 + > IB\ xx6 + RA\ yy5 + RB\ yy6];\)\[IndentingNewLine] > \(I1T[y_] := RefT[alpha, y]*Cos[t*y];\)\[IndentingNewLine] > \(I2T[y_] := ImfT[alpha, y]*Sin[t*y];\)\[IndentingNewLine] > \(I3T[y_] := \t > Module[{u}, \n\t\t\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ u = > alpha*t - \((1 - y)\)/y; \n\t\t\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ > If[ > TrueQ[u < \(-50\)], > 0, \n\t\t\t\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Exp[ > u]*\((RefT[u/t, beta]*Sin[beta*t] + > ImfT[u/t, beta]*Cos[beta*t])\)/ > y^2\n\t\t\t\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ]];\)\ > \[IndentingNewLine] > \(temp[rr_, tt_] := > Module[{I1, I2, I3}, \[IndentingNewLine]r = rr; t = tt; ri = > 22.5; > re = 23.4; alpha = 2/t; beta = 2/t; \nTi = 308; Te = 288; T0 = > 288; > DT = 10\^\(-6\); \nI1 = NIntegrate[I1T[y], {y, 0, beta}]; \n > I2 = NIntegrate[I2T[y], {y, 0, beta}]; \n > I3 = NIntegrate[I3T[y], {y, 10\^\(-3\), 0.26, 0.5, 1}, > Method -> GaussKronrod, WorkingPrecision -> 10]; \n > 1/\[Pi]*\((Exp[alpha*t]\ \((I1 - I2)\) - I3/t)\)];\)\) > temp[22.8, 10000] > 288.673