在Matlab中对一个3*10的矩阵,运用3sigma法则剔除粗大误差,最终的输出矩阵要求剔除的数据赋值为0其他输出
来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/30 11:14:52
在Matlab中对一个3*10的矩阵,运用3sigma法则剔除粗大误差,最终的输出矩阵要求剔除的数据赋值为0其他输出
在提粗粗大误差的过程中,希望每次在计算出残差后,找出绝对值最大的残差,和3倍的标准差相比较,如果残差>3倍的标准差,则将残差最大的这个原矩阵中的数赋值为零.然后再将剩余数据(此次计算过程中数据数也就减少了一个)计算平均值、残差、标准差,再判断绝对值最大的残差和3倍的标准差的大小,如果大就继续剔除,然后继续循环计算;如果小就循环结束.但最终输出结果,要求将所有剔除的数据都赋值为零,其他数据输出,并且知道不为零的数据有多少个.
望高手帮忙解决~
在提粗粗大误差的过程中,希望每次在计算出残差后,找出绝对值最大的残差,和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
再问: 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
在Matlab中对一个3*10的矩阵,运用3sigma法则剔除粗大误差,最终的输出矩阵要求剔除的数据赋值为0其他输出
matlab如何在循环语句中剔除掉矩阵中不需要的列?
matlab中的矩阵怎样剔除零元素所在的行?
C语言输入一个3行5列的矩阵数据,输出矩阵中每行最大值
matlab中如何实现一个矩阵的每一列数据对应相加并输出新的矩阵啊.,比如[1,2,3; 2,4,6]
matlab怎样将循环输出的数据结果放进一个矩阵中,然后用作他用?
matlab 弄一个空矩阵,如何把输出的数据放到空矩阵里面,
在MATLAB中如何将一个已知的矩阵输出成那种图片的形式
一组数据中,怎样运用函数剔除超过平均值加3倍标准的数据后求其他数据的标准差
在MATLAB中的两个矩阵中,怎么当一个矩阵的数据出现0时,另一个矩阵相同位置的数据也要为0
怎样随机给matlab中矩阵的一个元素赋值
写一个矩阵类 急写一个矩阵类,并能求矩阵的迹,要求该矩阵的元素用动态数据表示,按矩阵的样式在输入和输出流上进行重载.