function ppde1dbc % ppde-dbc.m MCS571 Test for u_t= A*u_{xx}, u_x(a,t)=0; % u_x(b,t)=-B*(u-TA)/K; u(x,0)=0 % clc % clear variables, but must come before globals, clf % clear figures % fprintf('\nDerivative BCs PPDE by Artificial Nodes Treatment (MATLAB6.5):') scrsize = get(0,'ScreenSize'); ss = [3.3,3.1,2.9]; f=0; m = 7; n=15; a=0; b=2; h = (b-a)/(m+1); A=1; B=1; K=1; BDK=B/K; TA=100; X=h*(0:m+1)'; U=zeros(m+2,n+1); % Global U with (1,1) subscript base in stead of (0,0) U(:,1) = u0(X); j=0; fprintf('\nj=%2i: [%f %f %f %f %f %f %f %f %f]',j,U(:,j+1)); rv=[0.25,0.5]; % Marginally Stable, Stable, Unstable Cases; stitle = {'PPDE EEM: u_t=A*u_{xx}, r = 0.25, Stable' ... ,'PPDE EEM: u_t=A*u_{xx}, r = 0.5, Unstable'}; for ir = 1:2 r=rv(ir); k=r*h^2; ar = A*r; ar2=ar*2; ar2m = ar2*(1+h*BDK); fprintf('\n m=%i; n=%i; h=%f; r=%f; k=%f; 2*A*r=%f; 2*A*r*(1+h*BDK)=%f;' ... ,m,n,h,r,k,ar2,ar2m); for j=1:n UL = U(1,j); UR = U(m+1,j)-2*h*BDK*(U(m+2,j)-TA); U(1,j+1) = (1-2*ar)*U(1,j)+ar*(U(2,j)+UL); % LBC Using Artificial UL; U(2:m+1,j+1) = (1-2*ar)*U(2:m+1,j)+ar*(U(3:m+2,j)+U(1:m,j)); % Usual Euler FFD(t)=CFD(x) U(m+2,j+1) = (1-2*ar)*U(m+2,j)+ar*(UR+U(m+1,j));% RBC Using Artificial UR; fprintf('\nj=%2i: [%f %f %f %f %f %f %f %f %f]',j,U(:,j+1)); end f=f+1; figure(f); plot(X,U(:,1),'b-',X,U(:,2),'b-',X,U(:,3),'b-',X,U(:,4),'b-',X,U(:,5),'b-' ... ,X,U(:,6),'b-',X,U(:,7),'b-',X,U(:,8),'b-',X,U(:,9),'b-',X,U(:,10),'b-' ... ,X,U(:,11),'b-',X,U(:,12),'b-',X,U(:,13),'b-',X,U(:,14),'b-',X,U(:,15),'b-' ... ,X,U(:,16),'b-','LineWidth',2); % max input arguments! htitle=title(stitle(ir)); hxlabel = xlabel('x_i=a+i*h, i=0:m+1'); hylabel = ylabel('U(x_i,t_j), j=0:n'); htext = text(0.25,35,'Derivative BC by Artificial Nodes'); set(gca,'Fontsize',20,'FontName','Helvetica','FontWeight','Bold' ... ,'linewidth',2); set(htitle,'Fontsize',20,'FontName','Helvetica','FontWeight','Bold'); set(hylabel,'Fontsize',20,'FontName','Helvetica','FontWeight','Bold') set(hxlabel,'Fontsize',20,'FontName','Helvetica','FontWeight','Bold'); set(htext,'Fontsize',16,'FontName','Times New Roman','FontWeight','Bold'); set(gcf,'Color','White','Position' ... ,[scrsize(3)/ss(ir) 35 scrsize(3)*0.60 scrsize(4)*0.86]); % MATLAB defines the figure Position property as a vector. % [left bottom width height] end % r for loop %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function u0v = u0(x) u0v = 0; % END u0