clear; clc; close all; pList = [5, 10, 20, 100]; nIter = 5; figure; tiledlayout(2,2) for ip = 1:length(pList) p = pList(ip); f = @(x) 2*p^3*x./(p^2*x.^2+1).^2; %RHS lambda = @(x) 1; %DIffusion coefficient u_exact = @(x) atan(p*x); x = linspace(-1,1,10); %initial uniform mesh (includes x=0) for it = 1:nIter %adaptive FEM loop [K,F] = assemble_1D(x,lambda,f); %assemble global stiffness matrix K and load vector F %Neumann boundary conditions at x=1 F(end) = F(end) + p/(p^2+1); %Dirichlet boundary conditions at x=-1 K(1,:) = 0; K(1,1) = 1; F(1) = -atan(p); % GH: Dirichlet boundary conditions at x=+1 K(end,:) = 0; K(end,end) = 1; F(end) = atan(p); u = K \ F; if it < nIter % h-adaptivity loop eta = flux_jump(x,u,lambda); x = h_adapt(x,eta,0.3); end end u_ex = u_exact(x(:)); % force column vector err_inf = max(abs(u - u_ex)); nexttile plot(x,u,'-o','LineWidth',1.5); hold on plot(x,u_ex,'--','LineWidth',1.5) title(['p = ',num2str(p)]) xlabel('x'), ylabel('u') legend('FEM','exact','Location','best') grid on fprintf('p = %d\n', p); fprintf('error = %.3e\n\n', err_inf); end sgtitle('Exercise 6A: h-adaptivity and exact solution comparison')