我一直在使用matlab的ode求解器来求解两个耦合的高度非线性ODE系统。之前我使用ode15s解决问题,并且每次运行它都得到不同的结果。请注意,如果我在一个小时左右的时间内运行了相同的代码,则通常会得到相同的结果(可重现)。但是,如果有几个小时的间隔,或者如果我隔天运行了代码,即使使用相同的参数,我也会得到不同的结果。多次检查。
在检查ode15s帮助文件时,我发现它的准确性从低到高不等。因此,我将求解器更改为ode45,并使用以下公差选项将其拧紧:
options = odeset('AbsTol',1e-15,'RelTol',1e-12);
[t,r] = ode45('ode_problem',time_range,initial_conditions,options);
但是即使在现在,问题仍然存在,尽管有时即使是一天之后,我也很幸运能够获得相同的结果(有时可重现)。那么怎么可能出问题了?有时最终结果相差两个以上数量级。我的问题中没有随机或随机成分。
或者,非线性问题是否有可能是随机因素引起的,但不是直接可见的?