散点数据的包络线获取(MATLAB)

在科研数据处理当中,往往会遇到许多不规则的散点数据,通过程序将这些数据的包络线(Envelope)进行描述可以更好地展现数据的取值范围。在进行数据统计当中,对于样本数据包络线的描述一般不可或缺。
这里采用MATLAB软件,自己编写了一段描述散点数据包络线的代码,也是我平时使用的代码,与大家交流协同改进。

程序当中变量定义如下:

X:散点数据的横坐标;
Y:散点数据的纵坐标;
n:需要将包络线进行多项式拟合的阶数;
x_min, x_max, x_int:需要进行多项式拟合的坐标下限、上限以及坐标步长;
window_n:散点数据窗大小(在正序散点当中的n个值里取极大(极小)值),若n不是散点数据个数的约数,则对数据尾端增加零点使其数量达到n的整数倍。

%  Find the boundary of data
%  X-input x coordinary
%  Y-input y coordinary
%  n-polyfit times
%  x_min,x_max,x_int-range of x and interval of x
function [Xup_fit,Yup_fit,Xdown_fit,Ydown_fit,X_up,Y_up,X_down,Y_down]=BD_poly(X,Y,n,x_min,x_max,x_int,window_n)
[X2,p]=sort(X);
Y2=Y(p);
while mod(length(Y2),window_n)~=0
    Y2(end+1)=0;
    X2(end+1)=0;
end
Y_up=max(reshape(Y2,window_n,length(Y2)/window_n));
for i = 1:length(Y_up)
    X_up(i)=X2(find(Y2==Y_up(i),1));
end
Y_down=min(reshape(Y2,window_n,length(Y2)/window_n));
for i = 1:length(Y_down)
    X_down(i)=X2(find(Y2==Y_down(i),1));
end
[Aup]=polyfit([X_up],[Y_up],n);
Xup_fit=x_min:x_int:x_max;
Yup_fit=polyval(Aup,Xup_fit);
[Adown]=polyfit([X_down],[Y_down],n);
Xdown_fit=x_min:x_int:x_max;
Ydown_fit=polyval(Adown,Xdown_fit);

算例说明

对于X,Y均为1-5随机均匀随机分布的散点来说,通过程序计算得到的包络线如图:
红线为包络线,蓝线为多项式拟合。

window_n=10,拟合多项式次数为5;
请添加图片描述
window_n=50,拟合多项式次数为5;
请添加图片描述
window_n=100,拟合多项式次数为5;
请添加图片描述
对于
x服从0-100随机分布,y服从公式: y = s i n ( x ) ∗ x y=sin(x)*x y=sin(x)x的数据散点来说:
window_n=10,拟合多项式次数为5;
请添加图片描述
window_n=50,拟合多项式次数为5;
请添加图片描述
window_n=100,拟合多项式次数为5;
请添加图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值