Question 1-b
MATLAB CODE
a = 1;
f_x = @(x) 1;
alpha = 0;
beta = 0;
nv = [25, 50, 100];
epv = [0.1, 0.01];
exact_solution = @(x, epsilon) (exp(-a*x/epsilon) - 1) / (1 - exp(-a/epsilon));
for n = nv
dx = 1 / (n - 1);
x = linspace(0, 1, n)';
for epsilon = epv
A = zeros(n, n);
b = zeros(n, 1);
for i = 2:n-1
A(i, i-1) = -epsilon / dx^2 - a / (2*dx);
A(i, i) = 2 * epsilon / dx^2;
A(i, i+1) = -epsilon / dx^2 + a / (2*dx);
b(i) = f_x(x(i));
end
A(1, 1) = 1; b(1) = alpha;
A(n, n) = 1; b(n) = beta;
u_approx = A \ b;
u_exact = exact_solution(x, epsilon);
figure;
plot(x, u_approx, 'r--', 'LineWidth', 1.5, 'DisplayName', 'Approximate Solution');
hold on;
plot(x, u_exact, 'b--', 'LineWidth', 1.5, 'DisplayName', 'Exact Solution');
xlabel('x'); ylabel('u(x)');
, title(['n = ', num2str(n), ', \epsilon = ', num2str(epsilon)]);
legend;
grid on;
end
end
The Output
Graph 1
Graph 2
MATLAB CODE
a = 1;
f_x = @(x) 1;
alpha = 0;
beta = 0;
nv = [25, 50, 100];
epv = [0.1, 0.01];
exact_solution = @(x, epsilon) (exp(-a*x/epsilon) - 1) / (1 - exp(-a/epsilon));
for n = nv
dx = 1 / (n - 1);
x = linspace(0, 1, n)';
for epsilon = epv
A = zeros(n, n);
b = zeros(n, 1);
for i = 2:n-1
A(i, i-1) = -epsilon / dx^2 - a / (2*dx);
A(i, i) = 2 * epsilon / dx^2;
A(i, i+1) = -epsilon / dx^2 + a / (2*dx);
b(i) = f_x(x(i));
end
A(1, 1) = 1; b(1) = alpha;
A(n, n) = 1; b(n) = beta;
u_approx = A \ b;
u_exact = exact_solution(x, epsilon);
figure;
plot(x, u_approx, 'r--', 'LineWidth', 1.5, 'DisplayName', 'Approximate Solution');
hold on;
plot(x, u_exact, 'b--', 'LineWidth', 1.5, 'DisplayName', 'Exact Solution');
xlabel('x'); ylabel('u(x)');
, title(['n = ', num2str(n), ', \epsilon = ', num2str(epsilon)]);
legend;
grid on;
end
end
The Output
Graph 1
Graph 2