function fig214 % code to solve the BVP % y'' = f(x, y, y') for x0 < x < x1 ' % y(x0) = y0 , y(x1) = y1 % get(gcf) set(gcf,'Position', [654 548 573 199]); % set boundary conditions x0 = 0.0; y0 = 1.0; x1 = 1.0; y1 = -1.0; % parameters for calculation nx = 600; error = 0.000001; % start off with a linear solution x=linspace(x0,x1,nx+2); gam=1; for ix=1:nx+2 % y(ix)=-gam*x(ix)*(1-x(ix)); y(ix)=1-2*x(ix); end; dx=x(2)-x(1); dxx = dx*dx; err=1; counter=0; while err > error % calculate the coefficients of finite difference equation a=zeros(1,nx); c=zeros(1,nx); v=zeros(1,nx); u=zeros(1,nx); for j = 2:nx+1 jj=j-1; z = (y(j+1) - y(j-1))/(2*dx); a(jj) = 2 + dxx*fy(x(j), y(j), z); c(jj) = -1 - 0.5*dx*fz(x(j), y(j), z); v(jj) = - 2*y(j) + y(j+1) + y(j-1) - dxx*f(x(j), y(j), z); end; % Newton iteration v(1) = v(1)/a(1); u(1) = - (2 + c(1))/a(1); for j = 2:nx xl = a(j) - c(j)*u(j-1); v(j) = (v(j) - c(j)*v(j-1))/xl; u(j) = - (2 + c(j))/xl; end; vv = v(nx); y(nx+1) = y(nx+1) + vv; err = abs(vv); for jj = nx:-1:2 vv = v(jj-1) - u(jj-1)*vv; err = max(err, abs(vv)); y(jj) = y(jj) + vv; end; counter=counter+1; end; newton_iterations=counter % plot computed solution plot(x,y,'--','LineWidth',1,'MarkerSize',7) hold on %set(gca,'ytick',[0 0.05 0.1 0.15]); %set(gca,'xtick',[0 0.2 0.4 0.6 0.8 1.0]); %axis([0 1 0 0.15]) xlabel('x-axis','FontSize',14,'FontWeight','bold') ylabel('Solution','FontSize',14,'FontWeight','bold') %plot asy solution ep=0.1; for ix=1:nx+2 dd=-0.75*(2*x(ix)-1)/ep; ya(ix)=x(ix)+1-3/(1+exp(dd)); end; plot(x,ya,'k','LineWidth',1) say=['\epsilon = ',num2str(ep)]; text(0.04,-1.3,say,'FontSize',14,'FontWeight','bold') %loc='NorthWest'; loc='NorthEast'; set(gca,'FontSize',14); legend(' Numerical',' Composite','Location',loc); %set(findobj(gcf,'tag','legend'),'FontSize',14); grid on hold off function g=f(x,y,z) ep=0.1; g=(z-1)*y/ep; function g=fy(x,y,z) ep=0.1; g=(z-1)/ep; function g=fz(x,y,z) ep=0.1; g=y/ep;