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

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 за счет некоторой точности.

  • Если результаты кажутся неточными, можно уменьшиться (или напрячься), значения относительной погрешности путем деления с 10 Н, где 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 не рассматриваются при вычислении масштабирования абсолютной погрешности.

Похожие темы