MathGroup Archive 1998

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to solve the Blasius eq. in Mathematica?

  • To: mathgroup at
  • Subject: [mg14122] Re: How to solve the Blasius eq. in Mathematica?
  • From: lawry at (James Lawry)
  • Date: Fri, 25 Sep 1998 03:15:46 -0400
  • Organization: Oxford Centre for Industrial & Applied Mathematics
  • References: <6ud20f$>
  • Sender: owner-wri-mathgroup at

Jason Krywicki <krywicki_NOSPAM_ at> wrote:
>I was wondering what the best way would be to go about solving 
>   2f''' + ff'' == 0  f[0]==0, f'[0]==0,f'[inf]==1
>in Mathematica would be? I guess NDSolve, but is there anything special
>i have to do?

Yes. First, because the equation is nonlinear and the boundary
conditions are not all imposed at one point, the built-in NDSolve
cannot do the whole problem for you and you will need to use something
like a shooting method using NDSolve in combination with FindRoot:
effectively you guess a value of f''[0], solve the differential
equation with the three conditions at 0, and then use FindRoot to vary
the value of f''[0] until it matches the boundary condition at the
other end.

Second, the boundary condition imposed at infinity causes difficulty to
Mathematica. Two ways around this are: either transform the independent
variable (e.g. with t = 1 - Exp[-x]) so that x=infinity corresponds to
a finite value in the new variable; or else (the quick and dirty way)
decide that some finite value is "far enough away" to be considered
infinity. In the case of your equation, x=10 is amply far enough away
for several digits precision.

A simple implementation of a shooting routine is available from my
webpage at

Using it, the command to solve your equation is
  soln = DShoot[{2 f'''[x] + f[x] f''[x] == 0, f[0] == 0, f'[0] == 0}, 
                f'[10] == 1, f, {x, 0, 10}, {f''[0], 0.3, 0.5}]

(where I have used 10 in place of infinity and given the range (0.3,
0.5) as two initial values for FindRoot to use to find the correct
value of f''[0]. The solution returned is 

  {{f -> InterpolatingFunction[{{0., 10.}}, <>]}, f''[0] == 0.332058}

so the root for f''[0] satisfying the condition f'[10] == 1 has been
found, and plotting f'[x] with

  Plot[Evaluate[(f /. soln[[1]])'[x]], {x, 0, 10}, PlotRange  -> {0, 1}]

shows the familar viscous boundary layer shape. (Always worth checking,
as using shooting and a finite boundary condition could produce
spurious results.)

James Lawry.

  • Prev by Date: Bad error messages
  • Next by Date: Re: Problem with WMF
  • Previous by thread: How to solve the Blasius eq. in Mathematica?
  • Next by thread: 3D Object from Listplot?