exponenta event banner

Устранение распространенных проблем ОДУ

Допуски ошибок

Вопрос или проблемаОтвет

Как выбрать пороговые значения ошибок RelTol и AbsTol?

RelTol, допуск относительной точности, управляет количеством правильных цифр в вычисленном ответе. AbsTol, абсолютный допуск ошибки, управляет разницей между вычисленным ответом и истинным решением. На каждом шаге ошибка e в компоненте i решения удовлетворяет

|e(i)| ≤ max(RelTol*abs(y(i)),AbsTol(i))

Грубо говоря, это означает, что вы хотите RelTol правильные цифры во всех компонентах решения, за исключением цифр, меньших порогового значения AbsTol(i). Даже если компонент не интересует y(i) если он небольшой, может потребоваться указать значение для AbsTol(i) это достаточно мало, чтобы получить некоторые правильные цифры в y(i) чтобы можно было точно вычислить более интересные компоненты.

Мне нужны ответы, которые соответствуют точности компьютера. Почему я не могу просто установить RelTol кому eps?

Можно приблизиться к точности станка, но не так близко. Решатели не разрешают RelTol рядом eps потому что они пытаются аппроксимировать непрерывную функцию. При допусках, сопоставимых с eps, машинная арифметика заставляет все функции выглядеть прерывистыми.

Как сообщить решателю, что я не заинтересован в получении точного ответа для одного из компонентов решения?

Можно увеличить абсолютный допуск ошибки AbsTol для этого компонента решения. Если допуск больше, чем у компонента решения, это указывает на то, что никакие цифры в компоненте не должны быть правильными. Решателю, возможно, придется получить некоторые правильные цифры в этом компоненте для точного вычисления других компонентов, но он обычно обрабатывает это автоматически.

Масштаб проблемы

Вопрос или проблемаОтвет

Насколько большую проблему можно решить с помощью комплекта ODE?

Основными ограничениями являются память и время. На каждом временном шаге решатели для нетипичных задач распределяют векторы длины n, где n - количество уравнений в системе. Решатели для жестких задач распределяют векторы длины n но также выделить nоколо-n Матрица Якобиана. Для этих решателей может быть выгодно задать шаблон якобианской разреженности, используя JPattern вариант odeset.

Если проблема не в состоянии, или если вы используете JPattern вариант, возможно, можно решить проблему с тысячами неизвестных. В этом случае, однако, хранение результата может быть проблематичным. Попросите решатель оценить решение только в определенных точках или вызовите решатель без выходных аргументов и используйте функцию вывода для мониторинга решения.

Я решаю очень большую систему, но беспокоюсь только о нескольких компонентах y. Существует ли какой-либо способ избежать хранения всех элементов?

Да. OutputFcn специально для этого разработан вариант. При вызове решателя без выходных аргументов решатель не выделяет хранилище для хранения всей истории решения. Вместо этого вызывается решатель OutputFcn(t,y,flag) на каждом временном шаге. Чтобы сохранить историю определенных элементов, запишите функцию вывода, которая хранит или отображает только те элементы, которые вас волнуют.

Какова начальная стоимость интеграции и как ее можно уменьшить?

Наибольшая стоимость запуска возникает, когда решатель пытается найти размер шага, соответствующий масштабу проблемы. Если вы знаете соответствующий размер шага, используйте InitialStep вариант. Например, при повторном вызове интегратора в цикле определения местоположения события последний шаг, сделанный перед событием, вероятно, будет правильно масштабирован для следующей интеграции. Напечатать edit ballode чтобы увидеть пример.

Размер первого шага, который занимает интегратор, слишком велик, и он пропускает важное поведение.

Можно указать размер первого шага с помощью InitialStep вариант. Интегратор пробует этот размер шага, затем уменьшает его при необходимости.

Компоненты решения

Вопрос или проблемаОтвет

Решение не похоже на то, что я ожидал.

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

Проверьте наличие компонентов решения, которые в течение некоторого времени остаются меньше абсолютного допуска ошибок. Если да, то в этих компонентах не требуется никаких правильных цифр. Это может быть приемлемым для этих компонентов, но неспособность точно вычислить их может ухудшить точность других компонентов, которые от них зависят.

Мои сюжеты недостаточно гладкие.

Увеличение значения Refine от его значения по умолчанию 4 в ode45 или 1 в других решателях. Чем больше значение Refineчем больше выходных точек генерирует решатель. Скорость выполнения не сильно зависит от значения Refine.

Я строю график решения по мере его вычисления и выглядит хорошо, но код застревает в какой-то момент.

Сначала убедитесь, что функция ОДУ является гладкой вблизи точки, где код застревает. Если это не так, то решатель должен предпринять небольшие шаги, чтобы справиться с этим. Это может помочь разбить интервал интеграции на части, по которым функция ОДУ является гладкой.

Если функция является плавной и код делает очень небольшие шаги, вы, вероятно, пытаетесь решить жесткую проблему с решателем, не предназначенным для этой цели. Переключиться на использование одного из жестких решателей ode15s, ode23s, ode23t, или ode23tb.

Что если у меня будет окончательное, а не начальное значение?

Все решатели набора ODE позволяют решать обратное или поступательное во времени. Синтаксис решателей: [t,y] = ode45(odefun,[t0 tf],y0); и синтаксис принимает t0 > tf.

Моя интеграция идет очень медленно, используя слишком много временных шагов.

Сначала проверьте, что tspan не слишком длинная. Помните, что решатель использует столько временных точек, сколько необходимо для создания гладкого решения. Если функция ОДУ изменяется в очень короткой временной шкале по сравнению с tspan, то решатель использует много временных шагов. Длительная интеграция - трудная проблема. Разрыв tspan на более мелкие куски.

Если функция ОДУ не изменяется заметно на tspan интервал, возможно, что ваша проблема жесткая. Попробуйте использовать один из жестких решателей ode15s, ode23s, ode23t, или ode23tb.

Наконец, убедитесь, что функция ОДУ написана эффективным образом. Решатели много раз оценивают производные в функции ОДУ. Стоимость численного интегрирования критически зависит от затрат на оценку функции ОДУ. Вместо повторного вычисления сложных постоянных параметров при каждой оценке сохраните их в глобальных переменных или рассчитайте один раз и передайте вложенным функциям.

Я знаю, что решение претерпевает радикальные изменения во время t, где t0 <= t <= tf , но интегратор проходит мимо, не видя его.

Если вы знаете, что происходит резкое изменение в то время t, попробуйте сломать tspan интервал на две части, [t0 t] и [t tf]и дважды позвоните интегратору или продолжите интеграцию с помощью odextend.

Если дифференциальное уравнение имеет периодические коэффициенты или решения, убедитесь, что решатель не выполняет шаг по периодам, ограничивая максимальный размер шага длиной периода.

Тип проблемы

Могут ли решатели обрабатывать дифференциальные уравнения в частных производных (PDE), которые были дискретизированы методом прямых?

Да, потому что дискретизация создает систему ОДУ. В зависимости от дискретизации может существовать форма, включающая матрицы масс, которую обеспечивают решатели ОДУ. Часто система жесткая. Это следует ожидать, если PDE является параболическим, или когда есть явления, которые происходят в очень разных временных масштабах, таких как химическая реакция в потоке жидкости. В таких случаях используют один из четырех жестких решателей. ode15s, ode23s, ode23t, или ode23tb.

Если существует много уравнений, используйте JPattern для задания узора якобианской разреженности. Это может привести к различию между успехом и неудачей, поскольку предотвращает слишком высокую стоимость вычислений. Напечатать edit burgersode чтобы увидеть пример, который использует JPattern.

Если система не жесткая, или не очень жесткая, то ode23 и ode45 являются более эффективными, чем жесткие решатели ode15s, ode23s, ode23t, и ode23tb.

Можно решать параболическо-эллиптические дифференциальные уравнения в частных производных в 1-D непосредственно с помощью решателя MATLAB ® PDEpdepe.

Можно ли интегрировать набор выборочных данных?

Не напрямую. Вместо этого представляем данные как функцию интерполяцией или какой-либо другой схемой подгонки данных. Плавность этой функции имеет решающее значение. Кусочный полином, такой как сплайн, может выглядеть гладким для глаза, но шероховатым для решателя; решатель выполняет небольшие шаги, когда производные посадки имеют прыжки. Используйте гладкую функцию для представления данных или один из решателей более низкого порядка (ode23, ode23s, ode23t, ode23tb), который менее чувствителен к гладкости. Пример см. в разделе ОДУ с зависящими от времени терминами.

См. также

| | |

Связанные темы