Метод Эйлера – Маруямы - Euler–Maruyama method

В Исчисление Ито, то Метод Эйлера – Маруямы (также называемый Метод Эйлера) - метод приближенного численное решение из стохастическое дифференциальное уравнение (SDE). Это простое обобщение Метод Эйлера за обыкновенные дифференциальные уравнения к стохастическим дифференциальным уравнениям. Он назван в честь Леонард Эйлер и Гисиро Маруяма. К сожалению, такое же обобщение нельзя сделать ни для какого произвольного детерминированного метода.[1]

Рассмотрим стохастическое дифференциальное уравнение (см. Исчисление Ито )

с начальное состояние Икс0 = Икс0, куда Wт стоит за Винеровский процесс, и предположим, что мы хотим решить это СДУ на некотором интервале времени [0,Т]. Тогда Приближение Эйлера – Маруямы к истинному решению Икс это Цепь Маркова Y определяется следующим образом:

  • разбить интервал [0,Т] в N равные подынтервалы ширины :
  • набор Y0 = Икс0;
  • рекурсивно определить Yп для 1 ≤п ≤ N к
куда

В случайные переменные ΔWп находятся независимые и одинаково распределенные нормальные случайные величины с ожидаемое значение ноль и отклонение .

Пример

Численное моделирование

Экспрессия генов моделируется как стохастический процесс

Область, которая получила значительную пользу от SDE, - это биология или, точнее, математическая биология. Здесь количество публикаций по использованию стохастической модели выросло, так как большинство моделей являются нелинейными, требующими численных схем.

На графике изображено стохастическое дифференциальное уравнение, решаемое с использованием схемы Эйлера. Также показан детерминированный аналог.

Компьютерная реализация

Следующее Python код реализует метод Эйлера – Маруямы и использует его для решения Процесс Орнштейна – Уленбека определяется

Случайные числа для генерируются с использованием NumPy пакет математики.

 1 # - * - кодировка: utf-8 - * - 2 импорт тупой в качестве нп 3 импорт matplotlib.pyplot в качестве plt 4  5 num_sims = 5  # Показать пять прогонов 6  7 t_init = 3 8 иметь тенденцию  = 7 9 N      = 1000  # Вычислить 1000 точек сетки10 dt     = плавать(иметь тенденцию - t_init) / N11 y_init = 012 13 c_theta = 0.714 c_mu    = 1.515 c_sigma = 0.0616 17 def му(у, т):18     "" "Внедрить" му "Орнштейна – Уленбека" ""  # =  тета ( му-Y_t)19     возвращаться c_theta * (c_mu - у)20 21 def сигма(у, т):22     "" "Реализуйте сигму Орнштейна – Уленбека." ""  # =  sigma23     возвращаться c_sigma24 25 def dW(delta_t):26     "" "Выбор случайного числа при каждом вызове." ""27     возвращаться нп.случайный.нормальный(место=0.0, шкала=нп.sqrt(delta_t))28 29 ts = нп.апельсин(t_init, иметь тенденцию + dt, dt)30 ys = нп.нули(N + 1)31 32 ys[0] = y_init33 34 за _ в классифицировать(num_sims):35     за я в классифицировать(1, ts.размер):36         т = (я - 1) * dt37         у = ys[я - 1]38         ys[я] = у + му(у, т) * dt + сигма(у, т) * dW(dt)39     plt.участок(ts, ys)40 41 plt.xlabel("время (а)")42 час = plt.ярлык("у")43 час.set_rotation(0)44 plt.Показать()

Пример Эйлера – Маруямы

Ниже приведен простой перевод приведенного выше кода в MATLAB (R2019b) язык программирования:

 1 %% Инициализация и утилита 2 Закрыть все; 3 Чисто все; 4  5 numSims = 5;            % отобразить пять прогонов 6 tBounds = [3 7];        % Границы t 7 N  = 1000;          % Вычислить 1000 точек сетки 8 dt  = (tBounds (2) - tBounds (1)) / N ; 9 y_init = 1;             % Начальное условие y 10 11 12 pd = македист('Нормальный',0,sqrt(dt)); % Инициализировать распределение вероятностей для нашего 13                          % случайной величины со средним 0 и 14                          % stdev из sqrt (dt)15 16 c = [0.7, 1.5, 0.06];   % начальные тета, му и сигма соответственно17 18 ts  = linspace (tBounds (1), tBounds (2), N); % От t0 до t1 с N точками19 ys  = нули (1, N);     % 1xN Матрица нулей20 21 ys(1) = y_init;22 %% Расчет процесса23 за j = 1:numSims24     за я = 2: число (ts)25         т = (я-1) .* dt;26         у = ys(я-1);27         му  = c (1). * (c (2) - y);28         сигма  = c (3);29         dW  = случайный (pd);30         31         ys(я) = у + му .* dt + сигма .* dW;32     конец33 фигура()34     держать на;35     участок(ts, ys, 'о')36 конец

Смотрите также

Рекомендации

  1. ^ Kloeden, P.E. И Платен, Э. (1992). Численное решение стохастических дифференциальных уравнений.. Спрингер, Берлин. ISBN  3-540-54062-8.