tigersyu 发表于 2007-11-8 22:24

请教一个几组数据的方差排序的问题?

请教一个几组数据的方差排序的问题?
比如,有4组数据,A=;B=
C=;D=
需要在每个数组中选一个数,然后对选取的这四个数计算其方差,目的是找到方差最小、次小和第三小的三组数据,并且还要显示找到的这三组数据所对应原数组的数据!
我的初步想法是用循环来计算,即取A(i),B(j),C(k),D(m),然后循环求var(A(i),B(j),C(k),D(m)),最后找到方差最小的三组数据,并显示原A(i),B(j),C(k),D(m);
但是找到方差最小的三组数据,并且显示原数据是难题,恳请熟手指点,感激不尽!

VibrationMaster 发表于 2007-11-9 06:53

1.大概也只能如此
2. 这个命题的运算量太大, 具体意义何在?

tigersyu 发表于 2007-11-9 12:41

自然有这个问题的具体意义,急需高人指点

donkeyxu 发表于 2007-11-9 22:10

第一:不要用循环,用meshgrid产生穷举数据
第二:使用方差函数后,sort函数排序;最后三个就是最小的三个

[ 本帖最后由 donkeyxu 于 2007-11-9 22:44 编辑 ]

donkeyxu 发表于 2007-11-11 17:05

%程序如下,复制保存为haha.m,然后在主窗口输入haha即可,脱离了循环,速度很快;
function haha
A=;B=;C=;D=;
=nmeshgrid(A,B,C,D);
x=x(:)';y=y(:)';z=z(:)';w=w(:)';
U=;
K=var(U);
=sort(K);
disp('the fist 3 smaller answer is:');
disp(num2str(T(1:3)'));
disp('and the elements is:');
disp('A   B   C   D')
disp(num2str(U(:,R(1:3))'));
function =nmeshgrid(x1,x2,x3,x4)
nx1 = numel(x1); nx2 = numel(x2); nx3 = numel(x3);nx4 = numel(x4);
xx1 = reshape(full(x1(:)),);
xx2 = reshape(full(x2(:)),);
xx3 = reshape(full(x3(:)),);
xx4 = reshape(full(x4(:)),);
xx1 = xx1(ones(nx2,1),:,ones(nx4,1),ones(nx3,1));
xx2 = xx2(:,ones(1,nx1),ones(nx4,1),ones(nx3,1));
xx3 = xx3(ones(nx2,1),ones(nx1,1),ones(nx4,1),:);
xx4 = xx4(ones(nx2,1),ones(nx1,1),:,ones(nx3,1));

tigersyu 发表于 2007-11-12 12:45

程序运行很好,谢谢donkeyxu 倾囊相助,在下佩服的很:lol ,现在正在学习中!

tigersyu 发表于 2007-11-20 21:25

希望donkeyxu 能给点程序的注解,不胜感激!

eight 发表于 2007-11-20 22:36

原帖由 tigersyu 于 2007-11-20 21:25 发表 http://www.chinavib.com/forum/images/common/back.gif
希望donkeyxu 能给点程序的注解,不胜感激!
自己慢慢阅读一下吧,程序都给你了,还指望别人写注释?

tigersyu 发表于 2007-11-30 10:40

请问donkeyxu,如果我的数组变为5个数组,比如A=;B=
C=;D=,E=
我修改了一下程序,运行的结果不对,很着急!请你帮忙看一下,谢谢了
function haha
A=;B=;C=;D=;E=
=nmeshgrid(A,B,C,D,E);
x=x(:)';y=y(:)';z=z(:)';w=w(:)';v=v(:)';
U=;
K=var(U);
=sort(K);
disp('the fist 3 smaller answer is:');
disp(num2str(T(1:3)'));
disp('and the elements is:');
disp('A   B   C   D   E')
disp(num2str(U(:,R(1:3))'));
function =nmeshgrid(x1,x2,x3,x4,X5)
nx1 = numel(x1); nx2 = numel(x2); nx3 = numel(x3);nx4 = numel(x4);nx5 = numel(x5);
xx1 = reshape(full(x1(:)),);
xx2 = reshape(full(x2(:)),);
xx3 = reshape(full(x3(:)),);
xx4 = reshape(full(x4(:)),);
xx5 = reshape(full(x5(:)),);
xx1 = xx1(ones(nx2,1),:,ones(nx5,1),ones(nx4,1),ones(nx3,1));
xx2 = xx2(:,ones(1,nx1),ones(nx5,1),ones(nx4,1),ones(nx3,1));
xx3 = xx3(ones(nx2,1),ones(nx1,1),ones(nx4,1),:,ones(nx5,1));
xx4 = xx4(ones(nx2,1),ones(nx1,1),:,ones(nx3,1),ones(nx5,1));
xx5 = xx5(ones(nx1,1),:,ones(nx4,1),:,ones(nx3,1),ones(nx2,1),);

花如月 发表于 2007-12-3 14:23

回复 #10 tigersyu 的帖子

相信看懂donkeyxu程序,应该就可以解决

只是调整了个参数而已,要多尝试

相信自己可以解决
页: [1]
查看完整版本: 请教一个几组数据的方差排序的问题?