声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1787|回复: 0

[编程技巧] 请帮忙看看如何提高这段循环积分代码的效率

[复制链接]
发表于 2007-5-16 01:17 | 显示全部楼层 |阅读模式

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

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

x
因为前面要做符号运算,得到表达式,然后后面要用一个嵌套的二次循环积分计算,因此其代码效率是相当低的,用profview分析,发现主要是inline占用了大量的时间。
  由于inline/eval的低效,在循环中调用inline或者eval将占用了绝大部分时间,但这里积分却又不得不调用,下式中的fun=inline(vectorize(fai))可以直接写成fun=vectorize(fai),但实际上在积分时依然会用到eval。
  由于int是求精确解析解的,效率自然更加低效。
  这个代码运行10多个小时也没完,还不一定出结果,最后还可能出错。有没有什么办法解决这个问题?有没有更好的积分办法?
syms x; num=0; N=200; LL=sym(zeros(1,N));
for i=0:N-1   %这里用maple生成一个拉盖尔函数数组供下面调用
        LL(i+1)=maple(['L(  ',num2str(i),',1,x)']);
end
for j=0:N-1, for i=j:N-1
     num=num+1; fai=exp(-x)*x^m*LL(i+1)*LL(j+1);
     fun=inline(vectorize(fai)); %这里的inline可以不写,实际quadl时会自然调用
     N1=quadl(fun,0,l0);
        %       下面还有一些处理代码,略去
end; end


敬请各位指点。

上面还有个初始条件: m=1;

[ 本帖最后由 ChaChing 于 2010-5-29 00:41 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-10-3 08:23 , Processed in 0.059705 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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