Существует два общих подхода к управлению памятью при решении большинства задач, поддерживаемых механизмом SDE:
Выполните традиционное моделирование для моделирования базовых переменных, представляющих интерес, в частности запрашивая и затем манипулируя выходными массивами.
Этот подход является простым и наилучшим выбором для малых или средних проблем. Так как его выходами являются массивы, удобно манипулировать моделируемыми результатами на языке MATLAB ® matrix-based. Однако по мере увеличения масштаба проблемы преимущество этого подхода уменьшается, поскольку выходные массивы должны хранить большие количества, возможно, посторонней информации .
Например, рассмотрим ценообразование европейского опциона, в котором цена терминала базового актива является единственной стоимостью процентов. Чтобы облегчить нагрузку на память традиционного подхода, уменьшите количество моделируемых периодов, указанных требуемым вводом NPeriods и укажите необязательный ввод NSteps. Это позволяет управлять памятью без ущерба для точности (см. раздел Оптимизация точности: о точности решения и ошибке).
Кроме того, методы моделирования могут определять количество выходных аргументов и соответственно выделять память. В частности, все методы моделирования поддерживают один и тот же список выходных аргументов:
[Paths,Times,Z]
где Paths и Z могут быть большими, трехмерными массивами временных рядов. Однако основная матрица шумов обычно не нужна и сохраняется только при запросе в качестве выходного сигнала. Другими словами, Z хранится только по вашему запросу; не запрашивайте его, если он вам не нужен.
Если требуется массив выходных шумов Z, но не нужно Paths массив временных рядов, то вы можете избежать хранения Paths два пути:
Рекомендуется использовать ~ местозаполнитель выходного аргумента. Например, используйте следующий список выходных аргументов для хранения Z и Times, но не Paths:
[~,Times,Z]
Использовать дополнительный флаг ввода StorePaths, которые поддерживают все методы моделирования. По умолчанию Paths хранится (StorePaths = true). Однако настройка StorePaths кому false прибыль Paths в виде пустой матрицы.
Укажите одну или несколько функций обработки на конец периода для управления и хранения только интересующей информации, избегая при этом результатов моделирования.
Этот подход требует указания одной или нескольких функций обработки на конец периода и часто является предпочтительным подходом для крупномасштабных проблем. Этот подход позволяет полностью избежать результатов моделирования. Поскольку выходные данные не запрашиваются, массивы трехмерных временных рядов Paths и Z не хранятся.
Этот подход часто требует больших усилий, но является гораздо более элегантным и позволяет настраивать задачи и значительно сокращать использование памяти. См. раздел Опционы на стоимость собственного капитала.
Следующие подходы повышают производительность при решении задач SDE:
Задание параметров модели в качестве традиционных массивов и функций MATLAB в различных комбинациях. Это обеспечивает гибкий интерфейс, который может поддерживать практически любые общие нелинейные отношения. Однако, хотя функции предлагают удобное и элегантное решение для многих проблем, моделирование обычно выполняется быстрее, когда параметры задаются как векторы или матрицы с двойной точностью. Таким образом, рекомендуется указывать параметры модели как массивы, когда это возможно.
По возможности используйте модели, перегруженные методами моделирования Эйлера. Использование броуновского движения (BM) и геометрическое броуновское движение (GBM) модели, которые предоставляют перегруженные методы моделирования Эйлера, используют преимущества разделяемых моделей с постоянными параметрами. Эти специализированные методы являются исключительно быстрыми, но доступны только для моделей с постоянными параметрами, которые моделируются без указания функций обработки в конце периода и генерации шума.
Замените моделирование одномерной модели с постоянным параметром, полученной из SDEDDO с помощью класса диагональной многомерной модели. Рассматривайте многомерную модель как портфель одномерных моделей. Это увеличивает размерность модели и повышает производительность за счет уменьшения эффективного числа имитационных испытаний.
Примечание
Этот метод применим только к одномерным моделям с постоянным параметром без указания функций обработки в конце периода и генерации шума.
Используйте тот факт, что методы моделирования предназначены для обнаружения присутствия NaN (не число) условий, возвращенных функциями обработки по окончании периода. A NaN представляет результат неопределенного численного расчета и любого последующего расчета на основе NaN производит другой NaN. Это помогает повысить производительность в определенных ситуациях. Например, следует рассмотреть возможность моделирования путей нижнего предела опциона на барьер выбивания (то есть опциона, который становится бесполезным, когда цена базового актива пересекает некоторый предписанный барьер). Ваша функция окончания периода может обнаружить пересечение барьера и вернуть NaN сигнализировать о досрочном прекращении текущего испытания.
Архитектура моделирования, в общем, не моделирует точные решения для любого SDE. Вместо этого архитектура моделирования обеспечивает дискретное временное приближение основного непрерывного временного процесса, метод моделирования, часто известный как аппроксимация Эйлера.
В наиболее общем случае данное моделирование происходит непосредственно от SDE. Поэтому моделируемый процесс дискретного времени приближается к лежащему в основе процессу непрерывного времени только в пределе, когда приращение времени dt приближается к нулю. Другими словами, архитектура моделирования придает большее значение обеспечению того, чтобы распределения вероятности процессов дискретного времени и непрерывного времени были близкими, чем на пути близости процессов.
Прежде чем проиллюстрировать методы для улучшения аппроксимации решений, полезно понять источник ошибки. В этой архитектуре все методы моделирования предполагают, что параметры модели являются кусочно постоянными в течение любого временного интервала длины dt. Фактически, методы даже оценивают динамические параметры в начале каждого временного интервала и удерживают их фиксированными на протяжении интервала. Этот подход выборки вносит ошибку дискретизации.
Однако существуют некоторые модели, для которых кусочно-постоянный подход обеспечивает точные решения:
Создание моделей броуновского движения (BM) с постоянными параметрами, моделируемыми аппроксимацией Эйлера (simByEuler).
Создание моделей геометрического броуновского движения (GBM) с постоянными параметрами, моделируемыми решением закрытой формы (simBySolution).
Создание гауссовых диффузионных моделей Халл-Уайт/Васичек (HWV) с постоянными параметрами, моделируемыми решением закрытой формы (simBySolution)
В более общем случае можно смоделировать точные решения для этих моделей, даже если параметры изменяются со временем, если они изменяются кусочно-постоянным образом, так что изменения параметров совпадают с заданными временами выборки. Однако такое точное совпадение маловероятно; поэтому ранее обсуждавшееся условие постоянного параметра обычно используется на практике.
Одним из очевидных способов повышения точности является более частая выборка процесса дискретного времени. Это уменьшает приращение времени (dt), заставляя дискретизированный процесс более близко приближаться к лежащему в основе непрерывному процессу времени. Хотя уменьшение временного приращения является универсальным, существует компромисс между точностью, производительностью во время выполнения и использованием памяти.
Для управления этим компромиссом укажите необязательный входной аргумент, NSteps, для всех методов моделирования. NSteps указывает количество промежуточных временных шагов в пределах каждого временного приращения dt, при котором производится выборка процесса, но не сообщается.
На данном этапе важно и удобно подчеркнуть взаимосвязь входных данных. NSteps, NPeriods, и DeltaTime к выходному вектору Times, которая представляет фактическое время наблюдения, в течение которого сообщается о моделируемых трактах.
NPeriods, требуемый ввод, указывает количество периодов моделирования длины DeltaTimeи определяет количество строк в моделируемой трехмерной 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 с постоянными параметрами:
4XtdWt.
Предположим, что ожидаемая норма прибыли и параметры волатильности пересчитаны в годовом исчислении и что календарный год включает 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.
Кроме того, поскольку ранее смоделированные точные решения являются правильными для любого числа промежуточных временных шагов, дополнительные вычисления для этого примера не требуются. На самом деле эта оценка верна. Точные решения отбираются в промежуточное время, чтобы гарантировать, что моделирование использует одну и ту же последовательность гауссовых случайных вариаций в одном и том же порядке. Без этой гарантии невозможно сравнивать смоделированные цены на поэтапной основе. Однако могут быть веские причины для выборки точных решений через близко расположенные интервалы, такие как варианты, зависящие от пути ценообразования.
bates | bm | cev | cir | diffusion | drift | gbm | heston | hwv | interpolate | merton | sde | sdeddo | sdeld | sdemrd | simByEuler | simByQuadExp | simBySolution | simBySolution | simulate | ts2func