| 查看: 631 | 回复: 5 | ||
[求助]
Matlab
|
|
如下表,希望通过循环数和步数的控制,通过设置电压(第二列)的误差,实现数据的挑选。如果不加循环和步数项,下面code可以实现单步工作,但是,增加了循环(n)和步数(m)后,就不工作了。 另外,还有一些小问题(见code标注),如:如果小数点后的位数很多时,似乎zx(find(zx==0))=[]; zy(find(zy==0))=[]; NewArray=[zx,zy]存在问题。急求高手指导!谢谢! y = data(:,2); %对应y值 u = data(:,3); %对应步数 v = data(:,4); %对应循环数 zx =zeros(length(x),1); zy =zeros(length(y),1); h = 1; zx(1) = x(1);%保留第一步的数据(如何实现保留其他步的第一数据?) zy(1) = y(1); a=[10,1,0.1]; B=[0,(-0.1)*a(1),(-1)*a(1),0.1*a(1),1*a(1),(-0.1)*a(2),(-1)*a(2),0.1*a(2),1*a(2),(-0.1)*a(3),(-1)*a(3),0.1*a(3),1*a(3)];%B内部数的个数与步数对应 A=B*0.02; for k = 2:length(x) for n=1:max(v); for m=2:max(u); if abs(y(k)-y(k-1))>=abs(A(m)); %现在好像A(2)等同时影响其他步的误差?) h = h+1; zx(h) = x(k-1); zy(h) = y(k-1); end end end end zx(find(zx==0))=[]; zy(find(zy==0))=[]; NewArray=[zx,zy]; disp(NewArray); plot(zx,zy,zx,zy,'o'); 时间 电压 步数 循环数 5.008124936 -6.0395E-05 1 1 10.00032039 0.499913335 2 1 30.01483456 0.500076175 2 1 … … … … … … … … 310.0146066 0.500076175 2 1 310.0304182 5.000491142 3 1 … … … … … … … … 610.0291657 5.000491142 3 1 610.0294107 -0.49970841 4 1 630.0439261 -0.49987125 4 1 … … … … … … … … 890.2321767 -0.49987125 4 1 910.0436822 -0.49987125 4 1 910.059488 0.499913335 2 2 930.0738865 0.500076175 2 2 … … … … … … … … 1170.247626 0.499913335 2 2 1190.262159 0.500076175 2 2 1210.073952 0.499913335 2 2 1210.074271 5.000654221 3 2 … … … … … … … … 1490.276902 5.000491142 3 2 1510.088659 5.000654221 3 2 1510.088878 -0.49954554 4 2 1530.103367 -0.49987125 4 2 … … … … … … … … 1770.277052 -0.49987125 4 2 1790.291507 -0.49987125 4 2 1810.103251 -0.49987125 4 2 1810.119112 0.499750465 2 3 1830.133624 0.500076175 2 3 … … … … 2090.321718 0.500076175 2 3 2110.133399 0.500076175 2 3 … … … … |
» 猜你喜欢
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
不自信的我
已经有12人回复
假如你的研究生提出不合理要求
已经有5人回复
所感
已经有4人回复
论文终于录用啦!满足毕业条件了
已经有28人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
实验室接单子
已经有3人回复
磺酰氟产物,毕不了业了!
已经有8人回复
【答案】应助回帖
感谢参与,应助指数 +1
|
不确定你的误差数组B如何和步数对应,所以下面代码只考虑了单一误差,请自行测试 load data; data123=data(:,1:3); %取原始数据中的1、2、3列 Data4col_uni=unique(data(:,4)); NewArray=[]; for i=1:length(Data4col_uni) datafind=find(data(:,4)==i); Temp=data123(datafind, ; %把循环i的数据取出来data12=Temp(:,1:2); %取Temp中的1、2列数据 Data3col_uni=unique(Temp(:,3)); for j=1:length(Data3col_uni) datafind_1=find(Temp(:,3)==j); dataSingleStep=data12(datafind_1, ;%把第i循环,第j步时的数据取出来if(length(dataSingleStep(:,1))==1) NewArray=[NewArray;dataSingleStep]; else x = dataSingleStep(:,1); y = dataSingleStep(:,2); zx =zeros(length(x),1); zy =zeros(length(y),1); h = 1; zx(1) = x(1); zy(1) = y(1); for k = 2:length(x) if abs(y(k)-y(h)) >= 0.0002 zx(h) = x(k); zy(h) = y(k); h = h+1; end end zx(zx==0)=[]; zy(zy==0)=[]; NewArrayTemp=[zx,zy]; NewArray=[NewArray;NewArrayTemp]; end end end subplot(2,2,1); plot(data(:,1),data(:,2),data(:,1),data(:,2),'o'); subplot(2,2,2); plot(NewArray(:,1),NewArray(:,2),NewArray(:,1),NewArray(:,2),'o'); PS:请给出足够的数据以便进行测试,谢谢。 |
2楼2012-12-10 19:43:46
3楼2012-12-10 19:52:58
4楼2012-12-10 20:40:50
realghost828
金虫 (小有名气)
- 应助: 18 (小学生)
- 金币: 1191.2
- 帖子: 76
- 在线: 57.5小时
- 虫号: 532963
- 注册: 2008-03-25
- 性别: GG
- 专业: 运筹学

5楼2012-12-10 21:46:56
6楼2012-12-10 23:01:12












回复此楼
; %把循环i的数据取出来