2014-06-27 55 views
0

可以說我有一個包含300條曲線的圖。 Matlab 2014a中是否有任何方法可以識別哪些曲線彼此相同?更具體地說,如果我在一幅圖上有10條曲線,則曲線1與曲線2相同且非常接近,與曲線3,4和5相同。是否有任何自動程序可供Matlab使用,以代替視覺效果檢查?從multicurve plot plot中識別/提取相同的曲線

感謝

喬治

+1

你對曲線有什麼樣的信息?你如何生成它們? –

+0

我每天都有24小時的溫度。我想確定那些相同且非常接近的日子的溫度,所以我可以用它們的平均值來表示它們。 – George

回答

0

可能需要一段時間,但如果你的300條曲線是一個數組說c(n,300)n是任意的,並且是每條曲線都有一個點的點數。

對於i in 1:300j in i:300您想將c(:,i) - c(:,j)與給定閾值進行比較(這取決於您希望兩條曲線彼此不同)。 我這樣做:abs(sum(c(:,i) - c(:,j))) < thresh - >對兩條曲線之間所有點的差值求和,如果曲線相似,差值應該很小。

當您在閾值以下找到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 

編輯 當你做比較,你居然要比較和的絕對值的閾值。 更改我的代碼以反映這一點。

+0

非常感謝你 – George

+0

@ user3775255如果回答你的問題,你能接受答案嗎? – vrleboss

+0

我用12條曲線試過了你的代碼,但是模擬需要很長時間才能完成。其實我已經等不及了,我不得不退出Matlab。這是正常的嗎? – George