Когда решение ODE45 расходится (неважно, почему и как), будет выведено следующее предупреждение, и решатель не сможет продолжить работу:
Предупреждение: сбой при t=8.190397e+01. Невозможно выполнить допуски интегрирования без уменьшения размера шага ниже наименьшего допустимого значения (2,273737e-13) в момент времени t.
Я запускаю ode45 на матрице (много входных данных), поэтому я хочу выяснить автоматически, для каких входных данных происходит указанное выше условие (сбой). Я имею в виду, есть ли какие-либо другие признаки этого условия, возвращаемые ode45, которые могут быть записаны в массив автоматически? Что-то, что можно использовать в статусе if
как:
if {some variable is returned/is equal to ...} then {the solver has failed}
чтобы автоматически идентифицировать эти неверные входные данные, не просматривая отображаемое предупреждение.
[t,y]=ode45(@(t,y)[y(1)^2;y(2)],[0 1],[1;1]);
. Два уравнения независимы. Первый имеет скорость роста, из-за которой размер шага становится очень маленьким. В свою очередь, это приводит к тому, чтоode45
в конце концов прерывается. Я предполагаю, что вопрос в том, как можно написать свою функцию ОДУ, чтобы определить, что это произойдет, но избежать этого, обнулив уравнение до того, как размер шага станет слишком маленьким? Очевидно, что у обнуленного уравнения не было бы решения, ноode45
мог бы продолжить свой веселый путь и получить полные решения для оставшихся элементов. - person horchler   schedule 09.07.2013if
и проверяя наличие ошибок при каждом запуске. - person Mostafa   schedule 09.07.2013