Page 458 - Applied Numerical Methods Using MATLAB
P. 458
PROBLEMS 447
function [u,x,y] = poisson_Neuman(f,g,bx0,bxf,by0,byf,x0,xf,y0,yf,...)
.. .. .. .. .. .. .. ..
Neum = zeros(1,4); %Not Neumann, but Dirichlet condition by default
if length(x0) > 1, Neum(1) = x0(2); x0 = x0(1); end
if length(xf) > 1, Neum(2) = xf(2); xf = xf(1); end
if length(y0) > 1, Neum(3) = y0(2); y0 = y0(1); end
if length(yf) > 1, Neum(4) = yf(2); yf = yf(1); end
.. .. .. .. .. .. .. ..
dx_2 = dx*dx; dy_2 = dy*dy; dxy2=2*(dx_2 + dy_2);
rx = dx_2/dxy2; ry = dy_2/dxy2; rxy = rx*dy_2; rx = rx;
dx2 = dx*2; dy2 = dy*2; rydx = ry*dx2; rxdy = rx*dy2;
u(1:My1,1:Mx1) = zeros(My1,Mx1);
sum_of_bv = 0; num = 0;
if Neum(1) == 0 %Dirichlet boundary condition
for m = 1:My1, u(m,1) = bx0(y(m)); end %side a
else %Neumann boundary condition
for m = 1:My1, duxa(m) = bx0(y(m)); end %du/dx(x0,y)
end
if Neum(2) == 0 %Dirichlet boundary condition
.. .. .. .. .. .. .. .. .. .. ..
end
if Neum(3) == 0 %Dirichlet boundary condition
n1 = 1; nM1 = Mx1;
if Neum(1) == 0, u(1,1)=(u(1,1) + by0(x(1)))/2; n1 = 2; end
if Neum(2) == 0, u(1,Mx1)=(u(1,Mx1) + by0(x(Mx1)))/2; nM1 = Mx; end
for n = n1:nM1, u(1,n) = by0(x(n)); end %side c
else %Neumann boundary condition
for n = 1:Mx1, duyc(n) = by0(x(n)); end %du/dy(x,y0)
end
if Neum(4) == 0 %Dirichlet boundary condition
.. .. .. .. .. .. .. .. .. .. ..
end
for itr = 1:imax
if Neum(1) %Neumann boundary condition
for i = 2:My
u(i,1) = 2*ry*u(i,2) + rx*(u(i + 1,1) + u(i-1,1)) ...
+ rxy*(G(i,1)*u(i,1) - F(i,1)) - rydx*duxa(i); %(9.1.9)
end
if Neum(3), u(1,1) = 2*(ry*u(1,2) +rx*u(2,1)) ...
+ rxy*(G(1,1)*u(1,1) - F(1,1)) - rydx*duxa(1) - rxdy*duyc(1);%(9.1.11)
end
if Neum(4), u(My1,1) = 2*(ry*u(My1,2) +rx*u(My,1)) ...
+ rxy*(G(My1,1)*u(My1,1)- F(My1,1))+rxdy*duyd(1)- rydx*duxa(My1);
end
end
if Neum(2) %Neumann boundary condition
.. .. .. .. .. .. .. .. .. .. .. .. ..
end
if Neum(3) %Neumann boundary condition
for j = 2:Mx
u(1,j) = 2*rx*u(2,j)+ry*(u(1,j+1) + u(1,j-1)) ...
+rxy*(G(1,j)*u(1,j) - F(1,j)) - rxdy*duyc(j); %(9.1.10)
end
end
if Neum(4) %Neumann boundary condition
.. .. .. .. .. .. .. .. .. .. .. .. ..
end
.. .. .. .. .. .. .. .. .. .. .. .. ..
end

