
Каждый раздел содержит по три подраздела: непрерывный случай, дискретный случай и кросс-корреляция.
Производная первого порядка
Непрерывный случай. Производная функции в точке
:
Дискретный случай. Рассмотрим дискретную ленту, на которой клетки располагаются с шагом . Тогда координаты ячеек можно обозначить
, где
, а значение функции в
обозначим
. Тогда производную в точке
можно аппроксимировать используя центральную разность:
Порядок погрешности при этом будет . Для ограниченной ленты необходимо определить граничные условия. Если лента состоит из
ячеек с индексами
, то можно замкнуть ленту задав значения
Кросс-корреляция. Вычислять производные на ленте удобно при помощи кросс-корреляции
с ядром
оператор обозначает кросс-корреляцию.
Кросс-корреляция 1D
Результатом кросс-корреляции массива с ядром
в позиции
будет массив
, элементы
которого определяются скалярным произведением фрагмента
массива
с массивом
:
Значения на краях массиваопределяются в соответствии с заданными граничными условиями.
Производная второго порядка
Непрерывный случай. Вторая производная функции :
Дискретный случай на ленте по аналогии с разностным оператором первого порядка:
Кросс-корреляция. Вычислять вторые производные на ленте удобно при помощи кросс-корреляции
с ядром
Эта аппроксимация также имеет погрешность порядка .
Градиент
Пусть имеется скалярное поле. Градиент в точке
– это вектор, указывающий направление наискорейшего возрастания функции
в заданной точке.
Непрерывный случай. Будем рассматривать градиент в двумерном пространстве:
где – двумерный оператор набла (оператор Гамильтона),
– ортогональные единичные векторы.
Дискретный случай. Рассмотрим прямоугольную сетку с шагом . Координаты клеток можно обозначить
и
, где
, а значение функции в клетке
обозначим
. Тогда, центральные разности можно записать так:
Дискретный градиент в клетке будет представлять собой вектор:
Если сетка ограничена индексами и
, то необходимо задать граничные условия. По аналогии с замкнутой лентой, можно замкнуть сетку в тор:
Кросс-корреляция. Вычислять градиент на сетке удобно при помощи кросс-корреляции с ядрами. Для производной по можно использовать ядро
а для производной по
Тогда компоненты дискретного градиента для всей сетки можно вычислять так:
Кросс-корреляция 2D
Результатом кросс-корреляции матрицы с ядром
будет матрица , элементы
которого определяются как скалярное произведение фрагмента
массива
(окрестности
) с ядром
:
Значения на краях матрицы определяются в соответствии с заданными граничными условиями.
Так же для оценки частных производных можно воспользоваться ядрами Собеля. Такой подход обеспечивает дополнительное сглаживание и часто используется при обработке изображений.
Дивергенция
Пусть имеется векторное поле . Дивергенция в точке
– это скалярная величина, показывающая, является ли точка источником или стоком потока.
Непрерывный случай. Пусть задано векторное поле в двумерном евклидовом пространстве
Дивергенция этого поля
Дискретный случай. Для прямоугольной сетки, частные производные можно аппроксимировать центральными разностями, аналогично дискретному градиенту:
Дискретная дивергенция в клетке тогда задаётся как
Порядок погрешности для такой схемы – , как и у центральных разностей для первой производной.
Если сетка ограничена индексами и
, то необходимо задать граничные условия. Как и для скалярной функции, можно замкнуть её в тор, задав периодические условия для обеих компонент вектора:
Кросс-корреляция. Аналогично градиенту, удобно выразить дискретную дивергенцию через кросс-корреляцию с маленькими ядрами. Можно использовать те же ядра, что и для градиента. Ядро применяется к компоненте
, а ядро
применяется к
. Тогда дискретная дивергенция получается как сумма результатов:
Лапласиан
Пусть имеется скалярное поле . Лапласиан в точке
– это скаляр, показывающий, насколько значение функции в этой точке отличается от среднего в малой окрестности, т.е. степень ее локальной вогнутости или выпуклости. Если
, то функция выпукла вниз в точке
, а при
– выпукла вверх.
Непрерывный случай. В двумерном пространстве лапласиан скалярной функции определяется как дивергенция градиента:
Дискретный случай. Для прямоугольной сетки, частные производные можно аппроксимировать центральными разностями второго порядка:
Тогда дискретный лапласиан в точке можно будет представить в виде суммы:
В качестве граничных условий можно задать, к примеру, условия Дирихле, фон Неймана или замкнуть плоскость в тор.
Кросс-корреляция. Вычислять лапласиан на сетке удобно при помощи кросс-корреляции с ядром
Тогда значение дискретного лапласиана получается как результат кросс-корреляции матрицы
с ядром
в точке
с учётом выбранных граничных условий:
Симуляция диффузии на клеточном автомате

Классическое уравнение диффузии:
где – концентрация в точке
в момент
,
– коэффициент диффузии.
В двумерном случае , поэтому
Пусть имеется прямоугольная сетка с шагом . Лапласиан функции может быть вычислен через кросс-корреляцию:
где ядро
При этом, для каждой клетки на временно́м шаге
получим значение
Производную по времени заменяем разностью
При для каждой клетки
Получаем итерационную формулу
или через кросс-корреляцию
Код реализации на Python диффузии двух веществ на клеточном автомате есть на GitHub. Здесь я приведу содержательный фрагмент – определение функции, выполняющей шаг диффузии. Концентрация отдельного вещества в соответствующей клетке хранится в двумерном массиве u. На каждом шаге вычисляется дискретный лапласиан массива путем вычисления двумерной кросс-корреляции. Для этого используется функция correlate2d из модуля signal библиотеки scipy.
import numpyas np
from scipy.signal import correlate2d
def diffusion_step_box(u, D, kernel=None):
if kernel is None:
laplacian_kernel = np.array([
[0.0, 1.0, 0.0],
[1.0, -4.0, 1.0],
[0.0, 1.0, 0.0]
], dtype=float)
laplacian = correlate2d(u, laplacian_kernel,
mode='same', # размер выхода = размер входа
boundary='symm') # зеркальное продолжение (Neumann)
return u + D * laplacian
Заключение
Здесь были рассмотрены лишь базовые дифференциальные операторы и простые ядра. Но если уловить суть, то остальное можно оперативно разобрать при необходимости. Для каждого оператора существуют множество вариантов ядер, причем различных размеров. Чаще, это квадратные матрицы с нечетным числом рядов и колонок, но в общем случае, применяются и прямоугольные матрицы.