Numerical integration: Difference between revisions

add scala
m ({{omit from|GUISS}})
(add scala)
Line 2,944:
trapezium 1.98352353750945 (-0.8%)
simpson 2.0000067844418 (0.0%)</pre>
 
=={{header|Scala}}==
<lang scala>object NumericalIntegration {
def leftRect(f:Double=>Double, a:Double, b:Double)=f(a)
def midRect(f:Double=>Double, a:Double, b:Double)=f((a+b)/2)
def rightRect(f:Double=>Double, a:Double, b:Double)=f(b)
def trapezoid(f:Double=>Double, a:Double, b:Double)=(f(a)+f(b))/2
def simpson(f:Double=>Double, a:Double, b:Double)=(f(a)+4*f((a+b)/2)+f(b))/6;
 
def fn1(x:Double)=x*x*x
def fn2(x:Double)=1/x
def fn3(x:Double)=x
type Method = (Double=>Double, Double, Double) => Double
def integrate(f:Double=>Double, a:Double, b:Double, steps:Double, m:Method)={
val delta:Double=(b-a)/steps
delta*(a until b by delta).foldLeft(0.0)((s,x) => s+m(f, x, x+delta))
}
 
def print(f:Double=>Double, a:Double, b:Double, steps:Double)={
println("rectangular left : %f".format(integrate(f, a, b, steps, leftRect)))
println("rectangular middle : %f".format(integrate(f, a, b, steps, midRect)))
println("rectangular right : %f".format(integrate(f, a, b, steps, rightRect)))
println("trapezoid : %f".format(integrate(f, a, b, steps, trapezoid)))
println("simpson : %f".format(integrate(f, a, b, steps, simpson)))
}
def main(args: Array[String]): Unit = {
print(fn1, 0, 1, 100)
println("------")
print(fn2, 1, 100, 1000)
println("------")
print(fn3, 0, 5000, 5000000)
println("------")
print(fn3, 0, 6000, 6000000)
}
}</lang>
Output:
<pre>rectangular left : 0,245025
rectangular middle : 0,249988
rectangular right : 0,255025
trapezoid : 0,250025
simpson : 0,250000
------
rectangular left : 4,654991
rectangular middle : 4,604763
rectangular right : 4,556981
trapezoid : 4,605986
simpson : 4,605170
------
rectangular left : 12499997,500729
rectangular middle : 12500000,000729
rectangular right : 12500002,500729
trapezoid : 12500000,000729
simpson : 12500000,000729
------
rectangular left : 17999997,001390
rectangular middle : 18000000,001391
rectangular right : 18000003,001390
trapezoid : 18000000,001391
simpson : 18000000,001391</pre>
 
=={{header|Scheme}}==
Anonymous user