【转】线性插值(Linear Interpolation)基本原理
转:https://blog.csdn.net/u010312937/article/details/82055431
今天在阅读大牛代码的时候,发现了Linear Interpolation一次,百度之,学习之,记录于此。
1.关于插值:
插值,是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点
进行数值估计。
应用有:
1)对数据中的缺失进行合理补偿
2)对数据进行放大或缩小
3)其他 (围笑(* ̄︶ ̄))
2.线性插值:
线性插值是针对一维数据的插值方法。它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计。当然了它不是求这两个点数据大小的
平均值(在中心点的时候就等于平均值)。而是根据到这两个点的距离来分配比重的。
维基百科上图:
已知点(x0,y0)、(x1,y1)求取插值点x处的y.推导过程如下:

我在大牛的代码里发现他是这样写的,很有美感:
由于( y-y0)/(x-x0)=(y1-y0)/(x1-x0)
所以变换一下:(x-x0)/(x1-x0)=(y-y0)/(y1-y0)=k
那么:y=(1-k)*y0+k*y1
比较方便记忆
3.线性插值举例:
问: 假如一天中,我测得了其中7个时间点的温度。1点、3点、8点、12点、15点、20点、24点摄氏度分别是8、9、16、23、22、18、10。请问用线性插值的方法得到这一天中1点到24点之间其他时间点的温度该怎么做?
注:线性插值是属于内插法,要去求这一天1点到24点以外的数据就不行了
法一:matlab有插值函数,interp1()
time = [ ];
tem = [ ]; time_i = :0.01:; tem_i = interp1(time,tem,time_i,'linear'); plot(time,tem,'o',time_i,tem_i);
运行结果:

其中,如果你想知道其中的几个点的温度,修改变量time_i就可以了。对应于time_i的温度值存放着在tem_i变量中。
或者是根据插值原理自己来写函数:
%自己写一个interp1类似功能的接口
%在这个接口中参数x需要从大到小排列,y随意
function [yi]=self_interp1(x,y,xi,method)
% 初始化yi,给它xi对应的列
col_xi = size(xi,);
yi = zeros(,col_xi);
% 检测使用的插值方法 这里期望的是'linear'
if strcmp(method,'linear')
% 找到每个xi在x序列中的位置
col_x = size(x,);
for i = :col_xi,
for j = :col_x-,
% 假如需要计算插值公式
if x(j+) > xi(i),
yi(i) = y(j)+(y(j+)-y(j))/(x(j+)-x(j))*(xi(i)-x(j));
break;
end
% 假如插值处的数据已经测得了,就直接把值给它,节约计算资源
if x(j) == xi(i),
yi(i) = y(j);
break;
end
end
% 以上没有把最后一个数据点考虑进去,需要加上
yi(col_xi) = y(col_x);
end
else
error('插值方法请选择(linear)\n');
end
end
然后进行调用:
time = [ ];
tem = [ ];
time_i = :0.01:;
tem_i = self_interp1(time,tem,time_i,'linear');
plot(time,tem,'o',time_i,tem_i);
结果跟上图一样。
【转】线性插值(Linear Interpolation)基本原理的更多相关文章
- 线性插值(linear interpolation)
线性插值通常用于:使用离散的样本来重建连续的信号.在计算机图形学中,这些样本可能是纹理.动画关键帧等. template <class T> T Lerp(T& a, T& ...
- 3.2 Piecewise Linear Interpolation(站点)
Newton Interpolation: https://www.youtube.com/watch? v=EyRQXA56asI Piecewise Linear Interpolation: h ...
- Unity3D - LINEAR INTERPOLATION
原文地址:http://unity3d.com/learn/tutorials/modules/beginner/scripting/linear-interpolation 水平有限,翻译粗略,欢迎 ...
- 游戏引擎架构 (Jason Gregory 著)
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
- 《The Cg Tutorial》阅读笔记——动画 Animation
这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...
- 从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧
视觉 Vs. IMU 小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题求助啊 师兄:又遇到啥问题啦? 小白:是这 ...
- 线性插值&双线性插值&三线性插值
http://www.cnblogs.com/yingying0907/archive/2012/11/21/2780092.html 內插是数学领域数值分析中的通过已知的离散数据求未知数据的过程或方 ...
- OpenCASCADE Interpolation - Lagrange
OpenCASCADE Interpolation - Lagrange eryar@163.com Abstract. Power basis polynomial is the most simp ...
- [转]线性插值&双线性插值&三线性插值
转自:http://www.cnblogs.com/yingying0907/archive/2012/11/21/2780092.html 內插是数学领域数值分析中的通过已知的离散数据求未知数据的过 ...
随机推荐
- H3C 代理ARP
- 强连通分量-----Kosaraju
芝士: 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connect ...
- 我爱自然语言处理bert ner chinese
BERT相关论文.文章和代码资源汇总 4条回复 BERT最近太火,蹭个热点,整理一下相关的资源,包括Paper, 代码和文章解读. 1.Google官方: 1) BERT: Pre-training ...
- poj2632 累死了
题意: 给定A*B的格子,放入N个机器人,每个机器人初始位置及朝向给定.给定M条指令.指令类型有三种: 1.L:左转90° 2.R:右转90° 3.F:前进一格 问执行指令过程中 ...
- Python--day46--上节内容回顾及补充
1,union(把两张表连起来,以上下的方式):具有自动去重的功能,有相同的就去掉. 结果: 2,union all就没有去重的功能 3,临时表,指定映射,条件,三元运算
- P1105 数列
题目描述 给定一个正整数 \(k(2 \le k \le 15)\) ,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当 \(k = 3\) 时,这个序列是: 1,3,4, ...
- dotnet core 2.1 使用阶梯编译
在 dotnet core 2.1 可以使用阶梯编译的方法,从 dotnet framework 开始,在代码的所有方法在第一次进入的时候就需要使用 JIT 进行编译为本机的代码.可以看到代码是在第一 ...
- H3C OSPF协议区域LSA发布
- VC++ CMsflexgrid 使用
引用actvie x :microsoft CMsflexgrid; BOOL CCalibrationCoordsDisDlg::OnInitDialog() { CDialog::OnInitDi ...
- 11-28\enum
1.创建一个枚举对象,对象中4个属性video视频.book书----(这2个属性可以用数字表示). 2.创建一个class对象,对象中有2个属性,一个是id属性(自己设置),第二个属性是type类型 ...