donkeyxu 发表于 2007-10-15 17:04

关于对符号变量进行多次循环的问题

例如这样的程序:
     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(:),),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院长关于矢量化编程的精华帖子

donkeyxu 发表于 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 编辑 ]

eight 发表于 2007-10-15 19:20

原帖由 donkeyxu 于 2007-10-15 17:04 发表 http://www.chinavib.com/forum/images/common/back.gif
例如这样的程序:
     for m=1:1000
                  a(m)=hanshu(m);
               end
其中hanshu(m),返回一个数值。由于它比较麻烦,所以每一次循环需要很长时间,循环100次,可能没有问题, ...

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

donkeyxu 发表于 2007-10-15 19:27

回复 #4 eight 的帖子

多谢,我看看。

搜索到了,如下:

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

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

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

[ 本帖最后由 donkeyxu 于 2007-10-15 21:05 编辑 ]
页: [1]
查看完整版本: 关于对符号变量进行多次循环的问题