Example 6.6 Final rev.mw

 

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

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

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

> bc1:=u(x,y);
 

u(x, y) (2)
 

> bc2:=u(x,y);
 

u(x, y) (3)
 

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

u(x, y) = 0 (4)
 

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

`+`(u(x, y), `-`(1)) = 0 (5)
 

> L:=1;H:=1;
 

 

1
1 (6)
 

> N:=10;
 

10 (7)
 

> 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))) (8)
 

> 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))) (9)
 

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

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

> 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))) (11)
 

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

u[0](y) (12)
 

> 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) (13)
 

> eq[0]:=bc1;
 

u[0](y) (14)
 

> eq[N+1]:=bc2;
 

u[11](y) (15)
 

> 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)))))
diff(diff(u[2](y), y), y) = `+`(`-`(`/`(`*`(u[1](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[2](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[3](y)), `*`(`^`(h, 2)))))
diff(diff(u[3](y), y), y) = `+`(`-`(`/`(`*`(u[2](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[3](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[4](y)), `*`(`^`(h, 2)))))
diff(diff(u[4](y), y), y) = `+`(`-`(`/`(`*`(u[3](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[4](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[5](y)), `*`(`^`(h, 2)))))
diff(diff(u[5](y), y), y) = `+`(`-`(`/`(`*`(u[4](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[5](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[6](y)), `*`(`^`(h, 2)))))
diff(diff(u[6](y), y), y) = `+`(`-`(`/`(`*`(u[5](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[6](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[7](y)), `*`(`^`(h, 2)))))
diff(diff(u[7](y), y), y) = `+`(`-`(`/`(`*`(u[6](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[7](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[8](y)), `*`(`^`(h, 2)))))
diff(diff(u[8](y), y), y) = `+`(`-`(`/`(`*`(u[7](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[8](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[9](y)), `*`(`^`(h, 2)))))
diff(diff(u[9](y), y), y) = `+`(`-`(`/`(`*`(u[8](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[9](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[10](y)), `*`(`^`(h, 2)))))
diff(diff(u[10](y), y), y) = `+`(`-`(`/`(`*`(u[9](y)), `*`(`^`(h, 2)))), `/`(`*`(2, `*`(u[10](y))), `*`(`^`(h, 2))), `-`(`/`(`*`(u[11](y)), `*`(`^`(h, 2))))) (16)
 

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

0 (17)
 

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

0 (18)
 

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

`/`(1, 11) (19)
 

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

 

 

 

 

 

 

 

 

 

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

> 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) = 0, u[2](0) = 0, u[3](0) = 0, u[4](0) = 0, u[5](0) = 0, u[6](0) = 0, u[7](0) = 0, u[8](0) = 0, u[9](0) = 0, u[10](0) = 0 (21)
 

> 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);
 

`+`(u[1](1), `-`(1)) = 0, `+`(u[2](1), `-`(1)) = 0, `+`(u[3](1), `-`(1)) = 0, `+`(u[4](1), `-`(1)) = 0, `+`(u[5](1), `-`(1)) = 0, `+`(u[6](1), `-`(1)) = 0, `+`(u[7](1), `-`(1)) = 0, `+`(u[8](1), `-`(1...
`+`(u[1](1), `-`(1)) = 0, `+`(u[2](1), `-`(1)) = 0, `+`(u[3](1), `-`(1)) = 0, `+`(u[4](1), `-`(1)) = 0, `+`(u[5](1), `-`(1)) = 0, `+`(u[6](1), `-`(1)) = 0, `+`(u[7](1), `-`(1)) = 0, `+`(u[8](1), `-`(1...
(22)
 

> BCS:=BC3,BC4;
 

u[1](0) = 0, u[2](0) = 0, u[3](0) = 0, u[4](0) = 0, u[5](0) = 0, u[6](0) = 0, u[7](0) = 0, u[8](0) = 0, u[9](0) = 0, u[10](0) = 0, `+`(u[1](1), `-`(1)) = 0, `+`(u[2](1), `-`(1)) = 0, `+`(u[3](1), `-`(...
u[1](0) = 0, u[2](0) = 0, u[3](0) = 0, u[4](0) = 0, u[5](0) = 0, u[6](0) = 0, u[7](0) = 0, u[8](0) = 0, u[9](0) = 0, u[10](0) = 0, `+`(u[1](1), `-`(1)) = 0, `+`(u[2](1), `-`(1)) = 0, `+`(u[3](1), `-`(...
u[1](0) = 0, u[2](0) = 0, u[3](0) = 0, u[4](0) = 0, u[5](0) = 0, u[6](0) = 0, u[7](0) = 0, u[8](0) = 0, u[9](0) = 0, u[10](0) = 0, `+`(u[1](1), `-`(1)) = 0, `+`(u[2](1), `-`(1)) = 0, `+`(u[3](1), `-`(...
(23)
 

> 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(
(24)
 

> 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));
 

0 (25)
 

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

0 (26)
 

> 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.17.");
 

Plot_2d
 

> M:=20;
 

20 (27)
 

> 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.5000000000e-1, .1000000000, .1500000000, .2000000000, .2500000000, .3000000000, .3500000000, .4000000000, .4500000000, .5000000000, .5500000000, .6000000000, .6500000000, .7000000000, .75000000...
[0., 0.5000000000e-1, .1000000000, .1500000000, .2000000000, .2500000000, .3000000000, .3500000000, .4000000000, .4500000000, .5000000000, .5500000000, .6000000000, .6500000000, .7000000000, .75000000...
[0., 0.5000000000e-1, .1000000000, .1500000000, .2000000000, .2500000000, .3000000000, .3500000000, .4000000000, .4500000000, .5000000000, .5500000000, .6000000000, .6500000000, .7000000000, .75000000...
(28)
 

> 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.18."):
end do:
 

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

Plot_2d
 

> Ny:=30;
 

30 (29)
 

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

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

> 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.19.",labels=[x,y,u],orientation=[-145,60]);
 

Plot
 

(31)
 

>