Re: Boundary conditions in NDSolve
- To: mathgroup at smc.vnet.net
- Subject: [mg56818] Re: [mg56773] Boundary conditions in NDSolve
- From: Ramesh Raju Mudunuri <rameshrajum at gmail.com>
- Date: Fri, 6 May 2005 03:01:40 -0400 (EDT)
- References: <200505051003.GAA22073@smc.vnet.net>
- Reply-to: Ramesh Raju Mudunuri <rameshrajum at gmail.com>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, The present version of NDSolve handles linear BVPs (Boundary Value Problem) well. Your BVP is non-linear. NDSolve is excellent for Initial Value Problems. It is very good at handling parabolic and hyperbolic PDEsl. We can use these features to solve non-linear BVPs with NDSolve. Here I mention two such methods. The first is the well known Shooting method, where we guess one or more of the initial conditions and iterate using a non-linear solver to get the boundary conditions right.For your problem, guess the value of f at -L, and find the deviation of the solution at L. The following function does that fAtOne[s_?NumericQ]:= Module[{f}, sol=f/.NDSolve[{f''[x]\[Equal]K^2*Sin[f[x]],f'[-L]\[Equal]A, f[-L]\[Equal]s},f,{x,-L,L}][[1]]; sol[L]-B] Plot the function for different s to see where the roots are. It lets us also know if there are multiple solutions. We can get a good guess for FindRoot from the plot. For A=-1; B=1; K=3; L=1 Plot[fAtOne[s],{s,-10,10}] shows that there are atleast three solutions. The solutions can be found easily as Solution One FindRoot[fAtOne[s],{s,-1}] fAtOne[s]/.% Plot[sol[x],{x,-L,L},PlotRange\[Rule]All] Solution Two FindRoot[fAtOne[s],{s,0}] fAtOne[s]/.% Plot[sol[x],{x,-L,L},PlotRange\[Rule]All] Solution Three FindRoot[fAtOne[s],{s,-4.1}] fAtOne[s]/.% p1=Plot[sol[x],{x,-L,L},PlotRange\[Rule]All] In the second method, the same BVP can be posed as a steady state version of a PDE (parabolic PDE in this case). Here we solve a PDE. The method is more involved, and is problem dependent. However if the physics of the problem is well known, it is usually not difficult to construct a PDE. In case of multiple solutions, the initial conditions determine the final steady state. Here is a solution corresponding to solution Three above. sol1 = f /. NDSolve[{-4*Sin[f[x, t]]*D[f[x, t], t] + D[f[x, t], x, x] == K^2*Sin[f[x, t]], (D[f[x, t], x] /. x -> -L) == A, f[L, t] == B, f[x, 0] == A*(x - L) + B}, f, {x, -L, L}, {t, 0, 2}][[1]] p2 = Plot[sol1[x, 2], {x, -L, L}, PlotRange -> All, PlotRange -> All] It can be seen that either method gives the same solution. Show[p1,p2] Hope this helps, Ramesh On 5/5/05, YZ <z at ***.ohio-state.edu> wrote: > Hello, > > when I NDSolve a 2nd order DE, I cant seem to give two boundary > conditions at different point of an interval I am solving it on: > > NDSolve[{f''[x]==K^2*Sin[f[x]],f'[-L]==A, f[-L]==B},f,{x,-L,L}] > produces good result, but i.e. > > NDSolve[{f''[x]==K^2*Sin[f[x]],f'[-L]==A, f[L]==B},f,{x,-L,L}] > ____here derivative is given at left edge, but the functi0n itself is > given at the right edge___ > > produces error: > > NDSolve::"bvlin" > "The differential equation(s) and/or boundary conditions are not linear > in the dependent variables. NDSolve requires linearity to compute the > solution of a multipoint boundary value problem. " > > Is there a way around this? > > Thanks > > YZ > >
- References:
- Boundary conditions in NDSolve
- From: YZ <z@***.ohio-state.edu>
- Boundary conditions in NDSolve