Как избежать выхода интегратора в Matlab из области допустимых решений?

#matlab #numerical-methods #ode #ode45

#matlab #численные методы #ode #ode45

Вопрос:

Я использую ode45 для решения системы ODE. Система описывает плоский поток, для которого я намерен рисовать траектории. Поток покрывает выпуклую форму на плоскости и теоретически никогда не пересекает ее границы.

Проблема в том, что система ODE требует вычисления функции, которая имеет реальное значение только внутри домена, но во время интеграции ode45 пытается увеличить временной шаг на каждом ходу, чтобы траектория могла выйти из домена. (Значение функции вычисляется итеративно, а за пределами области решения вообще нет, итерация возвращается с пустой матрицей.) В этом случае уравнения не могут быть оценены, и интегрирование приводит к ошибке. Я не могу решить эту проблему с помощью события завершения, потому что ошибка возникает во время пробных подэтапов. Более того, я не хочу останавливать интегратор, потому что траектория может быть определена с меньшими временными шагами.

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

Комментарии:

1. Zeroth, вы настроили параметры допуска ошибок? Сначала переключитесь на неявный решатель ode15 или ode113 . Они, как правило, не дотягивают до следующего шага в положении промежуточных точек, то есть приближаются к следующей точке «изнутри». Во-вторых, попытайтесь найти некоторые поддельные значения для вне домена, которые отражают решение обратно внутри домена.

2. Например, для y'=sqrt(y) которого не определено, для y<0 которого можно изменить его на y'=sqrt(max(0,y)) , который может застрять при слегка отрицательных значениях, y'=sign(y)*sqrt(abs(y)) который возвращается к нулю, но имеет там очень маленькие шаги, или y'=y/sqrt(max(eps,abs(y))) или даже более причудливый y'=2*y/sqrt(3*abs(y) max(eps,abs(y))) , который ограничивает наклон, y=0 так что хороший решатель будет работать с большими размерами шага вдоль асимптоты.