Выбор абсолютных погрешностей и относительных погрешностей для симуляции

SimBiology® использует AbsoluteTolerance и RelativeTolerance для управления точностью интегрирования во время симуляции. В частности, AbsoluteTolerance используется для управления наибольшей допустимой абсолютной ошибкой на любом шаге во время симуляции. Он управляет ошибкой, когда решение маленькое. Интуитивно, когда решение приближается к 0, AbsoluteTolerance - порог, ниже которого вы не беспокоитесь о точности решения, поскольку это эффективно 0. RelativeTolerance управляет относительная погрешность одного шага интегратора. Интуитивно он управляет количеством значащих цифр в решении, кроме тех случаев, когда это меньше, чем абсолютная погрешность, и log10(RelativeTolerance) - количество правильных цифр.

Алгоритм

На каждом шаге симуляции iрешатель оценивает локальную ошибку e в состоянии j симуляции. Решатель уменьшает размер временного шага i пока ошибка состояния не удовлетворяет:

|e(i,j)|max(RelativeTolerance|y(i,j)|,AbsoluteTolerance(i,j))

Таким образом, при значениях состояний большей величины точность определяется RelativeTolerance. Когда значения состояний приближаются к нулю, точностью управляют AbsoluteTolerance.

Правильный выбор значений для RelativeTolerance и AbsoluteTolerance изменяется в зависимости от задачи. Значения по умолчанию могут работать для первых испытаний симуляции. Когда вы корректируете допуски, примите во внимание, что существуют компромиссы между скоростью и точностью:

  • Если симуляция занимает слишком много времени, можно увеличить (или ослабить) значения RelativeTolerance и AbsoluteTolerance ценой некоторой точности.

  • Если результаты кажутся неточными, можно уменьшить (или ужесточить) относительные значения относительной погрешности путем деления на 10N, где N - действительное положительное число. Но это имеет тенденцию тормозить решатель.

  • Если величина значений состояния высока, можно уменьшить относительную погрешность, чтобы получить более точные результаты.

Абсолютная погрешность

Как SimBiology использует AbsoluteTolerance определение ошибки зависит от того, AbsoluteToleranceScaling свойство включено. По умолчанию AbsoluteToleranceScaling активизируется, что означает, что каждое состояние имеет свою абсолютную погрешность, который может увеличиться в течение симуляции:

AbsoluteTolerance(i,j)=CSAbsTol*Scale(i,j)

CSAbsTol является AbsoluteTolerance свойство, заданное в SolverOptions объекта активной конфигурации модели.

Для состояния, которое имеет ненулевое начальное значение, шкала является максимальной величиной по состоянию, как наблюдалось в симуляции до сих пор:

Scale(i,j)=max(|y(1:i,j)|)

Для состояния, которое имеет начальное значение нуля, шкала оценивается как значение состояния после выполнения пробного шага размера AbsoluteToleranceStepSize с использованием метода Эйлера. Назовем это значение ye(j). Затем:

Scale(i,j)=max(|[ye(j);y(2:i,j)]|)

Если начальное состояние меньше нуля и не имеет динамики в момент = 0, то:

AbsoluteTolerance(i,j)=CSAbsTol

Дозы, события и начальные правила назначения во время симуляции = 0 не рассматриваются при вычислении масштабирования абсолютной погрешности.

Похожие темы