声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: jojocleo

[综合讨论] 感慨了,matlab数值积分速度太慢.

[复制链接]
发表于 2008-9-17 09:34 | 显示全部楼层
计算一个分岔图要有时候24小时以上,1000s的循环也算时间长啊
回复 支持 反对
分享到:

使用道具 举报

发表于 2008-9-17 09:42 | 显示全部楼层
非常同意bainhome的看法 !
本来不同软件之间各有优劣, 硬要去比较其优劣, 实在没必要
若要比执行速度, 我认为绝对不是matlab的主要优点(虽然亦可以优化及p Code ...)
matlab主要优点应是方便性强, 编辑较直觉性, 交换沟通较容易 ...
既然要用, 就需要知道其一般语法的正确使用方法
若很在意执行时间的话, 使用更低阶的程式语言一定是比较快
但同样的亦需正确使用
 楼主| 发表于 2008-9-17 15:04 | 显示全部楼层
没有想到能够引来大家发表了这么多议论,先谢谢大家的参与。我挺赞同楼上说的一句话“有时,优化时间可能比计算时间付出更大的代价”,我也一直在想办法优化程序,在某些方面取得了一些效果,但是有碰到了很多的问题。我的问题主要是在循环调用程序积分方面的,自己也尝试过优化,下面把心得说一下,希望能对大家有所帮助,有不对之处请指正!
积分表达式a*x+1,其中a为变量,求a为1~1000时的积分值。
1)直接调用M子函数
for a=1:1000
quad(@(x)fm(x,a),0,1);

end
function y=fm(x,a)
y=a*x+1;
end


Elapsed time is 0.486639 seconds.
2)function handle
fh=@fm;
for a=1:1000
quad(@(x)fh(x,a),0,1);

end
Elapsed time is 0.467544 seconds.
3)匿名函数
f= @(x,a)a*x+1;
for a=1:1000
quad(f,0,1,1e-6,0,a);

end

Elapsed time is 0.213994 seconds.
4)inline function
fi=inline('a*x + 1', 'x','a');
for a=1:1000
quad(@(x)fh(x,a),0,1);

end

Elapsed time is 0.457284 seconds.
5)quadv命令调用子函数
a=1:100000;
quadv(@(x)fm(x,a),0,1);
%0.002s

Elapsed time is 0.037595 seconds.
6)quadv命令调用匿名函数
f= @(x,a)a*x+1;
a=1:100000;
quadv(@(x)f(x,a),0,1);
%0.002s
Elapsed time is 0.034381 seconds.
这个是我自己做的一些比较,跟网上的一篇文章有些类似。可以看到使用quadv命令的速度是最快的(注意:quadv的两个程序a取值到了10000!),quadv命令应该就是矢量化的一种表现吧。使用quadv命令的同时,使用匿名函数又略微快一些,当子函数定义比较复杂带有很多变量传递时,这种差别格外明显。
我的问题可以这样表达:上述程序6)为一个子程序,主程序通过循环把变量传递给子程序进行积分计算,当计算量很大时(循环比较大),profile发现主要占用时间产生自匿名函数f的定义上,quadv命令反而没有占用那么多时间,这个有没有什么办法解决?
上述的这个问题速度上其实也能够接受,但是要是二重积分碰到这个问题呢?二重积分有没有quadv类似的命令呢?
请大家指点!

评分

1

查看全部评分

发表于 2009-9-17 10:50 | 显示全部楼层

ode45 积分表达式太长,机器卡死,求助,谢谢

function dy=yy(t,y,mu)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=f(mu,t)  %f(mu,t) 是由别的程序求出来的一个表达式,非常长就不贴出来了,
这是函数文件
clc
clear
i=1;
for mu=1:4
tt=0.1;
tspan=linspace(0,tt,100);
y0=[2;0];
[t y]=ode45(@yy,tspan,y0,[],mu);
yyy(i)=y(100,1)
i=i+1
end
在运行时就卡死了,f(mu,t) 表达式太长在此怎么处理?谢谢!急!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-16 04:08 , Processed in 0.077260 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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