まずはデータ生成
これもawkでやってしまおう
awk 'BEGIN{fs=10.0;for (i = 0; i < 10000; i++){t=i/fs; print t, sin(2*3.14*t*10)}}' > hoge.txt
# もっと桁数が欲しい場合は
# ちなみに後述のawkコマンドを走らせてきちんと結果を得るためには桁数が必要なので、こっちで
awk 'BEGIN{fs=10.0;for (i = 0; i < 10000; i++){t=i/fs; printf "%.10e %.10e\n", t, sin(2*3.14*t*10)}}' > hoge.txt

このデータの最大値を求めるには最小値は、極大値、極小値を求めるには
awk 'NR==1{x=0} NR>1 {diff1=diff2; diff2=$2-x; x=$2} {if(diff1*diff2<0)print $1}' hoge.txt > foo.txt
これらを重ねてプロットしてみるplot "hoge.txt" w l lw 2 lc 6, "foo.txt" w p pt 5 ps 2 lc 7

赤い時刻が極大値または極小値
もしそれらをバラバラに知りたかったら
awk 'NR==1{x=0} NR>1 {diff1=diff2; diff2=$2-x; x=$2} {if(diff1*diff2<0 && diff1>0)print $1, 1}' hoge.txt > maximum.txt
awk 'NR==1{x=0} NR>1 {diff1=diff2; diff2=$2-x; x=$2} {if(diff1*diff2<0 && diff1 <0) print $1,-1 }' hoge.txt > minimum.txt
プロットは
plot "hoge.txt" w l lw 2 lc 6, "maximum.txt" w p pt 5 ps 2 lc 7, "minimum.txt" w p pt 5 ps 2 lc 4
で
(本当はNR==1のときにdiff2=0ってした方がいい気がするけどまぁいいや・・・)
ランキング参加中です
↓クリックしていただけると嬉しいです〜