У меня есть система 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
).
ode45
является подходящим решателем? Если это жесткая система, попробуйтеode15s
. То, что вы получили результат, не обязательно означает, что это правильный результат, тем более, что система кажется сложной. Скорректировали ли вы допуски интеграции ('AbsTol'
и'RelTol'
) и убедились, что по-прежнему получаете те же траектории? Вы смотрели на'Stats'
, чтобы увидеть количество неудачных шагов. Наконец, посмотрите на этот недавний вопрос и ответ, который может оказаться полезным. - person horchler   schedule 13.07.2013ode15s
позволит решателю завершить работу, я могу исключить их из своего теста. - person Keegan Keplinger   schedule 13.07.2013ode15s
работает. Может быть, случайно я не сталкивался с плохим диапазоном параметров a, но он прошел намного дальше, чемode45
перед зависанием. Спасибо. - person Keegan Keplinger   schedule 13.07.2013