Существует два общих подхода для памяти управления при решении большинства проблем, поддержанных механизмом SDE:
Выполните традиционную симуляцию, чтобы моделировать основные переменные интереса, в частности запросив и затем управляя выходными массивами.
Этот подход является прямым и лучший выбор для небольших или проблем среднего размера. Поскольку его выходные параметры являются массивами, удобно управлять моделируемыми результатами в MATLAB® матричный язык. Однако когда шкала проблемы увеличивается, уменьшения преимущества этого подхода, потому что выходные массивы должны сохранить большие количества возможно посторонней информации.
Например, рассмотрите оценку европейской опции, в которой терминальная цена базового актива является единственным значением интереса. Чтобы упростить нагрузку памяти традиционного подхода, сократите количество моделируемых периодов, заданных необходимым входом NPERIODS
, и задайте дополнительный вход NSTEPS
. Это позволяет вам управлять памятью, не жертвуя точностью (см. Точность Оптимизации: О Точности Решения и Ошибке).
Кроме того, методы симуляции могут определить количество выходных аргументов и выделить память соответственно. А именно, все методы симуляции поддерживают тот же список выходных аргументов:
[Paths,Times,Z]
где Paths
и Z
могут быть большими, 3D массивами временных рядов. Однако базовый шумовой массив является обычно ненужным, и только хранится, если требуется как вывод. Другими словами, Z
хранится только по вашему запросу; не запрашивайте его, если вам не нужен он.
Если вы нуждаетесь в выходном массиве шума Z
, но не нуждаетесь в массиве временных рядов Paths
, то можно постараться не хранить Paths
два пути:
Это - лучшая практика использовать заполнителя выходного аргумента ~
. Например, используйте следующий список выходных аргументов, чтобы сохранить Z
и Times
, но не Paths
:
[~,Times,Z]
Используйте дополнительный входной флаг StorePaths
, который поддерживают все методы симуляции. По умолчанию Paths
хранится (StorePaths
= true
). Однако установка StorePaths
к false
возвращает Paths
как пустую матрицу.
Задайте одну или несколько функций обработки конца периода, чтобы управлять и хранить только информацию интереса, избежав симуляции выходные параметры в целом.
Этот подход требует, чтобы вы задали одну или несколько функций обработки конца периода и часто является предпочтительным подходом для крупномасштабных проблем. Этот подход позволяет вам избегать симуляции выходные параметры в целом. Поскольку никакие выходные параметры не требуют, 3D массивы временных рядов, Paths
и Z
не хранятся.
Этот подход часто требует большего усилия, но намного более изящен и позволяет вам настраивать задачи и существенно уменьшать использование памяти. См. Опции Акции Оценки.
Следующие подходы улучшают производительность при решении проблем SDE:
Определение параметров модели как традиционные массивы MATLAB и функции, в различных комбинациях. Это обеспечивает гибкий интерфейс, который может поддержать фактически любое общее нелинейное отношение. Однако, в то время как функции предлагают удобное и изящное решение для многих проблем, симуляции, обычно запущенные быстрее, когда вы задаете параметры как векторы с двойной точностью или матрицы. Таким образом это - хорошая практика, чтобы задать параметры модели как массивы, если это возможно.
Используйте модели, которые перегрузили Эйлеровы методы симуляции, если это возможно. Используя Броуновское движение (BM
) и модели (GBM
) геометрического броуновского движения, которые предоставляют перегруженные Эйлеровы методы симуляции, используют в своих интересах отделимый, модели постоянного параметра. Эти специальные методы исключительно быстры, но только доступны моделям с постоянными параметрами, которые моделируются, не задавая обработку конца периода и шумовые функции генерации.
Замените симуляцию постоянного параметра, одномерная модель, выведенная от класса SDEDDO
с той из диагональной многомерной модели. Обработайте многомерную модель как портфель одномерных моделей. Это увеличивает размерность модели и улучшает производительность путем сокращения эффективного числа испытаний симуляции.
Этот метод применим только к постоянному параметру одномерные модели, не задавая обработку конца периода и шумовые функции генерации.
Используйте в своих интересах то, что методы симуляции разработаны, чтобы обнаружить присутствие NaN
(не номер) условия, возвращенные в функции обработки конца периода. NaN
представляет результат неопределенного числового вычисления, и любое последующее вычисление на основе NaN
производит другой NaN
. Это помогает улучшать производительность в определенных ситуациях. Например, рассмотрите пути к симуляции underlier барьерного опциона нокаута (то есть, опция, которая становится бесполезной, когда цена базового актива пересекает некоторый предписанный барьер). Ваша функция конца периода могла обнаружить пересечение барьера и возвратить NaN
, чтобы сигнализировать о раннем завершении текущего испытания.
Архитектура симуляции, в целом, не моделирует точные решения никакого SDE. Вместо этого архитектура симуляции обеспечивает приближение дискретного времени базового непрерывно-разового процесса, метод симуляции, часто известный как Эйлерово приближение.
В наиболее общем случае данная симуляция выводит непосредственно от SDE. Поэтому моделируемый процесс дискретного времени приближается к базовому непрерывно-разовому процессу только в пределе, когда время постепенно увеличивает нуль подходов dt. Другими словами, архитектура симуляции помещает больше важности в обеспечение, что распределения вероятностей дискретного времени и непрерывно-разовые процессы близки, чем на pathwise близости процессов.
Прежде, чем проиллюстрировать методы, чтобы улучшить приближение решений, полезно понять источник ошибки. В этой архитектуре все методы симуляции принимают, что параметры модели являются кусочной константой по любому временному интервалу длины dt. На самом деле методы даже оценивают динамические параметры в начале каждого временного интервала и содержат их зафиксированный на время интервала. Этот подход выборки вводит ошибку дискретизации.
Однако существуют определенные модели, для которых кусочный постоянный подход предоставляет точные решения:
Создание Моделей Броуновского движения (BM) с постоянными параметрами, моделируемыми Эйлеровым приближением (simByEuler
).
Создание Моделей Геометрического броуновского движения (GBM) с постоянными параметрами, моделируемыми решением закрытой формы (simBySolution
).
Создание Hull-White/Vasicek (HWV) Гауссовы Модели Диффузии с постоянными параметрами, моделируемыми решением закрытой формы (simBySolution
)
В более общем плане можно моделировать точные решения для этих моделей, даже если параметры меняются в зависимости от времени, если они отличаются кусочным постоянным способом, таким образом, что изменения параметра совпадают с заданным временем выборки. Однако такое точное совпадение маловероятно; поэтому, ранее обсужденное постоянное условие параметра обычно используется на практике.
Один очевидный способ улучшить точность включает выборку процесса дискретного времени более часто. Это уменьшает шаг времени (dt), заставляя выбранный процесс более тесно аппроксимировать базовый непрерывно-разовый процесс. Несмотря на то, что уменьшение шага времени универсально применимо, однако, существует компромисс среди точности, производительности во время выполнения и использования памяти.
Чтобы управлять этим компромиссом, задайте дополнительный входной параметр, NSTEPS
, для всех методов симуляции. NSTEPS
указывает, что количество промежуточных временных шагов в течение каждого раза постепенно увеличивает dt, в котором процесс выбирают, но не сообщают.
Это важно и удобно в этой точке подчеркнуть отношение входных параметров NSTEPS
, NPERIODS
и DeltaTime
к выходному вектору Times
, который представляет фактические времена наблюдения, в которые сообщают о моделируемых путях.
NPERIODS
, необходимый вход, указывает на количество периодов симуляции длины DeltaTime
и определяет количество строк в моделируемом 3D массиве временных рядов Paths
(если вывод требуют).
DeltaTime
является дополнительным, и указывает на соответствующий NPERIODS
- вектор длины положительного шага времени между последовательными выборками. Это представляет знакомый dt, найденный в стохастических дифференциальных уравнениях. Если DeltaTime
не задан, значение по умолчанию 1 используется.
NSTEPS
является также дополнительным, и только свободно связан с NPERIODS
и DeltaTime
. NSTEPS
указывает, что количество промежуточных временных шагов в течение каждого раза постепенно увеличивает DeltaTime
.
А именно, каждый раз постепенно увеличиваются, DeltaTime
разделен на подынтервалы NSTEPS
длины DeltaTime
/NSTEPS
каждый и совершенствовал симуляцию путем оценки моделируемого вектора состояния в промежуточные времена (NSTEPS - 1)
. Несмотря на то, что о векторе состояния вывода (если требуется) не сообщают в эти промежуточные времена, это улучшение улучшает точность, заставляя симуляцию более тесно аппроксимировать базовый непрерывно-разовый процесс. Если NSTEPS
не задан, значением по умолчанию является 1
(чтобы не указать ни на какую промежуточную оценку).
Выводом Times
является NPERIODS + 1
- вектор-столбец длины времен наблюдения, сопоставленных с моделируемыми путями. Каждый элемент Times
сопоставлен с соответствующей строкой Paths
.
Следующий пример иллюстрирует эту промежуточную выборку путем сравнения различия между решением закрытой формы и последовательностью Эйлеровых приближений, выведенных от различных значений NSTEPS
.
Рассмотрите одномерную модель (GBM
) геометрического броуновского движения с помощью gbm
с постоянными параметрами:
Примите, что ожидаемая норма прибыли и параметры энергозависимости пересчитаны на год, и что календарный год включает 250 торговых дней.
Моделируйте приблизительно четыре года одномерных цен за точное решение и за Эйлерово приближение для различных значений NSTEPS
:
nPeriods = 1000; dt = 1/250; obj = gbm(0.1,0.4,'StartState',100); rng(575,'twister') [X1,T1] = simBySolution(obj,nPeriods,'DeltaTime',dt); rng(575,'twister') [Y1,T1] = simByEuler(obj,nPeriods,'DeltaTime',dt); rng(575,'twister') [X2,T2] = simBySolution(obj,nPeriods,'DeltaTime',... dt,'nSteps',2); rng(575,'twister') [Y2,T2] = simByEuler(obj,nPeriods,'DeltaTime',... dt,'nSteps',2); rng(575,'twister') [X3,T3] = simBySolution(obj,nPeriods, 'DeltaTime',... dt,'nSteps',10); rng(575,'twister') [Y3,T3] = simByEuler(obj,nPeriods,'DeltaTime',... dt,'nSteps',10); rng(575,'twister') [X4,T4] = simBySolution(obj,nPeriods,'DeltaTime',... dt,'nSteps',100); rng(575,'twister') [Y4,T4] = simByEuler(obj,nPeriods,'DeltaTime',... dt,'nSteps',100);
Сравните ошибку (различие между точным решением и Эйлеровым приближением) графически:
clf; plot(T1,X1 - Y1,'red') hold on; plot(T2,X2 - Y2,'blue') plot(T3,X3 - Y3,'green') plot(T4,X4 - Y4,'black') hold off xlabel('Time (Years)') ylabel('Price Difference') title('Exact Solution Minus Euler Approximation') legend({'# of Steps = 1' '# of Steps = 2' ... '# of Steps = 10' '# of Steps = 100'},... 'Location', 'Best') hold off
whos T X Y
Как ожидалось ошибка симуляции уменьшается как количество промежуточных увеличений временных шагов. Поскольку о промежуточных состояниях не сообщают, все моделируемые временные ряды имеют то же количество наблюдений независимо от фактического значения NSTEPS
.
Кроме того, поскольку ранее моделируемые точные решения правильны для любого количества промежуточных временных шагов, дополнительные вычисления не нужны для этого примера. На самом деле эта оценка правильна. Точные решения выбираются в промежуточные времена, чтобы гарантировать, что симуляция использует ту же последовательность Гауссовых случайных варьируемых величин в том же порядке. Без этого обеспечения нет никакого способа сравнить моделируемые цены на pathwise основе. Однако могут быть допустимые причины выборки точных решений в близко расположенных интервалах, таких как оценка зависимых от предшествующего пути развития опций.
bm
| cev
| cir
| diffusion
| drift
| gbm
| heston
| hwv
| interpolate
| sde
| sdeddo
| sdeld
| sdemrd
| simByEuler
| simBySolution
| simBySolution
| simulate
| ts2func