Отладка зависания без ошибок в решателе MATLAB ode

У меня есть система ODE. Для запуска ODE в определенном диапазоне параметров требуется несколько секунд. Однако для другого диапазона параметров MATLAB неожиданно занимает бесконечное количество времени для запуска (ну, ладно, тестировалось только полдня).

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

Как мне отладить или отловить эту семантическую ошибку в MATLAB? Я просто не уверен, что odesolver не нравится в этом. До сих пор я использовал профилировщик, чтобы сузить его до этих строк в odesolver:

 f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:}); 
 f(:,3) = feval(odeFcn,t+hA(2),y+f*hB(:,2),odeArgs{:}); 
 f(:,4) = feval(odeFcn,t+hA(3),y+f*hB(:,3),odeArgs{:}); 
 f(:,5) = feval(odeFcn,t+hA(4),y+f*hB(:,4),odeArgs{:}); 
 f(:,6) = feval(odeFcn,t+hA(5),y+f*hB(:,5),odeArgs{:});\

(который, по сути, является методом основного решателя). Очевидно, что источником ошибки является мой выбор параметров, но profiler не показывает сколько-нибудь заметного времени, затрачиваемого моей функцией (я передаю скриптовую функцию ODE как анонимную функцию ode45).


person Keegan Keplinger    schedule 13.07.2013    source источник
comment
Гиперболические функции? Вы уверены, что ode45 является подходящим решателем? Если это жесткая система, попробуйте ode15s. То, что вы получили результат, не обязательно означает, что это правильный результат, тем более, что система кажется сложной. Скорректировали ли вы допуски интеграции ('AbsTol' и 'RelTol') и убедились, что по-прежнему получаете те же траектории? Вы смотрели на 'Stats', чтобы увидеть количество неудачных шагов. Наконец, посмотрите на этот недавний вопрос и ответ, который может оказаться полезным.   -  person horchler    schedule 13.07.2013
comment
Количество неудачных шагов может быть от 0 из 5000 до 190 из 11000 в зависимости от используемых параметров. Результаты верны в известных диапазонах параметров ode45, но часть сложности заключается в том, что другие диапазоны параметров могут вызывать нестабильность. Предположение, в котором я работаю, заключается в том, что там, где существуют эти нестабильности, они в любом случае находятся за пределами интересующей области параметров, поэтому эти параметры можно пропустить (таким образом, было бы неплохо использовать процедуру catch..break). У меня есть тест, который явно проверяет каждый набор параметров, поэтому, если ode15s позволит решателю завершить работу, я могу исключить их из своего теста.   -  person Keegan Keplinger    schedule 13.07.2013
comment
пока ode15s работает. Может быть, случайно я не сталкивался с плохим диапазоном параметров a, но он прошел намного дальше, чем ode45 перед зависанием. Спасибо.   -  person Keegan Keplinger    schedule 13.07.2013