gloryzhu 发表于 2009-5-25 19:14

求救高手,MATLAB运行到99%停住了是怎么回事(附有代码)?

相信很多童子也遇到同样的问题。

此问题下,MATLAB运行到99%停住了是怎么回事?

有人说,这样的程序matlab会运行40多个小时。
我现在也有点怀疑。
但这就是我遇到的一个实际问题啊。



说明:

    由于程序很长,所以做一简介。

    第195-198行,为赋给ode函数初值,前面的过程为具体的模型参数设定,没耐心者可以跳过前面的内容。
    第517-564行,为Odefun的右边项。

    由于欲验证整个过程的准确性,采用了很少的for循环语句和向量。

    我做了很多问题的假设,问题可能出在:
(1)如果把10-14行的语句假定为
w = 40;
h = 8;
s = 7.5;
t = 7.5;
结果会很快出现。

如果把10-14行的语句假定为
w = 4;
h = 0.8;
s = 0.75;
t = 0.75;
结果也不会很快出现。

原因可能是网格的宽和高尺寸差异过大?

但是尺寸参数是固定的,没法改变的;如果选择加密网格,让网格的宽和高相似,40/0.075 = 533,加密的网格数会让计算更复杂。

(2)如果把51行关于模拟时间的语句修改为

hour =0.000002 h ;

结果会很快出现。

但是这么少的时间很难满足实际要求。hour = 5.6 小时时,难道是因为时间过长的原因?


这是分析后主要的问题发现。

Ps:上次删帖是因为看到没人回复,心情有点糟糕,因为本人的学位证可能就决定于此方程的求解。向大家致歉!

      现在心情调过来了,我一定会默默关注此贴,:hug: 。

[ 本帖最后由 friendchj 于 2009-5-25 19:56 编辑 ]

gloryzhu 发表于 2009-5-25 19:23

不好意思,附件多发了一次不知该如何删除。

friendchj 发表于 2009-5-25 20:46

应该是没有停止,虽然显示条看着似乎满了,但程序在运行,楼主可以用
w = 40;
h = 8;
s = .75;
t = 7.5;
试试,只把s改一下。时间稍长一点,但最终会有结果的。

gloryzhu 发表于 2009-5-25 20:57

多谢了!

是没停止,还在计算,但可能会等待很长时间。

不过这四个参数属于尺寸参数,不能改得啊。

我现在正在利用龙格-库塔法自己在C语言上编一下。
据说这种解微分方程的情况,在MATLAB上要运行几十个小时,在C上就10几分钟。

尚不知前途如何?

欢迎继续提出建议。

friendchj 发表于 2009-5-25 21:05

应该会根据你设的参数的不同直接影响了程序的运算时间,如果程序已经优化完毕,在matlab中减少时间估计不太可能了。如果楼主熟悉C,到建议你用C试试,在C下,运行时间肯定能节省不少。matlab是用C编的。

rocwoods 发表于 2009-5-26 01:15

原帖由 gloryzhu 于 2009-5-25 20:57 发表 http://www.chinavib.com/forum/images/common/back.gif
多谢了!

是没停止,还在计算,但可能会等待很长时间。

不过这四个参数属于尺寸参数,不能改得啊。

我现在正在利用龙格-库塔法自己在C语言上编一下。
据说这种解微分方程的情况,在MATLAB上要运行几十个小 ...
这个是谁说的?这么不负责任。举个例子看看,起码我没遇到过在MATLAB上运行几十小时,C上10几分钟的微分方程程序。我倒想开开眼界:)

xiuhuwang 发表于 2009-5-26 01:26

回复 楼主 gloryzhu 的帖子

运行这么久,真够累的

gloryzhu 发表于 2009-5-26 13:57

回复 6楼 rocwoods 的帖子

也是听别人亲身实践说的,这个可以信。
那你见过怎么让MATLAB上的几十个小时缩减的方法吗?

gloryzhu 发表于 2009-5-26 14:23

各位,
运行中out of memory的问题也出现了。
时间过长的话,变量很长,怎么释放内存呢?
搜索了往常的帖子知道了理论实践起来也没人介绍啊。
换台64位计算机?可以试试!
把变量矩阵分割,小矩阵的行数分割成多大呢?

gloryzhu 发表于 2009-5-26 14:35

翻找老帖
看到realyyy解决内存溢出问题时写到:
记得以前讨论过这个问题。
试试在大循环中加一句clear maplemex吧。

这个在M文件里可以直接用吗?
是不是加在中间就可以了?

rocwoods 发表于 2009-5-27 10:02

原帖由 gloryzhu 于 2009-5-26 13:57 发表 http://www.chinavib.com/forum/images/common/back.gif
也是听别人亲身实践说的,这个可以信。
那你见过怎么让MATLAB上的几十个小时缩减的方法吗?
主要是现在没时间,有时间帮你想想这个问题。我的经验,C能用10几分钟搞定的,如果MATLAB用了几十个小时,那几乎可以肯定是使用者没有把程序编写好。MATLAB和C的效率差距没有这么大。
现在比较忙,有时间帮你想想这个问题。

ChaChing 发表于 2009-5-27 14:54

回复 11楼 rocwoods 的帖子

个人水平专业有限, 无法花时间细看, 但我亦如此想!
页: [1]
查看完整版本: 求救高手,MATLAB运行到99%停住了是怎么回事(附有代码)?