ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Расчет заморозков

03/04/2011 21:40:38

Заморозки на почве и облысенье леса,
небо серого цвета кровельного железа.
Выходя во двор нечетного октября,
ежась, число округляешь до "ох ты б#я".

(Иосиф Бродский, 1976)

Интересную идею подсказал постоянный пользователь сайта Ставр. Он прислал ссылку на статью, в которой предлагается рассчитывать вероятность ночных заморозков. Такой расчет интересен дачникам, сельским жителям - одним словом, всем, кто имеет дело с землей. Как и в случае предсказателя погоды Zambretti на основании длительных наблюдений за природой было установлено, что вероятность заморозков зависит от скорости изменения температуры в промежутке между часом дня и 9 часами вечера. Графически эту зависимость представил профессор Броунов следующим образом.

График вероятности заморозков
График вероятности ночных заморозков

По вертикальной оси обозначена температура воздуха в 9 часов вечера.
По горизонтальной оси - разница между температурой воздуха в 9 вечера и час дня.
Пользоваться этой схемой просто. Необходимо только определить в какой точке лежит пересечение двух этих параметров.

Но поскольку у нас установлены температурные датчики на улице (1-wire или в наружном блоке метеостанции), было бы интересно делать расчет заморозков автоматически. Сделать это совсем нетрудно. Необходимо только вспомнишь школьные уроки математики.
На рисунке выше показаны прямые. Любую прямую можно описать в виде функции

y = ax + b, где a и b - параметры, определяющие направление/наклон прямой.

Осталось только найти значения этих параметров. Для этого снова обратимся к учебнику. У нас имеется графическое представление функции, а, значит, мы знаем значения x и y функции.

a = (y2 – y1)/(x2 – x1)
b = ( y1 x2 – x1 y2 )/(x2 – x1)

Используя формулы, для каждого графика, задающего область вероятности заморозков, рассчитаем значения a и b и напишем программу на PHP.
Ставр прислал имеющиеся у него варианты скриптов на Perl и PHP, но я написал свою версию программы, учитывающую только определенную область температурных значений, в которых алгоритм дает адекватный результат.

<?
if ( date('G') < 20 )
$z = "расчет возможен только после 21 часа";
else
{
    // Считываем из БД или другим способом значение температуры в час дня
    $t13 = 9;
    // Считываем из БД или другим способом значение температуры в 21 час вечера
    $t21 = 4;

    $z = "0%";
    $x = $t13 - $t21;

    if ( $t21 >= $t13 )
    $z = "расчет невозможен. Температура растет";
    elseif ( $t21 < 0 )
    $z = "расчет невозможен. Температура ниже нуля";
    elseif ( $t21 < 11 && $x < 11 )
    {
        $t_graph = array(
            0 => array(0.375, 11, 0),
            1 => array(0.391, 8.7, 10),
            2 => array(0.382, 6.7, 20),
            3 => array(0.382, 4.7, 40),
            4 => array(0.391, 2.7, 60),
            5 => array(0.4, 1.6, 80));

        $z = "100%";
        for ( $i = 0; $i < count($t_graph); $i++ )
        {
            $y1 = $t_graph[$i][0] * $x + $t_graph[$i][1];
    
            if ( $t21 > $y1)
            {
                $z = $t_graph[$i][2]."%";
                break;
            }
        }
    }
}

echo "Вероятность заморозков: $z";
?>

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2015-02-06 10:46:06 | Gendrive
А как выяснить РЕАЛЬНЫЕ 13 и 21 час в данной местности? С учетом наших многочисленных переходов по времени плюс еще декретное время, какие цифры нужно подставлять в формулы?


2011-04-04 11:01:36 | Ставр
Вы как всегда все предельно четко и понятно обрисовали! Думаю, что мой пост можно и затереть, все равно он криво отобразился.
Кстати по ссылке, где описывается алгоритм вычисления, еще учитывается и точка росы. Там написано, что как правило температура не опускается ниже точки росы, поэтому о заморозке еще можно судить и по графику "Дью поинт".