数值分析——样条函数及三次样条插值
python三次样条插值函数
![python三次样条插值函数](https://img.taocdn.com/s3/m/4d97b44c00f69e3143323968011ca300a6c3f69f.png)
python三次样条插值函数一、什么是插值函数插值函数是一种数学方法,用于通过给定数据点之间的间隔来估计未知数据点的值。
在Python中,我们可以使用三次样条插值函数来进行这样的估计。
二、三次样条插值三次样条插值是一种数值分析方法,用于在给定数据点之间构造一个平滑的多项式函数。
这个函数被称为样条函数,由许多小的多项式片段组成。
在每个数据点之间,这些多项式片段满足一定的条件,使得整个函数是连续且光滑的。
2.1 样条函数的性质三次样条插值函数具有以下性质: - 在每个数据点处,函数值等于给定的数据点的函数值。
- 在每个数据点处,函数的一阶导数值等于给定数据点的一阶导数值。
- 在每个数据点处,函数的二阶导数值等于给定数据点的二阶导数值。
- 在数据点之间,函数是一个三次多项式。
2.2 插值函数的构造要构造三次样条插值函数,我们需要以下步骤: 1. 首先,给定一些数据点,这些数据点包含要插值的函数的值。
2. 然后,计算每个数据点之间的插值多项式的系数。
3. 接下来,定义一个样条函数,它由这些插值多项式组成。
4. 最后,使用这个样条函数来估计未知数据点的值。
三、三次样条插值函数的Python实现在Python中,我们可以使用SciPy库中的interp1d函数来实现三次样条插值。
interp1d函数接受一维数组作为输入,并返回一个能够进行插值的函数对象。
3.1 安装SciPy库要使用interp1d函数,首先需要安装SciPy库。
可以使用以下命令来安装SciPy:pip install scipy3.2 使用interp1d函数进行插值以下是使用interp1d函数进行三次样条插值的示例代码:import numpy as npfrom scipy.interpolate import interp1d# 定义一些数据点x = np.array([1, 2, 3, 4, 5])y = np.array([2, 3, 5, 8, 9])# 使用interp1d函数进行插值f = interp1d(x, y, kind='cubic')# 估计新的数据点的值x_new = np.array([1.5, 2.5, 3.5, 4.5])y_new = f(x_new)print(y_new)以上代码中,我们首先定义了一些数据点,然后使用interp1d函数创建了一个插值函数对象f。
C _数值分析_三次样条插值_自动选取步长梯形法_ROMBERG求积法_列主元高斯消去法_列主元LU分解法_JACOBI迭
![C _数值分析_三次样条插值_自动选取步长梯形法_ROMBERG求积法_列主元高斯消去法_列主元LU分解法_JACOBI迭](https://img.taocdn.com/s3/m/2016014b3b3567ec102d8a71.png)
//系数矩阵 //右端项 //中间项 //输出 //选取列主元的比较器
int i,j,k;
//计数器
void main() {
cout << "请输入线性方程组(ai1,ai2,ai3......ain, yi):"<<endl; for ( i = 0; i < N ;i++) {
for (int j = 0; j< N ;j++ ) cin >> A[i][j];
A[i][j] = A[i][j] - T * A[k][j]; } } } X[N-1] = B[N-1]/A[N-1][N-1]; for (i = N-2; i >=0 ; i--) {
6
double Temp = 0; for (int j = i+1; j<N ;j++)
Temp = Temp + A[i][j] * X[j]; X[i] = (B[i] - Temp) /A[i][i]; } cout << "线性方程组的解(X1,X2,X3......Xn)为:"<<endl; for( i = 0; i < N ;i++) { cout << X[i] <<" "; } } 运行结果截图:
double fun(double a) {
return 2/( 1+a*a ); } double SelfSelLength(double R_a,double R_b,double e) {
double h = (R_b-R_a)/2; double R1 = (fun(R_a)+fun(R_b)) * h; int n = 1; double R0; double S; double E; do //每当误差值不符合要求时,计算下一个 result 值 {
三次样条插值的方法和思路
![三次样条插值的方法和思路](https://img.taocdn.com/s3/m/94b716fb970590c69ec3d5bbfd0a79563c1ed4b0.png)
三次样条插值的方法和思路摘要:1.三次样条插值的基本概念2.三次样条插值的数学原理3.三次样条插值的实现步骤4.三次样条插值的优缺点5.三次样条插值在实际应用中的案例正文:在日常的科学研究和工程应用中,我们经常会遇到需要对一组数据进行插值的问题。
插值方法有很多,其中三次样条插值是一种常见且有效的方法。
本文将从基本概念、数学原理、实现步骤、优缺点以及实际应用案例等方面,全面介绍三次样条插值的方法和思路。
一、三次样条插值的基本概念三次样条插值(Cubic Spline Interpolation)是一种基于分段多项式的插值方法。
它通过在各个节点上构建一条三次多项式曲线,使得这条曲线在节点之间满足插值条件,从而达到拟合数据的目的。
二、三次样条插值的数学原理三次样条插值的数学原理可以分为两个部分:一是分段三次多项式的构建,二是插值条件的满足。
1.分段三次多项式的构建假设有一组数据点序列为(x0,y0),(x1,y1),(x2,y2),(x3,y3),我们可以将这些数据点连接起来,构建一条分段三次多项式曲线。
分段三次多项式在每个子区间上都是一个三次多项式,它们之间通过节点值进行连接。
2.插值条件的满足为了使分段三次多项式在节点之间满足插值条件,我们需要在每个子区间上满足以下四个条件:(1)端点条件:三次多项式在区间的端点上分别等于节点值;(2)二阶导数条件:三次多项式在区间内的二阶导数等于节点间的斜率;(3)三阶导数条件:三次多项式在区间内的三阶导数等于节点间的曲率;(4)内部点条件:三次多项式在区间内部满足插值函数的连续性。
通过求解这四个条件,我们可以得到分段三次多项式的系数,从而实现插值。
三、三次样条插值的实现步骤1.确定插值节点:根据数据点的位置,选取合适的节点;2.构建分段三次多项式:根据节点值和插值条件,求解分段三次多项式的系数;3.计算插值结果:将待插值点的横坐标代入分段三次多项式,得到插值结果。
第4章 插值法(3)
![第4章 插值法(3)](https://img.taocdn.com/s3/m/31f0760002020740be1e9bd6.png)
第4章 插值逼近
相应也要求样条插值函数s(x)也具有周期性,故在端 点要求满足条件
《 数 值 分 析 》
s′( x0 ) = s′( xn ), s′′( x0 ) = s′′( xn )
(4―50)
第4章 插值逼近
hk uk = hk −1 + hk
《 数 值 分 析 》
6 yk +1 + yk yk − yk −1 λk = ( − ) hk −1 + hk hk hk −1
那么
hk −1 1 − uk = hk −1 + hk
(1 − uk )mk −1 + 2mk Байду номын сангаас uk mk +1 = λk k = 1, 2,L , n − 1
(4―44)
第4章 插值逼近
从而解出Ak和Bk,即
yk +1 − yk hk Ak = − ( mk +1 − mk ) hk 6
《 数 值 分 析 》
(4―45)
hk2 Bk = yk − mk 6
(4―46)
由式(4―43)可看出三次样条插值函数s(x)仅与 mk、m k+1有关系,因此只要求得各个mk,则各个子区 间[xk,x k+1]上的三次样条函数也就确定了。下面 介绍求mk的方法。
① 函数y=f(x)在两端点x0及xn处的导数y′0和y′n为已 知。此时要求
′ s′( x0 ) = y0 ,
′ s′( xn ) = yn
由式(4―48)和(4―49)得到
数值计算方法( 三次样条插值)
![数值计算方法( 三次样条插值)](https://img.taocdn.com/s3/m/1fdb4c0bde80d4d8d15a4f90.png)
u xj hj
分段三次Hermite插值算法
则 v A1 y j 1 A2 y j B1 f j1 B2 f j
算法: 1.输入x j , f j , f j (j 0,1,...,n); 2.计算插值 (1)输入插值点u; (2)对于j 1,2,...,n做 如果u x j 则计算A1 , A2 , B1 , B2 ; v A1 f j 1 A2 f j B1 f j1 B2 f j; 3.输出u , v。
三次样条插值
于是由Taylor展示有 s( x) s( xi ) s( xi )(x xi ) s( xi ) s( xi ) 2 ( x xi ) ( x xi )3 2! 3! M M Mi yi s( xi )(x x j ) i ( x xi ) 2 i 1 ( x xi )3 2! 3!( xi 1 xi )
2M 0 M 1 6 f [ x0 , x0 , x1 ]
三次样条插值
同理(2)式中令i n得 M n 1 2M n 6 f [ xn 1 , xn , xn ] 即有 2M 0 M 1 6 f [ x0 , x0 , x1 ] ) i M i 1 2M i i M i 1 6 f [ xi 1 , xi , xi 1 ] (i 1,2,...,n 1 M 2M 6 f [ x , x , x ] n n 1 n n n 1
三次样条插值
对于待定系数a j , b j , c j .d j j 1,2,...n,即4n个未知系数,
而插值条件为 n 2个,还缺两个,因此须 4 给出两个 条件称为边界条件,有 以下三类: 第一类 已知两端点的一阶导数 s( x0 ) f ( x0 ) m0 s( xn ) f ( xn ) mn
三次样条插值方法的应用
![三次样条插值方法的应用](https://img.taocdn.com/s3/m/b6d17c870740be1e640e9a53.png)
CENTRAL SOUTH UNIVERSITY数值分析实验报告三次样条插值方法的应用一、问题背景分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。
样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。
下面我们讨论最常用的三次样条函数及其应用。
二、数学模型样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。
设区间[]b ,a 上给定有关划分b x x n =<<<=Λ10x a ,S 为[]b ,a 上满足下面条件的函数。
● )(b a C S ,2∈;● S 在每个子区间[]1,+i i x x 上是三次多项式。
则称S 为关于划分的三次样条函数。
常用的三次样条函数的边界条件有三种类型:● Ⅰ型 ()()n n n f x S f x S ''0'',==。
● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。
● Ⅲ型 ()()Λ3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。
鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。
三、算法及流程按照传统的编程方法,可将公式直接转换为MATLAB可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB在矩阵运算上的优势。
第5章-3-三次样条插值PPT课件
![第5章-3-三次样条插值PPT课件](https://img.taocdn.com/s3/m/8d40eab49b6648d7c0c74665.png)
(x
a)
m
m次截断多项式
a
.
7
定理5.5 任意s(x)∈Sm(x1,x2,…,xn)均可唯一地表示为
n
s(x)pm(x) cj(xxj)m , x (4-31) j1
其中pm(x)∈Pm,cj(j=1,2,…,n)为实数。
定理5.6 为使s(x)∈Sm(x1,x2,…,xn),必须且只须存在pm(x)∈Pm
8
例1 验证分片多项式是三次样条函数。
1 2x
x 3
S ( x) 2825x9x2x3 3x1
2619x3x2x3 1x0
2619x3x2
0 x
解 利用上面的定理(光滑因子)验证.
(x 3)3,
2(x 1)3,
x3,
所以由定理5.5可知该函数为三次样条函数.
例,设
x3x2
0x1
S(x) a3xb2 xc x11x2
信息;
样? ?条?插插值值::(样条函数—满足一定光滑性的分段多项式)。 局部性好, 满足一定光滑性, 收敛性保证, 只需要函数值
信息。
.
2
样条函数是一个重要的逼近工具,在插值、数值微分、曲 线拟合等方面有着广泛的应用。
定义5.3 对区间(-∞,+∞)的一个分割:
: x 1 x 2 x n ,
n
p n (x )p n 1 (x ) c n (x x n )m p0(x) cj(xxj)m j1
为了便于表示分段信息, 引进截断多项式:
(x a)m
(x a)m , x a,
0, x a,
(5-30)
易见
(x
a)
m
∈Cm-1(-∞,+∞)
三次样条插值算法详解
![三次样条插值算法详解](https://img.taocdn.com/s3/m/a91bcea2541810a6f524ccbff121dd36a32dc40f.png)
三次样条插值算法要求数据点数量较多,且在某些情况下可能存在数值不稳定性,如数据 点过多或数据点分布不均等情况。此外,该算法对于离散数据点的拟合效果可能不如其他 插值方法。
对未来研究的展望
01
02
03
改进算法稳定性
针对数值不稳定性问题, 未来研究可以探索改进算 法的数值稳定性,提高算 法的鲁棒性。
3
数据转换
对数据进行必要的转换,如标准化、归一化等, 以适应算法需求。
构建插值函数
确定插值节点
根据数据点确定插值节点,确保插值函数在节点处连续且光滑。
构造插值多项式
根据节点和数据点,构造三次多项式作为插值函数。
确定边界条件
根据实际情况确定插值函数的边界条件,如周期性、对称性等。
求解插值函数
求解线性方程组
06
结论
三次样条插值算法总结
适用性
三次样条插值算法适用于各种连续、光滑、可微的分段函数插值问题,尤其在处理具有复 杂变化趋势的数据时表现出色。
优点
该算法能够保证插值函数在分段连接处连续且具有二阶导数,从而在插值过程中保持数据 的平滑性和连续性。此外,三次样条插值算法具有简单、易实现的特点,且计算效率较高 。
根据数据点的数量和分布,合理分段,确保 拟合的精度和连续性。
求解线性方程组
使用高效的方法求解线性方程组,如高斯消 元法或迭代法。
结果输出
输出拟合得到的插值函数,以及相关的误差 分析和图表。
03
三次样条插值算法步骤
数据准备
1 2
数据收集
收集需要插值的原始数据点,确保数据准确可靠。
数据清洗
对数据进行预处理,如去除异常值、缺失值处理 等。
数值分析实验报告-插值、三次样条
![数值分析实验报告-插值、三次样条](https://img.taocdn.com/s3/m/7f6e10a810a6f524cdbf8531.png)
实验报告:牛顿差值多项式&三次样条问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。
实验原理:详见《数值分析 第5版》第二章相关内容。
实验内容:(1)牛顿插值多项式1.1 当n=10时:在Matlab 下编写代码完成计算和画图。
结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.^2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x^2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36* x^4+2.0202e-14*x^3-16.855*x^2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
数值分析中常用的插值方法
![数值分析中常用的插值方法](https://img.taocdn.com/s3/m/0b13dd7b590216fc700abb68a98271fe910eaf85.png)
数值分析中常用的插值方法在数值计算中,许多问题都可以用插值方法来近似求解,比如曲线拟合、函数逼近和图像重建等。
插值方法是指在已知数据点的情况下,通过一些数值计算技巧,在每个数据点处构造一个多项式函数,使得该函数在每个数据点处都能通过数据点。
在数据点之间计算函数值时,就可以使用这个多项式函数进行估算。
接下来,我们就来详细介绍一些常见的插值方法。
一、拉格朗日插值法拉格朗日插值法是一个经典的插值方法,它的思想是通过给定的数据点,构造一个经过这些点的多项式函数进行逼近。
具体来讲,拉格朗日插值法会首先构造一个基函数,该函数满足只在其对应的数据点处等于1,其余的数据点处等于0。
然后,根据基函数和数据点,构造一个多项式函数,使得该函数在每个数据点处都能通过数据点。
最终得到的多项式函数就是插值函数。
优点:简单易懂,使用较为广泛。
缺点:多项式次数较高时造成的误差会较大,且在数据点密集的区域可以出现龙格现象,使得插值函数在某些区间内呈现大幅度振荡。
二、牛顿插值法牛顿插值法是一种递推式的插值方法,它通过利用已知的数据点和前面已经计算出来的差商,得到一个逐步逼近的插值函数。
具体来讲,牛顿插值法会先将已知的数据点连成一条曲线,然后逐个向这条曲线添加新的数据点,每次添加一个新的数据点后,将差商计算出来并加入到之前的差商序列中,最终得到一个多项式函数,它在每个数据点处都能通过数据点。
牛顿插值法的优缺点与拉格朗日插值法相似,但是由于牛顿插值法是递推式的,可以方便的添加新的数据点,因此在数据点多变的情况下,牛顿插值法具有很大的优势。
三、分段插值法分段插值法是一种将插值区间划分为多个子区间的插值方法,在每个子区间内使用插值方法进行插值,然后将所有子区间内的插值函数拼接起来,得到最终的插值函数。
分段插值法主要分为两种:线性分段插值和三次样条插值。
1.线性分段插值线性分段插值的思路很简单,即在每个数据点处构造两条直线,在数据点之间的区间内使用一条直线作为插值函数。
第二章三次样条插值
![第二章三次样条插值](https://img.taocdn.com/s3/m/e589cb3fa0116c175e0e4800.png)
mk 1 2mk
hk 1 hk hk 1
k 1
3( hk yk1 yk hk1 yk yk1 )
hk hk 1
hk
hk hk 1
hk 1
k mk1 2mk k mk 1 gk
k
hk
hk hk 1
k
hk 1 hk hk 1
gk
3(k
yk yk 1 hk 1
根据S ( x)在[a, b]上二阶导数连续 在节点xj j (1, 2, , n 1)处就应满足连续性条件
S(x j 0) S(x j 0) S ' (x j 0) S '(x j 0) S"(x j 0) S"(x j 0)
共(n+1)+(3n-3)=4n-2个条件,因此还需要 两个条件才能确定S(x)
注:三次样条与分段 Hermite 插值的根本区别在于S(x)自 身光滑,不需要知道 f 的导数值(除了在2个端点可能需 要);而Hermite插值依赖于f 在所有插值点的导数值。
f(x)
H(x)
S(x)
要求出S(x),则在每个小区间上 [x j , x要j1确] 定4个 待定系数,共有n个小区间,所以应确定4n个参 数。
可在区间端点a,b上各加一个条件(边界条件), 具体要根据实际问题要求给定;
1. 已知两端的一阶导数值
S(x0 ) f0
S(xn ) fn
2. 两端的二阶导数已知
S(x0 ) f0 S"(xn ) fn
其特殊情况为
S(x0 ) S(xn ) 0
3. 当f(x)是xn x0为周期的周期函数时,则要求 S(x)也是周期函数,这时边界条件应满足:
数值分析作业-三次样条插值教学提纲
![数值分析作业-三次样条插值教学提纲](https://img.taocdn.com/s3/m/448f9bef852458fb770b56f9.png)
数值分析作业-三次样条插值数值计算方法作业实验4.3 三次样条差值函数实验目的:掌握三次样条插值函数的三弯矩方法。
实验函数:dt ex f xt ⎰∞--=2221)(π求f(0.13)和f(0.36)的近似值实验内容:(1) 编程实现求三次样条插值函数的算法,分别考虑不同的边界条件; (2) 计算各插值节点的弯矩值;(3) 在同一坐标系中绘制函数f(x),插值多项式,三次样条插值多项式的曲线比较插值结果。
实验4.5 三次样条差值函数的收敛性实验目的:多项式插值不一定是收敛的,即插值的节点多,效果不一定好。
对三次样条插值函数如何呢?理论上证明三次样条插值函数的收敛性是比较困难的,通过本实验可以证明这一理论结果。
实验内容:按照一定的规则分别选择等距或非等距的插值节点,并不断增加插值节点的个数。
实验要求:(1) 随着节点个数的增加,比较被逼近函数和三样条插值函数的误差变化情况,分析所得结果并与拉格朗日插值多项式比较;(2) 三次样条插值函数的思想最早产生于工业部门。
作为工业应用的例子,考虑如下例子:某汽车制造商根据三次样条插值函数设计车门曲线,其中一段数据如下:k x 0 1 2 3 4 5 6 7 8 9 10 k y 0.0 0.79 1.53 2.19 2.71 3.03 3.27 2.89 3.06 3.19 3.29ky ' 0.80.2算法描述:拉格朗日插值:其中是拉格朗日基函数,其表达式为:()∏≠=--=ni j j j i ji x x x x x l 0)()(牛顿插值:))...()(](,...,,[....))(0](,,[)0](,[)()(1102101210100----++--+-+=n n n x x x x x x x x x x f x x x x x x x f x x x x f x f x N其中⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧--=--=--=-)/(]),...,[],...,[(]...,[..],[],[],,[)()(],[01102110x x x x x f x x x f x x x f x x x x f x x f x x x f x x x f x f x x f n n n n i k j i k j k j i ji j i j i三样条插值:所谓三次样条插值多项式Sn(x)是一种分段函数,它在节点Xi(a<X0<X1……<Xn<b)分成的每个小区间[x i-1,x i ]上是三次多项式,其在此区间上的表达式如下:],[),6()6(]6)([6)(6)()(111113131i i ii i i i i i i i i i i i i i i i i i x x x h yM h M h h y x M M h h y y h x x Mi h x x M x S -------∈-+-+---+-+-=式中Mi=)(i x S ''.因此,只要确定了Mi 的值,就确定了整个表达式,Mi 的计算方法如下:令⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=---+=+=+=+--++++++],,[6)(6111111111i i i i i i i i i i i i i i i i i i i ix x x f h y y h y y h h d h h h h h h λμ则Mi 满足如下n-1个方程:1,...2,1,211-==+++-n i d M M M i i i i i i λμ 常用的边界条件有如下几类:(1) 给定区间两端点的斜率m 0,m n ,即n n n m y x S m y x S ='='='=')(,)(00(2) 给定区间两端点的二阶导数M0,Mn,即n n n M y x S M y x S =''=''=''='')(,)(000 (3) 假设y=f(x)是以b-a 为周期的周期函数,则要求三次样条插值函数S(x )也为周期函数,对S (x )加上周期条件2,1,0),0()0()(0)(=-=+p x S x S n p p对于第一类边界条件有⎪⎪⎩⎪⎪⎨⎧--=+--=+--)(62)(6211001110n n nn nn ih y y mn h M M m h y y h M M对于第二类边界条件有⎩⎨⎧=+=+-nn n n d M M d M M 2210100μλ其中nn n n nn n M u x x f m h d M m x x f h d )1(2]),[(6)1(2)],[(6100001010-+-=-+-=-μλλ那么解就可以为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----n n n n n n n d d d d d M M M M M 1210121011...2...............2............................1..2.1......0..2μλμλμλ 对于第三类边界条件,)0()0(,,000-=+==n n n x S x S M M y y ,由此推得0010012d M M M n =-++μλ,其中]),1[],[(6,,101010110n n nn n n x x f x x f h h d h h h h h h --+=+=+=μλ,那么解就可以为:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-------1221012101221100...2.............2..............................2..,,.......,..22n n n n n n n d d d d d M M M M M n μλλμλμμλ 程序代码: 1拉格朗日插值函数Lang.mfunction f=lang(X,Y,xi) %X 为已知数据的横坐标 %Y 为已知数据的纵坐标 %xi 插值点处的横坐标%f 求得的拉格朗日插值多项式的值 n=length(X); f=0; for i=1:n l=1; for j=1:i-1l=l.*(xi-X(j))/(X(i)-X(j)); end ; for j=i+1:nl=l.*(xi-X(j))/(X(i)-X(j)); end ;%拉格朗日基函数 f=f+l*Y(i); endfprintf('%d\n',f) return2 牛顿插值函数newton.mfunction f=newton(X,Y,xi) %X 为已知数据的横坐标 %Y 为已知数据的纵坐标 %xi 插值点处的横坐标%f 求得的拉格朗日插值多项式的值 n=length(X); newt=[X',Y']; %计算差商表 for j=2:nfor i=n:-1:1if i>=jY(i)=(Y(i)-Y(i-1))/(X(i)-X(i-j+1));else Y(i)=0;endendnewt=[newt,Y'];end%计算牛顿插值f=newt(1,2);for i=2:nz=1;for k=1:i-1z=(xi-X(k))*z;endf=f+newt(i-1,i)*z;endfprintf('%d\n',f)return3三次样条插值第一类边界条件Threch.mfunction S=Threch1(X,Y,dy0,dyn,xi)% X为已知数据的横坐标%Y为已知数据的纵坐标%xi插值点处的横坐标%S求得的三次样条插值函数的值%dy0左端点处的一阶导数% dyn右端点处的一阶导数n=length(X)-1;d=zeros(n+1,1);h=zeros(1,n-1);f1=zeros(1,n-1);f2=zeros(1,n-2);for i=1:n%求函数的一阶差商h(i)=X(i+1)-X(i);f1(i)=(Y(i+1)-Y(i))/h(i);endfor i=2:n%求函数的二阶差商f2(i)=(f1(i)-f1(i-1))/(X(i+1)-X(i-1));d(i)=6*f2(i);endd(1)=6*(f1(1)-dy0)/h(1);d(n+1)=6*(dyn-f1(n-1))/h(n-1);%¸赋初值A=zeros(n+1,n+1);B=zeros(1,n-1);C=zeros(1,n-1);for i=1:n-1B(i)=h(i)/(h(i)+h(i+1));C(i)=1-B(i);endA(1,2)=1;A(n+1,n)=1;for i=1:n+1A(i,i)=2;endfor i=2:nA(i,i-1)=B(i-1);A(i,i+1)=C(i-1);endM=A\d;syms x;for i=1:nSx(i)=collect(Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x-X(i))... +M(i)/2*(x-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(x-X(i))^3);digits(4);Sx(i)=vpa(Sx(i));%三样条插值函数表达式endfor i=1:ndisp('S(x)=');fprintf('%s (%d,%d)\n',char(Sx(i)),X(i),X(i+1));endfor i=1:nif xi>=X(i)&&xi<=X(i+1)S=Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(xi-X(i))+M(i)/2*(xi-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(xi-X(i))^3;endenddisp('xi S');fprintf('%d,%d\n',xi,S);return4 三次样条插值第二类边界条件Threch2.mfunction [Sx]=Threch2(X,Y,d2y0,d2yn,xi)X为已知数据的横坐标%Y为已知数据的纵坐标%xi插值点处的横坐标%S求得的三次样条插值函数的值%d2y0左端点处的二阶导数% d2yn右端点处的二阶导数n=length(X)-1;d=zeros(n+1,1);h=zeros(1,n-1);f1=zeros(1,n-1);f2=zeros(1,n-2);for i=1:n%求一阶差商h(i)=X(i+1)-X(i);f1(i)=(Y(i+1)-Y(i))/h(i);endfor i=2:n%求二阶差商f2(i)=(f1(i)-f1(i-1))/(X(i+1)-X(i-1));d(i)=6*f2(i);endd(1)=2*d2y0;d(n+1)=2*d2yn;%赋初值A=zeros(n+1,n+1);B=zeros(1,n-1);C=zeros(1,n-1);for i=1:n-1B(i)=h(i)/(h(i)+h(i+1));C(i)=1-B(i);endA(1,2)=0;A(n+1,n)=0;for i=1:n+1A(i,i)=2;endfor i=2:nA(i,i-1)=B(i-1);A(i,i+1)=C(i-1);endM=A\d;syms x;for i=1:nSx(i)=collect(Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x-X(i))... +M(i)/2*(x-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(x-X(i))^3);digits(4);Sx(i)=vpa(Sx(i));endfor i=1:ndisp('S(x)=');fprintf('%s (%d,%d)\n',char(Sx(i)),X(i),X(i+1));endfor i=1:nif xi>=X(i)&&xi<=X(i+1)S(i)=Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(xi-X(i))+M(i)/2*(xi-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(xi-X(i))^3;endenddisp('xi S');fprintf('%d,%d\n',xi,S);return5插值节点处的插值结果main3.mclearclcX=[0.0,0.1,0.2,0.3,0.4];Y=[0.5000,0.5398,0.5793,0.6179,0.7554];xi=0.13;%xi=0.36;disp('xi=0.13');%disp('xi=0.36');disp('拉格朗日插值结果');lang(X,Y,xi);disp('牛顿插值结果');newton(X,Y,xi);disp('三次样条第一类边界条件插值结果');Threch1(X,Y,0.40,0.36,xi);%0.4,0.36分别为两端点处的一阶导数disp('三次样条第二类边界条件插值结果');Threch2(X,Y,0,-0.136,xi);%0,-0.136分别为两端点处的二阶导数6将多种插值函数即原函数图像画在同一张图上main2.mclearclcX=[0.0,0.1,0.2,0.3,0.4];Y=[0.5000,0.5398,0.5793,0.6179,0.7554];a=linspace(0,0.4,21);NUM=21;L=zeros(1,NUM);N=zeros(1,NUM);S=zeros(1,NUM);B=zeros(1,NUM);for i=1:NUMxi=a(i);L(i)=lang(X,Y,xi);% 拉格朗日插值N(i)=newton(X,Y,xi);%牛顿插值B(i)=normcdf(xi,0,1);%原函数S(i)=Threch1(X,Y,0.4,0.36,xi);%三次样条函数第一类边界条件endplot(a,B,'--r');hold on;plot(a,L,'b');hold on;plot(a,N,'r');hold on;plot(a,S,'r+');hold on;legend('原函数','拉格朗日插值','牛顿插值','三次样条插值',2);hold off7增加插值节点观察误差变化main4.mclear;clc;N=5;%4.5第一问Ini=zeros(1,1001);a=linspace(-1,1,1001);Ini=1./(1+25*a.^2);for i=1:3 %节点数量变化次数N=2*N;t=linspace(-1,1,N+1);%插值节点ft=1./(1+25*t.^2);%插值节点函数值val=linspace(-1,1,101);for j=1:101L(j)=lang(t,ft,val(j));S(j)=Threch1(t,ft,0.074,-0.074,val(j));%三样条第一类边界条件插值endplot(a,Ini,'k')%原函数图象hold onplot(val,L,'r')%拉格朗日插值函数图像hold onplot(val,S,'b')%三次样条插值函数图像str=sprintf('插值节点为%d时的插值效果',N);title(str);legend('原函数','拉格朗日插值','三次样条插值');%显示图例hold offfigureend8车门曲线main5.mclearclcX=[0,1,2,3,4,5,6,7,8,9,10];Y=[0.0,0.79,1.53,2.19,2.71,3.03,3.27,2.89,3.06,3.19,3.29]; dy0=0.8;dyn=0.2;n=length(X)-1;d=zeros(n+1,1);h=zeros(1,n-1);f1=zeros(1,n-1);f2=zeros(1,n-2);for i=1:nh(i)=X(i+1)-X(i);f1(i)=(Y(i+1)-Y(i))/h(i);endfor i=2:nf2(i)=(f1(i)-f1(i-1))/(X(i+1)-X(i-1));d(i)=6*f2(i);endd(1)=6*(f1(1)-dy0)/h(1);d(n+1)=6*(dyn-f1(n-1))/h(n-1); A=zeros(n+1,n+1);B=zeros(1,n-1);C=zeros(1,n-1);for i=1:n-1B(i)=h(i)/(h(i)+h(i+1));C(i)=1-B(i);endA(1,2)=1;A(n+1,n)=1;for i=1:n+1A(i,i)=2;endfor i=2:nA(i,i-1)=B(i-1);A(i,i+1)=C(i-1);endM=A\d;x=zeros(1,n);S=zeros(1,n);for i=1:nx(i)=X(i)+0.5;S(i)=Y(i)+(f1(i)-(M(i)/3+M(i+1)/6)*h(i))*(x(i)-X(i))+M(i)/2*(x(i)-X(i))^2+(M(i+1)-M(i))/(6*h(i))*(x(i)-X(i))^3;endplot(X,Y,'k'); hold on;plot(x,S,'o');title('三次样条插值效果图');legend('已知插值节点','三次样条插值');hold off实验结果:4.31计算插值节点处的函数值xi=0.13时Xi=0.36时2将多种插值函数即原函数图像画在同一张图上4.5.1增加插值节点观察误差变化从上面三张图可以看出增加插值节点并不能改善差之效果4.5.2 车门曲线。
三次样条插值例题解析
![三次样条插值例题解析](https://img.taocdn.com/s3/m/3c50a616443610661ed9ad51f01dc281e53a56fb.png)
三次样条插值例题解析
三次样条插值是一种常用的插值方法,它能够通过一系列已知数据点来构建一条光滑的曲线。
在数值分析和计算机图形学中,三次样条插值常被用来逼近离散的数据点,从而实现曲线的平滑和连续。
在进行三次样条插值之前,我们首先需要了解什么是样条函数。
样条函数是由分段多项式构成的函数,每个分段多项式在相邻的数据点之间起作用。
对于三次样条插值,每个分段多项式是三次多项式,因此称为三次样条函数。
三次样条插值的基本思想是,通过已知的数据点,我们可以确定无穷个三次样条函数,然后根据一定的准则选择最合适的三次样条函数来近似原始数据。
具体的插值过程可以分为以下几个步骤:首先,假设我们有n个已知数据点。
我们需要在每个相邻的数据点之间构建一个三次样条函数。
接着,我们需要确定每个三次样条函数的系数,使得这些函数满足特定的插值条件。
一般来说,我们会采用自然边界条件或者固定边界条件来确定这些系数。
最后,我们可以通过求解一个线性方程组来确定每个分段多项式的系数。
三次样条插值的优点在于它能够在保持曲线平滑和连续的同时,尽可能地逼近原始数据点。
这使得三次样条插值在实际应用中非常有用,特别是在数据可视化和曲线拟合方面。
总结起来,三次样条插值是一种通过构建一系列三次样条函数来逼近已知数据点的方法。
它通过求解一个线性方程组来确定每个分段多项式的系数,从而实现曲线的平滑和连续。
三次样条插值在实际应用中具有广泛的应用价值,是一种非常有效的插值方法。
数值分析(15)样条插值
![数值分析(15)样条插值](https://img.taocdn.com/s3/m/abfe109b08a1284ac8504383.png)
数值分析
同理,在[ xi1, xi ]也可以得到
S
" i
1
(
x
)
6x
2 xi1 h2
i 1
4xi
mi 1
6x
4 xi1 h2
i 1
2xi
mi
6( xi1 xi 2
在内节点x(i ih3i
1
1,
2,
x
)
,
( yi
n-
yi1 )
1)上,由S
" i
(
xi
)
S
" i
1
(
xi
)
1 hi 1
mi 1
化简后得到三弯矩方程
hi1Mi1 (2 hi1+hi)Mi hi Mi1 6( f xi , xi1 f xi1 , xi ) gi
(i 1, 2, , n 1)
h0 2(h0 h1 )
h1
h1
2(h1 h2 ) h2
M0 g1
M1
g2
hn2
2(hn2 hn1 )
是三次多项式; 则称S( x)为三次样条函数。x1, ..., xn1称为内节点, x0 , xn称为外节点.
数值分析
数值分析
插值条件分析
由(3)S( x)在每个[ xi , xi1]上表达式不同,故应分段构造:
S0( x)
S
(
x)
S1( x)
Sn1( x)
x [ x0 , x1]; x [ x1, x2 ];
数值分析
第五节 样条插值
样条是绘图员用于描绘光滑曲线的一种机 械器件,它是一些易弯曲材料制成的窄条或棒条. 在绘制需要通过某点的光滑曲线时,对它在这些 点的位置上“压铁”,它就被强制通过或接近图 表上确定的描绘点.“样条函数”这个术语意在 点出这种函数的图象与机械样条画出的曲线很 象.
数值分析常用的插值方法
![数值分析常用的插值方法](https://img.taocdn.com/s3/m/f90d963d7ed5360cba1aa8114431b90d6c8589a8.png)
数值分析常用的插值方法数值分析中常用的插值方法有线性插值、拉格朗日插值、分段线性插值、Newton插值、Hermite插值、样条插值等。
下面将对这些插值方法进行详细介绍。
一、线性插值(linear interpolation)线性插值是最简单的插值方法之一、假设已知函数在两个点上的函数值,通过这两个点之间的直线来估计中间点的函数值。
线性插值公式为:f(x)=f(x0)+(x-x0)*(f(x1)-f(x0))/(x1-x0)其中,f(x)表示要求的插值点的函数值,f(x0)和f(x1)是已知的两个点上的函数值,x0和x1是已知的两个点的横坐标。
二、拉格朗日插值(Lagrange interpolation)拉格朗日插值是一种基于多项式的插值方法。
它通过多个已知点的函数值构造一个多项式,并利用这个多项式来估计其他点的函数值。
拉格朗日插值多项式的一般形式为:f(x) = Σ[f(xi) * Li(x)] (i=0,1,2,...,n)其中,f(x)表示要求的插值点的函数值,f(xi)是已知的多个点的函数值,Li(x)是拉格朗日基函数。
拉格朗日基函数的表达式为:Li(x) = Π[(x-xj)/(xi-xj)] (i≠j,i,j=0,1,2,...,n)三、分段线性插值(piecewise linear interpolation)分段线性插值是一种逐段线性近似函数的方法。
通过将整个插值区间分成多个小段,在每个小段上使用线性插值来估计函数的值。
分段线性插值的过程分为两步:首先确定要插值的点所在的小段,在小段上进行线性插值来估计函数值。
四、Newton插值(Newton interpolation)Newton插值也是一种基于多项式的插值方法。
利用差商的概念来构造插值多项式。
Newton插值多项式的一般形式为:f(x)=f(x0)+(x-x0)*f[x0,x1]+(x-x0)*(x-x1)*f[x0,x1,x2]+...其中,f(x)表示要求的插值点的函数值,f(x0)是已知的一个点的函数值,f[xi,xi+1,...,xi+k]是k阶差商。
数值分析实验报告-插值、三次样条
![数值分析实验报告-插值、三次样条](https://img.taocdn.com/s3/m/3fb675255e0e7cd184254b35eefdc8d376ee1488.png)
实验报告:牛顿差值多项式&三次样条... . (1)问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数f (x)---作多项式插25 x 2值及三次样条插值对每个n值,分别画出插值函数矽(x)的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1.认真分析问题,深刻理解相关理论知识并能熟练应用;2.编写相关程序并进行实验;3.调试程序,得到最终结果;4.分析解释实验结果;5.按照要求完成实验报告。
实验原理:详见《数值分析第5版》第二章相关容。
实验容:(1)牛顿插值多项式1.1 当 n=10 时:在Matlab下编写代码完成计算和画图。
结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.八2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i) = (f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25火x八2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x )=-220.94*x A10+494.91*x A8-9.5065e-14*x A7-381.43*x A6-8.504e-14*x A5+123.36*x A4+2.0202e-14*x A3-16.855*x A2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
样条插值
![样条插值](https://img.taocdn.com/s3/m/e2a1c7ea19e8b8f67c1cb92c.png)
样条插值在数值分析这个数学分支中,样条插值是使用一种名为样条的特殊分段多项式进行插值的形式。
由于样条插值可以使用低阶多项式样条实现较小的插值误差,这样就避免了使用高阶多项式所出现的龙格现象,所以样条插值得到了流行。
目录• 1 定义• 2 样条插值• 3 线性样条插值• 4 二次样条插值• 5 三次样条插值o 5.1 三次样条的最小性o 5.2 使用自然三次样条的插值• 6 示例o 6.1 线性样条插值o 6.2 二次样条插值•7 参见定义假设有n+1 个不同的节点x i以及n+1 个节点值y i,我们要找到一个n阶样条函数其中每个S i(x) 都是一个k阶的多项式。
样条插值使用多项式插值,对给定数据集进行插值的n阶多项式就被给定数据点所唯一地定义出来。
但是,对同样的数据进行插值的n阶样条并不是唯一的,为了构建一个唯一的样条插值式它还必须满足另外n-1 个自由度。
线性样条插值线性样条插值是最简单的样条插值。
数据点使用直线进行连接,结果样条是一个多边形。
从代数的角度来看,每个S i都是一个如下的线性函数。
样条在每个数据点都必须连续,即我们很容易得到所以以上论述成立。
二次样条插值二次样条插值可以构建为通过选择z0,然后用递推关系就可以得到系数:三次样条插值对于n+1 个给定点的数据集 {x i} ,我们可以用n段三次多项式在数据点之间构建一个三次样条。
如果表示对函数f进行插值的样条函数,那么需要:•插值特性,S(x i)=f(x i)•样条相互连接,S i-1(x i) = S i(x i), i=1,...,n-1•两次连续可导,S'i-1(x i) = S'i(x i) 以及S''i-1(x i) = S''i(x i), i=1,...,n-1.由于每个三次多项式需要四个条件才能确定曲线形状,所以对于组成S的n个三次多项式来说,这就意味着需要 4n个条件才能确定这些多项式。
数值分析
![数值分析](https://img.taocdn.com/s3/m/a9b38af8102de2bd9605889e.png)
这里h为常数,称为步长, , 和 分别为向前, 向后和中心差分算子.
以向前差分为例 利用一阶差分可定义二阶差分
2 f k f k 1 f k f k 2 2 f k 1 f k .
还可以定义m阶差分 m f k m 1 f k 1 m 1 f k ;
xi ƒ(xi) x0 x1 x2 x3 xn ƒ(x0) ƒ(x1) ƒ(x2) ƒ(x3) ƒ(xn) 一阶 均差 二阶均差 三阶均差 n阶均差
ƒ[x0, x1] ƒ[x1, x2] ƒ[x0, x1, x2] ƒ[x2, x3] ƒ[x1, x2, x3] ƒ[x0, x1, x2, x3] ƒ[xn-1, xn] ƒ[xn-2, xn-1, xn] ƒ[xn-3, xn-2, xn-1, xn] ƒ[x0, x1,…, xn]
0 ( x) 1 1 ( x ) x x0 2 ( x ) ( x x0 )( x x1 )
LL n ( x ) ( x x0 )( x x1 ) L ( x xn1 )
当增加一个节点xn+1时,只需加上基函数
n1 ( x xi ) 即可.
n n n j
f k ( I E ) f k (1)
1 2
n1
………… f [ x, x0 , ... , xn1 ] f [ x0 , ... , xn ] ( x xn ) f [ x, x0 , ... , xn ]
1 + (x x0) 2 + … … + (x x0)…(x xn1)
n1
f [ x, x0 ] f [ x0 , x1 ] ( x x1 ) f [ x, x0 , x1 ]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S k ( x )是[ xk , xk + 1 ]上的(两点)三次样条插值多项式, 满足
Sk ( x j ) = y j
x → xk
k = 0,1,2, ⋯ , n − 1; j = k , k + 1
lim S k ( x ) = lim S k − 1 ( x ) + −
一、三次样条插值函数
定义1. 定义
a ≤ x0 , x1 ,⋯ , xn ≤ b为区间[ a , b ]的一个分割
如果函数S ( x )在区间[ a , b ]上满足条件 :
( 1) S ( x ), S ′( x ), S ′′( x )都在区间[ a , b ]上连续 ,即 S ( x ) ∈ C 2 [ a , b ]
f ( x j ) = y j , j = 0 ,1,⋯ , n 如果S ( x )是f ( x )的三次样条插值函数, 则其必满足
S ( x j ) = y j , j = 0 ,1,⋯ , n lim S ( x ) = S ( x j ) = y j , j = 1,⋯ , n − 1 x→ x xlim S ′( x ) = S ′( x j ) = m j , j = 1,⋯ , n − 1 →x lim S ′′( x ) = S ′′( x j ), j = 1 ,⋯ , n − 1
+ x → xk
Sk ( x j ) = y j
k
k = 0,1, ⋯ , n − 1; j = k , k + 1
− x → xk
k −1
k = 1 , 2 ,⋯ , n − 1 k = 1,2 ,⋯ , n − 1 ------(8) k = 1, 2 ,⋯ , n − 1
S ′′( x0 ) = f 0′′ S ′′( xn ) = f n′′
x → xk x → xk x → xk
′ ′ lim S k ( x ) = lim S k − 1 ( x ) + −
x → xk x → xk
k = 1 , 2 ,⋯ , n − 1
------(4)
′ ′ lim S k′( x ) = lim S k′− 1 ( x ) + −
共 4 n − 2个条件
′ S n′− 1 ( xn ) = − 6 h
2 n −1
------(15)
( yn − yn − 1 ) +
2 hn − 1
mn − 1 +
4 hn − 1
mn = f n′′ ----(16)
(15)(16)式是关于m0 , m1 , mn − 1 , mn的方程, 整理后得
y1 − y0 h0 2 m0 + m1 = 3 − f 0′′ h0 2 yn − yn − 1 hn − 1 mn − 1 + 2 mn = 3 + f n′′ 2 hn − 1
S ′( x0 ) = f 0′ S ′′( x0 ) = f 0′′ S ′( xn ) = f n′ ------(5)
S ′′( xn ) = f n′′ ------(6)
( (p S0 p ) ( x0 ) = Sn −1) ( xn )
------(7)
p = 0 ,1 , 2
一般使用第一、二类边界条件, 常用第二类边界条件. 加上任何一类边界条件(至少两个)后
第二章 函数近似计算的插值法
§ 2.6
样条函数及三次样条插值
§2.6 三次样条插值
样条: 样条 是 指飞机或轮船等的制造过程中为描绘 出光滑的外形曲线(放样)所用的工具.
样条本质上是一段一段的三次多项式拼合而成的曲线 在拼接处,不仅函数是连续的,且一阶和二阶导数也是连续的 1946年,Schoenberg将样条引入数学,即所谓的样条函数
(12)式称为基本方程组
如果问题要求满足第一类(一阶)边界条件:
S ′( x0 ) = f 0′ S ′( xn ) = f n′ mn = f n′
------(5) ------(5)
即
m0 = f 0′
基本方程组(12)化为n-1阶方程组
2 m1 + µ 1 m2 = g 1 − λ1 f 0′ λ m + 2m + µ m = g k = 2 ,3 ,⋯ , n − 2 k k k +1 k k k −1 λ m + 2m = g − µ f ′ ------(13) n−1 n−1 n−1 n n−1 n−2
j
j
------(2)
x→ x j
S ( x )要满足上述四组(共 4n − 2个)条件 S ( x )在[ a , b]上必 然是分段函数,即 x ∈ [ x0 , x1 ] S0 ( x ) S1 ( x ) x ∈ [ x1 , x2 ] S (x ) = ------(3) ⋮ ⋮ S ( x) x ∈ [ x , x ] n−1 n−1 n
S k ( x )是[ xk , xk + 1 ]上的三次样条插值多项式, 应有4个待定的系数 即要确定 S ( x )必须确定 4 n个待定的系数
少两个条件
并且我们不能只对插值函数在中间节点的状态进行限制 也要对插值多项式在两端点的状态加以要求 也就是所谓的边界条件: 第一类(一阶 边界条件 第一类 一阶)边界条件 一阶 边界条件: 第二类(二阶 边界条件 第二类 二阶)边界条件 二阶 边界条件: 第三类(周期 边界条件 第三类 周期)边界条件 周期 边界条件:
2
令hk = xk + 1 − xk,k = 0 ,1,⋯ , n − 1
加以整理后可得
hk + 2( x − xk ) h − 2( x − xk + 1 ) Sk ( x) = ( x − xk + 1 )2 yk + k ( x − xk )2 yk + 1 hk3 hk3 ( x − xk ) ( x − xk + 1 ) 2 + ( x − xk + 1 ) mk + ( x − xk )2 mk + 1 hk2 hk2 ------(10) 对S k (x )求二阶导数 , 并整理后得 6( xk + xk + 1 − 2 x ) ′ S k′( x ) = ( yk + 1 − yk ) 3 hk 6 x − 2 xk − 4 xk + 1 6 x − 4 xk − 2 xk + 1 + mk + mk + 1 2 2 hk hk
用
1 hk − 1
1 + 除上式的两边 , 并加以整理 , 得 hk
λk mk − 1 + 2 mk + µ k mk + 1 = g k
其中:
------(12)
k = 1 ,⋯ , n − 1
hk λk = hk + hk − 1
hk − 1 µk = hk + hk − 1
y k − yk − 1 yk + 1 − yk g k = 3( λk + µk ) hk − 1 hk k = 1 ,⋯ , n − 1 共个n − 1个方程 , n + 1个未知量
= g0 = gn
------(17) ------(18)
与基本方程组(12)联合,并化为矩阵形式,得
2 λ1 1 2
λ2
µ1 λ3
2
µ2
2 ⋱ ⋱ ⋱
λn − 1
⋱ 2 µn −1 1 2
m0 g 0 m1 g 1 m2 g 2 ⋮ = ⋮ ⋮ ⋮ mn − 1 g n − 1 m g n n
( 2 ) S ( x )在每个小区间 [ xk , xk + 1 ]上都是三次多项式
则称 S ( x )为区间[ a , b ]上的三次样条函数 ( 3) 如果函数f ( x )在节点x0 , x1 ,⋯ , xn处的函数值为
f ( x j ) = y j , j = 0 ,1,⋯ , n
而三次样条函数 S ( x )满足
x − xk + 1 x − xk + 1 x − x + yk + 1 1 + 2 x − x k k +1 k +1 k
2
2
x − xk x −x k k +1
2
x − xk + 1 x − xk + mk ( x − xk ) x − x + mk + 1 ( x − xk + 1 ) x − x k +1 k k k +1
------(11)
由条件
x → xk
′ ′ lim S k′( x ) = lim S k′− 1 ( x ) + −
x → xk
k = 1 , 2 ,⋯ , n − 1
6 4 2 ′ lim S k′( x ) = 2 ( yk + 1 − yk ) − mk − mk + 1 + x → xk hk hk hk −6 2 4 ′ mk − 1 + mk lim S k′− 1 ( x ) = 2 ( yk − yk − 1 ) + − x → xk hk − 1 hk − 1 hk − 1
这是一个三对角方程组 如果问题要求满足第二类(二阶自然)边界条件:
S ′′( x0 ) = f 0′′ S ′′( xn ) = f n′′