Re: Boundary Value Problems
- To: mathgroup at smc.vnet.net
- Subject: [mg15018] Re: [mg14997] Boundary Value Problems
- From: Jurgen Tischer <jtischer at col2.telecom.com.co>
- Date: Sat, 5 Dec 1998 01:30:21 -0500
- Organization: Universidad del Valle
- References: <199812020859.DAA23467@smc.vnet.net.>
- Sender: owner-wri-mathgroup at wolfram.com
AC, I have no package but teach my students how to use Mathematica to solve boundary problems with shooting. And I think Mathematica is able to treat quite nasty ODE's. I add two examples to illustrate the method. 1. Example, easy, to show the method Mathematica's NDSolve is not able to solve the following (generalized) boundary problem automatically. NDSolve[{y'''[t] - t y'[t] + 2 y[t] == -10 + t, y[-1] == 3, y'[2] == 4, y[4] == 3}, y, {t, -1, 4}] We define f1[a_, b_] := NDSolve[{y'''[t] - t y'[t] + 2 y[t] == -10 + t, y[-1] == 3, y'[-1] == a, y''[-1] == b}, y, {t, -1, 4}] f2[a_,b_]:=With[{f=First[y/.f1[a,b]]},{f'[2],f[4]}] and solve with FindRoot. sol=FindRoot[f2[a,b]=={4,3},{a,{0,1}},{b,{0,1}}] Plot[Evaluate[y[t]/.f1[a/.sol,b/.sol]],{t,-1,4}] 2. Example, from the book of Stoer and Bulirsch, which they use to illustrate that simple shooting is NOT sufficient to solve nasty problems and use it as motivation to introduce multiple shooting (and I demonstrate that Mathematica does it with simple shooting and ease). The problem: y''[t]==5 Sinh[5 y[t]], y[0]==0, y[1]==1 There is an analytic solution, but Mathematica doesn't find it: In[1]:= DSolve[y''[t] == 5*Sinh[5*y[t]], y, t] Solve::"ifun": "Inverse functions are being used by Solve, so some solutions may not be found." Out[1]= {{y -> (-Infinity & )}, {y -> (Infinity & )}} We proceed as before, f3[a_]:=NDSolve[{y''[t]==5 Sinh[5 y[t]],y[0]==0,y'[0]==a},y,{t,0,1}] but it turns out that the solution sometimes doesn't reach the right boundary. In[2]:= f3[1] NDSolve::"ndsz": "At t == 0.43129882432337574, step size is effectively zero; singularity suspected." Out[2]= {{y->InterpolatingFunction[{{0.,0.431299}},"<>"]}} We turn off the message Off[NDSolve::ndsz] and cheat a bit in the definition of the second function f4[a_]:=With[{f=f3[a][[1,1,2]]},f[f[[1,1,2]]]] If f3[a] doesn't reach the right extreme, we use instead the last value calculated. Now we proceed again as before. sol=FindRoot[f4[a]==1,{a,{0,1}}] Plot[Evaluate[y[t]/.f3[a/.sol]],{t,0,1}] I think this shows how to solve a large class of boundary value problems. Jurgen Wretch wrote: > > Have any useful packages been written to solve boundary value > (eigenvalue) problems? For instance, something that discretizes nasty > ODE and solves the resulting matrix equation for the eigenvalues? I > checked the FAQ and the MathSource link at the Mathematica webpage, but > I found nothing particularly useful. > > Thanks, > > AC
- References:
- Boundary Value Problems
- From: Wretch <arc@astro.columbia.edu>
- Boundary Value Problems