彻底解决了,谢谢关注!

本帖最后由 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.
别跟我学。姐是个传说,姐用自己的行动写着自己的传说……
Share |
Share

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