I came across a very complicated expression as the first following picture shows, it makes normal processing such as coordinate conversion difficult, so I thought it would be nice to use an approximation of it, but I also met some difficulties when using Series[] and NIntegrate[].


so So what methods do you usually use with Mathematica to deal with/simplify this complex expression?

The above is a sub-problem that I think can solve the problem, and my final problem is this(second picture shows):i want plot streamline of {vr,vθ} but failed due to the complexity of the vθ.

enter image description here

code if you need

\*SubsuperscriptBox[\(\[Integral]\), \(0\), 
SuperscriptBox[\(r\), \(2\)], \(2\)]]\(
\*SuperscriptBox[\(E\), \((\(-s\)\  + \ 3 \(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(s\)]
\*FractionBox[\(1 - 
\*SuperscriptBox[\(E\), \(-\[Tau]\)]\), \(\[Tau]\)] \[DifferentialD]\[Tau]\))\)] \[DifferentialD]s\)\)

code if you need

v\[Theta]=\[CapitalGamma]0/(2 \[Pi] r) \!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(\[Eta]\)]\(
\*SuperscriptBox[\(E\), \((\(-s\)\  + \ 3 \(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(s\)]
\*FractionBox[\(1 - 
\*SuperscriptBox[\(E\), \(-\[Tau]\)]\), \(\[Tau]\)] \[DifferentialD]\[Tau]\))\)] \[DifferentialD]s\)\)/H\[Infinity]; (*a function of r*)
vr=-a r + (6\[Nu])/r (1-E^(-((a r^2)/(2 \[Nu])))); (*a function of r*)

\[Eta]=(a r^2)/(2 \[Nu]);

{vx,vy}=TransformedField["Polar"->"Cartesian",{vr,v\[Theta]},{r,\[Theta]}->{x,y}]; (*won't work out*)

@Mariusz Iwaniuk @Mauricio Fernández, Thanks for your answers, but still a little confusion: indeed before I asked here, I had tried to use Assume[] according to the hint Mathematica gives, below picture&code is my trial but failed, the only difference between your and mine is the condition Assume[] use, but why r∈Reals will fail?

enter image description here

the code of the picture:


\*SubsuperscriptBox[\(\[Integral]\), \(0\), 
\*SuperscriptBox[\(r\), \(2\)]\), \(2\ \[Nu]\)]]\(
\*SuperscriptBox[\(E\), \((\(-s\)\  + \ 3 \(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(s\)]
\*FractionBox[\(1 - 
\*SuperscriptBox[\(E\), \(-\[Tau]\)]\), \(\[Tau]\)] \[DifferentialD]\[Tau]\))\)] \[DifferentialD]s\)\)];
  • 1
    $\begingroup$ Add Assuming, e.g., f[r_] := Integrate[ Exp[-s + 3*Integrate[(1 - Exp[-tau])/tau, {tau, 0, s}]] , {s, 0, r^2/2} ] with Normal@Assuming[r > 0, Series[f[r], {r, 0, 10}]] works fine on Mathematica 13.0. $\endgroup$ Jan 30, 2023 at 9:43
  • 3
    $\begingroup$ Please share your code in Raw InputForm and not as Notebook Boxes which is close to unreadable for humans. . $\endgroup$
    – rhermans
    Jan 30, 2023 at 10:14
  • $\begingroup$ @ Mauricio Fernández, mind seeing my following-asking in the above(new edits) (because the picture, so i can't ask here) $\endgroup$ Feb 2, 2023 at 8:59

2 Answers 2


Using comment of user: Mauricio Fernández:

H\[Infinity] = 37.905;
\[CapitalGamma]0 = 1;
a = 1;
\[Nu] = 1;
\[Eta] = (a r^2)/(2 \[Nu]);
f[r_] := Integrate[Exp[-s + 3*Integrate[(1 - Exp[-tau])/tau, {tau, 0, s}]], {s, 0, \[Eta]}] ;
integral = Normal@Assuming[r > 0, Series[f[r], {r, 0, 20}]]

v\[Theta] = \[CapitalGamma]0/(2 \[Pi] r) *(integral)/H\[Infinity]; (*a function of r*)
vr = -a r + (6 \[Nu])/
 r (1 - E^(-((a r^2)/(2 \[Nu])))); (*a function of r*)
{vx, vy} = TransformedField["Polar" -> "Cartesian", {vr, v\[Theta]}, {r, \[Theta]} -> {x, y}]; 
StreamPlot[{vx, vy}, {x, -5, 5}, {y, -5, 5}] 

enter image description here

  • $\begingroup$ mind seeing my following-asking in the above(new edits) (because the picture, so i can't ask here) $\endgroup$ Feb 2, 2023 at 8:59
  • $\begingroup$ @Aerterliusi Well I don't no why Assuming fail's. I'm just a regular user, not a WOLFRAM developer. $\endgroup$ Feb 2, 2023 at 9:17
  • $\begingroup$ @ Mariusz Iwaniuk, still thanks! $\endgroup$ Feb 2, 2023 at 9:59

Try the following: First, let us observe that one calculates the inner integral precisely:

Assuming[{s > 0}, Integrate[(1 - Exp[-t])/t, {t, 0, s}]]

(*  EulerGamma + Gamma[0, s] + Log[s]  *)

Thus, one only needs to calculate the integral of Exp[-s + EulerGamma + Gamma[0, s] + Log[s]. The latter cannot be calculated precisely. Then let us first do this numerically:

lst = ParallelTable[{r, 
     Exp[-s + EulerGamma + Gamma[0, s] + Log[s]], {s, 0, r^2/2}]}, {r,
     0, 10, 0.1}];

Now we see two regimes of behavior with a crossover between them (look at the image below). At small r, one can make a polynomial approximation:

model = k1*r^(7/4) + k2*r^(37/20);
ff = FindFit[lst, model, {k1, k2}, r]
(*   {k1 -> 1.78231, k2 -> -1.39256}   *)

while at r>4, one has the horizontal asymptote


Altogether, one finds this:

  ListPlot[lst, AxesLabel -> {"r", "int"}],
  Plot[model /. ff, {r, 0, 1}, PlotStyle -> Red],
  Plot[2.325, {r, 8, 10}, PlotStyle -> Green]

yielding the following:

enter image description here

Have fun!

  • $\begingroup$ Thanks, I learn something especially ParallelTable[], but as far as this issue is concerned, how do you get the model?(ie 7/4&37/20 ) $\endgroup$ Feb 2, 2023 at 9:56
  • 1
    $\begingroup$ @Aerterliusi I just tried the model model = k1*r^a + k2*r^b with b>a>0. Then I played with these two parameters within Manipulate. However, now I think this model is not the best I would take. I used it because you intended to make a series expansion. If the series is what you are after, it is OK. If, in contrast, you need an analytic function approximating the result of the integration, I would propose to search for the model around the following expression: model = k1*r^a/(1 + k2*r^b). $\endgroup$ Feb 2, 2023 at 15:32
  • $\begingroup$ Manipulate -- clever trick! $\endgroup$ Feb 2, 2023 at 23:32
  • $\begingroup$ later, I just find a function called FindFormula[], powerful! $\endgroup$ Feb 3, 2023 at 0:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.