طريقة أويلر-ماروياما

في حساب التفاضل والتكامل، تعد طريقة أويلر-ماروياما (وتسمى أيضًا طريقة أويلر) طريقة للتحليل العددي التقريبي لمعادلة تفاضلية عشوائية (SDE). إنه تعميم بسيط لطريقة أويلر للمعادلات التفاضلية العادية إلى المعادلات التفاضلية العشوائية. سميت بعد ليونارد أويلر وجيزيرو ماروياما . لسوء الحظ، لا يمكن إجراء نفس التعميم لأي طريقة حتمية اعتباطية.[1]

خذ المعادلة التفاضلية العشوائية (انظر حساب التفاضل والتكامل )

مع الحالة الأولية X 0   =   x 0 ، حيث تشير W t إلى عملية فينر ، ونفترض أننا نرغب في حل المعادلة التفاضلية العشوائية هذه في فترة زمنية معينة [0 ،   T ]. ثم تقريب أويلر-ماروياما للحل الحقيقي X هو سلسلة ماركوف Y المحددة على النحو التالي:

  • تقسيم الفاصل الزمني [0 ،   T ] إلى N فترات زمنية فرعية متساوية للعرض  :
  • ضع Y 0   =   × 0 ؛
  • حدد بشكل متكرر Y n لـ بواسطة
حيث

المتغيرات العشوائية Δ W n مستقلة ومتوزعة بشكل عشوائي مع القيمة المتوقعة صفر والتباين .

مثال[عدل]

محاكاة رقمية[عدل]

التعبير الجيني كعملية عشوائية

المجال الذي استفاد بشكل كبير من المعادلات التفاضلية العشوائية هو علم الأحياء أو علم الأحياء الرياضي بشكل أكثر دقة. هنا نما عدد المنشورات حول استخدام النموذج العشوائي ، حيث أن معظم النماذج غير خطية ، تتطلب مخططات عددية.

يصور الرسم معادلة تفاضلية عشوائية يتم حلها باستخدام مخطط أويلر. يتم عرض النظير الحتمية كذلك.

تطبيق الكمبيوتر[عدل]

يطبق كود بايثون التالي طريقة أويلر-ماروياما ويستخدمها لحل عملية أورنستين-أولينبيك المحددة بواسطة

الأرقام العشوائية لـ يتم إنشاؤها باستخدام حزمة الرياضيات نمباي.

# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt  num_sims = 5 # Display five runs  t_init = 3 t_end = 7 N = 1000 # Compute 1000 grid points dt = float(t_end - t_init) / N y_init = 0  c_theta = 0.7 c_mu = 1.5 c_sigma = 0.06  def mu(y, t):     """Implement the Ornstein–Uhlenbeck mu."""  # = \theta (\mu-Y_t)     return c_theta * (c_mu - y)  def sigma(y, t):     """Implement the Ornstein–Uhlenbeck sigma."""  # = \sigma     return c_sigma  def dW(delta_t):     """Sample a random number at each call."""     return np.random.normal(loc=0.0, scale=np.sqrt(delta_t))  ts = np.arange(t_init, t_end, dt) ys = np.zeros(N)  ys[0] = y_init  for _ in range(num_sims):     for i in range(1, ts.size):         t = (i-1) * dt         y = ys[i-1]         ys[i] = y + mu(y, t) * dt + sigma(y, t) * dW(dt)     plt.plot(ts, ys)  plt.show() 

ما يلي هو ببساطة ترجمة الرمز أعلاه إلى لغة برمجة ماتلاب:

%% Initialization and Utility close all; clear all;  numSims = 5; % display five runs tBounds = [3 7]; % The bounds of t N = 1000; % Compute 1000 grid points dt = (tBounds(2) - tBounds(1)) / N ; y_init = 1; % Initial y condition  pd = makedist('Normal',0,sqrt(dt)); % Initialize the probability distribution for our                          % random variable with mean 0 and                           % stdev of sqrt(dt)  c = [0.7, 1.5, 0.06]; % the initial Theta, Mu, and Sigma, respectively  ts = linspace(tBounds(1), tBounds(2), N); % From t0-->t1 with N points ys = zeros(1,N); % 1xN Matrix of zeros  ys(1) = y_init; %% Computing the Process for j = 1:numSims     for i = 2:numel(ts)         t = (i-1) .* dt;         y = ys(i-1);         mu      = c(1) .* (c(2) - y);         sigma   = c(3);         dW      = random(pd);                  ys(i) = y + mu .* dt + sigma .* dW;     end     figure(69)     hold on;     plot(ts, ys, 'o') end 

انظر أيضًا[عدل]

  • طريقة ميلستين
  • طريقة Runge – Kutta (SDE)

المراجع[عدل]

  1. ^ Kloeden, P.E.؛ Platen, E. (1992). Numerical Solution of Stochastic Differential Equations. Springer, Berlin. ISBN:3-540-54062-8. {{استشهاد بكتاب}}: الوسيط غير المعروف |last-author-amp= تم تجاهله يقترح استخدام |name-list-style= (مساعدة)