Я решаю систему ОДУ с ode45 для многих различных параметров (эти параметры являются коэффициентами дифференциальных уравнений), и я хочу найти параметры, для которых решение меньше (не больше), чем заданное значение.
Как я могу установить условие на ode45, чтобы «обнаружить» автоматически, если решение (для некоторых из этих параметров) становится больше, чем это (заданное) значение при решении системы и остановить решение для дальнейшие шаги?
Ян предложил поставить следующее условие в определение входной функции, чтобы int. Я пробовал это, но это не работает: после нескольких шагов (и хотя условие еще не верно) итерация вскоре заканчивается, а вывод остается постоянным на каком-то числе. (неправильный вывод)
(qm, U, V и т. д. являются константами, а X имеет 4 столбца)
[T,X]=ode45(@acceleration,tspan,x0);
function xprime=acceleration(T,X)
size_X=length(X);
xprime=zeros (4,1);
if X(size_X,1)>threshold
xprime(1)=0;
xprime(2)=0;
xprime(3)=0;
xprime(4)=0;
else
xprime(1)=X(3);
xprime(2)=X(4);
xprime(3)=X(1)*X(4)^2 - 2*qm*(U+V*(cos(w*T)))*F1(num,X(1),X(2));
xprime(4)= -2*X(3)*X(4)/X(1) - qm*((U+V*(cos(w*T)))/(X(1)))*F2(num,X(1),X(2));
end
end
- В чем проблема с приведенным выше кодом?
- Кто-то предложил приделать к ode45 функцию мониторинга. (здесь). Кто-нибудь знает как это сделать? Спасибо