彻底解决了,谢谢关注!

本帖最后由 hettyw 于 2009-10-8 13:34 编辑

现有组数据(t,x),t,x分别为同长度的向量,我想写一段程序,检查t的值是否有重复,然后把重复的后一个以及相对应的x值去掉,但是这样t长度就会减少,而写循环的时候定义的最大值就不对了。
请问如何能解决此问题,谢谢!

我自己写的如下,好像if用的也不对,反正总之就是运行不出来:
n=length(t);
for i=1:n-1
    for j=i+1:n
        if t(i)==t(j)
            t(j)=[];
            x(i)=(x(i)+x(j))/2;
            x(j)=[];
        end
    end
end
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

本帖最后由 hettyw 于 2009-10-7 15:33 编辑

5# liujiayukob


首先谢谢回复!
不过我也想过这样,但这些点怎么再找到呢?而且如果用for循环,还是有同样的问题。
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

7# liujiayukob


好像不行,因为已经在循环里面了。
错误反馈和之前一样,还是
Attempted to access t(108); index out of bounds because numel(t)=107.
Error in ==> temp at 6
        if t(i)==t(j)
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

正好下班回来帮你看看

n=length(t);
k = 0;
for i=1:n-1
    for j=i+1:n
        if t(i)==t(j)
            t(j)=[];
            x(i)=(x(i)+x(j))/2;
            x(j)=[];
            k = k +  ...
joqoko 发表于 2009-10-7 17:20

嗯,加一个变量一起循环,这主意不错。谢啦!
虽然其实我现在有别的方法了,根本不需要再调这个问题。
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

楼主可以试一下下面的办法
[t_new , index] = unique(t,'first');
t_new = t(sort(index));
for i=1:length(t_new)
   x_new(i) = mean(x(t == t_new(i)));
end
一头牛 发表于 2009-10-7 16:34

好专业!
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

谢谢大家!
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

本帖最后由 hettyw 于 2009-10-8 12:11 编辑

现在改了这一段,本来没这一段整个程序运行的时候错误反馈有好几十行同样的Warning: Divide by zero.,加了这一段错误反馈明显减少,但是还有十几个,说明我还是没完全改对,有人知道我错在哪么?

n=length(t);
for i=1:n-1
    if i>numel(t)-1
        break;
    end
    for j=i+1:n
        if j>numel(t)
            break;
        end
        if t(i)==t(j)
            x(i)=(x(i)+x(j))/2;
            t(j)=[];
            x(j)=[];
            j=j-1;
        end
    end
end
Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP

楼主可以试一下下面的办法
[t_new , index] = unique(t,'first');
t_new = t(sort(index));
for i=1:length(t_new)
   x_new(i) = mean(x(t == t_new(i)));
end
一头牛 发表于 2009-10-7 16:34

粘贴了这段,运行出来说
??? Error using ==> unique
Unknown flag.

Wrong cannot afford defeat but Right can.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……

TOP