Example 3.7b

> | restart:

> | with(linalg):with(plots):

> | N:=4;

| (1)

> | L:=1;

| (2)

> | eq:=diff(y(x),x$2)-Pe*diff(y(x),x);

| (3)

> | bc1:=y(x)=1;

| (4)

> | bc2:=y(x)=0;

| (5)

The central difference expression for the second and first derivatives are

> | d2ydx2:=(y[m+1]-2*y[m]+y[m-1])/h^2;

| (6)

> | dydx:=(y[m]-y[m-1])/h;

| (7)

The governing equation in finite difference form is:

> | Eq[m]:=subs(diff(y(x),x$2)=d2ydx2,diff(y(x),x)=dydx,y(x)=y[m],x=m*h,eq);

| (8)

A 'for loop' can be written for the interior node points as

> | for i to N do Eq[i]:=subs(m=i,Eq[m]);od;

| (9)

> | Eq[0]:=y[0]=1;

| (10)

> | Eq[N+1]:=y[N+1]=0;

| (11)

> | y[0]:=solve(Eq[0],y[0]);

| (12)

> | y[N+1]:=solve(Eq[N+1],y[N+1]);

| (13)

> | h:=L/(N+1);

| (14)

> | for i to N do Eq[i]:=eval(Eq[i]);od;

| (15)

> | eqs:=[seq(Eq[i],i=1..N)];

| (16)

> | vars:=[seq(y[i],i=1..N)];

| (17)

> | A:=genmatrix(eqs,vars,'B1');

| (18)

> | evalm(B1);

| (19)

Maple generates a row vector which can be converted to a column vector as:

> | B:=matrix(N,1):for i to N do B[i,1]:=B1[i]:od:evalm(B);

| (20)

The solution is obtained as:

> | X:=evalm(inverse(A)&*B);

| (21)

> | h:=L/(N+1);

| (22)

> | for i to N do y[i]:=X[i,1];od;

| (23)

> | y[0]:=eval(y[0]);y[N+1]:=eval(y[N+1]);

| (24)

> | ya:=(exp(Pe)-exp(Pe*x))/(exp(Pe)-1);

| (25)

> | p1:=plot([seq([i*h,subs(Pe=1,y[i])],i=0..N+1)],thickness=4,color=blue,axes=boxed):

> | p2:=plot(subs(Pe=1,ya),x=0..1,thickness=5,color=brown,axes=boxed,linestyle=2):

> | display({p1,p2},title="Figure Exp. 3.1.11.",labels=[x,"y"]);

> | p1:=plot([seq([i*h,subs(Pe=50,y[i])],i=0..N+1)],thickness=4,color=green,axes=boxed):

> | p2:=plot(subs(Pe=50,ya),x=0..1,thickness=5,color=brown,axes=boxed,linestyle=2):

> | display({p1,p2},title="Figure Exp. 3.1.12.",labels=[x,"y"]);

We observe that when the forward difference accurate to the order h2 is used, even when the Peclet number is 1, there is a slight discrepancy between the finite difference solution and the analytical solution. However, when the Peclet number is high (Pe = 50) the forward difference scheme does not five an unrealistic oscillation like the central difference scheme. Note that for three digit accuracy with the analytical solution, N = 40 and 110 interior note points are required for central difference and forward difference approximations, respectively.

> |