2016-03-11 3 views
0

Что именно этот вариант делает? Кажется, он просто установил соответствующие компоненты решения в ноль без какой-либо ошибки или повторил с меньшим шагом, поэтому я получаю поврежденное решение. Но если я ограничиваю шаг, все выглядит нормально (все компоненты положительны). Как я могу ограничить компоненты решения, которые должны быть сильными позитивными?Неотрицательный вариант в matlab odeset

+0

Перепишите систему, чтобы заменить эти значения логарифмов. Тогда экспонента новых переменных всегда будет положительной. Или используйте решатель для жестких систем. – LutzL

+0

Я использую решатель для жестких систем ode15s, поэтому он возвращает хороший результат (со всеми положительными значениями), если я ограничиваю шаг интеграции, но в этом случае он работает слишком долго, а продукты слишком много значений (в результате мне необходимо обходное решение для случая с нехваткой памяти). – Leo

+0

@LutzL Что значит «заменить их логарифмами»? – Leo

ответ

0

1) неотрицательная опция позволяет проверить решение на каждый шаг интегрирования и заменить отрицательные значения с нулем (это может быть хорошо для некоторых проблем) 2) В моем случае я сделал следующие шаги:

  1. Некоторые оптимизации кода, включая аналитическое решение системы линейных алгебраических уравнений (которое решалось на каждом шаге интеграции)
  2. Использование AbsTol и RelTol. ABSTOL должно быть меньше, чем переменные в растворе на несколько порядков

Кроме того, в некоторых случаях имеет смысл попытаться решить уравнения без масштабирования

Смежные вопросы