文章目录
本篇文章适合个人复习翻阅,不建议新手入门使用
样条插值
1.Euler-Bernoulli梁
我们考虑水平长横梁发生微小形变的问题,主要研究 Euler-Bernoulli 梁,这一环节我们的总目标是证明 Euler-Bernoulli 梁的数学模型为弯矩等于挠度的二阶导
1.1 弹性力学的基本概念
定义: Euler-Bernoulli 梁
现有一个细长横梁,其均匀且各向同性,若横梁在弯曲过程中横截面始终垂直于中性轴(Neutral axis),则称这个横梁为 Euler-Bernoulli 梁
定义:挠度
假设横梁水平并纵向弯曲,横梁弯曲时一点产生的位移称为该点的挠度,记为
y
(
x
)
y(x)
y(x)
称横梁形变时内部产生的力为内力,可以将内力分解如下:
定义:内力的分解
在平面杆件的任意截面上一般有三个内力分量:轴力
F
N
F_N
FN,剪力
F
Q
F_Q
FQ,弯矩
M
M
M;其定义如下
- 截面上应力沿杆轴切线方向的合力,称为轴力 F N F_N FN,规定轴力以拉为正,以压为负
- 截面上应力沿杆轴法线方向的合力,称为剪力 F Q F_Q FQ,规定剪力以绕微端隔离体顺时针旋转为正,反之为负
- 截面上应力对截面形心的力矩称为弯矩
M
M
M,方向垂直于梁的中性轴,大小等于法应力在该截面上的合力乘以截面到中性轴的距离。在水平杆件中,规定当弯矩使杆件下部受拉时,弯矩为正,当弯矩使杆件上部受拉时,弯矩为负
接下来定义应力,即单位面积的内力
定义:应力
根据物体连续性的假设,可认为作用在微小面
Δ
S
\Delta S
ΔS 上的力是连续分布的,内力
Δ
P
\Delta P
ΔP 是这个分布力的合力,则称
F
ν
=
lim
Δ
S
→
0
Δ
P
Δ
S
F_{\nu}=\lim\limits_{\Delta S\to 0}\frac{\Delta P}{\Delta S}
Fν=ΔS→0limΔSΔP为应力,
ν
\nu
ν 表示微分面的法向
定义:应力张量
记应力的各分量如下
- x 方向上的正向应力 σ x x \sigma_{xx} σxx
- x 为法向的平面中,y 方向的剪切应力 τ x y \tau_{xy} τxy
- x 为法向的平面中,z 方向的剪切应力 τ x z \tau_{xz} τxz
- y 为法向的平面中,x 方向的剪切应力 τ y x \tau_{yx} τyx
- y 方向上的正向应力 σ y y \sigma_{yy} σyy
- y 为法向的平面中,z 方向的剪切应力 τ y z \tau_{yz} τyz
- z 为法向的平面中,x 方向的剪切应力 τ z x \tau_{zx} τzx
- z 为法向的平面中,y 方向的剪切应力 τ z y \tau_{zy} τzy
- z 方向上的正向应力 σ z z \sigma_{zz} σzz
这些元素描述了在三个不同的坐标轴方向上的正向应力和剪切应力。称如下的矩阵为应力张量
(
σ
x
x
τ
x
y
τ
x
z
τ
y
x
σ
y
y
τ
y
z
τ
z
x
τ
z
y
σ
z
z
)
\begin{pmatrix} \sigma_{xx}&\tau_{xy}&\tau_{xz}\\ \tau_{yx}&\sigma_{yy}&\tau_{yz}\\ \tau_{zx}&\tau_{zy}&\sigma_{zz} \end{pmatrix}
σxxτyxτzxτxyσyyτzyτxzτyzσzz
下面我们用应变描述横梁弯曲时小微元的空间变化量
定义:应变
根据物体连续性的假设,要求变形前连续的物体在变形后仍保持为连续体,物体
D
D
D 内一点
P
P
P 经变形后移到
D
1
D_1
D1 内
P
1
P_1
P1 的位移在三个坐标轴上的分量分别用
u
,
v
,
w
u,v,w
u,v,w 表示
正应变定义为棱边的伸长变化
ε
x
=
∂
u
∂
x
,
ε
y
=
∂
v
∂
y
,
ε
z
=
∂
w
∂
z
\varepsilon_x=\frac{\partial u}{\partial x},\varepsilon_y=\frac{\partial v}{\partial y},\varepsilon_z=\frac{\partial w}{\partial z}
εx=∂x∂u,εy=∂y∂v,εz=∂z∂w剪应变定义为棱边间夹角的变化
γ
x
y
=
∂
v
∂
x
+
∂
u
∂
y
\gamma_{xy}=\frac{\partial v}{\partial x}+\frac{\partial u}{\partial y}
γxy=∂x∂v+∂y∂u
γ
x
z
=
∂
u
∂
z
+
∂
w
∂
x
\gamma_{xz}=\frac{\partial u}{\partial z}+\frac{\partial w}{\partial x}
γxz=∂z∂u+∂x∂w
γ
y
z
=
∂
v
∂
z
+
∂
w
∂
y
\gamma_{yz}=\frac{\partial v}{\partial z}+\frac{\partial w}{\partial y}
γyz=∂z∂v+∂y∂w
1.2 Euler-Bernoulli梁的应力与应变
我们取横梁中的一小部分,将其原位置和弯曲变形后的位置画图如下
由图看出,
w
w
w 是挠度,容易求出应变
ε
x
\varepsilon_x
εx
u
1
=
u
−
z
d
w
d
x
u_1=u-z\frac{\mathrm{d}w}{\mathrm{d}x}
u1=u−zdxdw
ε
x
=
∂
u
1
∂
x
=
d
u
d
x
−
z
d
2
w
d
x
2
\varepsilon_x=\frac{\partial u_1}{\partial x}=\frac{\mathrm{d}u}{\mathrm{d}x}-z\frac{\mathrm{d}^2w}{\mathrm{d}x^2}
εx=∂x∂u1=dxdu−zdx2d2w
由胡克定律,小微元上的应力与应变成正比,比值为杨氏模量 E,可得
x
x
x 方向上的应力为
σ
x
x
=
E
⋅
ε
x
=
E
d
u
d
x
−
E
z
d
2
w
d
x
2
\sigma_{xx}=E\cdot \varepsilon_x=E\frac{\mathrm{d}u}{\mathrm{d}x}-Ez\frac{\mathrm{d}^2w}{\mathrm{d}x^2}
σxx=E⋅εx=Edxdu−Ezdx2d2w
1.3 Euler-Bernoulli梁的弯矩
设小微元
A
A
A,
z
z
z 表示
A
A
A 中的某点到中性轴的距离,根据弯矩的定义
M
(
x
)
=
∫
A
σ
x
x
⋅
z
d
A
=
∫
A
E
z
d
u
d
x
−
E
z
2
d
2
w
d
x
2
d
A
=
−
E
I
d
2
w
d
x
2
\begin{split} M(x)&=\int_A\sigma_{xx}\cdot z\mathrm{d}A\\ &=\int_AEz\frac{\mathrm{d}u}{\mathrm{d}x}-Ez^2\frac{\mathrm{d}^2w}{\mathrm{d}x^2}\mathrm{d}A\\ &=-EI\frac{\mathrm{d}^2w}{\mathrm{d}x^2} \end{split}
M(x)=∫Aσxx⋅zdA=∫AEzdxdu−Ez2dx2d2wdA=−EIdx2d2w显然
∫
A
z
d
A
=
0
\int_Az\mathrm{d}A=0
∫AzdA=0,令
I
=
∫
A
z
2
d
A
I=\int_Az^2\mathrm{d}A
I=∫Az2dA 称为面惯性矩
综上所述,我们得到结论 M ( x ) = − E I y ′ ′ ( x ) M(x)=-EIy''(x) M(x)=−EIy′′(x)即在忽略常数的意义下,弯矩等于挠度的二阶导数
2. 样条函数
定义:弯曲应变能
梁在弯曲形变时会产生势能,称为弯曲应变能
W
W
W,设水平横梁定义在区间
[
a
,
b
]
[a,b]
[a,b]上,在忽略常数的意义下,其与弯矩的关系如下:
W
=
∫
a
b
M
2
(
x
)
d
x
W=\int_a^b M^2(x)\mathrm{d}x
W=∫abM2(x)dx故在Euler-Bernoulli梁的假设下有
W
=
∫
a
b
[
y
′
′
(
x
)
]
2
d
x
W=\int_a^b [y''(x)]^2\mathrm{d}x
W=∫ab[y′′(x)]2dx
接下来我们要刻画使得弯曲应变能最小的形变曲线,我们将其定义为三次样条
2.1 泛函极小解和三次样条函数
给定区间
[
a
,
b
]
[a,b]
[a,b] 的分划:
a
=
x
0
<
x
1
<
⋯
<
x
n
=
b
a=x_0<x_1<\cdots<x_n=b
a=x0<x1<⋯<xn=b给定
y
i
,
i
=
0
,
1
,
…
,
n
,
y
0
′
,
y
n
′
y_i,i=0,1,\dots,n,y_0',y_n'
yi,i=0,1,…,n,y0′,yn′
设
Ω
y
=
{
f
(
x
)
:
f
∈
C
2
[
a
,
b
]
,
f
(
x
i
)
=
y
i
,
f
′
(
x
0
)
=
y
0
′
,
f
′
(
x
n
)
=
y
n
′
}
\Omega_y=\{f(x):f\in C^2[a,b],f(x_i)=y_i,f'(x_0)=y_0',f'(x_n)=y_n'\}
Ωy={f(x):f∈C2[a,b],f(xi)=yi,f′(x0)=y0′,f′(xn)=yn′}
Ω
0
=
{
η
(
x
)
:
η
∈
C
2
[
a
,
b
]
,
η
(
x
i
)
=
0
,
η
′
(
a
)
=
η
′
(
b
)
=
0
}
\Omega_0=\{\eta(x):\eta\in C^2[a,b],\eta(x_i)=0,\eta'(a)=\eta'(b)=0\}
Ω0={η(x):η∈C2[a,b],η(xi)=0,η′(a)=η′(b)=0}
J
(
f
)
=
∫
a
b
(
f
′
′
(
x
)
)
2
d
x
J(f)=\int_a^b(f''(x))^2\mathrm{d}x
J(f)=∫ab(f′′(x))2dx考虑如下的泛函极小问题:
求
S
(
x
)
∈
Ω
y
S(x)\in \Omega_y
S(x)∈Ωy 满足
J
(
S
)
=
min
f
∈
Ω
y
J
(
f
)
J(S)=\min\limits_{f\in\Omega_y}J(f)
J(S)=f∈ΩyminJ(f)
则
S
(
x
)
∈
Ω
y
S(x)\in\Omega_y
S(x)∈Ωy 是泛函极小问题的解当且仅当
∀
η
(
x
)
∈
Ω
0
,
∫
a
b
η
′
′
(
x
)
S
′
′
(
x
)
d
x
=
0
\forall \eta (x)\in\Omega_0,\int_a^b\eta''(x)S''(x)\mathrm{d}x=0
∀η(x)∈Ω0,∫abη′′(x)S′′(x)dx=0
证明:(相当经典)
充分性:任取
f
∈
Ω
y
f\in\Omega_y
f∈Ωy ,令
η
(
x
)
=
f
(
x
)
−
S
(
x
)
\eta(x)=f(x)-S(x)
η(x)=f(x)−S(x)
∫
a
b
(
f
′
′
(
x
)
)
2
d
x
=
∫
a
b
(
η
′
′
(
x
)
+
S
′
′
(
x
)
)
2
d
x
=
∫
a
b
(
η
′
′
(
x
)
)
2
+
(
S
′
′
(
x
)
)
2
d
x
≥
∫
a
b
(
S
′
′
(
x
)
)
2
d
x
\begin{split} &\int_a^b(f''(x))^2\mathrm{d}x\\ =&\int_a^b(\eta''(x)+S''(x))^2\mathrm{d}x\\ =&\int_a^b(\eta''(x))^2+(S''(x))^2\mathrm{d}x\\ \geq &\int_a^b(S''(x))^2\mathrm{d}x \end{split}
==≥∫ab(f′′(x))2dx∫ab(η′′(x)+S′′(x))2dx∫ab(η′′(x))2+(S′′(x))2dx∫ab(S′′(x))2dx
必要性:任取
η
∈
Ω
0
\eta\in\Omega_0
η∈Ω0,则有
J
(
S
+
α
η
)
≥
J
(
S
)
J(S+\alpha\eta)\geq J(S)
J(S+αη)≥J(S)
记
g
(
α
)
=
J
(
S
+
α
η
)
g(\alpha)=J(S+\alpha\eta)
g(α)=J(S+αη),则
α
=
0
\alpha=0
α=0 是
g
(
α
)
g(\alpha)
g(α) 的极小值点
由于
d
d
α
(
∫
a
b
(
S
′
′
(
x
)
+
α
η
′
′
(
x
)
)
2
d
x
)
=
∫
a
b
(
2
α
(
η
′
′
(
x
)
)
2
+
2
S
′
′
(
x
)
η
′
′
(
x
)
)
d
x
\begin{split} &\frac{\mathrm{d}}{\mathrm{d}\alpha}\left(\int_a^b(S''(x)+\alpha\eta''(x))^2\mathrm{d}x\right)\\ =&\int_a^b\left(2\alpha(\eta''(x))^2+2S''(x)\eta''(x)\right)\mathrm{d}x\\ \end{split}
=dαd(∫ab(S′′(x)+αη′′(x))2dx)∫ab(2α(η′′(x))2+2S′′(x)η′′(x))dx令
α
=
0
\alpha=0
α=0 ,即得
∫
a
b
η
′
′
(
x
)
S
′
′
(
x
)
d
x
=
0
\int_a^b\eta''(x)S''(x)\mathrm{d}x=0
∫abη′′(x)S′′(x)dx=0
2.2 S ( x ) S(x) S(x) 的结构
设
S
(
x
)
S(x)
S(x) 即为前文所述泛函极小问题的解,且令
S
(
x
)
∈
C
4
(
x
i
,
x
i
+
1
)
,
i
=
0
,
1
,
…
,
n
−
1
S(x)\in C^4(x_i,x_{i+1}),i=0,1,\dots,n-1
S(x)∈C4(xi,xi+1),i=0,1,…,n−1,在每个
x
i
x_i
xi 处有直到四阶的左、右导数
在每个小区间上使用两次分部积分公式,得
∫
a
b
η
′
′
(
x
)
S
′
′
(
x
)
d
x
=
∑
i
=
0
n
−
1
∫
x
i
x
i
+
1
η
′
′
(
x
)
S
′
′
(
x
)
d
x
=
∑
i
=
0
n
−
1
η
′
(
x
)
S
′
′
(
x
)
∣
x
i
+
x
i
+
1
−
−
∫
x
i
x
i
+
1
η
′
(
x
)
S
′
′
′
(
x
)
d
x
=
∑
i
=
0
n
−
1
η
′
(
x
)
S
′
′
(
x
)
∣
x
i
+
x
i
+
1
−
−
η
(
x
)
S
′
′
′
(
x
)
∣
x
i
+
x
i
+
1
−
+
∫
x
i
x
i
+
1
η
(
x
)
S
′
′
′
′
(
x
)
d
x
\begin{split} &\int_a^b\eta''(x)S''(x)\mathrm{d}x\\ =&\sum\limits_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}\eta''(x)S''(x)\mathrm{d}x\\ =&\sum\limits_{i=0}^{n-1}\eta'(x)S''(x)\bigg|_{x_{i}^+}^{x_{i+1}^-}-\int_{x_i}^{x_{i+1}}\eta'(x)S'''(x)\mathrm{d}x\\ =&\sum\limits_{i=0}^{n-1}\eta'(x)S''(x)\bigg|_{x_{i}^+}^{x_{i+1}^-}-\eta(x)S'''(x)\bigg|_{x_{i}^+}^{x_{i+1}^-}+\int_{x_i}^{x_{i+1}}\eta(x)S''''(x)\mathrm{d}x\\ \end{split}
===∫abη′′(x)S′′(x)dxi=0∑n−1∫xixi+1η′′(x)S′′(x)dxi=0∑n−1η′(x)S′′(x)
xi+xi+1−−∫xixi+1η′(x)S′′′(x)dxi=0∑n−1η′(x)S′′(x)
xi+xi+1−−η(x)S′′′(x)
xi+xi+1−+∫xixi+1η(x)S′′′′(x)dx由
S
(
x
)
∈
C
4
(
x
i
,
x
i
+
1
)
S(x)\in C^4(x_i,x_{i+1})
S(x)∈C4(xi,xi+1),将上式合并同类项
∫ a b η ′ ′ ( x ) S ′ ′ ( x ) d x = [ η ′ ( b ) S ′ ′ ( b ) − η ′ ( a ) S ′ ′ ( a ) + ∑ i = 1 n − 1 S ′ ′ ( x i ) ( η ′ ( x i + ) − η ′ ( x i − ) ) ] − [ η ( b ) S ′ ′ ′ ( b ) − η ( a ) S ′ ′ ′ ( a ) + ∑ i = 1 n − 1 S ′ ′ ′ ( x i ) ( η ( x i + ) − η ( x i − ) ) ] + ∑ i = 0 n − 1 ∫ x i x i + 1 η ( x ) S ′ ′ ′ ′ ( x ) d x = ∑ i = 0 n − 1 ∫ x i x i + 1 η ( x ) S ′ ′ ′ ′ ( x ) d x = 0 \begin{split} &\int_a^b\eta''(x)S''(x)\mathrm{d}x\\ =&[\eta'(b)S''(b)-\eta'(a)S''(a)+\sum\limits_{i=1}^{n-1}S''(x_i)(\eta'(x_i^+)-\eta'(x_i^-))]\\ &-[\eta(b)S'''(b)-\eta(a)S'''(a)+\sum\limits_{i=1}^{n-1}S'''(x_i)(\eta(x_i^+)-\eta(x_i^-))]\\ &+\sum\limits_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}\eta(x)S''''(x)\mathrm{d}x\\ =&\sum\limits_{i=0}^{n-1}\int_{x_i}^{x_{i+1}}\eta(x)S''''(x)\mathrm{d}x\\ =&0\\ \end{split} ===∫abη′′(x)S′′(x)dx[η′(b)S′′(b)−η′(a)S′′(a)+i=1∑n−1S′′(xi)(η′(xi+)−η′(xi−))]−[η(b)S′′′(b)−η(a)S′′′(a)+i=1∑n−1S′′′(xi)(η(xi+)−η(xi−))]+i=0∑n−1∫xixi+1η(x)S′′′′(x)dxi=0∑n−1∫xixi+1η(x)S′′′′(x)dx0由 η ( x ) \eta(x) η(x) 的任意性,可得 S ′ ′ ′ ′ ( x ) S''''(x) S′′′′(x) 在每个小区间为 0
结论
S
(
x
)
S(x)
S(x) 是具有下列性质的函数
- 在每个小区间上是三次多项式
- 在整个区间上二阶连续可导
- 全体 S ( x ) S(x) S(x) 形成有限维空间 D i m = 4 n − 3 ( n − 1 ) = n + 3 Dim = 4n-3(n-1)=n+3 Dim=4n−3(n−1)=n+3
2.3 三次样条插值
定义:样条函数
- 在 n + 1 n+1 n+1 个插值节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,…,xn 处与给定的函数值相同
- 在每个小区间 [ x i , x i + 1 ] [x_i,x_{i+1}] [xi,xi+1] 上是不超过 k k k 次的多项式
- 在整个区间上 k − 1 k-1 k−1 阶连续可导
称满足这些条件的 S k ( x ) S_k(x) Sk(x) 为 k k k 次样条函数,其中常用的是三次样条函数,也叫做三次样条插值
定义:边界条件
可以发现,我们给出的全体
S
(
x
)
S(x)
S(x) 形成的空间是
n
+
3
n+3
n+3 维的,但根据样条函数的定义,却发现只有
n
+
1
n+1
n+1 个插值条件,所以还需要两个边界处的约束条件以确定样条函数,称这两个条件为边界条件
常见的边界条件
- 固支边界条件(第一型边界条件):给出边界处的一阶导数
- 自然边界条件(第二型边界条件):给出边界处的二阶导数,且二阶导数为 0
- 周期型边界条件(第三型边界条件):分别令左右边界的函数值,一阶导数值,二阶导数值相等,并给出这三个值
- Not-A-Knot 边界条件:
S 3 ′ ′ ′ ( x 1 + ) = S 3 ′ ′ ′ ( x 1 − ) , S 3 ′ ′ ′ ( x n − 1 + ) = S 3 ′ ′ ′ ( x n − 1 − ) S_3'''(x_1^+)=S_3'''(x_1^-),S_3'''(x_{n-1}^+)=S_3'''(x_{n-1}^-) S3′′′(x1+)=S3′′′(x1−),S3′′′(xn−1+)=S3′′′(xn−1−) - 横梁固支端:挠度和截面转角为0
S ( x 0 ) = 0 , S ′ ( x 0 ) = 0 S(x_0)=0,S'(x_0)=0 S(x0)=0,S′(x0)=0
- 横梁简支端:挠度和弯矩为0
S ( x 0 ) = 0 , S ′ ′ ( x 0 ) = 0 S(x_0)=0,S''(x_0)=0 S(x0)=0,S′′(x0)=0
- 横梁自由端:弯矩和剪力为0
S ′ ′ ( x 0 ) = 0 , S ′ ′ ′ ( x 0 ) = 0 S''(x_0)=0,S'''(x_0)=0 S′′(x0)=0,S′′′(x0)=0
3. 三次样条函数的构造方法
3.1 三转角
思想:
基于节点构造
S
3
(
x
)
S_3(x)
S3(x) 的分段三次Hermite插值,求二阶导使其二阶连续可导
命题:三转角构造三次样条的公式
设节点处的一阶导数值
m
i
m_i
mi,构造三次hermite插值
S
3
(
x
)
=
∑
i
=
0
n
[
y
i
h
i
(
x
)
+
m
i
h
^
i
(
x
)
]
S_3(x)=\sum\limits_{i=0}^n[y_ih_i(x)+m_i\hat{h}_i(x)]
S3(x)=i=0∑n[yihi(x)+mih^i(x)]其中
h
,
h
^
h,\hat{h}
h,h^ 为Hermite插值的基函数,则由三转角构造方法,
m
i
m_i
mi 满足
(
1
−
λ
i
)
m
i
−
1
+
2
m
i
+
λ
i
m
i
+
1
=
μ
i
(1-\lambda_i)m_{i-1}+2m_i+\lambda_im_{i+1}=\mu_i
(1−λi)mi−1+2mi+λimi+1=μi其中
i
=
1
,
2
,
…
,
n
−
1
i= 1,2,\dots,n-1
i=1,2,…,n−1
λ i = Δ x i − 1 Δ x i − 1 + Δ x i \lambda_i=\frac{\Delta x_{i-1}}{\Delta x_{i-1}+\Delta x_i} λi=Δxi−1+ΔxiΔxi−1
μ i = 3 ( ( 1 − λ i ) f [ x i − 1 , x i ] + λ i f [ x i , x i + 1 ] ) \mu_i=3((1-\lambda_i)f[x_{i-1},x_i]+\lambda_if[x_i,x_{i+1}]) μi=3((1−λi)f[xi−1,xi]+λif[xi,xi+1])
证明思路
写出每个小区间上的
S
3
(
x
)
S_3(x)
S3(x) 的形式,求出节点处(不含区间端点)的左右二阶导数值,令其相等并整理即得
命题:三转角结合边界条件的方程
- 三转角固支边界条件: m 0 = f ′ ( x 0 ) , m n = f ′ ( x n ) m_0=f'(x_0),m_n=f'(x_n) m0=f′(x0),mn=f′(xn)
- 三转角自然边界条件:
2 m 0 + m 1 = 3 f [ x 0 , x 1 ] = μ 0 2m_0+m_1=3f[x_0,x_1]=\mu_0 2m0+m1=3f[x0,x1]=μ0 m n − 1 + 2 m n = 3 f [ x n − 1 , x n ] = μ n m_{n-1}+2m_n=3f[x_{n-1},x_n]=\mu_n mn−1+2mn=3f[xn−1,xn]=μn
3.2 三弯矩
思想:
基于节点构造
S
′
′
(
x
)
S''(x)
S′′(x) 为连续的分段线性函数,积分两次后代入插值条件
S
3
(
x
i
)
=
y
i
S_3(x_i)=y_i
S3(xi)=yi,对得到的
S
3
(
x
)
S_3(x)
S3(x) 进行求导,使其一阶导数也连续
命题:三弯矩构造三次样条的公式
设
S
3
′
′
(
x
i
)
=
M
i
S_3''(x_i)=M_i
S3′′(xi)=Mi,基于节点构造分段线性插值
S
3
′
′
(
x
)
=
M
i
−
1
x
i
−
x
Δ
x
i
−
1
+
M
i
x
−
x
i
−
1
Δ
x
i
−
1
S_3''(x)=M_{i-1}\frac{x_i-x}{\Delta x_{i-1}}+M_i\frac{x-x_{i-1}}{\Delta x_{i-1}}
S3′′(x)=Mi−1Δxi−1xi−x+MiΔxi−1x−xi−1由三弯矩构造方法,
M
i
M_i
Mi 满足
λ
i
M
i
−
1
+
2
M
i
+
(
1
−
λ
i
)
M
i
+
1
=
d
i
\lambda_iM_{i-1}+2M_i+(1-\lambda_i)M_{i+1}=d_i
λiMi−1+2Mi+(1−λi)Mi+1=di
其中
i
=
1
,
2
,
…
,
n
i=1,2,\dots,n
i=1,2,…,n
d i = 6 f [ x i − 1 , x i , x i + 1 ] d_i=6f[x_{i-1},x_i,x_{i+1}] di=6f[xi−1,xi,xi+1]
证明思路
写出每个小区间上的
S
3
(
x
)
S_3(x)
S3(x) 的形式,代入插值条件求解,再求出节点处(不含区间端点)的左右一阶导数值,令其相等并整理即得
命题:三弯矩结合边界条件的方程
- 三弯矩固支边界条件:
2 M 0 + M 1 = d 0 = 6 f [ x 0 , x 0 , x 1 ] 2M_0+M_1=d_0=6f[x_0,x_0,x_1] 2M0+M1=d0=6f[x0,x0,x1] M n − 1 + 2 M n = d n = 6 f [ x n − 1 , x n , x n ] M_{n-1}+2M_n=d_n=6f[x_{n-1},x_n,x_n] Mn−1+2Mn=dn=6f[xn−1,xn,xn]
3.3 待定系数法
思想
基于三次样条是多项式的事实,用待定系数法设分段函数在每个小区间上是不同的三次多项式,使其分别满足函数值连续,一阶导数值连续,二阶导数值连续
命题:待定系数法构造三次样条的公式
基于
n
n
n 个节点
(
x
i
,
y
i
)
,
i
=
1
,
2
,
…
,
n
(x_i,y_i),i=1,2,\dots,n
(xi,yi),i=1,2,…,n 构造如下的三次多项式组
S
i
(
x
)
,
x
∈
[
x
i
,
x
i
+
1
]
,
i
=
1
,
2
,
…
,
n
−
1
S_i(x),x\in[x_i,x_{i+1}],i=1,2,\dots,n-1
Si(x),x∈[xi,xi+1],i=1,2,…,n−1
{
S
1
(
x
)
=
y
1
+
b
1
(
x
−
x
1
)
+
c
1
(
x
−
x
1
)
2
+
d
1
(
x
−
x
1
)
3
S
2
(
x
)
=
y
2
+
b
2
(
x
−
x
2
)
+
c
2
(
x
−
x
2
)
2
+
d
2
(
x
−
x
2
)
3
⋮
S
n
−
1
(
x
)
=
y
n
−
1
+
b
n
−
1
(
x
−
x
n
−
1
)
+
c
n
−
1
(
x
−
x
n
−
1
)
2
+
d
n
−
1
(
x
−
x
n
−
1
)
3
\begin{cases} S_1(x)=y_1+b_1(x-x_1)+c_1(x-x_1)^2+d_1(x-x_1)^3\\ S_2(x)=y_2+b_2(x-x_2)+c_2(x-x_2)^2+d_2(x-x_2)^3\\ \vdots\\ S_{n-1}(x)=y_{n-1}+b_{n-1}(x-x_{n-1})+c_{n-1}(x-x_{n-1})^2+d_{n-1}(x-x_{n-1})^3\\ \end{cases}
⎩
⎨
⎧S1(x)=y1+b1(x−x1)+c1(x−x1)2+d1(x−x1)3S2(x)=y2+b2(x−x2)+c2(x−x2)2+d2(x−x2)3⋮Sn−1(x)=yn−1+bn−1(x−xn−1)+cn−1(x−xn−1)2+dn−1(x−xn−1)3使其满足
{
(
1
)
:
S
i
(
x
i
)
=
y
i
,
S
i
(
x
i
+
1
)
=
y
i
+
1
,
i
=
1
,
…
,
n
−
1
(
2
)
:
S
i
′
(
x
i
+
1
)
=
S
i
+
1
′
(
x
i
+
1
)
,
i
=
1
,
2
,
…
,
n
−
2
(
3
)
:
S
i
′
′
(
x
i
+
1
)
=
S
i
+
1
′
′
(
x
i
+
1
)
,
i
=
1
,
2
,
…
,
n
−
2
\begin{cases} (1):S_i(x_i)=y_i,S_i(x_{i+1})=y_{i+1},&i=1,\dots,n-1\\ (2):S_{i}'(x_{i+1})=S_{i+1}'(x_{i+1}),&i=1,2,\dots,n-2\\ (3):S_{i}''(x_{i+1})=S_{i+1}''(x_{i+1}),&i=1,2,\dots,n-2\\ \end{cases}
⎩
⎨
⎧(1):Si(xi)=yi,Si(xi+1)=yi+1,(2):Si′(xi+1)=Si+1′(xi+1),(3):Si′′(xi+1)=Si+1′′(xi+1),i=1,…,n−1i=1,2,…,n−2i=1,2,…,n−2则待定系数
c
i
c_i
ci 满足如下方程
δ
i
c
i
+
2
(
δ
i
+
δ
i
+
1
)
c
i
+
1
+
δ
i
+
1
c
i
+
2
=
3
(
Δ
i
+
1
δ
i
+
1
−
Δ
i
δ
i
)
\delta_{i}c_{i}+2(\delta_{i}+\delta_{i+1})c_{i+1}+\delta_{i+1}c_{i+2}=3(\frac{\Delta_{i+1}}{\delta_{i+1}}-\frac{\Delta_{i}}{\delta_{i}})
δici+2(δi+δi+1)ci+1+δi+1ci+2=3(δi+1Δi+1−δiΔi)其中
i
=
1
,
2
,
…
,
n
−
3
i=1,2,\dots,n-3
i=1,2,…,n−3
δ
i
=
x
i
+
1
−
x
i
,
Δ
i
=
y
i
+
1
−
y
i
\delta_i=x_{i+1}-x_i,\Delta_i=y_{i+1}-y_i
δi=xi+1−xi,Δi=yi+1−yi
从而可解
b
i
,
d
i
(
i
=
1
,
…
,
n
−
2
)
b_i,d_i (i=1,\dots,n-2)
bi,di(i=1,…,n−2)
b
i
=
Δ
i
δ
i
−
δ
i
3
(
2
C
i
+
C
i
+
1
)
b_i=\frac{\Delta_i}{\delta_i}-\frac{\delta_i}{3}(2C_i+C_{i+1})
bi=δiΔi−3δi(2Ci+Ci+1)
d
i
=
C
i
+
1
−
C
i
3
δ
i
d_i=\frac{C_{i+1}-C_i}{3\delta_i}
di=3δiCi+1−Ci
证明思路
从多项式满足的性质(3)可解出
d
i
d_i
di,从性质(1)的后半句(前半句已经成立)解出
b
i
b_i
bi,将
b
i
,
d
i
b_i,d_i
bi,di 代入性质(2)解得
c
i
c_i
ci
可以发现以上待定系数仅有 b n − 1 , d n − 1 b_{n-1},d_{n-1} bn−1,dn−1 还未解出,它们只需额外依赖 c n c_n cn 的值,故我们设 c n = S n − 1 ′ ′ ( x n ) 2 c_n=\frac{S_{n-1}''(x_n)}{2} cn=2Sn−1′′(xn)
综上所述,有以下命题
命题
在前文的待定系数方程组中,待定系数
a
i
,
b
i
,
c
i
,
i
=
1
,
2
,
…
,
n
−
1
a_i,b_i,c_i,i=1,2,\dots,n-1
ai,bi,ci,i=1,2,…,n−1 由以下方程给出
δ
i
c
i
+
2
(
δ
i
+
δ
i
+
1
)
c
i
+
1
+
δ
i
+
1
c
i
+
2
=
3
(
Δ
i
+
1
δ
i
+
1
−
Δ
i
δ
i
)
\delta_{i}c_{i}+2(\delta_{i}+\delta_{i+1})c_{i+1}+\delta_{i+1}c_{i+2}=3(\frac{\Delta_{i+1}}{\delta_{i+1}}-\frac{\Delta_{i}}{\delta_{i}})
δici+2(δi+δi+1)ci+1+δi+1ci+2=3(δi+1Δi+1−δiΔi)
对
i
=
1
,
2
,
…
,
n
−
2
i=1,2,\dots,n-2
i=1,2,…,n−2 成立
b
i
=
Δ
i
δ
i
−
δ
i
3
(
2
C
i
+
C
i
+
1
)
b_i=\frac{\Delta_i}{\delta_i}-\frac{\delta_i}{3}(2C_i+C_{i+1})
bi=δiΔi−3δi(2Ci+Ci+1)
和
d
i
=
C
i
+
1
−
C
i
3
δ
i
d_i=\frac{C_{i+1}-C_i}{3\delta_i}
di=3δiCi+1−Ci
对 i = 1 , 2 , … , n − 1 i=1,2,\dots,n-1 i=1,2,…,n−1 成立
命题:待定系数法结合边界条件的方程
- 待定系数法固支边界条件: b 1 = y 1 ′ , b n = y n ′ b_1=y_1',b_n=y_n' b1=y1′,bn=yn′
- 待定系数法自然边界条件:
c
1
=
0
,
c
n
=
0
c_1=0,c_n=0
c1=0,cn=0
它给出了关于 c 1 , … , c n c_1,\dots,c_n c1,…,cn 的三对角线性方程组
( 1 0 δ 1 2 ( δ 1 + δ 2 ) δ 2 ⋱ ⋱ ⋱ δ n − 2 2 ( δ n − 2 + δ n − 1 ) δ n − 1 0 1 ) ( c 1 c 2 ⋮ c n − 1 c n ) = ( 0 3 ( Δ 2 δ 2 − Δ 1 δ 1 ) ⋮ 3 ( Δ n − 1 δ n − 1 − Δ n − 2 δ n − 2 ) 0 ) \begin{pmatrix} 1&0&&&&\\ \delta_1&2(\delta_1+\delta_2)&\delta_2&&&\\ &\ddots&\ddots&\ddots&\\ &&\delta_{n-2}&2(\delta_{n-2}+\delta_{n-1})&\delta_{n-1}\\ &&&0&1\\ \end{pmatrix} \begin{pmatrix} c_1\\c_2\\\vdots\\c_{n-1}\\c_n \end{pmatrix}= \begin{pmatrix} 0\\3(\frac{\Delta_2}{\delta_2}-\frac{\Delta_1}{\delta_1})\\\vdots\\3(\frac{\Delta_{n-1}}{\delta_{n-1}}-\frac{\Delta_{n-2}}{\delta_{n-2}})\\0 \end{pmatrix} 1δ102(δ1+δ2)⋱δ2⋱δn−2⋱2(δn−2+δn−1)0δn−11 c1c2⋮cn−1cn = 03(δ2Δ2−δ1Δ1)⋮3(δn−1Δn−1−δn−2Δn−2)0 - Not A Knot边界条件: d 1 = d 2 , d n − 1 = d n d_1=d_2,d_{n-1}=d_n d1=d2,dn−1=dn
4. 三次样条的截断误差
命题:三次样条的截断误差
设被插函数
f
(
x
)
∈
C
4
[
a
,
b
]
f(x)\in C^4[a,b]
f(x)∈C4[a,b],
S
3
(
x
)
S_3(x)
S3(x) 为相应的一或二型插值样条,则有
∣
∣
S
3
(
k
)
−
f
(
k
)
∣
∣
∞
≤
C
k
∣
∣
f
(
4
)
∣
∣
∞
h
4
−
k
,
k
=
0
,
1
,
2
,
…
||S_3^{(k)}-f^{(k)}||_{\infty}\leq C_k||f^{(4)}||_{\infty}h^{4-k},k=0,1,2,\dots
∣∣S3(k)−f(k)∣∣∞≤Ck∣∣f(4)∣∣∞h4−k,k=0,1,2,…其中
h
=
max
i
Δ
x
i
,
C
0
=
24
384
(
5
384
)
,
C
1
=
1
2
(
1
24
)
,
C
2
=
1
2
(
3
8
)
h=\max\limits_{i}\Delta x_i,C_0=\frac{24}{384}(\frac{5}{384}),C_1=\frac{1}{2}(\frac{1}{24}),C_2=\frac{1}{2}(\frac{3}{8})
h=imaxΔxi,C0=38424(3845),C1=21(241),C2=21(83)
证明略
5.代码示例
示例1:待定系数法计算自然三次样条
首先展示使用matlab进行待定系数法求解自然三次样条,创建一个m文件,输入以下代码以定义函数。注意:这里的节点下标是从 1 到 n 的
%待定系数法计算三次样条
%算法思路,通过解三对角方程组解出c_i,进而解出b_i和d_i
%输入:数据点的x,y向量
%输出:系数矩阵b1,c1,d1;b2,c2,d2;...
function coeff=splinecoeff(x,y)
n=length(x);
A=zeros(n,n);%初始化矩阵A,r
r=zeros(n,1);
for i=1:n-1 %定义Delta_i(记为dy(i))和delta_i(记为dx(i))
dx(i)=x(i+1)-x(i);dy(i)=y(i+1)-y(i);
end
for i=2:n-1
A(i,i-1:i+1)=[dx(i-1) 2*(dx(i-1)+dx(i)) dx(i)];
r(i)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1));
end
%根据需要编写边界条件
A(1,1)=1; %自然样条,默认r_1=r_n=0(初始化r时赋的值)
A(n,n)=1;
coeff=zeros(n,3); %初始化解矩阵
coeff(:,2)=A\r; %求解Ac=r,得系数c
for i=1:n-1 %求解b和d
coeff(i,3)=(coeff(i+1,2)-coeff(i,2))/(3*dx(i));
coeff(i,1)=dy(i)/dx(i)-dx(i)*(2*coeff(i,2)+coeff(i+1,2))/3;
end
coeff=coeff(1:n-1,1:3);
接下来我们便可调用这个函数了,在相同文件夹内创建一个新的 m 文件,输入以下代码
clc,clear all
x=[0,1,2];
y=[3,-2,1];
splinecoeff(x,y)
输出结果如下
接下来我们尝试使用plot方法画出图像,继续调用刚刚写好的 splinecoeff 函数,可以得到样条函数的系数,在每个小区间上指定
k
k
k 个等距点,代入样条函数求出函数值,依次用线段连接各点,即可得到样条函数的近似图像。
先写好画样条函数图像的代码,以便后续调用
%画三次样条图像(待定系数法)
%输入:x,y数据点向量,每个小区间内指定等距点个数k
%输出:所有点的横坐标向量x1,纵坐标向量y1,以及连接这些点的图像
function [x1,y1]=splineplot(x,y,k)
n=length(x);
coeff=splinecoeff(x,y); %计算三次样条插值的系数
x1=[];y1=[]; %初始化用于存储插值结果的空数组 x1 和 y1
for i=1:n-1
xs=linspace(x(i),x(i+1),k);%使用 linspace 函数生成 k 个均匀分布的插值点 xs
dx=xs-x(i);
ys=coeff(i,3)*dx; %使用嵌套乘法(秦九韶算法)求多项式的值
ys=(ys+coeff(i,2)).*dx
ys=(ys+coeff(i,1)).*dx+y(i);
x1=[x1;xs(1:k-1)'];y1=[y1;ys(1:k-1)'];%将每次循环新生成的结果追加到原来的结果上
end
x1=[x1;x(end)];y1=[y1;y(end)]; %将最后一个节点补充上
plot(x,y,'o',x1,y1)
创建一个新的 m 文件进行画图,首先是 k = 3 k=3 k=3 的情形
clc,clear all
x=[0,1,2,3,4,5];
y=[3,1,4,1,2,0];
splineplot(x,y,3)
图像显示如下
然后是
k
=
15
k=15
k=15 的情形
clc,clear all
x=[0,1,2,3,4,5];
y=[3,1,4,1,2,0];
splineplot(x,y,15)
图像显示如下
示例2:matlab内置三次样条插值函数spline
具体可参见 Matlab文档:函数-插值-spline
spline函数默认自然边界条件,代码示例如下
clc,clear all
X = [0 1 3 4 6 7];
Y = sin(X);
x = linspace(0,7,200);
plot(x,ppval(spline(X,Y),x))
结果如下
若要将边界条件改为固支型(即规定一阶导数),只需在Y左右两侧添加对应导数值,示例如下
clc,clear all
X = [0 1 3 4];
Y = [0 0 2 2];
x = linspace(0,4,200);
plot(x,ppval(spline(X,[0 Y 0]),x)) %指定左右端点一阶导数均为0
结果如下
参考书籍:《数值分析》李庆扬 王能超 易大义 编