2010-12-18 798 views
0

我要在MATLAB中编写一个程序,它接受一个函数,将D值从10设置为100(for循环),将函数与Simpson规则(while循环),然后显示它。现在,这对于第一个7-8值来说工作得很好,但这需要更长的时间,并且最终耗尽内存,我不明白其中的原因。这是到目前为止的代码:MATLAB程序占用我的内存越来越多

global D; 
s=200; 
tolerance = 9*10^(-5); 
for D=10:1:100 
    r = Simpson(@f,0,D,s); 
    error = 1; 
    while(error>tolerance) 
     s = 2*s; 
     error = (1/15)*(Simpson(@f,0,D,s)-r); 
     r = Simpson(@f,0,D,s); 
    end 
    clear error; 
    disp(r) 
end 
+1

在你的代码没有什么很糟糕。你可以发布'f'吗? “辛普森”是你的惯例吗?看看Mathworks网站,它看起来像“quad”(http://www.mathworks.com/help/techdoc/ref/quad.html)是标准的辛普森规则函数。你也可以发布。就一般风格的笔记而言,'D'必须是全球性的; 'clear error'可能是不必要的,你需要在'while'循环之前重新初始化's'吗? – mtrw 2010-12-18 16:42:53

回答

2

mtrw's评论可能已经回答了这个问题部分:s应内部重新初始化for循环。张贴的代码产生s每次误差过大不可逆转地增加,因此对于较大的D最大s到目前为止将被使用。

此外,由于代码重新评估整个集成,而不是从[0,d-1]你,除非你想明确地显示你的Simpson功能的容错浪费大量的资源再利用以前的集成 - s会为了维持相同的低误差(因为你在更大的范围内进行积分,你必须总结更多的点数),所以必须增加大量的D

最后,你的Simpson实施当然可以做有趣的东西为好,这没有人能告诉,没有看到它...