74 lines
1.4 KiB
Lua
74 lines
1.4 KiB
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
|