我已经尝试过,只是为了好玩,为复合辛普森规则编写一个 MatLab 代码。据我所知,代码是正确的,但我的答案并不像我想要的那样准确。如果我在函数 f = cos(x) + e^(x^2) 上尝试我的代码,其中 a = 0,b = 1 和 n = 7,我的答案大约是 1,9,而它应该是 2, 3. 如果我使用 Wikipedia 上提供的算法,我会得到一个非常接近 n = 7 的近似值,所以我的代码显然不够好。如果有人能在我的代码中看到任何错误,我将不胜感激!
function x = compsimp(a,b,n,f)
% The function implements the composite Simpson's rule
h = (b-a)/n;
x = zeros(1,n+1);
x(1) = a;
x(n+1) = b;
p = 0;
q = 0;
% Define the x-vector
for i = 2:n
x(i) = a + (i-1)*h;
end
% Define the terms to be multiplied by 4
for i = 2:((n+1)/2)
p = p + (f(x(2*i -2)));
end
% Define the terms to be multiplied by 2
for i = 2:((n-1)/2)
q = q + (f(x(2*i -1)));
end
% Calculate final output
x = (h/3)*(f(a) + 2*q + 4*p + f(b));