关于对符号变量进行多次循环的问题
例如这样的程序: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 编辑 ]
回复 #1 donkeyxu 的帖子
减少循环,用矢量化编程:m=1:1000;a(m)=hanshu(m);
建议看看eight院长关于矢量化编程的精华帖子
回复 #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 编辑 ] 原帖由 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,看看是否这个问题
回复 #4 eight 的帖子
多谢,我看看。搜索到了,如下:
在某些计算过程中出现内存不足是maple本身的固有缺陷,对此maple已经承认,所以会给你个命令:clear maplemex,应该是释放内存的吧,可以部分解决计算内存不足问题。我当时的做法是在循环中每隔一段时间执行一次clear maplemex。
程序修改过了,但愿可行。多谢eight指点。
可以运行很久了!突破100大关了,现在运行到好几百都没问题了,多谢了!
[ 本帖最后由 donkeyxu 于 2007-10-15 21:05 编辑 ]
页:
[1]