我正在使用ode45为许多不同的参数求解一个ODE系统(这些参数是微分方程的系数),我想找到解决方案比给定值更小(不大于)的参数。
我如何在ode45上设置条件,如果解决方案(对于某些参数)在解决系统时大于(给定)值时自动“检测”停止解决进一步的步骤?
Jan建议在输入函数的定义中添加以下条件,以便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
答案 0 :(得分:1)
我没有在Matlab ODE解算器中看到可能(错误)用于您的目的的内置选项。
但您可以相应地修改y' = f(t,y)
中的右侧。我可能会想到
IF y > threshold THEN f(t,y) = 0
- 由于ODE45中的步长控制,这应该导致迭代的快速结束答案 1 :(得分:0)
您是在解决一组方程式还是试图随时间积分?没有更多信息,听起来你应该使用fsolve或fmincon?
如果您真的在进行集成,我认为您可以使用“事件”功能向ode45指示您要停止。气球示例可能会有所帮助。