Numerical integration: Difference between revisions
Content added Content deleted
(adding lambdatalk) |
(Added Wren) |
||
Line 5,414: | Line 5,414: | ||
Next i |
Next i |
||
End Sub</lang> |
End Sub</lang> |
||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-fmt}} |
|||
<lang ecmascript>import "/fmt" for Fmt |
|||
var integrate = Fn.new { |a, b, n, f| |
|||
var h = (b - a) / n |
|||
var sum = List.filled(5, 0) |
|||
for (i in 0...n) { |
|||
var x = a + i * h |
|||
sum[0] = sum[0] + f.call(x) |
|||
sum[1] = sum[1] + f.call(x + h/2) |
|||
sum[2] = sum[2] + f.call(x + h) |
|||
sum[3] = sum[3] + (f.call(x) + f.call(x+h))/2 |
|||
sum[4] = sum[4] + (f.call(x) + 4 * f.call(x + h/2) + f.call(x + h))/6 |
|||
} |
|||
var methods = ["LeftRect ", "MidRect ", "RightRect", "Trapezium", "Simpson "] |
|||
for (i in 0..4) Fmt.print("$s = $h", methods[i], sum[i] * h) |
|||
System.print() |
|||
} |
|||
integrate.call(0, 1, 100) { |f| f * f * f } |
|||
integrate.call(1, 100, 1000) { |f| 1 / f } |
|||
integrate.call(0, 5000, 5000000) { |f| f } |
|||
integrate.call(0, 6000, 6000000) { |f| f } |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
LeftRect = 0.245025 |
|||
MidRect = 0.249988 |
|||
RightRect = 0.255025 |
|||
Trapezium = 0.250025 |
|||
Simpson = 0.25 |
|||
LeftRect = 4.654991 |
|||
MidRect = 4.604763 |
|||
RightRect = 4.556981 |
|||
Trapezium = 4.605986 |
|||
Simpson = 4.60517 |
|||
LeftRect = 12499997.5 |
|||
MidRect = 12500000 |
|||
RightRect = 12500002.5 |
|||
Trapezium = 12500000 |
|||
Simpson = 12500000 |
|||
LeftRect = 17999997 |
|||
MidRect = 18000000 |
|||
RightRect = 18000003 |
|||
Trapezium = 18000000 |
|||
Simpson = 18000000 |
|||
</pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |