| > | restart: with(linalg): with(plots): |
| > | ge:=diff(u(x,y),y$2)=-diff(u(x,y),x$2); |
| (1) |
| > | bc1:=u(x,y); |
| (2) |
| > | bc2:=u(x,y); |
| (3) |
| > | bc3:=u(x,y)=0; |
| (4) |
| > | bc4:=u(x,y)-1=0; |
| (5) |
| > | L:=1;H:=1; |
| (6) |
| > | N:=10; |
| (7) |
| > | fd1:=(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; |
| (9) |
| > | cd1:=(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; |
| (11) |
| > | bc1:=subs(diff(u(x,y),x)=subs(m =0,fd1),u(x,y)=u[0](y),x=0,bc1); |
| (12) |
| > | bc2:=subs(diff(u(x,y),x)=subs(m=N+1,bd1),u(x,y)=u[N+1](y),x=1,bc2); |
| (13) |
| > | eq[0]:=bc1; |
| (14) |
| > | eq[N+1]:=bc2; |
| (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; |
| (16) |
| > | u[0](y):=(solve(eq[0],u[0](y))); |
| (17) |
| > | u[N+1](y):=solve(eq[N+1],u[N+1](y)); |
| (18) |
| > | h:=1/(N+1); |
| (19) |
| > | for i from 1 to N do
eq[i]:=eval(eq[i]); end do; |
| (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); |
| (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); |
| (22) |
| > | BCS:=BC3,BC4; |
| (23) |
| > | sol:=dsolve({BCS,seq(eq[i],i=1..N)},type=numeric,output=listprocedure,abserr = 0.1e-8); |
| (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)); |
| (25) |
| > | U[N+1]:=subs(u[N](y)=U[N],u[N-1](y)=U[N-1],u[N+1](y)); |
| (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."); |
![]() |
| > | M:=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)]; |
| (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]); |
![]() |
| > | Ny:=30; |
| (29) |
| > | PP:=matrix(N+2,Ny); |
| (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]); |
![]() |
| (31) |
| > |