Предположим, что на территории большого промышленного города действует несколько наблюдательных постов, оснащенных приборами для измерения какого-либо количественного параметра, например, температуры или концентрации углекислого газа. Данные со всех постов можно нанести на карту в виде отдельных точек. Но такое представление будет крайне мало информативным. Для целей экологического мониторинга интерес представляет задача, позволяющая каким-то образом, по имеющимся отдельным точкам с известными значениями того или иного параметра, составить представление об общем его распределении на всей территории города. Процессы тепло- и массообмена родственны в общем смысле постепенному взаимному усреднению параметров перемешивающейся воздушной среды. Тогда значение температуры в точке, расположенной между постами, можно примерно рассчитать как среднее арифметическое. Но при этом оно должно быть более схожим со значениями, измеренными на ближайших постах, и в меньшей степени подвергаться влиянию удаленных опорных точек. Числовой характеристикой, ведущей себя подобным образом, является так называемое взвешенное среднее, вычисляемое по формуле: . Каждое из значений xk умножается на какой-то свой коэффициент ak, который отражает его "вес", долю участия или вклад в формирование общего среднего. В качестве весовых коэффициентов в нашей экологической задаче будем использовать отрицательные степени расстояний от текущей точки до наблюдательных постов. На врезке приведен фрагмент программного кода, реализующего эти вычисления.
Private Sub Form_Click() n = 10 m = 100 Randomize Timer zmin = 100 zmax = 0 For k = 1 To n x(k) = 100 * Rnd y(k) = 100 * Rnd z(k) = 100 * Rnd If zmax < z(k) Then zmax = z(k) If zmin > z(k) Then zmin = z(k) Next k For i = 1 To m For j = 1 To m sr = 0: srz = 0 For k = 1 To n r(k) = (x(k) - i) ^ 2 + (y(k) - j) ^ 2 a = 1 / r(k) sr = sr + a srz = srz + a * z(k) Next k sz = srz / sr c = ((sz - zmin) / (zmax - zmin)) * 255 Line (3 * (i - 1), 3 * (j - 1))- (3 * i - 1, 3 * j - 1), RGB(c, c, c), BF Next j Next i End Sub
В примере первоначально куб размером 100x100x100 заполняется десятью точками со случайными координатами x, y и z. Далее z рассматривается как зависимая переменная, и для нее строится "средневзвешенная" поверхность. Для вычисления весовых коэффициентов в программе используется выражение ak=1/rk, где rk - квадрат расстояния от данной текущей точки до k-того поста. На приведенном тоновом рисунке изображена одна из средневзвешенных поверхностей, полученная с помощью данного программного кода.
Метод средневзвешенной интерполяции мне как-то довелось использовать для визуализации данных о загрязненности снежного покрова Минска. Концентрации различных загрязнителей были измерены в пробах снега, взятых примерно в семидесяти точках в различных районах города. Далее по этим данным необходимо было построить общую непрерывную визуальную картину загрязненности тем или иным видом загрязнителей. Я использовал взвешенное среднее, а группа исследователей параллельно обрабатывала эти данные иными методами. Результаты получились сопоставимы и визуально схожи.
Сейчас, в эпоху глобального потепления и погодных аномалий, было бы интересно применить этот метод в иных более крупных масштабах, чем отдельно взятый город. Можно, например, на занятиях по информатике построить температурную карту республики в различные сезоны и годы, а затем произвести ретроспективный анализ ее изменений. Можно при помощи интернета узнать погоду в опорных точках по всему миру и на очередной лабораторной работе построить глобальную карту распределения тепла и холода на всей нашей планете.
А. КОЛЕСНИКОВ,
andr61@mail.ru