我与插值萍水相逢:线性插值(Linear Interpolation)原理及使用

本文主要是介绍我与插值萍水相逢:线性插值(Linear Interpolation)原理及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

各位博友们大家好,小弟遇到一些问题经常会去看大家的博客,所以也想加入大伙的阵营,每每看到一些好的东西,有些心得体会什么的也想与大伙分享。

 

1.关于插值

    插值,它根据已知的数据序列(也可以理解为坐标中一连串离散的点),找到其中的规律;然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。

    基于这样一种功能,我目前知道的应用是:1)它可以对数据中的缺失进行合理的补偿;2)它可以对数据进行放大或者缩小。当然还有别的功能,这个大家自己遇到的说不定比我多很多。

2.1.关于线性插值

    线性插值是一种针对一维数据的插值方法,它根据一维数据序列中需要插值的点的左右邻近两个数据点来进行数值的估计。当然了它不是求这两个点数据大小的平均值(当然也有求平均值的情况),而是根据到这两个点的距离来分配它们的比重的。

                                 

    这里我用了一张来自https://zh.wikipedia.org/wiki/%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC的图,它很好地显示了线性插值的原理。根据图中的假设:已知点(x0,y0)、(x1,y1),试问在x处插值,y的值是多少?用我们初中学过的知识,已知两个点的坐标可以得到一条线,又已知线上一点的一个坐标可以求得这个点的另一个坐标值。这就是线性插值的原理。

                                 

这样就求得了y值。

2.2.线性插值举例

    假如一天中,我测得了其中7个时间点的温度。1点、3点、8点、12点、15点、20点、24点摄氏度分别是8、9、16、23、22、18、10。请问用线性插值的方法得到这一天中1点到24点之间其他时间点的温度该怎么做?(线性插值是属于内插法,要去求这一天1点到24点以外的数据就不行了)

    数据小,计算量小,用手算就行,但是数据大,我们就只要借助计算机了,所以我还是用计算机求吧:

    法1:matlab有插值函数,interp1(),直接用就可以:

---------------------------------------------------

time = [1 3 8 12 15 20 24];
tem = [8 9 16 23 22 18 10];
time_i = 1:0.01:24;
tem_i = interp1(time,tem,time_i,'linear');
plot(time,tem,'o',time_i,tem_i);

---------------------------------------------------

 

    其中,如果你想知道其中某几个点的温度值,修改变量time_i就可以了,插值得到的对应time_i的温度值都存放在tem_i变量中。

    法2:自己写一个interp1类似的东东,也可以完成任务:(小弟给大家献丑了)

    建立一个m-file:取名self_interp1.m,内容如下:

----------------------------------------------------

% 自己写一个interp1类似功能的接口
% 这个接口中参数x需要是从小到大的序列,y则是随意
function [yi] = self_interp1(x,y,xi,method)
% 初始化yi,给它xi对应的列
col_xi = size(xi,2);
yi = zeros(1,col_xi);
% 检测使用的插值方法 这里期望的是'linear'
if strcmp(method,'linear'),
    % 找到每个xi在x序列中的位置
    col_x = size(x,2);
    for i = 1:col_xi,
        for j = 1:col_x-1, 
            % 假如需要计算插值公式
            if x(j+1) > xi(i), 
                yi(i) = y(j)+(y(j+1)-y(j))/(x(j+1)-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

----------------------------------------------------

    接着像法1一样,只是原先的interp1()函数,在这里改成我们自己的self_interp1(),如下:

----------------------------------------------------

time = [1 3 8 12 15 20 24];
tem = [8 9 16 23 22 18 10];
time_i = 1:0.01:24;
tem_i = self_interp1(time,tem,time_i,'linear');
plot(time,tem,'o',time_i,tem_i);

----------------------------------------------------

    结果如下:

    结果看起来一样一样的,幸好没有让各位大哥失望。

    第一次写博客,写的很慢,下次再来和各位老哥一起学习双线性插值。

    PS: 本文允许所有人转载。

这篇关于我与插值萍水相逢:线性插值(Linear Interpolation)原理及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979359

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删