87.8 時刻データ (time data)

時刻データの当てはめでは、gnuplot は 1970 1 月 1 日からの秒数として時 刻を表現していることを思い出すことが重要です。例えば、2023 年のある 1 日の間に計測したなんらかの時間に依存したデータに対して、2 次関数モデル での当てはめをしたい場合、以下のようにそれができると期待するでしょう:


    T(x) = a + b*x + c*x*x
    set xdata time
    fit T(x) 'hits.dat' using 1:3 via a,b,c

しかしそれは多分失敗します。なぜならそのある日に対応する内部での x の の値は [1.67746e+09 : 1.67754e+09] のような範囲になってしまうからです。 計測データの x の小さな変更はわずかに 1.e-05 程度なので、収束を保証す るためには、初期パラメータ評価で多分ずっと先の小数第何位の精度が必要に なってしまうでしょう。

一つの解決策は、時間を測定の開始時間からの時間に変更して問題を作り変え てしまうことです。


    set xdata time       # データ書式は "27-02-2023 12:00:00 計測値"
    timefmt  = "%d-%m-%Y %H:%M:%S"
    set timefmt timefmt
    t0 = strptime( timefmt, "27-02-2023 00:00:00" )
    fit T(x) 'temperature.dat' using ($1-t0):3 via a,b,c

これはデータの範囲を [0 : 86400] に変え、より扱いやすくなります。 この場合の他の方法としては、1 列目の日付を無視し、2 列目に相対時刻形式 (tH/tM/tS) を使用することです。


    set timefmt "%tH:%tM:%tS"
    fit T(x) 'temperature.dat' using 2:3 via a,b,c

竹野茂治@新潟工科大学
2024-02-19