声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1890|回复: 4

[编程技巧] 关于对符号变量进行多次循环的问题

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

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

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

x
例如这样的程序:
     for m=1:1000
                    a(m)=hanshu(m);
               end
其中hanshu(m),返回一个数值。由于它比较麻烦,所以每一次循环需要很长时间,循环100次,可能没有问题,但是多点,比如到1000,可能就会有错误提示,不知道该怎么办。请问谁知道解决的方法啊?

   出错显示:
         ??? Error using ==> sym.maple
Error, (in normal/expanded) integer too large in context
Error in ==> sym.int at 51
   r = reshape(maple('map','int',f(:),[x.s '=(' a.s ')..(' b.s ')']),size(f));
Error in ==> rgrb at 7
d(n)=int(jimf(xu,z(n)),'xu',0,300);
Error in ==> Nzwucha at 8
    d(m)=rgrb(a(m),ru)*double(int(jffii(xu,l,ab,ba)/log(10)/xu,'xu',10^b(m),l*100));
Error in ==> zuixiaowucha at 7
            wuch=Nzwucha(l,ab,ba);   


其中,rgrb,Nzwucha被zuixiaowucha函数调用,循环次数少,没有问题,循环多次zuixiaowucha就出错。

[ 本帖最后由 eight 于 2007-10-15 19:22 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-10-15 17:11 | 显示全部楼层

回复 #1 donkeyxu 的帖子

减少循环,用矢量化编程:
m=1:1000;a(m)=hanshu(m);
建议看看eight院长关于矢量化编程的精华帖子
 楼主| 发表于 2007-10-15 17:31 | 显示全部楼层

回复 #2 花如月 的帖子

谢谢,等我看下,修改看看。eight 的也看了。
修改了,其实就是把for m=1:1000,改入到函数hanshu(m)的定义中去:
                      function z=hanshu(m)
                       for k=1:length(m)
                            z(k)=......
                       end
其中z(k)=....,省略掉繁琐的求解过程。
m=1:1000; hanshu(m)依然不行.100可以。

出错提示:

??? Error using ==> sym.maple
Error, (in evalf/exp/general) integer too large in context
Error in ==> sym.double at 23
ValueOfS = str2num(map2mat(char(maple('evalf',S(:),d))));
Error in ==> rgrb at 10
zz(n)=double(a(n)*c(n)*b(n)/d(n));
Error in ==> Nzwucha at 11
    d(m)=rgrb(a(m),ru)*double(int(jffii(xu,l(ly1),ab(ly2),ba(ly3))/log(10)/xu,'xu',10^b(m),l(ly1)*100));

[ 本帖最后由 donkeyxu 于 2007-10-15 19:06 编辑 ]
发表于 2007-10-15 19:20 | 显示全部楼层
原帖由 donkeyxu 于 2007-10-15 17:04 发表
例如这样的程序:
     for m=1:1000
                    a(m)=hanshu(m);
               end
其中hanshu(m),返回一个数值。由于它比较麻烦,所以每一次循环需要很长时间,循环100次,可能没有问题, ...


版面搜索 clear maplemex,看看是否这个问题

评分

1

查看全部评分

 楼主| 发表于 2007-10-15 19:27 | 显示全部楼层

回复 #4 eight 的帖子

多谢,我看看。

搜索到了,如下:

在某些计算过程中出现内存不足是maple本身的固有缺陷,对此maple已经承认,所以会给你个命令:clear maplemex,应该是释放内存的吧,可以部分解决计算内存不足问题。我当时的做法是在循环中每隔一段时间执行一次clear maplemex

程序修改过了,但愿可行。多谢eight指点。

可以运行很久了!突破100大关了,现在运行到好几百都没问题了,多谢了!

[ 本帖最后由 donkeyxu 于 2007-10-15 21:05 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-6-28 23:34 , Processed in 0.051533 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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