Дифузійні реакції (реакції з дифузією)

Реакції з дифузією дуже широко використовуються в комп'ютерній графіці і інших областях. Однак, знайти по ним інформацію (особливо російською мовою) досить складно. Всі джерела або зосереджуються на хімічних аспектах (а вони вельми мудрі), або висвітлюють питання дуже поверхнево.

Тут я хочу привести працює, закінчений шматок коду, яким можна погратися. Крім того, реалізація алгоритмів реакцій з дифузією дозволяє показати все міць numpy.

трохи теорії

Ми будемо розглядати дуже просту модель (найпростішу). У ній є кілька спрощень, що роблять її не надто фізична, але сильно спрощують всі викладки.

  • Ми будемо розглядати суміш двох речовин. Концентрації ми позначимо A і B.
  • Для кожної речовини ми введемо коефіцієнт дифузії.
  • Введемо правило: якщо зустрічаються три молекули B-B-A, то відбувається реакція і A перетворюється в B (отримуємо B-B-B).
  • Відтік A і приплив B ми будемо компенсувати штучними складовими в формулах.

Математично це можна записати так:

Ці вирази описують, як зміняться A і B через час dt:

  • Перший доданок: дифузія
  • Друге: ймовірність зустрічі B-B-A (не зовсім строго, але прийнятно)
  • Третє: штучний відтік і приплив

Зверніть увагу, що щоб реалізувати той алгоритм нам знадобилося б чотири вкладених циклу (два - для обходу матриць з густиною, два - для обчислення Лапласіан). Numpy дозволило не писати жодного з них.

І звичайно, numpy дозволяє в десятки (а то і сотні) разів підняти продуктивність. Тут ми створюємо 300 кадрів з кроком в 50 ітерацій між кадрами. Це 15000 ітерацій і вони виконуються за лічені секунди!

Відштовхнувшись від цього коду, ви можете самостійно погратися з різними значеннями параметрів. Коефіцієнти дифузії не сильно впливають на картину. Вони впливають на розмір елементів візерунка. А ось K і F впливають дуже сильно. Спробуйте трохи їх поміняти і ви побачите, як зміниться картина.

Схожі статті