Ｌｉｍｉｔ ａｎｇｌｅ ｉｎ ［－９０，９０］ ｄｅｇｒｅｅ
4 次查看（过去 30 天）
John D'Errico 2022-5-2
编辑：John D'Errico 2022-5-2
You cannot simply constrain an ODE solver to stay within bounds. However, almost certainly, if the ODE solver wants to go outside of those bounds, allow it to do so, because that does not cause a problem. just take the output and then deal with it as a post-processing step.
That is, if X is a vector that ODE45 returns, then use this line of code to remap the predictions back into the [-90,90) interval:
X = mod(X,180) - 90;
For example, that remaps a result that was 91 degrees into -89 degrees. (Note that mod works, even if X is not an integer.)
It would be my guess that this parameter is effectively measuring the slope of a line, in degrees. (It is about the only common reason I can see why you wish to constrain the parameter to lie in that interval.)
And we could argue that the slope of a line must always be between -90 and +90 degrees. But if we had a line with a slope that was predicted to be outside of that interval, then the computation I have provided returns a new slope measure inside the region you wish to see. Effectively, there is no problem. Adding any multiple of 180 degrees does not materially change the slope of a line. (Think about it! You can even prove that claim.)
One thing you really don't want to do is make that change internally in the code, as that could effectively create large discontinuities for the ODE solver to deal with. But changing it after the solver is done is fine.