MATLAB实现线性插值interp1的功能

MATLAB实现线性插值interp1的功能1.关于插值插值,它根据已知的数据序列(也可以理解为坐标中一连串离散的点),找到其中的规律;然后根据找到的这个规律,来对其中尚未有数据记录的点进数值的估计。2.关于线性插值线性插值是一种针对一维数据的插值方法,它根据一维数据序列中需要插值的点的左右邻近两个数据点来进行数值的估计。当然了它不是求这两个点数据大小的平均值(当然也有求平均值的情况),而是根据到这两个点的距离来分配它们的比重的。而对于一些边缘处的点也需要使用到外插:即通过找出最近的两个点,通过建立该两点之间的一元一次线性方程通过带入x即可以得

大家好,又见面了,我是你们的朋友全栈君。

1.关于插值

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

2.关于线性插值

线性插值是一种针对一维数据的插值方法,它根据一维数据序列中需要插值的点的左右邻近两个数据点来进行数值的估计。当然了它不是求这两个点数据大小的平均值(当然也有求平均值的情况),而是根据到这两个点的距离来分配它们的比重的。而对于一些边缘处的点也需要使用到外插:即通过找出最近的两个点,通过建立该两点之间的一元一次线性方程通过带入x即可以得到相应的y值。由于比较简单,以下代码没有用到太多matlab自带的内置函数。

函数说明:x0,y0为原始无序数据,但x0和y0的顺序是一一对应的,yq为需要对应于x求的线性插值。

function yq = linear_me(x0,y0,x)
 len_x =length(x);
 a = [x0,y0];
yq = zeros(len_x,1);
for i=1:len_x
    % 初始化距离x0中距离x最近的个点
    min_pos = inf;
    min_next_pos =inf;
    min_neg = -inf;
    min_next_neg = -inf;
    for j=1:length(a)
        if x0(j)-x(i) >=0   % 此时x0在x的右边
            if min_pos > x0(j)-x(i)
                min_pos = x0(j)-x(i);% 找出距离x0中距离x(i)中右方最近的数
                pos_y = y0(j);
            end
        else                  % 此时x0在x的左边
            if min_neg < x0(j)-x(i) % 找出距离x0中距离x(i)中左方最近的数
                min_neg = x0(j)-x(i);
                neg_y = y0(j);
            end
        end
    end
    %% 内插
    if min_pos~=inf && min_neg~=-inf
        k = (pos_y-neg_y)/(min_pos-min_neg);
        yq(i) = pos_y-k*min_pos;
        
    else
        %% 外插
        % --------------右外插 ------------- %
        if min_pos == inf
            for j=1:length(a)
                if min_next_neg < x0(j)-x(i) && x0(j)-x(i) ~= min_neg % 找出距离x0中距离x(i)中左方第二近的数
                    min_next_neg = x0(j)-x(i);
                    neg_next_y = y0(j);
                end
            end
            k1 = (neg_y-neg_next_y)/(min_neg-min_next_neg);
            yq(i) = neg_y-k1*min_neg;
            % ----------右外插 ----------------- %
            % -----------左外插----------------- %
        else
            for j=1:length(a)
                if min_next_pos > x0(j)-x(i) && x0(j)-x(i) ~= min_pos % 找出距离x0中距离x(i)中左方第二近的数
                    min_next_pos = x0(j)-x(i);
                    pos_next_y = y0(j);
                end
            end
            k2 = (pos_y-pos_next_y)/(min_pos-min_next_pos);
            yq(i) = pos_y+k2*min_pos;
            % -----------左外插 --------------- %
        end
    end
end
end

实现效果的检验:
编写test.m脚本进行测试:

% test.m
a=load('data_input.txt');
x0=a(:,1);
y0=a(:,2);
x=(0:0.01:1)';
y=interp1(x0,y0,x,'linear','extrap');
yq=linear_me(x0,y0,x);
figure
subplot(1,3,1)
plot(x0,y0,'bp')
title("原始数据图")
subplot(1,3,2)
plot(x,y,'*')
title("使用interp1-linear插值")
subplot(1,3,3)
plot(x,yq,'ro')
title("自编函数插值")

所得结果如下图所示,其中data.input.txt中x为0-1之间的无序数据,如有需要请评论区留言邮箱。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143783.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一文搞懂│php 中的 DI 依赖注入「建议收藏」

    一文搞懂│php 中的 DI 依赖注入「建议收藏」学好依赖注入,让编程更简单

    2022年8月16日
    5
  • js判断数组中是否包含某个元素_js判断是否在数组中存在

    js判断数组中是否包含某个元素_js判断是否在数组中存在方法1:arr.indexOf(element):判断数组中是否存在某个值,如果存在,则返回数组元素的下标(第一个元素),否则返回-1;letfruits=[“Banana”,”Orange”,”Apple”,”Mango”]leta=fruits.indexOf(“Apple”)console.log(a)//2方法2:array.includes(searcElement[,fromIndex]):判断数组中是否存在某个值,如果存在返回true,否则返回false;l

    2022年10月19日
    3
  • 点击图标打不开软件_pycharm安装完没有图标

    点击图标打不开软件_pycharm安装完没有图标情况说明:Pycharm在之前都可以正常打开,但是在我修改了它的安装存储目录后,点击图标就打不开了,而且没有任何反应!条件说明:我下载的pycharm是官方网站下载的。如何解决不可打开问题:步骤1.进入你的安装pycharm的bin文件,找到pycharm.exe.vmoptions和pycharm64.exe.vmoptions步骤2:分别将其打开,将里面的jar…

    2022年8月27日
    3
  • HTTP协议

    HTTP协议

    2022年1月21日
    55
  • Java对象的序列化(Serialization)和反序列化详解

    Java对象的序列化(Serialization)和反序列化详解1.序列化和反序列化序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以是字节或者XML等格式;而字节或者XML格式的可以还原成完全相等的对象,这个相反的过程又称为反序列化;2.Java对象的序列化和反序列化在Java中,我们可以通过多种方式来创建对象,并且只要对象…

    2022年6月16日
    28
  • 高斯滤波原理及应用_数字图像处理高斯滤波器

    高斯滤波原理及应用_数字图像处理高斯滤波器1一维高斯分布 1.1一维高斯分布的定义 若连续型随机变量X的概率密度为:其中,为常数,则称X服从参数为,的正态分布或高斯分布,记为 1.2一维高斯分布的曲线 横轴表示可能的取值x,竖轴表示概率分布密度F(x),那么不难理解这样一个曲线与x轴围…

    2025年8月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号