Я занимаюсь исчислением Ито в Maple. Если B__t
является стандартным броуновским движением, справедливы следующие результаты:
dB__t*dt = 0;
dB__t^2 = dt;
dt^2 = 0;
Теперь, когда я хочу выполнить задание:
dB__t*dt := 0;
dB__t^2 := dt;
dt^2 := 0;
Я получаю сообщение об ошибке Error, illegal use of an object as a name
. Зачем нужны вышеперечисленные задания? Предположим, у меня есть:
Y__t := ln(1/X__t - 1);
dX__t := 0.5*X__t(-X__t + 1)*(-2*X__t + 1)*dt - X__t*(-X__t + 1)*dB__t;
Применяя лемму Ито к Y__t
:
dY__t := diff(Y__t, t)*dt + diff(Y__t, X__t)*dX__t + 0.5*diff(Y__t, X__t, X__t)*dX__t^2
и расширяем и упрощаем, используя:
dY__t := simplify(expand(dY__t))
дает:
Теперь, когда у меня есть расширенное выражение dY__t
, я хочу заменить dt*dB__t
, dB__t*dt
и dt^2
нулем и заменить dB__t^2
на dt
. Как мне это сделать?
Вот два способа сделать такие замены (с некоторыми упрощениями):
restart;
Y__t:=ln(1/X__t-1):
dX__t:=1/2*X__t*(-X__t+1)*(-2*X__t+1)*dt-X__t*(-X__t+1)*dB__t:
dY__t:= diff(Y__t,t)*dt + diff(Y__t,X__t)*dX__t+diff(Y__t,X__t,X__t)*dX__t^2:
Первый способ,
simplify(dY__t,{dB__t*dt=0});
simplify(%,{dB__t^2=dt});
simplify(%,{dt^2=0});
Второй способ,
simplify(algsubs(dB__t*dt=0,expand(dY__t)));
simplify(algsubs(dB__t^2=dt,%));
simplify(algsubs(dt^2=0,%));
Я не понимаю, как это последующее утверждение в вашем комментарии может быть правдой, учитывая тот же набор замен, который вы дали изначально.
Вы очень правы @acer. Я допустил ошибку в написании выражения dY__t := diff(Y__t, t)*dt + diff(Y__t, X__t)*dX__t + diff(Y__t, X__t, X__t)*dX__t^2
. Я исправил выражение наdY__t := diff(Y__t, t)*dt + diff(Y__t, X__t)*dX__t + 0.5*diff(Y__t, X__t, X__t)*dX__t^2
. Пожалуйста, проверьте мое обновленное выражение. Полученный ответ является правильным, но не в его простейшей форме. Самая простая форма — dY__t = dB__t
.
Полученный ответ является правильным, но не в его простейшей форме при использовании Первого способа. Самая простая форма — dY__t = dB__t
. Однако я могу подтвердить, что второй способ дает правильный ответ в его простейшей форме. Я предпочитаю первый способ, хотя он не упрощает ответ.
Для меня я получаю форму, просто dB__t
используя оба способа. Если вы не можете напрямую получить простейший for из третьего simplify(...,{...})
(упростить с помощью побочных отношений) в первом методе, возможно, вам придется использовать только simplify(%)
. У меня оба работают напрямую с Maple 2024.0, Maple 16.02 и т. д. Я не знаю, какая у вас версия.
Большое спасибо за помощь. Проблема решена. И первый, и второй способ дают ответ простейшей формы. Я принял ответ.
Большое спасибо @acer. Решение сработало отлично. Однако функция
simplify
не упрощаетdY__t
до простейшей формы. Полученное выражение является правильным, но не упрощенным. Самая простая форма —dY__t = dB__t
. Есть ли способ упростить полученное выражение до его простейшей формы?