Example 3.2.15  Graetz Problem-Shooting Technique 

> restart:
 

> with(plots):
 

> eq:=diff(y(x),x$2)+1/x*diff(y(x),x)+lambda^2*(1-x^2)*y(x);
 

`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(`^`(lambda, 2), `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))) (1)
 

> eqlambda:=subs(y(x)=Y(x,lambda),eq);
 

`+`(diff(diff(Y(x, lambda), x), x), `/`(`*`(diff(Y(x, lambda), x)), `*`(x)), `*`(`^`(lambda, 2), `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(Y(x, lambda))))) (2)
 

> eqlambda:=diff(eqlambda,lambda);
 

`+`(diff(diff(diff(Y(x, lambda), lambda), x), x), `/`(`*`(diff(diff(Y(x, lambda), lambda), x)), `*`(x)), `*`(2, `*`(lambda, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(Y(x, lambda))))), `*`(`^`(lambda, 2), `... (3)
 

> eqlambda:=subs(diff(Y(x,lambda),lambda)=y2(x),eqlambda);
 

`+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(2, `*`(lambda, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(Y(x, lambda))))), `*`(`^`(lambda, 2), `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y2(x))... (4)
 

> eqlambda:=subs(Y(x,lambda)=y(x),eqlambda);
 

`+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(2, `*`(lambda, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `*`(`^`(lambda, 2), `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y2(x))))) (5)
 

> vars:=(y(x),y2(x));
 

y(x), y2(x) (6)
 

> lambda0:=1;
 

1 (7)
 

> eqs:=subs(lambda=lambda0,eq),subs(lambda=lambda0,eqlambda);
 

`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x)))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(2, `*`(`+`(1, `-`(`*`(`^`(... (8)
 

> e:=1e-6;
 

0.1e-5 (9)
 

> ICs:=(D(y)(0)=0,y(0)=1,y2(0)=0,D(y2)(0)=0);
 

(D(y))(0) = 0, y(0) = 1, y2(0) = 0, (D(y2))(0) = 0 (10)
 

> sol:=dsolve({eqs,ICs},{vars},type=numeric);
 

proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if... (11)
 

> sol(1);
 

[x = 1., y(x) = .820278359865142193, diff(y(x), x) = -.232215636108961648, y2(x) = -.344168805990258675, diff(y2(x), x) = -.429740911856239470]
[x = 1., y(x) = .820278359865142193, diff(y(x), x) = -.232215636108961648, y2(x) = -.344168805990258675, diff(y2(x), x) = -.429740911856239470]
(12)
 

> e:=1e-6;
 

0.1e-5 (13)
 

> ICs:=(D(y)(e)=0,y(e)=1,y2(e)=0,D(y2)(e)=0);
 

(D(y))(0.1e-5) = 0, y(0.1e-5) = 1, y2(0.1e-5) = 0, (D(y2))(0.1e-5) = 0 (14)
 

> sol:=dsolve({eqs,ICs},{vars},type=numeric);
 

proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if... (15)
 

> sol(1);
 

[x = 1., y(x) = .820278368333642871, diff(y(x), x) = -.232215714190456557, y2(x) = -.344168764106810410, diff(y2(x), x) = -.429741220668137802]
[x = 1., y(x) = .820278368333642871, diff(y(x), x) = -.232215714190456557, y2(x) = -.344168764106810410, diff(y2(x), x) = -.429741220668137802]
(16)
 

> ypred:=rhs(sol(1)[2]);
 

.820278368333642871 (17)
 

> y2pred:=rhs(sol(1)[4]);
 

-.344168764106810410 (18)
 

> lambda1:=lambda0+(0-ypred)/y2pred;
 

3.383360879 (19)
 

> err:=lambda1-lambda0;
 

2.383360879 (20)
 

> lambda0:=lambda1;
 

3.383360879 (21)
 

> k:=1;
 

1 (22)
 

> while err>1e-6 do
 

> eqs:=subs(lambda=lambda0,eq),subs(lambda=lambda0,eqlambda);
 

> sol:=dsolve({eqs,ICs},{vars},type=numeric);
 

> ypred:=rhs(sol(1)[2]);
 

> y2pred:=rhs(sol(1)[4]);
 

> lambda1:=lambda0+(0-ypred)/y2pred;
 

> err:=abs(lambda1-lambda0);
 

> lambda0:=lambda1;k:=k+1;
 

> end;
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(11.44713084, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(6.766721...
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(11.44713084, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(6.766721...
proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if...
-.301279205769952319
-.370977885391426232
2.571239139
.812121740
2.571239139
2
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(6.611270710, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.142478...
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(6.611270710, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.142478...
proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if...
0.676388401700673686e-1
-.514559657293676142
2.702689087
.131449948
2.702689087
3
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(7.304528301, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.405378...
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(7.304528301, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.405378...
proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if...
0.839192930248642546e-3
-.501097644968840461
2.704363796
0.1674709e-2
2.704363796
4
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(7.313583541, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.408727...
`+`(diff(diff(y(x), x), x), `/`(`*`(diff(y(x), x)), `*`(x)), `*`(7.313583541, `*`(`+`(1, `-`(`*`(`^`(x, 2)))), `*`(y(x))))), `+`(diff(diff(y2(x), x), x), `/`(`*`(diff(y2(x), x)), `*`(x)), `*`(5.408727...
proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; `:=`(_EnvDSNumericSaveDigits, Digits); `:=`(Digits, 14); if...
0.166400171246086464e-6
-.500899460370252791
2.704364128
0.332e-6
2.704364128
5 (23)
 

> lambda0;
 

2.704364128 (24)
 

> k;
 

5 (25)
 

> err;
 

0.332e-6 (26)
 

> odeplot(sol,[x,y(x)],e..1,axes=boxed,thickness=3,title="Figure Exp. 3.2.31");
 

Plot_2d
 

> tol:=1e-10;rho:=1/3;
 

 

0.1e-9
`/`(1, 3) (27)
 

> lambdaguess:=[1,5,9,13,17];
 

[1, 5, 9, 13, 17] (28)
 

> MM:=nops(lambdaguess);
 

5 (29)
 

> colorlist:=[black,red,blue,yellow,green];
 

[black, red, blue, yellow, green] (30)
 

> for i from 1 to MM do
 

> lambda0:=lambdaguess[i];
 

> k:=1;err:=1;
 

> while err>tol do
 

> eqs:=subs(lambda=lambda0,eq),subs(lambda=lambda0,eqlambda);
 

> sol:=dsolve({eqs,ICs},{vars},type=numeric);
 

> ypred:=rhs(sol(1)[2]);
 

> y2pred:=rhs(sol(1)[4]);
 

> lambda1:=lambda0+rho*(0-ypred)/y2pred;
 

> err:=abs(lambda1-lambda0);
 

> lambda0:=lambda1;k:=k+1;
 

> end:
 

> l[i]:=lambda0;
 

> kk[i]:=k;
 

> Err[i]:=err;
 

> p[i]:=odeplot(sol,[x,y(x)],e..1,axes=boxed,thickness=3,color=colorlist[i]);
 

> end:
 

> seq(l[i],i=1..MM);
 

2.704364127, 6.679031178, 10.67337916, 14.67107800, 18.66987135 (31)
 

> seq(kk[i],i=1..MM);
 

53, 51, 45, 44, 44 (32)
 

> seq(Err[i],i=1..MM);
 

0., 0., 0., 0., 0. (33)
 

> arw:=arrow(<0.5,0.8>,<-0.45,-0.6>,width=[1/250, relative], head_length=[0.05, relative]):
pt:=textplot([[0.8,0.95,"Follow the arrow"],seq([0.8,0.85-(i-1)*0.09,lambda=l[i]],i=1..MM)]);
 

PLOT(TEXT([.8, .95], (34)
 

> display({seq(p[i],i=1..MM),arw,pt},title="Figure Exp.3.2.32");
 

Plot_2d
 

>