当前位置:   article > 正文

基于matlab的一维插值与三次样条插值_一维插值与线性插值

一维插值与线性插值

插值的定义

今天我们来谈谈数据插值以及它在matlab中的应用。

实际问题中观察到的数据点,譬如不同时间段的温度,湿度,在力的作用下物体的变形程度等,常常是客观的,真实发生的数据,具有客观世界的准确性,然而一般情况下无法满足我们建模的需要。

比如说,某观测站每隔半个小时测量一次外界温湿度并记录,一天二十四小时如下图所示(只列出一部分)。

时间温度
6:0015
6:3018
7:0020
7:3021
8:0022

但假如我们要分析早晨六点到八点的气温变化程度,仅有图表中的五个数据往往是不够的,又比如我们已经得到了步进为一分钟的湿度的详实数据,却无法与温度的少量数据相匹配,有没有一种办法,能科学的获取某一区间上的大量相关数据呢?

这里我们可以采用插值的方法。

插值,即是根据一组数据构造一个函数作为近似,当我们需要观察节点之间的函数值时,往往可以通过该构造函数来代替。

简单地说,就是根据已知数据点构建一个函数,使其能够很好地代替某一区间内未能观测的真实数据。

听起来是不是与函数拟合有点儿像呢?其实二者都是根据有限数据点,求近似函数,然而拟合不要求过已知数据点,只要求在某种意义下他在这些点上的总偏差是最小的。

分段线性插值与样条插值

分段线性插值,简单地说,就是把相邻节点用直线连接,所形成的直线就是分段线性插值函数,实际计算插值时,只用到了左右两个节点(两点成一条直线嘛),所以计算量与节点数n无关,但n越大,其误差越小。

分段线性插值在某些特殊函数,或统计学中的概率分布问题上有所应用,但直愣愣的线条在工程技术上想必是大煞风景了,如汽车车轮,飞机机翼,都对函数的光滑性有相当程度的要求,各位观众老爷也不希望看到温度预测表直接连线这么没技术含量吧。

那么,为了解决以上问题,样条插值应运而出,样条原本是工程设计中使用的一种绘图工具,是富有弹性的细木条或者细金属条,绘图员利用它们把一些已知点连成光滑的曲线,想想都很有画面感对不对,真的有那么丝滑吗?

MATLAB程序实现

废话不多说直接上代码。

// 
clear,clc 
x0 = [0 3 5 7 9 11 12 13 14 15];
y0 = [0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];

t=0:0.1:15; 

%一维插值 
y2=interp1(x0,y0,t,'nearest');%最近项插值
Y2=interp1(x0,y0,t);%默认linear,线性插值 
subplot(2,2,1);
plot(t,y2)
legend('边条');
title('最近项插值');
legend('最近项');
subplot(2,2,2); 
plot(t,Y2);%画出曲线 
title('线性插值'); 
legend('线性');%显示图形图例 

%三次线条插值A 
pp1=csape(x0,y0);%默认的边界条件,即给定边界一阶导数 
y4=ppval(pp1,t); 
subplot(2,2,3);
plot(t,y4);%画出曲线 
title('三次线条插值A'); 
legend('一阶');

%三次线条插值B 
pp2=csape(x0,y0,'second');%给定边界二阶导数 
Y4=ppval(pp2,t); 

subplot(2,2,4); 
plot(t,Y4);%画出曲线 
title('三次线条插值B'); 
legend('二阶');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

比较结果如下。
在这里插入图片描述
可以明显看出,三次样条插值比较与分段线性插值更光滑,具有连续的曲率,这是由于其对边界导数的要求实现的。

想知道代码中参数的应用请点我.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/193263
推荐阅读
相关标签
  

闽ICP备14008679号