Аппроксимирующее решение стохастического интеграла

Я пытаюсь приблизить решение к:

где а также для обеих сторон этого уравнения.

Мой код для левой стороны:

N = 2000;  Tend = 2*pi;  dt = Tend/N;  t = 0:dt:Tend;
f = sin(t)*sqrt(dt);
f = [0 ff(1:end-1)];
[fL,junk] = meshgrid(f,1);
dW = cumsum([0 randn(1,N)].*fL,2);

но я не могу понять правую сторону, что намного сложнее. Кто-нибудь может помочь?

1 ответ

Это больше похоже на формулу частичной интеграции или эквивалент продукта правилу

(f*b)'=f'*b+f*b' or
d(f*b)=df*b+f*db = f'*b*dt+f*db

дифференцирования, чем любое стохастическое дифференциальное уравнение. В этом смысле там нечего решать, кроме случаев, когда вы хотите численно проверить действительность правила с помощью b Быть винерским процессом.

Или вы хотите проверить ошибку численных методов. Но тогда первым шагом должно стать определение численного метода, который представляется методом Эйлера или Эйлера-Маруямы.

См. Википедию: метод Эйлера-Маруямы, википедию: метод Мильштейна и очень удобочитаемый П. Форсайт: введение в вычислительные финансы без мучительной боли.


Для процесса Винера b вам нужно будет сохранить массив приращений db=randn(1,N)*sqrt(dt) (и держать корень вне f=sin(t)). Тогда левая часть является суммой f.*db и для правой стороны вам понадобится массив частичных сумм по dbкоторый в теории должен быть вычислен как

b(i+1)=b(i)+db(i)

Использование более целесообразной функции Matlab

b = cumsum(db)

даст вам сдвинутую версию, где b(i)=b(i-1)+db(i), В общей сложности картина, это смещение может привести к ошибке величины sqrt(dt) что было бы важно, только если вы хотите ограничить ошибку величиной dt,

После этой операции условия справа f(N)*b(N)-f(0)*b(0) и сумма более cos(t(i))*b(t(i))*dt(i), i=0,...,N-1,

Таким образом вы сравниваете слева

cumsum(sin(t).*db)

и справа

sin(t).*b - cumsum(cos(t).*b).*dt

и это должно дать почти идентичные значения.

В двоюродном брате matlab следующий скрипт дает совершенно совпадающие результаты:

N=6000; dt=2*%pi/N;

t=0:1:N; t=t*dt;

dW=rand(t,"normal")*sqrt(dt);
W = cumsum(dW);

f=sin(t); fp=cos(t);

ex1=cumsum(f.*dW);
ex2=f.*W;
ex3=cumsum(fp.*W).*dt;

clf;
subplot(211);
plot(t+5*dt,ex1,t,ex2-ex3)
subplot(212);
plot(t,ex2-ex1-ex3)

Идентичность можно увидеть также непосредственно в дискретизации путем применения сдвигов индекса. настройка b=cumsum(db), f=sin(t) а также fp(t)=cos(t) производная, элемент n из cumsum(f.*db) является и преобразуется как:

sum(i=1..n) f(i)*db(i) = sum(i=1..n) f(i)*(b(i)-b(i-1))

= -f(1)*b(0)+sum(i=1..n) (f(i)-f(i+1))*b(i) + f(n+1)*b(n)

= f(n)*b(n) - sum(i=1..n) fp(i)*b(i)*dt 
    + (f(n+1)-f(n))*b(n) - sum(i=1..n) (f(i+1)-f(i)-fp(i)*dt)*b(i)

с виртуальным значением b(0)=0, Следующая за последней строкой содержит nй элемент f.*b-cumsum(fp.*b)*dt и последняя строка ошибки условия дискретизации, с величинами dt а также (t(n)-t(1))*dt,

Другие вопросы по тегам