首页 > 编程知识 正文

简化差值函数,matlab插值函数interp2

时间:2023-05-04 13:18:06 阅读:19477 作者:4442

1 .对于插值,基于已知数据序列(也可以理解为坐标中的一系列离散点)找到其规律; 然后根据找到的这个规律,对其中还没有记录数据的点进行数值的估计。

2 .线性插值是针对一维数据的插值方法,从一维数据序列中应该插值的点的左右相邻的两个据点进行数值的估计。 当然,不计算这两个点的数据尺寸的平均值(当然也可以计算平均值),而是基于到这两个点的距离分配它们的比重。 此外,还必须对一些边点使用外推。 也就是说,通过找到最接近的两个点,建立这两个点之间的一元线性方程,通过引入x可以得到对应的y值。 由于相对简单,以下代码很少使用matlab附带的内置函数。

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

functionyq=linear_me(x0,y0,x ) len_x=length(x ) 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; forj=1:length(a ) ifx0(j )-x ) I )=0)此时x0是位于x右侧的ifmin_posx0(j )-x ) I ) min_pos=x0(j )-x I 在%x0中距离x(I )中向右找到最接近的数量pos_y=y0(j ); end else %此时x0在x左边ifmin_negx0(j )-x ) I ) % (x0中距离x ) I )中找到向左方向最近的几min_neg=x0(j )-x ) I ) 结束% % if min _ pos (=infmin _ neg )=-INFk=(pos_y-neg_y )/(min_pos-min_neg ); yq(I )=pos_y-k*min_pos; else %%外推------------- if min _ pos==infforj=1: length---------% if min _ pos==133333650 endendK1=(neg_y-neg_next_y )/(min_neg-min_next_neg ); yq(I )=neg_y-k1*min_neg; -------------右外推---------------左外推pos_next_y=y0(j; endendK2=(pos_y-pos_next_y )/(min_pos-min_next_pos ); yq(I )=pos_y k2*min_pos; % -----------左外推-------------%endend验证效果:

编写test.m脚本进行测试:

%test.ma=load(data_input.txt ); x0=a (:1 ); y0=a (3360,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,' * ' ) tititle “ro ' ) title (自制函数插补)”得到的结果如下图所示。 其中,data.input.txt中的x是0-1之间的无序数据。 如果需要,请在评论区留下邮箱。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。