问题描述
给定下述方程
{
−
U
′
′
(
t
)
+
U
(
t
)
=
(
π
2
+
1
)
sin
π
t
,
U
(
0
)
=
U
(
1
)
=
0
,
\left\{\begin{aligned} & -U''(t) +U(t) = (\pi^2 + 1)\sin \pi t,\\ &U(0)=U(1) =0, \end{aligned} \right.
{−U′′(t)+U(t)=(π2+1)sinπt,U(0)=U(1)=0,
其中 t ∈ [ 0 , 1 ] . t\in [0,1]. t∈[0,1].
- 请构造一次有限元求解上述方程并给出相应误差估计;
- 请构造二次有限元求解上述方程并给出相应误差估计.
问题分析
取检验函数空间
V
=
H
0
1
(
Ω
)
,
V=H_0^1(\Omega),
V=H01(Ω), 则对
∀
v
∈
V
,
\forall\,v\in V,
∀v∈V, 有
∫
Ω
(
−
u
′
′
+
u
)
v
d
t
=
(
π
2
+
1
)
∫
Ω
sin
π
t
⋅
v
d
t
,
\begin{aligned} \int_{\Omega}(-u''+u)v \,\mathrm{d}t=(\pi^2+1)\int_{\Omega}\sin \pi t \cdot v\,\mathrm{d}t, \end{aligned}
∫Ω(−u′′+u)vdt=(π2+1)∫Ωsinπt⋅vdt,
由 Green 公式以及边值条件, 我们有
∫
Ω
(
∇
u
∇
v
+
u
v
)
d
t
=
(
π
2
+
1
)
∫
Ω
sin
π
t
⋅
v
d
t
.
\int_{\Omega}(\nabla u\nabla v+uv)\,\mathrm{d}t = (\pi^2+1)\int_{\Omega}\sin \pi t\cdot v\,\mathrm{d}t.
∫Ω(∇u∇v+uv)dt=(π2+1)∫Ωsinπt⋅vdt.
记
a
(
u
,
v
)
=
∫
Ω
(
∇
u
∇
v
+
u
v
)
d
t
,
(
f
,
v
)
=
(
π
2
+
1
)
∫
Ω
sin
π
t
⋅
v
d
t
.
(1)
a(u,v)=\int_{\Omega}(\nabla u\nabla v+uv)\,\mathrm{d}t,\quad (f,v)=(\pi^2+1)\int_{\Omega}\sin \pi t\cdot v\,\mathrm{d}t. \tag{1}
a(u,v)=∫Ω(∇u∇v+uv)dt,(f,v)=(π2+1)∫Ωsinπt⋅vdt.(1)
则方程(1) 可转化为
{
F
i
n
d
u
∈
V
,
s
.
t
.
a
(
u
,
v
)
=
(
f
,
v
)
,
∀
v
∈
V
.
(2)
\left\{ \begin{aligned} & Find\quad u\in V, \;s.t.\\ & a(u,v)=(f,v),\quad \forall\, v\in V. \end{aligned}\right. \tag{2}
{Findu∈V,s.t.a(u,v)=(f,v),∀v∈V.(2)
设
V
h
V_h
Vh 是
V
V
V 的有限维逼近, 于是问题 (2) 可转化为
{
F
i
n
d
u
h
∈
V
h
,
s
.
t
.
a
(
u
h
,
v
h
)
=
(
f
,
v
h
)
∀
v
h
∈
V
h
.
(3)
\left\{ \begin{aligned} & Find\quad\, u_h\in V_h,\;s.t.\\ & a(u_h,v_h) = (f,v_h)\quad \forall \, v_h\in V_h. \end{aligned} \tag{3} \right.
{Finduh∈Vh,s.t.a(uh,vh)=(f,vh)∀vh∈Vh.(3)
取
V
h
V_h
Vh 的一组基
{
Φ
i
}
i
=
1
N
,
\{\Phi_i\}_{i=1}^N,
{Φi}i=1N, 记
u
h
=
∑
i
=
1
N
u
i
Φ
i
,
u_h = \sum_{i=1}^N u_i\Phi_i,
uh=∑i=1NuiΦi, 则 (3) 可转化为
N
N
N 个方程
a
(
∑
i
=
1
N
u
i
Φ
i
,
Φ
j
)
=
(
f
,
Φ
j
)
,
∀
j
=
1
,
2
,
⋯
,
N
,
∑
i
=
1
N
u
i
a
(
Φ
i
,
Φ
j
)
=
(
f
,
Φ
j
)
,
∀
j
=
1
,
2
,
⋯
,
N
.
\begin{aligned} a(\sum_{i=1}^{N}u_i\Phi_i,\Phi_j) = (f, \Phi_j),\quad \forall \, j=1,2,\cdots,N,\\ \sum_{i=1}^{N}u_i a(\Phi_i, \Phi_j) = (f,\Phi_j),\quad \forall \, j=1,2,\cdots,N. \end{aligned}
a(i=1∑NuiΦi,Φj)=(f,Φj),∀j=1,2,⋯,N,i=1∑Nuia(Φi,Φj)=(f,Φj),∀j=1,2,⋯,N.
令
K
i
j
=
a
(
Φ
i
,
Φ
j
)
,
f
j
=
(
f
,
Φ
j
)
,
K_{ij}=a(\Phi_i,\Phi_j), f_j=(f,\Phi_j),
Kij=a(Φi,Φj),fj=(f,Φj), 则有
K
U
=
F
,
\textcolor{red}{KU=F},
KU=F,
其中
K
=
(
k
i
j
)
N
×
N
,
F
=
(
f
1
,
⋯
,
f
N
)
T
,
U
=
(
u
1
,
⋯
,
u
N
)
T
.
K=(k_{ij})_{N\times N}, F=(f_1,\cdots, f_N)^T, U=(u_1,\cdots,u_N)^T.
K=(kij)N×N,F=(f1,⋯,fN)T,U=(u1,⋯,uN)T.
记误差精度
e
(
t
)
=
U
(
t
)
−
U
h
(
t
)
,
e(t)=U(t)-U_h(t),
e(t)=U(t)−Uh(t), 其中
U
(
t
)
U(t)
U(t) 是精确解,
U
h
(
t
)
U_h(t)
Uh(t) 是有限元解. 我们在此种模的意义下来度量误差
∥
e
∥
2
=
∫
0
1
∣
e
′
(
t
)
∣
2
d
t
.
\Vert e\Vert ^2 = \int_0^1|e'(t)|^2\,\mathrm{d}t.
∥e∥2=∫01∣e′(t)∣2dt.
由 \textcolor{red}{Ce
a
ˊ
\acute{a}
aˊ 引理} 可知, 存在常数
C
>
0
C>0
C>0, s.t.
∥
e
∥
=
∥
U
(
t
)
−
U
h
(
t
)
∥
≤
C
inf
v
h
∈
V
h
∥
U
(
t
)
−
v
h
(
t
)
∥
,
\Vert e\Vert =\Vert U(t)-U_h(t)\Vert \leq C\inf\limits_{v_h\in V_h}\Vert U(t)-v_h(t)\Vert,
∥e∥=∥U(t)−Uh(t)∥≤Cvh∈Vhinf∥U(t)−vh(t)∥,
一次有限元
数值格式
将区间 [0,1] 等分为 N 个网格, 记
t
i
=
i
/
N
,
t_i =i/N,
ti=i/N, 故有
t
0
=
0
,
t
N
=
1.
t_0=0,t_N=1.
t0=0,tN=1. 令
h
i
=
t
i
−
t
i
−
1
h_i = t_i-t_{i-1}
hi=ti−ti−1 为网格尺寸. 因为等分网格, 故
h
i
=
h
=
1
/
N
,
∀
i
.
h_i=h=1/N,\,\forall\,i.
hi=h=1/N,∀i. 取基函数
Φ
i
(
i
=
1
,
2
,
⋯
,
N
−
1
)
\Phi_i(i=1,2,\cdots,N-1)
Φi(i=1,2,⋯,N−1) 为分片线性函数, 即
Φ
i
(
t
)
=
{
t
−
t
i
−
1
h
,
t
∈
(
t
i
−
1
,
t
i
]
,
t
i
+
1
−
t
h
,
t
∈
(
t
i
,
t
i
+
1
]
,
0
,
o
t
h
e
r
w
i
s
e
.
\Phi_i(t)=\left\{ \begin{aligned} &\frac{t-t_{i-1}}{h},& t\in (t_{i-1}, t_i],\\ &\frac{t_{i+1}-t}{h},&t\in (t_i,t_{i+1}],\\ &0,&otherwise. \end{aligned} \right.
Φi(t)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧ht−ti−1,hti+1−t,0,t∈(ti−1,ti],t∈(ti,ti+1],otherwise.
令 [K_{ij}=\int_0^1 \Phi_i’(t)\Phi_j’(t)+\Phi_i(t)\Phi_j(t),dt,] 经计算有
K
i
j
=
{
0
,
∣
i
−
j
∣
>
1
,
2
h
+
2
3
h
,
i
=
j
,
−
1
h
+
1
6
h
,
o
t
h
e
r
w
i
s
e
.
K_{ij}=\left\{\begin{aligned} &0,&|i-j|>1,\\ &\frac{2}{h}+\frac{2}{3}h,&i=j,\\ &-\frac{1}{h}+\frac{1}{6}h,&otherwise. \end{aligned} \right.
Kij=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧0,h2+32h,−h1+61h,∣i−j∣>1,i=j,otherwise.
令
f
j
=
∫
0
1
(
π
2
+
1
)
sin
π
t
Φ
j
(
t
)
d
t
,
f_j = \int_0^1 (\pi^2+1)\sin \pi t \,\Phi_j(t)\,\mathrm{d} t,
fj=∫01(π2+1)sinπtΦj(t)dt,
记
u
=
[
u
1
,
⋯
,
u
N
−
1
]
T
u=[u_1,\cdots,u_{N-1}]^T
u=[u1,⋯,uN−1]T,
F
=
[
f
1
,
⋯
,
f
N
−
1
]
T
,
F = [f_1,\cdots,f_{N-1}]^T,
F=[f1,⋯,fN−1]T, 求解线性方程组
K
u
=
F
,
Ku=F,
Ku=F,
便可用追赶法求得方程的数值解
U
h
(
t
)
=
∑
i
=
1
N
−
1
u
i
Φ
i
(
t
)
.
U_h(t)=\sum_{i=1}^{N-1}u_i\Phi_i(t).
Uh(t)=i=1∑N−1uiΦi(t).
解常微分方程, 容易求得问题的解为
U
(
t
)
=
sin
π
t
.
U(t)=\sin \pi t.
U(t)=sinπt.
利用追赶法解线性方程组, 结果为
误差估计
仅需考虑插值误差估计即可. 事实上, 记
ω
(
t
)
=
U
−
Π
U
(
t
)
,
\omega(t)=U-\Pi U(t),
ω(t)=U−ΠU(t), 我们有
∥
e
∥
2
≤
∥
U
−
Π
U
(
t
)
∥
2
=
∫
0
1
∣
ω
′
(
t
)
∣
2
d
t
=
∑
i
=
1
N
∫
t
i
−
1
t
i
∣
ω
′
(
t
)
∣
2
d
t
=
∑
i
=
1
N
∫
t
i
−
1
t
i
∣
ω
′
(
t
)
−
ω
′
(
ξ
)
∣
2
d
t
=
∑
i
=
1
N
∫
t
i
−
1
t
i
(
∫
ξ
t
∣
ω
′
′
(
s
)
∣
d
s
)
2
d
t
=
∑
i
=
1
N
∫
t
i
−
1
t
i
(
∫
ξ
t
∣
U
′
′
(
s
)
∣
d
s
)
2
d
t
≤
∑
i
=
1
N
∫
t
i
−
1
t
i
(
∫
t
i
−
1
t
i
∣
U
′
′
(
s
)
∣
d
s
)
2
d
t
=
∑
i
=
1
N
h
i
(
∫
t
i
−
1
t
i
∣
U
′
′
(
s
)
∣
d
s
)
2
≤
∑
i
=
1
N
h
i
(
(
∫
t
i
−
1
t
i
∣
U
′
′
(
η
)
∣
2
d
η
)
1
/
2
(
∫
t
i
−
1
t
i
1
2
d
η
)
1
/
2
)
2
≤
∑
i
=
1
N
h
i
2
∫
t
i
−
1
t
i
U
′
′
(
η
)
2
d
η
≤
C
h
2
,
\begin{aligned} \Vert e\Vert ^2 &\leq \Vert U-\Pi U(t)\Vert^2=\int_{0}^{1}|\omega'(t)|^2\,\mathrm{d}t = \sum_{i=1}^N\int_{t_{i-1}}^{t_i}|\omega'(t)|^2\,\mathrm{d}t\\ &=\sum_{i=1}^N\int_{t_{i-1}}^{t_i}|\omega'(t)-\omega'(\xi)|^2\,\mathrm{d}t = \sum_{i=1}^N\int_{t_{i-1}}^{t_i}\bigg(\int_{\xi}^{t}|\omega''(s)|\,\mathrm{d}s\bigg)^2\,\mathrm{d}t\\ & = \sum_{i=1}^N\int_{t_{i-1}}^{t_i}\bigg(\int_{\xi}^{t}|U''(s)|\,\mathrm{d}s\bigg)^2\,\mathrm{d}t\leq \sum_{i=1}^N\int_{t_{i-1}}^{t_i}\bigg(\int_{t_{i-1}}^{t_i}|U''(s)|\,\mathrm{d}s\bigg)^2\,\mathrm{d}t\\ &=\sum_{i=1}^Nh_i\bigg(\int_{t_{i-1}}^{t_i}|U''(s)|\,\mathrm{d}s\bigg)^2\\ &\leq \sum_{i=1}^{N}h_i\bigg(\big(\int_{t_{i-1}}^{t_i}|U''(\eta)|^2\,\mathrm{d}\eta\big)^{1/2}\big(\int_{t_{i-1}}^{t_i}1^2\,\mathrm{d}\eta\big)^{1/2}\bigg)^2\\ &\leq \sum_{i=1}^Nh_i^2\int_{t_{i-1}}^{t_i}U''(\eta)^2\,\mathrm{d}\eta\leq Ch^2, \end{aligned}
∥e∥2≤∥U−ΠU(t)∥2=∫01∣ω′(t)∣2dt=i=1∑N∫ti−1ti∣ω′(t)∣2dt=i=1∑N∫ti−1ti∣ω′(t)−ω′(ξ)∣2dt=i=1∑N∫ti−1ti(∫ξt∣ω′′(s)∣ds)2dt=i=1∑N∫ti−1ti(∫ξt∣U′′(s)∣ds)2dt≤i=1∑N∫ti−1ti(∫ti−1ti∣U′′(s)∣ds)2dt=i=1∑Nhi(∫ti−1ti∣U′′(s)∣ds)2≤i=1∑Nhi((∫ti−1ti∣U′′(η)∣2dη)1/2(∫ti−1ti12dη)1/2)2≤i=1∑Nhi2∫ti−1tiU′′(η)2dη≤Ch2,
即
∥
e
∥
≤
C
h
,
\Vert e\Vert \leq Ch,
∥e∥≤Ch,
具有一阶精度.
数值实验结果如下图所示, 使用 polyfit 拟合图像斜率有
k
=
−
0.9991
,
k=-0.9991,
k=−0.9991,
即一次元的数值误差阶为 0.9991.
MATLAB程序
%% main program
n = 10;
err = zeros(8, 1);
% Linear interpolation
index = zeros(8, 1);
for i=1:8
index(i) = 2^(i-1) * n;
end
for i = 1:8
N = index(i);
h = 1 / N;
x = 0:h:1;
xx = 0:1/1000:1;
exact_solu = sin(pi.*xx);
K = zeros(N-1);
K = K + diag(ones(N-1,1).*(2/h+2/3*h), 0) + diag((h/6-1/h).*ones(N-2,1), 1) + diag((h/6-1/h).*ones(N-2,1), -1);
F = (1+pi^2)/(h*pi^2) * (2.*sin(pi.*x(2:N))-sin(pi.*x(1:N-1))-sin(pi.*x(3:N+1)))';
K = sparse(K);
coeff = K\F;
solu = [0; coeff; 0];
figure()
plot(x', solu, 'o--',xx', exact_solu, 'g--');
legend('numerical solution', 'exact solution')
xlabel('x')
ylabel('U');
xlim([-0.05,1.05])
ylim([-0.05,1.05]);
title(['numerical solution and exact solution N=',num2str(index(i))]);
% calculate the error
du = solu(2:N+1) - solu(1:N);
y1 = sin(2.*pi.*x);
dy1 = y1(2:N+1) - y1(1:N);
y2 = sin(pi.*x);
dy2 = y2(2:N+1) - y2(1:N);
error = pi^2*h/2*ones(1,N) + du'.^2/h + pi/4*dy1 - 2/h*dy2.*du';
err(i) = sqrt(sum(error));
end
figure()
plot(log2(err),'o--');
title('误差阶')
xlabel('N')
ylabel('$log_{2}Error$', 'Interpreter','LaTex')
xlim([0.8,8.2])
axis on;
set(gca,'xtick',1:1:8);
set(gca,'xticklabel',{5,10,20,40,80,160,320,640});
[order,~] = polyfit(1:1:(length(err)), log2(err)', 1);
disp(order)
下一篇我们将介绍这个问题的二次元解法,详见:
https://blog.csdn.net/waitingwinter/article/details/106244868。