Example 3.2.5 Multiple Steady States in a Catalyst Pellet
The catalyst pellet problem solved in example 3.2.2 is solved here using the shooting technique. The Maple program is given below:
The governing equation is entered here (after substituting the parameter values):
| > |
eq:=diff(y(x),x$2)-0.04*y(x)*exp(16*(1-y(x))/(1+0.8*(1-y(x)))); |
 |
(1) |
| > |
eqalpha:=subs(y(x)=Y(x,alpha),eq): |
| > |
eqalpha:=diff(eqalpha,alpha): |
| > |
eqalpha:=subs(diff(Y(x,alpha),alpha)=y2(x),eqalpha): |
The sensitivity equation is:
| > |
eqalpha:=subs(Y(x,alpha)=y(x),eqalpha); |

 |
(2) |
The variables are stored in vars:
 |
(3) |
The governing equations are stored in eqs:

 |
(4) |
The boundary value problem has multiple solutions. The solution obtained depends on the initial guess provided for α. An initial guess of 0.9 is given:
 |
(5) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
 |
(6) |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric,abserr=1e-10); |
 |
(7) |
![[x = 1., y(x) = .968526696660516496, diff(y(x), x) = .119738543547597192, y2(x) = .230740415090328915, diff(y2(x), x) = -1.20071140540140586]](images/Example3.2.5 Rev 1_10.gif)
![[x = 1., y(x) = .968526696660516496, diff(y(x), x) = .119738543547597192, y2(x) = .230740415090328915, diff(y2(x), x) = -1.20071140540140586]](images/Example3.2.5 Rev 1_11.gif) |
(8) |
 |
(9) |
| > |
y2pred:=rhs(sol(1)[4]); |
 |
(10) |
The new value of α is obtained as:
| > |
alpha1:=alpha0+(1-ypred)/y2pred; |
 |
(11) |
For this example, the error is calculated based on the boundary condition at x = 1.
 |
(12) |
 |
(13) |
 |
(14) |
The iteration is performed until the error becomes less than the tolerance limit 1e - 10.
 |
(15) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric); |
| > |
y2pred:=rhs(sol(1)[4]); |
| > |
alpha1:=alpha0+(1-ypred)/y2pred; |
 |
(16) |
The problem has converged after six iterations. The concentration at the center of the particle (x = 0) is given by:
 |
(17) |
The error obtained is:
 |
(18) |
Next, the solution obtained is plotted and stored in p1.
| > |
p1:=odeplot(sol,[x,y(x)],0..1,axes=boxed,thickness=3,color=blue): |
The same steps are performed for a different initial guess of 0.5. The solution obtained is stored in p2.
 |
(19) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
 |
(20) |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric,abserr=1e-10); |
 |
(21) |
![[x = 1., y(x) = 1.58640607813000578, diff(y(x), x) = 1.25197150063613450, y2(x) = -3.60417190050730118, diff(y2(x), x) = -4.84304330565780372]](images/Example3.2.5 Rev 1_25.gif)
![[x = 1., y(x) = 1.58640607813000578, diff(y(x), x) = 1.25197150063613450, y2(x) = -3.60417190050730118, diff(y2(x), x) = -4.84304330565780372]](images/Example3.2.5 Rev 1_26.gif) |
(22) |
 |
(23) |
| > |
y2pred:=rhs(sol(1)[4]); |
 |
(24) |
| > |
alpha1:=alpha0+(1-ypred)/y2pred; |
 |
(25) |
 |
(26) |
 |
(27) |
 |
(28) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric); |
| > |
y2pred:=rhs(sol(1)[4]); |
| > |
alpha1:=alpha0+(1-ypred)/y2pred; |
 |
(29) |
The problem has converged after eight iterations. The concentration at the center of the particle (x = 0) is given by:
 |
(30) |
 |
(31) |
| > |
p2:=odeplot(sol,[x,y(x)],0..1,axes=boxed,thickness=3,color=green): |
Next, an initial guess of 1e - 4 is used. For this case the updated α becomes a negative. Hence, a scaling factor of ρ=0.2 is used:
 |
(32) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
 |
(33) |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric,abserr=1e-10); |
 |
(34) |
![[x = 1., y(x) = 2.05172720318686918, diff(y(x), x) = 3.91761302634986297, y2(x) = 2299.96672316761942, diff(y2(x), x) = -0.636497432250418376e-2]](images/Example3.2.5 Rev 1_39.gif)
![[x = 1., y(x) = 2.05172720318686918, diff(y(x), x) = 3.91761302634986297, y2(x) = 2299.96672316761942, diff(y2(x), x) = -0.636497432250418376e-2]](images/Example3.2.5 Rev 1_40.gif) |
(35) |
 |
(36) |
| > |
y2pred:=rhs(sol(1)[4]); |
 |
(37) |
| > |
alpha1:=alpha0+(1-ypred)/y2pred; |
 |
(38) |
 |
(39) |
| > |
alpha1:=alpha0+rho*(1-ypred)/y2pred; |
 |
(40) |
 |
(41) |
 |
(42) |
 |
(43) |
| > |
ICs:=(y(0)=alpha0,D(y)(0)=0,y2(0)=1,D(y2)(0)=0); |
| > |
sol:=dsolve({eqs,ICs},{vars},type=numeric); |
| > |
y2pred:=rhs(sol(1)[4]); |
| > |
alpha1:=alpha0+rho*(1-ypred)/y2pred; |
The problem has converged after 93 iterations. The concentration at the center particle (x = 0) is given by:
 |
(44) |
 |
(45) |
 |
(46) |
| > |
p3:=odeplot(sol,[x,y(x)],0..1,title="Figure Exp. 3.2.9",axes=boxed,thickness=4,color=brown): |
| > |
display({p1},{p2},{p3}); |
Hence, we observe that the shooting technique can predict three multiple states in a catalyst pellet. The number of iterations required to obtain a converged solution depends on the initial guess and the scaling factor ρ.