声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2797|回复: 11

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

[复制链接]
发表于 2009-5-25 19:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

此问题下,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 编辑 ]

tantao.m

16.36 KB, 下载次数: 19

回复
分享到:

使用道具 举报

 楼主| 发表于 2009-5-25 19:23 | 显示全部楼层
不好意思,附件多发了一次不知该如何删除。
发表于 2009-5-25 20:46 | 显示全部楼层
应该是没有停止,虽然显示条看着似乎满了,但程序在运行,楼主可以用
w = 40;
h = 8;
s = .75;
t = 7.5;
试试,只把s改一下。时间稍长一点,但最终会有结果的。
 楼主| 发表于 2009-5-25 20:57 | 显示全部楼层
多谢了!

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

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

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

尚不知前途如何?

欢迎继续提出建议。
发表于 2009-5-25 21:05 | 显示全部楼层
应该会根据你设的参数的不同直接影响了程序的运算时间,如果程序已经优化完毕,在matlab中减少时间估计不太可能了。如果楼主熟悉C,到建议你用C试试,在C下,运行时间肯定能节省不少。matlab是用C编的。

评分

1

查看全部评分

发表于 2009-5-26 01:15 | 显示全部楼层
原帖由 gloryzhu 于 2009-5-25 20:57 发表
多谢了!

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

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

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

这个是谁说的?这么不负责任。举个例子看看,起码我没遇到过在MATLAB上运行几十小时,C上10几分钟的微分方程程序。我倒想开开眼界:)
发表于 2009-5-26 01:26 | 显示全部楼层

回复 楼主 gloryzhu 的帖子

运行这么久,真够累的
 楼主| 发表于 2009-5-26 13:57 | 显示全部楼层

回复 6楼 rocwoods 的帖子

也是听别人亲身实践说的,这个可以信。
那你见过怎么让MATLAB上的几十个小时缩减的方法吗?
 楼主| 发表于 2009-5-26 14:23 | 显示全部楼层
各位,
运行中out of memory的问题也出现了。
时间过长的话,变量很长,怎么释放内存呢?
搜索了往常的帖子知道了理论实践起来也没人介绍啊。
换台64位计算机?可以试试!
把变量矩阵分割,小矩阵的行数分割成多大呢?
 楼主| 发表于 2009-5-26 14:35 | 显示全部楼层
翻找老帖
看到realyyy解决内存溢出问题时写到:
记得以前讨论过这个问题。
试试在大循环中加一句clear maplemex吧。

这个在M文件里可以直接用吗?
是不是加在中间就可以了?
发表于 2009-5-27 10:02 | 显示全部楼层
原帖由 gloryzhu 于 2009-5-26 13:57 发表
也是听别人亲身实践说的,这个可以信。
那你见过怎么让MATLAB上的几十个小时缩减的方法吗?

主要是现在没时间,有时间帮你想想这个问题。我的经验,C能用10几分钟搞定的,如果MATLAB用了几十个小时,那几乎可以肯定是使用者没有把程序编写好。MATLAB和C的效率差距没有这么大。
现在比较忙,有时间帮你想想这个问题。

评分

1

查看全部评分

发表于 2009-5-27 14:54 | 显示全部楼层

回复 11楼 rocwoods 的帖子

个人水平专业有限, 无法花时间细看, 但我亦如此想!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 03:10 , Processed in 0.095754 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表