2013-06-13 74 views
0

我使用ode15解决硬PDE在MATLAB,而且往往依赖于初始条件冻结。我从来没有真正遇到过错误,即使在10小时后它应该需要大约30秒的时间才能完成。我正在试验不同的空间和时间节点间隔,但很难,因为我没有得到反馈。诊断为MATLAB ODE

是否有某种相当于诊断为fsolvestats没有用,因为它只在fsolve完成后才显示输出。

+0

也许你可以通过探查运行它,看看它是越来越stuch? – wakjah

回答

0

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

此外,根据您的ODE,您可能需要不同的解决者。在this page页面大约一半的地方,列出了大多数MATLAB可用的求解器。根据你的功能是僵硬还是非僵硬,以及你需要得到多准确,其中一个可能对你更好。有时候我只是编写代码并且注释掉所有内容,直到找到最适合我的代码为止,但是如果您想为应用程序找到“正确”的代码,请查看每个文档。因为你是指既ode15sfsolve锁住

+0

数据不适用于我,因为fsolve甚至没有完成 – Brian

+0

啊,对不起。我必须跳过'fsolve'语句到'ode15'。你的语法是什么?你能告诉我们冻结的代码吗? – Engineero

0

你的问题是混乱的。这是两个完全不同的功能。一个是数值积分,另一个是根源。另外,fsolve没有选项'Stats'(请参阅doc fsolve)。如果你想从fsolve使用连续输出:

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

这将显示迭代次数,评价次数,函数值,取决于你用什么算法其他的东西(的alorithm可以通过'Algorithm'调整选项)。请参阅doc fsolve了解详细信息。

只要'Stats'选项与ode15s去,它不会给你很多信息。我怀疑你会弄清楚为什么你的系统正在停止(如果它甚至是你遇到问题的ode15s)。你可以尝试的是通过odeset'OutputFcn'选项使用输出功能。您可以尝试简单的odeprint第一:

options = odeset('OutputFcn',@odeprint) 

每个积分步骤之后,将打印状态。输入edit odeprint来查看代码,以及如果您需要做更多工作,您可能会如何编写自己的输出函数。