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