让我们说我有一个包含300条曲线的情节。 Matlab 2014a中是否有任何方法,以便我可以确定哪些曲线彼此相同?更具体地说,如果我在一个图上有10条曲线,曲线1是相同的并且非常接近曲线2,曲线3,4和5也是如此。是否有任何自动化的方法让Matlab做到而不是视觉检查?
由于
乔治
答案 0 :(得分:0)
可能需要一段时间,但如果您的300条曲线位于数组中,请说c(n,300)
。 n
是任意的,是每条曲线都有一个点的数量。
对于i in 1:300
和j in i:300
,您希望将c(:,i) - c(:,j)
与给定的阈值进行比较(这取决于您希望两条曲线相互之间的差异程度)。
我这样做:abs(sum(c(:,i) - c(:,j))) < thresh
- &gt;对两条曲线之间所有点的差值求和,如果曲线相似,差值应该很小。
如果您发现低于阈值的c(:,j)
,则要将其从300曲线池中删除。
这是由c = c(:,~ismember(1:size(c,2),j));
完成的
这给你一个代码:
i = 1;
thresh = 1; %arbitrary threshold here adapt to you needs
while i<size(c,2)
j = i+1;
while j<size(c,2)
if abs(sum(c(:,i) - c(:,j))) < thresh
c = c(:,~ismember(1:size(c,2),j)); %remove the curve j from c
else
j = j+1;
end
end
i = i+1;
end
修改强> 当您与阈值进行比较时,您实际上想要与总和的绝对值进行比较。 更改了我的代码以反映这一点。