function nonlinearBvp() % u''(t) = -sin(t) t in (0,2*pi) % % u(0) = alpha % u(2*pi) = beta % maxiter = 200; N = 200; t = 1:1/80:2*pi; t=t'; N = length(t) % t = linspace(0,2*pi,N)'; % u = 0.7*cos(t) + 0.5*sin(t); % initial guess u = 0.7 + sin(t/2); h = t(2) - t(1); f = zeros(N,1); alpha = 0.7; beta = 0.7; tol = 10e-12; iter = 0; du = 1; I = 2:N-1; while ( norm(du,inf)> tol ) f(1) = (alpha - 2*u(1) + u(2))/(h^2) + sin(u(1)); f(I) = (u(I-1) - 2*u(I) + u(I+1))/(h^2) + sin(u(I)); f(N) = (u(N-1) - 2*u(N) + beta)/(h^2) + sin(u(N)); up = diag(ones(1,N),1); low = diag(ones(1,N),-1); J = ( diag(( -2 + (h^2)*cos(u) )) + up(2:end,2:end) + low(2:end,2:end) )/(h^2); du = -J\f; u = u + du; iter = iter+1; if iter==maxiter, disp('exceeded maximum iterations'), break; end plot(t,u) pause end iter