Bootstrap

【MATLAB绘图】3sigma即剔除小概率事件功能的使用

一、介绍

在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴

3σ原则为

数值分布在(μ-σ,μ+σ)中的概率为0.6827

数值分布在(μ-2σ,μ+2σ)中的概率为0.9545

数值分布在(μ-3σ,μ+3σ)中的概率为0.9973

二、代码

数据主要是一串相似的值,自己提前判断能不能用σ就好了。用于处理小概率事件的剔除,当然,剔除是有代价的,需要样本数量足够大,具体要多大还得看你自己想提出成什么样子

主要地,先计算均值、标准差值,最后σ按自己设置的区间进行运算。当然这里也可以选择直接把坏值m(t)剔除,置零操作。

  对于代码内提到的'matlab.mat',举个例子,就不方便把数据拿出来,拿出来好像也没什么用。如下:

        我在监视一辆小车保持于原点,但实际上监视得到的点并不准确(会有零漂、温漂等问题导致波动);我已知在实际运动中,小车X轴的运动轨迹是准确的,而Y轴有问题,为了粗略计算我只能设法省略掉那些漂移的点。所以,(jiguangx,jiguangy)这是图一的坐标各点;然后单独对Y轴矢量进行概率省略,省略掉的Y轴用平均值替代,就能得到(jiguangx,n)如图二。
当然也可以适用于X轴或是平面(x,y)坐标点,不过如果是对二维坐标点进行概率省略,可能更适合对位移平方进行省略?具体情况具体分析吧。

clc;
clear;
load('matlab.mat');
figure(1);
set(gcf,'units','centimeters','Position',[5,5,16,7], 'color','w');

%第一幅图,原始数据
subplot(1,2,1);
plot(jiguangx,jiguuangy,'ro-','MarkerSize',4);
axis([-0.2 0,-0.2,0]);
lg1=legend( '\fontname{宋体}原始数据值','Location','NorthOutside','Orientation','horizontal');
set(lg1,'FontSize',10.5);
grid on;
box on;
xlabel('\fontname{宋体}平面\fontname{Times New Roman}X\fontname{宋体}轴\fontname{Times New Roman} (mm)','FontSize',10.5);
ylabel('\fontname{宋体}平面\fontname{Times New Roman}Y\fontname{宋体}轴\fontname{Times New Roman} (mm)','FontSize',10.5);


%装载数据开始剔除小概率事件
%数值分布在(μ-3σ,μ+3σ)
a=jiguuangy;
aa=mean(a); %计算平均值
sig=std(a); %计算标准偏差
m=zeros(1,length(a));%所有数据列为一个矩阵
i=1;
for t=1:length(a)
	m(t)=abs(a(t)-aa);
	if m(t)>3*sig
  		n(t)=aa;%将异常值替换成了均值
  		i=i+1;
	else
  		n(t)=a(t);
  	end
end

%第二幅图,剔除后的数据
subplot(1,2,2);
plot(jiguangx,n,'o-','MarkerSize',4);
axis([-0.2 0,-0.2,0]);
lg1=legend( '\fontname{Times New Roman}3σ\fontname{宋体}准则','Location','NorthOutside','Orientation','horizontal');
set(lg1,'FontSize',10.5);
grid on;
box on;
xlabel('\fontname{宋体}平面\fontname{Times New Roman}X\fontname{宋体}轴\fontname{Times New Roman} (mm)','FontSize',10.5);
ylabel('\fontname{宋体}平面\fontname{Times New Roman}Y\fontname{宋体}轴\fontname{Times New Roman} (mm)','FontSize',10.5);

三、运行效果

 基本实现功能

;