楽しみのために、複合シンプソンの法則のMatLabコードを書いてみました。私が見る限り、コードは正しいですが、私の答えは私が望むほど正確ではありません。関数f=cos(x)+ e ^(x ^ 2)でコードを試してみると、a = 0、b = 1、n = 7で、答えはおよそ1,9ですが、2になるはずです。 3.3。ウィキペディアで利用可能なアルゴリズムを使用すると、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));