2015-06-10 124 views
2

我要特別強調利用Matlab在一個點上中止的陰謀。Matlab的:不連續地塊

這是劇情的樣子用scatterenter image description here

不過,我想情節是一條平滑的曲線而不是分散的點。如果我使用plot,它會給我:

enter image description here

我不想垂直線。

我認爲我可以將這個功能手動分解爲兩部分,並在一個圖上分別繪製它們,但問題是我不知道在哪裏出現斷點。

是否有一個很好的解決這個?謝謝。

回答

5

要查找的數據跳,你可以搜索的地方的函數的導數是最大的:繪製功能將是該點設置爲NaN

[~,ind] = max(diff(y)); 

的一種方式繪製功能照常:

y(ind) = NaN; 
plot(x,y); 

這帶來了丟失數據點的缺點。爲了避免這種情況,你可以在中間值爲NaN添加一個數據點:

xn = [x(1:ind), mean([x(ind),x(ind+1)]), x(ind+1:end)]; 
yn = [y(1:ind), NaN, y(ind+1:end)]; 
plot(xn,yn); 

另一個解決方案是分裂向量的情節:

plot(x(1:ind),y(1:ind),'-b', x(ind+1:end),y(ind+1:end),'-b') 

所有方面迄今只處理一個跳。爲了在函數中處理任意數量的跳轉,需要知道這些跳轉會有多大或者有多少跳轉。解決方案雖然相似。

+1

你可以在中間添加一個NaN val不存在的點,這樣你就不會丟失數據點。 –

+0

@Andrey謝謝你的建議。我在答案的第一個修訂版本中已經這樣做了,但後來決定放棄該解決方案,並添加如何分割圖。爲了完整性,我再次添加了該部分。 – hbaderts

0

您應該遍歷數據並找到兩個連續點之間距離最大的索引。在兩個單獨的數組中將該數組從該索引中分解出來並單獨繪製它們。