Upload files to "Sheet4"
MatLab file, Exercise 1
This commit is contained in:
parent
3ed5b34135
commit
7805acbac5
1 changed files with 50 additions and 0 deletions
50
Sheet4/Ex1.m
Normal file
50
Sheet4/Ex1.m
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
%% FEM vs analytical solution for -u'' + a*u = f, mixed BC
|
||||||
|
clear; clc;
|
||||||
|
%% Parameters
|
||||||
|
n = 10; % number of elements
|
||||||
|
a = 2; % reaction term
|
||||||
|
alpha = 5; % Robin BC
|
||||||
|
gB = 1; % Robin BC value
|
||||||
|
f = 3; % constant RHS
|
||||||
|
h = 1/n;
|
||||||
|
x = linspace(0,1,n+1);
|
||||||
|
|
||||||
|
%% Assemble FEM matrices
|
||||||
|
A = zeros(n+1,n+1);
|
||||||
|
F = zeros(n+1,1);
|
||||||
|
|
||||||
|
% Linear shape functions, 1D FEM
|
||||||
|
K_diff = (1/h)*[1,-1;-1,1];
|
||||||
|
K_reac = a*(h/6)*[2,1;1,2];
|
||||||
|
|
||||||
|
for e=1:n
|
||||||
|
nodes = [e, e+1];
|
||||||
|
A(nodes,nodes) = A(nodes,nodes) + K_diff + K_reac;
|
||||||
|
F(nodes) = F(nodes) + f*(h/2)*[1;1]; % f*v integral approx
|
||||||
|
end
|
||||||
|
|
||||||
|
% Dirichlet BC u(0)=0
|
||||||
|
A(1,:) = 0; A(:,1) = 0; A(1,1) = 1;
|
||||||
|
F(1) = 0;
|
||||||
|
|
||||||
|
% Robin BC at x=1
|
||||||
|
A(end,end) = A(end,end) + alpha;
|
||||||
|
F(end) = F(end) + alpha*gB;
|
||||||
|
|
||||||
|
%% Solve FEM
|
||||||
|
u_fem = A\F;
|
||||||
|
|
||||||
|
%% Analytical solution
|
||||||
|
syms C
|
||||||
|
C1 = (alpha*gB - (f/a)*alpha*(1 - exp(-sqrt(a))) - (f/sqrt(a))*exp(-sqrt(a))) ...
|
||||||
|
/ (alpha*sinh(sqrt(a)) + sqrt(a)*cosh(sqrt(a)));
|
||||||
|
u_exact = @(x) C1*sinh(sqrt(a)*x) + (f/a)*(1 - exp(-sqrt(a)*x));
|
||||||
|
u_an = u_exact(x);
|
||||||
|
|
||||||
|
%% Plot
|
||||||
|
plot(x,u_fem,'o-','LineWidth',2); hold on;
|
||||||
|
plot(x,u_an,'r--','LineWidth',2);
|
||||||
|
legend('FEM','Analytical');
|
||||||
|
xlabel('x'); ylabel('u(x)');
|
||||||
|
title('FEM vs Analytical solution');
|
||||||
|
grid on;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue