SimBiology® использует AbsoluteTolerance
и RelativeTolerance
для управления точностью интегрирования во время симуляции. В частности, AbsoluteTolerance
используется для управления наибольшей допустимой абсолютной ошибкой на любом шаге во время симуляции. Он управляет ошибкой, когда решение маленькое. Интуитивно, когда решение приближается к 0, AbsoluteTolerance
- порог, ниже которого вы не беспокоитесь о точности решения, поскольку это эффективно 0. RelativeTolerance
управляет относительная погрешность одного шага интегратора. Интуитивно он управляет количеством значащих цифр в решении, кроме тех случаев, когда это меньше, чем абсолютная погрешность, и - количество правильных цифр.
На каждом шаге симуляции i
решатель оценивает локальную ошибку e
в состоянии j
симуляции. Решатель уменьшает размер временного шага i
пока ошибка состояния не удовлетворяет:
Таким образом, при значениях состояний большей величины точность определяется RelativeTolerance
. Когда значения состояний приближаются к нулю, точностью управляют AbsoluteTolerance
.
Правильный выбор значений для RelativeTolerance
и AbsoluteTolerance
изменяется в зависимости от задачи. Значения по умолчанию могут работать для первых испытаний симуляции. Когда вы корректируете допуски, примите во внимание, что существуют компромиссы между скоростью и точностью:
Если симуляция занимает слишком много времени, можно увеличить (или ослабить) значения RelativeTolerance
и AbsoluteTolerance
ценой некоторой точности.
Если результаты кажутся неточными, можно уменьшить (или ужесточить) относительные значения относительной погрешности путем деления на 10N, где N - действительное положительное число. Но это имеет тенденцию тормозить решатель.
Если величина значений состояния высока, можно уменьшить относительную погрешность, чтобы получить более точные результаты.
Как SimBiology использует AbsoluteTolerance
определение ошибки зависит от того, AbsoluteToleranceScaling
свойство включено. По умолчанию AbsoluteToleranceScaling
активизируется, что означает, что каждое состояние имеет свою абсолютную погрешность, который может увеличиться в течение симуляции:
CSAbsTol
является AbsoluteTolerance
свойство, заданное в SolverOptions
объекта активной конфигурации модели.
Для состояния, которое имеет ненулевое начальное значение, шкала является максимальной величиной по состоянию, как наблюдалось в симуляции до сих пор:
Для состояния, которое имеет начальное значение нуля, шкала оценивается как значение состояния после выполнения пробного шага размера AbsoluteToleranceStepSize
с использованием метода Эйлера. Назовем это значение ye(j)
. Затем:
Если начальное состояние меньше нуля и не имеет динамики в момент = 0, то:
Дозы, события и начальные правила назначения во время симуляции = 0 не рассматриваются при вычислении масштабирования абсолютной погрешности.