Существует два общих подхода для памяти управления при решении большинства задач, поддержанных механизмом 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 базисе. Однако могут быть допустимые причины выборки точных решений в близко расположенных интервалах, таких как оценка зависимых от предшествующего пути развития опций.
sde
| bm
| gbm
| merton
| bates
| drift
| diffusion
| sdeddo
| sdeld
| cev
| cir
| heston
| hwv
| sdemrd
| ts2func
| simulate
| simByEuler
| interpolate
| simByQuadExp
| simBySolution
| simBySolution