Numerical integration: Difference between revisions
Content added Content deleted
(Added C# implementation.) |
|||
Line 1,838: | Line 1,838: | ||
print integrate "i.trapezium "fn2 4 -1 2 ; 2.351014 |
print integrate "i.trapezium "fn2 4 -1 2 ; 2.351014 |
||
print integrate "i.simpsons "fn2 4 -1 2 ; 2.447732</lang> |
print integrate "i.simpsons "fn2 4 -1 2 ; 2.447732</lang> |
||
=={{header|Lua}}== |
|||
<lang lua>function leftRect( f, a, b, n ) |
|||
local h = (b - a) / n |
|||
local x = a |
|||
local sum = 0 |
|||
for i = 1, 100 do |
|||
sum = sum + a + f(x) |
|||
x = x + h |
|||
end |
|||
return sum * h |
|||
end |
|||
function rightRect( f, a, b, n ) |
|||
local h = (b - a) / n |
|||
local x = b |
|||
local sum = 0 |
|||
for i = 1, 100 do |
|||
sum = sum + a + f(x) |
|||
x = x - h |
|||
end |
|||
return sum * h |
|||
end |
|||
function midRect( f, a, b, n ) |
|||
local h = (b - a) / n |
|||
local x = a + h/2 |
|||
local sum = 0 |
|||
for i = 1, 100 do |
|||
sum = sum + a + f(x) |
|||
x = x + h |
|||
end |
|||
return sum * h |
|||
end |
|||
function trapezium( f, a, b, n ) |
|||
local h = (b - a) / n |
|||
local x = a |
|||
local sum = 0 |
|||
for i = 1, 100 do |
|||
sum = sum + f(x)*2 |
|||
x = x + h |
|||
end |
|||
return (b - a) * sum / (2 * n) |
|||
end |
|||
function simpson( f, a, b, n ) |
|||
local h = (b - a) / n |
|||
local sum1 = f(a + h/2) |
|||
local sum2 = 0 |
|||
for i = 1, n-1 do |
|||
sum1 = sum1 + f(a + h * i + h/2) |
|||
sum2 = sum2 + f(a + h * i) |
|||
end |
|||
return (h/6) * (f(a) + f(b) + 4*sum1 + 2*sum2) |
|||
end |
|||
int_methods = { leftRect, rightRect, midRect, trapezium, simpson } |
|||
for i = 1, 5 do |
|||
print( int_methods[i]( function(x) return x^3 end, 0, 1, 100 ) ) |
|||
print( int_methods[i]( function(x) return 1/x end, 1, 100, 1000 ) ) |
|||
print( int_methods[i]( function(x) return x end, 0, 5000, 5000000 ) ) |
|||
print( int_methods[i]( function(x) return x end, 0, 6000, 6000000 ) ) |
|||
end</lang> |
|||
=={{header|MATLAB}}== |
=={{header|MATLAB}}== |