当前课程知识点:Numerical Analysis > [Week 4] Interpolation > 5. [Lecture] Spline > video
返回《Numerical Analysis》慕课在线视频课程列表
返回《Numerical Analysis》慕课在线视频列表
好,样条插值. 假设给定一些数据
和我们之前讲的一样,假设我们有这样的一些数据点
怎样利用这些数据点找到一条经过所有这些点的光滑曲线呢
这是一项很重要的任务
我们之前的第一次尝试,第二次尝试
都是直接利用多项式构造这样的曲线
但是可以可看到,这其中有各种各样的难点
虽然我们没有讲,但如果给定的数据非常多,
使用之前的方法求多项式的时候
将会出现非常特殊的现象
这需要大家亲自计算一下
才能找到使用该多项式去连接所有点时出现的问题
所以我建议大家
对于数据点不断增多的情形,用多项式来连接所有的数据点会出现什么的问题
对于数据点不断增多的情形,用多项式来连接所有的数据点会出现什么的问题
大家在这节课结束如果向我提问的话
我会尽可能为大家解释
我们也可以把样条插值法看作是为了解决那些问题而产生的方法
样条函数克服了用多项式连接数据点时候存在的问题
它不是由任何单个函数表示的
而是将以我们希望的曲线连接这些数据点
换句话说,当给定的数据点是这样分布的时候,大家可能会猜到
这样来连接这些数据点,看起来是最适合的
请同学们一定要检查一下利用多项式连接这些数据点的时候会出现什么问题
现在这些数据点是这样连接的,我们想找到与之匹配的函数
当通过多项式函数来寻找这样的函数的时候
这时就会出现我们之前遇到的问题
所以,我们自然会想到
如果说找不到这样的一个函数,
是不是存在一个方法使得我们可以像这样手动画一条光滑曲线连接这些数据点呢
当然,在此之前,我们先从简单的步骤开始
假设给定的数据就是这样分布的
当然,我想大部分的同学都不会觉得
考虑所有的这些点需要太繁琐,所以我想要这样做
怎么考虑呢
从这里到这里,所有的值都相等,即都为 f(x0)
从这里到这里,所有的值都相等,即都为 f(x0)
会有人这么想吧
从这里到这里的值相等,这里到这里也相等,这里到这里相等
或者,只是想画一条这样的直线
怎么样呢
这种想法在数学上是可行的
这样的图像看起来像什么呢
这是我们大家熟知的阶梯函数图像
我们称与之对应的函数为阶梯函数
我们通常不会这么做,
但是我们称之为阶梯函数样条
这样的函数可能不是完全正确的,但是我们也可以由此推测出一些结果
这一点的值是多少呢
这一点的值和前面的值相等,
所以,我们可以简单的从数学上获得所有点的值
接下来我们尝试的方法跟这个不太一样
是什么样的方法呢
我们可以这样试一下吗
我们这里只给出几个点
虽然实际情况可能不是这样,但是对我来说,寻找一个函数的很困难的
所以,我们这样用直线连接各点
怎么样?是不是一个不错的想法?
虽然,不是那么完美
但是在数学上这种尝试是可行的
所以,因为是用直线连接的,我们称之为线性样条(Linear Spline)
再来考虑一下
假设这一点是(xi-1,f(xi-1))
记这一点为(xi, f(xi))
那么,这个区间中的这些点并没有进行实验观测
如何得到这些数据的值呢, 可以看到,这些点在这条直线上
所以,我们可以给出这条直线的方程
那么,如何求直线的方程式f(x)=0呢
我们来这样求 已知两点的值
那么,直线的方程为 f(xi )=f(xi-1) + ((f(xi )-f(xi-1))/(xi - xi-1))(x - xi-1)
其中, 斜率为
(f(xi ) - f(xi-1))/(xi - xi-1 )
已知两点求直线方程式的时候,可以直接套用这个公式
也就是说,我们可以求出从这两点之间的直线方程式
所以,求这条直线上任意一点的值都不难
所以,我们可以求出任何两点之间所有的值
因为这里是第i条直线,所有第1条为f1,
所以,这个直线方程式对所有fi, i=1,…,n 都成立。 这里应该为 f1
所以,这个直线方程式对所有fi, i=1,…,n 都成立。 这里应该为 f1
我们可以求出从f1到fn的所有的直线方程
我们称其为线性样条
怎么样?是不是看上去有些奇怪
我们之前讲的用阶梯函数曲线连接和现在用直线连接,看起来是有些不同的
当然,这两种方式都非常容易计算
像这样由一条一条折线构成的曲线,看起来还不错,但是通常来说,
我们更喜欢光滑的曲线
所以,与这样的光滑曲线相比,这里的两种连接方式还是很有差距的
虽然,我们没法求出一个经过所有点的单一函数
但是我们可以通过用连接每两个点的光滑曲线来构造一条光滑的曲线
这时,我们需要考虑另外的方法
在最开始看到这些点的时候,我们用什么函数连接这些点呢
是用阶梯函数
第二次是用直线连接的
但是我希望将所有的点用一条光滑的曲线连接
那么,在要构造这样的曲线,最简单的方法是什么呢
我们首先考虑了一次函数
下面我们考虑二次函数
所以,我们尝试用二次函数来连接这些点
因为我们使用二次函数,所以我们可以称这些函数为
二次样条函数
同样地
假设给定这样的数据点
我们希望用二次函数来连接这些点
我们在这里先写下每一个点
对于二次函数,最少要有3个点
第一个点记为(xi-1,f(xi-1)), 第二个点为(xi,f(xi ))
这个点为(xi+1,f(xi+1))
这就是要求的曲线
我们用二次函数求得这条曲线,我们称这个为fi (x)
这个为fi+1(x)
现在每个区间都是用曲线连接
用直线连接不够光滑,所以我们想用曲线连接
于是我们考虑用二次函数
同样地,
我们的目标是求fi (x)
对每一个i,我们有fi (x)=ai+bi x+ci x^2
i=1,…,n
那么,未知数的个数是多少呢
虽然我们最终要求的是这个二次函数,但是我们实际上要求的是
二次函数的系数ai,bi,ci
i=1,…,n
那么,我们要求的未知数一共是
3n个
那么,现在有3n个未知数,那么需要多少个方程呢
需要有3n个方程
必须要有3n个方程才能求出满足条件的3n个解
这正是我们想要求的
从现在开始,我们来找一下这3n个方程式
首先,fi (xi)需要满足什么呢?
fi (xi)必须要满足我们要求的方程式
所以有 fi (xi )=ai+bi xi+ci xi^2
而它等于函数在这个点的函数值f(xi )
而它等于函数在这个点的函数值f(xi )
现在,我们考虑一下这区间的函数
因为函数fi+1 (x)的图像从这一点到这一点,所以把xi代入到fi+1 (x)中可以得到
fi+1 (xi )=ai+1 + bi+1 xi + ci+1 xi^2
这个值必须要等于fi (xi )
这个等式对n从1到n-1 都成立
由此我们最少找到了n-1个方程
虽然我们已经构造了方程,但是还没有找到有3n个系数的所有方程
我们再添加一些方程式
现在,我们考虑两个端点
i=0和i=n 的情形我们还没有考虑
前面我们考虑了i从1到n-1的情形
下面我们考虑i=0的情形,即f1 (x0)
它等于把x0代入到第一个函数f1 (x)中
这个值就等于第一个点的函数值f(x0)
那么fn (xn)也是一样的
于是我们有fn (xn )=an + bn xn + cn xn^2 = f(xn)
现在,我们又找到了两方程式
剩下的怎么办呢
现在方程式的个数依然不够
而这也是我们需要好好考虑的部分
我们回头看看这连接着三个点的曲线
现在假设我们找到了这样一个二次函数,以及这样一个二次函数
在这一点,仍然是连续的曲线
但是它和用直线连接时一样,看起来像是被折断了,不够美观
所以,我们不希望发生这样的情形
我们再强调一下
即使不是用一个函数,而是用两个函数来连接
我们也希望得到这样一条光滑的曲线
那么要得到这样一条光滑的曲线,最需要的条件是什么呢
是导函数值
也就是说导函数要连续
所以可以得到第三个条件,首先
我们前面给出的函数的导函数
fi' (x) = bi + 2ci x. 下面是对这里的这个函数求导
对fi+1 (x)求导后可得fi+1 (x) = bi+1 + 2ci+1 x.
求导后得到的导函数值在这个点必须要相等
才能保证函数图像不会是这样的折线图
也就是说,在这一点的导数值相同,导函数是连续变化的
所以,为了保证导函数的连续性,我们需要使
这两个导函数的值相等
所以bi + 2ci xi = bi+1 + 2ci+1 xi+1
这里,i=1,…,n-1
现在,已知有这些未知数,
我们看一下所构造的方程的个数
第一种情形中,一共有多少个方程呢
i的取值是从1到n-1,对每一个i,存在两个方程式,所以一共有2(n-1)个
在第二个条件中出现了两个方程
最后一个条件中有n-1个方程
这把三个数字相加,可以得到总的方程个数是多少呢?
我们来计算一下
第一个条件中有2(n-1)个方程,第二个条件中是2个,
最后的条件中是n-1个,计算可得一共是3n-1个
还缺少一个。
假设我们找到了所有的3n个方程
那么大家是不是很满意? 我们会有这样的想法
如果3n个方程式都找到的话,会得到一个固定的结果,
我们只能直接使用得到的结果,没有太多的灵活性
还有一个方程没有找到,这为我们提供了由我们自己来决定这个方程的机会
那么, 为了构造更好的曲线,
大家可以通过观察这些数据点以及使用某些技巧,
自己给出一个补充条件
所以,对于我们自己给出的那个条件
有很多种给法
例如,f在最后一点二阶导数 f'' (xn )=0
不管大家给出什么样的条件,都没有关系
所以,大家运用学到的数学知识,为了构造更好的曲线,
由我们自己给出最后一个条件,这就是二次样条
我们用一个简单的例子解释一下二次和线性样条
然后学习三次样条插值
那么,我们来看刚刚学习的线性和二次样条的例子
当给定数据点的时候,我们看一下
如何进行线性样条插值和二次样条插值
点xi对应的数值为f(xi)
假设xi=2时, f(xi )=14, x_i=3时,f(xi )=20,x_i=6.5时, f(xi )=17,x_i=8时, f(xi )=16,x_i=12时, f(xi )=23
当拿到这些数据的时候,我们有好几种方法可以尝试
例如,利用拉格朗日多项式构造一个连接这些点的多项式
还可以利用均差法
这里的这些点之间间隔不同
所以要使用一般的均差法
对于间隔相同的情形,有单独的可使用的公式
虽然这里不可以使用那些公式
但是我们仍然可以使用均差法
构造一个多项式
我们现在学习的是样条插值,所以在这里我们使用样条插值来推测各点的值
我们推测哪一点的值呢?在x=7.0这一点的值未知,
所以我们来推测一下这一点的值是多少
当然, 利用构造多项式的方法,
我们也可以推测出一个对应于x=7的数值
首先考虑线性样条
大家还记得吗
第i个直线方程为
fi (x) = f(xi-1) + ((f(xi ) - f(xi-1))/(xi - xi-1))(x - xi)
7在哪一区间上呢
这是第一个区间,这是第二个,这是第三个
所以,我们需要求f3 (x)
可以求出来吗
代入到上述方程式中,可得
f3 (x) = f(x2) + ((f(x3 ) - f(x2))/(x3 - x2 ))(x - x2)
那么f(x2)的值是多少呢
依次为f(x0), f(x1), f(x2), 所以f(x2 )的值为17
由此可得, f(x3)的值为16
f(x2 )的值为17
x3的值为8
x2的值为6.5
最后,x2的值为6.5
现在我们用数字替换了所有的系数
所以,我们可以很容易地找到我们要求的方程式
得到方程式后,
把x=7代入方程式后,可以得到f(7)= 16.6664
这就是我们通过线性样条插值得到的结果
对这些数据点,我们应用二次样条插值
这里会有很多复杂的计算
最少要有多少个方程呢
因为一共有5组数据
所以需要12个方程
fi (x)的解析式为fi (x) = ai + bi x + ci x^2
现在,fi (x)中x是一个自由变量
下面,我们来找一下需要的方程
首先,代入x_i我们可以得到fi(xi) = ai + bixi + cixi^2
等于f(xi)
这里一共有3个方程,f1(x1), f2(x2), f3(x3)
我们需要的是f3(x3) = a3 + 8b3 + 64c3 = 16
我们还有fi+1关于x_i的公式fi+1 (xi)
fi+1 (xi ) = ai+1 + bi+1 xi + ci+1 x_i^2,
这个值等于f(xi )
这里产生的方程有多少个呢?
我们像上面那样写下来
f2(x1) = a2 + 3b2 + 9c2 = 20
同样地,我们可以求出f3(x2)
是什么呢
f3 (x2 ) = a3 + 6.5b3 + 42.25c3 = 17
我们省略f4 (x3)的表达式,直接令f4 (x3)=16
下面,还需要考虑什么呢
在这里我们还增加了一些需要的条件
第二个条件,f1 (x0)=f(x0)
利用最后一点的性质,还可以得到fn (xn)=f(xn)
第三,因为我们希望连接这些点的曲线是光滑的,
所以,我们有fi' (xi)= f'i+1 (xi), 加上由此的得到的方程,我们一共得到了11个方程
最后,我们给出一个这样的条件
如果我们一个一个的求,
我们是可以求出f3 (x)的
一步一步求完之后
代入7.0, 可以得到f3 (7)=15.8605
所以我们可以和线性样条得到的值进行比较
所以,到目前为止,我们使用了拉格朗日插值,均差法,线性样条,
以及二次样条
当然,阶梯函数也很简单,也可以使用
如果使用这样的方法,我们自然会想到为什么只是用二次函数呢
三次函数不可以吗
现在我们来学习Spline的最后一部分
三次样条插值
因为我们已经了解了二次样条,所以对于三次样条的基本思想,
我们可以很容易掌握
大家可能会问是二次样条好一些呢?还是三次样条好一些呢?
对不同的情形,结果是不一样的
三次样条是什么呢
可以看到,如果是三次函数,函数的个数会变多,需要解更多的方程
二次样条是什么呢
因为系数个数比较少,方程的个数也比较少
哪一个更好,优点是什么?缺点是什么?
我想大家可以通过分析数据,可以进行判断
现在,我们开始学习三次样条
我们想要用三次样条函数连接数据点
因为是三次函数,所以函数的解析式应该为
fi(x) = ai + bix + cix^2 + dix^3
并且,i=1,2,…,n
一共需要多少个呢
因为一共有n个多项式,每一个多项式中有4个未知数
所以一共需要4n个方程
我们将按照我们之前的方法进行
我们已经进行过二次样条插值,所以我们有
第i个函数和第i+1个函数在这一点的值必须相等,即fi (xi ) = fi+1 (xi)
还需要等于什么呢
每一个函数还要和f(xi)相等
这里,i=1,…,n-1
两个公式分别含有n-1的方程,所以一共有2n-2个
第二,我们考虑端点的情形,i=0和i=n
f1 (x0 ) = f(x0)
fn (xn) = f(xn)
于是,我们得到了2个方程
第三,还需要什么条件呢
导函数值必须要相等
所以,令导函数值相等
i=1,…,n-1
这表示斜率是连续变化的
因为斜率值相等,所以我们保证了斜率的连续性
现在,我们需要4n个方程式
但是,现在还远远不够
加上这两个,一共是2n个,这里有n-1个方程
仍然剩下很多方程需要寻找
意思是,从数学上,如何能得到一条更满意的更光滑的曲线,
这是接下来的问题
接下来需要怎么做呢?
我们已经进行了一次求导, 那么,我们可以再求一次导
这样,我们求二次导数 这在数学上有什么意义呢
求一次导数,是为了使斜率连续
而二阶导数相等,则曲线轴或者曲率是相等的
所以,我们可以找到一条更自然的光滑曲线,使得它能够非常接近我们所希望的曲线
所以,由这个条件,我们得到n-1个方程
现在还剩下2个
在二次样条插值的时候,需要1个补充条件
所以,大家可以按照自己的想法给出这个条件
现在这种情况下该怎么做呢? 我们构造了一条更好的曲线
因为我们求出了二阶导数,并且使节点处二阶导数相等
但是这里还需要补充2个条件
那么,大家可以根据自己的想法和数学知识给出这两个补充条件,
然后画出一条更适合这些数据点的曲线
所以,我们可以得到更好的样条函数
对于这两个补充条件,如果大家不想寻找新的条件
这里有几种常见的给法
和我们之前的做法一样,我们可以二阶导数在第一个点和最后一个点
的导数值为0
我们还可以考虑其他几种给法
例如,我们可以给出这样的条件
令二阶导数
第一段曲线的两个端点处二阶导数值相等
最后一段曲线的两个端点处二阶导数值相等
除此之外,大家还可以考虑一下其他的一些条件
以便找到更好的样条函数
到这里,关于插值和样条的课就结束了
总结一下的话,
关于插值以及样条插值,我们学习了利用获得的数据,
构造一条自然而又有意义的曲线的几种方法
我相信,通过进一步研究,同学们可以结合自己的想法
对于如何开发新的多项式以及样条函数
大家能够开发出自己的方法
那么,今天关于插值和样条的课就结束了
-1. [Warming up]
-2. [Lecture] 前言(들어가는 말)
--Guide
--video
-3. [Lecture] What is Mathematics?
--Guide
--video
-4. [Lecture] What is Numerical Analysis?
--Guide
--video
-5. [Lecture] 数值分析的领域(수치해석의 영역)
--Guide
--video
-6. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Introduction & Bisection Method
--Guide
--video
-3. [Lecture] Fixed Point Iteration
--Guide
--video
-4. [Lecture] Newton's Method
--Guide
--video
-5. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Introduction & Bisection Method
--Guide
--video
-3. [Lecture] Fixed Point Iteration
--Guide
--video
-4. [Lecture] Newton's Method
--Guide
--video
-5. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Introduction & Lagrange Polynomial
--Guide
--video
-3. [Lecture] Divided Difference
--Guide
--video
-4. [Lecture] Binomial Theorem
--Guide
--video
-5. [Lecture] Spline
--Guide
--video
-6. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] 积分,微分简介(적분, 미분 소개)
--Guide
--video
-3. [Lecture] Newton Cotes Formula
--Guide
--video
-4. [Lecture] Simpson's Rule
--Guide
--video
-5. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Polynomial Version
--Guide
--video
-3. [Lecture] Matrix Version (Gauss Elimination)
--Guide
--video
-4. [Lecture] Numerical Version
--Guide
--video
-5. [Lecture] Determinant
--Guide
--video
-6. [Lecture] Example
--Guide
--video
-7. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] LU Factorization
--Guide
--video
-3. [Lecture] 计算方法(계산법)
--Guide
--video
-4. [Lecture] Existence and Uniqueness
--Guide
--video
-5. [Lecture] Cholesky Factorization
--Guide
--video
-6. [Activity] QUIZ
-期中考试(중간고사)
-1. [Warming up]
-2. [Lecture] Proof
--Guide
--video
-3. [Lecture] Gram-Schmidt Process
--Guide
--video
-4. [Lecture] Example
--Guide
--video
-5. [Lecture] Matrix Norms
--Guide
--video
-6. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Jacobi Iterative Method
--Guide
--video
-3. [Lecture] Gauss Seidel Iterative Method
--Guide
--video
-4. [Lecture] Convergence Theorem
--Guide
--video
-5. [Lecture] Example
--Guide
--video
-6. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] Definition
--Guide
--video
-3. [Lecture] Theorem & Example 1
--Guide
--video
-4. [Lecture] Theorem & Example 2
--Guide
--video
-5. [Lecture] Theorem & Example 3
--Guide
--video
-6. [Lecture] Theorem & Example 4
--Guide
--video
-7. [Activity] QUIZ
-1. [Warming up]
-2. [Lecture] First Order Equation
--Guide
--video
-3. [Lecture] Euler's Method
--Guide
--video
-4. [Lecture] Error Analysis
--Guide
--video
-5. [Lecture] Euler Method
--Guide
--video
-6. [Activity] QUIZ
-1. [Warming up]
-1. [Lecture] Introduction
--Guide
--video
-2. [Lecture] n-th Runge-Kutta Methods
--Guide
--video
-3. [Lecture] Multi Step Method
--Guide
--video
-4. [Lecture] Explicit
--Guide
--video
-5. [Lecture] Example
--Guide
--video
-QUIZ
-1. [Warming up]
-2. [Lecture] Boundary Value Problem With O.D.E.
--Guide
--video
-3. [Lecture] Partial Differential Equations
--Guide
--video
-4. [Activity] QUIZ
-期末考试(기말고사)


