新手问个问题,请大家帮忙谢谢
请问这个错在哪里x=[2003 8 6 0.4
2003 8 7 0.3
2003 8 11 -0.6
2003 8 16 -0.6
2003 8 17 0.6
2003 8 17 0.3
2003 8 17 0.2
2003 8 18 1.3
2003 8 18 0.7
2003 8 20 0.6
2003 8 21 0.6
2003 8 21 0.5
2003 8 21 4.6]
我想比较前3项如果相同的话就将最后一项相加并上移,如
2003 8 16 -0.6
2003 8 17 0.6
2003 8 17 0.3
2003 8 17 0.2
变为
2003 8 16 -0.6
2003 8 17 1.1
j=13;
for n =1:12
for m =n+1:j
if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
x(n,4)=abs(x(n,4))+abs(x(m,4));
j=j-1;
x(m,:)=[];
end
end
end
请问错在哪里啊
[ 本帖最后由 eight 于 2007-2-28 15:45 编辑 ] x(m,:)=[];
这个语句执行后会导致矩阵x的维数发生变化(行数减少) 我把它换成这种的
j=13;
for n =1:j-1
for m =n+1:j
if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
x(n,4)=abs(x(n,4))+abs(x(m,4));
j=j-1;
x(m,:)=[];
end
end
end
可是还是有错 原帖由 熊猫 于 2007-2-28 16:10 发表
我把它换成这种的
j=13;
for n =1:j-1
for m =n+1:j
if((x(n,1)==x(m,1))&&(x(n,2)==x(m,2))&&(x(n,3)==x(m,3)))
x(n,4)=abs(x(n,4))+abs(x(m,4));
...
用以下代码吧,不知道有没有更简单的方法,欢迎指点
= unique(x(:,1:3), 'rows');
y = ;
for i = 1:max(n)
y(i, 4) = sum(x(i == n, 4));
end
y
[ 本帖最后由 eight 于 2007-2-28 17:32 编辑 ] eight正解.若要好看一些,可稍作如下修改:
================================
= unique(x(:,1:3),'rows');
k = max(n); %%% 可统一用k标记元素不相同的行数.
y = ;
for i = 1:k
y(i,4) = sum(x(i==n,4));
end
y 原帖由 xjzuo 于 2007-2-28 22:56 发表
eight正解.若要好看一些,可稍作如下修改:
================================
= unique(x(:,1:3),'rows');
k = max(n); %%% 可统一用k标记元素不相同的行数.
y = ;
for i = 1:k
y(i,4) = sum(x ...
y= 有问题,y的第一维大小并非k
==================================
我算了一下, 好象并没有问题.
"y的第一维大小并非k"--------不知eight是否动手算了一下?
by xjzuo
==================================
==========eight=========================
不好意思,看错了,呵呵。你说得对,我当时没有动手算:lol ,
只粗略看了一下,不好意思:loveliness:
=======================================
[ 本帖最后由 eight 于 2007-3-1 10:44 编辑 ]
回复 #4 eight 的帖子
请问y = ;是 什么 意思啊回复 #4 eight 的帖子
为什么如果我用b=得到的结果却是5列呢回复 #2 eight 的帖子
我知道了,谢谢了,我用了两次所以多了一列,真的 很 谢谢
页:
[1]