0% found this document useful (0 votes)
174 views7 pages

Shooting Method 5

The document summarizes two common methods for numerically solving boundary value problems (BVPs): shooting and finite differences. The shooting method reformulates the BVP as an initial value problem by guessing the boundary condition at one end and using a root-finding method like secant or Newton's to determine the correct guess. The finite difference method discretizes the BVP into a system of equations by approximating derivatives with finite differences. Newton's method is used to solve the resulting nonlinear system. Examples are given to illustrate both methods and their implementation for sample BVPs. Challenges with certain BVPs are also discussed.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
174 views7 pages

Shooting Method 5

The document summarizes two common methods for numerically solving boundary value problems (BVPs): shooting and finite differences. The shooting method reformulates the BVP as an initial value problem by guessing the boundary condition at one end and using a root-finding method like secant or Newton's to determine the correct guess. The finite difference method discretizes the BVP into a system of equations by approximating derivatives with finite differences. Newton's method is used to solve the resulting nonlinear system. Examples are given to illustrate both methods and their implementation for sample BVPs. Challenges with certain BVPs are also discussed.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Numerical Solutions of Boundary Value Problems

In these note we will consider the solution to boundary value problems of the form y = f (x, y, y ) , y (a) = A , y ( b) = B . a < x < b, (1) (2) (3)

We will consider two common methods, shooting and nite dierences. In the shooting method, we consider the boundary value problem as an initial value problem and try to determine the value y (a) which results in y (b) = B . Finite dierences converts the continuous problem to a discrete problem using approximations of the derivative. As in class I will apply these methods to the problem y = The exact solution is given by y = 3x + 1. (y )2 , y y (0) = 1 , y (1) = 2 .

Shooting - Secant Method


y = f (x, y, y ) , y (a) = A , y (a) = t , (4) (5) (6)

For the shooting method, we consider the problem

We let m( t ) = f ( b; t ) B where f (b; t) is the solution to (4) using the value t. We wish to nd a zero of m(t) to solve the boundary value problem. In this case we use the secant method to locate the zero. Recall, to solve f (x) = 0 using the secant method we make successive approximations using the iteration xn+1 = xn xn xn1 f (x n ) . f (xn ) f (xn1 )

We need two guess to start the process, then we just proceed until the iterations converge. Here is the code I used to approximate the solution to (1) using the shooting secant method: function [x,y]=bvpsec(t1,t2) [x1,y1]=ode45(@odes,[0,1],[1,t1]); [x2,y2]=ode45(@odes,[0,1],[1,t2]); i=1; m1=y1(end,1)-2; m2=y2(end,1)-2; while(abs(t2-t1)>0.000001) tmp=t2 t2=t1-(t1-t2)/(m1-m2)*m1; t1=tmp; [x1,y1]=ode45(@odes,[0,1],[1,t1]); [x2,y2]=ode45(@odes,[0,1],[1,t2]); m1=y1(end,1)-2; m2=y2(end,1)-2; i=i+1; end i x=x2; y=y2; 1

end function yp=odes(t,y) yp=zeros(2,1); yp(1)=y(2); yp(2)=-y(2)^2/y(1); end If we run the code with input parameters 1 and 2, it takes 6 iterations to get the solution shown in gure 1
2

1.8

1.6

1.4

1.2

0.8

0.6 0 0.2 0.4 0.6 0.8 1

Figure 1: Approximation to the solution of (1) using the shooting method in combination with the secant method. The plot includes y (x) as well as y (x).

Shooting Method - Newtons Method

Newtons root nding method is much faster and can produce more accurate results then the secant method. The iteration used to nd a solution to f (x) = 0 is given by xn+1 = xn f (x n ) . f (x n )

However to apply this method to nd a root of m(t), we must know m (t). Here m(t) is dened in terms of the solution to dierential equation evaluated at a point b. In general, we cant solve the dierential equation or we wouldnt need the numerical approximation. So we must nd a method of approximating m (t). We rst note that m( t ) = f ( b; t ) B so that m ( t ) = f (x; t) t .
x =b

Now we will consider f as a function of the three variables x, y and y , for the moment ignoring the relationship between y and y . We can then dierentiate the following relation by t y = f (x, y, y ) to get y f y f y = + . t y t y t We can let z (x, t) =
t f (x, t).

Now z satises the boundary value problem z = f f z + z , y y z (0) = 0 , z (0) = 1 .

Now m (t) = z (b). So if we wish to apply this method to our sample problem (1), we must solve the system y = u , u = u2 , y z = v ,

u2 u v2 v, y2 y y (0) = 1 , v = u(0) = t , z (0) = 0 , v (0) = 1 . Then we can approximate m (t) by z (1) and use Newtons formula to update the solution. The code is given below: function [x,y]=bvpnewt(t1) [x,y]=ode45(@odes,[0,1],[1,t1,0,1]); i=1; m=y(end,1)-2; t2=t1-m/y(end,3); while(abs(t2-t1)>0.000001) t1=t2; [x,y]=ode45(@odes,[0,1],[1,t1,0,1]); m=y(end,1)-2; t2=t1-m/y(end,3); i=i+1; end y=y(:,1:2); i end function yp=odes(t,y) yp=zeros(4,1); yp(1)=y(2); yp(2)=-y(2)^2/y(1); yp(3)=y(4); yp(4)=y(2)^2/y(1)^2*y(3)-2*y(2)/y(1)*y(4); end Running this code with an initial t = 1 takes 4 iterations to get to the same accuracy as the secant method. This method must solve a larger system, so each iteration is more work. However fewer iterations are required. The output is almost identical to the shooting method, so there is no need provide a graph.

Finite Dierence Method


ba . N

For the nite dierence method, we pick N + 1 discrete points in the interval [a, b] by xi = a + ix , i = 0...N , x =

and we let yi be our approximation of y (xi ). In the solution to the heat equation notes we show that y (xi ) yi+1 2yi + yi1 , x2 yi+1 yi1 y (x i ) . 2x 3 (7) (8)

Using the boundary conditions y0 = A and yN = B together with (7), we get N + 1 equations in N + 1 unknowns. The equations are nonlinear and we must use Newtons method to nd a solution. Recall Newtons method for systems is given by xn+1 = xn Df (xn )1 f (xn ) . We can now apply the nite dierence approximation to (1). y0 1 . . .
yi+1 yi1 2x 2

F = yi+1 2yi2+yi1 x The nonzero entries of the Jacobian are then Ji,i1 = Ji,i Ji,i+1

yi

+ . . . yN 2

1 2(yi+1 yi1 1 x2 4yi 2 = , x2 1 2(yi+1 yi1 = 1+ x2 4yi

for i = 1, . . . , N 1. Here is the code used to implement the method: function [x,y]=findiff(n) x=linspace(0,1,n); y=zeros(n,1); for i=1:n y(i)=x(i)+1; end dy=-J(y)\f(y); while(norm(dy,2)>0.001) y=y+dy; dy=-J(y)\f(y); end end

function y1=f(y) n=length(y); h=1/n; y1=zeros(n,1); y1(1)=y(1)-1; for i=2:n-1 y1(i)=(y(i-1)-2*y(i)+y(i+1))/h^2+(y(i+1)-y(i-1))^2/y(i)/4/h^2; end y1(n)=y(n)-2; end function J1=J(y) n=length(y); h=1/n; J1=zeros(n,n); J1(1,1)=1; for i=2:n-1 4

J1(i,i+1)=1/h^2*(1+(y(i+1)-y(i-1))/2/y(i)); J1(i,i)=1/h^2*(-2-(y(i+1)-y(i-1))^2/4/y(i)^2); J1(i,i-1)=1/h^2*(1-(y(i+1)-y(i-1))/2/y(i)); end J1(n,n)=1; end The resulting approximation is very close to those obtained with the shooting method. We will consider the error.
2.5e-08

2e-08

1.5e-08

1e-08

5e-09

0 0 0.2 0.4 0.6 0.8 1

Figure 2: Error in shooting code. We note that the solution vector contains 13 points

1e-05

8e-06

6e-06

4e-06

2e-06

0 0 0.2 0.4 0.6 0.8 1

Figure 3: Error for nite dierence code using 50 points. We can see that we get much better results from the shooting code with much fewer points.

Dicult Boundary Value Problem


y y + y 2 = 0 , y (0) = 0 , y 0 as x , y > 0. (9)

We will now consider a more dicult problem

2 This problem has the unique solution y = 3 2 sech (x/2). Without the last restriction we also have the zero solution. So we must somehow deal with the non-uniqueness. The other problem we face is the boundary condition at innity. The methods considered so far dont allow for a condition at . If we try to enforce y (R) = 0 for some large R, we will nd the solution is very sensitive to the choice or R and we will fail. Instead we note that if the solution decays, at x = R 1, y 2 y . So at R, the equation is approximately y y = 0 and y = Cex . So at x = R, we will impose the boundary condition y (R ) = y (R )

Here is the modied shooting method (secant version) code:

function [x,y]=bvpsech(t1,t2) [x1,y1]=ode2r(@odes,[0,5],[t1,0]); [x2,y2]=ode2r(@odes,[0,5],[t2,0]); i=1; m1=y1(end,1)+y1(end,2); m2=y2(end,1)+y2(end,2); while(abs(t2-t1)>0.000001) tmp=t2 t2=t1-(t1-t2)/(m1-m2)*m1; t1=tmp; [x1,y1]=ode2r(@odes,[0,5],[t1,0]); [x2,y2]=ode2r(@odes,[0,5],[t2,0]); m1=y1(end,1)+y2(end,2); m2=y2(end,1)+y2(end,2); i=i+1; end i x=x2; y=y2; end function yp=odes(t,y) yp=zeros(2,1); yp(1)=y(2); yp(2)=y(1)-y(1)^2; end Notice the change to the initial conditions and the function m(t). Now we set the initial value of y to t and set y (0) = 0. We have dened m(t) = f (5) f (5). The choice of x = 5 for our right endpoint is arbitrary, but if we make it too large, we will have stability problems and if we make it too small, our approximation y (x) = y (x) will not be valid. If we run this code with bad initial choices of t1 and t2 we will nd it converges to the wrong solution. Namely y 0 or y 1. We need a good approximation to y (0) to get the right solution. If we multiply (9) by y and perform the following manipulations, y y yy + y 2 y = 0 , 1 2 1 3 y + y 2 3 = 0,

1 2 (y ) 2 1 2 1 2 1 3 (y ) y + y 2 2 3

d dx

= C Some constant C .

Since y () = y () = 0, the constant for the orbit we are interested in is 0. Now when x = 0, we have y (0) = 0 so, 1 1 y (0)2 + y (0)3 = 0 2 3 so y (0) = 0 or y (0) = 3 2 . For a non-zero solution, we use y (0) = 1.5 In the code we try t1=1.4 and t2=1.6 and we get a good approximation. It takes 113 iterations however. The nite dierence code for solving (9) is given below: function [x,y]=findiff2(n) x=linspace(0,5,n); y=zeros(n,1); for i=1:n y(i)=1.5/cosh(x(i)/2); end

1.5

0.5

-0.5

-1 0 1 2 3 4 5

Figure 4: Output from the shooting code for (9). The solid lines represent the codes output. The crosses are the exact solution.

dy=-J(y)\f(y); while(norm(dy,2)>0.001) y=y+dy; dy=-J(y)\f(y); end end

function y1=f(y) n=length(y); h=5/n; y1=zeros(n,1); y1(1)=2*(y(2)-y(1))/h^2-y(1)+y(1)^2; for i=2:n-1 y1(i)=(y(i-1)-2*y(i)+y(i+1))/h^2-y(i)+y(i)^2; end y1(n)=(2*y(n-1)-2*h*y(n)-2*y(n))/h^2-y(n)+y(n)^2; end function J1=J(y) n=length(y); h=5/n; J1=zeros(n,n); J1(1,1)=-2/h^2-1+2*y(1); J1(1,2)=2/h^2; for i=2:n-1 J1(i,i+1)=1/h^2; J1(i,i)=-2/h^2-1+2*y(i); J1(i,i-1)=1/h^2; end J1(n,n-1)=2/h^2; J1(n,n)=-2/h-2/h^2-1+2*y(n); end The code does work, however I have given it the exact solution as a guess. So far it hasnt converged for any other guess. This may be a bug or it may be that this problem is very sensitive.

You might also like