我将在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
答案 0 :(得分:2)
mtrw's评论可能已经部分回答了问题:s
应该在for循环中重新初始化。每次错误过大时,发布的代码都会导致s
不可逆转地增加,因此对于D
较大的值最大 s
到目前为止< / em>将被使用。
此外,由于代码重新评估整个集成而不是重用[0,D-1]中的先前集成,因此除非要明确显示Simpson
函数的容错,否则会浪费大量资源 - s
必须为大D
增加很多才能保持相同的低误差(因为你整合了更大的范围,你必须总结更多的点数。)
最后,你Simpson
的实现当然可以做一些有趣的事情,没有人看到它就没人知道......