Stats

Popular Posts

Followers

Mathematica 教學 找出資料序列的所有相對高低點

戴忠淵 於 2012年11月6日星期二 上午6:40 發表


 作者  candy88257 (阿泰斯)                                  看板  Mathematica  標題  [問題] 在XY平面上的蛇行點找所有的最低值!?  時間  Mon Nov  5 22:36:00 2012 ───────────────────────────────────────  如:  給定一連串X座標為連續的座標點:(1,1),(2,3),(3,5),(4,2),(5,3),(6,7),(7,2),(8,5),\ (9,6)   畫起來像是上下起伏的震動圖   請問如何很快速的在裡面找到所有的最低點?  如上面串列的所有最低點為: (4,2),(7,2)  應該是用If去設定,但是我弄不出來= =  懇求大師協助!!!  感謝!!


(*產生100組,每組200個數字的隨機資料*)
temp=Sort[#]&/@RandomReal[{0,50Pi},{100,200}];
data=Map[{#,Sin[#]}&,temp,{2}]

(*畫出所有資料的序列圖*)
Graphics[Line[#]&/@Partition[#,2,1],Epilog->{Red,Point[#]},
Frame->True,ImageSize->1000]&/@data

(*第一組資料的圖形*)
Graphics[Line[#]&/@Partition[data[[1]],2,1],
Epilog->{Red,Point[data[[1]]]},Frame->True,ImageSize->1000]


(*先分析第一組,找出所有的相對低點。若該組資料的y值較上一組資料的y值小,*)
(*就歸為同一組。所以若長度為一則表示資料在遞增,故剔除。*)

low=Select[Split[data[[1]],#1[[2]]>#2[[2]]&],Length[#]>1&][[All,-1]]

(*同樣的方法可應用在相對高點*)
high=Select[Split[data[[1]],#1[[2]]<=#2[[2]]&],Length[#]>1&][[All,-1]]

(*輸出所有資料的相對高低點*)
datalow=Select[Split[data[[#]],#1[[2]]>#2[[2]]&],
Length[#]>1&][[All,-1]]&/@Range[Length@data]

datahigh=Select[Split[data[[#]],#1[[2]]<=#2[[2]]&],
Length[#]>1&][[All,-1]]&/@Range[Length@data]


Tags: , ,

讀者回應 ( 0 意見 )

發佈留言

Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.

如果這篇文章對你有幫助,那請留個訊息給我~