作业帮 > 数学 > 作业

在Matlab中对一个3*10的矩阵,运用3sigma法则剔除粗大误差,最终的输出矩阵要求剔除的数据赋值为0其他输出

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/30 11:14:52
在Matlab中对一个3*10的矩阵,运用3sigma法则剔除粗大误差,最终的输出矩阵要求剔除的数据赋值为0其他输出
在提粗粗大误差的过程中,希望每次在计算出残差后,找出绝对值最大的残差,和3倍的标准差相比较,如果残差>3倍的标准差,则将残差最大的这个原矩阵中的数赋值为零.然后再将剩余数据(此次计算过程中数据数也就减少了一个)计算平均值、残差、标准差,再判断绝对值最大的残差和3倍的标准差的大小,如果大就继续剔除,然后继续循环计算;如果小就循环结束.但最终输出结果,要求将所有剔除的数据都赋值为零,其他数据输出,并且知道不为零的数据有多少个.
望高手帮忙解决~
给出一组数据,我给你处理吧
再问: 1 2 3 4 5 6 7 8 9 10 1 29.998 29.997 30.002 30.001 29.998 29.996 29.997 30.001 30.003 30.004 2 29.998 30.000 29.996 30.003 31.002 29.997 27.682 27.667 30.002 29.995 3 30.000 30.003 29.997 30.005 29.996 30.002 30.016 30.005 31.689 32.056 以上是一组3*10的数据。请问每次剔除的时候,是不是需要找出这个数据的ID才能对这个数据剔除(或者赋零)。我的邮箱是ainne1987@163.com 先谢谢楼上这位了
再答: x=[1 2 3 4 5 6 7 8 9 10]; y=[29.998 29.997 30.002 30.001 29.998 29.996 29.997 30.001 30.003 30.004]; mean_y=mean(y); std_y=std(y); res_y=abs(y-mean_y); res_max=max(res_y) if res_max>3*std_y y(find(err_y==res_max))=0; end 你可以采取类似这样的算法,但你的这几组数都没有粗大误差的数
再问: y(find(err_y==res_max))=0; 是将res_max赋零还是找出原数据里的残差最大的值赋零? 用y=[29.998 29.997 30.002 30.001 29.998 29.996 29.997 30.001 31.003 30.004 29.998 30.000 29.996 30.003 31.002 29.997 26.682 26.667 30.002 29.995 30.000 30.003 29.997 30.005 29.996 30.002 30.016 31.005 31.689 32.056]; 运算以上程序时显示“err_y”错误 请问以上程序是否能剔除原数据中的数值?
再答: y=[29.998 29.997 30.002 30.001 29.998 29.996 29.997 30.001 31.003 30.004 29.998 30.000 29.996 30.003 31.002 29.997 26.682 26.667 30.002 29.995 30.000 30.003 29.997 30.005 29.996 30.002 30.016 31.005 31.689 32.056]; y0=y; for i=1:length(y) mean_y=mean(y); std_y=std(y); res_y=abs(y-mean_y); res_max=max(res_y); if res_max>3*std_y y(find(res_y==res_max))=[]; end end [C,index]=setdiff(y0,y); y0(index)=0