数学建模笔记:初探插值拟合方法(第一部分)

更新:11-07 名人轶事 我要投稿 纠错 投诉

很多朋友对于数学建模笔记:初探插值拟合方法(第一部分)和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

好吧,今天我要讲的是插值和拟合。插值和拟合是两种不同的数值计算方法,插值算法和拟合算法分别有多种不同。在我学习的《数值计算》节课中,这两部分好像是三四节课讲的。因为在课堂教学过程中,需要对各种算法进行严格的证明和数学推导。

由于篇幅和个人能力的限制,本文没有涉及太多的数学证明和推导(嗯,基本没有推导)。其实很多经典建模教材并没有做太多的推论,而是以介绍和应用为主。因此,欢迎想要深入了解插值与拟合的同学,参加自学课程《数值计算》。

插值

首先我们来谈谈插值。为什么需要插值?因为在很多实际问题中,我们想要研究一个变量与另一个变量之间的关系,而我们往往只能通过观察来获得一组值。对于两个变量之间的函数关系,我们往往很难通过某种解析公式或者某种图像来表达。换句话说,我们只有一组数据,我们根本不知道变量之间的具体函数关系。

这提出了一个问题。例如,假设我们观察“距海岸的距离”和“海水深度”之间的关系。现在我们以海岸线的位置为0,每隔50米或100米测量一次海水的深度,得到很多组数据。现在的问题是,如果我们想知道距海岸线326米处的海水深度,如何求得呢?

嗯,最简单的方法就是到326米去测量一下。这确实是最准确的方法。但如果要测量的点很多,考虑到时间等成本,一一测量可能不太现实。因此,我们需要不同的方法来解决此类问题。即已知和之间的一些点对应的值为:。我们想要找到节点之间某处的函数值。插值法是解决此类问题的合适方法。

什么是插值?很简单,插值就是找到一个比较简单的满足的函数,然后用函数找到之间某处的函数值。即找到一个函数来替换作为的合理近似值。

首先举个例子。

上图是我在函数中取出7个点。现在假设我们不知道这是一个正弦函数。我们只知道这7个点的坐标。如何找到的函数值?想要找到它是不可能的。我不知道如何找到该函数,但我们可以使用插值法来找到近似解。

一个非常简单的想法是分段线性插值,它用一条直线连接两个相邻点。这种方法应该很容易理解。我们希望用一个简单的函数来代替。最简单的函数应该是线性函数。好吧,让我们做一些插值。

不,这是分段线性插值的结果。如果我们现在想要找到处的值,那就比较简单了。解出两点和之间的直线方程,然后代入,就可以了。

可见,上述插值方法过于简单,可能与实际曲线不一致。在实际问题中,很少存在这种纯线性函数关系。因此我们可以使用一些高阶多项式进行插值,例如分段三次Hermite插值。只看结果。

是不是感觉顺滑了很多?事实上,它可以更顺利。让我们尝试一下使用三次样条插值。结果也直接发布。

最后,我们将上面提到的三个插值和原始函数放在一起看一下结果。

可以看出,三次样条插值最接近原始曲线,分段线性插值距离原始曲线最远。这是否意味着三次样条插值必须优于三次Hermite 插值和线性插值?当然不是,具体问题还是需要具体分析。如果两个变量之间的线性相关性高达99%,那为什么还需要进行三次插值呢?然而,自然界和工业中的各种曲线往往是比较平滑的,因此我们经常使用三次样条插值函数。

上面只是一个简单的例子,让大家对插值有一个更直观的印象。其实很简单。就是求一个函数,要求函数曲线经过一个已知点。然后用这样的函数来代替原来的函数,找到某个位置对应的函数值,用这个近似值来代表真实值。接下来我们简单介绍一下matlab中的几种插值算法以及相应的函数。

插值算法有很多种,比如拉格朗日插值、牛顿插值、最近邻插值等。不过,这里我介绍一下比较常用的插值方法,即上面提到的分段线性插值、分段三次Hermite插值和三次样条插值插值。这三种插值方法有一个共同的特点,就是在给定点的每一小段处确定一个函数表达式,并将其相加作为最终的表达式。嗯,也就是说,这是一个分段函数。查找之间的函数,查找之间的函数,依此类推.

为什么不直接找到一个函数表达式呢?因为当插值点较多且我们不进行分割时,最终函数的阶数会较高,高阶多项式会在插值区间内产生严重的振荡,称为“龙格现象”。因此,我们倾向于使用分段低阶多项式来逼近原始函数。拉格朗日插值和牛顿插值最终都会产生一个函数,因此这里不再介绍。如果大家有兴趣的话,可以自己去了解一下。嗯,下图是展示龙格现象的图片。黑色实线代表原始函数,n代表插值多项式的次数。显然,阶数越高,振荡越明显。如果您想了解更多,请自行研究相关内容。

分段线性插值

分段线性插值不用说,很简单,就是在相邻区间用直线逼近原函数。使用分段线性插值计算点的近似函数值时,仅使用周围的两个节点,而不管其他节点。当然,越大,段数越多,插值误差越小。在实际使用中,常用于计算数学、物理中的特殊函数表、数理统计中的概率分布表等,在建模过程中,还可以用于填充缺失数据。

在matlab中,用于插值的函数是函数,最后一个是数字,而不是字母。表示一维数据。

通过help命令,我们可以看到interp1的使用形式。点击下方“interp1参考页面”,进入该函数的帮助文档页面。在vq=interp1(x,v,xq,method) 中,向量x 包含样本点,v 包含对应的值v(x)。向量xq包含查询点的坐标,vq返回相应的插值结果。 method 指定插值方法,例如“线性”、“最近”、“下一个”、“上一个”、“样条”。默认方法是“线性”。所以如果我们要做线性插值就很简单了,代码如下。

x=0:2*pi; %生成[0,2*pi]之间的整数值

y=正弦(x); %生成对应的函数值

plot(x,y,"or");%画一个点

xx=0:0.01:2*pi;%这是查询点的坐标向量

yy=interp1(x,y,xx,"线性"); %yy为查询点向量对应的函数值向量

plot(x,y,"o",xx,yy,"r");%画图

xx=1.23;%也可以只查询一个元素

yy=interp1(x,y,xx,"线性");%嗯,还是这样

plot(x,y,"o",xx,yy,"or");%画一幅画。嗯,这很简单,对吧?顺便说一句,线性插值至少需要两个点。我们还可以看到,线性插值有一个明显的缺点,就是不够平滑。没办法,毕竟是一条直线。

分段三次Hermite(埃尔米特)插值

分段三次埃尔米特插值比分段线性插值的数据要求略高。假设是[a,b]和之间互不相同的节点。嗯,也就是说,我们不仅需要知道对应的函数值,还需要知道对应的函数导数值。

因此,我们对对应的插值函数有以下三个要求:

在上一阶可微;;是每个的三次函数。满足上述三个条件的插值函数称为分段三次埃尔米特插值函数。

可以发现,三次埃尔米特插值与线性插值相比有两个特点。首先,它不仅要求插值函数经过相应的已知点,而且要求函数曲线在已知点处的一阶导数值等于原函数的导数值。这就是为什么三次埃尔米特函数在已知点处更平滑的原因。并且更接近原始曲线。其次,它使用三次多项式作为每个小段的插值多项式。与线性函数相比,三次多项式更加平滑。综上所述,与线性插值相比,三次埃尔米特插值得到的函数曲线更加平滑,更接近原始曲线。

matlab中用于三次Hermite插值的函数是。当然,你也可以使用上面提到的加上参数。

x=0:2*pi; %生成[0,2*pi]之间的整数值

y=正弦(x); %生成对应的函数值

plot(x,y,"or");%画一个点

xx=0:0.01:2*pi;%这是查询点的坐标向量

yy=interp1(x,y,xx,"pchip"); %yy为查询点向量对应的函数值向量。注意最后一个参数

plot(x,y,"o",xx,yy,"r");%画图

xx=1.23;%也可以只查询一个元素

yy=pchip(x,y,xx);%也可以这样

plot(x,y,"o",xx,yy,"or");%绘制图片顺便说一句,在matlab中使用三次埃尔米特插值函数时,至少需要四个插值点。

三次样条插值

所谓样条曲线,就是在几个采样点处压上一根带有重物的弹性细长木条(样条),其他位置自由弯曲。这样,由样条形成的曲线就称为样条曲线。样条曲线实际上是由分段三次曲线连接而成,并且在连接点处具有连续的二阶导数。从数学上概括,得到三次样条的概念。

与三次埃尔米特插值相比,三次样条函数增加了一些条件。假设三次样条函数为。那么除了满足,即经过已知点外,还需要满足,即各线段的端点重合。

另外,还需要满足,即端点处的一阶平滑度。,这是端点处的二阶平滑度。我们可以看到,相对于埃尔米特插值,不仅对一阶导数有要求,而且对二阶导数也有要求。因此,与埃尔米特插值相比,样条插值得到的曲线更加平滑。

上面的等式条件提供了个方程(你可以自己数一下),但是如果我们需要个三次多项式,我们需要求解个未知数,这意味着我们需要个方程。其余两个方程称为边界条件。

边界条件主要分为三类:

第一类边界条件:给定函数在端点处的一阶导数,即。第二类边界条件:给定函数在端点处的二阶导数,即。当时,这个条件称为自然边界条件。第三类边界条件:如果是周期函数,是周期,则要求也是周期函数,满足。在MATLAB中,如果三次样条插值没有边界条件,最常见的方法是使用无结终止条件进行插值。该条件要求第一个和第二个三次多项式的三阶导数相同,并且倒数第二个和倒数第二个三次多项式的三阶导数具有相同的值。使用的函数可以是或。同样,至少需要知道四点。

x=0:2*pi; %生成[0,2*pi]之间的整数值

y=正弦(x); %生成对应的函数值

plot(x,y,"or");%画一个点

xx=0:0.01:2*pi;%这是查询点的坐标向量

yy=interp1(x,y,xx,"样条线"); %yy为查询点向量对应的函数值向量。注意最后一个参数

plot(x,y,"o",xx,yy,"r");%画图

xx=1.23;%也可以只查询一个元素

yy=spline(x,y,xx);%也可以这样

plot(x,y,"o",xx,yy,"or");%画图(一段代码用了三遍hhh)

如果存在边界条件,我们使用函数进行三次样条插值。

但在具体建模中,边界条件往往不直接给出,所以用得最多的是函数。事实上我们可以发现它的效果还是相当不错的。至于函数的使用,自己看吧~另外还有维的数据插值。使用的函数有

mg src="https://math.jianshu.com/math?formula=interpn" alt="interpn" />,这里我就不讲了,大家自行了解一下。 以上就是插值我想分享的全部内容了,其实没有太多的数学推导以及证明,只进行了简单的介绍以及使用。嗯,如果想知道更加详细的内容,例如拉格朗日插值,牛顿插值法等等,还是自行学习吧~如果想知道具体的推导,也可以参考相应的资料。这里我就不说了。

OK,本文到此结束,希望对大家有所帮助。

用户评论

風景綫つ

感觉这篇文章很实用,我会来深入学习一下插值拟合模型的!

    有12位网友表示赞同!

瑾澜

终于找到了关于数学建模笔记的文章,可以参考学习了。

    有14位网友表示赞同!

_心抽搐到严重畸形っ°

插值拟合模型真是一门好用的工具,很多现实问题都可以用它解决哦!

    有7位网友表示赞同!

墨染天下

数学建模我有点苦手,希望这篇文章能够让我更了解这个领域。

    有16位网友表示赞同!

我家的爱豆是怪比i

数学笔记真的很好整理,这样可以更好地学习和复习数学知识。

    有8位网友表示赞同!

来自火星的我

之前学过一点插值拟合模型的知识点,希望能在这篇文章里加深理解。

    有11位网友表示赞同!

巷口酒肆

看来这篇文章讲的是插值拟合模型的基础知识,挺好的入门指南!

    有13位网友表示赞同!

熟悉看不清

期待学习更多关于数学建模的方法和技巧!

    有16位网友表示赞同!

麝香味

要准备学一学插值拟合模型,希望能在这篇文章中找到答案!

    有15位网友表示赞同!

反正是我

这标题看起来很有深度,一定能让我收获满满的知识点!

    有18位网友表示赞同!

败类

我已经开始期待阅读这篇文章了,希望内容丰富且易懂。

    有12位网友表示赞同!

轨迹!

数学建模笔记这种形式很不错,可以方便地查阅和复习。

    有9位网友表示赞同!

北染陌人

学习插值拟合模型对数学建模很重要,一定要认真学习!

    有11位网友表示赞同!

有阳光还感觉冷

感谢作者分享这种优秀的学习资源!

    有6位网友表示赞同!

心贝

最近在研究一些相关的数学问题,这篇文章正好能帮到我!

    有9位网友表示赞同!

哭花了素颜

这篇文章肯定能够提高我理解插值拟合模型的能力。

    有16位网友表示赞同!

▼遗忘那段似水年华

学习数学建模的过程很痛苦,但我一定会坚持下去!

    有18位网友表示赞同!

蹂躏少女

阅读这种实用的笔记非常有效率,我能更好地掌握知识点!

    有15位网友表示赞同!

◆残留德花瓣

这篇文章的篇幅合适,看起来很容易阅读和理解。

    有8位网友表示赞同!

【数学建模笔记:初探插值拟合方法(第一部分)】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:探索幸福感:发掘生活中的愉悦时刻 下一篇:揭秘:男子怀孕奇迹!美国男子诞下三子,成为全球首位生育的男人