2012年12月11日 星期二

Re: [問題] 在XY平面上的蛇行點找所有的最低值!?

作者: chungyuandye (養花種魚數月亮賞星星) 看板: Mathematica
標題: Re: [問題] 在XY平面上的蛇行點找所有的最低值!?
時間: Tue Nov 6 00:35:04 2012

※ 引述《candy88257 (阿泰斯)》之銘言:
: 標題: [問題] 在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)
: PS.
: 不要用畫圖的去判斷
: 因為我目前要判斷的點都是好幾百個一組...
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 175.181.151.43
: 推 jurian0101:If用法有誤,你要多看範例文件熟悉MM的語法了。 11/05 22:44
: → candy88257:意思是可以用If寫出來!? 11/05 23:00
: → candy88257:感謝指導! 11/05 23:00
: → chungyuandye:SplitBy[SortBy[data,Last],Last] 11/05 23:04
: → chungyuandye:SplitBy[SortBy[data, Last], Last][[1]] 少打[[1]] 11/05 23:04

如果要找全域極小,又不考慮第一組資料,那下列語法就可以
SplitBy[SortBy[data[[2;;-1]], Last], Last][[1]]

: → candy88257:我想找到所有的最低點...就像上面例子最後抓到2個最低 11/05 23:31
: → candy88257:也就是所有點按X順序在XY平面連起來,找到所有的最低點 11/05 23:32
: → candy88257:其實不能講最低點,應該是相對低點 11/05 23:37

如果要找相對高低點,那Split這個函數可發揮妙用

(* 產生100組,每組200個數字的隨機資料 *)
temp = Sort[#] & /@ RandomReal[{0, 50 Pi}, {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]

--
養花種魚數月亮賞星星

http://chungyuandye.twbbs.org


--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: chungyuandye 來自: 218.173.133.152 (11/06 00:48)
推 candy88257:我再研究一下,感謝!!  11/07 16:36

沒有留言:

張貼留言