| Top Page | プログラミング | Perl 目次 | 索引 |


#       gen_temp_series.pl  仮想の温度データを作る.

$day_min = -3.0;  # 日最低気温の初期値
$day_max = 5.0;   # 日最高気温の初期値
$var  = 0;        # 日ごとのランダムな変動

for ($i_day = 0; $i_day $lt; 60; $i_day++) {  #  60日間にわたって計算

    $var =  (0.5 * $var + rand(6.0) - 3.0) / 1.5;  #  6度の幅 (-3, 3.0] でランダムな変動 
                                                   # 前の値も 1/3 だけ加味して連続性を表現

    for ($i_hr = 0; $i_hr $lt; 12; ++$i_hr) {   #  最低気温から最高気温まで 12時間で変化

        #  三角関数で日内の温度変化パターンを表現 ( cos() に与える角度はラジアン)
        $temp = $day_min + ($day_max - $day_min) / 2.0 * (1.0 - cos(($i_hr / 12.0) * 3.14));
        printf "%.1f\n", $temp;    #  温度を出力.
    }

    $day_min = $i_day * 0.15 - 2.0 + $var;  #  最低気温を再計算

    $var =  (0.5 * $var + rand(6.0) - 3.0) / 1.5;  #  6度の幅でランダムな変動

    for ($i_hr = 0; $i_hr $lt; 12; ++$i_hr) {   #  最高気温から最低気温まで 12時間で変化

        $temp = $day_max - ($day_max - $day_min)  / 2.0 * (1.0 - cos(($i_hr / 12.0) * 3.14));
        printf "%.1f\n", $temp;    #  温度を出力.
    }

    $day_max = $i_day * 0.20 + 5.0 + $var;  #  最低気温を再計算
}