我将用MATLAB编写一个程序,该程序接受一个函数,将值D设置为从10到100 ( for循环),将该函数与Simpson规则( while循环)集成,然后显示它。现在,这对前7-8值很有效,但是它需要更长的时间,最终我会耗尽内存,我不明白为什么会这样。这是目前为止的代码:
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 发布于 2011-06-23 15:35:20
mtrw's注释可能已经部分回答了这个问题:s应该在for循环中重新初始化。每次错误太大时,发布的代码都会导致s不可逆转地增加,因此对于较大的D值,将使用到目前为止最大的s。
此外,由于代码会重新评估整个积分,而不是重用以前从0开始的积分,因此D-1会浪费大量资源,除非您想要显式地显示Simpson函数的容错能力-- s必须增加很多才能使较大的D保持相同的低错误(因为您的积分范围更大,所以您必须对更多点求和)。
最后,您的Simpson实现当然也可以做一些有趣的事情,没有人不看就能看出来……
https://stackoverflow.com/questions/4478834
复制相似问题