【转】线性插值(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 內插是数学领域数值分析中的通过已知的离散数据求未知数据的过 ...
随机推荐
- 微信接口开发报错invalid credential, access_token is invalid or not latest hint
微信接口凭证access_token一定要全局管理 我们的查酒后台集成了微信公众平台的客服API接口,不用登录微信公众号的后台就可以直接给用户发送消息.最近,运营的同事反馈,通过微信查酒,后台无法直接 ...
- Java反射机制(二):通过反射取得类的结构
在反射运用过程中,如果你想得到一个类的完整结构,那么就要使用到java.lang.reflect包中的几个类: · Constructor 表示类中的构造方法 · Field 表示类中的属性 · ...
- 微信小程序下拉刷新 并重新加载数据
1.在json页面配置: { "enablePullDownRefresh": true } 2.调用刷新函数 onPullDownRefresh: function() { wx ...
- springmvc 多文件/文件夹上传 下载
注入依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g ...
- Vue 获取DOM元素ref
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- H3C 什么是OSPF
- SVN:符号
问号:未纳入SVN控制之下的新文件感叹号:已经修改过还没上传的文件红叉:准备删除尚未提交绿勾:从服务器上取下来没修改过的文件黄色感叹号:发生冲突蓝色加号:准备加到服务器上还没提交
- H3C 静态默认路由配置
- VS2017 OpenCV3.4.2 通过Release的版本 源码编译成 x86
官方release的OpenCV3..2版本只有64bit,由于项目需要,现在把它重新编译成x86的库. 下载源码: github官方仓库 https://github.com/opencv/open ...
- vue 路由跳转前确认框,刷新浏览器页面前提示确认框
先看效果图: 1.刷新页面效果: 2.跳转路由(进入别的页面前)效果: 代码: // 路由跳转确认 beforeRouteLeave(to, from, next) { const answer = ...