Example 6.7 Rev 2.mw

> restart:with(linalg):with(plots):
 

> ge:=diff(u(x,y),y$2)=-diff(u(x,y),x$2)+u(x,y)^2;
 

diff(diff(u(x, y), y), y) = `+`(`-`(diff(diff(u(x, y), x), x)), `*`(`^`(u(x, y), 2))) (1)
 

> Digits:=50;
 

50 (2)
 

> bc1:=diff(u(x,y),x);
 

diff(u(x, y), x) (3)
 

> bc2:=u(x,y)-1;
 

`+`(u(x, y), `-`(1)) (4)
 

> bc3:=u(x,y)-0;
 

u(x, y) (5)
 

> bc4:=diff(u(x,y),y);
 

diff(u(x, y), y) (6)
 

> L:=1;
 

1 (7)
 

> H:=1;
 

1 (8)
 

> N:=10;
 

10 (9)
 

> fd1:=(1/2)*(-u[m+2](y)-3*u[m](y)+4*u[m+1](y))/h;
 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`-`(u[`+`(m, 2)](y)), `-`(`*`(3, `*`(u[m](y)))), `*`(4, `*`(u[`+`(m, 1)](y)))))), `*`(h))) (10)
 

> bd1:=(1/2)*(u[m-2](y)+3*u[m](y)-4*u[m-1](y))/h;
 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(u[`+`(m, `-`(2))](y), `*`(3, `*`(u[m](y))), `-`(`*`(4, `*`(u[`+`(m, `-`(1))](y))))))), `*`(h))) (11)
 

> cd1:=(u[m+1](y)-u[m-1](y))/h^2;
 

`/`(`*`(`+`(u[`+`(m, 1)](y), `-`(u[`+`(m, `-`(1))](y)))), `*`(`^`(h, 2))) (12)
 

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

`/`(`*`(`+`(u[`+`(m, `-`(1))](y), `-`(`*`(2, `*`(u[m](y)))), u[`+`(m, 1)](y))), `*`(`^`(h, 2))) (13)
 

> bc1:=subs(diff(u(x,y),x)=subs(m =0,fd1),u(x,y)=u[0](y),x=0,bc1);
 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`-`(u[2](y)), `-`(`*`(3, `*`(u[0](y)))), `*`(4, `*`(u[1](y)))))), `*`(h))) (14)
 

> bc2:=subs(diff(u(x,y),x)=subs(m=N+1,bd1),u(x,y)=u[N+1](y),x=1,bc2);
 

`+`(u[11](y), `-`(1)) (15)
 

> eq[0]:=bc1;
 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`-`(u[2](y)), `-`(`*`(3, `*`(u[0](y)))), `*`(4, `*`(u[1](y)))))), `*`(h))) (16)
 

> eq[N+1]:=bc2;
 

`+`(u[11](y), `-`(1)) (17)
 

> for i from 1 to N do
 eq[i]:=diff(u[i](y),y$2)=expand(subs(diff(u(x,y),x$2)=subs(m=i,cd2),diff(u(x,y),x)=subs(m=i,cd1),diff(u(x,y),y)=u[N+1+i](y),u(x,y)=u[i](y),x=i*h,rhs(ge)));
end do;
 

 

 

 

 

 

 

 

 

 

diff(diff(u[1](y), y), y) = `+`(`-`(`/`(`*`(u[0](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[1](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[2](y)), `*`(`^`(h, 2)))), `*`(`^`(u[1](y), 2)))
diff(diff(u[2](y), y), y) = `+`(`-`(`/`(`*`(u[1](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[2](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[3](y)), `*`(`^`(h, 2)))), `*`(`^`(u[2](y), 2)))
diff(diff(u[3](y), y), y) = `+`(`-`(`/`(`*`(u[2](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[3](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[4](y)), `*`(`^`(h, 2)))), `*`(`^`(u[3](y), 2)))
diff(diff(u[4](y), y), y) = `+`(`-`(`/`(`*`(u[3](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[4](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[5](y)), `*`(`^`(h, 2)))), `*`(`^`(u[4](y), 2)))
diff(diff(u[5](y), y), y) = `+`(`-`(`/`(`*`(u[4](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[5](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[6](y)), `*`(`^`(h, 2)))), `*`(`^`(u[5](y), 2)))
diff(diff(u[6](y), y), y) = `+`(`-`(`/`(`*`(u[5](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[6](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[7](y)), `*`(`^`(h, 2)))), `*`(`^`(u[6](y), 2)))
diff(diff(u[7](y), y), y) = `+`(`-`(`/`(`*`(u[6](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[7](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[8](y)), `*`(`^`(h, 2)))), `*`(`^`(u[7](y), 2)))
diff(diff(u[8](y), y), y) = `+`(`-`(`/`(`*`(u[7](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[8](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[9](y)), `*`(`^`(h, 2)))), `*`(`^`(u[8](y), 2)))
diff(diff(u[9](y), y), y) = `+`(`-`(`/`(`*`(u[8](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[9](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[10](y)), `*`(`^`(h, 2)))), `*`(`^`(u[9](y), 2)))
diff(diff(u[10](y), y), y) = `+`(`-`(`/`(`*`(u[9](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[10](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[11](y)), `*`(`^`(h, 2)))), `*`(`^`(u[10](y), 2))) (18)
 

> u[0](y):=(solve(eq[0],u[0](y)));
 

`+`(`-`(`*`(`/`(1, 3), `*`(u[2](y)))), `*`(`/`(4, 3), `*`(u[1](y)))) (19)
 

> u[N+1](y):=solve(eq[N+1],u[N+1](y));
 

1 (20)
 

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

`/`(1, 11) (21)
 

> for i from 1 to N do
 eq[i]:=eval(eq[i]);
end do;
 

 

 

 

 

 

 

 

 

 

diff(diff(u[1](y), y), y) = `+`(`-`(`*`(`/`(242, 3), `*`(u[2](y)))), `*`(`/`(242, 3), `*`(u[1](y))), `*`(`^`(u[1](y), 2)))
diff(diff(u[2](y), y), y) = `+`(`-`(`*`(121, `*`(u[1](y)))), `*`(242, `*`(u[2](y))), `-`(`*`(121, `*`(u[3](y)))), `*`(`^`(u[2](y), 2)))
diff(diff(u[3](y), y), y) = `+`(`-`(`*`(121, `*`(u[2](y)))), `*`(242, `*`(u[3](y))), `-`(`*`(121, `*`(u[4](y)))), `*`(`^`(u[3](y), 2)))
diff(diff(u[4](y), y), y) = `+`(`-`(`*`(121, `*`(u[3](y)))), `*`(242, `*`(u[4](y))), `-`(`*`(121, `*`(u[5](y)))), `*`(`^`(u[4](y), 2)))
diff(diff(u[5](y), y), y) = `+`(`-`(`*`(121, `*`(u[4](y)))), `*`(242, `*`(u[5](y))), `-`(`*`(121, `*`(u[6](y)))), `*`(`^`(u[5](y), 2)))
diff(diff(u[6](y), y), y) = `+`(`-`(`*`(121, `*`(u[5](y)))), `*`(242, `*`(u[6](y))), `-`(`*`(121, `*`(u[7](y)))), `*`(`^`(u[6](y), 2)))
diff(diff(u[7](y), y), y) = `+`(`-`(`*`(121, `*`(u[6](y)))), `*`(242, `*`(u[7](y))), `-`(`*`(121, `*`(u[8](y)))), `*`(`^`(u[7](y), 2)))
diff(diff(u[8](y), y), y) = `+`(`-`(`*`(121, `*`(u[7](y)))), `*`(242, `*`(u[8](y))), `-`(`*`(121, `*`(u[9](y)))), `*`(`^`(u[8](y), 2)))
diff(diff(u[9](y), y), y) = `+`(`-`(`*`(121, `*`(u[8](y)))), `*`(242, `*`(u[9](y))), `-`(`*`(121, `*`(u[10](y)))), `*`(`^`(u[9](y), 2)))
diff(diff(u[10](y), y), y) = `+`(`-`(`*`(121, `*`(u[9](y)))), `*`(242, `*`(u[10](y))), `-`(121), `*`(`^`(u[10](y), 2))) (22)
 

> BC3:=seq(subs(diff(u(x,y),y)=(D(u[i]))(0),u(x,y)=u[i](0),x=i*h,bc3),i=1..N);
 

u[1](0), u[2](0), u[3](0), u[4](0), u[5](0), u[6](0), u[7](0), u[8](0), u[9](0), u[10](0) (23)
 

> BC4:=seq(subs(diff(u(x,y),y)=(D(u[i]))(H),u(x,y)=u[i](H),x = i*h,bc4),i=1..N);
 

(D(u[1]))(1), (D(u[2]))(1), (D(u[3]))(1), (D(u[4]))(1), (D(u[5]))(1), (D(u[6]))(1), (D(u[7]))(1), (D(u[8]))(1), (D(u[9]))(1), (D(u[10]))(1)
(D(u[1]))(1), (D(u[2]))(1), (D(u[3]))(1), (D(u[4]))(1), (D(u[5]))(1), (D(u[6]))(1), (D(u[7]))(1), (D(u[8]))(1), (D(u[9]))(1), (D(u[10]))(1)
(24)
 

> BCS:=BC3,BC4;
 

u[1](0), u[2](0), u[3](0), u[4](0), u[5](0), u[6](0), u[7](0), u[8](0), u[9](0), u[10](0), (D(u[1]))(1), (D(u[2]))(1), (D(u[3]))(1), (D(u[4]))(1), (D(u[5]))(1), (D(u[6]))(1), (D(u[7]))(1), (D(u[8]))(1...
u[1](0), u[2](0), u[3](0), u[4](0), u[5](0), u[6](0), u[7](0), u[8](0), u[9](0), u[10](0), (D(u[1]))(1), (D(u[2]))(1), (D(u[3]))(1), (D(u[4]))(1), (D(u[5]))(1), (D(u[6]))(1), (D(u[7]))(1), (D(u[8]))(1...
(25)
 

> sol:=dsolve({BCS,seq(eq[i],i=1..N)},type=numeric,output=listprocedure,abserr = 0.1e-8);
 

[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
[y = proc (y) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; `:=`(data, eval(`dsolve/numeric/data/modules`[1])); `:=`(solnproc, data:-Get(
(26)
 

> for i from 1 to N do
 U[i]:=subs(sol,u[i](y));
od:
 

> U[0]:=subs(u[1](y)=U[1],u[2](y)=U[2],u[0](y));
 

`+`(`-`(`*`(`/`(1, 3), `*`(U[2]))), `*`(`/`(4, 3), `*`(U[1]))) (27)
 

> U[N+1]:=subs(u[N](y)=U[N],u[N-1](y)=U[N-1],u[N+1](y));
 

1 (28)
 

> for i from 0 to N+1 do
 py[i]:=plot(U[i](y),y=0..H,thickness=4):
end do:
 

> display({seq(py[i],i=0..N+1)},labels=[y,"u"],axes=boxed,title="Fig. Exp. 6.20.");
 

Plot_2d
 

> M:=20;
 

20 (29)
 

> for i from 1 to N do
 fy[i]:=subs(sol,u[i](y)):
end do:
 

> T1:=[seq(evalf(i*H/M),i=0..M)];
 

[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
[0., 0.50000000000000000000000000000000000000000000000000e-1, .10000000000000000000000000000000000000000000000000, .15000000000000000000000000000000000000000000000000, .2000000000000000000000000000000...
(30)
 

> for j from 1 to M+1 do
 P[j]:=plot([seq([h*i,U[i](T1[j])],i=0..N+1)],style=line,thickness=3,axes=boxed,title="Fig. Exp. 6.21."):
end do:
 

> display({seq(P[i],i=1..M+1)},labels=[x,u]);
 

Plot_2d
 

> Ny:=30;
 

30 (31)
 

> PP:=matrix(N+2,Ny);
 

array( 1 .. 12, 1 .. 30, [ ] ) (32)
 

> for i from 1 to N+2 do
 for j from 1 to M+1 do
   PP[i,j]:=evalf(subs(t=T1[j],U[i-1](t))):
 end do:
end do:
 

> plotdata:=[seq([seq([(i-1)*h,T1[j],PP[i,j]],i=1..N+2)],j=1..M+1)]:
 

> surfdata(plotdata,axes=boxed,title="Fig. Exp. 6.22.",labels=[x,y,u],orientation=[-145,60]);
 

Plot
 

>