Numerical integration: Difference between revisions

Content added Content deleted
No edit summary
Line 165: Line 165:
Sum : Scalar := F(A) + F(B);
Sum : Scalar := F(A) + F(B);
X : Scalar := 1.0;
X : Scalar := 1.0;
begin
begin
while X <= Scalar (N) - 1.0 loop
while X <= Scalar (N) - 1.0 loop
Sum := Sum + 2.0 * F (A + X * (B - A) / Scalar (N));
Sum := Sum + 2.0 * F (A + X * (B - A) / Scalar (N));
Line 175: Line 175:
function Simpsons (A, B : Scalar; N : Positive) return Scalar is
function Simpsons (A, B : Scalar; N : Positive) return Scalar is
H : constant Scalar := (B - A) / Scalar (N);
H : constant Scalar := (B - A) / Scalar (N);
Sum_1 : Scalar := 0.0;
Sum_U : Scalar := 0.0;
Sum_2 : Scalar := 0.0;
Sum_E : Scalar := 0.0;
begin
begin
for I in 0 .. N - 1 loop
for I in 1 .. N - 1 loop
Sum_1 := Sum_1 + F (A + H * Scalar (I) + 0.5 * H);
if I mod 2 /= 0 then
Sum_2 := Sum_2 + F (A + H * Scalar (I));
Sum_U := Sum_U + F (A + H * Scalar (I));
else
Sum_E := Sum_E + F (A + H * Scalar (I));
end if;
end loop;
end loop;
return H / 6.0 * (F (A) + F (B) + 4.0 * Sum_1 + 2.0 * Sum_2);
return (H / 3.0) * (F (A) + F (B) + 4.0 * Sum_U + 2.0 * Sum_E);
end Simpsons;
end Simpsons;
end Integrate;</lang>
end Integrate;</lang>