诊断MATLAB ODE

时间:2013-06-13 04:01:35

标签: matlab

我正在使用ode15在MATLAB中解决一个僵硬的PDE,并且它经常会根据初始条件冻结。我从来没有真正得到过错误,即使在10个小时之后也不会完成它需要大约30秒才能运行。我正在尝试不同的空间和时间节点间隔,但很难,因为我没有得到反馈。

是否有某种等同于fsolve的诊断? stats没有用,因为它只在fsolve完成后显示输出。

2 个答案:

答案 0 :(得分:0)

查看odeset上的documentation,特别是stats选项。我想你基本上只想将stats设置为on,你会得到一些反馈。

此外,根据您的ODE,您可能需要一个不同的解算器。在this page页面的大约一半处,有一个MATLAB中可用的大多数求解器的列表。根据您的功能是僵硬还是非僵硬,以及您需要获得的准确度,其中一个可能更适合您。有时我只是将它们全部编码并注释掉除了一个以外的所有内容,直到找到最适合我的那个,但如果你想为你的应用找到“正确”的文档,请查看每个文档。

答案 1 :(得分:0)

您的问题很混乱,因为您引用了ode15sfsolve锁定。这是两个完全不同的功能。一个做数值积分,另一个解决根。此外,fsolve没有名为'Stats'的选项(请参阅doc fsolve)。如果您想要fsolve的连续输出,请使用:

options = optimist('Display','iter');
[x,fval,exitflag] = fsolve(myfun,x0,options)

这将显示迭代次数,函数评估次数,函数值和其他内容,具体取决于您使用的算法(可以通过'Algorithm'选项调整算法)。再次查看doc fsolve以获取完整详细信息。

'Stats'的{​​{1}}选项而言,它不会给你很多信息。我怀疑你会弄清楚为什么你的系统停止运行(如果它甚至ode15s你有问题)。您可以尝试通过ode15s的{​​{1}}选项使用输出函数。您可以先尝试简单的'OutputFcn'

odeset

将在每个集成步骤后打印您的状态。如果您需要执行更多操作,请键入odeprint以查看代码以及如何编写自己的输出函数。