数值分析(5)-分段低次插值和样条插值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kevin_zhao_zl/article/details/90544577

整理一下数值分析的笔记~
目录:

1. 误差
2. 多项式插值与样条插值(THIS)
3. 函数逼近
4. 数值积分与数值微分
5. 线性方程组的直接解法
6. 线性方程组的迭代解法
7. 非线性方程求根
8. 特征值和特征向量的计算
9. 常微分方程初值问题的数值解

1. 分段低次插值

1.1 高次插值的龙格现象

  龙格现象就是插值多项式不收敛现象,节点(插值多项式的次数)增加不会带来精度的改善,甚至可能增加误差。

1.2 分段低次插值

  插值时先把整个区间分成若干个小区间,每个区间上作低次插值,拼一个分段函数作插值函数。优点诸多但是缺点时节点处导数值不连续,这就产生了样条插值。

2. 三次样条插值

2.1 样条曲线的特点

  • 点点通过 \rarr 插值

  • 光顺

  • 计算简单

  • (对于低阶样条)保凸

2.2 三次样条

定义:设 a = x 0 < x 1 < . . . < x n = b a=x_0 < x_1<...<x_n=b ,函数 S ( x ) C 2 [ a , b ] S(x) \in C^2[a,b] ,且在每个 [ x i , x i + 1 ] [x_i,x_{i+1}] 上为三次多项式,同时满足 S ( x i ) = f ( x i ) , ( i = 0 , 1 , . . . , n ) S(x_i)=f(x_i),(i=0,1,...,n) ,则称f为三次样条插值函数。

{三次样条与分段Hermite插值的根本区别在于其自身光滑除了端点外不需要知道f的导数值}

若S为f的三次样条插值函数:

S ( x ) = { S 1 ( x ) , x [ x 0 , x 1 ] S 2 ( x ) , x [ x 1 , x 2 ] . . . S n ( x ) , x [ x n 1 , x n ] S(x)=\begin{cases} S_1(x),&x \in [x_0,x_1]\\ S_2(x),&x \in [x_1,x_2] \\ ...\\ S_n(x), &x \in [x_{n-1},x_n] \end{cases}

S i ( x ) = a i 0 + a i 1 x + a i 2 x 2 + a i 3 x 3 , i = 1 , 2 , . . . , n S_i(x)=a_{i0}+a_{i1}x+a_{i2}x^2+a_{i3}x^3,i=1,2,...,n ,也就是共有4n个待定系数,而已知条件只有4n-2个,即:

i = 0 , 1 , 2 , . . . , n S ( x i ) = f ( x i ) i = 1 , 2 , . . . , n 1 S ( x i ) = S ( x i + ) , S ( x i ) = S ( x i + ) S ( x i ) = S ( x i + ) i=0,1,2,...,n时,S(x_i)=f(x_i)\\ i=1,2,...,n-1时,S(x_i^-)=S(x_i^+),\\S'(x_i^-)=S'(x_i^+),\\S''(x_i^-)=S''(x_i^+)

还需要两个才能确定最终的系数,通常是在区间端点a,b上各加一个条件即边界条件,由实际问题给出,常用的有三种类型:

  • 给定两端点f(x)的一阶导数值 S ( x 0 ) = f ( x 0 ) , S ( x n ) = f ( x n ) S'(x_0)=f'(x_0),S'(x_n)=f'(x_n)

  • 给定两端点f(x)的二阶导数值 S ( x 0 ) = f ( x 0 ) , S ( x n ) = f ( x n ) S''(x_0)=f''(x_0),S''(x_n)=f''(x_n)

  • f具有周期性,即: S ( x 0 + ) = S ( x n ) , S ( x 0 + ) = S ( x n ) , S ( x 0 + ) = S ( x n ) S(x_0^+)=S(x_n^-),S'(x_0^+)=S'(x_n^-),S''(x_0^+)=S''(x_n^-)

但是通过4n个方程得到4n个待定参数也只是理论上可行,实际计算量太大,由此提出两种简单的构造方法:

2.3 三转角法(从样条函数的一阶导数出发)

假定 S ( x j ) = m j ( j = 0 , . . . , n ) S'(x_j)=m_j(j=0,...,n) ,根据分段三次埃尔米特插值多项式:

S ( x ) = j = 0 n [ f j α j ( x ) + m j β j ( x ) ] , α j ( x ) β j ( x ) S(x)=\sum_{j=0}^n[f_j\alpha_j(x)+m_j\beta_j(x)],\\ 其中\alpha_j(x)和\beta_j(x)为三次埃尔米塔插值基函数

由插值条件,连续性条件和边界条件可得关于 m j m_j 的三对角方程组,求出 m j m_j ,得到三次样条插值函数。

2.4 三弯矩法(从样条函数的二阶导数出发)

S在 [ x i 1 , x i ] [x_{i-1},x_i] 上为三次多项式,所以其二阶导数必为一次式。

设S(x)在节点 x i x_i 处的二阶导数为: S ( x i ) = M i ( i = 0 , 1 , . . . , n ) S''(x_i)=M_i(i=0,1,...,n) ,则 s ( x ) s''(x) 在此小区间上是x的线性函数,且因为 S ( x i 1 ) = M i 1 , S ( x i ) = M i S''(x_{i-1})=M_{i-1},S''(x_{i})=M_{i} ,用线性插值可得:

S i ( x ) = M i 1 x x i x i 1 x i + M i x x i 1 x i x i 1 x [ x i 1 , x i ] h i = x i x i 1 , S ( x ) = M i 1 x i x h i + M i x x i 1 h i S i ( x ) = M i 1 ( x i x ) 3 6 h i + M i ( x x i 1 ) 3 6 h i + A i ( x i x ) + B i ( x x i 1 ) S i ( x i 1 ) = f ( x i 1 ) = y i 1 S i ( x i ) = f ( x i ) = y i S i ( x i 1 ) = 1 6 M i 1 h i 2 + A i h i = y i 1 S i ( x i ) = 1 6 M i h i 2 + B i h i = y i A i = 1 h i ( y i 1 + 1 6 M i 1 h i 2 ) B i = 1 h i ( y i + 1 6 M i h i 2 ) S i ( x ) = M i 1 ( x i x ) 3 6 h i + M i ( x x i 1 ) 3 6 h i + 1 h i ( y i 1 + 1 6 M i 1 h i 2 ) ( x i x ) + 1 h i ( y i + 1 6 M i h i 2 ) ( x x i 1 ) , x [ x i 1 , x i ] M 0 , M 1 , . . . , M n S ( x i 0 ) = S ( x i + 0 ) M i S_i''(x)=M_{i-1}\frac{x-x_i}{x_{i-1}-x_i}+\\ M_i\frac{x-x_{i-1}}{x_i-x_{i-1}},x \in [x_{i-1},x_i]\\ 记h_i=x_i-x_{i-1},有\\ S''(x)=M_{i-1}\frac{x_i-x}{h_i}+M_i\frac{x-x_{i-1}}{h_i}\\ 连续两次积分得\\ S_i(x)=M_{i-1}\frac{(x_i-x)^3}{6h_i}+M_i\frac{(x-x_{i-1})^3}{6h_i}+\\A_i(x_i-x)+B_i(x-x_{i-1})\\ 由于S_i(x_{i-1})=f(x_{i-1})=y_{i-1}且\\S_i(x_i)=f(x_i)=y_i\\ 得:S_i(x_{i-1})=\frac{1}{6}M_{i-1}h^2_i+A_ih_i=y_{i-1}\\S_i(x_i)=\frac{1}{6}M_ih_i^2+B_ih_i=y_i\\ 得:A_i=\frac{1}{h_i}\left(y_{i-1}+\frac{1}{6}M_{i-1}h_i^2\right)\\ B_i=\frac{1}{h_i}\left(y_{i}+\frac{1}{6}M_{i}h_i^2\right)\\ 代入得:\\ S_i(x)=M_{i-1}\frac{(x_i-x)^3}{6h_i}+M_i\frac{(x-x_{i-1})^3}{6h_i}+\\\frac{1}{h_i}\left(y_{i-1}+\frac{1}{6}M_{i-1}h_i^2\right)(x_i-x)+\\\frac{1}{h_i}\left(y_{i}+\frac{1}{6}M_{i}h_i^2\right)(x-x_{i-1}),x\in[x_{i-1},x_i]\\ 其中M_0,M-1,...,M_n是待求的常数,\\可利用S'(x_i-0)=S'(x_i+0)求出M_i

由于:

S i ( x ) = M i 1 ( x i x ) 3 6 h i + M i ( x x i 1 ) 3 6 h i + 1 h i ( y i 1 + 1 6 M i 1 h i 2 ) ( x i x ) + 1 h i ( y i + 1 6 M i h i 2 ) ( x x i 1 ) , x [ x i 1 , x i ] S i ( x ) = M i 1 ( x i x ) 2 2 h i + M i ( x x i 1 ) 2 2 h i + ( y i y i 1 ) h i + h i 6 ( M i M i 1 ) S_i(x)=M_{i-1}\frac{(x_i-x)^3}{6h_i}+M_i\frac{(x-x_{i-1})^3}{6h_i}+\\ \frac{1}{h_i}\left(y_{i-1}+\frac{1}{6}M_{i-1}h_i^2\right)(x_i-x)+\\\frac{1}{h_i}\left(y_{i}+\frac{1}{6}M_{i}h_i^2\right)(x-x_{i-1}),x\in[x_{i-1},x_i]\\ 求导,S_i'(x)=-M_{i-1}\frac{(x_i-x)^2}{2h_i}+M_i\frac{(x-x_{i-1})^2}{2h_i}+\\\frac{(y_i-y_{i-1})}{h_i}+\frac{h_i}{6}(M_i-M_{i-1})

由此得:

S i ( x i 0 ) = h i 6 M i 1 + h i 3 M i + y i y i 1 h i S i ( x i 1 + 0 ) = h i 3 M i 1 h i 6 M i + y i y i 1 h i S i + 1 ( x i + 0 ) = h i + 1 3 M i h i + 1 6 M i + 1 + y i + 1 y i h i + 1 S'_i(x_i-0)=\frac{h_i}{6}M_{i-1}+\frac{h_i}{3}M_i+\frac{y_i-y_{i-1}}{h_i}\\ S'_i(x_{i-1}+0)=-\frac{h_i}{3}M_{i-1}-\frac{h_i}{6}M_i+\frac{y_i-y_{i-1}}{h_i}\\ 得S'_{i+1}(x_{i}+0)=-\frac{h_{i+1}}{3}M_{i}-\frac{h_{i+1}}{6}M_{i+1}+\frac{y_{i+1}-y_{i}}{h_{i+1}}

因为 S i ( x i 0 ) = S i + 1 ( x i + 0 ) S_i'(x_i-0)=S_{i+1}'(x_i+0) 可以求出参数 M i 1 , M i , M i + 1 M_{i-1},M_i,M_{i+1} 的一个方程:

h i 6 M i 1 + h i + h i + 1 3 M i + h i + 1 6 M i + 1 = y i + 1 y i h i + 1 + y i y i 1 h i \frac{h_i}{6}M_{i-1}+\frac{h_i+h_{i+1}}{3}M_i+\frac{h_{i+1}}{6}M_{i+1}=\\\frac{y_{i+1}-y_i}{h_{i+1}}+\frac{y_{i}-y_{i-1}}{h_{i}}

两边同乘 6 h i + h i + 1 \frac{6}{h_i+h_{i+1}} ,得方程:

h i h i + h i + 1 M i 1 + 2 M i + h i + 1 h i + h i + 1 M i + 1 = 6 h i + h i + 1 ( f [ x i , x i + 1 ] f [ x i 1 , x i ] ) \frac{h_i}{h_i+h_{i+1}}M_{i-1}+2M_i+\frac{h_{i+1}}{h_i+h_{i+1}}M_{i+1}=\\\frac{6}{h_i+h_{i+1}}\left(f[x_i,x_{i+1}]-f[x_{i-1},x_i]\right)

令:

μ i = h i h i + h i + 1 λ i = h i + 1 h i + h i + 1 = 1 μ i g i = 6 h i + h i + 1 ( f [ x i , x i + 1 ] f [ x i 1 , x i ] ) = 6 f [ x i 1 , x i , x i + 1 ] \mu_i=\frac{h_i}{h_i+h_{i+1}}\\ \lambda_i=\frac{h_{i+1}}{h_i+h_{i+1}}=1-\mu_i\\ g_i=\frac{6}{h_i+h_{i+1}}\left(f[x_i,x_{i+1}]-f[x_{i-1},x_i]\right)\\=6f[x_{i-1},x_i,x_{i+1}]

则方程可以简写为: μ i M i 1 + 2 M i + λ i M i + 1 = g i , i = 1 , 2 , . . . , n 1 \mu_iM_{i-1}+2M_i+\lambda_iM_{i+1}=g_i,i=1,2,...,n-1 ,也就是共有n-1个方程,下面分三种边界条件依次讨论:

2.4.1 第一种边界条件,已知插值区间两端的一阶导数值

μ i = h i h i + h i + 1 , λ i = h i h i + h i + 1 g i = 6 f [ x i 1 , x i , x i + 1 ] , g 0 = 6 h 1 ( f [ x 0 , x 1 ] y 0 ) , g n = 6 y n f [ x n 1 , x n ] \mu_i=\frac{h_i}{h_i+h_{i+1}}, \lambda_i=\frac{h_i}{h_i+h_{i+1}}\\ g_i=6f[x_{i-1},x_i,x_{i+1}],\\g_0=\frac{6}{h_1}(f[x_0,x_1]-y_0'),\\g_n=\frac{6}{y'_n-f[x_{n-1},x_n]}

有三弯矩方程:

[ 2 1 μ 1 2 λ 1 . . . . . . . . . . . . . . . μ n 1 2 λ n 1 1 2 ] [ M 0 M 1 . . . M n 1 M n ] = [ g 0 g 1 . . . g n 1 g n ] \left[ \begin{matrix} 2 & 1 & & & \\ \mu_1 & 2 & \lambda_1 & & \\ ...&...&...&...&...\\ & & \mu_{n-1} & 2 & \lambda_{n-1} \\ & & & 1 & 2 \end{matrix} \right] \left[ \begin{matrix} M_0 \\ M_1 \\ ... \\ M_{n-1}\\ M_n \end{matrix} \right]= \left[ \begin{matrix} g_0 \\ g_1 \\ ... \\ g_{n-1}\\ g_n \end{matrix} \right]

2.4.2 第二种边界条件:已知插值区间两端的二阶导数值

有三弯矩矩阵:

[ 2 λ 1 μ 2 2 λ 2 . . . . . . . . . . . . . . . μ n 2 2 λ n 2 μ n 1 2 ] [ M 1 M 2 . . . M n 2 M n 1 ] = [ g 1 μ 1 y 0 g 2 . . . g n 2 g n 1 λ n 1 y n ] M 0 = M n = 0 \left[ \begin{matrix} 2 & \lambda_1 & & & \\ \mu_2 & 2 & \lambda_2 & & \\ ...&...&...&...&...\\ & & \mu_{n-2} & 2 & \lambda_{n-2} \\ & & & \mu_{n-1} & 2 \end{matrix} \right] \left[ \begin{matrix} M_1 \\ M_2 \\ ... \\ M_{n-2}\\ M_{n-1} \end{matrix} \right]= \left[ \begin{matrix} g_1-\mu_1y''_0 \\ g_2 \\ ... \\ g_{n-2}\\ g_{n-1}-\lambda_{n-1}y_n'' \end{matrix} \right]\\ 且有自然边界条件:M_0=M_n=0

2.4.3 第三种边界条件

有三弯矩矩阵:

[ 2 λ 1 μ 1 μ 2 2 λ 2 . . . . . . . . . . . . . . . μ n 1 2 λ n 1 λ n μ n 2 ] [ M 1 M 2 . . . M n 1 M n ] = [ g 1 g 2 . . . g n 1 g n ] \left[ \begin{matrix} 2 & \lambda_1 & & & \mu_1\\ \mu_2 & 2 & \lambda_2 & & \\ ...&...&...&...&...\\ & & \mu_{n-1} & 2 & \lambda_{n-1} \\ \lambda_n& & & \mu_n & 2 \end{matrix} \right] \left[ \begin{matrix} M_1 \\ M_2 \\ ... \\ M_{n-1}\\ M_n \end{matrix} \right]= \left[ \begin{matrix} g_1 \\ g_2 \\ ... \\ g_{n-1}\\ g_n \end{matrix} \right]

值得注意的是,上面三种条件中的线性方程组的系数矩阵都是非奇异的,因此有唯一解,三次样条函数由边界条件唯一确定。

eg.设 f ( 0 ) = 0 , f ( 1 ) = 1 , f ( 2 ) = 0 , f ( 3 ) = 1 , f ( 0 ) = 1 , f ( 3 = 0 ) f(0)=0,f(1)=1,f(2)=0,f(3)=1,f''(0)=1,f''(3=0) ,试求 f ( x ) f(x) 在区间[0,3]上的三次样条函数S(x).

解:由 M 0 = y 0 , M n = y n M_0=y''_0,M_n=y''_n M 0 = f ( 0 ) = 1 , M 3 = f ( 3 ) = 0 M_0=f''(0)=1,M_3=f''(3)=0 ,构造差商表:

x i x_i f ( x i ) f(x_i) 一阶差商 二阶差商
0 0
1 1 1
2 0 -1 -1
3 1 1 1

由:

μ i = h i h i + h i + 1 λ i = h i + 1 h i + h i + 1 = 1 μ i g i = 6 h i + h i + 1 ( f [ x i , x i + 1 ] f [ x i 1 , x i ] ) = 6 f [ x i 1 , x i , x i + 1 ] \mu_i=\frac{h_i}{h_i+h_{i+1}}\\ \lambda_i=\frac{h_{i+1}}{h_i+h_{i+1}}=1-\mu_i\\ g_i=\frac{6}{h_i+h_{i+1}}\left(f[x_i,x_{i+1}]-f[x_{i-1},x_i]\right)\\=6f[x_{i-1},x_i,x_{i+1}]

μ 1 = 0.5 , u μ 2 = 0.5 , λ 1 = λ 2 = 0.5 , g 1 = 6 , g 2 = 6 \mu_1=0.5,u\mu_2=0.5,\lambda_1=\lambda_2=0.5,g_1=-6,g_2=6 ,第二边界条件的三弯矩方程为:

[ 2 λ 1 μ 2 2 λ 2 . . . . . . . . . . . . . . . μ n 2 2 λ n 2 μ n 1 2 ] [ M 1 M 2 . . . M n 2 M n 1 ] = [ g 1 μ 1 y 0 g 2 . . . g n 2 g n 1 λ n 1 y n ] \left[ \begin{matrix} 2 & \lambda_1 & & & \\ \mu_2 & 2 & \lambda_2 & & \\ ...&...&...&...&...\\ & & \mu_{n-2} & 2 & \lambda_{n-2} \\ & & & \mu_{n-1} & 2 \end{matrix} \right] \left[ \begin{matrix} M_1 \\ M_2 \\ ... \\ M_{n-2}\\ M_{n-1} \end{matrix} \right]= \left[ \begin{matrix} g_1-\mu_1y''_0 \\ g_2 \\ ... \\ g_{n-2}\\ g_{n-1}-\lambda_{n-1}y_n'' \end{matrix} \right]\\

得:

[ 2 0.5 0.5 2 ] [ M 1 M 2 ] = [ 6 0.5 6 ] \left[ \begin{matrix} 2 & 0.5 \\ 0.5 & 2 \end{matrix} \right] \left[ \begin{matrix} M_1 \\ M_2 \end{matrix} \right]= \left[ \begin{matrix} -6-0.5\\ 6 \end{matrix} \right]

解得 M 1 = 64 15 , M 2 = 61 15 M_1=\frac{-64}{15},M_2=\frac{61}{15}

因为:

S i ( x ) = M i 1 ( x i x ) 3 6 h i + M i ( x x i 1 ) 3 6 h i + 1 h i ( y i 1 + 1 6 M i 1 h i 2 ) ( x i x ) + 1 h i ( y i + 1 6 M i h i 2 ) ( x x i 1 ) , x [ x i 1 , x i ] S_i(x)=M_{i-1}\frac{(x_i-x)^3}{6h_i}+M_i\frac{(x-x_{i-1})^3}{6h_i}+\\\frac{1}{h_i}\left(y_{i-1}+\frac{1}{6}M_{i-1}h_i^2\right)(x_i-x)+\\\frac{1}{h_i}\left(y_{i}+\frac{1}{6}M_{i}h_i^2\right)(x-x_{i-1}),x\in[x_{i-1},x_i]\\

h i = 1 , M 0 = 1 , M 1 , M 2 h_i=1,M_0=1,M_1,M_2 代入可得:

x [ 0 , 1 ] , S 1 ( x ) = 1 90 ( 79 x 2 + 45 x 3 + 124 x ) x [ 1 , 2 ] , S 2 ( x ) = 1 90 ( 125 x 3 567 x 2 + 736 x 204 ) x [ 2 , 3 ] , S 3 ( x ) = 1 90 ( 61 x 3 + 549 x 2 1496 x + 1284 ) x\in[0,1],S_1(x)=\frac{1}{90}(-79x^2+45x^3+124x)\\ x\in[1,2],S_2(x)=\frac{1}{90}(125x^3-567x^2+736x-204)\\ x\in[2,3],S_3(x)=\frac{1}{90}(-61x^3+549x^2-1496x+1284)


{持续更新}
欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kevin_zhao_zl/article/details/90544577
今日推荐