Numerical integration/Adaptive Simpson's method: Difference between revisions
Content added Content deleted
(Added Pascal before →{{header|Perl}}) |
(→{{header|Pascal}}: Do not redundantly pass around f.) |
||
Line 1,076: | Line 1,076: | ||
depth : integer) : real; |
depth : integer) : real; |
||
procedure quad_asr_simpsons_ ( |
procedure quad_asr_simpsons_ ( a, fa, b, fb : real; |
||
var m, fm, quadval : real); |
|||
var m, fm, quadval: real); |
|||
begin |
begin |
||
m := (a + b) / 2; |
m := (a + b) / 2; |
||
Line 1,085: | Line 1,084: | ||
end; |
end; |
||
function quad_asr_ ( |
function quad_asr_ (a, fa, b, fb : real; |
||
a, fa, b, fb : real; |
|||
tol, whole, m, fm : real; |
tol, whole, m, fm : real; |
||
depth : integer) : real; |
depth : integer) : real; |
||
Line 1,094: | Line 1,092: | ||
delta, tol_ : real; |
delta, tol_ : real; |
||
begin |
begin |
||
quad_asr_simpsons_ ( |
quad_asr_simpsons_ (a, fa, m, fm, lm, flm, left); |
||
quad_asr_simpsons_ ( |
quad_asr_simpsons_ (m, fm, b, fb, rm, frm, right); |
||
delta := left + right - whole; |
delta := left + right - whole; |
||
tol_ := tol / 2; |
tol_ := tol / 2; |
||
Line 1,101: | Line 1,099: | ||
quad_asr_ := left + right + (delta / 15) |
quad_asr_ := left + right + (delta / 15) |
||
else |
else |
||
quad_asr_ := (quad_asr_ ( |
quad_asr_ := (quad_asr_ (a, fa, m, fm, tol_, |
||
left , lm, flm, depth - 1) |
left , lm, flm, depth - 1) |
||
+ quad_asr_ ( |
+ quad_asr_ (m, fm, b, fb, tol_, |
||
right, rm, frm, depth - 1)) |
right, rm, frm, depth - 1)) |
||
end; |
end; |
||
Line 1,110: | Line 1,108: | ||
fa := f(a); |
fa := f(a); |
||
fb := f(b); |
fb := f(b); |
||
quad_asr_simpsons_ ( |
quad_asr_simpsons_ (a, fa, b, fb, m, fm, whole); |
||
quad_asr := quad_asr_ ( |
quad_asr := quad_asr_ (a, fa, b, fb, tol, whole, m, fm, depth) |
||
end; |
end; |
||